@ionic/core 8.0.0-beta.0 → 8.0.0-beta.2

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 (653) hide show
  1. package/components/action-sheet.js +3 -3
  2. package/components/alert.js +2 -2
  3. package/components/backdrop.js +1 -1
  4. package/components/button.js +2 -2
  5. package/components/buttons.js +3 -3
  6. package/components/checkbox.js +3 -3
  7. package/components/data.js +23 -38
  8. package/components/hardware-back-button.js +3 -3
  9. package/components/helpers.js +1 -8
  10. package/components/input-shims.js +8 -1
  11. package/components/input.utils.js +12 -0
  12. package/components/ion-app.js +4 -4
  13. package/components/ion-avatar.js +1 -1
  14. package/components/ion-back-button.js +2 -2
  15. package/components/ion-badge.js +2 -2
  16. package/components/ion-breadcrumb.js +2 -2
  17. package/components/ion-breadcrumbs.js +2 -2
  18. package/components/ion-card-content.js +1 -1
  19. package/components/ion-card-header.js +2 -2
  20. package/components/ion-card-subtitle.js +2 -2
  21. package/components/ion-card-title.js +2 -2
  22. package/components/ion-card.js +1 -1
  23. package/components/ion-chip.js +2 -2
  24. package/components/ion-col.js +2 -2
  25. package/components/ion-content.js +3 -3
  26. package/components/ion-datetime-button.js +11 -10
  27. package/components/ion-datetime.js +69 -7
  28. package/components/ion-fab-button.js +2 -2
  29. package/components/ion-fab-list.js +2 -2
  30. package/components/ion-fab.js +2 -2
  31. package/components/ion-footer.js +2 -2
  32. package/components/ion-grid.js +2 -2
  33. package/components/ion-header.js +2 -2
  34. package/components/ion-img.js +1 -1
  35. package/components/ion-infinite-scroll-content.js +2 -2
  36. package/components/ion-infinite-scroll.js +1 -1
  37. package/components/ion-input.js +6 -6
  38. package/components/ion-item-divider.js +3 -3
  39. package/components/ion-item-group.js +1 -1
  40. package/components/ion-item-option.js +2 -2
  41. package/components/ion-item-options.js +1 -1
  42. package/components/ion-item-sliding.js +1 -1
  43. package/components/ion-loading.js +2 -2
  44. package/components/ion-menu-button.js +2 -2
  45. package/components/ion-menu-toggle.js +2 -2
  46. package/components/ion-menu.js +7 -28
  47. package/components/ion-modal.js +37 -5
  48. package/components/ion-nav-link.js +1 -1
  49. package/components/ion-nav.js +1 -1
  50. package/components/ion-note.js +43 -1
  51. package/components/ion-picker-legacy.js +2 -2
  52. package/components/ion-progress-bar.js +1 -1
  53. package/components/ion-range.js +129 -24
  54. package/components/ion-refresher-content.js +1 -1
  55. package/components/ion-refresher.js +1 -1
  56. package/components/ion-reorder-group.js +1 -1
  57. package/components/ion-reorder.js +1 -1
  58. package/components/ion-router-link.js +2 -2
  59. package/components/ion-router-outlet.js +1 -1
  60. package/components/ion-row.js +1 -1
  61. package/components/ion-searchbar.js +34 -5
  62. package/components/ion-segment-button.js +3 -3
  63. package/components/ion-segment.js +2 -2
  64. package/components/ion-select-option.js +1 -1
  65. package/components/ion-select.js +23 -29
  66. package/components/ion-skeleton-text.js +2 -2
  67. package/components/ion-split-pane.js +2 -2
  68. package/components/ion-tab-bar.js +2 -2
  69. package/components/ion-tab-button.js +2 -2
  70. package/components/ion-tab.js +2 -2
  71. package/components/ion-tabs.js +1 -1
  72. package/components/ion-text.js +2 -2
  73. package/components/ion-textarea.js +5 -5
  74. package/components/ion-thumbnail.js +1 -1
  75. package/components/ion-title.js +2 -2
  76. package/components/ion-toast.js +2 -2
  77. package/components/ion-toggle.js +3 -3
  78. package/components/ion-toolbar.js +2 -2
  79. package/components/item.js +30 -97
  80. package/components/label.js +5 -5
  81. package/components/list-header.js +2 -2
  82. package/components/list.js +1 -1
  83. package/components/overlays.js +140 -55
  84. package/components/picker-column-option.js +2 -2
  85. package/components/picker-column.js +20 -5
  86. package/components/picker-column2.js +2 -2
  87. package/components/picker.js +2 -2
  88. package/components/popover.js +4 -4
  89. package/components/radio-group.js +1 -1
  90. package/components/radio.js +3 -3
  91. package/components/ripple-effect.js +1 -1
  92. package/components/select-popover.js +13 -19
  93. package/components/spinner.js +1 -1
  94. package/dist/cjs/{animation-4ad55058.js → animation-3e7bb91e.js} +1 -1
  95. package/dist/cjs/{app-globals-92ad1b3d.js → app-globals-e132c781.js} +1 -1
  96. package/dist/cjs/{button-active-8f6a8e77.js → button-active-60ecf64d.js} +1 -1
  97. package/dist/cjs/{data-e2bf21de.js → data-21dc0f81.js} +22 -39
  98. package/dist/cjs/{framework-delegate-53817ef1.js → framework-delegate-0499d444.js} +1 -1
  99. package/dist/cjs/{hardware-back-button-2696acaf.js → hardware-back-button-1c67a5a2.js} +5 -5
  100. package/dist/cjs/{helpers-b71ca811.js → helpers-668b3d95.js} +1 -8
  101. package/dist/cjs/{index-7574e3d2.js → index-275cc12e.js} +1 -1
  102. package/dist/cjs/{index-0ffe376d.js → index-2d21d526.js} +443 -14
  103. package/dist/cjs/{index-16fc2c94.js → index-ba7ba0af.js} +4 -4
  104. package/dist/cjs/{index-347883f6.js → index-c49cb371.js} +1 -1
  105. package/dist/cjs/{index-88b3bd6f.js → index-e4b6c97e.js} +4 -4
  106. package/dist/cjs/index.cjs.js +11 -11
  107. package/dist/cjs/{input-shims-37843ce5.js → input-shims-b419f083.js} +10 -3
  108. package/dist/cjs/{input.utils-5175aea1.js → input.utils-32c0a14a.js} +13 -1
  109. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  110. package/dist/cjs/ion-action-sheet.cjs.entry.js +11 -11
  111. package/dist/cjs/ion-alert.cjs.entry.js +10 -10
  112. package/dist/cjs/ion-app_8.cjs.entry.js +29 -29
  113. package/dist/cjs/ion-avatar_3.cjs.entry.js +6 -6
  114. package/dist/cjs/ion-back-button.cjs.entry.js +5 -5
  115. package/dist/cjs/ion-backdrop.cjs.entry.js +3 -3
  116. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +7 -7
  117. package/dist/cjs/ion-button_2.cjs.entry.js +5 -5
  118. package/dist/cjs/ion-card_5.cjs.entry.js +11 -11
  119. package/dist/cjs/ion-checkbox.cjs.entry.js +6 -6
  120. package/dist/cjs/ion-chip.cjs.entry.js +4 -4
  121. package/dist/cjs/ion-col_3.cjs.entry.js +7 -7
  122. package/dist/cjs/ion-datetime-button.cjs.entry.js +14 -13
  123. package/dist/cjs/ion-datetime_3.cjs.entry.js +77 -18
  124. package/dist/cjs/ion-fab_3.cjs.entry.js +9 -9
  125. package/dist/cjs/ion-img.cjs.entry.js +4 -4
  126. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +7 -7
  127. package/dist/cjs/ion-input.cjs.entry.js +10 -10
  128. package/dist/cjs/ion-item-option_3.cjs.entry.js +8 -8
  129. package/dist/cjs/ion-item_8.cjs.entry.js +42 -97
  130. package/dist/cjs/ion-loading.cjs.entry.js +9 -9
  131. package/dist/cjs/ion-menu_3.cjs.entry.js +17 -38
  132. package/dist/cjs/ion-modal.cjs.entry.js +46 -14
  133. package/dist/cjs/ion-nav_2.cjs.entry.js +8 -8
  134. package/dist/cjs/ion-picker-column-option.cjs.entry.js +5 -5
  135. package/dist/cjs/ion-picker-column.cjs.entry.js +23 -8
  136. package/dist/cjs/ion-picker.cjs.entry.js +4 -4
  137. package/dist/cjs/ion-popover.cjs.entry.js +11 -11
  138. package/dist/cjs/ion-progress-bar.cjs.entry.js +4 -4
  139. package/dist/cjs/ion-radio_2.cjs.entry.js +7 -7
  140. package/dist/cjs/ion-range.cjs.entry.js +133 -28
  141. package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -7
  142. package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -6
  143. package/dist/cjs/ion-ripple-effect.cjs.entry.js +3 -3
  144. package/dist/cjs/ion-route_4.cjs.entry.js +5 -5
  145. package/dist/cjs/ion-searchbar.cjs.entry.js +31 -7
  146. package/dist/cjs/ion-segment_2.cjs.entry.js +8 -8
  147. package/dist/cjs/ion-select_3.cjs.entry.js +13 -13
  148. package/dist/cjs/ion-spinner.cjs.entry.js +3 -3
  149. package/dist/cjs/ion-split-pane.cjs.entry.js +4 -4
  150. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +7 -7
  151. package/dist/cjs/ion-tab_2.cjs.entry.js +6 -6
  152. package/dist/cjs/ion-text.cjs.entry.js +4 -4
  153. package/dist/cjs/ion-textarea.cjs.entry.js +9 -9
  154. package/dist/cjs/ion-toast.cjs.entry.js +9 -9
  155. package/dist/cjs/ion-toggle.cjs.entry.js +6 -6
  156. package/dist/cjs/{ionic-global-59a10130.js → ionic-global-5762eca9.js} +1 -1
  157. package/dist/cjs/ionic.cjs.js +28 -5
  158. package/dist/cjs/{ios.transition-b102ee38.js → ios.transition-3e119901.js} +4 -4
  159. package/dist/cjs/loader.cjs.js +4 -4
  160. package/dist/cjs/{md.transition-a5454240.js → md.transition-c1392f92.js} +4 -4
  161. package/dist/cjs/{notch-controller-8e0ae870.js → notch-controller-08a24f39.js} +1 -1
  162. package/dist/cjs/{overlays-6b7d156b.js → overlays-44b8d0e0.js} +142 -56
  163. package/dist/cjs/{status-tap-b60dcbd8.js → status-tap-32430b3e.js} +3 -3
  164. package/dist/cjs/{swipe-back-72c5c8b7.js → swipe-back-dc4dbb65.js} +1 -1
  165. package/dist/collection/collection-manifest.json +1 -1
  166. package/dist/collection/components/action-sheet/action-sheet.js +3 -3
  167. package/dist/collection/components/alert/alert.js +2 -2
  168. package/dist/collection/components/app/app.js +4 -4
  169. package/dist/collection/components/avatar/avatar.js +1 -1
  170. package/dist/collection/components/back-button/back-button.js +2 -2
  171. package/dist/collection/components/backdrop/backdrop.js +1 -1
  172. package/dist/collection/components/badge/badge.js +2 -2
  173. package/dist/collection/components/breadcrumb/breadcrumb.js +2 -2
  174. package/dist/collection/components/breadcrumbs/breadcrumbs.js +2 -2
  175. package/dist/collection/components/button/button.js +2 -2
  176. package/dist/collection/components/buttons/buttons.js +2 -2
  177. package/dist/collection/components/card/card.js +1 -1
  178. package/dist/collection/components/card-content/card-content.js +1 -1
  179. package/dist/collection/components/card-header/card-header.js +2 -2
  180. package/dist/collection/components/card-subtitle/card-subtitle.js +2 -2
  181. package/dist/collection/components/card-title/card-title.js +2 -2
  182. package/dist/collection/components/checkbox/checkbox.js +3 -3
  183. package/dist/collection/components/checkbox/test/checkbox.spec.js +12 -0
  184. package/dist/collection/components/chip/chip.js +2 -2
  185. package/dist/collection/components/col/col.js +2 -2
  186. package/dist/collection/components/content/content.js +3 -3
  187. package/dist/collection/components/datetime/datetime.js +50 -7
  188. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +80 -1
  189. package/dist/collection/components/datetime/test/format.spec.js +65 -15
  190. package/dist/collection/components/datetime/utils/format.js +24 -37
  191. package/dist/collection/components/datetime/utils/validate.js +45 -0
  192. package/dist/collection/components/datetime-button/datetime-button.js +11 -10
  193. package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +65 -0
  194. package/dist/collection/components/fab/fab.js +2 -2
  195. package/dist/collection/components/fab-button/fab-button.js +2 -2
  196. package/dist/collection/components/fab-list/fab-list.js +2 -2
  197. package/dist/collection/components/footer/footer.js +2 -2
  198. package/dist/collection/components/grid/grid.js +2 -2
  199. package/dist/collection/components/header/header.js +2 -2
  200. package/dist/collection/components/img/img.js +1 -1
  201. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  202. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  203. package/dist/collection/components/input/input.ios.css +2 -0
  204. package/dist/collection/components/input/input.js +3 -3
  205. package/dist/collection/components/input/input.md.css +4 -2
  206. package/dist/collection/components/input/test/highlight/input.e2e.js +144 -0
  207. package/dist/collection/components/input/test/item/input.e2e.js +21 -0
  208. package/dist/collection/components/item/item.ios.css +6 -198
  209. package/dist/collection/components/item/item.js +22 -170
  210. package/dist/collection/components/item/item.md.css +12 -375
  211. package/dist/collection/components/item/test/basic/item.e2e.js +0 -5
  212. package/dist/collection/components/item/test/item.spec.js +1 -1
  213. package/dist/collection/components/item-divider/item-divider.js +2 -2
  214. package/dist/collection/components/item-divider/item-divider.md.css +4 -14
  215. package/dist/collection/components/item-group/item-group.js +1 -1
  216. package/dist/collection/components/item-option/item-option.js +2 -2
  217. package/dist/collection/components/item-options/item-options.js +1 -1
  218. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  219. package/dist/collection/components/label/label.ios.css +0 -5
  220. package/dist/collection/components/label/label.js +2 -2
  221. package/dist/collection/components/label/label.md.css +0 -75
  222. package/dist/collection/components/list/list.js +1 -1
  223. package/dist/collection/components/list-header/list-header.js +2 -2
  224. package/dist/collection/components/loading/loading.js +2 -2
  225. package/dist/collection/components/menu/menu.js +16 -30
  226. package/dist/collection/components/menu-button/menu-button.js +2 -2
  227. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  228. package/dist/collection/components/modal/modal.js +37 -5
  229. package/dist/collection/components/modal/test/modal-attributes.spec.js +32 -0
  230. package/dist/collection/components/nav/nav.js +1 -1
  231. package/dist/collection/components/nav-link/nav-link.js +1 -1
  232. package/dist/collection/components/note/note.js +2 -2
  233. package/dist/collection/components/picker/picker.js +2 -2
  234. package/dist/collection/components/picker-column/picker-column.js +20 -5
  235. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  236. package/dist/collection/components/picker-legacy/picker.js +2 -2
  237. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  238. package/dist/collection/components/popover/popover.js +5 -4
  239. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  240. package/dist/collection/components/radio/radio.js +3 -3
  241. package/dist/collection/components/radio-group/radio-group.js +1 -1
  242. package/dist/collection/components/range/range.js +129 -24
  243. package/dist/collection/components/range/test/range-events.e2e.js +27 -0
  244. package/dist/collection/components/refresher/refresher.js +1 -1
  245. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  246. package/dist/collection/components/reorder/reorder.js +1 -1
  247. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  248. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  249. package/dist/collection/components/router-link/router-link.js +2 -2
  250. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  251. package/dist/collection/components/row/row.js +1 -1
  252. package/dist/collection/components/searchbar/searchbar.js +84 -5
  253. package/dist/collection/components/searchbar/test/searchbar.spec.js +20 -2
  254. package/dist/collection/components/segment/segment.js +2 -2
  255. package/dist/collection/components/segment-button/segment-button.js +3 -3
  256. package/dist/collection/components/select/select.ios.css +5 -0
  257. package/dist/collection/components/select/select.js +2 -2
  258. package/dist/collection/components/select/select.md.css +4 -27
  259. package/dist/collection/components/select/test/highlight/select.e2e.js +88 -4
  260. package/dist/collection/components/select-option/select-option.js +1 -1
  261. package/dist/collection/components/select-popover/select-popover.js +1 -1
  262. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  263. package/dist/collection/components/spinner/spinner.js +1 -1
  264. package/dist/collection/components/split-pane/split-pane.js +2 -2
  265. package/dist/collection/components/tab/tab.js +2 -2
  266. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  267. package/dist/collection/components/tab-button/tab-button.js +2 -2
  268. package/dist/collection/components/tabs/tabs.js +1 -1
  269. package/dist/collection/components/text/text.js +2 -2
  270. package/dist/collection/components/textarea/test/highlight/textarea.e2e.js +144 -0
  271. package/dist/collection/components/textarea/test/item/textarea.e2e.js +21 -0
  272. package/dist/collection/components/textarea/textarea.ios.css +2 -20
  273. package/dist/collection/components/textarea/textarea.js +2 -2
  274. package/dist/collection/components/textarea/textarea.md.css +4 -15
  275. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  276. package/dist/collection/components/title/title.js +2 -2
  277. package/dist/collection/components/toast/toast.js +2 -2
  278. package/dist/collection/components/toggle/toggle.js +3 -3
  279. package/dist/collection/components/toolbar/toolbar.js +2 -2
  280. package/dist/collection/utils/focus-trap.js +78 -0
  281. package/dist/collection/utils/forms/index.js +0 -1
  282. package/dist/collection/utils/hardware-back-button.js +2 -2
  283. package/dist/collection/utils/helpers.js +1 -8
  284. package/dist/collection/utils/input-shims/input-shims.js +8 -1
  285. package/dist/collection/utils/overlays.js +64 -53
  286. package/dist/collection/utils/slot-mutation-controller.js +12 -0
  287. package/dist/collection/utils/test/overlays/overlays.spec.js +53 -0
  288. package/dist/docs.json +158 -189
  289. package/dist/esm/{animation-a4acf150.js → animation-9a23ed8d.js} +1 -1
  290. package/dist/esm/{app-globals-5cf6195b.js → app-globals-80842d68.js} +1 -1
  291. package/dist/esm/{button-active-4407b98c.js → button-active-c6e18fac.js} +1 -1
  292. package/dist/esm/{data-691286f1.js → data-ae11fd43.js} +23 -38
  293. package/dist/esm/{framework-delegate-1eb3236c.js → framework-delegate-3fd96df8.js} +1 -1
  294. package/dist/esm/{hardware-back-button-b410a047.js → hardware-back-button-fb295e3a.js} +5 -5
  295. package/dist/esm/{helpers-ae74b3c9.js → helpers-f51cf76f.js} +1 -8
  296. package/dist/esm/{index-1f563746.js → index-1262064c.js} +1 -1
  297. package/dist/esm/{index-4c30cddd.js → index-5d6a0317.js} +443 -15
  298. package/dist/esm/{index-1eff8599.js → index-6da05eef.js} +4 -4
  299. package/dist/esm/{index-66871a1d.js → index-86688780.js} +1 -1
  300. package/dist/esm/{index-8758824c.js → index-9d7e5d3e.js} +4 -4
  301. package/dist/esm/index.js +11 -11
  302. package/dist/esm/{input-shims-91e6634c.js → input-shims-2a4ad5a1.js} +10 -3
  303. package/dist/esm/{input.utils-482fc893.js → input.utils-d2dee48e.js} +13 -1
  304. package/dist/esm/ion-accordion_2.entry.js +3 -3
  305. package/dist/esm/ion-action-sheet.entry.js +11 -11
  306. package/dist/esm/ion-alert.entry.js +10 -10
  307. package/dist/esm/ion-app_8.entry.js +29 -29
  308. package/dist/esm/ion-avatar_3.entry.js +6 -6
  309. package/dist/esm/ion-back-button.entry.js +5 -5
  310. package/dist/esm/ion-backdrop.entry.js +3 -3
  311. package/dist/esm/ion-breadcrumb_2.entry.js +7 -7
  312. package/dist/esm/ion-button_2.entry.js +5 -5
  313. package/dist/esm/ion-card_5.entry.js +11 -11
  314. package/dist/esm/ion-checkbox.entry.js +6 -6
  315. package/dist/esm/ion-chip.entry.js +4 -4
  316. package/dist/esm/ion-col_3.entry.js +7 -7
  317. package/dist/esm/ion-datetime-button.entry.js +14 -13
  318. package/dist/esm/ion-datetime_3.entry.js +77 -18
  319. package/dist/esm/ion-fab_3.entry.js +9 -9
  320. package/dist/esm/ion-img.entry.js +4 -4
  321. package/dist/esm/ion-infinite-scroll_2.entry.js +7 -7
  322. package/dist/esm/ion-input.entry.js +10 -10
  323. package/dist/esm/ion-item-option_3.entry.js +8 -8
  324. package/dist/esm/ion-item_8.entry.js +42 -97
  325. package/dist/esm/ion-loading.entry.js +9 -9
  326. package/dist/esm/ion-menu_3.entry.js +17 -38
  327. package/dist/esm/ion-modal.entry.js +46 -14
  328. package/dist/esm/ion-nav_2.entry.js +8 -8
  329. package/dist/esm/ion-picker-column-option.entry.js +5 -5
  330. package/dist/esm/ion-picker-column.entry.js +23 -8
  331. package/dist/esm/ion-picker.entry.js +4 -4
  332. package/dist/esm/ion-popover.entry.js +11 -11
  333. package/dist/esm/ion-progress-bar.entry.js +4 -4
  334. package/dist/esm/ion-radio_2.entry.js +7 -7
  335. package/dist/esm/ion-range.entry.js +133 -28
  336. package/dist/esm/ion-refresher_2.entry.js +7 -7
  337. package/dist/esm/ion-reorder_2.entry.js +6 -6
  338. package/dist/esm/ion-ripple-effect.entry.js +3 -3
  339. package/dist/esm/ion-route_4.entry.js +5 -5
  340. package/dist/esm/ion-searchbar.entry.js +31 -7
  341. package/dist/esm/ion-segment_2.entry.js +8 -8
  342. package/dist/esm/ion-select_3.entry.js +13 -13
  343. package/dist/esm/ion-spinner.entry.js +3 -3
  344. package/dist/esm/ion-split-pane.entry.js +4 -4
  345. package/dist/esm/ion-tab-bar_2.entry.js +7 -7
  346. package/dist/esm/ion-tab_2.entry.js +6 -6
  347. package/dist/esm/ion-text.entry.js +4 -4
  348. package/dist/esm/ion-textarea.entry.js +9 -9
  349. package/dist/esm/ion-toast.entry.js +9 -9
  350. package/dist/esm/ion-toggle.entry.js +6 -6
  351. package/dist/esm/{ionic-global-ad9a1810.js → ionic-global-a589c12c.js} +1 -1
  352. package/dist/esm/ionic.js +29 -6
  353. package/dist/esm/{ios.transition-189b73b7.js → ios.transition-fbde96b0.js} +4 -4
  354. package/dist/esm/loader.js +5 -5
  355. package/dist/esm/{md.transition-c9761eef.js → md.transition-76e0020b.js} +4 -4
  356. package/dist/esm/{notch-controller-18bf9f76.js → notch-controller-00572cf8.js} +1 -1
  357. package/dist/esm/{overlays-c69d2a07.js → overlays-b1ac1c63.js} +142 -57
  358. package/dist/esm/{status-tap-1d638ee6.js → status-tap-84b41f36.js} +3 -3
  359. package/dist/esm/{swipe-back-348f1971.js → swipe-back-f2bec781.js} +1 -1
  360. package/dist/esm-es5/{animation-a4acf150.js → animation-9a23ed8d.js} +1 -1
  361. package/dist/esm-es5/app-globals-80842d68.js +4 -0
  362. package/dist/esm-es5/{button-active-4407b98c.js → button-active-c6e18fac.js} +1 -1
  363. package/dist/esm-es5/data-ae11fd43.js +4 -0
  364. package/dist/esm-es5/{framework-delegate-1eb3236c.js → framework-delegate-3fd96df8.js} +1 -1
  365. package/dist/esm-es5/hardware-back-button-fb295e3a.js +4 -0
  366. package/dist/esm-es5/helpers-f51cf76f.js +4 -0
  367. package/dist/esm-es5/index-1262064c.js +4 -0
  368. package/dist/esm-es5/index-5d6a0317.js +5 -0
  369. package/dist/esm-es5/{index-1eff8599.js → index-6da05eef.js} +1 -1
  370. package/dist/esm-es5/{index-66871a1d.js → index-86688780.js} +1 -1
  371. package/dist/esm-es5/{index-8758824c.js → index-9d7e5d3e.js} +1 -1
  372. package/dist/esm-es5/index.js +1 -1
  373. package/dist/esm-es5/{input-shims-91e6634c.js → input-shims-2a4ad5a1.js} +1 -1
  374. package/dist/esm-es5/input.utils-d2dee48e.js +4 -0
  375. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  376. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  377. package/dist/esm-es5/ion-alert.entry.js +1 -1
  378. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  379. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  380. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  381. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  382. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  383. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  384. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  385. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  386. package/dist/esm-es5/ion-chip.entry.js +1 -1
  387. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  388. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  389. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  390. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  391. package/dist/esm-es5/ion-img.entry.js +1 -1
  392. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  393. package/dist/esm-es5/ion-input.entry.js +1 -1
  394. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  395. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  396. package/dist/esm-es5/ion-loading.entry.js +1 -1
  397. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  398. package/dist/esm-es5/ion-modal.entry.js +1 -1
  399. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  400. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  401. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  402. package/dist/esm-es5/ion-picker.entry.js +1 -1
  403. package/dist/esm-es5/ion-popover.entry.js +1 -1
  404. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  405. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  406. package/dist/esm-es5/ion-range.entry.js +1 -1
  407. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  408. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  409. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  410. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  411. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  412. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  413. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  414. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  415. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  416. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  417. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  418. package/dist/esm-es5/ion-text.entry.js +1 -1
  419. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  420. package/dist/esm-es5/ion-toast.entry.js +1 -1
  421. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  422. package/dist/esm-es5/{ionic-global-ad9a1810.js → ionic-global-a589c12c.js} +1 -1
  423. package/dist/esm-es5/ionic.js +1 -1
  424. package/dist/esm-es5/{ios.transition-189b73b7.js → ios.transition-fbde96b0.js} +1 -1
  425. package/dist/esm-es5/loader.js +1 -1
  426. package/dist/esm-es5/{md.transition-c9761eef.js → md.transition-76e0020b.js} +1 -1
  427. package/dist/esm-es5/{notch-controller-18bf9f76.js → notch-controller-00572cf8.js} +1 -1
  428. package/dist/esm-es5/overlays-b1ac1c63.js +4 -0
  429. package/dist/esm-es5/{status-tap-1d638ee6.js → status-tap-84b41f36.js} +1 -1
  430. package/dist/esm-es5/{swipe-back-348f1971.js → swipe-back-f2bec781.js} +1 -1
  431. package/dist/html.html-data.json +24 -26
  432. package/dist/ionic/index.esm.js +1 -1
  433. package/dist/ionic/ionic.esm.js +1 -1
  434. package/dist/ionic/ionic.js +1 -1
  435. package/dist/ionic/{p-174856b4.system.js → p-01171ead.system.js} +1 -1
  436. package/dist/ionic/{p-5d7e32ce.js → p-031c5621.js} +1 -1
  437. package/dist/ionic/{p-993da5df.entry.js → p-03f3ebd2.entry.js} +1 -1
  438. package/dist/ionic/p-04f9ce05.system.js +4 -0
  439. package/dist/ionic/p-05f10e5f.entry.js +4 -0
  440. package/dist/ionic/{p-34d0f143.system.entry.js → p-063c093d.system.entry.js} +1 -1
  441. package/dist/ionic/p-06e951a9.entry.js +4 -0
  442. package/dist/ionic/{p-1d545773.entry.js → p-070cf7c3.entry.js} +1 -1
  443. package/dist/ionic/{p-3c47c5c8.system.entry.js → p-0afaf65b.system.entry.js} +1 -1
  444. package/dist/ionic/p-0da58e53.entry.js +4 -0
  445. package/dist/ionic/p-144ae947.js +4 -0
  446. package/dist/ionic/{p-c6dbc089.system.entry.js → p-15e2ff5f.system.entry.js} +1 -1
  447. package/dist/ionic/{p-9d795c4b.entry.js → p-19243ae6.entry.js} +1 -1
  448. package/dist/ionic/p-1acaf641.entry.js +4 -0
  449. package/dist/ionic/{p-892e2567.system.entry.js → p-1d1394da.system.entry.js} +1 -1
  450. package/dist/ionic/p-1e5c0c49.js +4 -0
  451. package/dist/ionic/{p-6e14d3ca.system.entry.js → p-2028668d.system.entry.js} +1 -1
  452. package/dist/ionic/{p-f7d802e1.entry.js → p-2070f8d8.entry.js} +1 -1
  453. package/dist/ionic/{p-3d77b300.system.entry.js → p-219c17cf.system.entry.js} +1 -1
  454. package/dist/ionic/p-21e88629.entry.js +4 -0
  455. package/dist/ionic/{p-cefbb7b7.entry.js → p-234dc736.entry.js} +1 -1
  456. package/dist/ionic/{p-5e70f800.system.entry.js → p-237b1791.system.entry.js} +1 -1
  457. package/dist/ionic/{p-ceceac26.js → p-239906f1.js} +1 -1
  458. package/dist/ionic/{p-1a4db355.system.entry.js → p-25648922.system.entry.js} +1 -1
  459. package/dist/ionic/{p-d84c9fc4.entry.js → p-29ecf879.entry.js} +1 -1
  460. package/dist/ionic/{p-c9e21694.system.entry.js → p-2e2635b4.system.entry.js} +1 -1
  461. package/dist/ionic/p-2f53f47a.entry.js +4 -0
  462. package/dist/ionic/{p-98e6b3b8.system.js → p-30dfa360.system.js} +1 -1
  463. package/dist/ionic/p-314ae72a.js +4 -0
  464. package/dist/ionic/{p-2d7624d4.system.js → p-33e39575.system.js} +1 -1
  465. package/dist/ionic/p-373e757d.entry.js +4 -0
  466. package/dist/ionic/{p-8a50f8d6.system.js → p-3944820a.system.js} +1 -1
  467. package/dist/ionic/p-39483fc9.js +4 -0
  468. package/dist/ionic/{p-e311af42.entry.js → p-39860681.entry.js} +1 -1
  469. package/dist/ionic/{p-e1819aee.js → p-3a572692.js} +1 -1
  470. package/dist/ionic/p-42d9f81e.entry.js +4 -0
  471. package/dist/ionic/{p-dd7c79ce.system.entry.js → p-45a2b1ee.system.entry.js} +1 -1
  472. package/dist/ionic/{p-15708968.js → p-46a4e4e8.js} +1 -1
  473. package/dist/ionic/{p-6dbea874.system.entry.js → p-47974116.system.entry.js} +1 -1
  474. package/dist/ionic/p-489eb5c6.js +4 -0
  475. package/dist/ionic/{p-2b3544ad.entry.js → p-48fef2f1.entry.js} +1 -1
  476. package/dist/ionic/p-493bce1f.entry.js +4 -0
  477. package/dist/ionic/p-4997d7dc.system.js +4 -0
  478. package/dist/ionic/{p-cb944b1a.system.js → p-49a205d0.system.js} +1 -1
  479. package/dist/ionic/{p-c880c809.js → p-4ba6d7d1.js} +1 -1
  480. package/dist/ionic/p-4d6ec139.entry.js +4 -0
  481. package/dist/ionic/{p-8d4d902b.js → p-4da2ae44.js} +1 -1
  482. package/dist/ionic/{p-5d64e680.entry.js → p-5054b3db.entry.js} +1 -1
  483. package/dist/ionic/{p-3c51cf97.system.entry.js → p-50d19fc7.system.entry.js} +1 -1
  484. package/dist/ionic/p-513abaf6.system.entry.js +4 -0
  485. package/dist/ionic/p-517b76cb.entry.js +4 -0
  486. package/dist/ionic/{p-a6cc38d4.js → p-51b1a6be.js} +1 -1
  487. package/dist/ionic/p-53c592ec.system.js +4 -0
  488. package/dist/ionic/{p-12b55b00.system.entry.js → p-566818dd.system.entry.js} +1 -1
  489. package/dist/ionic/p-59e86adb.js +4 -0
  490. package/dist/ionic/{p-1e07fdb2.system.entry.js → p-5f9abba8.system.entry.js} +2 -2
  491. package/dist/ionic/{p-d8643420.system.entry.js → p-6042920d.system.entry.js} +2 -2
  492. package/dist/ionic/{p-9f84474d.entry.js → p-65374504.entry.js} +1 -1
  493. package/dist/ionic/{p-df6a1571.entry.js → p-66596659.entry.js} +1 -1
  494. package/dist/ionic/p-667290b0.system.js +4 -0
  495. package/dist/ionic/{p-5d530ae5.entry.js → p-66e50777.entry.js} +1 -1
  496. package/dist/ionic/{p-4a8f173c.system.js → p-67dbcd3b.system.js} +1 -1
  497. package/dist/ionic/{p-916a4e14.entry.js → p-68fbfcd5.entry.js} +1 -1
  498. package/dist/ionic/{p-eb9803e9.system.js → p-696db6f4.system.js} +1 -1
  499. package/dist/ionic/p-69df28fd.entry.js +4 -0
  500. package/dist/ionic/p-6d0e7669.system.entry.js +4 -0
  501. package/dist/ionic/p-6d1f5de9.system.entry.js +4 -0
  502. package/dist/ionic/{p-4dfe0487.system.entry.js → p-6d75fbe8.system.entry.js} +1 -1
  503. package/dist/ionic/{p-174b0d50.system.entry.js → p-7162350a.system.entry.js} +1 -1
  504. package/dist/ionic/p-7200f2da.entry.js +4 -0
  505. package/dist/ionic/{p-b434ded7.system.entry.js → p-739f8b95.system.entry.js} +1 -1
  506. package/dist/ionic/{p-415ccddd.entry.js → p-75addf49.entry.js} +1 -1
  507. package/dist/ionic/{p-de55ec45.js → p-78b3da77.js} +1 -1
  508. package/dist/ionic/p-7c7e495d.system.js +4 -0
  509. package/dist/ionic/{p-8ab308e9.js → p-7d4f6f18.js} +1 -1
  510. package/dist/ionic/{p-5797981d.system.entry.js → p-824d44c5.system.entry.js} +1 -1
  511. package/dist/ionic/{p-d7dc29c5.entry.js → p-8c0b08db.entry.js} +1 -1
  512. package/dist/ionic/p-8dfe436d.system.js +4 -0
  513. package/dist/ionic/{p-0dca0eee.system.entry.js → p-91567c90.system.entry.js} +1 -1
  514. package/dist/ionic/{p-00a762c9.entry.js → p-95648db9.entry.js} +1 -1
  515. package/dist/ionic/{p-ef9736b9.entry.js → p-9c970454.entry.js} +1 -1
  516. package/dist/ionic/{p-e46adaf1.system.entry.js → p-9ddbed2f.system.entry.js} +1 -1
  517. package/dist/ionic/{p-6525a8cd.system.js → p-9e3177a5.system.js} +1 -1
  518. package/dist/ionic/p-a03c993e.entry.js +4 -0
  519. package/dist/ionic/{p-d7c78a97.system.entry.js → p-a37d4fe9.system.entry.js} +1 -1
  520. package/dist/ionic/{p-973c7550.system.entry.js → p-a43fbe0a.system.entry.js} +1 -1
  521. package/dist/ionic/{p-de0a7606.system.entry.js → p-a5c33d6b.system.entry.js} +1 -1
  522. package/dist/ionic/p-a7f788ec.entry.js +4 -0
  523. package/dist/ionic/{p-5133c4a3.system.entry.js → p-acd64713.system.entry.js} +1 -1
  524. package/dist/ionic/{p-89ca4c4b.system.js → p-af9256a0.system.js} +1 -1
  525. package/dist/ionic/p-afe27188.system.js +4 -0
  526. package/dist/ionic/{p-acf70e64.system.entry.js → p-b0850af6.system.entry.js} +1 -1
  527. package/dist/ionic/p-b0d35de4.system.js +4 -0
  528. package/dist/ionic/p-b996756b.entry.js +4 -0
  529. package/dist/ionic/p-ba9120fe.system.entry.js +4 -0
  530. package/dist/ionic/p-bb78b64e.entry.js +4 -0
  531. package/dist/ionic/{p-80704be1.entry.js → p-bbc4f653.entry.js} +1 -1
  532. package/dist/ionic/p-c34d1515.js +4 -0
  533. package/dist/ionic/{p-97248203.system.entry.js → p-c4390f10.system.entry.js} +1 -1
  534. package/dist/ionic/p-c629d22b.system.js +5 -0
  535. package/dist/ionic/p-c834c535.system.entry.js +4 -0
  536. package/dist/ionic/{p-2dcf2ec2.system.entry.js → p-c8675b7b.system.entry.js} +1 -1
  537. package/dist/ionic/p-c962e9ea.entry.js +4 -0
  538. package/dist/ionic/p-cbb753d4.entry.js +4 -0
  539. package/dist/ionic/p-cc19ecba.system.entry.js +4 -0
  540. package/dist/ionic/{p-1ea88de9.system.js → p-ce36d285.system.js} +1 -1
  541. package/dist/ionic/{p-f7c3d736.system.entry.js → p-d09c9468.system.entry.js} +1 -1
  542. package/dist/ionic/p-d10bbab7.entry.js +4 -0
  543. package/dist/ionic/p-d268f7e2.system.entry.js +4 -0
  544. package/dist/ionic/{p-1df25966.entry.js → p-d3c1c23f.entry.js} +1 -1
  545. package/dist/ionic/{p-0a8a78db.system.entry.js → p-d4be0d81.system.entry.js} +1 -1
  546. package/dist/ionic/p-d5ef3a0a.entry.js +4 -0
  547. package/dist/ionic/p-d60342e3.js +4 -0
  548. package/dist/ionic/{p-8fe3c4ef.entry.js → p-d85eebc3.entry.js} +1 -1
  549. package/dist/ionic/{p-0612cdcc.system.entry.js → p-d9dfdbb5.system.entry.js} +1 -1
  550. package/dist/ionic/{p-385f66bc.entry.js → p-da5bbd4f.entry.js} +1 -1
  551. package/dist/ionic/p-dad515dc.js +4 -0
  552. package/dist/ionic/{p-ab427719.entry.js → p-de39f314.entry.js} +1 -1
  553. package/dist/ionic/{p-5f9fbad0.entry.js → p-de4c700f.entry.js} +1 -1
  554. package/dist/ionic/{p-19f6ac6c.system.js → p-e01ebeba.system.js} +1 -1
  555. package/dist/ionic/{p-1f79e54a.entry.js → p-e222fdd1.entry.js} +1 -1
  556. package/dist/ionic/{p-ef636601.entry.js → p-e5e492d8.entry.js} +1 -1
  557. package/dist/ionic/{p-fd783a38.system.entry.js → p-e9412fe7.system.entry.js} +1 -1
  558. package/dist/ionic/{p-16e06393.system.js → p-ea5173f9.system.js} +1 -1
  559. package/dist/ionic/{p-717c4b72.entry.js → p-eb546888.entry.js} +1 -1
  560. package/dist/ionic/{p-f0a7e80b.js → p-eee87ebb.js} +1 -1
  561. package/dist/ionic/p-f012e8f2.system.entry.js +4 -0
  562. package/dist/ionic/{p-c8d61b6c.system.entry.js → p-f15b0bbc.system.entry.js} +1 -1
  563. package/dist/ionic/{p-ec77b7ad.system.entry.js → p-f15f8140.system.entry.js} +1 -1
  564. package/dist/ionic/{p-31e02742.system.js → p-f3e8c505.system.js} +1 -1
  565. package/dist/ionic/{p-760dbd5e.js → p-f5cb9689.js} +1 -1
  566. package/dist/ionic/p-f687573e.system.js +4 -0
  567. package/dist/ionic/{p-3807cd45.system.entry.js → p-f6db2e96.system.entry.js} +2 -2
  568. package/dist/ionic/p-f8502e85.js +5 -0
  569. package/dist/ionic/{p-4bbc949f.system.entry.js → p-f8dfae89.system.entry.js} +1 -1
  570. package/dist/ionic/p-fcec3b7a.system.entry.js +4 -0
  571. package/dist/ionic/{p-b2d58604.system.entry.js → p-ff740d68.system.entry.js} +1 -1
  572. package/dist/ionic/p-ffaeba0a.system.entry.js +4 -0
  573. package/dist/types/components/datetime/datetime-interface.d.ts +10 -0
  574. package/dist/types/components/datetime/datetime.d.ts +9 -1
  575. package/dist/types/components/datetime/utils/format.d.ts +7 -13
  576. package/dist/types/components/datetime/utils/validate.d.ts +8 -0
  577. package/dist/types/components/item/item.d.ts +0 -32
  578. package/dist/types/components/menu/menu-interface.d.ts +1 -0
  579. package/dist/types/components/menu/menu.d.ts +2 -4
  580. package/dist/types/components/range/range.d.ts +29 -0
  581. package/dist/types/components/searchbar/searchbar.d.ts +38 -0
  582. package/dist/types/components.d.ts +38 -46
  583. package/dist/types/utils/focus-trap.d.ts +35 -0
  584. package/dist/types/utils/forms/index.d.ts +0 -1
  585. package/dist/types/utils/hardware-back-button.d.ts +1 -1
  586. package/dist/types/utils/helpers.d.ts +0 -1
  587. package/dist/types/utils/overlays.d.ts +0 -6
  588. package/hydrate/index.js +707 -448
  589. package/package.json +1 -1
  590. package/components/note.js +0 -48
  591. package/dist/collection/components/item/test/legacy/disabled/item.e2e.js +0 -14
  592. package/dist/collection/components/modal/test/a11y/modal.spec.js +0 -22
  593. package/dist/collection/utils/forms/form-controller.js +0 -61
  594. package/dist/esm-es5/app-globals-5cf6195b.js +0 -4
  595. package/dist/esm-es5/data-691286f1.js +0 -4
  596. package/dist/esm-es5/hardware-back-button-b410a047.js +0 -4
  597. package/dist/esm-es5/helpers-ae74b3c9.js +0 -4
  598. package/dist/esm-es5/index-1f563746.js +0 -4
  599. package/dist/esm-es5/index-4c30cddd.js +0 -5
  600. package/dist/esm-es5/input.utils-482fc893.js +0 -4
  601. package/dist/esm-es5/overlays-c69d2a07.js +0 -4
  602. package/dist/ionic/p-069388dd.system.js +0 -4
  603. package/dist/ionic/p-0b34d3a7.system.js +0 -4
  604. package/dist/ionic/p-0dfbbdbe.entry.js +0 -4
  605. package/dist/ionic/p-0f25a7bb.system.js +0 -4
  606. package/dist/ionic/p-0f81df5e.entry.js +0 -4
  607. package/dist/ionic/p-11bb459e.system.entry.js +0 -4
  608. package/dist/ionic/p-13e8ad2e.entry.js +0 -4
  609. package/dist/ionic/p-17082c91.system.js +0 -4
  610. package/dist/ionic/p-1deadb7f.system.js +0 -4
  611. package/dist/ionic/p-2c768965.entry.js +0 -4
  612. package/dist/ionic/p-3209217f.entry.js +0 -4
  613. package/dist/ionic/p-32fb7d95.entry.js +0 -4
  614. package/dist/ionic/p-446f3909.system.entry.js +0 -4
  615. package/dist/ionic/p-4b3a4938.entry.js +0 -4
  616. package/dist/ionic/p-4e7abe76.js +0 -4
  617. package/dist/ionic/p-5289aade.js +0 -4
  618. package/dist/ionic/p-5dbf7222.entry.js +0 -4
  619. package/dist/ionic/p-5eabaa80.js +0 -4
  620. package/dist/ionic/p-60a92a48.system.entry.js +0 -4
  621. package/dist/ionic/p-640fac4a.system.entry.js +0 -4
  622. package/dist/ionic/p-66e6860f.system.js +0 -4
  623. package/dist/ionic/p-6ad90d41.entry.js +0 -4
  624. package/dist/ionic/p-6aeb0272.entry.js +0 -4
  625. package/dist/ionic/p-6d659d62.entry.js +0 -4
  626. package/dist/ionic/p-7292add8.entry.js +0 -4
  627. package/dist/ionic/p-72fa96bf.system.js +0 -5
  628. package/dist/ionic/p-75861cd3.entry.js +0 -4
  629. package/dist/ionic/p-7e185a31.entry.js +0 -4
  630. package/dist/ionic/p-8b8b900d.entry.js +0 -4
  631. package/dist/ionic/p-90b3e3b0.system.entry.js +0 -4
  632. package/dist/ionic/p-93e79b55.js +0 -4
  633. package/dist/ionic/p-94f85e19.system.entry.js +0 -4
  634. package/dist/ionic/p-96107183.js +0 -4
  635. package/dist/ionic/p-986a47ee.system.entry.js +0 -4
  636. package/dist/ionic/p-9c93fdcd.js +0 -4
  637. package/dist/ionic/p-9d6f351e.js +0 -4
  638. package/dist/ionic/p-9e3b3f15.system.js +0 -4
  639. package/dist/ionic/p-9ecc1e42.entry.js +0 -4
  640. package/dist/ionic/p-bca27ea7.entry.js +0 -4
  641. package/dist/ionic/p-c68e75ea.system.js +0 -4
  642. package/dist/ionic/p-cd0ffc8c.entry.js +0 -4
  643. package/dist/ionic/p-d13689a6.entry.js +0 -4
  644. package/dist/ionic/p-d3f79a49.js +0 -4
  645. package/dist/ionic/p-d47a1a78.system.entry.js +0 -4
  646. package/dist/ionic/p-d9b6b588.entry.js +0 -4
  647. package/dist/ionic/p-df504a37.system.js +0 -4
  648. package/dist/ionic/p-e755046f.system.entry.js +0 -4
  649. package/dist/ionic/p-eb506d19.system.entry.js +0 -4
  650. package/dist/ionic/p-ed7a529f.js +0 -5
  651. package/dist/ionic/p-f2473724.js +0 -4
  652. package/dist/ionic/p-f7ccf8d9.entry.js +0 -4
  653. package/dist/types/utils/forms/form-controller.d.ts +0 -15
@@ -5,7 +5,7 @@ import { Host, h } from "@stencil/core";
5
5
  import { getIonMode } from "../../global/ionic-global";
6
6
  export class Thumbnail {
7
7
  render() {
8
- return (h(Host, { key: '68bac4e80f5d27131690fd20dfabff2618743206', class: getIonMode(this) }, h("slot", { key: '89f46a686288428391cdfaef3384824751ae3d05' })));
8
+ return (h(Host, { key: '85a0eb73f012ab18ad8b03e63aca9488dd11a4d7', class: getIonMode(this) }, h("slot", { key: 'a335c711d1987615cfcc953958edc0d63fbccca2' })));
9
9
  }
10
10
  static get is() { return "ion-thumbnail"; }
11
11
  static get encapsulation() { return "shadow"; }
@@ -27,11 +27,11 @@ export class ToolbarTitle {
27
27
  render() {
28
28
  const mode = getIonMode(this);
29
29
  const size = this.getSize();
30
- return (h(Host, { key: 'af95e7123b3d39110425c16cb4f7f8efb1ee1536', class: createColorClasses(this.color, {
30
+ return (h(Host, { key: '13fcf9c4fea765a4580a2c99aa03a25304d310de', class: createColorClasses(this.color, {
31
31
  [mode]: true,
32
32
  [`title-${size}`]: true,
33
33
  'title-rtl': document.dir === 'rtl',
34
- }) }, h("div", { key: '54efce3d5769fb3de297a6d534dc87d57f365004', class: "toolbar-title" }, h("slot", { key: 'f7ed25c6b178cad1840e35e81e3eeeca3aacea3f' }))));
34
+ }) }, h("div", { key: 'a0ad40298bdea5687c6ee4c873bd2926603df0f7', class: "toolbar-title" }, h("slot", { key: 'b08edc05432144aec791c10eec1ad23030fcfa1f' }))));
35
35
  }
36
36
  static get is() { return "ion-title"; }
37
37
  static get encapsulation() { return "shadow"; }
@@ -388,9 +388,9 @@ export class Toast {
388
388
  if (layout === 'stacked' && startButtons.length > 0 && endButtons.length > 0) {
389
389
  printIonWarning('This toast is using start and end buttons with the stacked toast layout. We recommend following the best practice of using either start or end buttons with the stacked toast layout.', el);
390
390
  }
391
- return (h(Host, Object.assign({ key: '45b52c210cc3e9ac130f695f29b03d771959f64f', tabindex: "-1" }, this.htmlAttributes, { style: {
391
+ return (h(Host, Object.assign({ key: '23e039d40ed3f698142abbf2eff13acc0d70b52e', tabindex: "-1" }, this.htmlAttributes, { style: {
392
392
  zIndex: `${60000 + this.overlayIndex}`,
393
- }, class: createColorClasses(this.color, Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'toast-translucent': this.translucent })), onIonToastWillDismiss: this.dispatchCancelHandler }), h("div", { key: '10f25e094028f4855828ba2e04e71445b05198eb', class: wrapperClass }, h("div", { key: 'a1312a8878dd8a02798de0a1f136d03c287a34a8', class: "toast-container", part: "container" }, this.renderButtons(startButtons, 'start'), this.icon !== undefined && (h("ion-icon", { class: "toast-icon", part: "icon", icon: this.icon, lazy: false, "aria-hidden": "true" })), h("div", { key: '0f19c24f130c04ff41a3098bf6d9b17e2c8a2d12', class: "toast-content", role: "status", "aria-atomic": "true", "aria-live": "polite" }, !revealContentToScreenReader && header !== undefined && this.renderHeader('oldHeader', 'true'), !revealContentToScreenReader && message !== undefined && this.renderToastMessage('oldMessage', 'true'), revealContentToScreenReader && header !== undefined && this.renderHeader('header'), revealContentToScreenReader && message !== undefined && this.renderToastMessage('header')), this.renderButtons(endButtons, 'end')))));
393
+ }, class: createColorClasses(this.color, Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'toast-translucent': this.translucent })), onIonToastWillDismiss: this.dispatchCancelHandler }), h("div", { key: 'c3b790f76618c70f00c0ac319faab0bf5d30fd07', class: wrapperClass }, h("div", { key: 'b05c2a16b23d9d5ebe8e9e8448ca74ce9ee2aeaa', class: "toast-container", part: "container" }, this.renderButtons(startButtons, 'start'), this.icon !== undefined && (h("ion-icon", { class: "toast-icon", part: "icon", icon: this.icon, lazy: false, "aria-hidden": "true" })), h("div", { key: '06da7439fe6ac393b19721edd4b4c21cfc3d4521', class: "toast-content", role: "status", "aria-atomic": "true", "aria-live": "polite" }, !revealContentToScreenReader && header !== undefined && this.renderHeader('oldHeader', 'true'), !revealContentToScreenReader && message !== undefined && this.renderToastMessage('oldMessage', 'true'), revealContentToScreenReader && header !== undefined && this.renderHeader('header'), revealContentToScreenReader && message !== undefined && this.renderToastMessage('header')), this.renderButtons(endButtons, 'end')))));
394
394
  }
395
395
  static get is() { return "ion-toast"; }
396
396
  static get encapsulation() { return "shadow"; }
@@ -157,7 +157,7 @@ export class Toggle {
157
157
  const value = this.getValue();
158
158
  const rtl = isRTL(el) ? 'rtl' : 'ltr';
159
159
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
160
- return (h(Host, { key: '3c0acc5498682a610e7a6f095590ad79391e1ba4', onClick: this.onClick, class: createColorClasses(color, {
160
+ return (h(Host, { key: '4404b52b62c84c2b9c7fa6358f8faf5a7f6a2e02', onClick: this.onClick, class: createColorClasses(color, {
161
161
  [mode]: true,
162
162
  'in-item': hostContext('ion-item', el),
163
163
  'toggle-activated': activated,
@@ -167,10 +167,10 @@ export class Toggle {
167
167
  [`toggle-alignment-${alignment}`]: true,
168
168
  [`toggle-label-placement-${labelPlacement}`]: true,
169
169
  [`toggle-${rtl}`]: true,
170
- }) }, h("label", { key: '68133afe76d290ebcb8f05883a27875529f0bfff', class: "toggle-wrapper" }, h("input", Object.assign({ key: 'abd6aad2a3e62fbffb80d5c3dbdc57182bc97fab', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, this.inheritedAttributes)), h("div", { key: '8e70ddd2b4daada4bf16e85e56df9078116933f9', class: {
170
+ }) }, h("label", { key: 'b626abcebb56f70fc3849ae3f7cdd4d99e92ee02', class: "toggle-wrapper" }, h("input", Object.assign({ key: '30bf51409249b0195e802eb7c68a2a67a8fa7855', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, this.inheritedAttributes)), h("div", { key: '24da2e034d1c2fcbd851438b2680dd5683ec50df', class: {
171
171
  'label-text-wrapper': true,
172
172
  'label-text-wrapper-hidden': !this.hasLabel,
173
- }, part: "label" }, h("slot", { key: 'eae25cdeefe1e6589f06b3a2568522e74cf44d66' })), h("div", { key: 'df9adddd1d8d73c8a23e1e91261d84c876ac5935', class: "native-wrapper" }, this.renderToggleControl()))));
173
+ }, part: "label" }, h("slot", { key: '69b07934847a1c374e1016fd5cbcb7aba27a03ba' })), h("div", { key: 'a8a33696c7aa287ccea05e6560b5433b1da00598', class: "native-wrapper" }, this.renderToggleControl()))));
174
174
  }
175
175
  static get is() { return "ion-toggle"; }
176
176
  static get encapsulation() { return "shadow"; }
@@ -62,10 +62,10 @@ export class Toolbar {
62
62
  this.childrenStyles.forEach((value) => {
63
63
  Object.assign(childStyles, value);
64
64
  });
65
- return (h(Host, { key: 'f72d6a7ed20c88ba15d64050acfc20f320569862', class: Object.assign(Object.assign({}, childStyles), createColorClasses(this.color, {
65
+ return (h(Host, { key: 'a7b140e85cb60a8bef52dcc01c0ca95cf4dd2339', class: Object.assign(Object.assign({}, childStyles), createColorClasses(this.color, {
66
66
  [mode]: true,
67
67
  'in-toolbar': hostContext('ion-toolbar', this.el),
68
- })) }, h("div", { key: 'ccf18eea9756ca56ca828b05bd3f86cf8a32e24c', class: "toolbar-background" }), h("div", { key: '1fa699d8e17f57b42a52d47a1bdb793f2cbbfe5d', class: "toolbar-container" }, h("slot", { key: 'ef4d877bad0918eefdc67fa7aa258024a58d26ef', name: "start" }), h("slot", { key: '41858db7a8d58c9165952c9336731d621ec3c2b8', name: "secondary" }), h("div", { key: '577770b9346b48a0fa1412cbdbd9393d553d2286', class: "toolbar-content" }, h("slot", { key: 'ae47b29e1f7d2c3dde7a170c9737b48f075139c2' })), h("slot", { key: 'cfbf7879daf1a38fee434335abff936d8f3690e0', name: "primary" }), h("slot", { key: 'ed3a66248f43e0749f6aef9fb78ea4f5034c0774', name: "end" }))));
68
+ })) }, h("div", { key: 'bdca37c9e022475501993660e60549aae897a1c6', class: "toolbar-background" }), h("div", { key: '586abce4db3f2726ce00876565cfc966df54db2c', class: "toolbar-container" }, h("slot", { key: '124b60b8fdd6b3f9bf3c97122890444bc7e1c13d', name: "start" }), h("slot", { key: '8581916125eb38d66b4f6e0e2c674eb09a4a54a0', name: "secondary" }), h("div", { key: '0f786a72d646957fa445e30c04a0ce2c2dbe1a2b', class: "toolbar-content" }, h("slot", { key: 'be4e90c43db8c0cd596def6239381913169621b7' })), h("slot", { key: '00c87247e89b99e7c1f68367247d590b12f7a106', name: "primary" }), h("slot", { key: 'b2548f6ed8bec893e6f1e782eb27c3be24cac10c', name: "end" }))));
69
69
  }
70
70
  static get is() { return "ion-toolbar"; }
71
71
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,78 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { focusVisibleElement } from "./helpers";
5
+ /**
6
+ * This query string selects elements that
7
+ * are eligible to receive focus. We select
8
+ * interactive elements that meet the following
9
+ * criteria:
10
+ * 1. Element does not have a negative tabindex
11
+ * 2. Element does not have `hidden`
12
+ * 3. Element does not have `disabled` for non-Ionic components.
13
+ * 4. Element does not have `disabled` or `disabled="true"` for Ionic components.
14
+ * Note: We need this distinction because `disabled="false"` is
15
+ * valid usage for the disabled property on ion-button.
16
+ */
17
+ export const focusableQueryString = '[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])';
18
+ /**
19
+ * Focuses the first descendant in a context
20
+ * that can receive focus. If none exists,
21
+ * a fallback element will be focused.
22
+ * This fallback is typically an ancestor
23
+ * container such as a menu or overlay so focus does not
24
+ * leave the container we are trying to trap focus in.
25
+ *
26
+ * If no fallback is specified then we focus the container itself.
27
+ */
28
+ export const focusFirstDescendant = (ref, fallbackElement) => {
29
+ const firstInput = ref.querySelector(focusableQueryString);
30
+ focusElementInContext(firstInput, fallbackElement !== null && fallbackElement !== void 0 ? fallbackElement : ref);
31
+ };
32
+ /**
33
+ * Focuses the last descendant in a context
34
+ * that can receive focus. If none exists,
35
+ * a fallback element will be focused.
36
+ * This fallback is typically an ancestor
37
+ * container such as a menu or overlay so focus does not
38
+ * leave the container we are trying to trap focus in.
39
+ *
40
+ * If no fallback is specified then we focus the container itself.
41
+ */
42
+ export const focusLastDescendant = (ref, fallbackElement) => {
43
+ const inputs = Array.from(ref.querySelectorAll(focusableQueryString));
44
+ const lastInput = inputs.length > 0 ? inputs[inputs.length - 1] : null;
45
+ focusElementInContext(lastInput, fallbackElement !== null && fallbackElement !== void 0 ? fallbackElement : ref);
46
+ };
47
+ /**
48
+ * Focuses a particular element in a context. If the element
49
+ * doesn't have anything focusable associated with it then
50
+ * a fallback element will be focused.
51
+ *
52
+ * This fallback is typically an ancestor
53
+ * container such as a menu or overlay so focus does not
54
+ * leave the container we are trying to trap focus in.
55
+ * This should be used instead of the focus() method
56
+ * on most elements because the focusable element
57
+ * may not be the host element.
58
+ *
59
+ * For example, if an ion-button should be focused
60
+ * then we should actually focus the native <button>
61
+ * element inside of ion-button's shadow root, not
62
+ * the host element itself.
63
+ */
64
+ const focusElementInContext = (hostToFocus, fallbackElement) => {
65
+ let elementToFocus = hostToFocus;
66
+ const shadowRoot = hostToFocus === null || hostToFocus === void 0 ? void 0 : hostToFocus.shadowRoot;
67
+ if (shadowRoot) {
68
+ // If there are no inner focusable elements, just focus the host element.
69
+ elementToFocus = shadowRoot.querySelector(focusableQueryString) || hostToFocus;
70
+ }
71
+ if (elementToFocus) {
72
+ focusVisibleElement(elementToFocus);
73
+ }
74
+ else {
75
+ // Focus fallback element instead of letting focus escape
76
+ fallbackElement.focus();
77
+ }
78
+ };
@@ -1,6 +1,5 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- export * from './form-controller';
5
4
  export * from './notch-controller';
6
5
  export * from './compare-with-utils';
@@ -15,7 +15,7 @@ import { config } from "../global/config";
15
15
  * moment this file is evaluated which could be
16
16
  * before the config is set.
17
17
  */
18
- export const shoudUseCloseWatcher = () => config.get('experimentalCloseWatcher', false) && win !== undefined && 'CloseWatcher' in win;
18
+ export const shouldUseCloseWatcher = () => config.get('experimentalCloseWatcher', false) && win !== undefined && 'CloseWatcher' in win;
19
19
  /**
20
20
  * When hardwareBackButton: false in config,
21
21
  * we need to make sure we also block the default
@@ -85,7 +85,7 @@ export const startHardwareBackButton = () => {
85
85
  * backbutton event otherwise we may get duplicate
86
86
  * events firing.
87
87
  */
88
- if (shoudUseCloseWatcher()) {
88
+ if (shouldUseCloseWatcher()) {
89
89
  let watcher;
90
90
  const configureWatcher = () => {
91
91
  watcher === null || watcher === void 0 ? void 0 : watcher.destroy();
@@ -230,13 +230,6 @@ export const raf = (h) => {
230
230
  export const hasShadowDom = (el) => {
231
231
  return !!el.shadowRoot && !!el.attachShadow;
232
232
  };
233
- export const findItemLabel = (componentEl) => {
234
- const itemEl = componentEl.closest('ion-item');
235
- if (itemEl) {
236
- return itemEl.querySelector('ion-label');
237
- }
238
- return null;
239
- };
240
233
  export const focusVisibleElement = (el) => {
241
234
  el.focus();
242
235
  /**
@@ -276,7 +269,7 @@ export const getAriaLabel = (componentEl, inputId) => {
276
269
  // a custom label using the label element
277
270
  const componentId = componentEl.id;
278
271
  let labelId = labelledBy !== null && labelledBy.trim() !== '' ? labelledBy : inputId + '-lbl';
279
- let label = labelledBy !== null && labelledBy.trim() !== '' ? document.getElementById(labelledBy) : findItemLabel(componentEl);
272
+ let label = labelledBy !== null && labelledBy.trim() !== '' ? document.getElementById(labelledBy) : null;
280
273
  if (label) {
281
274
  if (labelledBy === null) {
282
275
  label.id = labelId;
@@ -29,7 +29,14 @@ export const startInputShims = async (config, platform) => {
29
29
  const keyboardHeight = config.getNumber('keyboardHeight', 290);
30
30
  const scrollAssist = config.getBoolean('scrollAssist', true);
31
31
  const hideCaret = config.getBoolean('hideCaretOnScroll', isIOS);
32
- const inputBlurring = config.getBoolean('inputBlurring', isIOS);
32
+ /**
33
+ * The team is evaluating if inputBlurring is still needed. As a result
34
+ * this feature is disabled by default as of Ionic 8.0. Developers are
35
+ * able to re-enable it temporarily. The team may remove this utility
36
+ * if it is determined that doing so would not bring any adverse side effects.
37
+ * TODO FW-6014 remove input blurring utility (including implementation)
38
+ */
39
+ const inputBlurring = config.getBoolean('inputBlurring', false);
33
40
  const scrollPadding = config.getBoolean('scrollPadding', true);
34
41
  const inputs = Array.from(doc.querySelectorAll('ion-input, ion-textarea'));
35
42
  const hideCaretMap = new WeakMap();
@@ -2,7 +2,8 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { doc } from "./browser/index";
5
- import { shoudUseCloseWatcher } from "./hardware-back-button";
5
+ import { focusFirstDescendant, focusLastDescendant, focusableQueryString } from "./focus-trap";
6
+ import { shouldUseCloseWatcher } from "./hardware-back-button";
6
7
  import { config } from "../global/config";
7
8
  import { getIonMode } from "../global/ionic-global";
8
9
  import { CoreDelegate } from "./framework-delegate";
@@ -90,39 +91,7 @@ export const createOverlay = (tagName, opts) => {
90
91
  }
91
92
  return Promise.resolve();
92
93
  };
93
- /**
94
- * This query string selects elements that
95
- * are eligible to receive focus. We select
96
- * interactive elements that meet the following
97
- * criteria:
98
- * 1. Element does not have a negative tabindex
99
- * 2. Element does not have `hidden`
100
- * 3. Element does not have `disabled` for non-Ionic components.
101
- * 4. Element does not have `disabled` or `disabled="true"` for Ionic components.
102
- * Note: We need this distinction because `disabled="false"` is
103
- * valid usage for the disabled property on ion-button.
104
- */
105
- const focusableQueryString = '[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])';
106
94
  const isOverlayHidden = (overlay) => overlay.classList.contains('overlay-hidden');
107
- /**
108
- * Focuses the first descendant in an overlay
109
- * that can receive focus. If none exists,
110
- * the entire overlay will be focused.
111
- */
112
- export const focusFirstDescendant = (ref, overlay) => {
113
- const firstInput = ref.querySelector(focusableQueryString);
114
- focusElementInOverlay(firstInput, overlay);
115
- };
116
- /**
117
- * Focuses the last descendant in an overlay
118
- * that can receive focus. If none exists,
119
- * the entire overlay will be focused.
120
- */
121
- const focusLastDescendant = (ref, overlay) => {
122
- const inputs = Array.from(ref.querySelectorAll(focusableQueryString));
123
- const lastInput = inputs.length > 0 ? inputs[inputs.length - 1] : null;
124
- focusElementInOverlay(lastInput, overlay);
125
- };
126
95
  /**
127
96
  * Focuses a particular element in an overlay. If the element
128
97
  * doesn't have anything focusable associated with it then
@@ -313,7 +282,7 @@ const trapKeyboardFocus = (ev, doc) => {
313
282
  */
314
283
  const lastFocus = lastOverlay.lastFocus;
315
284
  // Focus the first element in the overlay wrapper
316
- focusFirstDescendant(lastOverlay, lastOverlay);
285
+ focusFirstDescendant(lastOverlay);
317
286
  /**
318
287
  * If the cached last focused element is the
319
288
  * same as the active element, then we need
@@ -324,7 +293,7 @@ const trapKeyboardFocus = (ev, doc) => {
324
293
  * last focus to equal the active element.
325
294
  */
326
295
  if (lastFocus === doc.activeElement) {
327
- focusLastDescendant(lastOverlay, lastOverlay);
296
+ focusLastDescendant(lastOverlay);
328
297
  }
329
298
  lastOverlay.lastFocus = doc.activeElement;
330
299
  }
@@ -369,7 +338,7 @@ const connectListeners = (doc) => {
369
338
  * this behavior will be handled via the ionBackButton
370
339
  * event.
371
340
  */
372
- if (!shoudUseCloseWatcher()) {
341
+ if (!shouldUseCloseWatcher()) {
373
342
  doc.addEventListener('keydown', (ev) => {
374
343
  if (ev.key === 'Escape') {
375
344
  const lastOverlay = getPresentedOverlay(doc);
@@ -460,15 +429,7 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
460
429
  }
461
430
  setRootAriaHidden(true);
462
431
  document.body.classList.add(BACKDROP_NO_SCROLL);
463
- /**
464
- * Hide all other overlays from screen readers so only this one
465
- * can be read. Note that presenting an overlay always makes
466
- * it the topmost one.
467
- */
468
- if (doc !== undefined) {
469
- const presentedOverlays = getPresentedOverlays(doc);
470
- presentedOverlays.forEach((o) => o.setAttribute('aria-hidden', 'true'));
471
- }
432
+ hideOverlaysFromScreenReaders(overlay.el);
472
433
  overlay.presented = true;
473
434
  overlay.willPresent.emit();
474
435
  (_a = overlay.willPresentShorthand) === null || _a === void 0 ? void 0 : _a.emit();
@@ -561,7 +522,7 @@ const restoreElementFocus = async (overlayEl) => {
561
522
  }
562
523
  };
563
524
  export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnimation, opts) => {
564
- var _a, _b, _c;
525
+ var _a, _b;
565
526
  if (!overlay.presented) {
566
527
  return false;
567
528
  }
@@ -614,13 +575,7 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
614
575
  console.error(err);
615
576
  }
616
577
  overlay.el.remove();
617
- /**
618
- * If there are other overlays presented, unhide the new
619
- * topmost one from screen readers.
620
- */
621
- if (doc !== undefined) {
622
- (_c = getPresentedOverlay(doc)) === null || _c === void 0 ? void 0 : _c.removeAttribute('aria-hidden');
623
- }
578
+ revealOverlaysToScreenReaders();
624
579
  return true;
625
580
  };
626
581
  const getAppRoot = (doc) => {
@@ -816,3 +771,59 @@ export const createTriggerController = () => {
816
771
  removeClickListener,
817
772
  };
818
773
  };
774
+ /**
775
+ * Ensure that underlying overlays have aria-hidden if necessary so that screen readers
776
+ * cannot move focus to these elements. Note that we cannot rely on focus/focusin/focusout
777
+ * events here because those events do not fire when the screen readers moves to a non-focusable
778
+ * element such as text.
779
+ * Without this logic screen readers would be able to move focus outside of the top focus-trapped overlay.
780
+ *
781
+ * @param newTopMostOverlay - The overlay that is being presented. Since the overlay has not been
782
+ * fully presented yet at the time this function is called it will not be included in the getPresentedOverlays result.
783
+ */
784
+ const hideOverlaysFromScreenReaders = (newTopMostOverlay) => {
785
+ var _a;
786
+ if (doc === undefined)
787
+ return;
788
+ const overlays = getPresentedOverlays(doc);
789
+ for (let i = overlays.length - 1; i >= 0; i--) {
790
+ const presentedOverlay = overlays[i];
791
+ const nextPresentedOverlay = (_a = overlays[i + 1]) !== null && _a !== void 0 ? _a : newTopMostOverlay;
792
+ /**
793
+ * If next overlay has aria-hidden then all remaining overlays will have it too.
794
+ * Or, if the next overlay is a Toast that does not have aria-hidden then current overlay
795
+ * should not have aria-hidden either so focus can remain in the current overlay.
796
+ */
797
+ if (nextPresentedOverlay.hasAttribute('aria-hidden') || nextPresentedOverlay.tagName !== 'ION-TOAST') {
798
+ presentedOverlay.setAttribute('aria-hidden', 'true');
799
+ }
800
+ }
801
+ };
802
+ /**
803
+ * When dismissing an overlay we need to reveal the new top-most overlay to screen readers.
804
+ * If the top-most overlay is a Toast we potentially need to reveal more overlays since
805
+ * focus is never automatically moved to the Toast.
806
+ */
807
+ const revealOverlaysToScreenReaders = () => {
808
+ if (doc === undefined)
809
+ return;
810
+ const overlays = getPresentedOverlays(doc);
811
+ for (let i = overlays.length - 1; i >= 0; i--) {
812
+ const currentOverlay = overlays[i];
813
+ /**
814
+ * If the current we are looking at is a Toast then we can remove aria-hidden.
815
+ * However, we potentially need to keep looking at the overlay stack because there
816
+ * could be more Toasts underneath. Additionally, we need to unhide the closest non-Toast
817
+ * overlay too so focus can move there since focus is never automatically moved to the Toast.
818
+ */
819
+ currentOverlay.removeAttribute('aria-hidden');
820
+ /**
821
+ * If we found a non-Toast element then we can just remove aria-hidden and stop searching entirely
822
+ * since this overlay should always receive focus. As a result, all underlying overlays should still
823
+ * be hidden from screen readers.
824
+ */
825
+ if (currentOverlay.tagName !== 'ION-TOAST') {
826
+ break;
827
+ }
828
+ }
829
+ };
@@ -45,6 +45,18 @@ export const createSlotMutationController = (el, slotName, mutationCallback) =>
45
45
  });
46
46
  hostMutationObserver.observe(el, {
47
47
  childList: true,
48
+ /**
49
+ * This fixes an issue with the `ion-input` and
50
+ * `ion-textarea` not re-rendering in some cases
51
+ * when using the label slot functionality.
52
+ *
53
+ * HTML element patches in Stencil that are enabled
54
+ * by the `experimentalSlotFixes` flag in Stencil v4
55
+ * result in DOM manipulations that won't trigger
56
+ * the current mutation observer configuration and
57
+ * callback.
58
+ */
59
+ subtree: true,
48
60
  });
49
61
  }
50
62
  /**
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { newSpecPage } from "@stencil/core/testing";
5
5
  import { Modal } from "../../../components/modal/modal";
6
+ import { Toast } from "../../../components/toast/toast";
6
7
  import { Nav } from "../../../components/nav/nav";
7
8
  import { RouterOutlet } from "../../../components/router-outlet/router-outlet";
8
9
  import { setRootAriaHidden } from "../../overlays";
@@ -150,4 +151,56 @@ describe('aria-hidden on individual overlays', () => {
150
151
  await modalOne.present();
151
152
  expect(modalOne.hasAttribute('aria-hidden')).toEqual(false);
152
153
  });
154
+ it('should not hide previous overlay if top-most overlay is toast', async () => {
155
+ const page = await newSpecPage({
156
+ components: [Modal, Toast],
157
+ html: `
158
+ <ion-modal id="m-one"></ion-modal>
159
+ <ion-modal id="m-two"></ion-modal>
160
+ <ion-toast id="t-one"></ion-toast>
161
+ <ion-toast id="t-two"></ion-toast>
162
+ `,
163
+ });
164
+ const modalOne = page.body.querySelector('ion-modal#m-one');
165
+ const modalTwo = page.body.querySelector('ion-modal#m-two');
166
+ const toastOne = page.body.querySelector('ion-toast#t-one');
167
+ const toastTwo = page.body.querySelector('ion-toast#t-two');
168
+ await modalOne.present();
169
+ await modalTwo.present();
170
+ await toastOne.present();
171
+ await toastTwo.present();
172
+ expect(modalOne.hasAttribute('aria-hidden')).toEqual(true);
173
+ expect(modalTwo.hasAttribute('aria-hidden')).toEqual(false);
174
+ expect(toastOne.hasAttribute('aria-hidden')).toEqual(false);
175
+ expect(toastTwo.hasAttribute('aria-hidden')).toEqual(false);
176
+ await toastTwo.dismiss();
177
+ expect(modalOne.hasAttribute('aria-hidden')).toEqual(true);
178
+ expect(modalTwo.hasAttribute('aria-hidden')).toEqual(false);
179
+ expect(toastOne.hasAttribute('aria-hidden')).toEqual(false);
180
+ await toastOne.dismiss();
181
+ expect(modalOne.hasAttribute('aria-hidden')).toEqual(true);
182
+ expect(modalTwo.hasAttribute('aria-hidden')).toEqual(false);
183
+ });
184
+ it('should hide previous overlay even with a toast that is not the top-most overlay', async () => {
185
+ const page = await newSpecPage({
186
+ components: [Modal, Toast],
187
+ html: `
188
+ <ion-modal id="m-one"></ion-modal>
189
+ <ion-toast id="t-one"></ion-toast>
190
+ <ion-modal id="m-two"></ion-modal>
191
+ `,
192
+ });
193
+ const modalOne = page.body.querySelector('ion-modal#m-one');
194
+ const modalTwo = page.body.querySelector('ion-modal#m-two');
195
+ const toastOne = page.body.querySelector('ion-toast#t-one');
196
+ await modalOne.present();
197
+ await toastOne.present();
198
+ await modalTwo.present();
199
+ expect(modalOne.hasAttribute('aria-hidden')).toEqual(true);
200
+ expect(toastOne.hasAttribute('aria-hidden')).toEqual(true);
201
+ expect(modalTwo.hasAttribute('aria-hidden')).toEqual(false);
202
+ await modalTwo.dismiss();
203
+ expect(modalOne.hasAttribute('aria-hidden')).toEqual(false);
204
+ expect(toastOne.hasAttribute('aria-hidden')).toEqual(false);
205
+ });
153
206
  });