@ionic/core 8.7.4-dev.11756220757.185b8cbf → 8.7.4-dev.11756465095.1387c832

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 (929) hide show
  1. package/components/action-sheet.js +13 -9
  2. package/components/alert.js +14 -11
  3. package/components/animation.js +1 -1
  4. package/components/backdrop.js +9 -6
  5. package/components/button.js +41 -10
  6. package/components/buttons.js +11 -8
  7. package/components/capacitor.js +1 -1
  8. package/components/caret-down.js +6 -0
  9. package/components/caret-left.js +6 -0
  10. package/components/caret-right.js +6 -0
  11. package/components/checkbox.js +31 -12
  12. package/components/content.js +14 -12
  13. package/components/data.js +5 -5
  14. package/components/focus-visible.js +23 -1
  15. package/components/framework-delegate.js +3 -1
  16. package/components/header.js +28 -16
  17. package/components/helpers.js +42 -3
  18. package/components/index5.js +8 -8
  19. package/components/index6.js +1 -1
  20. package/components/index7.js +111 -150
  21. package/components/index8.js +150 -111
  22. package/components/input-shims.js +2 -2
  23. package/components/input.utils.js +1 -1
  24. package/components/ion-accordion-group.js +23 -5
  25. package/components/ion-accordion.js +32 -21
  26. package/components/ion-app.js +12 -77
  27. package/components/ion-avatar.js +58 -5
  28. package/components/ion-back-button.js +27 -19
  29. package/components/ion-badge.js +73 -9
  30. package/components/ion-breadcrumb.js +43 -10
  31. package/components/ion-breadcrumbs.js +8 -5
  32. package/components/ion-card-content.js +10 -7
  33. package/components/ion-card-header.js +9 -6
  34. package/components/ion-card-subtitle.js +8 -5
  35. package/components/ion-card-title.js +8 -5
  36. package/components/ion-card.js +21 -9
  37. package/components/ion-chip.js +53 -8
  38. package/components/ion-col.js +5 -5
  39. package/components/ion-datetime-button.js +8 -5
  40. package/components/ion-datetime.js +100 -22
  41. package/components/ion-divider.d.ts +11 -0
  42. package/components/ion-divider.js +70 -0
  43. package/components/ion-fab-button.js +31 -15
  44. package/components/ion-fab-list.js +5 -5
  45. package/components/ion-fab.js +6 -6
  46. package/components/ion-footer.js +18 -13
  47. package/components/ion-grid.js +5 -5
  48. package/components/ion-img.js +5 -2
  49. package/components/ion-infinite-scroll-content.js +11 -8
  50. package/components/ion-infinite-scroll.js +78 -6
  51. package/components/ion-input-otp.js +9 -6
  52. package/components/ion-input-password-toggle.js +51 -13
  53. package/components/ion-input.js +125 -88
  54. package/components/ion-item-divider.js +8 -5
  55. package/components/ion-item-group.js +8 -5
  56. package/components/ion-item-option.js +36 -9
  57. package/components/ion-item-options.js +10 -7
  58. package/components/ion-item-sliding.js +5 -5
  59. package/components/ion-loading.js +12 -9
  60. package/components/ion-menu-button.js +26 -10
  61. package/components/ion-menu-toggle.js +5 -5
  62. package/components/ion-menu.js +13 -8
  63. package/components/ion-nav-link.js +1 -1
  64. package/components/ion-nav.js +7 -5
  65. package/components/ion-note.js +8 -5
  66. package/components/ion-picker-legacy.js +7 -7
  67. package/components/ion-progress-bar.js +25 -7
  68. package/components/ion-range.js +12 -9
  69. package/components/ion-refresher-content.js +23 -8
  70. package/components/ion-refresher.js +10 -7
  71. package/components/ion-reorder-group.js +5 -5
  72. package/components/ion-reorder.js +30 -5
  73. package/components/ion-router-link.js +6 -6
  74. package/components/ion-router-outlet.js +4 -4
  75. package/components/ion-row.js +5 -2
  76. package/components/ion-searchbar.js +137 -23
  77. package/components/ion-segment-button.js +10 -7
  78. package/components/ion-segment-content.js +1 -1
  79. package/components/ion-segment-view.js +5 -2
  80. package/components/ion-segment.js +10 -7
  81. package/components/ion-select-option.js +5 -2
  82. package/components/ion-select.js +117 -33
  83. package/components/ion-skeleton-text.js +5 -5
  84. package/components/ion-split-pane.js +11 -8
  85. package/components/ion-tab-bar.js +39 -9
  86. package/components/ion-tab-button.js +25 -7
  87. package/components/ion-tab.js +2 -2
  88. package/components/ion-tabs.js +2 -2
  89. package/components/ion-text.js +5 -5
  90. package/components/ion-textarea.js +57 -71
  91. package/components/ion-thumbnail.js +5 -2
  92. package/components/ion-toast.js +37 -12
  93. package/components/ion-toggle.js +74 -17
  94. package/components/ionic-global.js +349 -15
  95. package/components/ios.transition.js +1 -0
  96. package/components/item.js +39 -14
  97. package/components/keyboard-controller.js +4 -2
  98. package/components/label.js +8 -5
  99. package/components/list-header.js +10 -7
  100. package/components/list.js +27 -6
  101. package/components/list2.js +6 -0
  102. package/components/modal.js +48 -20
  103. package/components/notch-controller.js +1 -1
  104. package/components/overlays.js +20 -112
  105. package/components/picker-column-option.js +10 -7
  106. package/components/picker-column.js +7 -44
  107. package/components/picker-column2.js +4 -4
  108. package/components/picker.js +7 -4
  109. package/components/popover.js +12 -9
  110. package/components/radio-group.js +10 -5
  111. package/components/radio.js +11 -8
  112. package/components/ripple-effect.js +15 -7
  113. package/components/select-modal.js +4 -4
  114. package/components/select-popover.js +8 -2
  115. package/components/spinner.js +31 -8
  116. package/components/status-tap.js +1 -1
  117. package/components/title.js +10 -7
  118. package/components/toolbar.js +153 -9
  119. package/components/x.js +6 -0
  120. package/css/core.css +1 -1
  121. package/css/core.css.map +1 -1
  122. package/css/display.css +1 -1
  123. package/css/display.css.map +1 -1
  124. package/css/flex-utils.css +1 -1
  125. package/css/flex-utils.css.map +1 -1
  126. package/css/float-elements.css.map +1 -1
  127. package/css/global.bundle.css.map +1 -1
  128. package/css/ionic/bundle.ionic.css +1 -0
  129. package/css/ionic/bundle.ionic.css.map +1 -0
  130. package/css/ionic/core.ionic.css +1 -0
  131. package/css/ionic/core.ionic.css.map +1 -0
  132. package/css/ionic/global.bundle.ionic.css +1 -0
  133. package/css/ionic/global.bundle.ionic.css.map +1 -0
  134. package/css/ionic/ionic-swiper.ionic.css +1 -0
  135. package/css/ionic/ionic-swiper.ionic.css.map +1 -0
  136. package/css/ionic/link.ionic.css +1 -0
  137. package/css/ionic/link.ionic.css.map +1 -0
  138. package/css/ionic/structure.ionic.css +1 -0
  139. package/css/ionic/structure.ionic.css.map +1 -0
  140. package/css/ionic/typography.ionic.css +1 -0
  141. package/css/ionic/typography.ionic.css.map +1 -0
  142. package/css/ionic/utils.bundle.ionic.css +1 -0
  143. package/css/ionic/utils.bundle.ionic.css.map +1 -0
  144. package/css/ionic-swiper.css +1 -1
  145. package/css/ionic-swiper.css.map +1 -1
  146. package/css/ionic.bundle.css +1 -1
  147. package/css/ionic.bundle.css.map +1 -1
  148. package/css/normalize.css.map +1 -1
  149. package/css/padding.css.map +1 -1
  150. package/css/palettes/dark.always.css.map +1 -1
  151. package/css/palettes/dark.class.css.map +1 -1
  152. package/css/palettes/dark.system.css.map +1 -1
  153. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  154. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  155. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  156. package/css/palettes/high-contrast.always.css.map +1 -1
  157. package/css/palettes/high-contrast.class.css.map +1 -1
  158. package/css/palettes/high-contrast.system.css.map +1 -1
  159. package/css/structure.css.map +1 -1
  160. package/css/text-alignment.css.map +1 -1
  161. package/css/text-transformation.css.map +1 -1
  162. package/css/typography.css.map +1 -1
  163. package/css/utils.bundle.css +1 -1
  164. package/css/utils.bundle.css.map +1 -1
  165. package/dist/cjs/{animation-ZJ1lAkZD.js → animation-BXRtNUgm.js} +2 -2
  166. package/dist/cjs/{app-globals-77ZfuXXk.js → app-globals-x_8DXqdl.js} +1 -1
  167. package/dist/cjs/{button-active-BzZenWWH.js → button-active-BcEaeF5Y.js} +1 -1
  168. package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-CVcQYFDK.js} +3 -3
  169. package/dist/cjs/caret-down-vtVgfXIs.js +8 -0
  170. package/dist/cjs/caret-left-CxZXLRv5.js +8 -0
  171. package/dist/cjs/caret-right-CRCgv98E.js +8 -0
  172. package/dist/cjs/{data-DW6ofvJ8.js → data-Crxp8jrQ.js} +5 -5
  173. package/dist/cjs/{focus-visible-CCvKiLh3.js → focus-visible-BIj-I3-C.js} +24 -0
  174. package/dist/cjs/{framework-delegate-WkyjrnCx.js → framework-delegate-D94PxJL6.js} +4 -2
  175. package/dist/cjs/{haptic-ClPPQ_PS.js → haptic-r0GBrUII.js} +1 -1
  176. package/dist/cjs/{helpers-DgwmcYAu.js → helpers-CYFB2_7O.js} +41 -2
  177. package/dist/cjs/{index-D24wggHR.js → index-DgkpUJvi.js} +15 -15
  178. package/dist/cjs/{index-BzEyuIww.js → index-DkmXWuZ7.js} +3 -3
  179. package/dist/cjs/{index-Cc5PNMyz.js → index-DsE1tD-q.js} +1 -1
  180. package/dist/cjs/{index-bGpoPC4u.js → index-MoROIJ3n.js} +8 -7
  181. package/dist/cjs/index.cjs.js +10 -11
  182. package/dist/cjs/{input-shims-CLI_OrmU.js → input-shims-temHXqvt.js} +17 -16
  183. package/dist/cjs/{input.utils-B2hZ5tX6.js → input.utils-8JmSrYpP.js} +5 -5
  184. package/dist/cjs/ion-accordion_2.cjs.entry.js +55 -26
  185. package/dist/cjs/ion-action-sheet.cjs.entry.js +21 -18
  186. package/dist/cjs/ion-alert.cjs.entry.js +22 -20
  187. package/dist/cjs/ion-app_8.cjs.entry.js +243 -144
  188. package/dist/cjs/ion-avatar_3.cjs.entry.js +123 -11
  189. package/dist/cjs/ion-back-button.cjs.entry.js +28 -19
  190. package/dist/cjs/ion-backdrop.cjs.entry.js +9 -6
  191. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +51 -15
  192. package/dist/cjs/ion-button_2.cjs.entry.js +43 -11
  193. package/dist/cjs/ion-card_5.cjs.entry.js +53 -29
  194. package/dist/cjs/ion-checkbox.cjs.entry.js +31 -13
  195. package/dist/cjs/ion-chip.cjs.entry.js +48 -7
  196. package/dist/cjs/ion-col_3.cjs.entry.js +13 -10
  197. package/dist/cjs/ion-datetime-button.cjs.entry.js +11 -7
  198. package/dist/cjs/ion-datetime_3.cjs.entry.js +114 -39
  199. package/dist/cjs/ion-divider.cjs.entry.js +51 -0
  200. package/dist/cjs/ion-fab_3.cjs.entry.js +41 -25
  201. package/dist/cjs/ion-img.cjs.entry.js +7 -3
  202. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +89 -14
  203. package/dist/cjs/ion-input-otp.cjs.entry.js +11 -7
  204. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +50 -12
  205. package/dist/cjs/ion-input.cjs.entry.js +125 -89
  206. package/dist/cjs/ion-item-option_3.cjs.entry.js +48 -19
  207. package/dist/cjs/ion-item_8.cjs.entry.js +105 -45
  208. package/dist/cjs/ion-loading.cjs.entry.js +17 -15
  209. package/dist/cjs/ion-menu_3.cjs.entry.js +47 -26
  210. package/dist/cjs/ion-modal.cjs.entry.js +96 -69
  211. package/dist/cjs/ion-nav_2.cjs.entry.js +13 -10
  212. package/dist/cjs/ion-picker-column-option.cjs.entry.js +12 -8
  213. package/dist/cjs/ion-picker-column.cjs.entry.js +12 -48
  214. package/dist/cjs/ion-picker.cjs.entry.js +9 -5
  215. package/dist/cjs/ion-popover.cjs.entry.js +18 -16
  216. package/dist/cjs/ion-progress-bar.cjs.entry.js +25 -7
  217. package/dist/cjs/ion-radio_2.cjs.entry.js +22 -13
  218. package/dist/cjs/ion-range.cjs.entry.js +14 -10
  219. package/dist/cjs/ion-refresher_2.cjs.entry.js +36 -18
  220. package/dist/cjs/ion-reorder_2.cjs.entry.js +36 -12
  221. package/dist/cjs/ion-ripple-effect.cjs.entry.js +14 -6
  222. package/dist/cjs/ion-route_4.cjs.entry.js +8 -7
  223. package/dist/cjs/ion-searchbar.cjs.entry.js +134 -21
  224. package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
  225. package/dist/cjs/ion-segment-view.cjs.entry.js +5 -2
  226. package/dist/cjs/ion-segment_2.cjs.entry.js +21 -14
  227. package/dist/cjs/ion-select-modal.cjs.entry.js +8 -9
  228. package/dist/cjs/ion-select_3.cjs.entry.js +129 -38
  229. package/dist/cjs/ion-spinner.cjs.entry.js +28 -6
  230. package/dist/cjs/ion-split-pane.cjs.entry.js +11 -8
  231. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +65 -20
  232. package/dist/cjs/ion-tab_2.cjs.entry.js +7 -6
  233. package/dist/cjs/ion-text.cjs.entry.js +5 -5
  234. package/dist/cjs/ion-textarea.cjs.entry.js +60 -74
  235. package/dist/cjs/ion-toast.cjs.entry.js +66 -43
  236. package/dist/cjs/ion-toggle.cjs.entry.js +78 -21
  237. package/dist/cjs/ionic-global-RZLbse4y.js +491 -0
  238. package/dist/cjs/ionic.cjs.js +3 -3
  239. package/dist/cjs/{ios.transition-DEitrLlG.js → ios.transition-CWI22viS.js} +6 -4
  240. package/dist/cjs/{keyboard-UuAS4D_9.js → keyboard-BZdohzZu.js} +1 -1
  241. package/dist/cjs/{keyboard-hHzlEQpk.js → keyboard-ByZ4Ulg3.js} +4 -3
  242. package/dist/cjs/{keyboard-controller-GXBiBRKS.js → keyboard-controller-B-dr5t4a.js} +11 -9
  243. package/dist/cjs/list-a-7GSA6K.js +8 -0
  244. package/dist/cjs/loader.cjs.js +3 -3
  245. package/dist/cjs/{md.transition-BHtGC-Wg.js → md.transition-BxMmPf_q.js} +5 -4
  246. package/dist/cjs/{notch-controller-Bf5Rr4R5.js → notch-controller-BmjMp6Co.js} +4 -4
  247. package/dist/cjs/{overlays-CglR7j-u.js → overlays-Di-PotkY.js} +25 -117
  248. package/dist/cjs/{status-tap-D9YPr62n.js → status-tap-D-MulHQM.js} +3 -2
  249. package/dist/cjs/{swipe-back-C1wRtoww.js → swipe-back-C5W5r-1A.js} +2 -1
  250. package/dist/cjs/x-BTF99yFH.js +8 -0
  251. package/dist/collection/collection-manifest.json +1 -0
  252. package/dist/collection/components/accordion/accordion.ionic.css +198 -0
  253. package/dist/collection/components/accordion/accordion.ios.css +73 -58
  254. package/dist/collection/components/accordion/accordion.js +36 -26
  255. package/dist/collection/components/accordion/accordion.md.css +67 -59
  256. package/dist/collection/components/accordion-group/accordion-group.ionic.css +95 -0
  257. package/dist/collection/components/accordion-group/accordion-group.ios.css +16 -4
  258. package/dist/collection/components/accordion-group/accordion-group.js +44 -8
  259. package/dist/collection/components/accordion-group/accordion-group.md.css +22 -4
  260. package/dist/collection/components/action-sheet/action-sheet.ios.css +18 -6
  261. package/dist/collection/components/action-sheet/action-sheet.js +15 -11
  262. package/dist/collection/components/action-sheet/action-sheet.md.css +17 -5
  263. package/dist/collection/components/alert/alert.ios.css +19 -1
  264. package/dist/collection/components/alert/alert.js +16 -13
  265. package/dist/collection/components/alert/alert.md.css +19 -1
  266. package/dist/collection/components/app/app.js +15 -78
  267. package/dist/collection/components/avatar/avatar.ionic.css +393 -0
  268. package/dist/collection/components/avatar/avatar.ios.css +7 -33
  269. package/dist/collection/components/avatar/avatar.js +120 -4
  270. package/dist/collection/components/avatar/avatar.md.css +51 -0
  271. package/dist/collection/components/back-button/back-button.ios.css +60 -48
  272. package/dist/collection/components/back-button/back-button.js +27 -19
  273. package/dist/collection/components/back-button/back-button.md.css +60 -48
  274. package/dist/collection/components/backdrop/backdrop.ionic.css +111 -0
  275. package/dist/collection/components/backdrop/backdrop.ios.css +56 -19
  276. package/dist/collection/components/backdrop/backdrop.js +12 -6
  277. package/dist/collection/components/backdrop/backdrop.md.css +56 -19
  278. package/dist/collection/components/badge/badge.ionic.css +277 -0
  279. package/dist/collection/components/badge/badge.ios.css +139 -12
  280. package/dist/collection/components/badge/badge.js +145 -9
  281. package/dist/collection/components/badge/badge.md.css +123 -12
  282. package/dist/collection/components/breadcrumb/breadcrumb.ios.css +20 -8
  283. package/dist/collection/components/breadcrumb/breadcrumb.js +43 -11
  284. package/dist/collection/components/breadcrumb/breadcrumb.md.css +20 -8
  285. package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +6 -0
  286. package/dist/collection/components/breadcrumbs/breadcrumbs.js +11 -9
  287. package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +6 -0
  288. package/dist/collection/components/button/button.ionic.css +622 -0
  289. package/dist/collection/components/button/button.ios.css +135 -46
  290. package/dist/collection/components/button/button.js +48 -17
  291. package/dist/collection/components/button/button.md.css +126 -50
  292. package/dist/collection/components/buttons/buttons.ionic.css +100 -0
  293. package/dist/collection/components/buttons/buttons.ios.css +59 -7
  294. package/dist/collection/components/buttons/buttons.js +15 -9
  295. package/dist/collection/components/buttons/buttons.md.css +55 -3
  296. package/dist/collection/components/card/card.ionic.css +146 -0
  297. package/dist/collection/components/card/card.ios.css +65 -14
  298. package/dist/collection/components/card/card.js +41 -10
  299. package/dist/collection/components/card/card.md.css +65 -14
  300. package/dist/collection/components/card-content/card-content.ionic.css +94 -0
  301. package/dist/collection/components/card-content/card-content.ios.css +16 -1
  302. package/dist/collection/components/card-content/card-content.js +11 -8
  303. package/dist/collection/components/card-content/card-content.md.css +16 -1
  304. package/dist/collection/components/card-header/card-header.ionic.css +87 -0
  305. package/dist/collection/components/card-header/card-header.ios.css +27 -15
  306. package/dist/collection/components/card-header/card-header.js +13 -10
  307. package/dist/collection/components/card-header/card-header.md.css +27 -15
  308. package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +146 -0
  309. package/dist/collection/components/card-subtitle/card-subtitle.ios.css +12 -0
  310. package/dist/collection/components/card-subtitle/card-subtitle.js +11 -8
  311. package/dist/collection/components/card-subtitle/card-subtitle.md.css +12 -0
  312. package/dist/collection/components/card-title/card-title.ios.css +73 -0
  313. package/dist/collection/components/card-title/card-title.js +11 -8
  314. package/dist/collection/components/card-title/card-title.md.css +73 -0
  315. package/dist/collection/components/checkbox/checkbox.ionic.css +541 -0
  316. package/dist/collection/components/checkbox/checkbox.ios.css +161 -101
  317. package/dist/collection/components/checkbox/checkbox.js +70 -14
  318. package/dist/collection/components/checkbox/checkbox.md.css +162 -102
  319. package/dist/collection/components/chip/chip.ionic.css +230 -0
  320. package/dist/collection/components/chip/chip.ios.css +67 -14
  321. package/dist/collection/components/chip/chip.js +108 -8
  322. package/dist/collection/components/chip/chip.md.css +67 -14
  323. package/dist/collection/components/col/col.css +12 -0
  324. package/dist/collection/components/col/col.js +9 -5
  325. package/dist/collection/components/content/content.css +8 -2
  326. package/dist/collection/components/content/content.js +16 -11
  327. package/dist/collection/components/datetime/datetime.ionic.css +699 -0
  328. package/dist/collection/components/datetime/datetime.ios.css +242 -86
  329. package/dist/collection/components/datetime/datetime.js +100 -21
  330. package/dist/collection/components/datetime/datetime.md.css +242 -86
  331. package/dist/collection/components/datetime/utils/data.js +5 -5
  332. package/dist/collection/components/datetime-button/datetime-button.ios.css +6 -0
  333. package/dist/collection/components/datetime-button/datetime-button.js +11 -8
  334. package/dist/collection/components/datetime-button/datetime-button.md.css +6 -0
  335. package/dist/collection/components/divider/divider.ionic.css +150 -0
  336. package/dist/collection/components/divider/divider.ios.css +87 -0
  337. package/dist/collection/components/divider/divider.js +94 -0
  338. package/dist/collection/components/divider/divider.md.css +87 -0
  339. package/dist/collection/components/fab/fab.css +25 -1
  340. package/dist/collection/components/fab/fab.js +9 -5
  341. package/dist/collection/components/fab-button/fab-button.ios.css +18 -6
  342. package/dist/collection/components/fab-button/fab-button.js +36 -21
  343. package/dist/collection/components/fab-button/fab-button.md.css +20 -8
  344. package/dist/collection/components/fab-list/fab-list.css +12 -0
  345. package/dist/collection/components/fab-list/fab-list.js +9 -5
  346. package/dist/collection/components/footer/footer.ios.css +14 -2
  347. package/dist/collection/components/footer/footer.js +21 -16
  348. package/dist/collection/components/footer/footer.md.css +12 -0
  349. package/dist/collection/components/grid/grid.css +12 -0
  350. package/dist/collection/components/grid/grid.js +9 -5
  351. package/dist/collection/components/header/header.ionic.css +100 -0
  352. package/dist/collection/components/header/header.ios.css +25 -10
  353. package/dist/collection/components/header/header.js +49 -18
  354. package/dist/collection/components/header/header.md.css +23 -8
  355. package/dist/collection/components/img/img.js +8 -2
  356. package/dist/collection/components/infinite-scroll/infinite-scroll.js +100 -5
  357. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +12 -0
  358. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +16 -10
  359. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +12 -0
  360. package/dist/collection/components/input/input.ionic.css +883 -0
  361. package/dist/collection/components/input/input.ios.css +223 -140
  362. package/dist/collection/components/input/input.js +155 -99
  363. package/dist/collection/components/input/input.md.css +193 -212
  364. package/dist/collection/components/input-otp/input-otp.ionic.css +371 -0
  365. package/dist/collection/components/input-otp/input-otp.ios.css +106 -60
  366. package/dist/collection/components/input-otp/input-otp.js +7 -5
  367. package/dist/collection/components/input-otp/input-otp.md.css +106 -60
  368. package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +80 -0
  369. package/dist/collection/components/input-password-toggle/input-password-toggle.js +48 -12
  370. package/dist/collection/components/input-password-toggle/input-password-toggle.native.css +61 -0
  371. package/dist/collection/components/item/item.ionic.css +502 -0
  372. package/dist/collection/components/item/item.ios.css +109 -69
  373. package/dist/collection/components/item/item.js +43 -19
  374. package/dist/collection/components/item/item.md.css +120 -68
  375. package/dist/collection/components/item-divider/item-divider.ios.css +18 -0
  376. package/dist/collection/components/item-divider/item-divider.js +11 -8
  377. package/dist/collection/components/item-divider/item-divider.md.css +18 -0
  378. package/dist/collection/components/item-group/item-group.ios.css +12 -0
  379. package/dist/collection/components/item-group/item-group.js +13 -7
  380. package/dist/collection/components/item-group/item-group.md.css +12 -0
  381. package/dist/collection/components/item-option/item-option.ionic.css +280 -0
  382. package/dist/collection/components/item-option/item-option.ios.css +136 -29
  383. package/dist/collection/components/item-option/item-option.js +73 -9
  384. package/dist/collection/components/item-option/item-option.md.css +136 -29
  385. package/dist/collection/components/item-options/item-options.ionic.css +223 -0
  386. package/dist/collection/components/item-options/item-options.ios.css +77 -34
  387. package/dist/collection/components/item-options/item-options.js +13 -7
  388. package/dist/collection/components/item-options/item-options.md.css +77 -34
  389. package/dist/collection/components/item-sliding/item-sliding.css +6 -0
  390. package/dist/collection/components/item-sliding/item-sliding.js +8 -4
  391. package/dist/collection/components/label/label.ios.css +18 -0
  392. package/dist/collection/components/label/label.js +11 -8
  393. package/dist/collection/components/label/label.md.css +18 -0
  394. package/dist/collection/components/list/list.ionic.css +214 -0
  395. package/dist/collection/components/list/list.ios.css +54 -14
  396. package/dist/collection/components/list/list.js +48 -9
  397. package/dist/collection/components/list/list.md.css +56 -16
  398. package/dist/collection/components/list-header/list-header.ionic.css +192 -0
  399. package/dist/collection/components/list-header/list-header.ios.css +82 -38
  400. package/dist/collection/components/list-header/list-header.js +11 -8
  401. package/dist/collection/components/list-header/list-header.md.css +82 -38
  402. package/dist/collection/components/loading/loading.ios.css +13 -1
  403. package/dist/collection/components/loading/loading.js +14 -11
  404. package/dist/collection/components/loading/loading.md.css +13 -1
  405. package/dist/collection/components/menu/menu.ios.css +15 -3
  406. package/dist/collection/components/menu/menu.js +19 -7
  407. package/dist/collection/components/menu/menu.md.css +15 -3
  408. package/dist/collection/components/menu-button/menu-button.ionic.css +238 -0
  409. package/dist/collection/components/menu-button/menu-button.ios.css +48 -14
  410. package/dist/collection/components/menu-button/menu-button.js +26 -10
  411. package/dist/collection/components/menu-button/menu-button.md.css +49 -15
  412. package/dist/collection/components/menu-toggle/menu-toggle.js +8 -5
  413. package/dist/collection/components/modal/animations/sheet.js +8 -2
  414. package/dist/collection/components/modal/gestures/sheet.js +10 -6
  415. package/dist/collection/components/modal/modal.ionic.css +243 -0
  416. package/dist/collection/components/modal/modal.ios.css +174 -70
  417. package/dist/collection/components/modal/modal.js +48 -11
  418. package/dist/collection/components/modal/modal.md.css +174 -70
  419. package/dist/collection/components/nav/nav.css +7 -1
  420. package/dist/collection/components/nav/nav.js +11 -5
  421. package/dist/collection/components/nav-link/nav-link.js +5 -1
  422. package/dist/collection/components/note/note.ios.css +12 -0
  423. package/dist/collection/components/note/note.js +11 -8
  424. package/dist/collection/components/note/note.md.css +12 -0
  425. package/dist/collection/components/picker/picker.ios.css +15 -3
  426. package/dist/collection/components/picker/picker.js +8 -5
  427. package/dist/collection/components/picker/picker.md.css +15 -3
  428. package/dist/collection/components/picker-column/picker-column.css +9 -2
  429. package/dist/collection/components/picker-column/picker-column.js +8 -43
  430. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +8 -2
  431. package/dist/collection/components/picker-column-option/picker-column-option.js +13 -7
  432. package/dist/collection/components/picker-column-option/picker-column-option.md.css +8 -2
  433. package/dist/collection/components/picker-legacy/picker.ios.css +13 -1
  434. package/dist/collection/components/picker-legacy/picker.js +7 -6
  435. package/dist/collection/components/picker-legacy/picker.md.css +13 -1
  436. package/dist/collection/components/picker-legacy-column/picker-column.ios.css +12 -0
  437. package/dist/collection/components/picker-legacy-column/picker-column.js +4 -4
  438. package/dist/collection/components/picker-legacy-column/picker-column.md.css +12 -0
  439. package/dist/collection/components/popover/popover.ios.css +13 -1
  440. package/dist/collection/components/popover/popover.js +17 -14
  441. package/dist/collection/components/popover/popover.md.css +13 -1
  442. package/dist/collection/components/progress-bar/progress-bar.ionic.css +289 -0
  443. package/dist/collection/components/progress-bar/progress-bar.ios.css +48 -17
  444. package/dist/collection/components/progress-bar/progress-bar.js +43 -7
  445. package/dist/collection/components/progress-bar/progress-bar.md.css +48 -17
  446. package/dist/collection/components/radio/radio.ionic.css +424 -0
  447. package/dist/collection/components/radio/radio.ios.css +134 -91
  448. package/dist/collection/components/radio/radio.js +12 -9
  449. package/dist/collection/components/radio/radio.md.css +134 -91
  450. package/dist/collection/components/radio-group/radio-group.ionic.css +127 -0
  451. package/dist/collection/components/radio-group/radio-group.ios.css +42 -18
  452. package/dist/collection/components/radio-group/radio-group.js +13 -5
  453. package/dist/collection/components/radio-group/radio-group.md.css +42 -18
  454. package/dist/collection/components/range/range.ionic.css +565 -0
  455. package/dist/collection/components/range/range.ios.css +128 -85
  456. package/dist/collection/components/range/range.js +12 -9
  457. package/dist/collection/components/range/range.md.css +128 -85
  458. package/dist/collection/components/refresher/refresher.ios.css +14 -1
  459. package/dist/collection/components/refresher/refresher.js +11 -8
  460. package/dist/collection/components/refresher/refresher.md.css +15 -2
  461. package/dist/collection/components/refresher-content/refresher-content.js +28 -7
  462. package/dist/collection/components/reorder/reorder.ios.css +6 -0
  463. package/dist/collection/components/reorder/reorder.js +33 -6
  464. package/dist/collection/components/reorder/reorder.md.css +6 -0
  465. package/dist/collection/components/reorder-group/reorder-group.css +6 -0
  466. package/dist/collection/components/reorder-group/reorder-group.js +8 -4
  467. package/dist/collection/components/ripple-effect/{ripple-effect.css → ripple-effect.common.css} +7 -1
  468. package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +217 -0
  469. package/dist/collection/components/ripple-effect/ripple-effect.js +14 -6
  470. package/dist/collection/components/route/route.js +4 -0
  471. package/dist/collection/components/router/router.js +4 -0
  472. package/dist/collection/components/router-link/router-link.css +8 -2
  473. package/dist/collection/components/router-link/router-link.js +9 -5
  474. package/dist/collection/components/router-outlet/router-outlet.css +7 -1
  475. package/dist/collection/components/router-outlet/router-outlet.js +6 -3
  476. package/dist/collection/components/row/row.css +12 -0
  477. package/dist/collection/components/row/row.js +9 -2
  478. package/dist/collection/components/searchbar/searchbar.ionic.css +628 -0
  479. package/dist/collection/components/searchbar/searchbar.ios.css +56 -18
  480. package/dist/collection/components/searchbar/searchbar.js +181 -34
  481. package/dist/collection/components/searchbar/searchbar.md.css +56 -18
  482. package/dist/collection/components/segment/segment.ionic.css +117 -0
  483. package/dist/collection/components/segment/segment.ios.css +45 -2
  484. package/dist/collection/components/segment/segment.js +11 -8
  485. package/dist/collection/components/segment/segment.md.css +45 -2
  486. package/dist/collection/components/segment-button/segment-button.ionic.css +355 -0
  487. package/dist/collection/components/segment-button/segment-button.ios.css +146 -105
  488. package/dist/collection/components/segment-button/segment-button.js +11 -8
  489. package/dist/collection/components/segment-button/segment-button.md.css +148 -107
  490. package/dist/collection/components/segment-content/segment-content.js +1 -1
  491. package/dist/collection/components/segment-view/segment-view.ios.css +6 -0
  492. package/dist/collection/components/segment-view/segment-view.js +6 -4
  493. package/dist/collection/components/segment-view/segment-view.md.css +6 -0
  494. package/dist/collection/components/select/select.ionic.css +765 -0
  495. package/dist/collection/components/select/select.ios.css +315 -176
  496. package/dist/collection/components/select/select.js +157 -54
  497. package/dist/collection/components/select/select.md.css +331 -178
  498. package/dist/collection/components/select-modal/select-modal.ionic.css +121 -0
  499. package/dist/collection/components/select-modal/select-modal.ios.css +18 -0
  500. package/dist/collection/components/select-modal/select-modal.js +3 -3
  501. package/dist/collection/components/select-modal/select-modal.md.css +7 -3
  502. package/dist/collection/components/select-option/select-option.js +9 -2
  503. package/dist/collection/components/select-popover/select-popover.ios.css +18 -0
  504. package/dist/collection/components/select-popover/select-popover.js +12 -4
  505. package/dist/collection/components/select-popover/select-popover.md.css +18 -0
  506. package/dist/collection/components/skeleton-text/skeleton-text.css +6 -0
  507. package/dist/collection/components/skeleton-text/skeleton-text.js +9 -5
  508. package/dist/collection/components/spinner/{spinner.css → spinner.ionic.css} +79 -10
  509. package/dist/collection/components/spinner/spinner.js +47 -6
  510. package/dist/collection/components/spinner/spinner.native.css +198 -0
  511. package/dist/collection/components/split-pane/split-pane.ios.css +20 -2
  512. package/dist/collection/components/split-pane/split-pane.js +14 -8
  513. package/dist/collection/components/split-pane/split-pane.md.css +20 -2
  514. package/dist/collection/components/tab/tab.js +6 -2
  515. package/dist/collection/components/tab-bar/tab-bar.ionic.css +188 -0
  516. package/dist/collection/components/tab-bar/tab-bar.ios.css +71 -43
  517. package/dist/collection/components/tab-bar/tab-bar.js +78 -11
  518. package/dist/collection/components/tab-bar/tab-bar.md.css +71 -43
  519. package/dist/collection/components/tab-button/tab-button.ionic.css +338 -0
  520. package/dist/collection/components/tab-button/tab-button.ios.css +171 -95
  521. package/dist/collection/components/tab-button/tab-button.js +44 -8
  522. package/dist/collection/components/tab-button/tab-button.md.css +137 -93
  523. package/dist/collection/components/tabs/tabs.css +7 -1
  524. package/dist/collection/components/tabs/tabs.js +4 -1
  525. package/dist/collection/components/text/text.css +6 -0
  526. package/dist/collection/components/text/text.js +7 -6
  527. package/dist/collection/components/textarea/textarea.ionic.css +830 -0
  528. package/dist/collection/components/textarea/textarea.ios.css +275 -139
  529. package/dist/collection/components/textarea/textarea.js +82 -77
  530. package/dist/collection/components/textarea/textarea.md.css +288 -140
  531. package/dist/collection/components/thumbnail/thumbnail.css +6 -0
  532. package/dist/collection/components/thumbnail/thumbnail.js +9 -2
  533. package/dist/collection/components/title/title.ionic.css +129 -0
  534. package/dist/collection/components/title/title.ios.css +32 -4
  535. package/dist/collection/components/title/title.js +13 -7
  536. package/dist/collection/components/title/title.md.css +32 -4
  537. package/dist/collection/components/toast/animations/utils.js +1 -1
  538. package/dist/collection/components/toast/toast.ionic.css +396 -0
  539. package/dist/collection/components/toast/toast.ios.css +84 -45
  540. package/dist/collection/components/toast/toast.js +75 -12
  541. package/dist/collection/components/toast/toast.md.css +84 -45
  542. package/dist/collection/components/toggle/toggle.ionic.css +511 -0
  543. package/dist/collection/components/toggle/toggle.ios.css +247 -131
  544. package/dist/collection/components/toggle/toggle.js +73 -18
  545. package/dist/collection/components/toggle/toggle.md.css +244 -131
  546. package/dist/collection/components/toolbar/test/image.svg +1 -0
  547. package/dist/collection/components/toolbar/toolbar.ionic.css +243 -0
  548. package/dist/collection/components/toolbar/toolbar.ios.css +90 -47
  549. package/dist/collection/components/toolbar/toolbar.js +157 -13
  550. package/dist/collection/components/toolbar/toolbar.md.css +90 -47
  551. package/dist/collection/global/ionic-global.js +228 -13
  552. package/dist/collection/utils/focus-visible.js +22 -0
  553. package/dist/collection/utils/framework-delegate.js +3 -1
  554. package/dist/collection/utils/helpers.js +42 -2
  555. package/dist/collection/utils/keyboard/keyboard-controller.js +3 -1
  556. package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
  557. package/dist/collection/utils/menu-controller/animations/push.js +2 -1
  558. package/dist/collection/utils/menu-controller/animations/reveal.js +2 -1
  559. package/dist/collection/utils/overlays.js +19 -110
  560. package/dist/collection/utils/test/playwright/generator.js +48 -23
  561. package/dist/collection/utils/test/playwright/page/utils/goto.js +14 -5
  562. package/dist/collection/utils/test/playwright/page/utils/set-content.js +24 -3
  563. package/dist/collection/utils/transition/ios.transition.js +1 -0
  564. package/dist/docs.json +7920 -359
  565. package/dist/esm/{animation-BvhAtgca.js → animation-DPqVg3gl.js} +1 -1
  566. package/dist/esm/{app-globals-CvLYUxE9.js → app-globals-dJs8dVUB.js} +1 -1
  567. package/dist/esm/{button-active-DBUPuLNw.js → button-active-BMINdWv6.js} +1 -1
  568. package/dist/esm/{capacitor-CFERIeaU.js → capacitor--DL1MVFW.js} +1 -1
  569. package/dist/esm/caret-down-D1t981Ih.js +6 -0
  570. package/dist/esm/caret-left-fIOYmaqA.js +6 -0
  571. package/dist/esm/caret-right-BYSs-jZz.js +6 -0
  572. package/dist/esm/{data-CKHMWxfe.js → data-slRmoEWk.js} +5 -5
  573. package/dist/esm/{focus-visible-BmVRXR1y.js → focus-visible-vXpMhGrs.js} +23 -1
  574. package/dist/esm/{framework-delegate-BLEBgH06.js → framework-delegate-C3AU0AA6.js} +4 -2
  575. package/dist/esm/{haptic-DzAMWJuk.js → haptic-BWDWI-Xh.js} +1 -1
  576. package/dist/esm/{helpers-8KSQQGQy.js → helpers-CKng-4WP.js} +42 -3
  577. package/dist/esm/{index-CXSTcaAW.js → index-BwfAv3fK.js} +10 -10
  578. package/dist/esm/{index-7UbSlv7N.js → index-C21kdpyw.js} +1 -1
  579. package/dist/esm/{index-DV3sJJW8.js → index-COG0_eom.js} +1 -1
  580. package/dist/esm/{index-Dp7GXH1z.js → index-DLYqkEhn.js} +3 -3
  581. package/dist/esm/{index-C6WeRr09.js → index-jNq9q9I-.js} +3 -2
  582. package/dist/esm/index.js +10 -11
  583. package/dist/esm/{input-shims-C4KDnhxb.js → input-shims-Dt4HUCHS.js} +6 -5
  584. package/dist/esm/{input.utils-be4gBvVY.js → input.utils-D7U0b1bK.js} +2 -2
  585. package/dist/esm/ion-accordion_2.entry.js +56 -27
  586. package/dist/esm/ion-action-sheet.entry.js +21 -18
  587. package/dist/esm/ion-alert.entry.js +22 -20
  588. package/dist/esm/ion-app_8.entry.js +244 -145
  589. package/dist/esm/ion-avatar_3.entry.js +125 -13
  590. package/dist/esm/ion-back-button.entry.js +29 -20
  591. package/dist/esm/ion-backdrop.entry.js +9 -6
  592. package/dist/esm/ion-breadcrumb_2.entry.js +53 -17
  593. package/dist/esm/ion-button_2.entry.js +43 -11
  594. package/dist/esm/ion-card_5.entry.js +53 -29
  595. package/dist/esm/ion-checkbox.entry.js +31 -13
  596. package/dist/esm/ion-chip.entry.js +49 -8
  597. package/dist/esm/ion-col_3.entry.js +13 -10
  598. package/dist/esm/ion-datetime-button.entry.js +11 -7
  599. package/dist/esm/ion-datetime_3.entry.js +116 -41
  600. package/dist/esm/ion-divider.entry.js +49 -0
  601. package/dist/esm/ion-fab_3.entry.js +43 -27
  602. package/dist/esm/ion-img.entry.js +7 -3
  603. package/dist/esm/ion-infinite-scroll_2.entry.js +89 -14
  604. package/dist/esm/ion-input-otp.entry.js +11 -7
  605. package/dist/esm/ion-input-password-toggle.entry.js +52 -14
  606. package/dist/esm/ion-input.entry.js +127 -91
  607. package/dist/esm/ion-item-option_3.entry.js +48 -19
  608. package/dist/esm/ion-item_8.entry.js +107 -47
  609. package/dist/esm/ion-loading.entry.js +17 -15
  610. package/dist/esm/ion-menu_3.entry.js +48 -27
  611. package/dist/esm/ion-modal.entry.js +56 -29
  612. package/dist/esm/ion-nav_2.entry.js +13 -10
  613. package/dist/esm/ion-picker-column-option.entry.js +12 -8
  614. package/dist/esm/ion-picker-column.entry.js +11 -47
  615. package/dist/esm/ion-picker.entry.js +9 -5
  616. package/dist/esm/ion-popover.entry.js +18 -16
  617. package/dist/esm/ion-progress-bar.entry.js +25 -7
  618. package/dist/esm/ion-radio_2.entry.js +22 -13
  619. package/dist/esm/ion-range.entry.js +14 -10
  620. package/dist/esm/ion-refresher_2.entry.js +37 -19
  621. package/dist/esm/ion-reorder_2.entry.js +38 -14
  622. package/dist/esm/ion-ripple-effect.entry.js +14 -6
  623. package/dist/esm/ion-route_4.entry.js +8 -7
  624. package/dist/esm/ion-searchbar.entry.js +137 -24
  625. package/dist/esm/ion-segment-content.entry.js +1 -1
  626. package/dist/esm/ion-segment-view.entry.js +5 -2
  627. package/dist/esm/ion-segment_2.entry.js +21 -14
  628. package/dist/esm/ion-select-modal.entry.js +8 -9
  629. package/dist/esm/ion-select_3.entry.js +131 -40
  630. package/dist/esm/ion-spinner.entry.js +28 -6
  631. package/dist/esm/ion-split-pane.entry.js +11 -8
  632. package/dist/esm/ion-tab-bar_2.entry.js +65 -20
  633. package/dist/esm/ion-tab_2.entry.js +7 -6
  634. package/dist/esm/ion-text.entry.js +5 -5
  635. package/dist/esm/ion-textarea.entry.js +60 -74
  636. package/dist/esm/ion-toast.entry.js +40 -17
  637. package/dist/esm/ion-toggle.entry.js +79 -22
  638. package/dist/esm/ionic-global-Dtd5Ma5B.js +480 -0
  639. package/dist/esm/ionic.js +3 -3
  640. package/dist/esm/{ios.transition-eAEkgVAv.js → ios.transition-CJcl_IUo.js} +6 -4
  641. package/dist/esm/{keyboard-CUw4ekVy.js → keyboard-Ce5NGRb7.js} +1 -1
  642. package/dist/esm/{keyboard-ywgs5efA.js → keyboard-DP1KnX1o.js} +4 -3
  643. package/dist/esm/{keyboard-controller-BaaVITYt.js → keyboard-controller-CN0dsogH.js} +5 -3
  644. package/dist/esm/list-Dhi5xtNS.js +6 -0
  645. package/dist/esm/loader.js +3 -3
  646. package/dist/esm/{md.transition-D8TeJ_Pz.js → md.transition-DUO570OK.js} +5 -4
  647. package/dist/esm/{notch-controller-lb417-kU.js → notch-controller-BZq2fbxL.js} +2 -2
  648. package/dist/esm/{overlays-ZX_4-t_r.js → overlays-B1-bMbOY.js} +22 -114
  649. package/dist/esm/{status-tap-pATNXEtr.js → status-tap-Bux-fh_w.js} +3 -2
  650. package/dist/esm/{swipe-back-B2YfOHRM.js → swipe-back-Dp-f6VSv.js} +2 -1
  651. package/dist/esm/x-BDqjX7Z_.js +6 -0
  652. package/dist/html.html-data.json +2511 -229
  653. package/dist/ionic/index.esm.js +1 -1
  654. package/dist/ionic/ionic.esm.js +1 -1
  655. package/dist/ionic/p-00239ebc.entry.js +4 -0
  656. package/dist/ionic/p-04b8cb11.entry.js +4 -0
  657. package/dist/ionic/p-083bdc4a.entry.js +4 -0
  658. package/dist/ionic/p-09ee42c7.entry.js +4 -0
  659. package/dist/ionic/p-0a973339.entry.js +4 -0
  660. package/dist/ionic/p-0b1386bf.entry.js +4 -0
  661. package/dist/ionic/p-0edc2fcf.entry.js +4 -0
  662. package/dist/ionic/p-123f6dde.entry.js +4 -0
  663. package/dist/ionic/p-1ac3754e.entry.js +4 -0
  664. package/dist/ionic/p-3610f001.entry.js +4 -0
  665. package/dist/ionic/p-361408bb.entry.js +4 -0
  666. package/dist/ionic/p-389093b6.entry.js +4 -0
  667. package/dist/ionic/p-3b1c39cf.entry.js +4 -0
  668. package/dist/ionic/p-47b803fc.entry.js +4 -0
  669. package/dist/ionic/{p-B1xocg0A.js → p-4ivCEBy1.js} +1 -1
  670. package/dist/ionic/p-637e497f.entry.js +4 -0
  671. package/dist/ionic/p-65d9c265.entry.js +4 -0
  672. package/dist/ionic/p-66b83d63.entry.js +4 -0
  673. package/dist/ionic/p-7918eeaa.entry.js +4 -0
  674. package/dist/ionic/p-7ead7a67.entry.js +4 -0
  675. package/dist/ionic/p-7f1c8070.entry.js +4 -0
  676. package/dist/ionic/p-80faabb9.entry.js +4 -0
  677. package/dist/ionic/p-8870c2f9.entry.js +4 -0
  678. package/dist/ionic/p-8fa42767.entry.js +4 -0
  679. package/dist/ionic/p-905f6505.entry.js +4 -0
  680. package/dist/ionic/p-907ac173.entry.js +4 -0
  681. package/dist/ionic/p-95621a36.entry.js +4 -0
  682. package/dist/ionic/p-97bf9127.entry.js +4 -0
  683. package/dist/ionic/p-9af1c2e0.entry.js +4 -0
  684. package/dist/ionic/p-9e575e4e.entry.js +4 -0
  685. package/dist/ionic/p-BDqjX7Z_.js +4 -0
  686. package/dist/ionic/p-BFFank6B.js +4 -0
  687. package/dist/ionic/{p-CWvl4RPO.js → p-BISSkhkA.js} +1 -1
  688. package/dist/ionic/p-BJGh_obi.js +4 -0
  689. package/dist/ionic/p-BYSs-jZz.js +4 -0
  690. package/dist/ionic/{p-CKvCXMs9.js → p-BYYLxYDJ.js} +1 -1
  691. package/dist/ionic/p-Bh0_z73h.js +4 -0
  692. package/dist/ionic/p-BpaeL4Lk.js +4 -0
  693. package/dist/ionic/{p-DiZPU8BH.js → p-BqMzjJ9X.js} +1 -1
  694. package/dist/ionic/p-CKq50gmC.js +4 -0
  695. package/dist/ionic/{p-DV3sJJW8.js → p-COG0_eom.js} +1 -1
  696. package/dist/ionic/{p-C87oPMMF.js → p-CVVzZviS.js} +1 -1
  697. package/dist/ionic/p-CZEwJt85.js +4 -0
  698. package/dist/ionic/p-Cdv0TJ6-.js +4 -0
  699. package/dist/ionic/{p-BhNEp2QP.js → p-CjpktT3Z.js} +1 -1
  700. package/dist/ionic/p-CqYDGaCK.js +4 -0
  701. package/dist/ionic/p-D-m6MIML.js +4 -0
  702. package/dist/ionic/p-D1t981Ih.js +4 -0
  703. package/dist/ionic/{p-DCuOL88l.js → p-D8VpGXAu.js} +1 -1
  704. package/dist/ionic/p-DBzcL_sL.js +4 -0
  705. package/dist/ionic/p-DO7doFVM.js +4 -0
  706. package/dist/ionic/p-Dhi5xtNS.js +4 -0
  707. package/dist/ionic/p-DpBID_Du.js +4 -0
  708. package/dist/ionic/p-DuV7rU9I.js +4 -0
  709. package/dist/ionic/p-EG6i47Uw.js +4 -0
  710. package/dist/ionic/{p-D13Eaw-8.js → p-EwG_P2X9.js} +1 -1
  711. package/dist/ionic/p-Ex5J81sy.js +4 -0
  712. package/dist/ionic/{p-BHGXdud8.js → p-KY_2sl5b.js} +1 -1
  713. package/dist/ionic/p-a953afe2.entry.js +4 -0
  714. package/dist/ionic/p-ab387abd.entry.js +4 -0
  715. package/dist/ionic/p-abc60b26.entry.js +4 -0
  716. package/dist/ionic/p-b269fb6b.entry.js +4 -0
  717. package/dist/ionic/p-b8c602ec.entry.js +4 -0
  718. package/dist/ionic/p-c6887f5c.entry.js +4 -0
  719. package/dist/ionic/p-c847a353.entry.js +4 -0
  720. package/dist/ionic/p-c8eb678d.entry.js +4 -0
  721. package/dist/ionic/p-cff18cc5.entry.js +4 -0
  722. package/dist/ionic/p-d65a8d3e.entry.js +4 -0
  723. package/dist/ionic/p-d9525f67.entry.js +4 -0
  724. package/dist/ionic/p-db20a452.entry.js +4 -0
  725. package/dist/ionic/{p-7a53f04c.entry.js → p-dc66e8cc.entry.js} +1 -1
  726. package/dist/ionic/p-e0a689ea.entry.js +4 -0
  727. package/dist/ionic/p-e25b2e94.entry.js +4 -0
  728. package/dist/ionic/p-e53f3a62.entry.js +4 -0
  729. package/dist/ionic/p-e6caa048.entry.js +4 -0
  730. package/dist/ionic/p-ec96366b.entry.js +4 -0
  731. package/dist/ionic/p-ed071a41.entry.js +4 -0
  732. package/dist/ionic/p-eea0e705.entry.js +4 -0
  733. package/dist/ionic/p-f0e88837.entry.js +4 -0
  734. package/dist/ionic/p-f4d11cbb.entry.js +4 -0
  735. package/dist/ionic/p-fIOYmaqA.js +4 -0
  736. package/dist/ionic/p-fcba862e.entry.js +4 -0
  737. package/dist/ionic/p-ff010b26.entry.js +4 -0
  738. package/dist/ionic/p-vXpMhGrs.js +4 -0
  739. package/dist/types/components/accordion/accordion.d.ts +5 -3
  740. package/dist/types/components/accordion-group/accordion-group.d.ts +12 -1
  741. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +3 -7
  742. package/dist/types/components/action-sheet/action-sheet.d.ts +3 -2
  743. package/dist/types/components/alert/alert-interface.d.ts +3 -7
  744. package/dist/types/components/alert/alert.d.ts +3 -2
  745. package/dist/types/components/app/app.d.ts +4 -2
  746. package/dist/types/components/avatar/avatar.d.ts +32 -0
  747. package/dist/types/components/back-button/back-button.d.ts +2 -1
  748. package/dist/types/components/backdrop/backdrop.d.ts +4 -0
  749. package/dist/types/components/badge/badge.d.ts +34 -1
  750. package/dist/types/components/breadcrumb/breadcrumb.d.ts +4 -1
  751. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
  752. package/dist/types/components/button/button.d.ts +19 -6
  753. package/dist/types/components/buttons/buttons.d.ts +5 -1
  754. package/dist/types/components/card/card.d.ts +8 -1
  755. package/dist/types/components/card-content/card-content.d.ts +2 -1
  756. package/dist/types/components/card-header/card-header.d.ts +3 -2
  757. package/dist/types/components/card-subtitle/card-subtitle.d.ts +2 -1
  758. package/dist/types/components/card-title/card-title.d.ts +2 -1
  759. package/dist/types/components/checkbox/checkbox.d.ts +14 -4
  760. package/dist/types/components/chip/chip.d.ts +26 -1
  761. package/dist/types/components/col/col.d.ts +4 -0
  762. package/dist/types/components/content/content.d.ts +3 -0
  763. package/dist/types/components/datetime/datetime.d.ts +26 -1
  764. package/dist/types/components/datetime/utils/data.d.ts +5 -5
  765. package/dist/types/components/datetime-button/datetime-button.d.ts +2 -1
  766. package/dist/types/components/divider/divider.d.ts +20 -0
  767. package/dist/types/components/fab/fab.d.ts +4 -0
  768. package/dist/types/components/fab-button/fab-button.d.ts +5 -3
  769. package/dist/types/components/fab-list/fab-list.d.ts +4 -0
  770. package/dist/types/components/footer/footer.d.ts +4 -3
  771. package/dist/types/components/grid/grid.d.ts +4 -0
  772. package/dist/types/components/header/header.d.ts +9 -3
  773. package/dist/types/components/img/img.d.ts +3 -0
  774. package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +21 -0
  775. package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +4 -0
  776. package/dist/types/components/input/input.d.ts +31 -14
  777. package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +2 -0
  778. package/dist/types/components/item/item.d.ts +11 -4
  779. package/dist/types/components/item-divider/item-divider.d.ts +2 -1
  780. package/dist/types/components/item-group/item-group.d.ts +4 -0
  781. package/dist/types/components/item-option/item-option.d.ts +18 -1
  782. package/dist/types/components/item-options/item-options.d.ts +4 -0
  783. package/dist/types/components/item-sliding/item-sliding.d.ts +4 -0
  784. package/dist/types/components/label/label.d.ts +2 -1
  785. package/dist/types/components/list/list.d.ts +15 -1
  786. package/dist/types/components/list-header/list-header.d.ts +2 -1
  787. package/dist/types/components/loading/loading-interface.d.ts +2 -7
  788. package/dist/types/components/loading/loading.d.ts +3 -2
  789. package/dist/types/components/menu/menu.d.ts +3 -0
  790. package/dist/types/components/menu-button/menu-button.d.ts +3 -1
  791. package/dist/types/components/menu-toggle/menu-toggle.d.ts +3 -0
  792. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  793. package/dist/types/components/modal/modal-interface.d.ts +4 -7
  794. package/dist/types/components/modal/modal.d.ts +11 -1
  795. package/dist/types/components/nav/nav-interface.d.ts +9 -1
  796. package/dist/types/components/nav/nav.d.ts +5 -1
  797. package/dist/types/components/nav-link/nav-link.d.ts +4 -0
  798. package/dist/types/components/note/note.d.ts +2 -1
  799. package/dist/types/components/picker/picker.d.ts +2 -1
  800. package/dist/types/components/picker-column/picker-column.d.ts +2 -8
  801. package/dist/types/components/picker-column-option/picker-column-option.d.ts +4 -0
  802. package/dist/types/components/picker-legacy/picker.d.ts +2 -1
  803. package/dist/types/components/popover/popover-interface.d.ts +3 -6
  804. package/dist/types/components/popover/popover.d.ts +6 -5
  805. package/dist/types/components/progress-bar/progress-bar.d.ts +10 -1
  806. package/dist/types/components/radio/radio.d.ts +2 -1
  807. package/dist/types/components/radio-group/radio-group.d.ts +4 -0
  808. package/dist/types/components/range/range.d.ts +2 -1
  809. package/dist/types/components/refresher/refresher.d.ts +2 -1
  810. package/dist/types/components/refresher-content/refresher-content.d.ts +4 -0
  811. package/dist/types/components/reorder/reorder.d.ts +9 -0
  812. package/dist/types/components/reorder-group/reorder-group.d.ts +4 -0
  813. package/dist/types/components/ripple-effect/ripple-effect.d.ts +4 -0
  814. package/dist/types/components/route/route.d.ts +4 -0
  815. package/dist/types/components/router/router.d.ts +4 -0
  816. package/dist/types/components/router-link/router-link.d.ts +4 -0
  817. package/dist/types/components/router-outlet/router-outlet.d.ts +4 -1
  818. package/dist/types/components/row/row.d.ts +4 -0
  819. package/dist/types/components/searchbar/searchbar.d.ts +51 -9
  820. package/dist/types/components/segment/segment.d.ts +2 -1
  821. package/dist/types/components/segment-button/segment-button.d.ts +2 -1
  822. package/dist/types/components/select/select.d.ts +41 -13
  823. package/dist/types/components/select-option/select-option.d.ts +4 -0
  824. package/dist/types/components/select-popover/select-popover.d.ts +3 -0
  825. package/dist/types/components/skeleton-text/skeleton-text.d.ts +4 -0
  826. package/dist/types/components/spinner/spinner.d.ts +15 -0
  827. package/dist/types/components/split-pane/split-pane.d.ts +4 -0
  828. package/dist/types/components/tab/tab.d.ts +4 -0
  829. package/dist/types/components/tab-bar/tab-bar.d.ts +22 -2
  830. package/dist/types/components/tab-button/tab-button.d.ts +11 -1
  831. package/dist/types/components/tabs/tabs.d.ts +3 -0
  832. package/dist/types/components/text/text.d.ts +2 -1
  833. package/dist/types/components/textarea/textarea.d.ts +17 -13
  834. package/dist/types/components/thumbnail/thumbnail.d.ts +4 -0
  835. package/dist/types/components/title/title.d.ts +4 -0
  836. package/dist/types/components/toast/animations/utils.d.ts +2 -2
  837. package/dist/types/components/toast/toast-interface.d.ts +3 -7
  838. package/dist/types/components/toast/toast.d.ts +19 -2
  839. package/dist/types/components/toggle/toggle.d.ts +15 -1
  840. package/dist/types/components/toolbar/toolbar.d.ts +20 -3
  841. package/dist/types/components.d.ts +1522 -197
  842. package/dist/types/global/ionic-global.d.ts +27 -2
  843. package/dist/types/interface.d.ts +3 -0
  844. package/dist/types/utils/config.d.ts +106 -2
  845. package/dist/types/utils/focus-visible.d.ts +13 -0
  846. package/dist/types/utils/helpers.d.ts +11 -0
  847. package/dist/types/utils/overlays-interface.d.ts +31 -1
  848. package/dist/types/utils/test/playwright/generator.d.ts +31 -2
  849. package/hydrate/index.js +2838 -1139
  850. package/hydrate/index.mjs +2838 -1139
  851. package/package.json +10 -5
  852. package/components/hardware-back-button.js +0 -115
  853. package/components/index9.js +0 -7
  854. package/dist/cjs/hardware-back-button-BxdNu76F.js +0 -121
  855. package/dist/cjs/index-DkNv4J_i.js +0 -10
  856. package/dist/cjs/ionic-global-UI5YPSi-.js +0 -151
  857. package/dist/esm/hardware-back-button-Dhbd-23H.js +0 -115
  858. package/dist/esm/index-ZjP4CjeZ.js +0 -7
  859. package/dist/esm/ionic-global-CTSyufhF.js +0 -146
  860. package/dist/ionic/p-0816f67c.entry.js +0 -4
  861. package/dist/ionic/p-0f396661.entry.js +0 -4
  862. package/dist/ionic/p-1191a2d9.entry.js +0 -4
  863. package/dist/ionic/p-148bdf18.entry.js +0 -4
  864. package/dist/ionic/p-16116947.entry.js +0 -4
  865. package/dist/ionic/p-19f80390.entry.js +0 -4
  866. package/dist/ionic/p-1a91f317.entry.js +0 -4
  867. package/dist/ionic/p-1bbd0a23.entry.js +0 -4
  868. package/dist/ionic/p-1d5b934a.entry.js +0 -4
  869. package/dist/ionic/p-29032e49.entry.js +0 -4
  870. package/dist/ionic/p-2cb0f39f.entry.js +0 -4
  871. package/dist/ionic/p-349fc921.entry.js +0 -4
  872. package/dist/ionic/p-3624b640.entry.js +0 -4
  873. package/dist/ionic/p-36a54836.entry.js +0 -4
  874. package/dist/ionic/p-39ed3212.entry.js +0 -4
  875. package/dist/ionic/p-40d56a51.entry.js +0 -4
  876. package/dist/ionic/p-4f2c5845.entry.js +0 -4
  877. package/dist/ionic/p-528af4e6.entry.js +0 -4
  878. package/dist/ionic/p-54dec9b1.entry.js +0 -4
  879. package/dist/ionic/p-5c976c00.entry.js +0 -4
  880. package/dist/ionic/p-6383afc2.entry.js +0 -4
  881. package/dist/ionic/p-7b12d853.entry.js +0 -4
  882. package/dist/ionic/p-7bac2c5f.entry.js +0 -4
  883. package/dist/ionic/p-7da05504.entry.js +0 -4
  884. package/dist/ionic/p-8cdb4ff5.entry.js +0 -4
  885. package/dist/ionic/p-8d96a0cd.entry.js +0 -4
  886. package/dist/ionic/p-8e2de06f.entry.js +0 -4
  887. package/dist/ionic/p-91d6ccb0.entry.js +0 -4
  888. package/dist/ionic/p-92e8f208.entry.js +0 -4
  889. package/dist/ionic/p-982fe1c4.entry.js +0 -4
  890. package/dist/ionic/p-9ddf2620.entry.js +0 -4
  891. package/dist/ionic/p-9eeaBrnk.js +0 -4
  892. package/dist/ionic/p-B5MDSrGg.js +0 -4
  893. package/dist/ionic/p-BB-JoKGB.js +0 -4
  894. package/dist/ionic/p-BmVRXR1y.js +0 -4
  895. package/dist/ionic/p-Br3vSlYh.js +0 -4
  896. package/dist/ionic/p-C-Cct-6D.js +0 -4
  897. package/dist/ionic/p-C4I6B3uV.js +0 -4
  898. package/dist/ionic/p-C8d2ebIg.js +0 -4
  899. package/dist/ionic/p-CIGNaXM1.js +0 -4
  900. package/dist/ionic/p-CSwZyt05.js +0 -4
  901. package/dist/ionic/p-CtWGkNnJ.js +0 -4
  902. package/dist/ionic/p-CvaZMP6T.js +0 -4
  903. package/dist/ionic/p-D2fQU_qK.js +0 -4
  904. package/dist/ionic/p-DAfH9Iif.js +0 -4
  905. package/dist/ionic/p-DJKvq7vb.js +0 -4
  906. package/dist/ionic/p-Dm_oBkW1.js +0 -4
  907. package/dist/ionic/p-LaGjiAVo.js +0 -4
  908. package/dist/ionic/p-ZjP4CjeZ.js +0 -4
  909. package/dist/ionic/p-a81be128.entry.js +0 -4
  910. package/dist/ionic/p-ab33ef20.entry.js +0 -4
  911. package/dist/ionic/p-ac434970.entry.js +0 -4
  912. package/dist/ionic/p-afeb9df6.entry.js +0 -4
  913. package/dist/ionic/p-bc9f9032.entry.js +0 -4
  914. package/dist/ionic/p-bf81a468.entry.js +0 -4
  915. package/dist/ionic/p-c0d58c8e.entry.js +0 -4
  916. package/dist/ionic/p-c575e7ce.entry.js +0 -4
  917. package/dist/ionic/p-cde6d39b.entry.js +0 -4
  918. package/dist/ionic/p-d04d66fc.entry.js +0 -4
  919. package/dist/ionic/p-d3df6032.entry.js +0 -4
  920. package/dist/ionic/p-dbba38cf.entry.js +0 -4
  921. package/dist/ionic/p-e6c3214c.entry.js +0 -4
  922. package/dist/ionic/p-e6c465ff.entry.js +0 -4
  923. package/dist/ionic/p-ec76fec4.entry.js +0 -4
  924. package/dist/ionic/p-ee2e35a6.entry.js +0 -4
  925. package/dist/ionic/p-f2884bc2.entry.js +0 -4
  926. package/dist/ionic/p-f456d176.entry.js +0 -4
  927. package/dist/ionic/p-f7db572a.entry.js +0 -4
  928. package/dist/ionic/p-f9eb54ee.entry.js +0 -4
  929. /package/dist/collection/components/{input-password-toggle/input-password-toggle.css → refresher-content/refresher-content.css} +0 -0
@@ -1,14 +1,148 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { getMode, setMode } from "@stencil/core";
4
+ import { Build, getMode, setMode, getElement } from "@stencil/core";
5
5
  import { printIonWarning } from "../utils/logging/index";
6
+ import { shouldUseCloseWatcher } from "../utils/hardware-back-button";
6
7
  import { isPlatform, setupPlatforms } from "../utils/platform";
7
8
  import { config, configFromSession, configFromURL, saveConfig } from "./config";
8
- // TODO(FW-2832): types
9
9
  let defaultMode;
10
- export const getIonMode = (ref) => {
11
- return (ref && getMode(ref)) || defaultMode;
10
+ let defaultTheme = 'md';
11
+ /**
12
+ * Prints a warning message to the developer to inform them of
13
+ * an invalid configuration of mode and theme.
14
+ * @param mode The invalid mode configuration.
15
+ * @param theme The invalid theme configuration.
16
+ */
17
+ const printInvalidModeWarning = (mode, theme, ref) => {
18
+ printIonWarning(`Invalid mode and theme combination provided: mode: ${mode}, theme: ${theme}. Fallback mode ${getDefaultModeForTheme(theme)} will be used.`, ref);
19
+ };
20
+ /**
21
+ * Validates if a mode is accepted for a theme configuration.
22
+ * @param mode The mode to validate.
23
+ * @param theme The theme the mode is being used with.
24
+ * @returns `true` if the mode is valid for the theme, `false` if invalid.
25
+ */
26
+ export const isModeValidForTheme = (mode, theme) => {
27
+ if (mode === 'md') {
28
+ return theme === 'md' || theme === 'ionic';
29
+ }
30
+ else if (mode === 'ios') {
31
+ return theme === 'ios' || theme === 'ionic';
32
+ }
33
+ return false;
34
+ };
35
+ /**
36
+ * Returns the default mode for a specified theme.
37
+ * @param theme The theme to return a default mode for.
38
+ * @returns The default mode, either `ios` or `md`.
39
+ */
40
+ const getDefaultModeForTheme = (theme) => {
41
+ if (theme === 'ios') {
42
+ return 'ios';
43
+ }
44
+ return 'md';
45
+ };
46
+ /**
47
+ * Returns the default theme for a specified mode.
48
+ * @param mode The mode to return a default theme for.
49
+ * @returns The default theme.
50
+ */
51
+ const getDefaultThemeForMode = (mode) => {
52
+ if (mode === 'ios') {
53
+ return 'ios';
54
+ }
55
+ return 'md';
56
+ };
57
+ const isModeSupported = (elmMode) => ['ios', 'md'].includes(elmMode);
58
+ const isThemeSupported = (theme) => ['ios', 'md', 'ionic'].includes(theme);
59
+ const isIonicElement = (elm) => { var _a; return (_a = elm.tagName) === null || _a === void 0 ? void 0 : _a.startsWith('ION-'); };
60
+ /**
61
+ * Returns the mode value of the element reference or the closest
62
+ * parent with a valid mode.
63
+ * @param ref The element reference to look up the mode for.
64
+ * @param theme Optionally can provide the theme to avoid an additional look-up.
65
+ * @returns The mode value for the element reference.
66
+ */
67
+ export const getIonMode = (ref, theme = getIonTheme(ref)) => {
68
+ var _a;
69
+ if ((ref === null || ref === void 0 ? void 0 : ref.mode) && isModeValidForTheme(ref === null || ref === void 0 ? void 0 : ref.mode, theme)) {
70
+ /**
71
+ * If the reference already has a mode configuration,
72
+ * use it instead of performing a look-up.
73
+ */
74
+ return ref.mode;
75
+ }
76
+ else {
77
+ const el = getElement(ref);
78
+ const mode = ((_a = el.closest('[mode]')) === null || _a === void 0 ? void 0 : _a.getAttribute('mode')) || defaultMode;
79
+ if (isModeValidForTheme(mode, theme)) {
80
+ /**
81
+ * The mode configuration is supported for the configured theme.
82
+ */
83
+ return mode;
84
+ }
85
+ else {
86
+ printInvalidModeWarning(mode, theme, ref);
87
+ }
88
+ }
89
+ return getDefaultModeForTheme(theme);
90
+ };
91
+ /**
92
+ * Returns the theme value of the element reference or the closest
93
+ * parent with a valid theme.
94
+ *
95
+ * @param ref The element reference to look up the theme for.
96
+ * @returns The theme value for the element reference, defaults to
97
+ * the default theme if it cannot be determined.
98
+ */
99
+ export const getIonTheme = (ref) => {
100
+ var _a, _b;
101
+ const theme = ref && getMode(ref);
102
+ if (theme) {
103
+ return theme;
104
+ }
105
+ /**
106
+ * If the theme cannot be detected, then fallback to using
107
+ * the `mode` attribute to determine the style sheets to use.
108
+ */
109
+ const el = getElement(ref);
110
+ const mode = (_a = ref === null || ref === void 0 ? void 0 : ref.mode) !== null && _a !== void 0 ? _a : (_b = el.closest('[mode]')) === null || _b === void 0 ? void 0 : _b.getAttribute('mode');
111
+ if (mode) {
112
+ return getDefaultThemeForMode(mode);
113
+ }
114
+ /**
115
+ * If a mode is not detected, then fallback to using the
116
+ * default theme.
117
+ */
118
+ return defaultTheme;
119
+ };
120
+ export const rIC = (callback) => {
121
+ if ('requestIdleCallback' in window) {
122
+ window.requestIdleCallback(callback);
123
+ }
124
+ else {
125
+ setTimeout(callback, 32);
126
+ }
127
+ };
128
+ export const needInputShims = () => {
129
+ /**
130
+ * iOS always needs input shims
131
+ */
132
+ const needsShimsIOS = isPlatform(window, 'ios') && isPlatform(window, 'mobile');
133
+ if (needsShimsIOS) {
134
+ return true;
135
+ }
136
+ /**
137
+ * Android only needs input shims when running
138
+ * in the browser and only if the browser is using the
139
+ * new Chrome 108+ resize behavior: https://developer.chrome.com/blog/viewport-resize-behavior/
140
+ */
141
+ const isAndroidMobileWeb = isPlatform(window, 'android') && isPlatform(window, 'mobileweb');
142
+ if (isAndroidMobileWeb) {
143
+ return true;
144
+ }
145
+ return false;
12
146
  };
13
147
  export const initialize = (userConfig = {}) => {
14
148
  if (typeof window === 'undefined') {
@@ -26,33 +160,114 @@ export const initialize = (userConfig = {}) => {
26
160
  }
27
161
  // Setup platforms
28
162
  setupPlatforms(win);
29
- // first see if the mode was set as an attribute on <html>
30
- // which could have been set by the user, or by pre-rendering
31
- // otherwise get the mode via config settings, and fallback to md
32
163
  Ionic.config = config;
164
+ /**
165
+ * Check if the mode was set as an attribute on <html>
166
+ * which could have been set by the user, or by pre-rendering
167
+ * otherwise get the mode via config settings, and fallback to md.
168
+ */
33
169
  Ionic.mode = defaultMode = config.get('mode', doc.documentElement.getAttribute('mode') || (isPlatform(win, 'ios') ? 'ios' : 'md'));
170
+ /**
171
+ * Check if the theme was set as an attribute on <html>
172
+ * which could have been set by the user, or by pre-rendering
173
+ * otherwise get the theme via config settings, and fallback to md.
174
+ */
175
+ Ionic.theme = defaultTheme = config.get('theme', doc.documentElement.getAttribute('theme') || getDefaultThemeForMode(defaultMode));
176
+ if (!isModeValidForTheme(defaultMode, defaultTheme)) {
177
+ printInvalidModeWarning(defaultMode, defaultTheme, configObj);
178
+ defaultMode = getDefaultModeForTheme(defaultTheme);
179
+ }
34
180
  config.set('mode', defaultMode);
35
181
  doc.documentElement.setAttribute('mode', defaultMode);
36
182
  doc.documentElement.classList.add(defaultMode);
183
+ config.set('theme', defaultTheme);
184
+ doc.documentElement.setAttribute('theme', defaultTheme);
185
+ doc.documentElement.classList.add(defaultTheme);
37
186
  if (config.getBoolean('_testing')) {
38
187
  config.set('animated', false);
39
188
  }
40
- const isIonicElement = (elm) => { var _a; return (_a = elm.tagName) === null || _a === void 0 ? void 0 : _a.startsWith('ION-'); };
41
- const isAllowedIonicModeValue = (elmMode) => ['ios', 'md'].includes(elmMode);
42
189
  setMode((elm) => {
190
+ /**
191
+ * Iterate over all the element nodes, to both validate and
192
+ * set the "mode" that is used for determining the styles to
193
+ * apply to the element.
194
+ *
195
+ * setMode refers to Stencil's internal metadata for "mode",
196
+ * which is used to set the correct styleUrl for the component.
197
+ *
198
+ * If the "theme" attribute or property is set, then use it
199
+ * to determine the style sheets to use.
200
+ *
201
+ * If the "mode" attribute or property is set, then use it
202
+ * to determine the style sheets to use. This is fallback
203
+ * behavior for applications that are not setting the "theme".
204
+ */
43
205
  while (elm) {
44
- const elmMode = elm.mode || elm.getAttribute('mode');
206
+ const theme = elm.getAttribute('theme');
207
+ if (theme) {
208
+ if (isThemeSupported(theme)) {
209
+ return theme;
210
+ }
211
+ else if (isIonicElement(elm)) {
212
+ printIonWarning(`Invalid theme: "${theme}". Supported themes include: "ios" or "md".`);
213
+ }
214
+ }
215
+ /**
216
+ * If a theme is not detected, then fallback to using the
217
+ * `mode` attribute to determine the style sheets to use.
218
+ */
219
+ const elmMode = elm.getAttribute('mode');
45
220
  if (elmMode) {
46
- if (isAllowedIonicModeValue(elmMode)) {
221
+ if (isModeSupported(elmMode)) {
47
222
  return elmMode;
48
223
  }
49
224
  else if (isIonicElement(elm)) {
50
- printIonWarning('Invalid ionic mode: "' + elmMode + '", expected: "ios" or "md"');
225
+ printIonWarning(`Invalid mode: "${elmMode}". Ionic modes can be only "ios" or "md"`);
51
226
  }
52
227
  }
53
228
  elm = elm.parentElement;
54
229
  }
55
- return defaultMode;
230
+ return defaultTheme;
56
231
  });
232
+ // `IonApp` code
233
+ // ----------------------------------------------
234
+ if (Build.isBrowser) {
235
+ rIC(async () => {
236
+ const isHybrid = isPlatform(window, 'hybrid');
237
+ if (!config.getBoolean('_testing')) {
238
+ import('../utils/tap-click').then((module) => module.startTapClick(config));
239
+ }
240
+ if (config.getBoolean('statusTap', isHybrid)) {
241
+ import('../utils/status-tap').then((module) => module.startStatusTap());
242
+ }
243
+ if (config.getBoolean('inputShims', needInputShims())) {
244
+ /**
245
+ * needInputShims() ensures that only iOS and Android
246
+ * platforms proceed into this block.
247
+ */
248
+ const platform = isPlatform(window, 'ios') ? 'ios' : 'android';
249
+ import('../utils/input-shims/input-shims').then((module) => module.startInputShims(config, platform));
250
+ }
251
+ const hardwareBackButtonModule = await import('../utils/hardware-back-button');
252
+ const supportsHardwareBackButtonEvents = isHybrid || shouldUseCloseWatcher();
253
+ if (config.getBoolean('hardwareBackButton', supportsHardwareBackButtonEvents)) {
254
+ hardwareBackButtonModule.startHardwareBackButton();
255
+ }
256
+ else {
257
+ /**
258
+ * If an app sets hardwareBackButton: false and experimentalCloseWatcher: true
259
+ * then the close watcher will not be used.
260
+ */
261
+ if (shouldUseCloseWatcher()) {
262
+ 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.');
263
+ }
264
+ hardwareBackButtonModule.blockHardwareBackButton();
265
+ }
266
+ if (typeof window !== 'undefined') {
267
+ import('../utils/keyboard/keyboard').then((module) => module.startKeyboardAssist(window));
268
+ }
269
+ import('../utils/focus-visible').then((module) => module.getOrInitFocusVisibleUtility());
270
+ });
271
+ }
57
272
  };
58
273
  export default initialize;
@@ -17,6 +17,28 @@ const FOCUS_KEYS = [
17
17
  'Home',
18
18
  'End',
19
19
  ];
20
+ let focusVisibleUtility = null;
21
+ export const getOrInitFocusVisibleUtility = () => {
22
+ if (!focusVisibleUtility) {
23
+ focusVisibleUtility = startFocusVisible();
24
+ }
25
+ return focusVisibleUtility;
26
+ };
27
+ /**
28
+ * Used to set focus on an element that uses `ion-focusable`.
29
+ * Do not use this if focusing the element as a result of a keyboard
30
+ * event as the focus utility should handle this for us. This method
31
+ * should be used when we want to programmatically focus an element as
32
+ * a result of another user action. (Ex: We focus the first element
33
+ * inside of a popover when the user presents it, but the popover is not always
34
+ * presented as a result of keyboard action.)
35
+ *
36
+ * @param elements - The elements to set focus on.
37
+ */
38
+ export const focusElements = (elements) => {
39
+ const focusVisible = getOrInitFocusVisibleUtility();
40
+ focusVisible.setFocus(elements);
41
+ };
20
42
  export const startFocusVisible = (rootEl) => {
21
43
  let currentFocus = [];
22
44
  let keyboardMode = true;
@@ -1,6 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import { config } from "../global/config";
4
5
  import { componentOnReady } from "./helpers";
5
6
  // TODO(FW-2832): types
6
7
  export const attachComponent = async (delegate, container, component, cssClasses, componentProps, inline) => {
@@ -101,7 +102,8 @@ export const CoreDelegate = () => {
101
102
  * Get the root of the app and
102
103
  * add the overlay there.
103
104
  */
104
- const app = document.querySelector('ion-app') || document.body;
105
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
106
+ const app = document.querySelector(appRootSelector) || document.body;
105
107
  /**
106
108
  * Create a placeholder comment so that
107
109
  * we can return this component to where
@@ -1,7 +1,9 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import { focusElements } from "./focus-visible";
4
5
  import { printIonError } from "./logging/index";
6
+ import { config } from "../global/config";
5
7
  export const transitionEndAsync = (el, expectedDuration = 0) => {
6
8
  return new Promise((resolve) => {
7
9
  transitionEnd(el, expectedDuration, resolve);
@@ -203,6 +205,17 @@ export const raf = (h) => {
203
205
  export const hasShadowDom = (el) => {
204
206
  return !!el.shadowRoot && !!el.attachShadow;
205
207
  };
208
+ /**
209
+ * Focuses a given element while ensuring proper focus management
210
+ * within the Ionic framework. If the element is marked as `ion-focusable`,
211
+ * this function will delegate focus handling to `ion-app` or manually
212
+ * apply focus when a custom app root is used.
213
+ *
214
+ * This function helps maintain accessibility and expected focus behavior
215
+ * in both standard and custom root environments.
216
+ *
217
+ * @param el - The element to focus.
218
+ */
206
219
  export const focusVisibleElement = (el) => {
207
220
  el.focus();
208
221
  /**
@@ -214,9 +227,36 @@ export const focusVisibleElement = (el) => {
214
227
  * which will let us explicitly set the elements to focus.
215
228
  */
216
229
  if (el.classList.contains('ion-focusable')) {
217
- const app = el.closest('ion-app');
230
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
231
+ const app = el.closest(appRootSelector);
218
232
  if (app) {
219
- app.setFocus([el]);
233
+ if (appRootSelector === 'ion-app') {
234
+ /**
235
+ * If the app root is the default, then it will be
236
+ * in charge of setting focus. This is because the
237
+ * focus-visible utility is attached to the app root
238
+ * and will handle setting focus on the correct element.
239
+ */
240
+ app.setFocus([el]);
241
+ }
242
+ else {
243
+ /**
244
+ * When using a custom app root selector, the focus-visible
245
+ * utility is not available to manage focus automatically.
246
+ * If we set focus immediately, the element may not be fully
247
+ * rendered or interactive, especially if it was just added
248
+ * to the DOM. Using requestAnimationFrame ensures that focus
249
+ * is applied on the next frame, allowing the DOM to settle
250
+ * before changing focus.
251
+ */
252
+ requestAnimationFrame(() => {
253
+ /**
254
+ * The focus-visible utility is used to set focus on an
255
+ * element that uses `ion-focusable`.
256
+ */
257
+ focusElements([el]);
258
+ });
259
+ }
220
260
  }
221
261
  }
222
262
  };
@@ -2,6 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { doc, win } from "../browser/index";
5
+ import { config } from "../../global/config";
5
6
  import { Keyboard, KeyboardResize } from "../native/keyboard";
6
7
  /**
7
8
  * The element that resizes when the keyboard opens
@@ -25,7 +26,8 @@ const getResizeContainer = (resizeMode) => {
25
26
  * on that. In the event `ion-app` is not available then
26
27
  * we can fall back to `body`.
27
28
  */
28
- const ionApp = doc.querySelector('ion-app');
29
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
30
+ const ionApp = doc.querySelector(appRootSelector);
29
31
  return ionApp !== null && ionApp !== void 0 ? ionApp : doc.body;
30
32
  };
31
33
  /**
@@ -27,8 +27,8 @@ export const menuOverlayAnimation = (menu) => {
27
27
  }
28
28
  menuAnimation.addElement(menu.menuInnerEl).fromTo('transform', `translateX(${closedX})`, `translateX(${openedX})`);
29
29
  const mode = getIonMode(menu);
30
- const isIos = mode === 'ios';
31
- const opacity = isIos ? 0.2 : 0.25;
30
+ const isIOS = mode === 'ios';
31
+ const opacity = isIOS ? 0.2 : 0.25;
32
32
  backdropAnimation.addElement(menu.backdropEl).fromTo('opacity', 0.01, opacity);
33
- return baseAnimation(isIos).addAnimation([menuAnimation, backdropAnimation]);
33
+ return baseAnimation(isIOS).addAnimation([menuAnimation, backdropAnimation]);
34
34
  };
@@ -14,6 +14,7 @@ export const menuPushAnimation = (menu) => {
14
14
  let menuClosedX;
15
15
  const mode = getIonMode(menu);
16
16
  const width = menu.width;
17
+ const isIOS = mode === 'ios';
17
18
  if (menu.isEndSide) {
18
19
  contentOpenedX = -width + 'px';
19
20
  menuClosedX = width + 'px';
@@ -29,5 +30,5 @@ export const menuPushAnimation = (menu) => {
29
30
  .addElement(menu.contentEl)
30
31
  .fromTo('transform', 'translateX(0px)', `translateX(${contentOpenedX})`);
31
32
  const backdropAnimation = createAnimation().addElement(menu.backdropEl).fromTo('opacity', 0.01, 0.32);
32
- return baseAnimation(mode === 'ios').addAnimation([menuAnimation, contentAnimation, backdropAnimation]);
33
+ return baseAnimation(isIOS).addAnimation([menuAnimation, contentAnimation, backdropAnimation]);
33
34
  };
@@ -11,9 +11,10 @@ import { baseAnimation } from "./base";
11
11
  */
12
12
  export const menuRevealAnimation = (menu) => {
13
13
  const mode = getIonMode(menu);
14
+ const isIOS = mode === 'ios';
14
15
  const openedX = menu.width * (menu.isEndSide ? -1 : 1) + 'px';
15
16
  const contentOpen = createAnimation()
16
17
  .addElement(menu.contentEl) // REVIEW
17
18
  .fromTo('transform', 'translateX(0px)', `translateX(${openedX})`);
18
- return baseAnimation(mode === 'ios').addAnimation(contentOpen);
19
+ return baseAnimation(isIOS).addAnimation(contentOpen);
19
20
  };
@@ -11,7 +11,6 @@ import { CoreDelegate } from "./framework-delegate";
11
11
  import { BACKDROP_NO_SCROLL } from "./gesture/gesture-controller";
12
12
  import { OVERLAY_BACK_BUTTON_PRIORITY } from "./hardware-back-button";
13
13
  import { addEventListener, componentOnReady, focusVisibleElement, getElementRoot, removeEventListener, } from "./helpers";
14
- import { isPlatform } from "./platform";
15
14
  let lastOverlayIndex = 0;
16
15
  let lastId = 0;
17
16
  export const activeAnimations = new WeakMap();
@@ -412,15 +411,17 @@ export const getPresentedOverlay = (doc, overlayTag, id) => {
412
411
  */
413
412
  export const setRootAriaHidden = (hidden = false) => {
414
413
  const root = getAppRoot(document);
415
- const viewContainer = root.querySelector('ion-router-outlet, ion-nav, #ion-view-container-root');
414
+ const viewContainer = root.querySelector('ion-router-outlet, #ion-view-container-root');
416
415
  if (!viewContainer) {
417
416
  return;
418
417
  }
419
418
  if (hidden) {
420
419
  viewContainer.setAttribute('aria-hidden', 'true');
420
+ viewContainer.setAttribute('inert', '');
421
421
  }
422
422
  else {
423
423
  viewContainer.removeAttribute('aria-hidden');
424
+ viewContainer.removeAttribute('inert');
424
425
  }
425
426
  };
426
427
  export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts) => {
@@ -428,6 +429,17 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
428
429
  if (overlay.presented) {
429
430
  return;
430
431
  }
432
+ /**
433
+ * When an overlay that steals focus
434
+ * is dismissed, focus should be returned
435
+ * to the element that was focused
436
+ * prior to the overlay opening. Toast
437
+ * does not steal focus and is excluded
438
+ * from returning focus as a result.
439
+ */
440
+ if (overlay.el.tagName !== 'ION-TOAST') {
441
+ restoreElementFocus(overlay.el);
442
+ }
431
443
  /**
432
444
  * Due to accessibility guidelines, toasts do not have
433
445
  * focus traps.
@@ -439,8 +451,6 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
439
451
  setRootAriaHidden(true);
440
452
  document.body.classList.add(BACKDROP_NO_SCROLL);
441
453
  }
442
- hideUnderlyingOverlaysFromScreenReaders(overlay.el);
443
- hideAnimatingOverlayFromScreenReaders(overlay.el);
444
454
  overlay.presented = true;
445
455
  overlay.willPresent.emit();
446
456
  (_a = overlay.willPresentShorthand) === null || _a === void 0 ? void 0 : _a.emit();
@@ -454,17 +464,6 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
454
464
  overlay.didPresent.emit();
455
465
  (_b = overlay.didPresentShorthand) === null || _b === void 0 ? void 0 : _b.emit();
456
466
  }
457
- /**
458
- * When an overlay that steals focus
459
- * is dismissed, focus should be returned
460
- * to the element that was focused
461
- * prior to the overlay opening. Toast
462
- * does not steal focus and is excluded
463
- * from returning focus as a result.
464
- */
465
- if (overlay.el.tagName !== 'ION-TOAST') {
466
- restoreElementFocus(overlay.el);
467
- }
468
467
  /**
469
468
  * If the focused element is already
470
469
  * inside the overlay component then
@@ -487,6 +486,7 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
487
486
  * screen readers.
488
487
  */
489
488
  overlay.el.removeAttribute('aria-hidden');
489
+ overlay.el.removeAttribute('inert');
490
490
  };
491
491
  /**
492
492
  * When an overlay component is dismissed,
@@ -503,6 +503,8 @@ const restoreElementFocus = async (overlayEl) => {
503
503
  if (!previousElement) {
504
504
  return;
505
505
  }
506
+ // Ensure active element is blurred to prevent a11y warning issues
507
+ previousElement.blur();
506
508
  const shadowRoot = previousElement === null || previousElement === void 0 ? void 0 : previousElement.shadowRoot;
507
509
  if (shadowRoot) {
508
510
  // If there are no inner focusable elements, just focus the host element.
@@ -566,12 +568,6 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
566
568
  }
567
569
  overlay.presented = false;
568
570
  try {
569
- /**
570
- * There is no need to show the overlay to screen readers during
571
- * the dismiss animation. This is because the overlay will be removed
572
- * from the DOM after the animation is complete.
573
- */
574
- hideAnimatingOverlayFromScreenReaders(overlay.el);
575
571
  // Overlay contents should not be clickable during dismiss
576
572
  overlay.el.style.setProperty('pointer-events', 'none');
577
573
  overlay.willDismiss.emit({ data, role });
@@ -610,11 +606,11 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
610
606
  printIonError(`[${overlay.el.tagName.toLowerCase()}] - `, err);
611
607
  }
612
608
  overlay.el.remove();
613
- revealOverlaysToScreenReaders();
614
609
  return true;
615
610
  };
616
611
  const getAppRoot = (doc) => {
617
- return doc.querySelector('ion-app') || doc.body;
612
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
613
+ return doc.querySelector(appRootSelector) || doc.body;
618
614
  };
619
615
  const overlayAnimation = async (overlay, animationBuilder, baseEl, opts) => {
620
616
  // Make overlay visible in case it's hidden
@@ -806,91 +802,4 @@ export const createTriggerController = () => {
806
802
  removeClickListener,
807
803
  };
808
804
  };
809
- /**
810
- * The overlay that is being animated also needs to hide from screen
811
- * readers during its animation. This ensures that assistive technologies
812
- * like TalkBack do not announce or interact with the content until the
813
- * animation is complete, avoiding confusion for users.
814
- *
815
- * When the overlay is presented on an Android device, TalkBack's focus rings
816
- * may appear in the wrong position due to the transition (specifically
817
- * `transform` styles). This occurs because the focus rings are initially
818
- * displayed at the starting position of the elements before the transition
819
- * begins. This workaround ensures the focus rings do not appear in the
820
- * incorrect location.
821
- *
822
- * If this solution is applied to iOS devices, then it leads to a bug where
823
- * the overlays cannot be accessed by screen readers. This is due to
824
- * VoiceOver not being able to update the accessibility tree when the
825
- * `aria-hidden` is removed.
826
- *
827
- * @param overlay - The overlay that is being animated.
828
- */
829
- const hideAnimatingOverlayFromScreenReaders = (overlay) => {
830
- if (doc === undefined)
831
- return;
832
- if (isPlatform('android')) {
833
- /**
834
- * Once the animation is complete, this attribute will be removed.
835
- * This is done at the end of the `present` method.
836
- */
837
- overlay.setAttribute('aria-hidden', 'true');
838
- }
839
- };
840
- /**
841
- * Ensure that underlying overlays have aria-hidden if necessary so that screen readers
842
- * cannot move focus to these elements. Note that we cannot rely on focus/focusin/focusout
843
- * events here because those events do not fire when the screen readers moves to a non-focusable
844
- * element such as text.
845
- * Without this logic screen readers would be able to move focus outside of the top focus-trapped overlay.
846
- *
847
- * @param newTopMostOverlay - The overlay that is being presented. Since the overlay has not been
848
- * fully presented yet at the time this function is called it will not be included in the getPresentedOverlays result.
849
- */
850
- const hideUnderlyingOverlaysFromScreenReaders = (newTopMostOverlay) => {
851
- var _a;
852
- if (doc === undefined)
853
- return;
854
- const overlays = getPresentedOverlays(doc);
855
- for (let i = overlays.length - 1; i >= 0; i--) {
856
- const presentedOverlay = overlays[i];
857
- const nextPresentedOverlay = (_a = overlays[i + 1]) !== null && _a !== void 0 ? _a : newTopMostOverlay;
858
- /**
859
- * If next overlay has aria-hidden then all remaining overlays will have it too.
860
- * Or, if the next overlay is a Toast that does not have aria-hidden then current overlay
861
- * should not have aria-hidden either so focus can remain in the current overlay.
862
- */
863
- if (nextPresentedOverlay.hasAttribute('aria-hidden') || nextPresentedOverlay.tagName !== 'ION-TOAST') {
864
- presentedOverlay.setAttribute('aria-hidden', 'true');
865
- }
866
- }
867
- };
868
- /**
869
- * When dismissing an overlay we need to reveal the new top-most overlay to screen readers.
870
- * If the top-most overlay is a Toast we potentially need to reveal more overlays since
871
- * focus is never automatically moved to the Toast.
872
- */
873
- const revealOverlaysToScreenReaders = () => {
874
- if (doc === undefined)
875
- return;
876
- const overlays = getPresentedOverlays(doc);
877
- for (let i = overlays.length - 1; i >= 0; i--) {
878
- const currentOverlay = overlays[i];
879
- /**
880
- * If the current we are looking at is a Toast then we can remove aria-hidden.
881
- * However, we potentially need to keep looking at the overlay stack because there
882
- * could be more Toasts underneath. Additionally, we need to unhide the closest non-Toast
883
- * overlay too so focus can move there since focus is never automatically moved to the Toast.
884
- */
885
- currentOverlay.removeAttribute('aria-hidden');
886
- /**
887
- * If we found a non-Toast element then we can just remove aria-hidden and stop searching entirely
888
- * since this overlay should always receive focus. As a result, all underlying overlays should still
889
- * be hidden from screen readers.
890
- */
891
- if (currentOverlay.tagName !== 'ION-TOAST') {
892
- break;
893
- }
894
- }
895
- };
896
805
  export const FOCUS_TRAP_DISABLE_CLASS = 'ion-disable-focus-trap';