@ionic/core 9.0.6-dev.11790615145.1d8c56a2 → 9.0.6-dev.11790776272.1d27d1bd

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 (1098) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-accordion-group.js +1 -1
  3. package/components/ion-accordion.js +1 -1
  4. package/components/ion-action-sheet.js +1 -1
  5. package/components/ion-alert.js +1 -1
  6. package/components/ion-app.js +1 -1
  7. package/components/ion-avatar.js +1 -1
  8. package/components/ion-back-button.js +1 -1
  9. package/components/ion-backdrop.js +1 -1
  10. package/components/ion-badge.js +1 -1
  11. package/components/ion-breadcrumb.js +1 -1
  12. package/components/ion-breadcrumbs.js +1 -1
  13. package/components/ion-button.js +1 -1
  14. package/components/ion-buttons.js +1 -1
  15. package/components/ion-card-content.js +1 -1
  16. package/components/ion-card-header.js +1 -1
  17. package/components/ion-card-subtitle.js +1 -1
  18. package/components/ion-card-title.js +1 -1
  19. package/components/ion-card.js +1 -1
  20. package/components/ion-checkbox.js +1 -1
  21. package/components/ion-chip.js +1 -1
  22. package/components/ion-col.js +1 -1
  23. package/components/ion-content.js +1 -1
  24. package/components/ion-datetime-button.js +1 -1
  25. package/components/ion-datetime.js +1 -1
  26. package/components/ion-divider.d.ts +11 -0
  27. package/components/ion-divider.js +4 -0
  28. package/components/ion-fab-button.js +1 -1
  29. package/components/ion-fab-list.js +1 -1
  30. package/components/ion-fab.js +1 -1
  31. package/components/ion-footer.js +1 -1
  32. package/components/ion-gallery-item.d.ts +11 -0
  33. package/components/ion-gallery-item.js +4 -0
  34. package/components/ion-gallery.d.ts +11 -0
  35. package/components/ion-gallery.js +4 -0
  36. package/components/ion-grid.js +1 -1
  37. package/components/ion-header.js +1 -1
  38. package/components/ion-icon.js +1 -1
  39. package/components/ion-img.js +1 -1
  40. package/components/ion-infinite-scroll-content.js +1 -1
  41. package/components/ion-infinite-scroll.js +1 -1
  42. package/components/ion-input-otp.js +1 -1
  43. package/components/ion-input-password-toggle.js +1 -1
  44. package/components/ion-input.js +1 -1
  45. package/components/ion-item-divider.js +1 -1
  46. package/components/ion-item-group.js +1 -1
  47. package/components/ion-item-option.js +1 -1
  48. package/components/ion-item-options.js +1 -1
  49. package/components/ion-item-sliding.js +1 -1
  50. package/components/ion-item.js +1 -1
  51. package/components/ion-label.js +1 -1
  52. package/components/ion-list-header.js +1 -1
  53. package/components/ion-list.js +1 -1
  54. package/components/ion-loading.js +1 -1
  55. package/components/ion-menu-button.js +1 -1
  56. package/components/ion-menu-toggle.js +1 -1
  57. package/components/ion-menu.js +1 -1
  58. package/components/ion-modal.js +1 -1
  59. package/components/ion-nav-link.js +1 -1
  60. package/components/ion-nav.js +1 -1
  61. package/components/ion-note.js +1 -1
  62. package/components/ion-picker-column-option.js +1 -1
  63. package/components/ion-picker-column.js +1 -1
  64. package/components/ion-picker.js +1 -1
  65. package/components/ion-popover.js +1 -1
  66. package/components/ion-progress-bar.js +1 -1
  67. package/components/ion-radio-group.js +1 -1
  68. package/components/ion-radio.js +1 -1
  69. package/components/ion-range.js +1 -1
  70. package/components/ion-refresher-content.js +1 -1
  71. package/components/ion-refresher.js +1 -1
  72. package/components/ion-reorder-group.js +1 -1
  73. package/components/ion-reorder.js +1 -1
  74. package/components/ion-ripple-effect.js +1 -1
  75. package/components/ion-route-redirect.js +1 -1
  76. package/components/ion-route.js +1 -1
  77. package/components/ion-router-link.js +1 -1
  78. package/components/ion-router-outlet.js +1 -1
  79. package/components/ion-router.js +1 -1
  80. package/components/ion-row.js +1 -1
  81. package/components/ion-searchbar.js +1 -1
  82. package/components/ion-segment-button.js +1 -1
  83. package/components/ion-segment-content.js +1 -1
  84. package/components/ion-segment-view.js +1 -1
  85. package/components/ion-segment.js +1 -1
  86. package/components/ion-select-modal.js +1 -1
  87. package/components/ion-select-option.js +1 -1
  88. package/components/ion-select-popover.js +1 -1
  89. package/components/ion-select.js +1 -1
  90. package/components/ion-skeleton-text.js +1 -1
  91. package/components/ion-spinner.js +1 -1
  92. package/components/ion-split-pane.js +1 -1
  93. package/components/ion-tab-bar.js +1 -1
  94. package/components/ion-tab-button.js +1 -1
  95. package/components/ion-tab.js +1 -1
  96. package/components/ion-tabs.js +1 -1
  97. package/components/ion-text.js +1 -1
  98. package/components/ion-textarea.js +1 -1
  99. package/components/ion-thumbnail.js +1 -1
  100. package/components/ion-title.js +1 -1
  101. package/components/ion-toast.js +1 -1
  102. package/components/ion-toggle.js +1 -1
  103. package/components/ion-toolbar.js +1 -1
  104. package/components/p-0rXxxCTt.js +4 -0
  105. package/components/p-37X-8Gly.js +4 -0
  106. package/components/p-62jMqk_2.js +4 -0
  107. package/components/p-6bixixDn.js +4 -0
  108. package/components/p-8_oeT3pA.js +4 -0
  109. package/components/p-8n1_MTzx.js +4 -0
  110. package/components/{p-DWGgvN5e.js → p-A6ucUP3n.js} +1 -1
  111. package/components/{p-Bu6O-veK.js → p-B2N-uaer.js} +1 -1
  112. package/components/p-B6hzlC5j.js +4 -0
  113. package/components/p-B93Ra6bA.js +4 -0
  114. package/components/p-BNmpijWM.js +4 -0
  115. package/components/p-BUF_V-Kg.js +4 -0
  116. package/components/p-BYk20Mf5.js +4 -0
  117. package/components/{p-yjLe0sN2.js → p-Bdobqe7h.js} +1 -1
  118. package/components/p-BfDzKnZ-.js +4 -0
  119. package/components/p-BhahBl_4.js +4 -0
  120. package/components/p-BiYiyBQx.js +4 -0
  121. package/components/p-BrOe3-hG.js +4 -0
  122. package/components/{p-fFx6WCTj.js → p-BxmCDJGo.js} +1 -1
  123. package/components/p-BzTxsQy7.js +4 -0
  124. package/components/p-C1_1oiK1.js +4 -0
  125. package/components/{p-CVVUo4J1.js → p-CDgG2plB.js} +1 -1
  126. package/components/p-CG2KwvX8.js +4 -0
  127. package/components/p-CJgEqVkU.js +4 -0
  128. package/components/p-CODBQrPj.js +4 -0
  129. package/components/p-CO_NfcFI.js +4 -0
  130. package/components/p-COpUROd5.js +4 -0
  131. package/components/p-CU58nYdK.js +4 -0
  132. package/components/p-CfVt2cSa.js +4 -0
  133. package/components/p-CqJjxXhD.js +4 -0
  134. package/components/{p-Ctw69DyZ.js → p-CscIqeFa.js} +1 -1
  135. package/components/p-Cw238cJK.js +4 -0
  136. package/components/p-CzIKYlnt.js +4 -0
  137. package/components/p-D4qU_GAV.js +4 -0
  138. package/components/p-D5DnKj9A.js +4 -0
  139. package/components/{p-Dlr7b3_2.js → p-D5ld1tBr.js} +1 -1
  140. package/components/{p-C9ioHZq-.js → p-DGbHpbI3.js} +1 -1
  141. package/components/p-DI6CUKfX.js +4 -0
  142. package/components/p-DJHoSlfB.js +4 -0
  143. package/components/p-DKq6UKi0.js +4 -0
  144. package/components/{p-BKeulLTJ.js → p-DSXoSdmA.js} +1 -1
  145. package/components/p-D__93Idk.js +4 -0
  146. package/components/p-DdxgOJke.js +4 -0
  147. package/components/p-DfcwW1aR.js +4 -0
  148. package/components/p-DgFAwQsK.js +4 -0
  149. package/components/{p-T2dnrBya.js → p-Dgl8Vd2X.js} +1 -1
  150. package/components/{p-C_NQIzjP.js → p-Dk28-cNx.js} +1 -1
  151. package/components/p-DkiPZ_fu.js +4 -0
  152. package/components/p-ESP4CxsW.js +4 -0
  153. package/components/p-FyJJr6na.js +4 -0
  154. package/components/p-NcQUGze-.js +4 -0
  155. package/components/p-S3RGszMg.js +4 -0
  156. package/components/p-XNCy3pzc.js +4 -0
  157. package/components/p-YaCudw3M.js +4 -0
  158. package/components/p-YzlvZhlS.js +4 -0
  159. package/components/p-Z0yxDpWf.js +4 -0
  160. package/components/p-ZJCq7HeA.js +4 -0
  161. package/components/p-jQFnlcKd.js +4 -0
  162. package/components/p-yscb8Luf.js +4 -0
  163. package/css/core.css +1 -1
  164. package/css/core.css.map +1 -1
  165. package/css/display.css +1 -1
  166. package/css/display.css.map +1 -1
  167. package/css/flex-utils.css +1 -1
  168. package/css/flex-utils.css.map +1 -1
  169. package/css/float-elements.css.map +1 -1
  170. package/css/global.bundle.css.map +1 -1
  171. package/css/ionic/bundle.ionic.css +1 -0
  172. package/css/ionic/bundle.ionic.css.map +1 -0
  173. package/css/ionic/core.ionic.css +1 -0
  174. package/css/ionic/core.ionic.css.map +1 -0
  175. package/css/ionic/global.bundle.ionic.css +1 -0
  176. package/css/ionic/global.bundle.ionic.css.map +1 -0
  177. package/css/ionic/ionic-swiper.ionic.css +1 -0
  178. package/css/ionic/ionic-swiper.ionic.css.map +1 -0
  179. package/css/ionic/link.ionic.css +1 -0
  180. package/css/ionic/link.ionic.css.map +1 -0
  181. package/css/ionic/structure.ionic.css +1 -0
  182. package/css/ionic/structure.ionic.css.map +1 -0
  183. package/css/ionic/typography.ionic.css +1 -0
  184. package/css/ionic/typography.ionic.css.map +1 -0
  185. package/css/ionic/utils.bundle.ionic.css +1 -0
  186. package/css/ionic/utils.bundle.ionic.css.map +1 -0
  187. package/css/ionic-swiper.css +1 -1
  188. package/css/ionic-swiper.css.map +1 -1
  189. package/css/ionic.bundle.css +1 -1
  190. package/css/ionic.bundle.css.map +1 -1
  191. package/css/normalize.css.map +1 -1
  192. package/css/padding.css.map +1 -1
  193. package/css/palettes/dark.always.css.map +1 -1
  194. package/css/palettes/dark.class.css.map +1 -1
  195. package/css/palettes/dark.system.css.map +1 -1
  196. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  197. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  198. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  199. package/css/palettes/high-contrast.always.css.map +1 -1
  200. package/css/palettes/high-contrast.class.css.map +1 -1
  201. package/css/palettes/high-contrast.system.css.map +1 -1
  202. package/css/structure.css.map +1 -1
  203. package/css/text-alignment.css.map +1 -1
  204. package/css/text-transformation.css.map +1 -1
  205. package/css/typography.css.map +1 -1
  206. package/css/utils.bundle.css +1 -1
  207. package/css/utils.bundle.css.map +1 -1
  208. package/dist/cjs/{animation-BFKyYY11.js → animation-DGhvrwaP.js} +3 -3
  209. package/dist/cjs/{app-globals-BLTzqkrC.js → app-globals--knHahIC.js} +1 -1
  210. package/dist/cjs/{attribute-controller-CXIeB0Mn.js → attribute-controller-DqubM70Y.js} +3 -2
  211. package/dist/cjs/{button-active-CEQaiV9N.js → button-active-DJu01UHp.js} +2 -2
  212. package/dist/cjs/{capacitor-BMzmHhwe.js → capacitor-DmA66EwP.js} +3 -3
  213. package/dist/cjs/clear-button-press-controller-C6PTS3jC.js +45 -0
  214. package/dist/cjs/focus-visible-DGPRKkcx.js +151 -0
  215. package/dist/cjs/{format-CdRlDqPs.js → format-UTEj7kb_.js} +1 -1
  216. package/dist/cjs/{framework-delegate-DTLbqaaO.js → framework-delegate-Dc-OOm7D.js} +4 -2
  217. package/dist/cjs/{haptic-CJVUv_GB.js → haptic-Ch-X4gRx.js} +1 -1
  218. package/dist/cjs/{helpers-Crluoxqu.js → helpers-CLJM7hT0.js} +88 -10
  219. package/dist/cjs/{index-CElfU-dK.js → index-BzL2o7TC.js} +16 -14
  220. package/dist/cjs/{index-wOmugbdg.js → index-CxDnX7hd.js} +2 -0
  221. package/dist/cjs/{index-CgXTRA_-.js → index-DHE2MAbY.js} +4 -4
  222. package/dist/cjs/{index-BAM4223M.js → index-DKcBQZY9.js} +2 -2
  223. package/dist/cjs/{index-BKpybYNI.js → index-DaYKwu0A.js} +9 -7
  224. package/dist/cjs/index-DkNv4J_i.js +10 -0
  225. package/dist/cjs/{index-BSD7toMO.js → index-Dy4VfNzX.js} +1 -1
  226. package/dist/cjs/{index-SAR1xwtW.js → index-sCX9078m.js} +53 -4
  227. package/dist/cjs/index.cjs.js +20 -18
  228. package/dist/cjs/{input-shims-CHghGZe-.js → input-shims-BMQzAjOD.js} +18 -16
  229. package/dist/cjs/{input.utils-BBZr0wjw.js → input.utils-BrmvFLnI.js} +1 -1
  230. package/dist/cjs/ion-accordion_2.cjs.entry.js +57 -29
  231. package/dist/cjs/ion-action-sheet.cjs.entry.js +42 -37
  232. package/dist/cjs/ion-alert.cjs.entry.js +50 -45
  233. package/dist/cjs/ion-app_8.cjs.entry.js +457 -195
  234. package/dist/cjs/ion-avatar_3.cjs.entry.js +124 -13
  235. package/dist/cjs/ion-back-button.cjs.entry.js +31 -23
  236. package/dist/cjs/ion-backdrop.cjs.entry.js +11 -7
  237. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +42 -18
  238. package/dist/cjs/ion-button_2.cjs.entry.js +61 -23
  239. package/dist/cjs/ion-card_5.cjs.entry.js +57 -34
  240. package/dist/cjs/ion-checkbox.cjs.entry.js +43 -17
  241. package/dist/cjs/ion-chip.cjs.entry.js +51 -9
  242. package/dist/cjs/ion-col_3.cjs.entry.js +57 -62
  243. package/dist/cjs/ion-datetime-button.cjs.entry.js +14 -9
  244. package/dist/cjs/ion-datetime.cjs.entry.js +75 -33
  245. package/dist/cjs/ion-divider.cjs.entry.js +52 -0
  246. package/dist/cjs/ion-fab_3.cjs.entry.js +40 -28
  247. package/dist/cjs/ion-gallery-item.cjs.entry.js +59 -0
  248. package/dist/cjs/ion-gallery.cjs.entry.js +608 -0
  249. package/dist/cjs/ion-img.cjs.entry.js +9 -4
  250. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +91 -16
  251. package/dist/cjs/ion-input-otp.cjs.entry.js +74 -9
  252. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +42 -14
  253. package/dist/cjs/ion-input.cjs.entry.js +143 -38
  254. package/dist/cjs/ion-item-option_3.cjs.entry.js +466 -52
  255. package/dist/cjs/ion-item_8.cjs.entry.js +118 -51
  256. package/dist/cjs/ion-loading.cjs.entry.js +33 -28
  257. package/dist/cjs/ion-menu_3.cjs.entry.js +53 -35
  258. package/dist/cjs/ion-modal.cjs.entry.js +285 -157
  259. package/dist/cjs/ion-nav_2.cjs.entry.js +14 -10
  260. package/dist/cjs/ion-picker-column-option.cjs.entry.js +13 -8
  261. package/dist/cjs/ion-picker-column.cjs.entry.js +17 -15
  262. package/dist/cjs/ion-picker.cjs.entry.js +11 -6
  263. package/dist/cjs/ion-popover.cjs.entry.js +33 -28
  264. package/dist/cjs/ion-progress-bar.cjs.entry.js +28 -9
  265. package/dist/cjs/ion-radio_2.cjs.entry.js +37 -18
  266. package/dist/cjs/ion-range.cjs.entry.js +21 -13
  267. package/dist/cjs/ion-refresher_2.cjs.entry.js +45 -20
  268. package/dist/cjs/ion-reorder_2.cjs.entry.js +31 -13
  269. package/dist/cjs/ion-ripple-effect.cjs.entry.js +16 -7
  270. package/dist/cjs/ion-route_4.cjs.entry.js +12 -10
  271. package/dist/cjs/ion-searchbar.cjs.entry.js +118 -32
  272. package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
  273. package/dist/cjs/ion-segment-view.cjs.entry.js +13 -3
  274. package/dist/cjs/ion-segment_2.cjs.entry.js +24 -16
  275. package/dist/cjs/ion-select-modal.cjs.entry.js +54 -25
  276. package/dist/cjs/ion-select_3.cjs.entry.js +199 -81
  277. package/dist/cjs/ion-spinner.cjs.entry.js +31 -8
  278. package/dist/cjs/ion-split-pane.cjs.entry.js +14 -9
  279. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +150 -27
  280. package/dist/cjs/ion-tab_2.cjs.entry.js +9 -7
  281. package/dist/cjs/ion-text.cjs.entry.js +8 -7
  282. package/dist/cjs/ion-textarea.cjs.entry.js +242 -33
  283. package/dist/cjs/ion-toast.cjs.entry.js +86 -57
  284. package/dist/cjs/ion-toggle.cjs.entry.js +67 -25
  285. package/dist/cjs/ionic-global-BKBeko9D.js +518 -0
  286. package/dist/cjs/ionic.cjs.js +5 -4
  287. package/dist/cjs/{ios.transition-YFSxiyP_.js → ios.transition-EQ8LtRHj.js} +7 -4
  288. package/dist/cjs/{item-multiple-inputs-h2PyAFzG.js → item-multiple-inputs-Wc71a2xi.js} +1 -1
  289. package/dist/cjs/{keyboard-Cv-LNReK.js → keyboard-Cix5TVkD.js} +3 -5
  290. package/dist/cjs/{keyboard-C-C7xMKk.js → keyboard-cHxZlTyz.js} +1 -1
  291. package/dist/cjs/loader.cjs.js +5 -4
  292. package/dist/cjs/{md.transition-Cm8yg0UK.js → md.transition-By9Fre6y.js} +6 -4
  293. package/dist/cjs/{overlay-control-label-D2sdL2O8.js → overlay-control-label-DnRLQR1t.js} +13 -11
  294. package/dist/cjs/{overlays-C68wNDWY.js → overlays-Ch6nAoha.js} +309 -138
  295. package/dist/cjs/scroll-hide-controller-BwW-NV0Z.js +345 -0
  296. package/dist/cjs/{select-option-render-C-Yh9yZG.js → select-option-render-BmpnIokj.js} +2 -2
  297. package/dist/cjs/{slot-mutation-controller-zixZ5LyH.js → slot-mutation-controller-C7nTDVzj.js} +5 -4
  298. package/dist/cjs/{status-tap-C3frTJ4c.js → status-tap-Dw87jmOD.js} +5 -3
  299. package/dist/cjs/{swipe-back-BigumsQ1.js → swipe-back-BXYzN9QG.js} +4 -2
  300. package/dist/cjs/{theme-Bw0rpaNN.js → theme-Cy4joHPt.js} +25 -1
  301. package/dist/cjs/validity-CoPMWggj.js +51 -0
  302. package/dist/collection/collection-manifest.json +8 -0
  303. package/dist/collection/components/accordion/accordion.ionic.css +199 -0
  304. package/dist/collection/components/accordion/accordion.ios.css +73 -58
  305. package/dist/collection/components/accordion/accordion.js +36 -27
  306. package/dist/collection/components/accordion/accordion.md.css +67 -59
  307. package/dist/collection/components/accordion-group/accordion-group.ionic.css +93 -0
  308. package/dist/collection/components/accordion-group/accordion-group.ios.css +16 -4
  309. package/dist/collection/components/accordion-group/accordion-group.js +44 -8
  310. package/dist/collection/components/accordion-group/accordion-group.md.css +22 -4
  311. package/dist/collection/components/action-sheet/action-sheet.ionic.css +490 -0
  312. package/dist/collection/components/action-sheet/action-sheet.ios.css +184 -54
  313. package/dist/collection/components/action-sheet/action-sheet.js +16 -13
  314. package/dist/collection/components/action-sheet/action-sheet.md.css +179 -55
  315. package/dist/collection/components/alert/alert.ionic.css +779 -0
  316. package/dist/collection/components/alert/alert.ios.css +247 -54
  317. package/dist/collection/components/alert/alert.js +22 -19
  318. package/dist/collection/components/alert/alert.md.css +243 -56
  319. package/dist/collection/components/app/app.js +15 -83
  320. package/dist/collection/components/avatar/avatar.ionic.css +379 -0
  321. package/dist/collection/components/avatar/avatar.ios.css +7 -33
  322. package/dist/collection/components/avatar/avatar.js +120 -4
  323. package/dist/collection/components/avatar/avatar.md.css +51 -0
  324. package/dist/collection/components/back-button/back-button.ios.css +60 -48
  325. package/dist/collection/components/back-button/back-button.js +26 -20
  326. package/dist/collection/components/back-button/back-button.md.css +60 -48
  327. package/dist/collection/components/backdrop/backdrop.ionic.css +109 -0
  328. package/dist/collection/components/backdrop/backdrop.ios.css +56 -19
  329. package/dist/collection/components/backdrop/backdrop.js +12 -6
  330. package/dist/collection/components/backdrop/backdrop.md.css +56 -19
  331. package/dist/collection/components/badge/badge.ionic.css +269 -0
  332. package/dist/collection/components/badge/badge.ios.css +137 -12
  333. package/dist/collection/components/badge/badge.js +143 -9
  334. package/dist/collection/components/badge/badge.md.css +122 -12
  335. package/dist/collection/components/breadcrumb/breadcrumb.ios.css +20 -8
  336. package/dist/collection/components/breadcrumb/breadcrumb.js +31 -11
  337. package/dist/collection/components/breadcrumb/breadcrumb.md.css +20 -8
  338. package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +6 -0
  339. package/dist/collection/components/breadcrumbs/breadcrumbs.js +11 -9
  340. package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +6 -0
  341. package/dist/collection/components/button/button.ionic.css +640 -0
  342. package/dist/collection/components/button/button.ios.css +154 -46
  343. package/dist/collection/components/button/button.js +63 -27
  344. package/dist/collection/components/button/button.md.css +150 -50
  345. package/dist/collection/components/buttons/buttons.ionic.css +97 -0
  346. package/dist/collection/components/buttons/buttons.ios.css +59 -7
  347. package/dist/collection/components/buttons/buttons.js +15 -9
  348. package/dist/collection/components/buttons/buttons.md.css +55 -3
  349. package/dist/collection/components/card/card.ionic.css +144 -0
  350. package/dist/collection/components/card/card.ios.css +65 -14
  351. package/dist/collection/components/card/card.js +41 -10
  352. package/dist/collection/components/card/card.md.css +65 -14
  353. package/dist/collection/components/card-content/card-content.ionic.css +88 -0
  354. package/dist/collection/components/card-content/card-content.ios.css +20 -35
  355. package/dist/collection/components/card-content/card-content.js +12 -10
  356. package/dist/collection/components/card-content/card-content.md.css +20 -35
  357. package/dist/collection/components/card-header/card-header.ionic.css +85 -0
  358. package/dist/collection/components/card-header/card-header.ios.css +27 -15
  359. package/dist/collection/components/card-header/card-header.js +13 -10
  360. package/dist/collection/components/card-header/card-header.md.css +27 -15
  361. package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +143 -0
  362. package/dist/collection/components/card-subtitle/card-subtitle.ios.css +12 -0
  363. package/dist/collection/components/card-subtitle/card-subtitle.js +11 -8
  364. package/dist/collection/components/card-subtitle/card-subtitle.md.css +12 -0
  365. package/dist/collection/components/card-title/card-title.ios.css +73 -0
  366. package/dist/collection/components/card-title/card-title.js +11 -8
  367. package/dist/collection/components/card-title/card-title.md.css +73 -0
  368. package/dist/collection/components/checkbox/checkbox.ionic.css +535 -0
  369. package/dist/collection/components/checkbox/checkbox.ios.css +244 -115
  370. package/dist/collection/components/checkbox/checkbox.js +80 -15
  371. package/dist/collection/components/checkbox/checkbox.md.css +245 -116
  372. package/dist/collection/components/chip/chip.ionic.css +216 -0
  373. package/dist/collection/components/chip/chip.ios.css +67 -14
  374. package/dist/collection/components/chip/chip.js +108 -8
  375. package/dist/collection/components/chip/chip.md.css +67 -14
  376. package/dist/collection/components/col/col.css +192 -4
  377. package/dist/collection/components/col/col.js +211 -66
  378. package/dist/collection/components/content/content.css +47 -2
  379. package/dist/collection/components/content/content.js +16 -11
  380. package/dist/collection/components/datetime/datetime.ionic.css +697 -0
  381. package/dist/collection/components/datetime/datetime.ios.css +305 -114
  382. package/dist/collection/components/datetime/datetime.js +61 -20
  383. package/dist/collection/components/datetime/datetime.md.css +295 -103
  384. package/dist/collection/components/datetime/utils/data.js +5 -5
  385. package/dist/collection/components/datetime-button/datetime-button.ios.css +6 -0
  386. package/dist/collection/components/datetime-button/datetime-button.js +11 -8
  387. package/dist/collection/components/datetime-button/datetime-button.md.css +6 -0
  388. package/dist/collection/components/divider/divider.ionic.css +148 -0
  389. package/dist/collection/components/divider/divider.ios.css +87 -0
  390. package/dist/collection/components/divider/divider.js +94 -0
  391. package/dist/collection/components/divider/divider.md.css +87 -0
  392. package/dist/collection/components/fab/fab.css +25 -1
  393. package/dist/collection/components/fab/fab.js +9 -5
  394. package/dist/collection/components/fab-button/fab-button.ios.css +18 -6
  395. package/dist/collection/components/fab-button/fab-button.js +31 -21
  396. package/dist/collection/components/fab-button/fab-button.md.css +20 -8
  397. package/dist/collection/components/fab-list/fab-list.css +12 -0
  398. package/dist/collection/components/fab-list/fab-list.js +9 -5
  399. package/dist/collection/components/footer/footer-interface.js +1 -0
  400. package/dist/collection/components/footer/footer.ios.css +33 -6
  401. package/dist/collection/components/footer/footer.js +117 -25
  402. package/dist/collection/components/footer/footer.md.css +40 -0
  403. package/dist/collection/components/gallery/gallery-constants.js +12 -0
  404. package/dist/collection/components/gallery/gallery-interface.js +1 -0
  405. package/dist/collection/components/gallery/gallery.css +15 -0
  406. package/dist/collection/components/gallery/gallery.js +678 -0
  407. package/dist/collection/components/gallery/test/utils.js +100 -0
  408. package/dist/collection/components/gallery-item/gallery-item.css +49 -0
  409. package/dist/collection/components/gallery-item/gallery-item.js +98 -0
  410. package/dist/collection/components/grid/grid.css +12 -0
  411. package/dist/collection/components/grid/grid.js +9 -5
  412. package/dist/collection/components/header/header-interface.js +1 -0
  413. package/dist/collection/components/header/header.ionic.css +286 -0
  414. package/dist/collection/components/header/header.ios.css +178 -133
  415. package/dist/collection/components/header/header.js +180 -39
  416. package/dist/collection/components/header/header.md.css +199 -9
  417. package/dist/collection/components/header/header.utils.js +5 -13
  418. package/dist/collection/components/img/img.js +7 -2
  419. package/dist/collection/components/infinite-scroll/infinite-scroll.js +99 -5
  420. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +12 -0
  421. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +16 -10
  422. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +12 -0
  423. package/dist/collection/components/input/input.ionic.css +957 -0
  424. package/dist/collection/components/input/input.ios.css +254 -160
  425. package/dist/collection/components/input/input.js +168 -44
  426. package/dist/collection/components/input/input.md.css +224 -232
  427. package/dist/collection/components/input-otp/input-otp.ionic.css +369 -0
  428. package/dist/collection/components/input-otp/input-otp.ios.css +105 -60
  429. package/dist/collection/components/input-otp/input-otp.js +73 -7
  430. package/dist/collection/components/input-otp/input-otp.md.css +105 -60
  431. package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +78 -0
  432. package/dist/collection/components/input-password-toggle/input-password-toggle.js +37 -10
  433. package/dist/collection/components/input-password-toggle/input-password-toggle.native.css +61 -0
  434. package/dist/collection/components/item/item.ionic.css +495 -0
  435. package/dist/collection/components/item/item.ios.css +120 -80
  436. package/dist/collection/components/item/item.js +51 -21
  437. package/dist/collection/components/item/item.md.css +131 -79
  438. package/dist/collection/components/item-divider/item-divider.ios.css +18 -0
  439. package/dist/collection/components/item-divider/item-divider.js +11 -8
  440. package/dist/collection/components/item-divider/item-divider.md.css +18 -0
  441. package/dist/collection/components/item-group/item-group.ios.css +12 -0
  442. package/dist/collection/components/item-group/item-group.js +13 -7
  443. package/dist/collection/components/item-group/item-group.md.css +12 -0
  444. package/dist/collection/components/item-option/item-option.ionic.css +276 -0
  445. package/dist/collection/components/item-option/item-option.ios.css +136 -29
  446. package/dist/collection/components/item-option/item-option.js +73 -9
  447. package/dist/collection/components/item-option/item-option.md.css +136 -29
  448. package/dist/collection/components/item-options/item-options.ionic.css +221 -0
  449. package/dist/collection/components/item-options/item-options.ios.css +77 -34
  450. package/dist/collection/components/item-options/item-options.js +13 -7
  451. package/dist/collection/components/item-options/item-options.md.css +77 -34
  452. package/dist/collection/components/item-sliding/item-sliding.ionic.css +211 -0
  453. package/dist/collection/components/item-sliding/item-sliding.js +419 -35
  454. package/dist/collection/components/item-sliding/{item-sliding.css → item-sliding.native.css} +84 -9
  455. package/dist/collection/components/item-sliding/test/test.utils.js +13 -0
  456. package/dist/collection/components/label/label.ios.css +18 -0
  457. package/dist/collection/components/label/label.js +11 -8
  458. package/dist/collection/components/label/label.md.css +18 -0
  459. package/dist/collection/components/list/list.ionic.css +212 -0
  460. package/dist/collection/components/list/list.ios.css +54 -14
  461. package/dist/collection/components/list/list.js +48 -9
  462. package/dist/collection/components/list/list.md.css +56 -16
  463. package/dist/collection/components/list-header/list-header.ionic.css +189 -0
  464. package/dist/collection/components/list-header/list-header.ios.css +82 -38
  465. package/dist/collection/components/list-header/list-header.js +11 -8
  466. package/dist/collection/components/list-header/list-header.md.css +82 -38
  467. package/dist/collection/components/loading/loading.ios.css +13 -1
  468. package/dist/collection/components/loading/loading.js +15 -12
  469. package/dist/collection/components/loading/loading.md.css +13 -1
  470. package/dist/collection/components/menu/menu.ios.css +15 -3
  471. package/dist/collection/components/menu/menu.js +12 -7
  472. package/dist/collection/components/menu/menu.md.css +15 -3
  473. package/dist/collection/components/menu-button/menu-button.ionic.css +236 -0
  474. package/dist/collection/components/menu-button/menu-button.ios.css +48 -14
  475. package/dist/collection/components/menu-button/menu-button.js +23 -10
  476. package/dist/collection/components/menu-button/menu-button.md.css +49 -15
  477. package/dist/collection/components/menu-toggle/menu-toggle.js +8 -5
  478. package/dist/collection/components/modal/animations/ionic.enter.js +40 -0
  479. package/dist/collection/components/modal/animations/ionic.leave.js +28 -0
  480. package/dist/collection/components/modal/animations/sheet.js +8 -2
  481. package/dist/collection/components/modal/gestures/sheet.js +76 -10
  482. package/dist/collection/components/modal/modal.ionic.css +266 -0
  483. package/dist/collection/components/modal/modal.ios.css +178 -70
  484. package/dist/collection/components/modal/modal.js +52 -13
  485. package/dist/collection/components/modal/modal.md.css +178 -70
  486. package/dist/collection/components/nav/nav.css +7 -1
  487. package/dist/collection/components/nav/nav.js +10 -4
  488. package/dist/collection/components/nav-link/nav-link.js +5 -1
  489. package/dist/collection/components/note/note.ios.css +12 -0
  490. package/dist/collection/components/note/note.js +11 -8
  491. package/dist/collection/components/note/note.md.css +12 -0
  492. package/dist/collection/components/picker/picker.ios.css +15 -3
  493. package/dist/collection/components/picker/picker.js +8 -5
  494. package/dist/collection/components/picker/picker.md.css +15 -3
  495. package/dist/collection/components/picker-column/picker-column.css +9 -2
  496. package/dist/collection/components/picker-column/picker-column.js +8 -7
  497. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +6 -0
  498. package/dist/collection/components/picker-column-option/picker-column-option.js +13 -7
  499. package/dist/collection/components/picker-column-option/picker-column-option.md.css +6 -0
  500. package/dist/collection/components/popover/popover.ionic.css +289 -0
  501. package/dist/collection/components/popover/popover.ios.css +13 -1
  502. package/dist/collection/components/popover/popover.js +19 -16
  503. package/dist/collection/components/popover/popover.md.css +13 -1
  504. package/dist/collection/components/progress-bar/progress-bar.ionic.css +287 -0
  505. package/dist/collection/components/progress-bar/progress-bar.ios.css +48 -17
  506. package/dist/collection/components/progress-bar/progress-bar.js +43 -7
  507. package/dist/collection/components/progress-bar/progress-bar.md.css +48 -17
  508. package/dist/collection/components/radio/radio.ionic.css +421 -0
  509. package/dist/collection/components/radio/radio.ios.css +207 -102
  510. package/dist/collection/components/radio/radio.js +14 -9
  511. package/dist/collection/components/radio/radio.md.css +207 -102
  512. package/dist/collection/components/radio-group/radio-group.ionic.css +118 -0
  513. package/dist/collection/components/radio-group/radio-group.ios.css +43 -19
  514. package/dist/collection/components/radio-group/radio-group.js +48 -7
  515. package/dist/collection/components/radio-group/radio-group.md.css +43 -19
  516. package/dist/collection/components/range/range.ionic.css +566 -0
  517. package/dist/collection/components/range/range.ios.css +128 -85
  518. package/dist/collection/components/range/range.js +16 -10
  519. package/dist/collection/components/range/range.md.css +128 -85
  520. package/dist/collection/components/refresher/refresher.ios.css +14 -1
  521. package/dist/collection/components/refresher/refresher.js +11 -8
  522. package/dist/collection/components/refresher/refresher.md.css +15 -2
  523. package/dist/collection/components/refresher-content/refresher-content.js +34 -7
  524. package/dist/collection/components/reorder/reorder.ios.css +6 -0
  525. package/dist/collection/components/reorder/reorder.js +25 -6
  526. package/dist/collection/components/reorder/reorder.md.css +6 -0
  527. package/dist/collection/components/reorder-group/reorder-group.css +6 -0
  528. package/dist/collection/components/reorder-group/reorder-group.js +8 -4
  529. package/dist/collection/components/ripple-effect/{ripple-effect.css → ripple-effect.common.css} +7 -1
  530. package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +215 -0
  531. package/dist/collection/components/ripple-effect/ripple-effect.js +14 -6
  532. package/dist/collection/components/route/route.js +4 -0
  533. package/dist/collection/components/router/router.js +4 -0
  534. package/dist/collection/components/router-link/router-link.css +8 -2
  535. package/dist/collection/components/router-link/router-link.js +9 -5
  536. package/dist/collection/components/router-outlet/router-outlet.css +7 -1
  537. package/dist/collection/components/router-outlet/router-outlet.js +6 -3
  538. package/dist/collection/components/row/row.css +16 -0
  539. package/dist/collection/components/row/row.js +9 -2
  540. package/dist/collection/components/searchbar/searchbar.ionic.css +621 -0
  541. package/dist/collection/components/searchbar/searchbar.ios.css +56 -18
  542. package/dist/collection/components/searchbar/searchbar.js +164 -42
  543. package/dist/collection/components/searchbar/searchbar.md.css +56 -18
  544. package/dist/collection/components/segment/segment.ionic.css +115 -0
  545. package/dist/collection/components/segment/segment.ios.css +45 -2
  546. package/dist/collection/components/segment/segment.js +11 -8
  547. package/dist/collection/components/segment/segment.md.css +45 -2
  548. package/dist/collection/components/segment-button/segment-button.ionic.css +351 -0
  549. package/dist/collection/components/segment-button/segment-button.ios.css +146 -105
  550. package/dist/collection/components/segment-button/segment-button.js +11 -8
  551. package/dist/collection/components/segment-button/segment-button.md.css +148 -107
  552. package/dist/collection/components/segment-content/segment-content.js +1 -1
  553. package/dist/collection/components/segment-view/segment-view.ios.css +6 -0
  554. package/dist/collection/components/segment-view/segment-view.js +13 -4
  555. package/dist/collection/components/segment-view/segment-view.md.css +6 -0
  556. package/dist/collection/components/select/select.ionic.css +972 -0
  557. package/dist/collection/components/select/select.ios.css +300 -148
  558. package/dist/collection/components/select/select.js +228 -82
  559. package/dist/collection/components/select/select.md.css +316 -150
  560. package/dist/collection/components/select-modal/select-modal.ionic.css +254 -0
  561. package/dist/collection/components/select-modal/select-modal.ios.css +293 -45
  562. package/dist/collection/components/select-modal/select-modal.js +63 -15
  563. package/dist/collection/components/select-modal/select-modal.md.css +273 -43
  564. package/dist/collection/components/select-option/select-option.js +8 -4
  565. package/dist/collection/components/select-popover/select-popover.ionic.css +253 -0
  566. package/dist/collection/components/select-popover/select-popover.ios.css +188 -124
  567. package/dist/collection/components/select-popover/select-popover.js +17 -9
  568. package/dist/collection/components/select-popover/select-popover.md.css +228 -47
  569. package/dist/collection/components/skeleton-text/skeleton-text.css +6 -0
  570. package/dist/collection/components/skeleton-text/skeleton-text.js +9 -5
  571. package/dist/collection/components/spinner/{spinner.css → spinner.ionic.css} +78 -10
  572. package/dist/collection/components/spinner/spinner.js +47 -6
  573. package/dist/collection/components/spinner/spinner.native.css +199 -0
  574. package/dist/collection/components/split-pane/split-pane.ios.css +20 -2
  575. package/dist/collection/components/split-pane/split-pane.js +15 -8
  576. package/dist/collection/components/split-pane/split-pane.md.css +20 -2
  577. package/dist/collection/components/tab/tab.js +6 -2
  578. package/dist/collection/components/tab-bar/tab-bar.ionic.css +249 -0
  579. package/dist/collection/components/tab-bar/tab-bar.ios.css +86 -43
  580. package/dist/collection/components/tab-bar/tab-bar.js +178 -15
  581. package/dist/collection/components/tab-bar/tab-bar.md.css +86 -43
  582. package/dist/collection/components/tab-button/tab-button.ionic.css +372 -0
  583. package/dist/collection/components/tab-button/tab-button.ios.css +171 -95
  584. package/dist/collection/components/tab-button/tab-button.js +54 -9
  585. package/dist/collection/components/tab-button/tab-button.md.css +137 -93
  586. package/dist/collection/components/tabs/tabs.css +7 -1
  587. package/dist/collection/components/tabs/tabs.js +4 -1
  588. package/dist/collection/components/text/text.css +6 -0
  589. package/dist/collection/components/text/text.js +7 -6
  590. package/dist/collection/components/textarea/textarea.ionic.css +989 -0
  591. package/dist/collection/components/textarea/textarea.ios.css +318 -170
  592. package/dist/collection/components/textarea/textarea.js +270 -45
  593. package/dist/collection/components/textarea/textarea.md.css +332 -171
  594. package/dist/collection/components/thumbnail/thumbnail.css +6 -0
  595. package/dist/collection/components/thumbnail/thumbnail.js +9 -2
  596. package/dist/collection/components/title/title.ionic.css +125 -0
  597. package/dist/collection/components/title/title.ios.css +32 -4
  598. package/dist/collection/components/title/title.js +13 -7
  599. package/dist/collection/components/title/title.md.css +39 -4
  600. package/dist/collection/components/toast/animations/utils.js +1 -1
  601. package/dist/collection/components/toast/toast.ionic.css +391 -0
  602. package/dist/collection/components/toast/toast.ios.css +84 -45
  603. package/dist/collection/components/toast/toast.js +79 -13
  604. package/dist/collection/components/toast/toast.md.css +84 -45
  605. package/dist/collection/components/toggle/toggle.ionic.css +510 -0
  606. package/dist/collection/components/toggle/toggle.ios.css +247 -127
  607. package/dist/collection/components/toggle/toggle.js +58 -18
  608. package/dist/collection/components/toggle/toggle.md.css +245 -127
  609. package/dist/collection/components/toolbar/test/image.svg +1 -0
  610. package/dist/collection/components/toolbar/toolbar.ionic.css +249 -0
  611. package/dist/collection/components/toolbar/toolbar.ios.css +90 -47
  612. package/dist/collection/components/toolbar/toolbar.js +216 -14
  613. package/dist/collection/components/toolbar/toolbar.md.css +90 -47
  614. package/dist/collection/global/ionic-global.js +239 -13
  615. package/dist/collection/utils/css-value-validation.js +39 -0
  616. package/dist/collection/utils/focus-trap.js +15 -4
  617. package/dist/collection/utils/focus-visible.js +73 -2
  618. package/dist/collection/utils/forms/clear-button-press-controller.js +40 -0
  619. package/dist/collection/utils/forms/index.js +1 -0
  620. package/dist/collection/utils/forms/validity.js +31 -0
  621. package/dist/collection/utils/framework-delegate.js +3 -1
  622. package/dist/collection/utils/hardware-back-button.js +15 -0
  623. package/dist/collection/utils/helpers.js +84 -3
  624. package/dist/collection/utils/keyboard/keyboard-controller.js +3 -1
  625. package/dist/collection/utils/media.js +1 -0
  626. package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
  627. package/dist/collection/utils/menu-controller/animations/push.js +2 -1
  628. package/dist/collection/utils/menu-controller/animations/reveal.js +2 -1
  629. package/dist/collection/utils/overlay-control-label.js +13 -11
  630. package/dist/collection/utils/overlays.js +289 -10
  631. package/dist/collection/utils/scroll-hide-controller.js +178 -0
  632. package/dist/collection/utils/test/playwright/drag-element.js +32 -9
  633. package/dist/collection/utils/test/playwright/field-geometry.js +34 -0
  634. package/dist/collection/utils/test/playwright/generator.js +48 -23
  635. package/dist/collection/utils/test/playwright/index.js +1 -0
  636. package/dist/collection/utils/test/playwright/page/utils/goto.js +10 -1
  637. package/dist/collection/utils/test/playwright/page/utils/set-content.js +26 -3
  638. package/dist/collection/utils/theme.js +25 -1
  639. package/dist/collection/utils/transition/ios.transition.js +1 -0
  640. package/dist/docs.json +8890 -300
  641. package/dist/esm/{animation-CFd8Olt3.js → animation-BYhTNLb0.js} +2 -2
  642. package/dist/esm/{app-globals-7GHLBkwd.js → app-globals-DwKMi0nT.js} +1 -1
  643. package/dist/esm/{attribute-controller-Cn665x42.js → attribute-controller-DSgMe9D8.js} +2 -1
  644. package/dist/esm/{button-active-DMuYeDQN.js → button-active-z7D6HahS.js} +2 -2
  645. package/dist/esm/{capacitor-CoEgIpR9.js → capacitor-CFERIeaU.js} +1 -1
  646. package/dist/esm/clear-button-press-controller-6ph4kKYn.js +43 -0
  647. package/dist/esm/focus-visible-BYk20Mf5.js +146 -0
  648. package/dist/esm/{format-C9zPmwKU.js → format-Bzx6ja8X.js} +1 -1
  649. package/dist/esm/{framework-delegate-DeT5pmPB.js → framework-delegate-1jBLyhBr.js} +4 -2
  650. package/dist/esm/{haptic-Dxm7ZmT5.js → haptic-Cq4UAeka.js} +1 -1
  651. package/dist/esm/{helpers-B54ynME_.js → helpers-DxiyEiQq.js} +86 -8
  652. package/dist/esm/{index-D_xZtbw6.js → index-3qJiaSN_.js} +4 -2
  653. package/dist/esm/{index-D4ZMZz_3.js → index-BOBjcNAK.js} +1 -1
  654. package/dist/esm/{index-BvabGprD.js → index-BkJpfpXI.js} +2 -1
  655. package/dist/esm/{index-B8iieOdw.js → index-BrTerDOH.js} +4 -4
  656. package/dist/esm/{index-D9OR05yj.js → index-CsxpVq9f.js} +53 -4
  657. package/dist/esm/{index--21qeSt0.js → index-D0-93AmS.js} +2 -2
  658. package/dist/esm/{index-B9jhwvmO.js → index-LPo3JBab.js} +12 -10
  659. package/dist/esm/index-ZjP4CjeZ.js +7 -0
  660. package/dist/esm/index.js +14 -12
  661. package/dist/esm/{input-shims-MCrhq67U.js → input-shims-HqimWtEw.js} +7 -5
  662. package/dist/esm/{input.utils-B-IIWrwT.js → input.utils-BQE7ESFW.js} +1 -1
  663. package/dist/esm/ion-accordion_2.entry.js +57 -29
  664. package/dist/esm/ion-action-sheet.entry.js +27 -22
  665. package/dist/esm/ion-alert.entry.js +34 -29
  666. package/dist/esm/ion-app_8.entry.js +455 -193
  667. package/dist/esm/ion-avatar_3.entry.js +124 -13
  668. package/dist/esm/ion-back-button.entry.js +31 -23
  669. package/dist/esm/ion-backdrop.entry.js +11 -7
  670. package/dist/esm/ion-breadcrumb_2.entry.js +42 -18
  671. package/dist/esm/ion-button_2.entry.js +61 -23
  672. package/dist/esm/ion-card_5.entry.js +57 -34
  673. package/dist/esm/ion-checkbox.entry.js +43 -17
  674. package/dist/esm/ion-chip.entry.js +51 -9
  675. package/dist/esm/ion-col_3.entry.js +57 -62
  676. package/dist/esm/ion-datetime-button.entry.js +14 -9
  677. package/dist/esm/ion-datetime.entry.js +74 -32
  678. package/dist/esm/ion-divider.entry.js +50 -0
  679. package/dist/esm/ion-fab_3.entry.js +40 -28
  680. package/dist/esm/ion-gallery-item.entry.js +57 -0
  681. package/dist/esm/ion-gallery.entry.js +606 -0
  682. package/dist/esm/ion-img.entry.js +9 -4
  683. package/dist/esm/ion-infinite-scroll_2.entry.js +91 -16
  684. package/dist/esm/ion-input-otp.entry.js +74 -9
  685. package/dist/esm/ion-input-password-toggle.entry.js +42 -14
  686. package/dist/esm/ion-input.entry.js +143 -38
  687. package/dist/esm/ion-item-option_3.entry.js +466 -52
  688. package/dist/esm/ion-item_8.entry.js +118 -51
  689. package/dist/esm/ion-loading.entry.js +22 -17
  690. package/dist/esm/ion-menu_3.entry.js +45 -27
  691. package/dist/esm/ion-modal.entry.js +218 -90
  692. package/dist/esm/ion-nav_2.entry.js +14 -10
  693. package/dist/esm/ion-picker-column-option.entry.js +13 -8
  694. package/dist/esm/ion-picker-column.entry.js +14 -12
  695. package/dist/esm/ion-picker.entry.js +11 -6
  696. package/dist/esm/ion-popover.entry.js +23 -18
  697. package/dist/esm/ion-progress-bar.entry.js +28 -9
  698. package/dist/esm/ion-radio_2.entry.js +37 -18
  699. package/dist/esm/ion-range.entry.js +21 -13
  700. package/dist/esm/ion-refresher_2.entry.js +45 -20
  701. package/dist/esm/ion-reorder_2.entry.js +31 -13
  702. package/dist/esm/ion-ripple-effect.entry.js +16 -7
  703. package/dist/esm/ion-route_4.entry.js +12 -10
  704. package/dist/esm/ion-searchbar.entry.js +118 -32
  705. package/dist/esm/ion-segment-content.entry.js +2 -2
  706. package/dist/esm/ion-segment-view.entry.js +13 -3
  707. package/dist/esm/ion-segment_2.entry.js +24 -16
  708. package/dist/esm/ion-select-modal.entry.js +53 -24
  709. package/dist/esm/ion-select_3.entry.js +194 -76
  710. package/dist/esm/ion-spinner.entry.js +31 -8
  711. package/dist/esm/ion-split-pane.entry.js +14 -9
  712. package/dist/esm/ion-tab-bar_2.entry.js +149 -26
  713. package/dist/esm/ion-tab_2.entry.js +9 -7
  714. package/dist/esm/ion-text.entry.js +8 -7
  715. package/dist/esm/ion-textarea.entry.js +242 -33
  716. package/dist/esm/ion-toast.entry.js +48 -19
  717. package/dist/esm/ion-toggle.entry.js +67 -25
  718. package/dist/esm/ionic-global-BAIaPRGU.js +509 -0
  719. package/dist/esm/ionic.js +6 -5
  720. package/dist/esm/{ios.transition-CRfGj4Mo.js → ios.transition-BN0AUjKH.js} +7 -4
  721. package/dist/esm/{item-multiple-inputs-BSD9wGHO.js → item-multiple-inputs-f3Vz153y.js} +1 -1
  722. package/dist/esm/{keyboard-DDw62P0D.js → keyboard-Cj8mLJeq.js} +3 -5
  723. package/dist/esm/{keyboard-ly3M0GO7.js → keyboard-DAF8GNJ9.js} +1 -1
  724. package/dist/esm/loader.js +6 -5
  725. package/dist/esm/{md.transition-wqThNy_C.js → md.transition-BZ3TWMK6.js} +6 -4
  726. package/dist/esm/{overlay-control-label-BSQPZ79H.js → overlay-control-label-CODBQrPj.js} +13 -11
  727. package/dist/esm/{overlays-BQnV0HAU.js → overlays-CLqEprTi.js} +307 -133
  728. package/dist/esm/scroll-hide-controller-m-39_CyK.js +342 -0
  729. package/dist/esm/{select-option-render-CGxPejmz.js → select-option-render-CDyG_Ujc.js} +2 -2
  730. package/dist/esm/{slot-mutation-controller-C3s4-_YN.js → slot-mutation-controller-DXsogmcJ.js} +2 -1
  731. package/dist/esm/{status-tap-DRx9wSD_.js → status-tap-BzPUcwpI.js} +5 -3
  732. package/dist/esm/{swipe-back-Ch3UU_US.js → swipe-back-D8sqbjOf.js} +4 -2
  733. package/dist/esm/{theme-byZM6qHV.js → theme-BUF_V-Kg.js} +25 -1
  734. package/dist/esm/validity-NcQUGze-.js +48 -0
  735. package/dist/html.html-data.json +2631 -150
  736. package/dist/ionic/index.esm.js +1 -1
  737. package/dist/ionic/ionic.esm.js +1 -1
  738. package/dist/ionic/p-00e5052e.entry.js +4 -0
  739. package/dist/ionic/p-0cb3bf40.entry.js +4 -0
  740. package/dist/ionic/p-0cb9a213.entry.js +4 -0
  741. package/dist/ionic/p-10d11d15.entry.js +4 -0
  742. package/dist/ionic/p-1c2af758.entry.js +4 -0
  743. package/dist/ionic/p-1cd8acc1.entry.js +4 -0
  744. package/dist/ionic/p-1e11cfe6.entry.js +4 -0
  745. package/dist/ionic/p-1e13dfa6.entry.js +4 -0
  746. package/dist/ionic/p-2da8417a.entry.js +4 -0
  747. package/dist/ionic/p-30643dd0.entry.js +4 -0
  748. package/dist/ionic/p-3246c8db.entry.js +4 -0
  749. package/dist/ionic/p-335f6ac5.entry.js +4 -0
  750. package/dist/ionic/p-3636e449.entry.js +4 -0
  751. package/dist/ionic/p-3c073e44.entry.js +4 -0
  752. package/dist/ionic/p-3f78fbb9.entry.js +4 -0
  753. package/dist/ionic/p-473f56d0.entry.js +4 -0
  754. package/dist/ionic/p-4ce892d6.entry.js +4 -0
  755. package/dist/ionic/p-4d824bdd.entry.js +4 -0
  756. package/dist/ionic/p-57a084b1.entry.js +4 -0
  757. package/dist/ionic/p-5dfc15b7.entry.js +4 -0
  758. package/dist/ionic/p-5e4eec2e.entry.js +4 -0
  759. package/dist/ionic/p-67d0f149.entry.js +4 -0
  760. package/dist/ionic/p-6d48ce72.entry.js +4 -0
  761. package/dist/ionic/p-78963796.entry.js +4 -0
  762. package/dist/ionic/p-8201e3a4.entry.js +4 -0
  763. package/dist/ionic/p-8675912f.entry.js +4 -0
  764. package/dist/ionic/p-8c8001d1.entry.js +4 -0
  765. package/dist/ionic/p-96ef4bc4.entry.js +4 -0
  766. package/dist/ionic/p-978335f1.entry.js +4 -0
  767. package/dist/ionic/{p-PkaVMJga.js → p-B1XKnjaF.js} +1 -1
  768. package/dist/ionic/{p-DNxEB9-T.js → p-B3KpQBCL.js} +1 -1
  769. package/dist/ionic/p-BCYG0ntp.js +4 -0
  770. package/dist/ionic/p-BI5taije.js +4 -0
  771. package/dist/ionic/{p-DxvRP6ld.js → p-BMPN55of.js} +1 -1
  772. package/dist/ionic/p-BPZc3Ck-.js +4 -0
  773. package/dist/ionic/p-BSH8IzpI.js +4 -0
  774. package/dist/ionic/p-BUF_V-Kg.js +4 -0
  775. package/dist/ionic/p-BVTltcXo.js +4 -0
  776. package/dist/ionic/p-BYk20Mf5.js +4 -0
  777. package/dist/ionic/p-BfDzKnZ-.js +4 -0
  778. package/dist/ionic/p-BjQlYdiZ.js +4 -0
  779. package/dist/ionic/p-BkJpfpXI.js +4 -0
  780. package/dist/ionic/p-Bo9gphwB.js +4 -0
  781. package/dist/ionic/p-BsFwDB3d.js +4 -0
  782. package/dist/ionic/{p-BhMQahM6.js → p-BsSAvQwi.js} +1 -1
  783. package/dist/ionic/{p-BUB5OrpU.js → p-C0TTjAkK.js} +1 -1
  784. package/dist/ionic/p-CIGNaXM1.js +4 -0
  785. package/dist/ionic/p-CODBQrPj.js +4 -0
  786. package/dist/ionic/{p-CVwXN07G.js → p-CcJ1m8ij.js} +1 -1
  787. package/dist/ionic/p-CsxpVq9f.js +6 -0
  788. package/dist/ionic/p-CvHTFTlP.js +4 -0
  789. package/dist/ionic/{p-CCik51Nv.js → p-D1Dp9g6Y.js} +1 -1
  790. package/dist/ionic/p-D5I40TIB.js +4 -0
  791. package/dist/ionic/p-D5t_-oMk.js +4 -0
  792. package/{components/p-C7rB-0-1.js → dist/ionic/p-DN4HuOWQ.js} +1 -1
  793. package/dist/ionic/p-DbnqpMyu.js +4 -0
  794. package/dist/ionic/p-DlhQjMCJ.js +4 -0
  795. package/dist/ionic/{p-kKvGoaEe.js → p-Due7p-3G.js} +1 -1
  796. package/dist/ionic/p-NcQUGze-.js +4 -0
  797. package/dist/ionic/{p-BCgqWm-V.js → p-T71k3C35.js} +1 -1
  798. package/dist/ionic/p-U8dpZ2Zp.js +4 -0
  799. package/dist/ionic/p-ZjP4CjeZ.js +4 -0
  800. package/dist/ionic/p-a13d8dbd.entry.js +4 -0
  801. package/dist/ionic/p-a60ab478.entry.js +4 -0
  802. package/dist/ionic/p-ac35ffde.entry.js +4 -0
  803. package/dist/ionic/p-b397988a.entry.js +4 -0
  804. package/dist/ionic/p-bb125f13.entry.js +4 -0
  805. package/dist/ionic/p-bb69e27a.entry.js +4 -0
  806. package/dist/ionic/p-bd6dbe7c.entry.js +4 -0
  807. package/dist/ionic/p-c3775482.entry.js +4 -0
  808. package/dist/ionic/p-c5978136.entry.js +4 -0
  809. package/dist/ionic/p-c649b0c8.entry.js +4 -0
  810. package/dist/ionic/p-c80d354e.entry.js +4 -0
  811. package/dist/ionic/p-cc47e975.entry.js +4 -0
  812. package/dist/ionic/p-d0d6727a.entry.js +4 -0
  813. package/dist/ionic/p-d3a427d2.entry.js +4 -0
  814. package/dist/ionic/p-da25ac49.entry.js +4 -0
  815. package/dist/ionic/p-dc063e74.entry.js +4 -0
  816. package/dist/ionic/p-e022d624.entry.js +4 -0
  817. package/dist/ionic/p-e43deed1.entry.js +4 -0
  818. package/dist/ionic/p-e4bb0618.entry.js +4 -0
  819. package/dist/ionic/p-e5bff83e.entry.js +4 -0
  820. package/dist/ionic/p-ea10456b.entry.js +4 -0
  821. package/dist/ionic/p-ea80809c.entry.js +4 -0
  822. package/dist/ionic/p-f10b7057.entry.js +4 -0
  823. package/dist/ionic/p-f336761a.entry.js +4 -0
  824. package/dist/ionic/p-f6df1e51.entry.js +4 -0
  825. package/dist/ionic/p-fbbef443.entry.js +4 -0
  826. package/dist/ionic/p-ox5nzV5F.js +4 -0
  827. package/dist/ionic/p-s_fyA5w3.js +4 -0
  828. package/dist/ionic/p-xGKwMcE6.js +4 -0
  829. package/dist/types/components/accordion/accordion.d.ts +12 -3
  830. package/dist/types/components/accordion-group/accordion-group.d.ts +12 -1
  831. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +3 -7
  832. package/dist/types/components/action-sheet/action-sheet.d.ts +3 -2
  833. package/dist/types/components/alert/alert-interface.d.ts +3 -7
  834. package/dist/types/components/alert/alert.d.ts +3 -2
  835. package/dist/types/components/app/app.d.ts +4 -5
  836. package/dist/types/components/avatar/avatar.d.ts +32 -0
  837. package/dist/types/components/back-button/back-button.d.ts +10 -3
  838. package/dist/types/components/backdrop/backdrop.d.ts +4 -0
  839. package/dist/types/components/badge/badge.d.ts +34 -1
  840. package/dist/types/components/breadcrumb/breadcrumb.d.ts +14 -1
  841. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
  842. package/dist/types/components/button/button.d.ts +23 -8
  843. package/dist/types/components/buttons/buttons.d.ts +5 -1
  844. package/dist/types/components/card/card.d.ts +8 -1
  845. package/dist/types/components/card-content/card-content.d.ts +2 -1
  846. package/dist/types/components/card-header/card-header.d.ts +3 -2
  847. package/dist/types/components/card-subtitle/card-subtitle.d.ts +2 -1
  848. package/dist/types/components/card-title/card-title.d.ts +2 -1
  849. package/dist/types/components/checkbox/checkbox.d.ts +26 -5
  850. package/dist/types/components/chip/chip.d.ts +26 -1
  851. package/dist/types/components/col/col.d.ts +52 -5
  852. package/dist/types/components/content/content.d.ts +3 -0
  853. package/dist/types/components/datetime/datetime.d.ts +26 -1
  854. package/dist/types/components/datetime/utils/data.d.ts +5 -5
  855. package/dist/types/components/datetime-button/datetime-button.d.ts +2 -1
  856. package/dist/types/components/divider/divider.d.ts +20 -0
  857. package/dist/types/components/fab/fab.d.ts +4 -0
  858. package/dist/types/components/fab-button/fab-button.d.ts +11 -3
  859. package/dist/types/components/fab-list/fab-list.d.ts +4 -0
  860. package/dist/types/components/footer/footer-interface.d.ts +1 -0
  861. package/dist/types/components/footer/footer.d.ts +20 -3
  862. package/dist/types/components/gallery/gallery-constants.d.ts +9 -0
  863. package/dist/types/components/gallery/gallery-interface.d.ts +10 -0
  864. package/dist/types/components/gallery/gallery.d.ts +218 -0
  865. package/dist/types/components/gallery/test/utils.d.ts +3 -0
  866. package/dist/types/components/gallery-item/gallery-item.d.ts +33 -0
  867. package/dist/types/components/grid/grid.d.ts +4 -0
  868. package/dist/types/components/header/header-interface.d.ts +1 -0
  869. package/dist/types/components/header/header.d.ts +26 -3
  870. package/dist/types/components/header/header.utils.d.ts +4 -5
  871. package/dist/types/components/img/img.d.ts +2 -0
  872. package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +21 -0
  873. package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +4 -0
  874. package/dist/types/components/input/input.d.ts +45 -5
  875. package/dist/types/components/input-otp/input-otp.d.ts +37 -0
  876. package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +14 -0
  877. package/dist/types/components/item/item.d.ts +17 -4
  878. package/dist/types/components/item-divider/item-divider.d.ts +2 -1
  879. package/dist/types/components/item-group/item-group.d.ts +4 -0
  880. package/dist/types/components/item-option/item-option.d.ts +18 -1
  881. package/dist/types/components/item-options/item-options.d.ts +4 -0
  882. package/dist/types/components/item-sliding/item-sliding.d.ts +47 -1
  883. package/dist/types/components/item-sliding/test/test.utils.d.ts +13 -0
  884. package/dist/types/components/label/label.d.ts +2 -1
  885. package/dist/types/components/list/list.d.ts +15 -1
  886. package/dist/types/components/list-header/list-header.d.ts +2 -1
  887. package/dist/types/components/loading/loading-interface.d.ts +2 -7
  888. package/dist/types/components/loading/loading.d.ts +3 -2
  889. package/dist/types/components/menu/menu.d.ts +3 -0
  890. package/dist/types/components/menu-button/menu-button.d.ts +8 -1
  891. package/dist/types/components/menu-toggle/menu-toggle.d.ts +3 -0
  892. package/dist/types/components/modal/animations/ionic.enter.d.ts +6 -0
  893. package/dist/types/components/modal/animations/ionic.leave.d.ts +6 -0
  894. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  895. package/dist/types/components/modal/modal-interface.d.ts +4 -7
  896. package/dist/types/components/modal/modal.d.ts +11 -1
  897. package/dist/types/components/nav/nav-interface.d.ts +9 -1
  898. package/dist/types/components/nav/nav.d.ts +5 -1
  899. package/dist/types/components/nav-link/nav-link.d.ts +4 -0
  900. package/dist/types/components/note/note.d.ts +2 -1
  901. package/dist/types/components/picker/picker.d.ts +2 -1
  902. package/dist/types/components/picker-column/picker-column.d.ts +2 -1
  903. package/dist/types/components/picker-column-option/picker-column-option.d.ts +4 -0
  904. package/dist/types/components/popover/popover-interface.d.ts +3 -6
  905. package/dist/types/components/popover/popover.d.ts +6 -5
  906. package/dist/types/components/progress-bar/progress-bar.d.ts +10 -1
  907. package/dist/types/components/radio/radio.d.ts +2 -1
  908. package/dist/types/components/radio-group/radio-group.d.ts +12 -0
  909. package/dist/types/components/range/range.d.ts +2 -1
  910. package/dist/types/components/refresher/refresher.d.ts +2 -1
  911. package/dist/types/components/refresher-content/refresher-content.d.ts +10 -0
  912. package/dist/types/components/reorder/reorder.d.ts +9 -0
  913. package/dist/types/components/reorder-group/reorder-group.d.ts +4 -0
  914. package/dist/types/components/ripple-effect/ripple-effect.d.ts +4 -0
  915. package/dist/types/components/route/route.d.ts +4 -0
  916. package/dist/types/components/router/router.d.ts +4 -0
  917. package/dist/types/components/router-link/router-link.d.ts +4 -0
  918. package/dist/types/components/router-outlet/router-outlet.d.ts +4 -1
  919. package/dist/types/components/row/row.d.ts +4 -0
  920. package/dist/types/components/searchbar/searchbar.d.ts +56 -10
  921. package/dist/types/components/segment/segment.d.ts +2 -1
  922. package/dist/types/components/segment-button/segment-button.d.ts +2 -1
  923. package/dist/types/components/select/select.d.ts +59 -15
  924. package/dist/types/components/select-modal/select-modal.d.ts +13 -0
  925. package/dist/types/components/select-option/select-option.d.ts +7 -4
  926. package/dist/types/components/select-popover/select-popover.d.ts +3 -0
  927. package/dist/types/components/skeleton-text/skeleton-text.d.ts +4 -0
  928. package/dist/types/components/spinner/spinner.d.ts +15 -0
  929. package/dist/types/components/split-pane/split-pane.d.ts +4 -0
  930. package/dist/types/components/tab/tab.d.ts +4 -0
  931. package/dist/types/components/tab-bar/tab-bar-interface.d.ts +1 -0
  932. package/dist/types/components/tab-bar/tab-bar.d.ts +41 -3
  933. package/dist/types/components/tab-button/tab-button.d.ts +12 -1
  934. package/dist/types/components/tabs/tabs.d.ts +3 -0
  935. package/dist/types/components/text/text.d.ts +2 -1
  936. package/dist/types/components/textarea/textarea.d.ts +85 -10
  937. package/dist/types/components/thumbnail/thumbnail.d.ts +4 -0
  938. package/dist/types/components/title/title.d.ts +4 -0
  939. package/dist/types/components/toast/animations/utils.d.ts +2 -2
  940. package/dist/types/components/toast/toast-interface.d.ts +3 -7
  941. package/dist/types/components/toast/toast.d.ts +19 -2
  942. package/dist/types/components/toggle/toggle.d.ts +18 -1
  943. package/dist/types/components/toolbar/toolbar.d.ts +43 -3
  944. package/dist/types/components.d.ts +1839 -211
  945. package/dist/types/global/ionic-global.d.ts +28 -2
  946. package/dist/types/interface.d.ts +3 -0
  947. package/dist/types/utils/config.d.ts +128 -4
  948. package/dist/types/utils/css-value-validation.d.ts +21 -0
  949. package/dist/types/utils/focus-trap.d.ts +1 -1
  950. package/dist/types/utils/focus-visible.d.ts +33 -0
  951. package/dist/types/utils/forms/clear-button-press-controller.d.ts +20 -0
  952. package/dist/types/utils/forms/index.d.ts +1 -0
  953. package/dist/types/utils/forms/validity.d.ts +7 -0
  954. package/dist/types/utils/helpers.d.ts +29 -0
  955. package/dist/types/utils/overlay-control-label.d.ts +11 -9
  956. package/dist/types/utils/overlays-interface.d.ts +31 -1
  957. package/dist/types/utils/overlays.d.ts +1 -1
  958. package/dist/types/utils/scroll-hide-controller.d.ts +56 -0
  959. package/dist/types/utils/test/playwright/drag-element.d.ts +16 -3
  960. package/dist/types/utils/test/playwright/field-geometry.d.ts +13 -0
  961. package/dist/types/utils/test/playwright/generator.d.ts +31 -2
  962. package/dist/types/utils/test/playwright/index.d.ts +1 -0
  963. package/dist/types/utils/theme.d.ts +9 -0
  964. package/hydrate/index.js +5409 -1229
  965. package/hydrate/index.mjs +5409 -1229
  966. package/package.json +9 -6
  967. package/components/p-6sKRBFnK.js +0 -4
  968. package/components/p-B8HBLiYi.js +0 -4
  969. package/components/p-BEiYs-sz.js +0 -4
  970. package/components/p-BKxLivx4.js +0 -4
  971. package/components/p-BLjEwM6v.js +0 -4
  972. package/components/p-BNnmwjuy.js +0 -4
  973. package/components/p-BSJriPuC.js +0 -4
  974. package/components/p-BSQPZ79H.js +0 -4
  975. package/components/p-BUVGbkSc.js +0 -4
  976. package/components/p-B_tZQKpS.js +0 -4
  977. package/components/p-BhamHSw3.js +0 -4
  978. package/components/p-BinR4_P7.js +0 -4
  979. package/components/p-BmVRXR1y.js +0 -4
  980. package/components/p-BrOSQhkA.js +0 -4
  981. package/components/p-BriaEJK8.js +0 -4
  982. package/components/p-BsLM9eQu.js +0 -4
  983. package/components/p-CAQG0btC.js +0 -4
  984. package/components/p-CHHkdXfP.js +0 -4
  985. package/components/p-CJgshb3W.js +0 -4
  986. package/components/p-CQjNc-Pz.js +0 -4
  987. package/components/p-CTUMJM0R.js +0 -4
  988. package/components/p-CXy2v7GI.js +0 -4
  989. package/components/p-Canp1qah.js +0 -4
  990. package/components/p-CcQQ8oRo.js +0 -4
  991. package/components/p-CiFFeRH9.js +0 -4
  992. package/components/p-CiXOsJF2.js +0 -4
  993. package/components/p-CvzE7FFp.js +0 -4
  994. package/components/p-CzykzqAO.js +0 -4
  995. package/components/p-D0jSx7rE.js +0 -4
  996. package/components/p-D4NOsSCE.js +0 -4
  997. package/components/p-DGLuPe1e.js +0 -4
  998. package/components/p-DGUed0uX.js +0 -4
  999. package/components/p-DJztqcrH.js +0 -4
  1000. package/components/p-DM2jMsSO.js +0 -4
  1001. package/components/p-DPyjiKOq.js +0 -4
  1002. package/components/p-DSmHJ2DH.js +0 -4
  1003. package/components/p-DlUdjUlf.js +0 -4
  1004. package/components/p-LH1I_Zhd.js +0 -4
  1005. package/components/p-LpMHEu3v.js +0 -4
  1006. package/components/p-PPagT42x.js +0 -4
  1007. package/components/p-RJT5zTbD.js +0 -4
  1008. package/components/p-WMQuK_Tj.js +0 -4
  1009. package/components/p-byZM6qHV.js +0 -4
  1010. package/components/p-eJpG4UbM.js +0 -4
  1011. package/components/p-q2WJ5Igc.js +0 -4
  1012. package/components/p-y7Nhe3de.js +0 -4
  1013. package/dist/cjs/focus-visible-CCvKiLh3.js +0 -77
  1014. package/dist/cjs/ionic-global-C1h8Yi_K.js +0 -156
  1015. package/dist/cjs/keyboard-controller-CLcFxSnb.js +0 -167
  1016. package/dist/cjs/validity-BpS37YFM.js +0 -19
  1017. package/dist/esm/focus-visible-BmVRXR1y.js +0 -75
  1018. package/dist/esm/ionic-global-B-G43ddm.js +0 -151
  1019. package/dist/esm/keyboard-controller-Dzjet5wD.js +0 -165
  1020. package/dist/esm/validity-DJztqcrH.js +0 -17
  1021. package/dist/ionic/p-0517aec4.entry.js +0 -4
  1022. package/dist/ionic/p-083b1119.entry.js +0 -4
  1023. package/dist/ionic/p-0ab133d6.entry.js +0 -4
  1024. package/dist/ionic/p-1110da0d.entry.js +0 -4
  1025. package/dist/ionic/p-1213b719.entry.js +0 -4
  1026. package/dist/ionic/p-150f350e.entry.js +0 -4
  1027. package/dist/ionic/p-20d1ac29.entry.js +0 -4
  1028. package/dist/ionic/p-24b0a961.entry.js +0 -4
  1029. package/dist/ionic/p-28f506ce.entry.js +0 -4
  1030. package/dist/ionic/p-2e6e933d.entry.js +0 -4
  1031. package/dist/ionic/p-30dcf43b.entry.js +0 -4
  1032. package/dist/ionic/p-378341d1.entry.js +0 -4
  1033. package/dist/ionic/p-37f46670.entry.js +0 -4
  1034. package/dist/ionic/p-3a5faaa8.entry.js +0 -4
  1035. package/dist/ionic/p-3bd7e5df.entry.js +0 -4
  1036. package/dist/ionic/p-3c4b0ba7.entry.js +0 -4
  1037. package/dist/ionic/p-42b2a992.entry.js +0 -4
  1038. package/dist/ionic/p-52dc3309.entry.js +0 -4
  1039. package/dist/ionic/p-58f914ee.entry.js +0 -4
  1040. package/dist/ionic/p-5b9666be.entry.js +0 -4
  1041. package/dist/ionic/p-5c19330c.entry.js +0 -4
  1042. package/dist/ionic/p-61b304c8.entry.js +0 -4
  1043. package/dist/ionic/p-624f2fa8.entry.js +0 -4
  1044. package/dist/ionic/p-636349e2.entry.js +0 -4
  1045. package/dist/ionic/p-6865f0e1.entry.js +0 -4
  1046. package/dist/ionic/p-7441ed2b.entry.js +0 -4
  1047. package/dist/ionic/p-76309bab.entry.js +0 -4
  1048. package/dist/ionic/p-83448626.entry.js +0 -4
  1049. package/dist/ionic/p-834afcf7.entry.js +0 -4
  1050. package/dist/ionic/p-93cd738b.entry.js +0 -4
  1051. package/dist/ionic/p-9b78fedf.entry.js +0 -4
  1052. package/dist/ionic/p-9dd9788c.entry.js +0 -4
  1053. package/dist/ionic/p-B4ELlbJE.js +0 -4
  1054. package/dist/ionic/p-B4wzg4z4.js +0 -4
  1055. package/dist/ionic/p-B4xjg_Qu.js +0 -4
  1056. package/dist/ionic/p-BChRVdVv.js +0 -4
  1057. package/dist/ionic/p-BSQPZ79H.js +0 -4
  1058. package/dist/ionic/p-BVEsh7-M.js +0 -4
  1059. package/dist/ionic/p-Ba6ZV-qU.js +0 -4
  1060. package/dist/ionic/p-BmVRXR1y.js +0 -4
  1061. package/dist/ionic/p-BtHAx8im.js +0 -4
  1062. package/dist/ionic/p-Bv-6401R.js +0 -4
  1063. package/dist/ionic/p-BvabGprD.js +0 -4
  1064. package/dist/ionic/p-CTmJSZcs.js +0 -4
  1065. package/dist/ionic/p-CTrwMl44.js +0 -4
  1066. package/dist/ionic/p-CgQdInM0.js +0 -4
  1067. package/dist/ionic/p-CrAPHbJ3.js +0 -4
  1068. package/dist/ionic/p-CsWrz1c2.js +0 -4
  1069. package/dist/ionic/p-D5akOqD0.js +0 -4
  1070. package/dist/ionic/p-D9OR05yj.js +0 -6
  1071. package/dist/ionic/p-DHf9V6zI.js +0 -4
  1072. package/dist/ionic/p-DJztqcrH.js +0 -4
  1073. package/dist/ionic/p-DZUqAr_6.js +0 -4
  1074. package/dist/ionic/p-Dzew6Qv7.js +0 -4
  1075. package/dist/ionic/p-b0a3dd1a.entry.js +0 -4
  1076. package/dist/ionic/p-b1164028.entry.js +0 -4
  1077. package/dist/ionic/p-b710b4b8.entry.js +0 -4
  1078. package/dist/ionic/p-b9659d21.entry.js +0 -4
  1079. package/dist/ionic/p-ba7bd621.entry.js +0 -4
  1080. package/dist/ionic/p-byZM6qHV.js +0 -4
  1081. package/dist/ionic/p-daaecea3.entry.js +0 -4
  1082. package/dist/ionic/p-e05073f6.entry.js +0 -4
  1083. package/dist/ionic/p-e137f724.entry.js +0 -4
  1084. package/dist/ionic/p-e1969fd1.entry.js +0 -4
  1085. package/dist/ionic/p-e338693a.entry.js +0 -4
  1086. package/dist/ionic/p-e4c3f17f.entry.js +0 -4
  1087. package/dist/ionic/p-e7414c33.entry.js +0 -4
  1088. package/dist/ionic/p-eb762f80.entry.js +0 -4
  1089. package/dist/ionic/p-edcb63e5.entry.js +0 -4
  1090. package/dist/ionic/p-efa00ce5.entry.js +0 -4
  1091. package/dist/ionic/p-f19e50f8.entry.js +0 -4
  1092. package/dist/ionic/p-f20b6a9b.entry.js +0 -4
  1093. package/dist/ionic/p-f9057f70.entry.js +0 -4
  1094. package/dist/ionic/p-f99cf5aa.entry.js +0 -4
  1095. package/dist/ionic/p-fee863dc.entry.js +0 -4
  1096. package/dist/ionic/p-tXpzvta8.js +0 -4
  1097. package/dist/ionic/p-vPo3vRFc.js +0 -4
  1098. /package/dist/collection/components/{input-password-toggle/input-password-toggle.css → refresher-content/refresher-content.css} +0 -0
@@ -1,21 +1,23 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { r as registerInstance, i as config, a as printIonWarning, h, f as Host, g as getElement, d as createEvent, e as readTask, j as forceUpdate, w as writeTask, c as printIonError } from './index-D9OR05yj.js';
5
- import { v as shouldUseCloseWatcher, n as getOverlaySizeType } from './overlays-BQnV0HAU.js';
6
- import { a as isPlatform, b as getIonMode } from './ionic-global-B-G43ddm.js';
7
- import { i as inheritAriaAttributes, h as hasLazyBuild, c as componentOnReady, e as clamp, v as shallowEqualStringMap } from './helpers-B54ynME_.js';
4
+ import { r as registerInstance, h, i as config, f as Host, g as getElement, d as createEvent, e as readTask, j as forceUpdate, w as writeTask, a as printIonWarning, c as printIonError } from './index-CsxpVq9f.js';
5
+ import { focusElements } from './focus-visible-BYk20Mf5.js';
6
+ import { c as getIonTheme, a as isPlatform, b as getIonMode } from './ionic-global-BAIaPRGU.js';
7
+ import { i as inheritAriaAttributes, h as hasLazyBuild, c as componentOnReady, e as clamp, w as shallowEqualStringMap } from './helpers-DxiyEiQq.js';
8
+ import { n as getOverlaySizeType } from './overlays-CLqEprTi.js';
8
9
  import { i as isRTL } from './dir-Dojwmvde.js';
9
- import { h as hostContext, c as createColorClasses } from './theme-byZM6qHV.js';
10
- import { b as findIonContent, p as printIonContentErrorMsg, g as getScrollElement } from './index--21qeSt0.js';
11
- import { c as createKeyboardController } from './keyboard-controller-Dzjet5wD.js';
10
+ import { h as hostContext, c as createColorClasses } from './theme-BUF_V-Kg.js';
11
+ import { b as findIonContent, p as printIonContentErrorMsg, g as getScrollElement } from './index-D0-93AmS.js';
12
+ import { c as createScrollHideController, a as createKeyboardController } from './scroll-hide-controller-m-39_CyK.js';
12
13
  import { g as getTimeGivenProgression } from './cubic-bezier-hHmYLOfE.js';
13
- import { a as attachComponent, d as detachComponent } from './framework-delegate-DeT5pmPB.js';
14
+ import { a as attachComponent, d as detachComponent } from './framework-delegate-1jBLyhBr.js';
14
15
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
15
- import { t as transition } from './index-B8iieOdw.js';
16
+ import { t as transition } from './index-BrTerDOH.js';
17
+ import './index-ZjP4CjeZ.js';
16
18
  import './gesture-controller-B_gJaBk0.js';
17
- import './keyboard-ly3M0GO7.js';
18
- import './capacitor-CoEgIpR9.js';
19
+ import './keyboard-DAF8GNJ9.js';
20
+ import './capacitor-CFERIeaU.js';
19
21
 
20
22
  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
23
 
@@ -23,51 +25,6 @@ const App = class {
23
25
  constructor(hostRef) {
24
26
  registerInstance(this, hostRef);
25
27
  }
26
- componentDidLoad() {
27
- {
28
- this.rIC(async () => {
29
- const isHybrid = isPlatform(window, 'hybrid');
30
- if (!config.getBoolean('_testing')) {
31
- import('./index-D_xZtbw6.js').then((module) => module.startTapClick(config));
32
- }
33
- if (config.getBoolean('statusTap', isHybrid)) {
34
- import('./status-tap-DRx9wSD_.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-MCrhq67U.js').then((module) => module.startInputShims(config, platform));
43
- }
44
- const hardwareBackButtonModule = await import('./overlays-BQnV0HAU.js').then(function (n) { return n.w; });
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-DDw62P0D.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
28
  /**
72
29
  * Used to set focus on an element that uses `ion-focusable`.
73
30
  * Do not use this if focusing the element as a result of a keyboard
@@ -80,52 +37,29 @@ const App = class {
80
37
  * @param elements An array of HTML elements to set focus on.
81
38
  */
82
39
  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
- }
40
+ /**
41
+ * The focus-visible utility is used to set focus on an
42
+ * element that uses `ion-focusable`.
43
+ */
44
+ focusElements(elements);
94
45
  }
95
46
  render() {
96
- const mode = getIonMode(this);
97
- return (h(Host, { key: '77a7459d3e42b3715a5a7e1cf468e2ebc99e54bb', class: {
98
- [mode]: true,
47
+ const theme = getIonTheme(this);
48
+ return (h(Host, { key: '3b7e84c7c4187287123413f90838cda89136b2a4', class: {
49
+ [theme]: true,
99
50
  'ion-page': true,
100
51
  'force-statusbar-padding': config.getBoolean('_forceStatusbarPadding'),
101
52
  } }));
102
53
  }
103
54
  get el() { return getElement(this); }
104
55
  };
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
56
  App.style = appCss();
125
57
 
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}`;
58
+ 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, #242528));--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)}`;
59
+
60
+ const buttonsIosCss = () => `.sc-ion-buttons-ios-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0)}.sc-ion-buttons-ios-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-ios-h{z-index:99}.sc-ion-buttons-ios-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-ios-s ion-button{--padding-top:3px;--padding-bottom:3px;--padding-start:5px;--padding-end:5px;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px;min-height:32px}.sc-ion-buttons-ios-s .button-has-icon-only{--padding-top:0;--padding-bottom:0}.sc-ion-buttons-ios-s ion-button:not(.button-round){--border-radius:4px}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button{--color:initial;--border-color:initial;--background-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-solid,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-solid{--background:var(--ion-color-contrast);--background-focused:#000;--background-focused-opacity:0.12;--background-activated:#000;--background-activated-opacity:0.12;--background-hover:var(--ion-color-base);--background-hover-opacity:0.45;--color:var(--ion-color-base);--color-focused:var(--ion-color-base)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-clear,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-clear{--color-activated:var(--ion-color-contrast);--color-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-outline,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-outline{--color-activated:var(--ion-color-base);--color-focused:var(--ion-color-contrast);--background-activated:var(--ion-color-contrast)}.sc-ion-buttons-ios-s .button-clear,.sc-ion-buttons-ios-s .button-outline{--background-activated:transparent;--background-focused:currentColor;--background-hover:transparent}.sc-ion-buttons-ios-s .button-solid:not(.ion-color){--background-focused:#000;--background-focused-opacity:0.12;--background-activated:#000;--background-activated-opacity:0.12}.sc-ion-buttons-ios-s ion-icon[slot=start]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-end:0.3em;margin-inline-end:0.3em;font-size:1.41em;line-height:0.67}.sc-ion-buttons-ios-s ion-icon[slot=end]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-start:0.4em;margin-inline-start:0.4em;font-size:1.41em;line-height:0.67}.sc-ion-buttons-ios-s ion-icon[slot=icon-only]{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:1.65em;line-height:0.67}`;
127
61
 
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}`;
62
+ 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
63
 
130
64
  const Buttons = class {
131
65
  constructor(hostRef) {
@@ -137,7 +71,7 @@ const Buttons = class {
137
71
  * first toolbar, the buttons will be hidden and will
138
72
  * only be shown once all toolbars have fully collapsed.
139
73
  *
140
- * Only applies in `ios` mode with `collapse` set to
74
+ * Only applies in the `ios` theme with `collapse` set to
141
75
  * `true` on `ion-header`.
142
76
  *
143
77
  * Typically used for [Collapsible Large Titles](https://ionicframework.com/docs/api/title#collapsible-large-titles)
@@ -145,19 +79,20 @@ const Buttons = class {
145
79
  this.collapse = false;
146
80
  }
147
81
  render() {
148
- const mode = getIonMode(this);
149
- return (h(Host, { key: '58c1fc5eb867d0731c63549b1ccb3ec3bbbe6e1b', class: {
150
- [mode]: true,
82
+ const theme = getIonTheme(this);
83
+ return (h(Host, { key: '95c107ba7871c801a5ef14c636dc8e2fe69debf3', class: {
84
+ [theme]: true,
151
85
  ['buttons-collapse']: this.collapse,
152
- } }, h("slot", { key: '0c8f95b9840c8fa0c4e50be84c5159620a3eb5c8' })));
86
+ } }, h("slot", { key: '58669abfce458e1344b84286d4200e305017b958' })));
153
87
  }
154
88
  };
155
89
  Buttons.style = {
90
+ ionic: buttonsIonicCss(),
156
91
  ios: buttonsIosCss(),
157
92
  md: buttonsMdCss()
158
93
  };
159
94
 
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)}`;
95
+ 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
96
 
162
97
  const Content = class {
163
98
  constructor(hostRef) {
@@ -381,9 +316,8 @@ const Content = class {
381
316
  this.resize();
382
317
  }, 100);
383
318
  }
384
- shouldForceOverscroll() {
319
+ shouldForceOverscroll(mode) {
385
320
  const { forceOverscroll } = this;
386
- const mode = getIonMode(this);
387
321
  return forceOverscroll === undefined ? mode === 'ios' && isPlatform('ios') : forceOverscroll;
388
322
  }
389
323
  /**
@@ -611,12 +545,13 @@ const Content = class {
611
545
  render() {
612
546
  const { fixedSlotPlacement, inheritedAttributes, isMainContent, scrollX, scrollY, el } = this;
613
547
  const rtl = isRTL(el) ? 'rtl' : 'ltr';
614
- const mode = getIonMode(this);
615
- const forceOverscroll = this.shouldForceOverscroll();
616
- const transitionShadow = mode === 'ios';
548
+ const theme = getIonTheme(this);
549
+ const mode = getIonMode(this, theme);
550
+ const forceOverscroll = this.shouldForceOverscroll(mode);
551
+ const transitionShadow = theme === 'ios';
617
552
  this.resize();
618
- return (h(Host, { key: 'e1013621096729354ef92915af52dd823e69fdff', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
619
- [mode]: true,
553
+ return (h(Host, { key: '7e283337732b709e43fe89b08f6852c499b964ff', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
554
+ [theme]: true,
620
555
  'content-fullscreen': this.fullscreen,
621
556
  'content-sizing': this.sizeToContent,
622
557
  overscroll: forceOverscroll,
@@ -624,12 +559,12 @@ const Content = class {
624
559
  }), style: {
625
560
  '--offset-top': `${this.cTop}px`,
626
561
  '--offset-bottom': `${this.cBottom}px`,
627
- }, ...inheritedAttributes }, h("div", { key: '3d8649b164d6324beaa1bc50e1d204ad06c2ec1a', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: 'dd2d3bed8690b4f5027a43f5ec60e7e7df18106d', class: {
562
+ }, ...inheritedAttributes }, h("div", { key: '0dcbe4f4fe2d0f85b8c36bc656fc619afdc89cfe', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: 'cbe91794c2fc53a59f8994968571a677a2e8346b', class: {
628
563
  'inner-scroll': true,
629
564
  'scroll-x': scrollX,
630
565
  'scroll-y': scrollY,
631
566
  overscroll: (scrollX || scrollY) && forceOverscroll,
632
- }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: 'dc3d4584d9e9afd43699525a619b8e873078fbbf' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
567
+ }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '1a6b9bf25051eee41003185e1b519e4c4af2c001' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
633
568
  }
634
569
  get el() { return getElement(this); }
635
570
  static get watchers() { return {
@@ -659,7 +594,8 @@ const getPageElement = (el) => {
659
594
  * between the popover and the edges of the screen. But if the popover contains
660
595
  * its own page element, we should use that instead.
661
596
  */
662
- const page = el.closest('ion-app, ion-page, .ion-page, page-inner, .popover-content');
597
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
598
+ const page = el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner, .popover-content`);
663
599
  if (page) {
664
600
  return page;
665
601
  }
@@ -723,45 +659,90 @@ const handleFooterFade = (scrollEl, baseEl) => {
723
659
  });
724
660
  };
725
661
 
726
- 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}`;
662
+ 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}`;
727
663
 
728
- 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}`;
664
+ 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}`;
665
+
666
+ 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}`;
729
667
 
730
668
  const Footer = class {
731
669
  constructor(hostRef) {
732
670
  registerInstance(this, hostRef);
733
671
  this.keyboardCtrl = null;
734
672
  this.keyboardCtrlPromise = null;
673
+ this.scrollHideCtrlPromise = null;
674
+ this.hasWarnedCollapse = false;
675
+ this.fadeSetupId = 0;
735
676
  this.keyboardVisible = false;
736
677
  /**
737
678
  * If `true`, the footer will be translucent.
738
- * Only applies when the mode is `"ios"` and the device supports
679
+ * Only applies when the theme is `"ios"` and the device supports
739
680
  * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
740
681
  *
741
682
  * Note: In order to scroll content behind the footer, the `fullscreen`
742
683
  * attribute needs to be set on the content.
743
684
  */
744
685
  this.translucent = false;
745
- this.checkCollapsibleFooter = () => {
746
- const mode = getIonMode(this);
747
- if (mode !== 'ios') {
686
+ this.checkCollapsibleFooter = async () => {
687
+ const { scrollEffect, collapse } = this;
688
+ if (collapse !== undefined && scrollEffect === undefined && !this.hasWarnedCollapse) {
689
+ this.hasWarnedCollapse = true;
690
+ printIonWarning(`[ion-footer] - The \`collapse\` property is deprecated. Use \`scrollEffect\` instead.\nExample: <ion-footer scroll-effect="${collapse}">`, this.el);
691
+ }
692
+ const effect = scrollEffect ?? collapse;
693
+ // Skip teardown/rebuild if the effect hasn't changed.
694
+ // This prevents keyboard toggles (which trigger re-renders via
695
+ // @State keyboardVisible) from destroying the scroll controller
696
+ // and resetting isHidden.
697
+ if (effect === this.activeEffect) {
748
698
  return;
749
699
  }
750
- const { collapse } = this;
751
- const hasFade = collapse === 'fade';
700
+ const hasHide = effect === 'hide';
701
+ const hasFade = effect === 'fade';
752
702
  this.destroyCollapsibleFooter();
753
- if (hasFade) {
754
- const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
755
- const contentEl = pageEl ? findIonContent(pageEl) : null;
703
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
704
+ const pageEl = this.el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner`);
705
+ const contentEl = pageEl ? findIonContent(pageEl) : null;
706
+ if (hasHide && contentEl) {
707
+ this.activeEffect = effect;
708
+ await this.setupScrollEffectHide(contentEl);
709
+ return;
710
+ }
711
+ // fade via the deprecated `collapse` prop is iOS-only.
712
+ // fade via the new `scrollEffect` prop works in all themes.
713
+ const isModeRestricted = scrollEffect === undefined && getIonTheme(this) !== 'ios';
714
+ if (hasFade && !isModeRestricted) {
756
715
  if (!contentEl) {
757
716
  printIonContentErrorMsg(this.el);
758
717
  return;
759
718
  }
760
719
  this.setupFadeFooter(contentEl);
720
+ this.activeEffect = effect;
721
+ }
722
+ };
723
+ this.setupScrollEffectHide = async (contentEl) => {
724
+ const setupPromise = createScrollHideController(contentEl, {
725
+ el: this.el,
726
+ cssVar: '--internal-footer-hide-height',
727
+ hiddenClass: 'footer-scroll-hidden',
728
+ contentPartnerClass: 'content-footer-hide-scroll-partner',
729
+ contentHiddenClass: 'content-footer-hide-scroll-hidden',
730
+ });
731
+ this.scrollHideCtrlPromise = setupPromise;
732
+ const controller = await setupPromise;
733
+ if (this.scrollHideCtrlPromise === setupPromise) {
734
+ this.scrollHideCtrlPromise = null;
735
+ controller.init();
736
+ this.scrollHideCtrl = controller;
761
737
  }
762
738
  };
763
739
  this.setupFadeFooter = async (contentEl) => {
764
- const scrollEl = (this.scrollEl = await getScrollElement(contentEl));
740
+ const setupId = ++this.fadeSetupId;
741
+ const scrollEl = await getScrollElement(contentEl);
742
+ if (this.fadeSetupId !== setupId) {
743
+ return;
744
+ }
745
+ this.scrollEl = scrollEl;
765
746
  /**
766
747
  * Handle fading of toolbars on scroll
767
748
  */
@@ -806,6 +787,7 @@ const Footer = class {
806
787
  }
807
788
  }
808
789
  disconnectedCallback() {
790
+ this.destroyCollapsibleFooter();
809
791
  if (this.keyboardCtrlPromise) {
810
792
  this.keyboardCtrlPromise.then((ctrl) => ctrl.destroy());
811
793
  this.keyboardCtrlPromise = null;
@@ -816,29 +798,43 @@ const Footer = class {
816
798
  }
817
799
  }
818
800
  destroyCollapsibleFooter() {
801
+ this.activeEffect = undefined;
802
+ this.fadeSetupId++;
803
+ this.scrollHideCtrlPromise = null;
804
+ if (this.scrollHideCtrl) {
805
+ this.scrollHideCtrl.destroy();
806
+ this.scrollHideCtrl = undefined;
807
+ }
819
808
  if (this.scrollEl && this.contentScrollCallback) {
820
809
  this.scrollEl.removeEventListener('scroll', this.contentScrollCallback);
821
810
  this.contentScrollCallback = undefined;
822
811
  }
823
812
  }
824
813
  render() {
825
- const { translucent, collapse } = this;
826
- const mode = getIonMode(this);
814
+ const { translucent, scrollEffect, collapse } = this;
815
+ const theme = getIonTheme(this);
816
+ const effect = scrollEffect ?? collapse;
817
+ // fade via the deprecated `collapse` prop is iOS-only.
818
+ const isModeRestricted = scrollEffect === undefined && theme !== 'ios';
819
+ const hasHide = effect === 'hide';
820
+ const hasFade = effect === 'fade' && !isModeRestricted;
827
821
  const tabs = this.el.closest('ion-tabs');
828
822
  const tabBar = tabs?.querySelector(':scope > ion-tab-bar');
829
- return (h(Host, { key: '71939c4bbaef5062532a99ee2e33574102a9abad', role: "contentinfo", class: {
830
- [mode]: true,
823
+ return (h(Host, { key: 'a0777b4a639d22e15374879f018efcf589e756f8', role: "contentinfo", class: {
824
+ [theme]: true,
831
825
  // Used internally for styling
832
- [`footer-${mode}`]: true,
826
+ [`footer-${theme}`]: true,
833
827
  [`footer-translucent`]: translucent,
834
- [`footer-translucent-${mode}`]: translucent,
828
+ [`footer-translucent-${theme}`]: translucent,
835
829
  ['footer-toolbar-padding']: !this.keyboardVisible && (!tabBar || tabBar.slot !== 'bottom'),
836
- [`footer-collapse-${collapse}`]: collapse !== undefined,
837
- } }, mode === 'ios' && translucent && h("div", { key: '2fa14f61661c47c661cecd696176728d6eafa74f', class: "footer-background" }), h("slot", { key: '8e63696e7c528d5c38201e546bf08135290d0945' })));
830
+ 'footer-collapse-fade': hasFade,
831
+ 'footer-scroll-effect-hide': hasHide,
832
+ } }, theme === 'ios' && translucent && h("div", { key: 'd78b46870cbf11c95b066d649c04ec398b66e614', class: "footer-background" }), h("slot", { key: '9dc34787cd29597fe1b1198db317602014ac1483' })));
838
833
  }
839
834
  get el() { return getElement(this); }
840
835
  };
841
836
  Footer.style = {
837
+ ionic: ionicFooterMdCss(),
842
838
  ios: footerIosCss(),
843
839
  md: footerMdCss()
844
840
  };
@@ -896,7 +892,7 @@ const setToolbarBackgroundOpacity = (headerEl, opacity) => {
896
892
  * has collapsed, so it is handled
897
893
  * by handleHeaderFade()
898
894
  */
899
- if (headerEl.collapse === 'fade') {
895
+ if ((headerEl.scrollEffect ?? headerEl.collapse) === 'fade') {
900
896
  return;
901
897
  }
902
898
  if (opacity === undefined) {
@@ -1054,46 +1050,69 @@ const handleHeaderFade = (scrollEl, baseEl, condenseHeader) => {
1054
1050
  * Get the role type for the ion-header.
1055
1051
  *
1056
1052
  * @param isInsideMenu If ion-header is inside ion-menu.
1057
- * @param isCondensed If ion-header has collapse="condense".
1058
- * @param mode The current mode.
1059
- * @returns 'none' if inside ion-menu or if condensed in md
1060
- * mode, otherwise 'banner'.
1053
+ * @returns 'none' if inside ion-menu, otherwise 'banner'.
1054
+ * Condensed headers start as 'banner' and have their role
1055
+ * toggled dynamically by setHeaderActive() on scroll.
1061
1056
  */
1062
- const getRoleType = (isInsideMenu, isCondensed, mode) => {
1057
+ const getRoleType = (isInsideMenu) => {
1063
1058
  // If the header is inside a menu, it should not have the banner role.
1064
1059
  if (isInsideMenu) {
1065
1060
  return ROLE_NONE;
1066
1061
  }
1067
- /**
1068
- * Only apply role="none" to `md` mode condensed headers
1069
- * since the large header is never shown.
1070
- */
1071
- if (isCondensed && mode === 'md') {
1072
- return ROLE_NONE;
1073
- }
1074
1062
  // Default to banner role.
1075
1063
  return ROLE_BANNER;
1076
1064
  };
1077
1065
 
1078
- 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}`;
1066
+ 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)) solid var(--token-border-default, var(--token-primitives-neutral-400, #d0d7df))}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;pointer-events:none}.header-translucent-ionic .header-background-blur,.header-translucent-ionic .header-background-blur-layer{right:0;left:0;top:0;bottom:0;position:absolute}.header-translucent-ionic .header-background-blur-layer:nth-child(1){-webkit-backdrop-filter:blur(var(--token-scale-025, 1px));backdrop-filter:blur(var(--token-scale-025, 1px));-webkit-mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(82.64%, #000), color-stop(91%, transparent));-webkit-mask-image:linear-gradient(to bottom, #000 82.64%, transparent 91%);mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(82.64%, #000), color-stop(91%, transparent));mask-image:linear-gradient(to bottom, #000 82.64%, transparent 91%)}.header-translucent-ionic .header-background-blur-layer:nth-child(2){-webkit-backdrop-filter:blur(var(--token-scale-050, 2px));backdrop-filter:blur(var(--token-scale-050, 2px));-webkit-mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(74.29%, #000), color-stop(82.64%, transparent));-webkit-mask-image:linear-gradient(to bottom, #000 74.29%, transparent 82.64%);mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(74.29%, #000), color-stop(82.64%, transparent));mask-image:linear-gradient(to bottom, #000 74.29%, transparent 82.64%)}.header-translucent-ionic .header-background-blur-layer:nth-child(3){-webkit-backdrop-filter:blur(var(--token-scale-100, 4px));backdrop-filter:blur(var(--token-scale-100, 4px));-webkit-mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(65.93%, #000), color-stop(74.29%, transparent));-webkit-mask-image:linear-gradient(to bottom, #000 65.93%, transparent 74.29%);mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(65.93%, #000), color-stop(74.29%, transparent));mask-image:linear-gradient(to bottom, #000 65.93%, transparent 74.29%)}.header-translucent-ionic .header-background-blur-layer:nth-child(4){-webkit-backdrop-filter:blur(var(--token-scale-200, 8px));backdrop-filter:blur(var(--token-scale-200, 8px));-webkit-mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(57.57%, #000), color-stop(65.93%, transparent));-webkit-mask-image:linear-gradient(to bottom, #000 57.57%, transparent 65.93%);mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(57.57%, #000), color-stop(65.93%, transparent));mask-image:linear-gradient(to bottom, #000 57.57%, transparent 65.93%)}.header-translucent-ionic .header-background-blur-layer:nth-child(5){-webkit-backdrop-filter:blur(var(--token-scale-400, 16px));backdrop-filter:blur(var(--token-scale-400, 16px));-webkit-mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(49.21%, #000), color-stop(57.57%, transparent));-webkit-mask-image:linear-gradient(to bottom, #000 49.21%, transparent 57.57%);mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(49.21%, #000), color-stop(57.57%, transparent));mask-image:linear-gradient(to bottom, #000 49.21%, transparent 57.57%)}.header-translucent-ionic .header-background-blur-layer:nth-child(6){-webkit-backdrop-filter:blur(var(--token-scale-800, 32px));backdrop-filter:blur(var(--token-scale-800, 32px));-webkit-mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(40.86%, #000), color-stop(49.21%, transparent));-webkit-mask-image:linear-gradient(to bottom, #000 40.86%, transparent 49.21%);mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(40.86%, #000), color-stop(49.21%, transparent));mask-image:linear-gradient(to bottom, #000 40.86%, transparent 49.21%)}.header-translucent-ionic .header-background-blur-layer:nth-child(7){-webkit-backdrop-filter:blur(var(--token-scale-1600, 64px));backdrop-filter:blur(var(--token-scale-1600, 64px));-webkit-mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(32.5%, #000), color-stop(40.86%, transparent));-webkit-mask-image:linear-gradient(to bottom, #000 32.5%, transparent 40.86%);mask-image:-webkit-gradient(linear, left top, left bottom, color-stop(32.5%, #000), color-stop(40.86%, transparent));mask-image:linear-gradient(to bottom, #000 32.5%, transparent 40.86%)}.header-translucent-ionic ion-toolbar{--background:linear-gradient(to bottom, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0))}}`;
1067
+
1068
+ 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}`;
1079
1069
 
1080
- 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}`;
1070
+ 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}`;
1081
1071
 
1082
1072
  const Header = class {
1083
1073
  constructor(hostRef) {
1084
1074
  registerInstance(this, hostRef);
1085
1075
  this.inheritedAttributes = {};
1076
+ this.scrollHideCtrlPromise = null;
1077
+ this.hasWarnedCollapse = false;
1078
+ this.fadeCondenseSetupId = 0;
1079
+ /**
1080
+ * If `true`, the header will have a line at the bottom.
1081
+ * TODO(ROU-10855): add support for this prop on ios/md themes
1082
+ */
1083
+ this.divider = false;
1086
1084
  /**
1087
1085
  * If `true`, the header will be translucent.
1088
- * Only applies when the mode is `"ios"` and the device supports
1086
+ * Only applies when the theme is `"ios"` or `"ionic"` and the device supports
1089
1087
  * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
1090
1088
  *
1091
1089
  * Note: In order to scroll content behind the header, the `fullscreen`
1092
1090
  * attribute needs to be set on the content.
1093
1091
  */
1094
1092
  this.translucent = false;
1093
+ this.setupScrollEffectHide = async (contentEl) => {
1094
+ const setupPromise = createScrollHideController(contentEl, {
1095
+ el: this.el,
1096
+ cssVar: '--internal-header-hide-height',
1097
+ hiddenClass: 'header-scroll-hidden',
1098
+ contentPartnerClass: 'content-header-hide-scroll-partner',
1099
+ contentHiddenClass: 'content-header-hide-scroll-hidden',
1100
+ });
1101
+ this.scrollHideCtrlPromise = setupPromise;
1102
+ const controller = await setupPromise;
1103
+ if (this.scrollHideCtrlPromise === setupPromise) {
1104
+ this.scrollHideCtrlPromise = null;
1105
+ controller.init();
1106
+ this.scrollHideCtrl = controller;
1107
+ }
1108
+ };
1095
1109
  this.setupFadeHeader = async (contentEl, condenseHeader) => {
1096
- const scrollEl = (this.scrollEl = await getScrollElement(contentEl));
1110
+ const setupId = ++this.fadeCondenseSetupId;
1111
+ const scrollEl = await getScrollElement(contentEl);
1112
+ if (this.fadeCondenseSetupId !== setupId) {
1113
+ return;
1114
+ }
1115
+ this.scrollEl = scrollEl;
1097
1116
  /**
1098
1117
  * Handle fading of toolbars on scroll
1099
1118
  */
@@ -1117,37 +1136,63 @@ const Header = class {
1117
1136
  this.destroyCollapsibleHeader();
1118
1137
  }
1119
1138
  async checkCollapsibleHeader() {
1120
- const mode = getIonMode(this);
1121
- if (mode !== 'ios') {
1139
+ const { scrollEffect, collapse } = this;
1140
+ if (collapse !== undefined && scrollEffect === undefined && !this.hasWarnedCollapse) {
1141
+ this.hasWarnedCollapse = true;
1142
+ printIonWarning(`[ion-header] - The \`collapse\` property is deprecated. Use \`scrollEffect\` instead.\nExample: <ion-header scroll-effect="${collapse}">`, this.el);
1143
+ }
1144
+ const effect = scrollEffect ?? collapse;
1145
+ // Skip teardown/rebuild if the effect hasn't changed.
1146
+ // This prevents re-renders from destroying the scroll controller
1147
+ // and resetting isHidden.
1148
+ if (effect === this.activeEffect) {
1122
1149
  return;
1123
1150
  }
1124
- const { collapse } = this;
1125
- const hasCondense = collapse === 'condense';
1126
- const hasFade = collapse === 'fade';
1151
+ const hasHide = effect === 'hide';
1152
+ const hasCondense = effect === 'condense';
1153
+ const hasFade = effect === 'fade';
1127
1154
  this.destroyCollapsibleHeader();
1128
- if (hasCondense) {
1129
- const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
1130
- const contentEl = pageEl ? findIonContent(pageEl) : null;
1155
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
1156
+ const pageEl = this.el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner`);
1157
+ const contentEl = pageEl ? findIonContent(pageEl) : null;
1158
+ if (hasHide && contentEl) {
1159
+ this.activeEffect = effect;
1160
+ await this.setupScrollEffectHide(contentEl);
1161
+ return;
1162
+ }
1163
+ // condense/fade via the deprecated `collapse` prop are iOS-only.
1164
+ // condense/fade via the new `scrollEffect` prop work in all themes.
1165
+ const isModeRestricted = scrollEffect === undefined && getIonTheme(this) !== 'ios';
1166
+ if (hasCondense && !isModeRestricted) {
1131
1167
  // Cloned elements are always needed in iOS transition
1132
1168
  writeTask(() => {
1133
1169
  const title = cloneElement('ion-title');
1134
1170
  title.size = 'large';
1135
1171
  cloneElement('ion-back-button');
1136
1172
  });
1137
- await this.setupCondenseHeader(contentEl, pageEl);
1173
+ const didSetup = await this.setupCondenseHeader(contentEl, pageEl);
1174
+ if (didSetup) {
1175
+ this.activeEffect = effect;
1176
+ }
1138
1177
  }
1139
- else if (hasFade) {
1140
- const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
1141
- const contentEl = pageEl ? findIonContent(pageEl) : null;
1178
+ else if (hasFade && !isModeRestricted) {
1142
1179
  if (!contentEl) {
1143
1180
  printIonContentErrorMsg(this.el);
1144
1181
  return;
1145
1182
  }
1146
- const condenseHeader = contentEl.querySelector('ion-header[collapse="condense"]');
1183
+ const condenseHeader = contentEl.querySelector('ion-header[collapse="condense"],ion-header[scroll-effect="condense"]');
1184
+ this.activeEffect = effect;
1147
1185
  await this.setupFadeHeader(contentEl, condenseHeader);
1148
1186
  }
1149
1187
  }
1150
1188
  destroyCollapsibleHeader() {
1189
+ this.activeEffect = undefined;
1190
+ this.fadeCondenseSetupId++;
1191
+ this.scrollHideCtrlPromise = null;
1192
+ if (this.scrollHideCtrl) {
1193
+ this.scrollHideCtrl.destroy();
1194
+ this.scrollHideCtrl = undefined;
1195
+ }
1151
1196
  if (this.intersectionObserver) {
1152
1197
  this.intersectionObserver.disconnect();
1153
1198
  this.intersectionObserver = undefined;
@@ -1164,21 +1209,39 @@ const Header = class {
1164
1209
  async setupCondenseHeader(contentEl, pageEl) {
1165
1210
  if (!contentEl || !pageEl) {
1166
1211
  printIonContentErrorMsg(this.el);
1167
- return;
1212
+ return false;
1168
1213
  }
1169
1214
  if (typeof IntersectionObserver === 'undefined') {
1170
- return;
1215
+ return false;
1216
+ }
1217
+ const setupId = ++this.fadeCondenseSetupId;
1218
+ const scrollEl = await getScrollElement(contentEl);
1219
+ if (this.fadeCondenseSetupId !== setupId) {
1220
+ return false;
1221
+ }
1222
+ this.scrollEl = scrollEl;
1223
+ /**
1224
+ * The condense effect requires an ion-title with size="large"
1225
+ * in the condense header. Without it, there is nothing to
1226
+ * collapse into the main header toolbar.
1227
+ */
1228
+ const hasLargeTitle = this.el.querySelector('ion-title[size="large"]') !== null;
1229
+ if (!hasLargeTitle) {
1230
+ printIonWarning('[ion-header] - The condense scroll effect requires an <ion-title size="large"> in the condense header.', this.el);
1231
+ return false;
1171
1232
  }
1172
- this.scrollEl = await getScrollElement(contentEl);
1173
1233
  const headers = pageEl.querySelectorAll('ion-header');
1174
- this.collapsibleMainHeader = Array.from(headers).find((header) => header.collapse !== 'condense');
1234
+ this.collapsibleMainHeader = Array.from(headers).find((header) => {
1235
+ const effect = header.scrollEffect ?? header.collapse;
1236
+ return effect !== 'condense';
1237
+ });
1175
1238
  if (!this.collapsibleMainHeader) {
1176
- return;
1239
+ return false;
1177
1240
  }
1178
1241
  const mainHeaderIndex = createHeaderIndex(this.collapsibleMainHeader);
1179
1242
  const scrollHeaderIndex = createHeaderIndex(this.el);
1180
1243
  if (!mainHeaderIndex || !scrollHeaderIndex) {
1181
- return;
1244
+ return false;
1182
1245
  }
1183
1246
  setHeaderActive(mainHeaderIndex, false);
1184
1247
  setToolbarBackgroundOpacity(mainHeaderIndex.el, 0);
@@ -1210,31 +1273,45 @@ const Header = class {
1210
1273
  this.collapsibleMainHeader.classList.add('header-collapse-main');
1211
1274
  }
1212
1275
  });
1276
+ return true;
1213
1277
  }
1214
1278
  render() {
1215
- const { translucent, inheritedAttributes } = this;
1216
- const mode = getIonMode(this);
1217
- const collapse = this.collapse || 'none';
1218
- const isCondensed = collapse === 'condense';
1279
+ const { translucent, inheritedAttributes, divider, scrollEffect, collapse } = this;
1280
+ const theme = getIonTheme(this);
1281
+ const effect = scrollEffect ?? collapse;
1282
+ // condense/fade via the deprecated `collapse` prop are iOS-only.
1283
+ const isModeRestricted = scrollEffect === undefined && theme !== 'ios';
1284
+ const hasHide = effect === 'hide';
1285
+ const hasCondense = effect === 'condense' && !isModeRestricted && this.el.querySelector('ion-title[size="large"]') !== null;
1286
+ const hasFade = effect === 'fade' && !isModeRestricted;
1287
+ // The condense header should be hidden when
1288
+ // - deprecated collapse prop is used on non-iOS (mode restricted), or
1289
+ // - scrollEffect="condense" is set but no ion-title[size="large"] is present
1290
+ const isHiddenCondense = effect === 'condense' && !hasCondense;
1219
1291
  // banner role must be at top level, so remove role if inside a menu
1220
- const roleType = getRoleType(hostContext('ion-menu', this.el), isCondensed, mode);
1221
- return (h(Host, { key: '863c4568cd7b8c0ec55109f193bbbaed68a1346e', role: roleType, class: {
1222
- [mode]: true,
1292
+ const roleType = isHiddenCondense ? 'none' : getRoleType(hostContext('ion-menu', this.el));
1293
+ return (h(Host, { key: '09f60ca014bb7b3a85d3c0a94e7989d5dbc43f46', role: roleType, class: {
1294
+ [theme]: true,
1223
1295
  // Used internally for styling
1224
- [`header-${mode}`]: true,
1296
+ [`header-${theme}`]: true,
1225
1297
  [`header-translucent`]: this.translucent,
1226
- [`header-collapse-${collapse}`]: true,
1227
- [`header-translucent-${mode}`]: this.translucent,
1228
- }, ...inheritedAttributes }, mode === 'ios' && translucent && h("div", { key: '25c3bdce328b0b35607d154c8b8374679313d881', class: "header-background" }), h("slot", { key: 'b44fab0a9be7920b9650da26117c783e751e1702' })));
1298
+ ['header-collapse-condense']: hasCondense,
1299
+ ['header-collapse-condense-hidden']: isHiddenCondense,
1300
+ ['header-collapse-fade']: hasFade,
1301
+ [`header-translucent-${theme}`]: this.translucent,
1302
+ ['header-divider']: divider,
1303
+ 'header-scroll-effect-hide': hasHide,
1304
+ }, ...inheritedAttributes }, theme !== 'md' && translucent && (h("div", { key: '5179b806abb6f04ed294dc50166c4f014028a4e3', class: "header-background" }, theme === 'ionic' && (h("div", { key: '4c9d23456672b5bd4ce55280ec6f3e6c39f162cc', class: "header-background-blur", "aria-hidden": "true" }, h("div", { key: '9b9da46049e24390491b2b97ab20863f6fefc079', class: "header-background-blur-layer" }), h("div", { key: 'fc2899267eea7fdd415cc4f394fb469188bfae50', class: "header-background-blur-layer" }), h("div", { key: '8a9747c21d2bd92670deeec8022a37409fd349c4', class: "header-background-blur-layer" }), h("div", { key: '03abc8d5e1e8554963a7f652349ab65430d14db9', class: "header-background-blur-layer" }), h("div", { key: '6a481b7894c44b37d8e3569784a3b6a1191fba09', class: "header-background-blur-layer" }), h("div", { key: '8e4cf985b7c58a836316baa47c35dbaac765f658', class: "header-background-blur-layer" }), h("div", { key: '4ce7402a8ea8aa8253fc2e69e614c50c22ae2c9d', class: "header-background-blur-layer" }))))), h("slot", { key: '1e5ae6dddd080197c7801ed58fb22b9f237b6099' })));
1229
1305
  }
1230
1306
  get el() { return getElement(this); }
1231
1307
  };
1232
1308
  Header.style = {
1309
+ ionic: headerIonicCss(),
1233
1310
  ios: headerIosCss(),
1234
1311
  md: headerMdCss()
1235
1312
  };
1236
1313
 
1237
- const routerOutletCss = () => `:host{left:0;right:0;top:0;bottom:0;position:absolute;contain:layout size style;z-index:0}`;
1314
+ const routerOutletCss = () => `:host{right:0;left:0;top:0;bottom:0;position:absolute;contain:layout size style;z-index:0}`;
1238
1315
 
1239
1316
  const RouterOutlet = class {
1240
1317
  constructor(hostRef) {
@@ -1245,7 +1322,7 @@ const RouterOutlet = class {
1245
1322
  this.lockController = createLockController();
1246
1323
  this.gestureOrAnimationInProgress = false;
1247
1324
  /**
1248
- * The mode determines which platform styles to use.
1325
+ * The mode determines the platform behaviors of the component.
1249
1326
  */
1250
1327
  this.mode = getIonMode(this);
1251
1328
  /**
@@ -1266,7 +1343,7 @@ const RouterOutlet = class {
1266
1343
  this.swipeHandler.onStart();
1267
1344
  }
1268
1345
  };
1269
- this.gesture = (await import('./swipe-back-Ch3UU_US.js')).createSwipeBackGesture(this.el, () => !this.gestureOrAnimationInProgress && !!this.swipeHandler && this.swipeHandler.canStart(), () => onStart(), (step) => this.ani?.progressStep(step), (shouldComplete, step, dur) => {
1346
+ this.gesture = (await import('./swipe-back-D8sqbjOf.js')).createSwipeBackGesture(this.el, () => !this.gestureOrAnimationInProgress && !!this.swipeHandler && this.swipeHandler.canStart(), () => onStart(), (step) => this.ani?.progressStep(step), (shouldComplete, step, dur) => {
1270
1347
  if (this.ani) {
1271
1348
  this.ani.onFinish(() => {
1272
1349
  this.gestureOrAnimationInProgress = false;
@@ -1428,7 +1505,7 @@ const RouterOutlet = class {
1428
1505
  return true;
1429
1506
  }
1430
1507
  render() {
1431
- return h("slot", { key: '249e7d8a063c781db52fa535e42d648c7bf2909a' });
1508
+ return h("slot", { key: '84a325aa6a162c51e80871f0927a02dd9971b660' });
1432
1509
  }
1433
1510
  get el() { return getElement(this); }
1434
1511
  static get watchers() { return {
@@ -1442,9 +1519,11 @@ const RouterOutlet = class {
1442
1519
  };
1443
1520
  RouterOutlet.style = routerOutletCss();
1444
1521
 
1445
- 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)}}`;
1522
+ 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-family:var(--token-font-family, -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol");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, 1.75rem);-webkit-box-sizing:border-box;box-sizing:border-box;pointer-events:none}:host(.title-large){font-family:var(--token-font-family, -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol");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, 2.25rem)}`;
1523
+
1524
+ 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)}}`;
1446
1525
 
1447
- 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}`;
1526
+ 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}`;
1448
1527
 
1449
1528
  const ToolbarTitle = class {
1450
1529
  constructor(hostRef) {
@@ -1467,13 +1546,13 @@ const ToolbarTitle = class {
1467
1546
  return this.size !== undefined ? this.size : 'default';
1468
1547
  }
1469
1548
  render() {
1470
- const mode = getIonMode(this);
1549
+ const theme = getIonTheme(this);
1471
1550
  const size = this.getSize();
1472
- return (h(Host, { key: 'c5f0b913ff0a22d9bf02da48a313a613c2ac8fe7', class: createColorClasses(this.color, {
1473
- [mode]: true,
1551
+ return (h(Host, { key: '00b3027662f22cdc2cf682a24bb77cc83334673b', class: createColorClasses(this.color, {
1552
+ [theme]: true,
1474
1553
  [`title-${size}`]: true,
1475
1554
  'title-rtl': document.dir === 'rtl',
1476
- }) }, h("div", { key: '5253b9e39fb764bfe1e57370719139f8a83e9904', class: "toolbar-title" }, h("slot", { key: 'e38b1eccb0175c36f8cab211aee7ce4d61fc9035' }))));
1555
+ }) }, h("div", { key: 'c58ed9751da3306ce1e285e93c644baaff884970', class: "toolbar-title" }, h("slot", { key: 'e9e8bbdd42e60df1b1a11ca8c4deef023685d818' }))));
1477
1556
  }
1478
1557
  get el() { return getElement(this); }
1479
1558
  static get watchers() { return {
@@ -1483,18 +1562,29 @@ const ToolbarTitle = class {
1483
1562
  }; }
1484
1563
  };
1485
1564
  ToolbarTitle.style = {
1565
+ ionic: titleIonicCss(),
1486
1566
  ios: titleIosCss(),
1487
1567
  md: titleMdCss()
1488
1568
  };
1489
1569
 
1490
- 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%}`;
1570
+ 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, #242528));--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}`;
1491
1571
 
1492
- 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}`;
1572
+ 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%}`;
1573
+
1574
+ 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}`;
1493
1575
 
1494
1576
  const Toolbar = class {
1495
1577
  constructor(hostRef) {
1496
1578
  registerInstance(this, hostRef);
1497
1579
  this.childrenStyles = new Map();
1580
+ this.slotClasses = [
1581
+ 'has-start-content',
1582
+ 'has-end-content',
1583
+ 'has-primary-content',
1584
+ 'has-secondary-content',
1585
+ ];
1586
+ this.showClasses = ['show-start', 'show-end', 'show-primary', 'show-secondary'];
1587
+ this.slotSizeVars = ['--start-end-size', '--primary-secondary-size'];
1498
1588
  }
1499
1589
  componentWillLoad() {
1500
1590
  const buttons = Array.from(this.el.querySelectorAll('ion-buttons'));
@@ -1511,6 +1601,170 @@ const Toolbar = class {
1511
1601
  if (lastButtons) {
1512
1602
  lastButtons.classList.add('buttons-last-slot');
1513
1603
  }
1604
+ this.updateSlotClasses();
1605
+ }
1606
+ componentDidLoad() {
1607
+ this.updateSlotClasses();
1608
+ this.updateSlotWidths();
1609
+ }
1610
+ titlePlacementChanged() {
1611
+ this.updateSlotClasses();
1612
+ }
1613
+ /**
1614
+ * Gets the title placement.
1615
+ * Returns the title placement if it is set, otherwise returns `"center"`
1616
+ * for `ionic` and `ios`, and `"start"` for `md`.
1617
+ */
1618
+ getTitlePlacement() {
1619
+ if (this.titlePlacement !== undefined) {
1620
+ return this.titlePlacement;
1621
+ }
1622
+ return getIonTheme(this) === 'ionic' || getIonTheme(this) === 'ios' ? 'center' : 'start';
1623
+ }
1624
+ /**
1625
+ * Updates the CSS custom properties for slot widths
1626
+ * This ensures that slots shown by their met conditions
1627
+ * have a minimum width matching their required slot
1628
+ */
1629
+ updateSlotWidths(tries = 0) {
1630
+ // Set timeout to try to execute after everything is rendered
1631
+ setTimeout(() => {
1632
+ // Attempt to measure and update
1633
+ const success = this.measureAndUpdateSlots();
1634
+ // If not all measurements were successful, try again in 100 ms
1635
+ // cap recursion at 5 tries for safety
1636
+ if (!success && tries < 5) {
1637
+ setTimeout(() => {
1638
+ this.updateSlotWidths(tries + 1);
1639
+ }, 100);
1640
+ }
1641
+ });
1642
+ }
1643
+ /**
1644
+ * Measure the widths of the slots and update the CSS custom properties
1645
+ * for the minimum width of each pair of slots based on the largest width in each pair.
1646
+ * Returns whether we successfully measured all of the slots we expect to have content.
1647
+ * If not, the content probably hasn't rendered yet and we need to try again.
1648
+ */
1649
+ measureAndUpdateSlots() {
1650
+ // Define the relationship between slots based on the conditions array
1651
+ // Group slots that should have the same width
1652
+ const slotPairs = [
1653
+ { name: 'start-end', slots: ['start', 'end'] },
1654
+ { name: 'primary-secondary', slots: ['primary', 'secondary'] },
1655
+ ];
1656
+ // First, measure all slot widths
1657
+ const slotWidths = new Map();
1658
+ let allMeasurementsSuccessful = true;
1659
+ // Measure all slots with content
1660
+ const slots = ['start', 'end', 'primary', 'secondary'];
1661
+ slots.forEach((slot) => {
1662
+ if (this.el.classList.contains(`has-${slot}-content`)) {
1663
+ const slotElement = this.el.shadowRoot?.querySelector(`slot[name="${slot}"]`);
1664
+ if (slotElement) {
1665
+ // Check if the slot contains an img or ion-img
1666
+ const assignedElements = slotElement.assignedElements({ flatten: true });
1667
+ const hasImg = assignedElements.some((el) => {
1668
+ if (el.tagName === 'IMG' || el.tagName === 'ION-IMG') {
1669
+ return true;
1670
+ }
1671
+ // Check for nested images
1672
+ return el.querySelector('img, ion-img') !== null;
1673
+ });
1674
+ // Temporarily allow slot to size to content by setting flex-basis
1675
+ // to 'auto'. This ensures that slotted images can render at their
1676
+ // intrinsic width for measurement.
1677
+ if (hasImg) {
1678
+ const { name } = slotPairs.find((pair) => pair.slots.includes(slot));
1679
+ this.el.style.setProperty(`--${name}-size`, 'auto');
1680
+ }
1681
+ const width = slotElement.offsetWidth;
1682
+ if (width > 0) {
1683
+ slotWidths.set(slot, width);
1684
+ }
1685
+ else {
1686
+ allMeasurementsSuccessful = false;
1687
+ }
1688
+ }
1689
+ }
1690
+ });
1691
+ // Then set the CSS custom properties based on the largest width in each pair
1692
+ slotPairs.forEach(({ name, slots }) => {
1693
+ // Find the maximum width among the slots in this pair
1694
+ let maxWidth = 0;
1695
+ let hasAnyContent = false;
1696
+ slots.forEach((slot) => {
1697
+ if (slotWidths.has(slot)) {
1698
+ hasAnyContent = true;
1699
+ maxWidth = Math.max(maxWidth, slotWidths.get(slot) ?? 0);
1700
+ }
1701
+ });
1702
+ // If at least one slot in the pair has content, set the min-width for the pair
1703
+ if (hasAnyContent && maxWidth > 0) {
1704
+ // Set a single CSS variable for the pair
1705
+ this.el.style.setProperty(`--${name}-size`, `${maxWidth}px`);
1706
+ }
1707
+ });
1708
+ return allMeasurementsSuccessful;
1709
+ }
1710
+ /**
1711
+ * Removes all slot visibility classes and slot width CSS variables.
1712
+ */
1713
+ removeSlotClasses() {
1714
+ this.el.classList.remove(...this.slotClasses, ...this.showClasses);
1715
+ this.slotSizeVars.forEach((cssVar) => this.el.style.removeProperty(cssVar));
1716
+ }
1717
+ updateSlotClasses() {
1718
+ const titlePlacement = this.getTitlePlacement();
1719
+ if (titlePlacement !== 'center') {
1720
+ this.removeSlotClasses();
1721
+ return;
1722
+ }
1723
+ // Check if slots have content
1724
+ const slots = ['start', 'end', 'primary', 'secondary'];
1725
+ const classesToAdd = [];
1726
+ const classesToRemove = [];
1727
+ slots.forEach((slot) => {
1728
+ const slotHasContent = this.hasSlotContent(slot);
1729
+ const slotClass = `has-${slot}-content`;
1730
+ if (slotHasContent) {
1731
+ classesToAdd.push(slotClass);
1732
+ }
1733
+ else {
1734
+ classesToRemove.push(slotClass);
1735
+ }
1736
+ });
1737
+ // Force visibilities in certain conditions. This works by adding a class to the toolbar
1738
+ // named `show-{slot}`. This class will be added if the toolbar has the required slots
1739
+ // and does not have any of the excluded slots, otherwise it will be removed.
1740
+ // This is useful to enforce centering of the toolbar content when there are different amounts
1741
+ // of slots on either side of the toolbar.
1742
+ const conditions = [
1743
+ { name: 'end', requiredSlots: ['start'], excludeSlots: ['end', 'primary'] },
1744
+ { name: 'start', requiredSlots: ['end'], excludeSlots: ['start', 'secondary'] },
1745
+ { name: 'secondary', requiredSlots: ['primary'], excludeSlots: ['secondary', 'start'] },
1746
+ { name: 'primary', requiredSlots: ['secondary'], excludeSlots: ['primary', 'end'] },
1747
+ ];
1748
+ conditions.forEach((condition) => {
1749
+ const hasRequiredSlots = condition.requiredSlots.every((slot) => classesToAdd.includes(`has-${slot}-content`));
1750
+ const hasExcludedSlots = condition.excludeSlots.some((slot) => classesToAdd.includes(`has-${slot}-content`));
1751
+ const className = `show-${condition.name}`;
1752
+ if (hasRequiredSlots && !hasExcludedSlots) {
1753
+ classesToAdd.push(className);
1754
+ }
1755
+ else {
1756
+ classesToRemove.push(className);
1757
+ }
1758
+ });
1759
+ // Add classes to the toolbar element
1760
+ this.el.classList.add(...classesToAdd);
1761
+ this.el.classList.remove(...classesToRemove);
1762
+ // Update slot widths after classes have been updated
1763
+ this.updateSlotWidths();
1764
+ }
1765
+ hasSlotContent(slotName) {
1766
+ const slotNode = this.el.shadowRoot?.querySelector(`slot[name="${slotName}"]`);
1767
+ return !!slotNode && slotNode.assignedNodes().length > 0;
1514
1768
  }
1515
1769
  childrenStyle(ev) {
1516
1770
  ev.stopPropagation();
@@ -1535,22 +1789,30 @@ const Toolbar = class {
1535
1789
  }
1536
1790
  }
1537
1791
  render() {
1538
- const mode = getIonMode(this);
1792
+ const theme = getIonTheme(this);
1539
1793
  const childStyles = {};
1540
- this.childrenStyles.forEach((value) => {
1541
- Object.assign(childStyles, value);
1794
+ this.childrenStyles.forEach((style) => {
1795
+ Object.assign(childStyles, style);
1542
1796
  });
1543
- return (h(Host, { key: 'c16803dc4eae9972ef19bf43aa74b94feb4fd4c1', class: {
1544
- ...childStyles,
1797
+ const titlePlacement = this.getTitlePlacement();
1798
+ return (h(Host, { key: '3b97d3de5b1910257170355995eb7a50a2b6dcc4', class: {
1545
1799
  ...createColorClasses(this.color, {
1546
- [mode]: true,
1800
+ [theme]: true,
1547
1801
  'in-toolbar': hostContext('ion-toolbar', this.el),
1802
+ [`toolbar-title-placement-${titlePlacement}`]: true,
1548
1803
  }),
1549
- } }, h("div", { key: '20e3f85844c94b8399c245d2df125e6ab678d681', class: "toolbar-background", part: "background" }), h("div", { key: '12f09e324e8d9130b9d30c493106b500233fb016', class: "toolbar-container", part: "container" }, h("slot", { key: '6da0fe99ee0c4d7c969712e2908a4e7e6be5ed2c', name: "start" }), h("slot", { key: '177c346d6dcabb7857d810cda7d25c6dde32e6e2', name: "secondary" }), h("div", { key: '8c921b415940c71bf4c1a2c5c6887f36ad1afd16', class: "toolbar-content", part: "content" }, h("slot", { key: '1f2976b80d967bd51e86ed1357b363271d655df2' })), h("slot", { key: '0f7618044a7e8b0d9b715a8e208070f7ef2ee4c8', name: "primary" }), h("slot", { key: '125c393197e0660a3c2638dd4628c41ef7e05f19', name: "end" }))));
1804
+ ...childStyles,
1805
+ } }, h("div", { key: '26f85390aa62f118e585fd8560fba0620b30fd51', class: "toolbar-background", part: "background" }), h("div", { key: '57e32773d5642dde7f5d7cca9aaceb41b4d800bd', class: "toolbar-container", part: "container" }, h("slot", { key: '5429b3f898703339749a55af6bb28d7e4d969679', name: "start", onSlotchange: () => this.updateSlotClasses }), h("slot", { key: 'c5565f7020f52a1f075d9c6908ace042d488642f', name: "secondary", onSlotchange: () => this.updateSlotClasses }), h("div", { key: '2d083bcd57512041321a68b43d6b90144eb20166', class: "toolbar-content", part: "content" }, h("slot", { key: 'eb8abc0b9b96c699355891fbd0d284094cde7632' })), h("slot", { key: 'ca66f2dcce1f5382ed40a120cf32f759597a11ad', name: "primary", onSlotchange: () => this.updateSlotClasses }), h("slot", { key: '19e3eb792d45c21404fe48f119d68248b5d7dca7', name: "end", onSlotchange: () => this.updateSlotClasses }))));
1550
1806
  }
1551
1807
  get el() { return getElement(this); }
1808
+ static get watchers() { return {
1809
+ "titlePlacement": [{
1810
+ "titlePlacementChanged": 0
1811
+ }]
1812
+ }; }
1552
1813
  };
1553
1814
  Toolbar.style = {
1815
+ ionic: toolbarIonicCss(),
1554
1816
  ios: toolbarIosCss(),
1555
1817
  md: toolbarMdCss()
1556
1818
  };