@ionic/core 8.8.18-nightly.20260812 → 8.8.19-dev.11786610762.137bbb21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1141) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-accordion-group.js +1 -1
  3. package/components/ion-accordion.js +1 -1
  4. package/components/ion-action-sheet.js +1 -1
  5. package/components/ion-alert.js +1 -1
  6. package/components/ion-app.js +1 -1
  7. package/components/ion-avatar.js +1 -1
  8. package/components/ion-back-button.js +1 -1
  9. package/components/ion-backdrop.js +1 -1
  10. package/components/ion-badge.js +1 -1
  11. package/components/ion-breadcrumb.js +1 -1
  12. package/components/ion-breadcrumbs.js +1 -1
  13. package/components/ion-button.js +1 -1
  14. package/components/ion-buttons.js +1 -1
  15. package/components/ion-card-content.js +1 -1
  16. package/components/ion-card-header.js +1 -1
  17. package/components/ion-card-subtitle.js +1 -1
  18. package/components/ion-card-title.js +1 -1
  19. package/components/ion-card.js +1 -1
  20. package/components/ion-checkbox.js +1 -1
  21. package/components/ion-chip.js +1 -1
  22. package/components/ion-col.js +1 -1
  23. package/components/ion-content.js +1 -1
  24. package/components/ion-datetime-button.js +1 -1
  25. package/components/ion-datetime.js +1 -1
  26. package/components/ion-divider.d.ts +11 -0
  27. package/components/ion-divider.js +4 -0
  28. package/components/ion-fab-button.js +1 -1
  29. package/components/ion-fab-list.js +1 -1
  30. package/components/ion-fab.js +1 -1
  31. package/components/ion-footer.js +1 -1
  32. package/components/ion-gallery-item.d.ts +11 -0
  33. package/components/ion-gallery-item.js +4 -0
  34. package/components/ion-gallery.d.ts +11 -0
  35. package/components/ion-gallery.js +4 -0
  36. package/components/ion-grid.js +1 -1
  37. package/components/ion-header.js +1 -1
  38. package/components/ion-icon.js +1 -1
  39. package/components/ion-img.js +1 -1
  40. package/components/ion-infinite-scroll-content.js +1 -1
  41. package/components/ion-infinite-scroll.js +1 -1
  42. package/components/ion-input-otp.js +1 -1
  43. package/components/ion-input-password-toggle.js +1 -1
  44. package/components/ion-input.js +1 -1
  45. package/components/ion-item-divider.js +1 -1
  46. package/components/ion-item-group.js +1 -1
  47. package/components/ion-item-option.js +1 -1
  48. package/components/ion-item-options.js +1 -1
  49. package/components/ion-item-sliding.js +1 -1
  50. package/components/ion-item.js +1 -1
  51. package/components/ion-label.js +1 -1
  52. package/components/ion-list-header.js +1 -1
  53. package/components/ion-list.js +1 -1
  54. package/components/ion-loading.js +1 -1
  55. package/components/ion-menu-button.js +1 -1
  56. package/components/ion-menu-toggle.js +1 -1
  57. package/components/ion-menu.js +1 -1
  58. package/components/ion-modal.js +1 -1
  59. package/components/ion-nav-link.js +1 -1
  60. package/components/ion-nav.js +1 -1
  61. package/components/ion-note.js +1 -1
  62. package/components/ion-picker-column-option.js +1 -1
  63. package/components/ion-picker-column.js +1 -1
  64. package/components/ion-picker-legacy-column.js +1 -1
  65. package/components/ion-picker-legacy.js +1 -1
  66. package/components/ion-picker.js +1 -1
  67. package/components/ion-popover.js +1 -1
  68. package/components/ion-progress-bar.js +1 -1
  69. package/components/ion-radio-group.js +1 -1
  70. package/components/ion-radio.js +1 -1
  71. package/components/ion-range.js +1 -1
  72. package/components/ion-refresher-content.js +1 -1
  73. package/components/ion-refresher.js +1 -1
  74. package/components/ion-reorder-group.js +1 -1
  75. package/components/ion-reorder.js +1 -1
  76. package/components/ion-ripple-effect.js +1 -1
  77. package/components/ion-route-redirect.js +1 -1
  78. package/components/ion-route.js +1 -1
  79. package/components/ion-router-link.js +1 -1
  80. package/components/ion-router-outlet.js +1 -1
  81. package/components/ion-router.js +1 -1
  82. package/components/ion-row.js +1 -1
  83. package/components/ion-searchbar.js +1 -1
  84. package/components/ion-segment-button.js +1 -1
  85. package/components/ion-segment-content.js +1 -1
  86. package/components/ion-segment-view.js +1 -1
  87. package/components/ion-segment.js +1 -1
  88. package/components/ion-select-modal.js +1 -1
  89. package/components/ion-select-option.js +1 -1
  90. package/components/ion-select-popover.js +1 -1
  91. package/components/ion-select.js +1 -1
  92. package/components/ion-skeleton-text.js +1 -1
  93. package/components/ion-spinner.js +1 -1
  94. package/components/ion-split-pane.js +1 -1
  95. package/components/ion-tab-bar.js +1 -1
  96. package/components/ion-tab-button.js +1 -1
  97. package/components/ion-tab.js +1 -1
  98. package/components/ion-tabs.js +1 -1
  99. package/components/ion-text.js +1 -1
  100. package/components/ion-textarea.js +1 -1
  101. package/components/ion-thumbnail.js +1 -1
  102. package/components/ion-title.js +1 -1
  103. package/components/ion-toast.js +1 -1
  104. package/components/ion-toggle.js +1 -1
  105. package/components/ion-toolbar.js +1 -1
  106. package/components/p-6hUZIMBp.js +4 -0
  107. package/components/p-9mfpAwJh.js +4 -0
  108. package/components/{p-BkKAANMJ.js → p-B2SvA6NE.js} +1 -1
  109. package/components/p-B2aAAEfp.js +4 -0
  110. package/components/p-B2lpqDWK.js +4 -0
  111. package/components/p-BDoEcs72.js +4 -0
  112. package/components/p-BDqjX7Z_.js +4 -0
  113. package/components/{p-Cf2jSDS8.js → p-BE21dB_a.js} +1 -1
  114. package/components/p-BFpXpzD-.js +4 -0
  115. package/components/{p-cyNmxje6.js → p-BUNIyvqe.js} +1 -1
  116. package/components/p-BYSs-jZz.js +4 -0
  117. package/{dist/ionic/p-mjKAFv89.js → components/p-BYoGvMgh.js} +1 -1
  118. package/components/p-BYrCPOBM.js +4 -0
  119. package/components/{p-DqLB8yFQ.js → p-BZwQa9ey.js} +1 -1
  120. package/components/p-BbVhJs-a.js +4 -0
  121. package/components/p-BhRXIcSN.js +4 -0
  122. package/components/p-BjW8SOqw.js +4 -0
  123. package/components/p-BsiHrVPa.js +4 -0
  124. package/components/p-BwKpO3Is.js +4 -0
  125. package/components/p-Bz8jnuiy.js +4 -0
  126. package/components/p-C-Ea1l5K.js +4 -0
  127. package/components/p-C3X10Pc6.js +4 -0
  128. package/{dist/ionic/p-DC3RagnA.js → components/p-CA4M5WkT.js} +1 -1
  129. package/components/p-CH6jbAEI.js +4 -0
  130. package/components/p-CJE5t2qs.js +4 -0
  131. package/components/p-CODBQrPj.js +4 -0
  132. package/components/p-CUbb1HkU.js +4 -0
  133. package/components/p-CVYFPBs-.js +4 -0
  134. package/components/p-CVoLDZ7z.js +4 -0
  135. package/components/p-CZrORZXS.js +4 -0
  136. package/components/p-Cc3oC60a.js +4 -0
  137. package/components/{p-ChIZKXUu.js → p-Ch8jco3x.js} +1 -1
  138. package/components/p-CmoUesXp.js +4 -0
  139. package/components/{p-C_hpsif8.js → p-CpHPq11n.js} +1 -1
  140. package/components/p-CyNW8ypn.js +4 -0
  141. package/components/{p-D7uN07a3.js → p-CzlL9T_X.js} +1 -1
  142. package/components/p-CzxyxYID.js +4 -0
  143. package/components/p-D0Iqw6OZ.js +4 -0
  144. package/components/p-D0LT3Z3i.js +4 -0
  145. package/components/p-D1t981Ih.js +4 -0
  146. package/components/p-D6tqrIYY.js +4 -0
  147. package/components/p-D9C5yWpF.js +4 -0
  148. package/components/p-DCRXgAoM.js +4 -0
  149. package/components/p-DL5wyRub.js +4 -0
  150. package/components/p-DQlXUUDh.js +4 -0
  151. package/components/p-DRWN7QM2.js +4 -0
  152. package/components/p-DaJxRxSQ.js +4 -0
  153. package/components/p-DbmfFkd1.js +4 -0
  154. package/components/p-Dhi5xtNS.js +4 -0
  155. package/components/p-DnwLgh9U.js +4 -0
  156. package/components/p-DoZB3DcY.js +4 -0
  157. package/components/p-Dovs7FIs.js +4 -0
  158. package/components/p-DrrpZB81.js +4 -0
  159. package/components/p-DrzWRqnG.js +4 -0
  160. package/components/p-DylrHLJF.js +4 -0
  161. package/components/p-Dypq4kXE.js +4 -0
  162. package/components/p-DzeMJvWL.js +4 -0
  163. package/components/p-Dzk4Tr0X.js +4 -0
  164. package/components/p-Rkm2AOZ2.js +4 -0
  165. package/components/p-UYngqo1f.js +4 -0
  166. package/components/p-Va26YR7l.js +4 -0
  167. package/components/p-asUhrzOB.js +4 -0
  168. package/components/p-fIOYmaqA.js +4 -0
  169. package/components/p-jlwpz7Ms.js +4 -0
  170. package/components/p-kInyVu79.js +4 -0
  171. package/components/{p-Osve4qkc.js → p-miSYSxcc.js} +1 -1
  172. package/components/{p-A3O24YmY.js → p-paDbTUL9.js} +1 -1
  173. package/components/p-vXpMhGrs.js +4 -0
  174. package/{dist/ionic/p-D13Eaw-8.js → components/p-znZTPd7u.js} +1 -1
  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-qlGmEn5Y.js} +3 -3
  221. package/dist/cjs/{app-globals-Dd89e0MR.js → app-globals-CtK-3pCu.js} +1 -1
  222. package/dist/cjs/{button-active-COnxOe4X.js → button-active-CugpWmFI.js} +2 -2
  223. package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-BixsAzyb.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-2hAy_qdm.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-COAsdjOc.js} +1 -1
  231. package/dist/cjs/{framework-delegate-BgU6U9Ez.js → framework-delegate-CJT_QJQI.js} +4 -2
  232. package/dist/cjs/{haptic-ClPPQ_PS.js → haptic-BFgF-QCg.js} +1 -1
  233. package/dist/cjs/{helpers-gntk8bfm.js → helpers-Fh1iXsX9.js} +71 -4
  234. package/dist/cjs/{index-BfaXsATC.js → index-C1knGA9x.js} +53 -4
  235. package/dist/cjs/{index-ooS8B4p9.js → index-CM8iGvyx.js} +15 -15
  236. package/dist/cjs/{index-BhhuJ1Yx.js → index-CNicxECl.js} +9 -8
  237. package/dist/cjs/{index-DqmRDbxg.js → index-CxDnX7hd.js} +3 -1
  238. package/dist/cjs/{index-BS2uhvhT.js → index-D94mERjz.js} +4 -4
  239. package/dist/cjs/{index-BiRrzGDi.js → index-DRFkZu3V.js} +2 -2
  240. package/dist/cjs/index-YYUVCfP-.js +429 -0
  241. package/dist/cjs/index.cjs.js +16 -16
  242. package/dist/cjs/{input-shims-Bn1cXfCM.js → input-shims-C8NCYfWv.js} +18 -17
  243. package/dist/cjs/{input.utils-BwhxZooW.js → input.utils-CYZZsbdf.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 +508 -194
  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 +121 -46
  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 +307 -143
  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 +42 -23
  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-DvEcO0tQ.js +519 -0
  300. package/dist/cjs/ionic.cjs.js +4 -4
  301. package/dist/cjs/{ios.transition-IMJRwn29.js → ios.transition-BgDCUY4Y.js} +7 -5
  302. package/dist/cjs/{item-multiple-inputs-jOJZE_I0.js → item-multiple-inputs-DKn76MYO.js} +1 -1
  303. package/dist/cjs/{keyboard-UuAS4D_9.js → keyboard-BbZXOwZg.js} +1 -1
  304. package/dist/cjs/{keyboard-hHzlEQpk.js → keyboard-nne7rvBK.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-Debf4tYr.js} +6 -5
  308. package/dist/cjs/{notch-controller-_SwR025y.js → notch-controller-CFlPw7ER.js} +4 -4
  309. package/dist/cjs/overlay-control-label-DnRLQR1t.js +52 -0
  310. package/dist/cjs/{overlays-DuSEMhIW.js → overlays-DYBUkNQu.js} +309 -18
  311. package/dist/cjs/scroll-hide-controller-DAf_DwKc.js +345 -0
  312. package/dist/cjs/select-option-render-BqJEK1N1.js +124 -0
  313. package/dist/cjs/{status-tap-CSvBT7FV.js → status-tap-hwqc0yb_.js} +4 -3
  314. package/dist/cjs/{swipe-back-CuIiziaa.js → swipe-back-DqQx5QCp.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 +68 -12
  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 +97 -20
  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 +76 -10
  498. package/dist/collection/components/modal/modal.ionic.css +255 -0
  499. package/dist/collection/components/modal/modal.ios.css +178 -70
  500. package/dist/collection/components/modal/modal.js +62 -19
  501. package/dist/collection/components/modal/modal.md.css +178 -70
  502. package/dist/collection/components/modal/safe-area-utils.js +35 -0
  503. package/dist/collection/components/nav/nav.css +7 -1
  504. package/dist/collection/components/nav/nav.js +11 -5
  505. package/dist/collection/components/nav-link/nav-link.js +5 -1
  506. package/dist/collection/components/note/note.ios.css +12 -0
  507. package/dist/collection/components/note/note.js +11 -8
  508. package/dist/collection/components/note/note.md.css +12 -0
  509. package/dist/collection/components/picker/picker.ios.css +15 -3
  510. package/dist/collection/components/picker/picker.js +8 -5
  511. package/dist/collection/components/picker/picker.md.css +15 -3
  512. package/dist/collection/components/picker-column/picker-column.css +9 -2
  513. package/dist/collection/components/picker-column/picker-column.js +8 -7
  514. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +6 -0
  515. package/dist/collection/components/picker-column-option/picker-column-option.js +13 -7
  516. package/dist/collection/components/picker-column-option/picker-column-option.md.css +6 -0
  517. package/dist/collection/components/picker-legacy/picker.ios.css +13 -1
  518. package/dist/collection/components/picker-legacy/picker.js +7 -6
  519. package/dist/collection/components/picker-legacy/picker.md.css +13 -1
  520. package/dist/collection/components/picker-legacy-column/picker-column.ios.css +12 -0
  521. package/dist/collection/components/picker-legacy-column/picker-column.js +4 -4
  522. package/dist/collection/components/picker-legacy-column/picker-column.md.css +12 -0
  523. package/dist/collection/components/popover/popover.ionic.css +290 -0
  524. package/dist/collection/components/popover/popover.ios.css +29 -1
  525. package/dist/collection/components/popover/popover.js +18 -15
  526. package/dist/collection/components/popover/popover.md.css +29 -1
  527. package/dist/collection/components/progress-bar/progress-bar.ionic.css +287 -0
  528. package/dist/collection/components/progress-bar/progress-bar.ios.css +48 -17
  529. package/dist/collection/components/progress-bar/progress-bar.js +43 -7
  530. package/dist/collection/components/progress-bar/progress-bar.md.css +48 -17
  531. package/dist/collection/components/radio/radio.ionic.css +422 -0
  532. package/dist/collection/components/radio/radio.ios.css +207 -102
  533. package/dist/collection/components/radio/radio.js +14 -9
  534. package/dist/collection/components/radio/radio.md.css +207 -102
  535. package/dist/collection/components/radio-group/radio-group.ionic.css +119 -0
  536. package/dist/collection/components/radio-group/radio-group.ios.css +43 -19
  537. package/dist/collection/components/radio-group/radio-group.js +48 -7
  538. package/dist/collection/components/radio-group/radio-group.md.css +43 -19
  539. package/dist/collection/components/range/range.ionic.css +567 -0
  540. package/dist/collection/components/range/range.ios.css +128 -85
  541. package/dist/collection/components/range/range.js +16 -10
  542. package/dist/collection/components/range/range.md.css +128 -85
  543. package/dist/collection/components/refresher/refresher.ios.css +14 -1
  544. package/dist/collection/components/refresher/refresher.js +11 -8
  545. package/dist/collection/components/refresher/refresher.md.css +15 -2
  546. package/dist/collection/components/refresher-content/refresher-content.js +28 -7
  547. package/dist/collection/components/reorder/reorder.ios.css +6 -0
  548. package/dist/collection/components/reorder/reorder.js +33 -6
  549. package/dist/collection/components/reorder/reorder.md.css +6 -0
  550. package/dist/collection/components/reorder-group/reorder-group.css +6 -0
  551. package/dist/collection/components/reorder-group/reorder-group.js +8 -4
  552. package/dist/collection/components/ripple-effect/{ripple-effect.css → ripple-effect.common.css} +7 -1
  553. package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +215 -0
  554. package/dist/collection/components/ripple-effect/ripple-effect.js +14 -6
  555. package/dist/collection/components/route/route.js +4 -0
  556. package/dist/collection/components/router/router.js +4 -0
  557. package/dist/collection/components/router-link/router-link.css +8 -2
  558. package/dist/collection/components/router-link/router-link.js +9 -5
  559. package/dist/collection/components/router-outlet/router-outlet.css +7 -1
  560. package/dist/collection/components/router-outlet/router-outlet.js +6 -3
  561. package/dist/collection/components/row/row.css +16 -0
  562. package/dist/collection/components/row/row.js +9 -2
  563. package/dist/collection/components/searchbar/searchbar.ionic.css +622 -0
  564. package/dist/collection/components/searchbar/searchbar.ios.css +56 -18
  565. package/dist/collection/components/searchbar/searchbar.js +191 -42
  566. package/dist/collection/components/searchbar/searchbar.md.css +56 -18
  567. package/dist/collection/components/segment/segment.ionic.css +115 -0
  568. package/dist/collection/components/segment/segment.ios.css +45 -2
  569. package/dist/collection/components/segment/segment.js +11 -8
  570. package/dist/collection/components/segment/segment.md.css +45 -2
  571. package/dist/collection/components/segment-button/segment-button.ionic.css +352 -0
  572. package/dist/collection/components/segment-button/segment-button.ios.css +146 -105
  573. package/dist/collection/components/segment-button/segment-button.js +11 -8
  574. package/dist/collection/components/segment-button/segment-button.md.css +148 -107
  575. package/dist/collection/components/segment-content/segment-content.js +1 -1
  576. package/dist/collection/components/segment-view/segment-view.ios.css +6 -0
  577. package/dist/collection/components/segment-view/segment-view.js +13 -4
  578. package/dist/collection/components/segment-view/segment-view.md.css +6 -0
  579. package/dist/collection/components/select/select.ionic.css +809 -0
  580. package/dist/collection/components/select/select.ios.css +348 -176
  581. package/dist/collection/components/select/select.js +521 -92
  582. package/dist/collection/components/select/select.md.css +364 -178
  583. package/dist/collection/components/select-modal/select-modal.ionic.css +257 -0
  584. package/dist/collection/components/select-modal/select-modal.ios.css +466 -0
  585. package/dist/collection/components/select-modal/select-modal.js +126 -30
  586. package/dist/collection/components/select-modal/select-modal.md.css +394 -0
  587. package/dist/collection/components/select-option/select-option.js +72 -4
  588. package/dist/collection/components/select-popover/select-popover.ionic.css +255 -0
  589. package/dist/collection/components/select-popover/select-popover.ios.css +302 -20
  590. package/dist/collection/components/select-popover/select-popover.js +89 -29
  591. package/dist/collection/components/select-popover/select-popover.md.css +345 -0
  592. package/dist/collection/components/skeleton-text/skeleton-text.css +6 -0
  593. package/dist/collection/components/skeleton-text/skeleton-text.js +9 -5
  594. package/dist/collection/components/spinner/{spinner.css → spinner.ionic.css} +78 -10
  595. package/dist/collection/components/spinner/spinner.js +47 -6
  596. package/dist/collection/components/spinner/spinner.native.css +199 -0
  597. package/dist/collection/components/split-pane/split-pane.ios.css +20 -2
  598. package/dist/collection/components/split-pane/split-pane.js +15 -8
  599. package/dist/collection/components/split-pane/split-pane.md.css +20 -2
  600. package/dist/collection/components/tab/tab.js +6 -2
  601. package/dist/collection/components/tab-bar/tab-bar.ionic.css +249 -0
  602. package/dist/collection/components/tab-bar/tab-bar.ios.css +86 -43
  603. package/dist/collection/components/tab-bar/tab-bar.js +179 -15
  604. package/dist/collection/components/tab-bar/tab-bar.md.css +86 -43
  605. package/dist/collection/components/tab-button/tab-button.ionic.css +373 -0
  606. package/dist/collection/components/tab-button/tab-button.ios.css +171 -95
  607. package/dist/collection/components/tab-button/tab-button.js +54 -9
  608. package/dist/collection/components/tab-button/tab-button.md.css +137 -93
  609. package/dist/collection/components/tabs/tabs.css +7 -1
  610. package/dist/collection/components/tabs/tabs.js +4 -1
  611. package/dist/collection/components/text/text.css +6 -0
  612. package/dist/collection/components/text/text.js +7 -6
  613. package/dist/collection/components/textarea/textarea.ionic.css +898 -0
  614. package/dist/collection/components/textarea/textarea.ios.css +298 -158
  615. package/dist/collection/components/textarea/textarea.js +162 -24
  616. package/dist/collection/components/textarea/textarea.md.css +312 -159
  617. package/dist/collection/components/thumbnail/thumbnail.css +6 -0
  618. package/dist/collection/components/thumbnail/thumbnail.js +9 -2
  619. package/dist/collection/components/title/title.ionic.css +127 -0
  620. package/dist/collection/components/title/title.ios.css +32 -4
  621. package/dist/collection/components/title/title.js +13 -7
  622. package/dist/collection/components/title/title.md.css +39 -4
  623. package/dist/collection/components/toast/animations/utils.js +1 -1
  624. package/dist/collection/components/toast/toast.ionic.css +394 -0
  625. package/dist/collection/components/toast/toast.ios.css +84 -45
  626. package/dist/collection/components/toast/toast.js +76 -13
  627. package/dist/collection/components/toast/toast.md.css +84 -45
  628. package/dist/collection/components/toggle/toggle.ionic.css +512 -0
  629. package/dist/collection/components/toggle/toggle.ios.css +247 -127
  630. package/dist/collection/components/toggle/toggle.js +72 -18
  631. package/dist/collection/components/toggle/toggle.md.css +245 -127
  632. package/dist/collection/components/toolbar/test/image.svg +1 -0
  633. package/dist/collection/components/toolbar/toolbar.ionic.css +249 -0
  634. package/dist/collection/components/toolbar/toolbar.ios.css +90 -47
  635. package/dist/collection/components/toolbar/toolbar.js +218 -13
  636. package/dist/collection/components/toolbar/toolbar.md.css +90 -47
  637. package/dist/collection/global/ionic-global.js +241 -13
  638. package/dist/collection/utils/css-value-validation.js +39 -0
  639. package/dist/collection/utils/focus-trap.js +13 -2
  640. package/dist/collection/utils/focus-visible.js +22 -0
  641. package/dist/collection/utils/forms/clear-button-press-controller.js +40 -0
  642. package/dist/collection/utils/forms/index.js +1 -0
  643. package/dist/collection/utils/forms/validity.js +31 -0
  644. package/dist/collection/utils/framework-delegate.js +3 -1
  645. package/dist/collection/utils/hardware-back-button.js +15 -0
  646. package/dist/collection/utils/helpers.js +70 -3
  647. package/dist/collection/utils/keyboard/keyboard-controller.js +3 -1
  648. package/dist/collection/utils/media.js +1 -0
  649. package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
  650. package/dist/collection/utils/menu-controller/animations/push.js +2 -1
  651. package/dist/collection/utils/menu-controller/animations/reveal.js +2 -1
  652. package/dist/collection/utils/overlay-control-label.js +47 -0
  653. package/dist/collection/utils/overlays.js +290 -8
  654. package/dist/collection/utils/sanitization/index.js +274 -18
  655. package/dist/collection/utils/scroll-hide-controller.js +178 -0
  656. package/dist/collection/utils/select-option-render.js +119 -0
  657. package/dist/collection/utils/test/playwright/drag-element.js +32 -9
  658. package/dist/collection/utils/test/playwright/generator.js +48 -23
  659. package/dist/collection/utils/test/playwright/page/utils/goto.js +14 -5
  660. package/dist/collection/utils/test/playwright/page/utils/set-content.js +26 -3
  661. package/dist/collection/utils/theme.js +25 -1
  662. package/dist/collection/utils/transition/ios.transition.js +1 -0
  663. package/dist/docs.json +9090 -286
  664. package/dist/esm/{animation-DLJpuoEz.js → animation-ChfHU0RG.js} +2 -2
  665. package/dist/esm/{app-globals-D0C5S4hU.js → app-globals-D1OOQlqq.js} +1 -1
  666. package/dist/esm/{button-active-BSpTQmS9.js → button-active-CPYK0dNo.js} +2 -2
  667. package/dist/esm/{capacitor-CFERIeaU.js → capacitor-DG_4yVXz.js} +1 -1
  668. package/dist/esm/caret-down-D1t981Ih.js +6 -0
  669. package/dist/esm/caret-left-fIOYmaqA.js +6 -0
  670. package/dist/esm/caret-right-BYSs-jZz.js +6 -0
  671. package/dist/esm/clear-button-press-controller-C79TPm5p.js +43 -0
  672. package/dist/esm/config-BwKpO3Is.js +31 -0
  673. package/dist/esm/{focus-visible-BmVRXR1y.js → focus-visible-vXpMhGrs.js} +23 -1
  674. package/dist/esm/{format-CAmvpAez.js → format-2WlZcMvG.js} +1 -1
  675. package/dist/esm/{framework-delegate-FnPGymXL.js → framework-delegate-DO2QXccA.js} +4 -2
  676. package/dist/esm/{haptic-DzAMWJuk.js → haptic-BWlRCqa-.js} +1 -1
  677. package/dist/esm/{helpers-HEqiOzXb.js → helpers-DfF5_wJc.js} +71 -5
  678. package/dist/esm/{index-Q6UPU0Ay.js → index-7eS8XtuU.js} +11 -11
  679. package/dist/esm/{index-DV3sJJW8.js → index-B4Kq2YNk.js} +3 -2
  680. package/dist/esm/{index-B_dQk_WE.js → index-BSDDOljg.js} +4 -4
  681. package/dist/esm/{index-tcQvqkiX.js → index-C0EQceqV.js} +53 -4
  682. package/dist/esm/{index-BRHzoo00.js → index-DNY2GOUg.js} +4 -3
  683. package/dist/esm/index-Mq5pCWmZ.js +424 -0
  684. package/dist/esm/{index-Dw-wN0Ja.js → index-taYRjZGp.js} +2 -2
  685. package/dist/esm/index.js +14 -14
  686. package/dist/esm/{input-shims-LXhI7LEx.js → input-shims-tZfqB5a5.js} +7 -6
  687. package/dist/esm/{input.utils-Y6NgW8bw.js → input.utils-fs4B7WL5.js} +3 -3
  688. package/dist/esm/ion-accordion_2.entry.js +61 -29
  689. package/dist/esm/ion-action-sheet.entry.js +41 -22
  690. package/dist/esm/ion-alert.entry.js +77 -40
  691. package/dist/esm/ion-app_8.entry.js +507 -193
  692. package/dist/esm/ion-avatar_3.entry.js +125 -13
  693. package/dist/esm/ion-back-button.entry.js +31 -22
  694. package/dist/esm/ion-backdrop.entry.js +10 -7
  695. package/dist/esm/ion-breadcrumb_2.entry.js +54 -18
  696. package/dist/esm/ion-button_2.entry.js +61 -24
  697. package/dist/esm/ion-card_5.entry.js +55 -33
  698. package/dist/esm/ion-checkbox.entry.js +34 -17
  699. package/dist/esm/ion-chip.entry.js +50 -9
  700. package/dist/esm/ion-col_3.entry.js +56 -57
  701. package/dist/esm/ion-datetime-button.entry.js +13 -9
  702. package/dist/esm/ion-datetime_3.entry.js +121 -46
  703. package/dist/esm/ion-divider.entry.js +49 -0
  704. package/dist/esm/ion-fab_3.entry.js +44 -28
  705. package/dist/esm/ion-gallery-item.entry.js +57 -0
  706. package/dist/esm/ion-gallery.entry.js +605 -0
  707. package/dist/esm/ion-img.entry.js +8 -4
  708. package/dist/esm/ion-infinite-scroll_2.entry.js +92 -16
  709. package/dist/esm/ion-input-otp.entry.js +74 -9
  710. package/dist/esm/ion-input-password-toggle.entry.js +53 -15
  711. package/dist/esm/ion-input.entry.js +132 -40
  712. package/dist/esm/ion-item-option_3.entry.js +467 -52
  713. package/dist/esm/ion-item_8.entry.js +121 -50
  714. package/dist/esm/ion-loading.entry.js +21 -18
  715. package/dist/esm/ion-menu_3.entry.js +47 -29
  716. package/dist/esm/ion-modal.entry.js +261 -97
  717. package/dist/esm/ion-nav_2.entry.js +14 -11
  718. package/dist/esm/ion-picker-column-option.entry.js +12 -8
  719. package/dist/esm/ion-picker-column.entry.js +13 -13
  720. package/dist/esm/ion-picker.entry.js +10 -6
  721. package/dist/esm/ion-popover.entry.js +21 -19
  722. package/dist/esm/ion-progress-bar.entry.js +27 -9
  723. package/dist/esm/ion-radio_2.entry.js +36 -18
  724. package/dist/esm/ion-range.entry.js +20 -13
  725. package/dist/esm/ion-refresher_2.entry.js +40 -21
  726. package/dist/esm/ion-reorder_2.entry.js +38 -14
  727. package/dist/esm/ion-ripple-effect.entry.js +15 -7
  728. package/dist/esm/ion-route_4.entry.js +11 -10
  729. package/dist/esm/ion-searchbar.entry.js +146 -32
  730. package/dist/esm/ion-segment-content.entry.js +2 -2
  731. package/dist/esm/ion-segment-view.entry.js +13 -3
  732. package/dist/esm/ion-segment_2.entry.js +23 -16
  733. package/dist/esm/ion-select-modal.entry.js +114 -38
  734. package/dist/esm/ion-select_3.entry.js +557 -108
  735. package/dist/esm/ion-spinner.entry.js +30 -8
  736. package/dist/esm/ion-split-pane.entry.js +13 -9
  737. package/dist/esm/ion-tab-bar_2.entry.js +149 -27
  738. package/dist/esm/ion-tab_2.entry.js +8 -7
  739. package/dist/esm/ion-text.entry.js +7 -7
  740. package/dist/esm/ion-textarea.entry.js +137 -23
  741. package/dist/esm/ion-toast.entry.js +45 -21
  742. package/dist/esm/ion-toggle.entry.js +82 -26
  743. package/dist/esm/ionic-global-CEwbmRLz.js +508 -0
  744. package/dist/esm/ionic.js +5 -5
  745. package/dist/esm/{ios.transition-ClFrsIrS.js → ios.transition-C3r-0w96.js} +7 -5
  746. package/dist/esm/{item-multiple-inputs-DlNuqNJm.js → item-multiple-inputs-C6onMFOo.js} +1 -1
  747. package/dist/esm/{keyboard-ywgs5efA.js → keyboard-BzbtCDwZ.js} +4 -3
  748. package/dist/esm/{keyboard-CUw4ekVy.js → keyboard-DYGmALa7.js} +1 -1
  749. package/dist/esm/list-Dhi5xtNS.js +6 -0
  750. package/dist/esm/loader.js +5 -5
  751. package/dist/esm/{md.transition-D0msQmzI.js → md.transition-CPHOF5T9.js} +6 -5
  752. package/dist/esm/{notch-controller-DKDjU_O7.js → notch-controller-CsbpmbOz.js} +2 -2
  753. package/dist/esm/overlay-control-label-CODBQrPj.js +49 -0
  754. package/dist/esm/{overlays-Dg0q2_tJ.js → overlays-C1NQMs9y.js} +306 -15
  755. package/dist/esm/scroll-hide-controller-CfbtPBWv.js +342 -0
  756. package/dist/esm/select-option-render-BlKZ2H83.js +122 -0
  757. package/dist/esm/{status-tap-vO-6s4Yp.js → status-tap-BueE8Coq.js} +4 -3
  758. package/dist/esm/{swipe-back-DQ1q5MgD.js → swipe-back-qmvTRnSq.js} +3 -2
  759. package/dist/esm/{theme-DiVJyqlX.js → theme-DaJxRxSQ.js} +25 -1
  760. package/dist/esm/validity-BjW8SOqw.js +48 -0
  761. package/dist/esm/x-BDqjX7Z_.js +6 -0
  762. package/dist/html.html-data.json +2707 -168
  763. package/dist/ionic/index.esm.js +1 -1
  764. package/dist/ionic/ionic.esm.js +1 -1
  765. package/dist/ionic/p--sroV-k-.js +4 -0
  766. package/dist/ionic/p-00731d20.entry.js +4 -0
  767. package/dist/ionic/p-03c20a50.entry.js +4 -0
  768. package/dist/ionic/p-03ec6673.entry.js +4 -0
  769. package/dist/ionic/p-0405ec57.entry.js +4 -0
  770. package/dist/ionic/p-04f16322.entry.js +4 -0
  771. package/dist/ionic/p-09123f89.entry.js +4 -0
  772. package/dist/ionic/p-15028853.entry.js +4 -0
  773. package/dist/ionic/p-16c5db90.entry.js +4 -0
  774. package/dist/ionic/p-1d1dfb68.entry.js +4 -0
  775. package/dist/ionic/p-231572a0.entry.js +4 -0
  776. package/dist/ionic/p-2740db6e.entry.js +4 -0
  777. package/dist/ionic/p-2a6d4601.entry.js +4 -0
  778. package/dist/ionic/p-2d8fe33c.entry.js +4 -0
  779. package/dist/ionic/p-2dbc50d9.entry.js +4 -0
  780. package/dist/ionic/p-32d3095c.entry.js +4 -0
  781. package/dist/ionic/p-356cd619.entry.js +4 -0
  782. package/dist/ionic/p-391bdb60.entry.js +4 -0
  783. package/dist/ionic/p-3b2ab5b4.entry.js +4 -0
  784. package/dist/ionic/p-4e3e750a.entry.js +4 -0
  785. package/dist/ionic/p-4fee0df6.entry.js +4 -0
  786. package/dist/ionic/p-547d010c.entry.js +4 -0
  787. package/dist/ionic/p-54895118.entry.js +4 -0
  788. package/dist/ionic/p-6163d04d.entry.js +4 -0
  789. package/dist/ionic/p-679c1448.entry.js +4 -0
  790. package/dist/ionic/p-6de524e5.entry.js +4 -0
  791. package/dist/ionic/p-764d7ea2.entry.js +4 -0
  792. package/dist/ionic/{p-C0eMdTCW.js → p-7k7Q1A38.js} +1 -1
  793. package/dist/ionic/p-81BMEE8Q.js +4 -0
  794. package/dist/ionic/p-8d6d7acb.entry.js +4 -0
  795. package/dist/ionic/p-96732fe2.entry.js +4 -0
  796. package/dist/ionic/p-96c4c1b9.entry.js +4 -0
  797. package/dist/ionic/p-9745f518.entry.js +4 -0
  798. package/dist/ionic/p-9a40af3c.entry.js +4 -0
  799. package/dist/ionic/p-9e725104.entry.js +4 -0
  800. package/dist/ionic/p-B4Kq2YNk.js +4 -0
  801. package/dist/ionic/p-BDqjX7Z_.js +4 -0
  802. package/dist/ionic/p-BYSs-jZz.js +4 -0
  803. package/dist/ionic/p-BbWo-T8F.js +4 -0
  804. package/dist/ionic/p-BjW8SOqw.js +4 -0
  805. package/dist/ionic/p-Bvz8PHo5.js +4 -0
  806. package/dist/ionic/p-BwKpO3Is.js +4 -0
  807. package/dist/ionic/p-C0EQceqV.js +5 -0
  808. package/dist/ionic/p-C1_a9uRb.js +4 -0
  809. package/dist/ionic/p-C6WD6qSF.js +4 -0
  810. package/dist/ionic/{p-CKvCXMs9.js → p-C7urd_wE.js} +1 -1
  811. package/{components/p-D13Eaw-8.js → dist/ionic/p-CCgRIJJv.js} +1 -1
  812. package/dist/ionic/p-CEkwLb3L.js +4 -0
  813. package/dist/ionic/p-CGFf6My7.js +4 -0
  814. package/dist/ionic/p-CLUwRxij.js +4 -0
  815. package/dist/ionic/p-CODBQrPj.js +4 -0
  816. package/dist/ionic/p-CP_sVwEm.js +4 -0
  817. package/dist/ionic/p-CSMWpRc0.js +4 -0
  818. package/dist/ionic/{p-VAemlbDS.js → p-CYYo93al.js} +1 -1
  819. package/dist/ionic/p-Cipl19Qe.js +4 -0
  820. package/{components/p-B-JJgYSG.js → dist/ionic/p-CnIzWLAn.js} +1 -1
  821. package/dist/ionic/p-Cvvva6Z7.js +4 -0
  822. package/dist/ionic/p-D1t981Ih.js +4 -0
  823. package/dist/ionic/{p-viFHDgRs.js → p-DINFwXlp.js} +1 -1
  824. package/dist/ionic/p-DIvCXVmD.js +4 -0
  825. package/dist/ionic/p-DTsDGZPd.js +4 -0
  826. package/dist/ionic/p-DaJxRxSQ.js +4 -0
  827. package/dist/ionic/p-Dhi5xtNS.js +4 -0
  828. package/dist/ionic/p-DtQgCTtW.js +4 -0
  829. package/dist/ionic/p-DuRx6DeQ.js +4 -0
  830. package/dist/ionic/p-YGLqXqFd.js +4 -0
  831. package/dist/ionic/p-YIsE5bNG.js +4 -0
  832. package/dist/ionic/p-a61c2ace.entry.js +4 -0
  833. package/dist/ionic/p-abb516e3.entry.js +4 -0
  834. package/dist/ionic/p-b54edee6.entry.js +4 -0
  835. package/dist/ionic/p-c076ac5c.entry.js +4 -0
  836. package/dist/ionic/p-c4ff25cb.entry.js +4 -0
  837. package/dist/ionic/p-c7279756.entry.js +4 -0
  838. package/dist/ionic/p-c7ebed50.entry.js +4 -0
  839. package/dist/ionic/p-cd0037e4.entry.js +4 -0
  840. package/dist/ionic/p-d261938d.entry.js +4 -0
  841. package/dist/ionic/p-d33dfc12.entry.js +4 -0
  842. package/dist/ionic/p-d7764330.entry.js +4 -0
  843. package/dist/ionic/p-defb23a2.entry.js +4 -0
  844. package/dist/ionic/p-df642ef5.entry.js +4 -0
  845. package/dist/ionic/p-e2a35249.entry.js +4 -0
  846. package/dist/ionic/p-e2b952ef.entry.js +4 -0
  847. package/dist/ionic/p-e77cfd1e.entry.js +4 -0
  848. package/dist/ionic/p-ecb9d3d3.entry.js +4 -0
  849. package/dist/ionic/p-efd13adf.entry.js +4 -0
  850. package/dist/ionic/p-f0904c1d.entry.js +4 -0
  851. package/dist/ionic/p-f33689f7.entry.js +4 -0
  852. package/dist/ionic/p-f693efe9.entry.js +4 -0
  853. package/dist/ionic/p-f788396b.entry.js +4 -0
  854. package/dist/ionic/p-fIOYmaqA.js +4 -0
  855. package/dist/ionic/p-fa16fad8.entry.js +4 -0
  856. package/dist/ionic/p-lMb_45ax.js +4 -0
  857. package/dist/ionic/p-oadJNPuo.js +4 -0
  858. package/dist/ionic/p-vXpMhGrs.js +4 -0
  859. package/dist/ionic/p-wNjWCZVO.js +4 -0
  860. package/dist/types/components/accordion/accordion.d.ts +6 -3
  861. package/dist/types/components/accordion-group/accordion-group.d.ts +12 -1
  862. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +3 -7
  863. package/dist/types/components/action-sheet/action-sheet.d.ts +3 -2
  864. package/dist/types/components/alert/alert-interface.d.ts +3 -7
  865. package/dist/types/components/alert/alert.d.ts +3 -2
  866. package/dist/types/components/app/app.d.ts +4 -5
  867. package/dist/types/components/avatar/avatar.d.ts +32 -0
  868. package/dist/types/components/back-button/back-button.d.ts +2 -1
  869. package/dist/types/components/backdrop/backdrop.d.ts +4 -0
  870. package/dist/types/components/badge/badge.d.ts +34 -1
  871. package/dist/types/components/breadcrumb/breadcrumb.d.ts +4 -1
  872. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
  873. package/dist/types/components/button/button.d.ts +23 -8
  874. package/dist/types/components/buttons/buttons.d.ts +5 -1
  875. package/dist/types/components/card/card.d.ts +8 -1
  876. package/dist/types/components/card-content/card-content.d.ts +2 -1
  877. package/dist/types/components/card-header/card-header.d.ts +3 -2
  878. package/dist/types/components/card-subtitle/card-subtitle.d.ts +2 -1
  879. package/dist/types/components/card-title/card-title.d.ts +2 -1
  880. package/dist/types/components/checkbox/checkbox.d.ts +14 -4
  881. package/dist/types/components/chip/chip.d.ts +26 -1
  882. package/dist/types/components/col/col.d.ts +52 -5
  883. package/dist/types/components/content/content.d.ts +15 -0
  884. package/dist/types/components/datetime/datetime.d.ts +26 -1
  885. package/dist/types/components/datetime/utils/data.d.ts +5 -5
  886. package/dist/types/components/datetime-button/datetime-button.d.ts +2 -1
  887. package/dist/types/components/divider/divider.d.ts +20 -0
  888. package/dist/types/components/fab/fab.d.ts +4 -0
  889. package/dist/types/components/fab-button/fab-button.d.ts +5 -3
  890. package/dist/types/components/fab-list/fab-list.d.ts +4 -0
  891. package/dist/types/components/footer/footer-interface.d.ts +1 -0
  892. package/dist/types/components/footer/footer.d.ts +20 -3
  893. package/dist/types/components/gallery/gallery-constants.d.ts +9 -0
  894. package/dist/types/components/gallery/gallery-interface.d.ts +10 -0
  895. package/dist/types/components/gallery/gallery.d.ts +218 -0
  896. package/dist/types/components/gallery/test/utils.d.ts +3 -0
  897. package/dist/types/components/gallery-item/gallery-item.d.ts +33 -0
  898. package/dist/types/components/grid/grid.d.ts +4 -0
  899. package/dist/types/components/header/header-interface.d.ts +1 -0
  900. package/dist/types/components/header/header.d.ts +26 -3
  901. package/dist/types/components/header/header.utils.d.ts +4 -5
  902. package/dist/types/components/img/img.d.ts +3 -0
  903. package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +21 -0
  904. package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +4 -0
  905. package/dist/types/components/input/input.d.ts +34 -5
  906. package/dist/types/components/input-otp/input-otp.d.ts +37 -0
  907. package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +2 -0
  908. package/dist/types/components/item/item.d.ts +11 -4
  909. package/dist/types/components/item-divider/item-divider.d.ts +2 -1
  910. package/dist/types/components/item-group/item-group.d.ts +4 -0
  911. package/dist/types/components/item-option/item-option.d.ts +18 -1
  912. package/dist/types/components/item-options/item-options.d.ts +4 -0
  913. package/dist/types/components/item-sliding/item-sliding.d.ts +47 -1
  914. package/dist/types/components/item-sliding/test/test.utils.d.ts +13 -0
  915. package/dist/types/components/label/label.d.ts +2 -1
  916. package/dist/types/components/list/list.d.ts +15 -1
  917. package/dist/types/components/list-header/list-header.d.ts +2 -1
  918. package/dist/types/components/loading/loading-interface.d.ts +2 -7
  919. package/dist/types/components/loading/loading.d.ts +3 -2
  920. package/dist/types/components/menu/menu.d.ts +3 -0
  921. package/dist/types/components/menu-button/menu-button.d.ts +3 -1
  922. package/dist/types/components/menu-toggle/menu-toggle.d.ts +3 -0
  923. package/dist/types/components/modal/animations/ionic.enter.d.ts +6 -0
  924. package/dist/types/components/modal/animations/ionic.leave.d.ts +6 -0
  925. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  926. package/dist/types/components/modal/modal-interface.d.ts +4 -7
  927. package/dist/types/components/modal/modal.d.ts +16 -4
  928. package/dist/types/components/modal/safe-area-utils.d.ts +6 -0
  929. package/dist/types/components/nav/nav-interface.d.ts +9 -1
  930. package/dist/types/components/nav/nav.d.ts +5 -1
  931. package/dist/types/components/nav-link/nav-link.d.ts +4 -0
  932. package/dist/types/components/note/note.d.ts +2 -1
  933. package/dist/types/components/picker/picker.d.ts +2 -1
  934. package/dist/types/components/picker-column/picker-column.d.ts +2 -1
  935. package/dist/types/components/picker-column-option/picker-column-option.d.ts +4 -0
  936. package/dist/types/components/picker-legacy/picker.d.ts +2 -1
  937. package/dist/types/components/popover/popover-interface.d.ts +3 -6
  938. package/dist/types/components/popover/popover.d.ts +6 -5
  939. package/dist/types/components/progress-bar/progress-bar.d.ts +10 -1
  940. package/dist/types/components/radio/radio.d.ts +2 -1
  941. package/dist/types/components/radio-group/radio-group.d.ts +12 -0
  942. package/dist/types/components/range/range.d.ts +2 -1
  943. package/dist/types/components/refresher/refresher.d.ts +2 -1
  944. package/dist/types/components/refresher-content/refresher-content.d.ts +4 -0
  945. package/dist/types/components/reorder/reorder.d.ts +9 -0
  946. package/dist/types/components/reorder-group/reorder-group.d.ts +4 -0
  947. package/dist/types/components/ripple-effect/ripple-effect.d.ts +4 -0
  948. package/dist/types/components/route/route.d.ts +4 -0
  949. package/dist/types/components/router/router.d.ts +4 -0
  950. package/dist/types/components/router-link/router-link.d.ts +4 -0
  951. package/dist/types/components/router-outlet/router-outlet.d.ts +4 -1
  952. package/dist/types/components/row/row.d.ts +4 -0
  953. package/dist/types/components/searchbar/searchbar.d.ts +56 -10
  954. package/dist/types/components/segment/segment.d.ts +2 -1
  955. package/dist/types/components/segment-button/segment-button.d.ts +2 -1
  956. package/dist/types/components/select/select-interface.d.ts +31 -0
  957. package/dist/types/components/select/select.d.ts +66 -13
  958. package/dist/types/components/select-modal/select-modal.d.ts +8 -0
  959. package/dist/types/components/select-option/select-option.d.ts +45 -1
  960. package/dist/types/components/select-popover/select-popover.d.ts +3 -0
  961. package/dist/types/components/skeleton-text/skeleton-text.d.ts +4 -0
  962. package/dist/types/components/spinner/spinner.d.ts +15 -0
  963. package/dist/types/components/split-pane/split-pane.d.ts +4 -0
  964. package/dist/types/components/tab/tab.d.ts +4 -0
  965. package/dist/types/components/tab-bar/tab-bar-interface.d.ts +1 -0
  966. package/dist/types/components/tab-bar/tab-bar.d.ts +41 -3
  967. package/dist/types/components/tab-button/tab-button.d.ts +12 -1
  968. package/dist/types/components/tabs/tabs.d.ts +3 -0
  969. package/dist/types/components/text/text.d.ts +2 -1
  970. package/dist/types/components/textarea/textarea.d.ts +53 -4
  971. package/dist/types/components/thumbnail/thumbnail.d.ts +4 -0
  972. package/dist/types/components/title/title.d.ts +4 -0
  973. package/dist/types/components/toast/animations/utils.d.ts +2 -2
  974. package/dist/types/components/toast/toast-interface.d.ts +3 -7
  975. package/dist/types/components/toast/toast.d.ts +19 -2
  976. package/dist/types/components/toggle/toggle.d.ts +15 -1
  977. package/dist/types/components/toolbar/toolbar.d.ts +43 -3
  978. package/dist/types/components.d.ts +1881 -210
  979. package/dist/types/global/ionic-global.d.ts +28 -2
  980. package/dist/types/interface.d.ts +3 -0
  981. package/dist/types/utils/config.d.ts +106 -2
  982. package/dist/types/utils/css-value-validation.d.ts +21 -0
  983. package/dist/types/utils/focus-trap.d.ts +1 -1
  984. package/dist/types/utils/focus-visible.d.ts +13 -0
  985. package/dist/types/utils/forms/clear-button-press-controller.d.ts +20 -0
  986. package/dist/types/utils/forms/index.d.ts +1 -0
  987. package/dist/types/utils/forms/validity.d.ts +7 -0
  988. package/dist/types/utils/helpers.d.ts +22 -0
  989. package/dist/types/utils/overlay-control-label.d.ts +34 -0
  990. package/dist/types/utils/overlays-interface.d.ts +31 -1
  991. package/dist/types/utils/overlays.d.ts +1 -1
  992. package/dist/types/utils/sanitization/index.d.ts +58 -2
  993. package/dist/types/utils/scroll-hide-controller.d.ts +56 -0
  994. package/dist/types/utils/select-option-render.d.ts +53 -0
  995. package/dist/types/utils/test/playwright/drag-element.d.ts +16 -3
  996. package/dist/types/utils/test/playwright/generator.d.ts +31 -2
  997. package/dist/types/utils/theme.d.ts +9 -0
  998. package/hydrate/index.js +6481 -1412
  999. package/hydrate/index.mjs +6481 -1412
  1000. package/package.json +9 -5
  1001. package/components/p--JUspHvy.js +0 -4
  1002. package/components/p-ABkNVeU9.js +0 -4
  1003. package/components/p-B9jFTlwE.js +0 -4
  1004. package/components/p-BLmJ0zRm.js +0 -4
  1005. package/components/p-BMI53wYL.js +0 -4
  1006. package/components/p-BMaKgJFV.js +0 -4
  1007. package/components/p-BSEgsdFI.js +0 -4
  1008. package/components/p-BlIAuGv2.js +0 -4
  1009. package/components/p-BmVRXR1y.js +0 -4
  1010. package/components/p-Bnsn6KaP.js +0 -4
  1011. package/components/p-BsBCoGa-.js +0 -4
  1012. package/components/p-BvmB20aD.js +0 -4
  1013. package/components/p-Bz0dSlXZ.js +0 -4
  1014. package/components/p-CHqRYvYm.js +0 -4
  1015. package/components/p-CIGNaXM1.js +0 -4
  1016. package/components/p-CO7fmmxt.js +0 -4
  1017. package/components/p-CQGnMY3n.js +0 -4
  1018. package/components/p-CSZf8_j0.js +0 -4
  1019. package/components/p-C_xFdyXe.js +0 -4
  1020. package/components/p-Cfx4M1Bn.js +0 -4
  1021. package/components/p-CkMSOsFF.js +0 -4
  1022. package/components/p-CmR5uXej.js +0 -4
  1023. package/components/p-Cp4GRDqq.js +0 -4
  1024. package/components/p-CsNJ1ULL.js +0 -4
  1025. package/components/p-CtWGkNnJ.js +0 -4
  1026. package/components/p-CzCbeKys.js +0 -4
  1027. package/components/p-D-aHdMxW.js +0 -4
  1028. package/components/p-D0d8qTwj.js +0 -4
  1029. package/components/p-D3xo7hqU.js +0 -4
  1030. package/components/p-D6Ynv7Xh.js +0 -4
  1031. package/components/p-DCnGU1fF.js +0 -4
  1032. package/components/p-DGvrK8dD.js +0 -4
  1033. package/components/p-DJztqcrH.js +0 -4
  1034. package/components/p-DOFCbuQR.js +0 -4
  1035. package/components/p-DV5mPYQS.js +0 -4
  1036. package/components/p-DWkAgceV.js +0 -4
  1037. package/components/p-DiVJyqlX.js +0 -4
  1038. package/components/p-DqZAXv2t.js +0 -4
  1039. package/components/p-R8zmRi4c.js +0 -4
  1040. package/components/p-SLS1rDZM.js +0 -4
  1041. package/components/p-ZjP4CjeZ.js +0 -4
  1042. package/components/p-aJ6PBUvj.js +0 -4
  1043. package/components/p-gAg0kXZp.js +0 -4
  1044. package/components/p-j5IxBIan.js +0 -4
  1045. package/components/p-k_E4tX5Z.js +0 -4
  1046. package/components/p-oD4kcBRX.js +0 -4
  1047. package/components/p-rCa2eL0j.js +0 -4
  1048. package/components/p-scxfI1Dd.js +0 -4
  1049. package/components/p-vRBNsYbs.js +0 -4
  1050. package/components/p-yzCsOZE2.js +0 -4
  1051. package/dist/cjs/config-D6C-KlA9.js +0 -201
  1052. package/dist/cjs/hardware-back-button-CXmUnTJC.js +0 -121
  1053. package/dist/cjs/index-DkNv4J_i.js +0 -10
  1054. package/dist/cjs/ionic-global-BerQGEpE.js +0 -151
  1055. package/dist/cjs/keyboard-controller-GXBiBRKS.js +0 -167
  1056. package/dist/cjs/validity-BpS37YFM.js +0 -19
  1057. package/dist/esm/config-DQCONYYp.js +0 -195
  1058. package/dist/esm/hardware-back-button-B93Gru0Y.js +0 -115
  1059. package/dist/esm/index-ZjP4CjeZ.js +0 -7
  1060. package/dist/esm/ionic-global-Cp_eT4sZ.js +0 -146
  1061. package/dist/esm/keyboard-controller-BaaVITYt.js +0 -165
  1062. package/dist/esm/validity-DJztqcrH.js +0 -17
  1063. package/dist/ionic/p-01f81ea5.entry.js +0 -4
  1064. package/dist/ionic/p-06c232a4.entry.js +0 -4
  1065. package/dist/ionic/p-0caa922c.entry.js +0 -4
  1066. package/dist/ionic/p-0dc33652.entry.js +0 -4
  1067. package/dist/ionic/p-0fa9c382.entry.js +0 -4
  1068. package/dist/ionic/p-10e833ef.entry.js +0 -4
  1069. package/dist/ionic/p-15c9319c.entry.js +0 -4
  1070. package/dist/ionic/p-21eb76d5.entry.js +0 -4
  1071. package/dist/ionic/p-27d30585.entry.js +0 -4
  1072. package/dist/ionic/p-2a05aa64.entry.js +0 -4
  1073. package/dist/ionic/p-2b204c59.entry.js +0 -4
  1074. package/dist/ionic/p-2bb2cb18.entry.js +0 -4
  1075. package/dist/ionic/p-2fa58e80.entry.js +0 -4
  1076. package/dist/ionic/p-3353c229.entry.js +0 -4
  1077. package/dist/ionic/p-34586ead.entry.js +0 -4
  1078. package/dist/ionic/p-37e720da.entry.js +0 -4
  1079. package/dist/ionic/p-390ca786.entry.js +0 -4
  1080. package/dist/ionic/p-3ae5f277.entry.js +0 -4
  1081. package/dist/ionic/p-4654ae1c.entry.js +0 -4
  1082. package/dist/ionic/p-4745f534.entry.js +0 -4
  1083. package/dist/ionic/p-4858af1f.entry.js +0 -4
  1084. package/dist/ionic/p-4baa5b82.entry.js +0 -4
  1085. package/dist/ionic/p-4e92a11f.entry.js +0 -4
  1086. package/dist/ionic/p-50e1194a.entry.js +0 -4
  1087. package/dist/ionic/p-5334df12.entry.js +0 -4
  1088. package/dist/ionic/p-5d1da0a2.entry.js +0 -4
  1089. package/dist/ionic/p-5eb8e86d.entry.js +0 -4
  1090. package/dist/ionic/p-65ebdf1b.entry.js +0 -4
  1091. package/dist/ionic/p-746fa988.entry.js +0 -4
  1092. package/dist/ionic/p-75dc25ba.entry.js +0 -4
  1093. package/dist/ionic/p-7c319341.entry.js +0 -4
  1094. package/dist/ionic/p-829367ed.entry.js +0 -4
  1095. package/dist/ionic/p-84d5ce05.entry.js +0 -4
  1096. package/dist/ionic/p-874b4bd8.entry.js +0 -4
  1097. package/dist/ionic/p-8eb8ee76.entry.js +0 -4
  1098. package/dist/ionic/p-9eeaBrnk.js +0 -4
  1099. package/dist/ionic/p-9f9db3a2.entry.js +0 -4
  1100. package/dist/ionic/p-9fa3c405.entry.js +0 -4
  1101. package/dist/ionic/p-BGqMS-oh.js +0 -4
  1102. package/dist/ionic/p-BUFIpxKM.js +0 -4
  1103. package/dist/ionic/p-BmVRXR1y.js +0 -4
  1104. package/dist/ionic/p-CFlfIb2g.js +0 -4
  1105. package/dist/ionic/p-CIGNaXM1.js +0 -4
  1106. package/dist/ionic/p-CmcFnK-B.js +0 -4
  1107. package/dist/ionic/p-CtWGkNnJ.js +0 -4
  1108. package/dist/ionic/p-Cx3IXROA.js +0 -4
  1109. package/dist/ionic/p-D-3ycHmd.js +0 -4
  1110. package/dist/ionic/p-D4uTWt4-.js +0 -4
  1111. package/dist/ionic/p-DIuEbVLu.js +0 -4
  1112. package/dist/ionic/p-DJztqcrH.js +0 -4
  1113. package/dist/ionic/p-DV3sJJW8.js +0 -4
  1114. package/dist/ionic/p-DiVJyqlX.js +0 -4
  1115. package/dist/ionic/p-DoJvtrbw.js +0 -4
  1116. package/dist/ionic/p-DqN5EA2O.js +0 -4
  1117. package/dist/ionic/p-DzWaWHGc.js +0 -4
  1118. package/dist/ionic/p-KjNvRoEp.js +0 -4
  1119. package/dist/ionic/p-Nqf6uvGh.js +0 -4
  1120. package/dist/ionic/p-SNAkTDfm.js +0 -4
  1121. package/dist/ionic/p-ZjP4CjeZ.js +0 -4
  1122. package/dist/ionic/p-a3bdcae6.entry.js +0 -4
  1123. package/dist/ionic/p-aaeedb6b.entry.js +0 -4
  1124. package/dist/ionic/p-af55a72f.entry.js +0 -4
  1125. package/dist/ionic/p-b2020591.entry.js +0 -4
  1126. package/dist/ionic/p-b9fadbfe.entry.js +0 -4
  1127. package/dist/ionic/p-biz8zWmJ.js +0 -4
  1128. package/dist/ionic/p-c0fb8edd.entry.js +0 -4
  1129. package/dist/ionic/p-c38b648e.entry.js +0 -4
  1130. package/dist/ionic/p-c4d8641b.entry.js +0 -4
  1131. package/dist/ionic/p-c6e49f3f.entry.js +0 -4
  1132. package/dist/ionic/p-ca2ab74d.entry.js +0 -4
  1133. package/dist/ionic/p-d1aac015.entry.js +0 -4
  1134. package/dist/ionic/p-d889ff6d.entry.js +0 -4
  1135. package/dist/ionic/p-dfa8d673.entry.js +0 -4
  1136. package/dist/ionic/p-ef4c3bee.entry.js +0 -4
  1137. package/dist/ionic/p-f386f6ae.entry.js +0 -4
  1138. package/dist/ionic/p-tcQvqkiX.js +0 -5
  1139. package/dist/ionic/p-uWtqTrG8.js +0 -4
  1140. package/dist/ionic/p-xWb6fgfq.js +0 -4
  1141. /package/dist/collection/components/{input-password-toggle/input-password-toggle.css → refresher-content/refresher-content.css} +0 -0
@@ -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-CEwbmRLz.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 { c as createColorClasses, h as hostContext } 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 { h as hostContext, c as createColorClasses } from './theme-DaJxRxSQ.js';
10
+ import { b as findIonContent, p as printIonContentErrorMsg, g as getScrollElement } from './index-taYRjZGp.js';
11
+ import { c as createScrollHideController, a as createKeyboardController } from './scroll-hide-controller-CfbtPBWv.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-BSDDOljg.js';
16
+ import './keyboard-DYGmALa7.js';
17
+ import './capacitor-DG_4yVXz.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,6 +156,9 @@ const Content = class {
224
156
  */
225
157
  this.scrollEvents = false;
226
158
  }
159
+ fullscreenChanged() {
160
+ this.setupFullscreenResizeObserver();
161
+ }
227
162
  componentWillLoad() {
228
163
  this.inheritedAttributes = inheritAriaAttributes(this.el);
229
164
  }
@@ -263,6 +198,12 @@ const Content = class {
263
198
  closestTabs.addEventListener('ionTabBarLoaded', this.tabsLoadCallback);
264
199
  }
265
200
  }
201
+ // Re-observe on reattach, since componentDidLoad only fires once.
202
+ this.setupFullscreenResizeObserver();
203
+ }
204
+ componentDidLoad() {
205
+ // The custom elements build assigns fullscreen after connectedCallback.
206
+ this.setupFullscreenResizeObserver();
266
207
  }
267
208
  disconnectedCallback() {
268
209
  this.onScrollEnd();
@@ -284,6 +225,42 @@ const Content = class {
284
225
  clearTimeout(this.resizeTimeout);
285
226
  this.resizeTimeout = null;
286
227
  }
228
+ this.destroyFullscreenResizeObserver();
229
+ }
230
+ /**
231
+ * Header and footer sizes can change after load without a window resize
232
+ * firing, so the `resize` listener alone misses those changes.
233
+ *
234
+ * Popover content is excluded because `contain: none` lets its offsets drive
235
+ * the host's own height, which would feed back into the observer.
236
+ */
237
+ setupFullscreenResizeObserver() {
238
+ if (typeof ResizeObserver === 'undefined') {
239
+ return;
240
+ }
241
+ if (!this.fullscreen || hostContext('ion-popover', this.el)) {
242
+ this.destroyFullscreenResizeObserver();
243
+ return;
244
+ }
245
+ if (this.fullscreenResizeObserver !== undefined) {
246
+ return;
247
+ }
248
+ this.fullscreenResizeObserver = new ResizeObserver(() => {
249
+ // A hidden page reports a 0x0 box, which would zero the offsets. Same
250
+ // reasoning as the guard in onResize, minus its debounce so the
251
+ // correction lands in the next frame instead of 100ms later.
252
+ if (this.el.offsetParent === null) {
253
+ return;
254
+ }
255
+ this.resize();
256
+ });
257
+ this.fullscreenResizeObserver.observe(this.el);
258
+ }
259
+ destroyFullscreenResizeObserver() {
260
+ if (this.fullscreenResizeObserver !== undefined) {
261
+ this.fullscreenResizeObserver.disconnect();
262
+ this.fullscreenResizeObserver = undefined;
263
+ }
287
264
  }
288
265
  /**
289
266
  * Rotating certain devices can update
@@ -320,9 +297,8 @@ const Content = class {
320
297
  this.resize();
321
298
  }, 100);
322
299
  }
323
- shouldForceOverscroll() {
300
+ shouldForceOverscroll(mode) {
324
301
  const { forceOverscroll } = this;
325
- const mode = getIonMode(this);
326
302
  return forceOverscroll === undefined ? mode === 'ios' && isPlatform('ios') : forceOverscroll;
327
303
  }
328
304
  resize() {
@@ -518,12 +494,13 @@ const Content = class {
518
494
  render() {
519
495
  const { fixedSlotPlacement, inheritedAttributes, isMainContent, scrollX, scrollY, el } = this;
520
496
  const rtl = isRTL(el) ? 'rtl' : 'ltr';
521
- const mode = getIonMode(this);
522
- const forceOverscroll = this.shouldForceOverscroll();
523
- const transitionShadow = mode === 'ios';
497
+ const theme = getIonTheme(this);
498
+ const mode = getIonMode(this, theme);
499
+ const forceOverscroll = this.shouldForceOverscroll(mode);
500
+ const transitionShadow = theme === 'ios';
524
501
  this.resize();
525
- return (h(Host, Object.assign({ key: '8c1bc4a4df8698d3884741eb38512dc059210c50', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
526
- [mode]: true,
502
+ return (h(Host, Object.assign({ key: '8c7f646f58e7c38fb6d8661b1629b847a16753fb', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
503
+ [theme]: true,
527
504
  'content-fullscreen': this.fullscreen,
528
505
  'content-sizing': hostContext('ion-popover', this.el),
529
506
  overscroll: forceOverscroll,
@@ -531,14 +508,19 @@ const Content = class {
531
508
  }), style: {
532
509
  '--offset-top': `${this.cTop}px`,
533
510
  '--offset-bottom': `${this.cBottom}px`,
534
- } }, inheritedAttributes), h("div", { key: '5e7412549b51ef7543d9378ecab9aac6bc461588', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: '33f6fbf7e1e027c7cbd2dda95b487f18dc648cef', class: {
511
+ } }, inheritedAttributes), h("div", { key: '2b0505c3fdf5c92938b8419c0f57f8d999aec6b3', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: '6b769596e491dea1d3618551497fde9364afdeda', class: {
535
512
  'inner-scroll': true,
536
513
  'scroll-x': scrollX,
537
514
  'scroll-y': scrollY,
538
515
  overscroll: (scrollX || scrollY) && forceOverscroll,
539
- }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '00c8fe7b9e73533c702273c9457d274195d54e98' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
516
+ }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: 'ba36c8468681d028352415039d2cb2a750f2638f' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
540
517
  }
541
518
  get el() { return getElement(this); }
519
+ static get watchers() { return {
520
+ "fullscreen": [{
521
+ "fullscreenChanged": 0
522
+ }]
523
+ }; }
542
524
  };
543
525
  const getParentElement = (el) => {
544
526
  var _a;
@@ -562,7 +544,8 @@ const getPageElement = (el) => {
562
544
  * between the popover and the edges of the screen. But if the popover contains
563
545
  * its own page element, we should use that instead.
564
546
  */
565
- const page = el.closest('ion-app, ion-page, .ion-page, page-inner, .popover-content');
547
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
548
+ const page = el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner, .popover-content`);
566
549
  if (page) {
567
550
  return page;
568
551
  }
@@ -626,45 +609,90 @@ const handleFooterFade = (scrollEl, baseEl) => {
626
609
  });
627
610
  };
628
611
 
629
- 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}`;
612
+ 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}`;
630
613
 
631
- 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}`;
614
+ 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}`;
615
+
616
+ 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}`;
632
617
 
633
618
  const Footer = class {
634
619
  constructor(hostRef) {
635
620
  registerInstance(this, hostRef);
636
621
  this.keyboardCtrl = null;
637
622
  this.keyboardCtrlPromise = null;
623
+ this.scrollHideCtrlPromise = null;
624
+ this.hasWarnedCollapse = false;
625
+ this.fadeSetupId = 0;
638
626
  this.keyboardVisible = false;
639
627
  /**
640
628
  * If `true`, the footer will be translucent.
641
- * Only applies when the mode is `"ios"` and the device supports
629
+ * Only applies when the theme is `"ios"` and the device supports
642
630
  * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
643
631
  *
644
632
  * Note: In order to scroll content behind the footer, the `fullscreen`
645
633
  * attribute needs to be set on the content.
646
634
  */
647
635
  this.translucent = false;
648
- this.checkCollapsibleFooter = () => {
649
- const mode = getIonMode(this);
650
- if (mode !== 'ios') {
636
+ this.checkCollapsibleFooter = async () => {
637
+ const { scrollEffect, collapse } = this;
638
+ if (collapse !== undefined && scrollEffect === undefined && !this.hasWarnedCollapse) {
639
+ this.hasWarnedCollapse = true;
640
+ printIonWarning(`[ion-footer] - The \`collapse\` property is deprecated. Use \`scrollEffect\` instead.\nExample: <ion-footer scroll-effect="${collapse}">`, this.el);
641
+ }
642
+ const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
643
+ // Skip teardown/rebuild if the effect hasn't changed.
644
+ // This prevents keyboard toggles (which trigger re-renders via
645
+ // @State keyboardVisible) from destroying the scroll controller
646
+ // and resetting isHidden.
647
+ if (effect === this.activeEffect) {
651
648
  return;
652
649
  }
653
- const { collapse } = this;
654
- const hasFade = collapse === 'fade';
650
+ const hasHide = effect === 'hide';
651
+ const hasFade = effect === 'fade';
655
652
  this.destroyCollapsibleFooter();
656
- if (hasFade) {
657
- const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
658
- const contentEl = pageEl ? findIonContent(pageEl) : null;
653
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
654
+ const pageEl = this.el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner`);
655
+ const contentEl = pageEl ? findIonContent(pageEl) : null;
656
+ if (hasHide && contentEl) {
657
+ this.activeEffect = effect;
658
+ await this.setupScrollEffectHide(contentEl);
659
+ return;
660
+ }
661
+ // fade via the deprecated `collapse` prop is iOS-only.
662
+ // fade via the new `scrollEffect` prop works in all themes.
663
+ const isModeRestricted = scrollEffect === undefined && getIonTheme(this) !== 'ios';
664
+ if (hasFade && !isModeRestricted) {
659
665
  if (!contentEl) {
660
666
  printIonContentErrorMsg(this.el);
661
667
  return;
662
668
  }
663
669
  this.setupFadeFooter(contentEl);
670
+ this.activeEffect = effect;
671
+ }
672
+ };
673
+ this.setupScrollEffectHide = async (contentEl) => {
674
+ const setupPromise = createScrollHideController(contentEl, {
675
+ el: this.el,
676
+ cssVar: '--internal-footer-hide-height',
677
+ hiddenClass: 'footer-scroll-hidden',
678
+ contentPartnerClass: 'content-footer-hide-scroll-partner',
679
+ contentHiddenClass: 'content-footer-hide-scroll-hidden',
680
+ });
681
+ this.scrollHideCtrlPromise = setupPromise;
682
+ const controller = await setupPromise;
683
+ if (this.scrollHideCtrlPromise === setupPromise) {
684
+ this.scrollHideCtrlPromise = null;
685
+ controller.init();
686
+ this.scrollHideCtrl = controller;
664
687
  }
665
688
  };
666
689
  this.setupFadeFooter = async (contentEl) => {
667
- const scrollEl = (this.scrollEl = await getScrollElement(contentEl));
690
+ const setupId = ++this.fadeSetupId;
691
+ const scrollEl = await getScrollElement(contentEl);
692
+ if (this.fadeSetupId !== setupId) {
693
+ return;
694
+ }
695
+ this.scrollEl = scrollEl;
668
696
  /**
669
697
  * Handle fading of toolbars on scroll
670
698
  */
@@ -709,6 +737,7 @@ const Footer = class {
709
737
  }
710
738
  }
711
739
  disconnectedCallback() {
740
+ this.destroyCollapsibleFooter();
712
741
  if (this.keyboardCtrlPromise) {
713
742
  this.keyboardCtrlPromise.then((ctrl) => ctrl.destroy());
714
743
  this.keyboardCtrlPromise = null;
@@ -719,29 +748,43 @@ const Footer = class {
719
748
  }
720
749
  }
721
750
  destroyCollapsibleFooter() {
751
+ this.activeEffect = undefined;
752
+ this.fadeSetupId++;
753
+ this.scrollHideCtrlPromise = null;
754
+ if (this.scrollHideCtrl) {
755
+ this.scrollHideCtrl.destroy();
756
+ this.scrollHideCtrl = undefined;
757
+ }
722
758
  if (this.scrollEl && this.contentScrollCallback) {
723
759
  this.scrollEl.removeEventListener('scroll', this.contentScrollCallback);
724
760
  this.contentScrollCallback = undefined;
725
761
  }
726
762
  }
727
763
  render() {
728
- const { translucent, collapse } = this;
729
- const mode = getIonMode(this);
764
+ const { translucent, scrollEffect, collapse } = this;
765
+ const theme = getIonTheme(this);
766
+ const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
767
+ // fade via the deprecated `collapse` prop is iOS-only.
768
+ const isModeRestricted = scrollEffect === undefined && theme !== 'ios';
769
+ const hasHide = effect === 'hide';
770
+ const hasFade = effect === 'fade' && !isModeRestricted;
730
771
  const tabs = this.el.closest('ion-tabs');
731
772
  const tabBar = tabs === null || tabs === void 0 ? void 0 : tabs.querySelector(':scope > ion-tab-bar');
732
- return (h(Host, { key: '71939c4bbaef5062532a99ee2e33574102a9abad', role: "contentinfo", class: {
733
- [mode]: true,
773
+ return (h(Host, { key: 'a0777b4a639d22e15374879f018efcf589e756f8', role: "contentinfo", class: {
774
+ [theme]: true,
734
775
  // Used internally for styling
735
- [`footer-${mode}`]: true,
776
+ [`footer-${theme}`]: true,
736
777
  [`footer-translucent`]: translucent,
737
- [`footer-translucent-${mode}`]: translucent,
778
+ [`footer-translucent-${theme}`]: translucent,
738
779
  ['footer-toolbar-padding']: !this.keyboardVisible && (!tabBar || tabBar.slot !== 'bottom'),
739
- [`footer-collapse-${collapse}`]: collapse !== undefined,
740
- } }, mode === 'ios' && translucent && h("div", { key: '2fa14f61661c47c661cecd696176728d6eafa74f', class: "footer-background" }), h("slot", { key: '8e63696e7c528d5c38201e546bf08135290d0945' })));
780
+ 'footer-collapse-fade': hasFade,
781
+ 'footer-scroll-effect-hide': hasHide,
782
+ } }, theme === 'ios' && translucent && h("div", { key: 'd78b46870cbf11c95b066d649c04ec398b66e614', class: "footer-background" }), h("slot", { key: '9dc34787cd29597fe1b1198db317602014ac1483' })));
741
783
  }
742
784
  get el() { return getElement(this); }
743
785
  };
744
786
  Footer.style = {
787
+ ionic: ionicFooterMdCss(),
745
788
  ios: footerIosCss(),
746
789
  md: footerMdCss()
747
790
  };
@@ -793,13 +836,14 @@ const handleContentScroll = (scrollEl, scrollHeaderIndex, contentEl) => {
793
836
  });
794
837
  };
795
838
  const setToolbarBackgroundOpacity = (headerEl, opacity) => {
839
+ var _a;
796
840
  /**
797
841
  * Fading in the backdrop opacity
798
842
  * should happen after the large title
799
843
  * has collapsed, so it is handled
800
844
  * by handleHeaderFade()
801
845
  */
802
- if (headerEl.collapse === 'fade') {
846
+ if (((_a = headerEl.scrollEffect) !== null && _a !== void 0 ? _a : headerEl.collapse) === 'fade') {
803
847
  return;
804
848
  }
805
849
  if (opacity === undefined) {
@@ -957,46 +1001,69 @@ const handleHeaderFade = (scrollEl, baseEl, condenseHeader) => {
957
1001
  * Get the role type for the ion-header.
958
1002
  *
959
1003
  * @param isInsideMenu If ion-header is inside ion-menu.
960
- * @param isCondensed If ion-header has collapse="condense".
961
- * @param mode The current mode.
962
- * @returns 'none' if inside ion-menu or if condensed in md
963
- * mode, otherwise 'banner'.
1004
+ * @returns 'none' if inside ion-menu, otherwise 'banner'.
1005
+ * Condensed headers start as 'banner' and have their role
1006
+ * toggled dynamically by setHeaderActive() on scroll.
964
1007
  */
965
- const getRoleType = (isInsideMenu, isCondensed, mode) => {
1008
+ const getRoleType = (isInsideMenu) => {
966
1009
  // If the header is inside a menu, it should not have the banner role.
967
1010
  if (isInsideMenu) {
968
1011
  return ROLE_NONE;
969
1012
  }
970
- /**
971
- * Only apply role="none" to `md` mode condensed headers
972
- * since the large header is never shown.
973
- */
974
- if (isCondensed && mode === 'md') {
975
- return ROLE_NONE;
976
- }
977
1013
  // Default to banner role.
978
1014
  return ROLE_BANNER;
979
1015
  };
980
1016
 
981
- 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}`;
1017
+ 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}}`;
982
1018
 
983
- const headerMdCss = () => `ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%;z-index:10}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.header-md{-webkit-box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12)}.header-md.header-collapse-condense{display:none}.header-md.ion-no-border{-webkit-box-shadow:none;box-shadow:none}`;
1019
+ const 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}`;
1020
+
1021
+ 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}`;
984
1022
 
985
1023
  const Header = class {
986
1024
  constructor(hostRef) {
987
1025
  registerInstance(this, hostRef);
988
1026
  this.inheritedAttributes = {};
1027
+ this.scrollHideCtrlPromise = null;
1028
+ this.hasWarnedCollapse = false;
1029
+ this.fadeCondenseSetupId = 0;
1030
+ /**
1031
+ * If `true`, the header will have a line at the bottom.
1032
+ * TODO(ROU-10855): add support for this prop on ios/md themes
1033
+ */
1034
+ this.divider = false;
989
1035
  /**
990
1036
  * If `true`, the header will be translucent.
991
- * Only applies when the mode is `"ios"` and the device supports
1037
+ * Only applies when the theme is `"ios"` or `"ionic"` and the device supports
992
1038
  * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
993
1039
  *
994
1040
  * Note: In order to scroll content behind the header, the `fullscreen`
995
1041
  * attribute needs to be set on the content.
996
1042
  */
997
1043
  this.translucent = false;
1044
+ this.setupScrollEffectHide = async (contentEl) => {
1045
+ const setupPromise = createScrollHideController(contentEl, {
1046
+ el: this.el,
1047
+ cssVar: '--internal-header-hide-height',
1048
+ hiddenClass: 'header-scroll-hidden',
1049
+ contentPartnerClass: 'content-header-hide-scroll-partner',
1050
+ contentHiddenClass: 'content-header-hide-scroll-hidden',
1051
+ });
1052
+ this.scrollHideCtrlPromise = setupPromise;
1053
+ const controller = await setupPromise;
1054
+ if (this.scrollHideCtrlPromise === setupPromise) {
1055
+ this.scrollHideCtrlPromise = null;
1056
+ controller.init();
1057
+ this.scrollHideCtrl = controller;
1058
+ }
1059
+ };
998
1060
  this.setupFadeHeader = async (contentEl, condenseHeader) => {
999
- const scrollEl = (this.scrollEl = await getScrollElement(contentEl));
1061
+ const setupId = ++this.fadeCondenseSetupId;
1062
+ const scrollEl = await getScrollElement(contentEl);
1063
+ if (this.fadeCondenseSetupId !== setupId) {
1064
+ return;
1065
+ }
1066
+ this.scrollEl = scrollEl;
1000
1067
  /**
1001
1068
  * Handle fading of toolbars on scroll
1002
1069
  */
@@ -1020,37 +1087,63 @@ const Header = class {
1020
1087
  this.destroyCollapsibleHeader();
1021
1088
  }
1022
1089
  async checkCollapsibleHeader() {
1023
- const mode = getIonMode(this);
1024
- if (mode !== 'ios') {
1090
+ const { scrollEffect, collapse } = this;
1091
+ if (collapse !== undefined && scrollEffect === undefined && !this.hasWarnedCollapse) {
1092
+ this.hasWarnedCollapse = true;
1093
+ printIonWarning(`[ion-header] - The \`collapse\` property is deprecated. Use \`scrollEffect\` instead.\nExample: <ion-header scroll-effect="${collapse}">`, this.el);
1094
+ }
1095
+ const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
1096
+ // Skip teardown/rebuild if the effect hasn't changed.
1097
+ // This prevents re-renders from destroying the scroll controller
1098
+ // and resetting isHidden.
1099
+ if (effect === this.activeEffect) {
1025
1100
  return;
1026
1101
  }
1027
- const { collapse } = this;
1028
- const hasCondense = collapse === 'condense';
1029
- const hasFade = collapse === 'fade';
1102
+ const hasHide = effect === 'hide';
1103
+ const hasCondense = effect === 'condense';
1104
+ const hasFade = effect === 'fade';
1030
1105
  this.destroyCollapsibleHeader();
1031
- if (hasCondense) {
1032
- const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
1033
- const contentEl = pageEl ? findIonContent(pageEl) : null;
1106
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
1107
+ const pageEl = this.el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner`);
1108
+ const contentEl = pageEl ? findIonContent(pageEl) : null;
1109
+ if (hasHide && contentEl) {
1110
+ this.activeEffect = effect;
1111
+ await this.setupScrollEffectHide(contentEl);
1112
+ return;
1113
+ }
1114
+ // condense/fade via the deprecated `collapse` prop are iOS-only.
1115
+ // condense/fade via the new `scrollEffect` prop work in all themes.
1116
+ const isModeRestricted = scrollEffect === undefined && getIonTheme(this) !== 'ios';
1117
+ if (hasCondense && !isModeRestricted) {
1034
1118
  // Cloned elements are always needed in iOS transition
1035
1119
  writeTask(() => {
1036
1120
  const title = cloneElement('ion-title');
1037
1121
  title.size = 'large';
1038
1122
  cloneElement('ion-back-button');
1039
1123
  });
1040
- await this.setupCondenseHeader(contentEl, pageEl);
1124
+ const didSetup = await this.setupCondenseHeader(contentEl, pageEl);
1125
+ if (didSetup) {
1126
+ this.activeEffect = effect;
1127
+ }
1041
1128
  }
1042
- else if (hasFade) {
1043
- const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
1044
- const contentEl = pageEl ? findIonContent(pageEl) : null;
1129
+ else if (hasFade && !isModeRestricted) {
1045
1130
  if (!contentEl) {
1046
1131
  printIonContentErrorMsg(this.el);
1047
1132
  return;
1048
1133
  }
1049
- const condenseHeader = contentEl.querySelector('ion-header[collapse="condense"]');
1134
+ const condenseHeader = contentEl.querySelector('ion-header[collapse="condense"],ion-header[scroll-effect="condense"]');
1135
+ this.activeEffect = effect;
1050
1136
  await this.setupFadeHeader(contentEl, condenseHeader);
1051
1137
  }
1052
1138
  }
1053
1139
  destroyCollapsibleHeader() {
1140
+ this.activeEffect = undefined;
1141
+ this.fadeCondenseSetupId++;
1142
+ this.scrollHideCtrlPromise = null;
1143
+ if (this.scrollHideCtrl) {
1144
+ this.scrollHideCtrl.destroy();
1145
+ this.scrollHideCtrl = undefined;
1146
+ }
1054
1147
  if (this.intersectionObserver) {
1055
1148
  this.intersectionObserver.disconnect();
1056
1149
  this.intersectionObserver = undefined;
@@ -1067,21 +1160,40 @@ const Header = class {
1067
1160
  async setupCondenseHeader(contentEl, pageEl) {
1068
1161
  if (!contentEl || !pageEl) {
1069
1162
  printIonContentErrorMsg(this.el);
1070
- return;
1163
+ return false;
1071
1164
  }
1072
1165
  if (typeof IntersectionObserver === 'undefined') {
1073
- return;
1166
+ return false;
1167
+ }
1168
+ const setupId = ++this.fadeCondenseSetupId;
1169
+ const scrollEl = await getScrollElement(contentEl);
1170
+ if (this.fadeCondenseSetupId !== setupId) {
1171
+ return false;
1172
+ }
1173
+ this.scrollEl = scrollEl;
1174
+ /**
1175
+ * The condense effect requires an ion-title with size="large"
1176
+ * in the condense header. Without it, there is nothing to
1177
+ * collapse into the main header toolbar.
1178
+ */
1179
+ const hasLargeTitle = this.el.querySelector('ion-title[size="large"]') !== null;
1180
+ if (!hasLargeTitle) {
1181
+ printIonWarning('[ion-header] - The condense scroll effect requires an <ion-title size="large"> in the condense header.', this.el);
1182
+ return false;
1074
1183
  }
1075
- this.scrollEl = await getScrollElement(contentEl);
1076
1184
  const headers = pageEl.querySelectorAll('ion-header');
1077
- this.collapsibleMainHeader = Array.from(headers).find((header) => header.collapse !== 'condense');
1185
+ this.collapsibleMainHeader = Array.from(headers).find((header) => {
1186
+ var _a;
1187
+ const effect = (_a = header.scrollEffect) !== null && _a !== void 0 ? _a : header.collapse;
1188
+ return effect !== 'condense';
1189
+ });
1078
1190
  if (!this.collapsibleMainHeader) {
1079
- return;
1191
+ return false;
1080
1192
  }
1081
1193
  const mainHeaderIndex = createHeaderIndex(this.collapsibleMainHeader);
1082
1194
  const scrollHeaderIndex = createHeaderIndex(this.el);
1083
1195
  if (!mainHeaderIndex || !scrollHeaderIndex) {
1084
- return;
1196
+ return false;
1085
1197
  }
1086
1198
  setHeaderActive(mainHeaderIndex, false);
1087
1199
  setToolbarBackgroundOpacity(mainHeaderIndex.el, 0);
@@ -1113,31 +1225,45 @@ const Header = class {
1113
1225
  this.collapsibleMainHeader.classList.add('header-collapse-main');
1114
1226
  }
1115
1227
  });
1228
+ return true;
1116
1229
  }
1117
1230
  render() {
1118
- const { translucent, inheritedAttributes } = this;
1119
- const mode = getIonMode(this);
1120
- const collapse = this.collapse || 'none';
1121
- const isCondensed = collapse === 'condense';
1231
+ const { translucent, inheritedAttributes, divider, scrollEffect, collapse } = this;
1232
+ const theme = getIonTheme(this);
1233
+ const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
1234
+ // condense/fade via the deprecated `collapse` prop are iOS-only.
1235
+ const isModeRestricted = scrollEffect === undefined && theme !== 'ios';
1236
+ const hasHide = effect === 'hide';
1237
+ const hasCondense = effect === 'condense' && !isModeRestricted && this.el.querySelector('ion-title[size="large"]') !== null;
1238
+ const hasFade = effect === 'fade' && !isModeRestricted;
1239
+ // The condense header should be hidden when
1240
+ // - deprecated collapse prop is used on non-iOS (mode restricted), or
1241
+ // - scrollEffect="condense" is set but no ion-title[size="large"] is present
1242
+ const isHiddenCondense = effect === 'condense' && !hasCondense;
1122
1243
  // banner role must be at top level, so remove role if inside a menu
1123
- const roleType = getRoleType(hostContext('ion-menu', this.el), isCondensed, mode);
1124
- return (h(Host, Object.assign({ key: '863c4568cd7b8c0ec55109f193bbbaed68a1346e', role: roleType, class: {
1125
- [mode]: true,
1244
+ const roleType = isHiddenCondense ? 'none' : getRoleType(hostContext('ion-menu', this.el));
1245
+ return (h(Host, Object.assign({ key: '09f60ca014bb7b3a85d3c0a94e7989d5dbc43f46', role: roleType, class: {
1246
+ [theme]: true,
1126
1247
  // Used internally for styling
1127
- [`header-${mode}`]: true,
1248
+ [`header-${theme}`]: true,
1128
1249
  [`header-translucent`]: this.translucent,
1129
- [`header-collapse-${collapse}`]: true,
1130
- [`header-translucent-${mode}`]: this.translucent,
1131
- } }, inheritedAttributes), mode === 'ios' && translucent && h("div", { key: '25c3bdce328b0b35607d154c8b8374679313d881', class: "header-background" }), h("slot", { key: 'b44fab0a9be7920b9650da26117c783e751e1702' })));
1250
+ ['header-collapse-condense']: hasCondense,
1251
+ ['header-collapse-condense-hidden']: isHiddenCondense,
1252
+ ['header-collapse-fade']: hasFade,
1253
+ [`header-translucent-${theme}`]: this.translucent,
1254
+ ['header-divider']: divider,
1255
+ 'header-scroll-effect-hide': hasHide,
1256
+ } }, inheritedAttributes), theme !== 'md' && translucent && h("div", { key: 'fd5ff245ae0166e5e1d50936cacc98c90625db48', class: "header-background" }), h("slot", { key: '1baa31af87b9eb6406a21073ec65afa191dfbb3d' })));
1132
1257
  }
1133
1258
  get el() { return getElement(this); }
1134
1259
  };
1135
1260
  Header.style = {
1261
+ ionic: headerIonicCss(),
1136
1262
  ios: headerIosCss(),
1137
1263
  md: headerMdCss()
1138
1264
  };
1139
1265
 
1140
- const routerOutletCss = () => `:host{left:0;right:0;top:0;bottom:0;position:absolute;contain:layout size style;z-index:0}`;
1266
+ const routerOutletCss = () => `:host{right:0;left:0;top:0;bottom:0;position:absolute;contain:layout size style;z-index:0}`;
1141
1267
 
1142
1268
  const RouterOutlet = class {
1143
1269
  constructor(hostRef) {
@@ -1148,7 +1274,7 @@ const RouterOutlet = class {
1148
1274
  this.lockController = createLockController();
1149
1275
  this.gestureOrAnimationInProgress = false;
1150
1276
  /**
1151
- * The mode determines which platform styles to use.
1277
+ * The mode determines the platform behaviors of the component.
1152
1278
  */
1153
1279
  this.mode = getIonMode(this);
1154
1280
  /**
@@ -1168,7 +1294,7 @@ const RouterOutlet = class {
1168
1294
  this.swipeHandler.onStart();
1169
1295
  }
1170
1296
  };
1171
- 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) => {
1297
+ 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) => {
1172
1298
  if (this.ani) {
1173
1299
  this.ani.onFinish(() => {
1174
1300
  this.gestureOrAnimationInProgress = false;
@@ -1314,7 +1440,7 @@ const RouterOutlet = class {
1314
1440
  return true;
1315
1441
  }
1316
1442
  render() {
1317
- return h("slot", { key: '386c41745b61daba161cf75063da97fe29ba36cb' });
1443
+ return h("slot", { key: '56e3d06ed939755796058e30ef19fbc7f7cb490d' });
1318
1444
  }
1319
1445
  get el() { return getElement(this); }
1320
1446
  static get watchers() { return {
@@ -1325,9 +1451,11 @@ const RouterOutlet = class {
1325
1451
  };
1326
1452
  RouterOutlet.style = routerOutletCss();
1327
1453
 
1328
- 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)}}`;
1454
+ 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}`;
1455
+
1456
+ 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)}}`;
1329
1457
 
1330
- 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}`;
1458
+ 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}`;
1331
1459
 
1332
1460
  const ToolbarTitle = class {
1333
1461
  constructor(hostRef) {
@@ -1350,13 +1478,13 @@ const ToolbarTitle = class {
1350
1478
  return this.size !== undefined ? this.size : 'default';
1351
1479
  }
1352
1480
  render() {
1353
- const mode = getIonMode(this);
1481
+ const theme = getIonTheme(this);
1354
1482
  const size = this.getSize();
1355
- return (h(Host, { key: '44e63f8439df64c470692904427b417e19406476', class: createColorClasses(this.color, {
1356
- [mode]: true,
1483
+ return (h(Host, { key: 'd64e86bed418cba707d4a26c9274f18ed06c0e9e', class: createColorClasses(this.color, {
1484
+ [theme]: true,
1357
1485
  [`title-${size}`]: true,
1358
1486
  'title-rtl': document.dir === 'rtl',
1359
- }) }, h("div", { key: '784cf60a0db16045391891cc8fad0c7dbeba4039', class: "toolbar-title" }, h("slot", { key: '0c720a50479ba257e8756337aeb9b0ab7516a227' }))));
1487
+ }) }, h("div", { key: '386a71e974cde0bfbf5b655d69ed5f718de8ce48', class: "toolbar-title" }, h("slot", { key: '8aa804c9e1b11574a42268805d3117a085e699b4' }))));
1360
1488
  }
1361
1489
  get el() { return getElement(this); }
1362
1490
  static get watchers() { return {
@@ -1366,18 +1494,29 @@ const ToolbarTitle = class {
1366
1494
  }; }
1367
1495
  };
1368
1496
  ToolbarTitle.style = {
1497
+ ionic: titleIonicCss(),
1369
1498
  ios: titleIosCss(),
1370
1499
  md: titleMdCss()
1371
1500
  };
1372
1501
 
1373
- 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%}`;
1502
+ 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}`;
1374
1503
 
1375
- 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}`;
1504
+ 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%}`;
1505
+
1506
+ 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}`;
1376
1507
 
1377
1508
  const Toolbar = class {
1378
1509
  constructor(hostRef) {
1379
1510
  registerInstance(this, hostRef);
1380
1511
  this.childrenStyles = new Map();
1512
+ this.slotClasses = [
1513
+ 'has-start-content',
1514
+ 'has-end-content',
1515
+ 'has-primary-content',
1516
+ 'has-secondary-content',
1517
+ ];
1518
+ this.showClasses = ['show-start', 'show-end', 'show-primary', 'show-secondary'];
1519
+ this.slotSizeVars = ['--start-end-size', '--primary-secondary-size'];
1381
1520
  }
1382
1521
  componentWillLoad() {
1383
1522
  const buttons = Array.from(this.el.querySelectorAll('ion-buttons'));
@@ -1394,6 +1533,173 @@ const Toolbar = class {
1394
1533
  if (lastButtons) {
1395
1534
  lastButtons.classList.add('buttons-last-slot');
1396
1535
  }
1536
+ this.updateSlotClasses();
1537
+ }
1538
+ componentDidLoad() {
1539
+ this.updateSlotClasses();
1540
+ this.updateSlotWidths();
1541
+ }
1542
+ titlePlacementChanged() {
1543
+ this.updateSlotClasses();
1544
+ }
1545
+ /**
1546
+ * Gets the title placement.
1547
+ * Returns the title placement if it is set, otherwise returns `"center"`
1548
+ * for `ionic` and `ios`, and `"start"` for `md`.
1549
+ */
1550
+ getTitlePlacement() {
1551
+ if (this.titlePlacement !== undefined) {
1552
+ return this.titlePlacement;
1553
+ }
1554
+ return getIonTheme(this) === 'ionic' || getIonTheme(this) === 'ios' ? 'center' : 'start';
1555
+ }
1556
+ /**
1557
+ * Updates the CSS custom properties for slot widths
1558
+ * This ensures that slots shown by their met conditions
1559
+ * have a minimum width matching their required slot
1560
+ */
1561
+ updateSlotWidths(tries = 0) {
1562
+ // Set timeout to try to execute after everything is rendered
1563
+ setTimeout(() => {
1564
+ // Attempt to measure and update
1565
+ const success = this.measureAndUpdateSlots();
1566
+ // If not all measurements were successful, try again in 100 ms
1567
+ // cap recursion at 5 tries for safety
1568
+ if (!success && tries < 5) {
1569
+ setTimeout(() => {
1570
+ this.updateSlotWidths(tries + 1);
1571
+ }, 100);
1572
+ }
1573
+ });
1574
+ }
1575
+ /**
1576
+ * Measure the widths of the slots and update the CSS custom properties
1577
+ * for the minimum width of each pair of slots based on the largest width in each pair.
1578
+ * Returns whether we successfully measured all of the slots we expect to have content.
1579
+ * If not, the content probably hasn't rendered yet and we need to try again.
1580
+ */
1581
+ measureAndUpdateSlots() {
1582
+ // Define the relationship between slots based on the conditions array
1583
+ // Group slots that should have the same width
1584
+ const slotPairs = [
1585
+ { name: 'start-end', slots: ['start', 'end'] },
1586
+ { name: 'primary-secondary', slots: ['primary', 'secondary'] },
1587
+ ];
1588
+ // First, measure all slot widths
1589
+ const slotWidths = new Map();
1590
+ let allMeasurementsSuccessful = true;
1591
+ // Measure all slots with content
1592
+ const slots = ['start', 'end', 'primary', 'secondary'];
1593
+ slots.forEach((slot) => {
1594
+ var _a;
1595
+ if (this.el.classList.contains(`has-${slot}-content`)) {
1596
+ const slotElement = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector(`slot[name="${slot}"]`);
1597
+ if (slotElement) {
1598
+ // Check if the slot contains an img or ion-img
1599
+ const assignedElements = slotElement.assignedElements({ flatten: true });
1600
+ const hasImg = assignedElements.some((el) => {
1601
+ if (el.tagName === 'IMG' || el.tagName === 'ION-IMG') {
1602
+ return true;
1603
+ }
1604
+ // Check for nested images
1605
+ return el.querySelector('img, ion-img');
1606
+ });
1607
+ // Temporarily allow slot to size to content by setting flex-basis
1608
+ // to 'auto'. This ensures that slotted images can render at their
1609
+ // intrinsic width for measurement.
1610
+ if (hasImg) {
1611
+ const { name } = slotPairs.find((pair) => pair.slots.includes(slot));
1612
+ this.el.style.setProperty(`--${name}-size`, 'auto');
1613
+ }
1614
+ const width = slotElement.offsetWidth;
1615
+ if (width > 0) {
1616
+ slotWidths.set(slot, width);
1617
+ }
1618
+ else {
1619
+ allMeasurementsSuccessful = false;
1620
+ }
1621
+ }
1622
+ }
1623
+ });
1624
+ // Then set the CSS custom properties based on the largest width in each pair
1625
+ slotPairs.forEach(({ name, slots }) => {
1626
+ // Find the maximum width among the slots in this pair
1627
+ let maxWidth = 0;
1628
+ let hasAnyContent = false;
1629
+ slots.forEach((slot) => {
1630
+ var _a;
1631
+ if (slotWidths.has(slot)) {
1632
+ hasAnyContent = true;
1633
+ maxWidth = Math.max(maxWidth, (_a = slotWidths.get(slot)) !== null && _a !== void 0 ? _a : 0);
1634
+ }
1635
+ });
1636
+ // If at least one slot in the pair has content, set the min-width for the pair
1637
+ if (hasAnyContent && maxWidth > 0) {
1638
+ // Set a single CSS variable for the pair
1639
+ this.el.style.setProperty(`--${name}-size`, `${maxWidth}px`);
1640
+ }
1641
+ });
1642
+ return allMeasurementsSuccessful;
1643
+ }
1644
+ /**
1645
+ * Removes all slot visibility classes and slot width CSS variables.
1646
+ */
1647
+ removeSlotClasses() {
1648
+ this.el.classList.remove(...this.slotClasses, ...this.showClasses);
1649
+ this.slotSizeVars.forEach((cssVar) => this.el.style.removeProperty(cssVar));
1650
+ }
1651
+ updateSlotClasses() {
1652
+ const titlePlacement = this.getTitlePlacement();
1653
+ if (titlePlacement !== 'center') {
1654
+ this.removeSlotClasses();
1655
+ return;
1656
+ }
1657
+ // Check if slots have content
1658
+ const slots = ['start', 'end', 'primary', 'secondary'];
1659
+ const classesToAdd = [];
1660
+ const classesToRemove = [];
1661
+ slots.forEach((slot) => {
1662
+ const slotHasContent = this.hasSlotContent(slot);
1663
+ const slotClass = `has-${slot}-content`;
1664
+ if (slotHasContent) {
1665
+ classesToAdd.push(slotClass);
1666
+ }
1667
+ else {
1668
+ classesToRemove.push(slotClass);
1669
+ }
1670
+ });
1671
+ // Force visibilities in certain conditions. This works by adding a class to the toolbar
1672
+ // named `show-{slot}`. This class will be added if the toolbar has the required slots
1673
+ // and does not have any of the excluded slots, otherwise it will be removed.
1674
+ // This is useful to enforce centering of the toolbar content when there are different amounts
1675
+ // of slots on either side of the toolbar.
1676
+ const conditions = [
1677
+ { name: 'end', requiredSlots: ['start'], excludeSlots: ['end', 'primary'] },
1678
+ { name: 'start', requiredSlots: ['end'], excludeSlots: ['start', 'secondary'] },
1679
+ { name: 'secondary', requiredSlots: ['primary'], excludeSlots: ['secondary', 'start'] },
1680
+ { name: 'primary', requiredSlots: ['secondary'], excludeSlots: ['primary', 'end'] },
1681
+ ];
1682
+ conditions.forEach((condition) => {
1683
+ const hasRequiredSlots = condition.requiredSlots.every((slot) => classesToAdd.includes(`has-${slot}-content`));
1684
+ const hasExcludedSlots = condition.excludeSlots.some((slot) => classesToAdd.includes(`has-${slot}-content`));
1685
+ const className = `show-${condition.name}`;
1686
+ if (hasRequiredSlots && !hasExcludedSlots) {
1687
+ classesToAdd.push(className);
1688
+ }
1689
+ else {
1690
+ classesToRemove.push(className);
1691
+ }
1692
+ });
1693
+ // Add classes to the toolbar element
1694
+ this.el.classList.add(...classesToAdd);
1695
+ this.el.classList.remove(...classesToRemove);
1696
+ // Update slot widths after classes have been updated
1697
+ this.updateSlotWidths();
1698
+ }
1699
+ hasSlotContent(slotName) {
1700
+ var _a;
1701
+ const slotNode = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector(`slot[name="${slotName}"]`);
1702
+ return !!slotNode && slotNode.assignedNodes().length > 0;
1397
1703
  }
1398
1704
  childrenStyle(ev) {
1399
1705
  ev.stopPropagation();
@@ -1418,19 +1724,27 @@ const Toolbar = class {
1418
1724
  }
1419
1725
  }
1420
1726
  render() {
1421
- const mode = getIonMode(this);
1727
+ const theme = getIonTheme(this);
1422
1728
  const childStyles = {};
1423
- this.childrenStyles.forEach((value) => {
1424
- Object.assign(childStyles, value);
1729
+ this.childrenStyles.forEach((style) => {
1730
+ Object.assign(childStyles, style);
1425
1731
  });
1426
- return (h(Host, { key: 'b849db2863778dee6c5a251bffa1b3a657aeb036', class: Object.assign(Object.assign({}, childStyles), createColorClasses(this.color, {
1427
- [mode]: true,
1732
+ const titlePlacement = this.getTitlePlacement();
1733
+ return (h(Host, { key: 'bcb621674157410d7eaeb006779bdd677346587e', class: Object.assign(Object.assign({}, createColorClasses(this.color, {
1734
+ [theme]: true,
1428
1735
  'in-toolbar': hostContext('ion-toolbar', this.el),
1429
- })) }, 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" }))));
1736
+ [`toolbar-title-placement-${titlePlacement}`]: true,
1737
+ })), 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 }))));
1430
1738
  }
1431
1739
  get el() { return getElement(this); }
1740
+ static get watchers() { return {
1741
+ "titlePlacement": [{
1742
+ "titlePlacementChanged": 0
1743
+ }]
1744
+ }; }
1432
1745
  };
1433
1746
  Toolbar.style = {
1747
+ ionic: toolbarIonicCss(),
1434
1748
  ios: toolbarIosCss(),
1435
1749
  md: toolbarMdCss()
1436
1750
  };