voyager-ionic-core 7.7.2 → 7.8.6

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 (670) 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 +4 -4
  5. package/components/buttons.js +1 -1
  6. package/components/checkbox.js +1 -1
  7. package/components/data.js +23 -38
  8. package/components/hardware-back-button.js +3 -3
  9. package/components/helpers.js +2 -2
  10. package/components/input-shims.js +5 -5
  11. package/components/ion-app.js +4 -4
  12. package/components/ion-avatar.js +1 -1
  13. package/components/ion-back-button.js +2 -2
  14. package/components/ion-badge.js +2 -2
  15. package/components/ion-breadcrumb.js +4 -4
  16. package/components/ion-breadcrumbs.js +2 -2
  17. package/components/ion-card-content.js +1 -1
  18. package/components/ion-card-header.js +2 -2
  19. package/components/ion-card-subtitle.js +2 -2
  20. package/components/ion-card-title.js +2 -2
  21. package/components/ion-card.js +1 -1
  22. package/components/ion-chip.js +2 -2
  23. package/components/ion-col.js +2 -2
  24. package/components/ion-content.js +3 -3
  25. package/components/ion-datetime-button.js +12 -11
  26. package/components/ion-datetime.js +75 -12
  27. package/components/ion-fab-button.js +2 -2
  28. package/components/ion-fab-list.js +2 -2
  29. package/components/ion-fab.js +2 -2
  30. package/components/ion-footer.js +2 -2
  31. package/components/ion-grid.js +2 -2
  32. package/components/ion-header.js +3 -3
  33. package/components/ion-img.js +1 -1
  34. package/components/ion-infinite-scroll-content.js +2 -2
  35. package/components/ion-infinite-scroll.js +1 -1
  36. package/components/ion-input.js +8 -0
  37. package/components/ion-item-divider.js +2 -2
  38. package/components/ion-item-group.js +1 -1
  39. package/components/ion-item-option.js +2 -2
  40. package/components/ion-item-options.js +1 -1
  41. package/components/ion-item-sliding.js +1 -1
  42. package/components/ion-loading.js +2 -2
  43. package/components/ion-menu-button.js +2 -2
  44. package/components/ion-menu-toggle.js +2 -2
  45. package/components/ion-menu.js +3 -3
  46. package/components/ion-modal.js +81 -25
  47. package/components/ion-nav-link.js +1 -1
  48. package/components/ion-nav.js +1 -1
  49. package/components/ion-picker.js +2 -2
  50. package/components/ion-progress-bar.js +1 -1
  51. package/components/ion-range.js +126 -21
  52. package/components/ion-refresher-content.js +1 -1
  53. package/components/ion-refresher.js +1 -1
  54. package/components/ion-reorder-group.js +1 -1
  55. package/components/ion-reorder.js +1 -1
  56. package/components/ion-router-link.js +2 -2
  57. package/components/ion-router-outlet.js +1 -1
  58. package/components/ion-row.js +1 -1
  59. package/components/ion-searchbar.js +35 -6
  60. package/components/ion-segment-button.js +3 -3
  61. package/components/ion-segment.js +2 -2
  62. package/components/ion-select-option.js +1 -1
  63. package/components/ion-select.js +3 -3
  64. package/components/ion-skeleton-text.js +2 -2
  65. package/components/ion-split-pane.js +2 -2
  66. package/components/ion-tab-bar.js +2 -2
  67. package/components/ion-tab-button.js +2 -2
  68. package/components/ion-tab.js +2 -2
  69. package/components/ion-tabs.js +1 -1
  70. package/components/ion-text.js +2 -2
  71. package/components/ion-thumbnail.js +1 -1
  72. package/components/ion-title.js +2 -2
  73. package/components/ion-toast.js +2 -2
  74. package/components/ion-toolbar.js +2 -2
  75. package/components/item.js +1 -1
  76. package/components/label.js +3 -3
  77. package/components/list-header.js +2 -2
  78. package/components/list.js +1 -1
  79. package/components/note.js +2 -2
  80. package/components/overlays.js +127 -39
  81. package/components/picker-column-internal.js +8 -4
  82. package/components/picker-column.js +2 -2
  83. package/components/picker-internal.js +2 -2
  84. package/components/popover.js +4 -4
  85. package/components/radio-group.js +1 -1
  86. package/components/ripple-effect.js +1 -1
  87. package/components/select-popover.js +1 -1
  88. package/components/spinner.js +1 -1
  89. package/css/core.css +1 -561
  90. package/css/core.css.map +1 -1
  91. package/css/display.css +1 -131
  92. package/css/display.css.map +1 -1
  93. package/css/flex-utils.css +1 -81
  94. package/css/flex-utils.css.map +1 -1
  95. package/css/float-elements.css +1 -293
  96. package/css/float-elements.css.map +1 -1
  97. package/css/global.bundle.css +1 -457
  98. package/css/global.bundle.css.map +1 -1
  99. package/css/ionic-swiper.css +1 -127
  100. package/css/ionic-swiper.css.map +1 -1
  101. package/css/ionic.bundle.css +1 -1
  102. package/css/ionic.bundle.css.map +1 -1
  103. package/css/normalize.css +1 -150
  104. package/css/normalize.css.map +1 -1
  105. package/css/padding.css +1 -202
  106. package/css/padding.css.map +1 -1
  107. package/css/structure.css +1 -152
  108. package/css/structure.css.map +1 -1
  109. package/css/text-alignment.css +1 -243
  110. package/css/text-alignment.css.map +1 -1
  111. package/css/text-transformation.css +1 -158
  112. package/css/text-transformation.css.map +1 -1
  113. package/css/typography.css +1 -157
  114. package/css/typography.css.map +1 -1
  115. package/css/utils.bundle.css +1 -1100
  116. package/css/utils.bundle.css.map +1 -1
  117. package/dist/cjs/{animation-fdab9de5.js → animation-c2840aea.js} +1 -1
  118. package/dist/cjs/{app-globals-92ad1b3d.js → app-globals-c5eb104c.js} +1 -1
  119. package/dist/cjs/{button-active-2d6520ec.js → button-active-181d142e.js} +1 -1
  120. package/dist/cjs/{data-a5109f09.js → data-4487a815.js} +22 -39
  121. package/dist/cjs/{form-controller-7b90d7b7.js → form-controller-c83330c0.js} +1 -1
  122. package/dist/cjs/{framework-delegate-a3e6d060.js → framework-delegate-e0e13baa.js} +1 -1
  123. package/dist/cjs/{hardware-back-button-2696acaf.js → hardware-back-button-adba3ac7.js} +5 -5
  124. package/dist/cjs/{helpers-2e1028fa.js → helpers-da4c0ed1.js} +2 -2
  125. package/dist/cjs/{index-c3580a90.js → index-1f7c54f8.js} +4 -4
  126. package/dist/cjs/{index-0ffe376d.js → index-22617dd6.js} +51 -7
  127. package/dist/cjs/{index-a43f7a0f.js → index-5c38afe7.js} +4 -4
  128. package/dist/cjs/{index-10da82ce.js → index-62290fec.js} +1 -1
  129. package/dist/cjs/{index-53d162b2.js → index-bef98850.js} +1 -1
  130. package/dist/cjs/index.cjs.js +11 -11
  131. package/dist/cjs/{input-shims-6f804705.js → input-shims-05ac9905.js} +7 -7
  132. package/dist/cjs/{input.utils-d693d18a.js → input.utils-d7dca90f.js} +1 -1
  133. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  134. package/dist/cjs/ion-action-sheet.cjs.entry.js +11 -11
  135. package/dist/cjs/ion-alert.cjs.entry.js +10 -10
  136. package/dist/cjs/ion-app_8.cjs.entry.js +29 -29
  137. package/dist/cjs/ion-avatar_3.cjs.entry.js +6 -6
  138. package/dist/cjs/ion-back-button.cjs.entry.js +5 -5
  139. package/dist/cjs/ion-backdrop.cjs.entry.js +3 -3
  140. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +9 -9
  141. package/dist/cjs/ion-button_2.cjs.entry.js +7 -7
  142. package/dist/cjs/ion-card_5.cjs.entry.js +11 -11
  143. package/dist/cjs/ion-checkbox.cjs.entry.js +5 -5
  144. package/dist/cjs/ion-chip.cjs.entry.js +4 -4
  145. package/dist/cjs/ion-col_3.cjs.entry.js +7 -7
  146. package/dist/cjs/ion-datetime-button.cjs.entry.js +15 -14
  147. package/dist/cjs/ion-datetime_3.cjs.entry.js +83 -23
  148. package/dist/cjs/ion-fab_3.cjs.entry.js +9 -9
  149. package/dist/cjs/ion-img.cjs.entry.js +4 -4
  150. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +7 -7
  151. package/dist/cjs/ion-input.cjs.entry.js +14 -6
  152. package/dist/cjs/ion-item-option_3.cjs.entry.js +8 -8
  153. package/dist/cjs/ion-item_8.cjs.entry.js +17 -17
  154. package/dist/cjs/ion-loading.cjs.entry.js +9 -9
  155. package/dist/cjs/ion-menu_3.cjs.entry.js +14 -14
  156. package/dist/cjs/ion-modal.cjs.entry.js +90 -34
  157. package/dist/cjs/ion-nav_2.cjs.entry.js +8 -8
  158. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +11 -7
  159. package/dist/cjs/ion-picker-internal.cjs.entry.js +4 -4
  160. package/dist/cjs/ion-popover.cjs.entry.js +12 -12
  161. package/dist/cjs/ion-progress-bar.cjs.entry.js +4 -4
  162. package/dist/cjs/ion-radio_2.cjs.entry.js +5 -5
  163. package/dist/cjs/ion-range.cjs.entry.js +131 -26
  164. package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -7
  165. package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -6
  166. package/dist/cjs/ion-ripple-effect.cjs.entry.js +3 -3
  167. package/dist/cjs/ion-route_4.cjs.entry.js +5 -5
  168. package/dist/cjs/ion-searchbar.cjs.entry.js +32 -8
  169. package/dist/cjs/ion-segment_2.cjs.entry.js +8 -8
  170. package/dist/cjs/ion-select_3.cjs.entry.js +12 -12
  171. package/dist/cjs/ion-spinner.cjs.entry.js +3 -3
  172. package/dist/cjs/ion-split-pane.cjs.entry.js +4 -4
  173. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +7 -7
  174. package/dist/cjs/ion-tab_2.cjs.entry.js +6 -6
  175. package/dist/cjs/ion-text.cjs.entry.js +4 -4
  176. package/dist/cjs/ion-textarea.cjs.entry.js +6 -6
  177. package/dist/cjs/ion-toast.cjs.entry.js +9 -9
  178. package/dist/cjs/ion-toggle.cjs.entry.js +4 -4
  179. package/dist/cjs/{ionic-global-59a10130.js → ionic-global-c5503e93.js} +1 -1
  180. package/dist/cjs/ionic.cjs.js +5 -5
  181. package/dist/cjs/{ios.transition-c3b11cc3.js → ios.transition-30830fc4.js} +4 -4
  182. package/dist/cjs/loader.cjs.js +4 -4
  183. package/dist/cjs/{md.transition-82a8c649.js → md.transition-7f581866.js} +4 -4
  184. package/dist/cjs/{notch-controller-db0127c4.js → notch-controller-bfbcbb7a.js} +1 -1
  185. package/dist/cjs/{overlays-fb7ca451.js → overlays-129dfc13.js} +129 -41
  186. package/dist/cjs/{status-tap-692f6d32.js → status-tap-03d82840.js} +3 -3
  187. package/dist/cjs/{swipe-back-7a848bb8.js → swipe-back-dcd0d4a9.js} +1 -1
  188. package/dist/collection/collection-manifest.json +2 -2
  189. package/dist/collection/components/action-sheet/action-sheet.js +3 -3
  190. package/dist/collection/components/alert/alert.js +2 -2
  191. package/dist/collection/components/alert/test/a11y/alert.e2e.js +4 -0
  192. package/dist/collection/components/app/app.js +4 -4
  193. package/dist/collection/components/avatar/avatar.js +1 -1
  194. package/dist/collection/components/back-button/back-button.js +2 -2
  195. package/dist/collection/components/backdrop/backdrop.js +1 -1
  196. package/dist/collection/components/badge/badge.js +2 -2
  197. package/dist/collection/components/breadcrumb/breadcrumb.js +4 -4
  198. package/dist/collection/components/breadcrumbs/breadcrumbs.js +2 -2
  199. package/dist/collection/components/button/button.ios.css +5 -5
  200. package/dist/collection/components/button/button.js +2 -2
  201. package/dist/collection/components/button/button.md.css +4 -5
  202. package/dist/collection/components/buttons/buttons.js +1 -1
  203. package/dist/collection/components/card/card.js +1 -1
  204. package/dist/collection/components/card-content/card-content.js +1 -1
  205. package/dist/collection/components/card-header/card-header.js +2 -2
  206. package/dist/collection/components/card-subtitle/card-subtitle.js +2 -2
  207. package/dist/collection/components/card-title/card-title.js +2 -2
  208. package/dist/collection/components/checkbox/checkbox.js +1 -1
  209. package/dist/collection/components/checkbox/test/checkbox.spec.js +12 -0
  210. package/dist/collection/components/chip/chip.js +2 -2
  211. package/dist/collection/components/col/col.js +2 -2
  212. package/dist/collection/components/content/content.js +3 -3
  213. package/dist/collection/components/datetime/datetime.js +56 -12
  214. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +80 -1
  215. package/dist/collection/components/datetime/test/format.spec.js +65 -15
  216. package/dist/collection/components/datetime/utils/format.js +24 -37
  217. package/dist/collection/components/datetime/utils/validate.js +45 -0
  218. package/dist/collection/components/datetime-button/datetime-button.js +12 -11
  219. package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +65 -0
  220. package/dist/collection/components/fab/fab.js +2 -2
  221. package/dist/collection/components/fab-button/fab-button.js +2 -2
  222. package/dist/collection/components/fab-list/fab-list.js +2 -2
  223. package/dist/collection/components/footer/footer.js +2 -2
  224. package/dist/collection/components/grid/grid.js +2 -2
  225. package/dist/collection/components/header/header.ios.css +5 -2
  226. package/dist/collection/components/header/header.js +2 -2
  227. package/dist/collection/components/header/test/basic/header.e2e.js +77 -0
  228. package/dist/collection/components/img/img.js +1 -1
  229. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  230. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  231. package/dist/collection/components/input/input.js +8 -0
  232. package/dist/collection/components/item/item.js +1 -1
  233. package/dist/collection/components/item/test/buttons/item.e2e.js +20 -4
  234. package/dist/collection/components/item-divider/item-divider.js +2 -2
  235. package/dist/collection/components/item-group/item-group.js +1 -1
  236. package/dist/collection/components/item-option/item-option.js +2 -2
  237. package/dist/collection/components/item-options/item-options.js +1 -1
  238. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  239. package/dist/collection/components/label/label.ios.css +0 -4
  240. package/dist/collection/components/label/label.js +1 -1
  241. package/dist/collection/components/label/label.md.css +0 -4
  242. package/dist/collection/components/label/test/item/item.e2e.js +24 -0
  243. package/dist/collection/components/list/list.js +1 -1
  244. package/dist/collection/components/list-header/list-header.js +2 -2
  245. package/dist/collection/components/loading/loading.js +2 -2
  246. package/dist/collection/components/menu/menu.js +3 -3
  247. package/dist/collection/components/menu-button/menu-button.js +2 -2
  248. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  249. package/dist/collection/components/modal/gestures/sheet.js +45 -20
  250. package/dist/collection/components/modal/modal.js +38 -6
  251. package/dist/collection/components/modal/test/modal-attributes.spec.js +32 -0
  252. package/dist/collection/components/nav/nav.js +1 -1
  253. package/dist/collection/components/nav-link/nav-link.js +1 -1
  254. package/dist/collection/components/note/note.js +2 -2
  255. package/dist/collection/components/picker/picker.js +2 -2
  256. package/dist/collection/components/picker-column/picker-column.js +2 -2
  257. package/dist/collection/components/picker-column-internal/picker-column-internal.js +8 -4
  258. package/dist/collection/components/picker-internal/picker-internal.js +2 -2
  259. package/dist/collection/components/popover/popover.ios.css +0 -1
  260. package/dist/collection/components/popover/popover.js +2 -2
  261. package/dist/collection/components/popover/popover.md.css +0 -1
  262. package/dist/collection/components/popover/test/basic/popover.e2e.js +76 -0
  263. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  264. package/dist/collection/components/radio-group/radio-group.js +1 -1
  265. package/dist/collection/components/range/range.js +126 -21
  266. package/dist/collection/components/range/test/range-events.e2e.js +27 -0
  267. package/dist/collection/components/refresher/refresher.js +1 -1
  268. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  269. package/dist/collection/components/reorder/reorder.js +1 -1
  270. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  271. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  272. package/dist/collection/components/router-link/router-link.js +2 -2
  273. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  274. package/dist/collection/components/row/row.js +1 -1
  275. package/dist/collection/components/searchbar/searchbar.js +86 -6
  276. package/dist/collection/components/searchbar/test/searchbar.spec.js +20 -2
  277. package/dist/collection/components/segment/segment.js +2 -2
  278. package/dist/collection/components/segment-button/segment-button.js +3 -3
  279. package/dist/collection/components/select/select.js +3 -3
  280. package/dist/collection/components/select-option/select-option.js +1 -1
  281. package/dist/collection/components/select-popover/select-popover.js +1 -1
  282. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  283. package/dist/collection/components/spinner/spinner.js +1 -1
  284. package/dist/collection/components/split-pane/split-pane.js +2 -2
  285. package/dist/collection/components/tab/tab.js +2 -2
  286. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  287. package/dist/collection/components/tab-button/tab-button.js +2 -2
  288. package/dist/collection/components/tabs/tabs.js +1 -1
  289. package/dist/collection/components/text/text.js +2 -2
  290. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  291. package/dist/collection/components/title/title.js +2 -2
  292. package/dist/collection/components/toast/toast.js +2 -2
  293. package/dist/collection/components/toggle/toggle.js +1 -1
  294. package/dist/collection/components/toolbar/test/basic/toolbar.e2e.js +133 -5
  295. package/dist/collection/components/toolbar/toolbar.js +2 -2
  296. package/dist/collection/utils/hardware-back-button.js +2 -2
  297. package/dist/collection/utils/helpers.js +1 -1
  298. package/dist/collection/utils/input-shims/hacks/scroll-assist.js +5 -5
  299. package/dist/collection/utils/overlays.js +127 -39
  300. package/dist/collection/utils/test/overlays/overlays.e2e.js +89 -0
  301. package/dist/collection/utils/test/overlays/overlays.spec.js +53 -0
  302. package/dist/docs.json +117 -4
  303. package/dist/esm/{animation-60dbdd13.js → animation-6a0c5338.js} +1 -1
  304. package/dist/esm/{app-globals-5cf6195b.js → app-globals-318eef52.js} +1 -1
  305. package/dist/esm/{button-active-47ac8092.js → button-active-414be235.js} +1 -1
  306. package/dist/esm/{data-0f3ab200.js → data-bb424ba8.js} +23 -38
  307. package/dist/esm/{form-controller-014aa89f.js → form-controller-21dd62b1.js} +1 -1
  308. package/dist/esm/{framework-delegate-fed7fe7c.js → framework-delegate-ed4ba327.js} +1 -1
  309. package/dist/esm/{hardware-back-button-b410a047.js → hardware-back-button-6107a37c.js} +5 -5
  310. package/dist/esm/{helpers-c0b9ca37.js → helpers-be245865.js} +2 -2
  311. package/dist/esm/{index-d64f34ea.js → index-020f5464.js} +1 -1
  312. package/dist/esm/{index-47b2066d.js → index-6e05b96e.js} +4 -4
  313. package/dist/esm/{index-4c30cddd.js → index-a1a47f01.js} +51 -7
  314. package/dist/esm/{index-eb12ef92.js → index-f3946ac1.js} +1 -1
  315. package/dist/esm/{index-0b4beb69.js → index-fae1515c.js} +4 -4
  316. package/dist/esm/index.js +11 -11
  317. package/dist/esm/{input-shims-b90ca55f.js → input-shims-a52daa3a.js} +7 -7
  318. package/dist/esm/{input.utils-6e9b0046.js → input.utils-a445f677.js} +1 -1
  319. package/dist/esm/ion-accordion_2.entry.js +3 -3
  320. package/dist/esm/ion-action-sheet.entry.js +11 -11
  321. package/dist/esm/ion-alert.entry.js +10 -10
  322. package/dist/esm/ion-app_8.entry.js +29 -29
  323. package/dist/esm/ion-avatar_3.entry.js +6 -6
  324. package/dist/esm/ion-back-button.entry.js +5 -5
  325. package/dist/esm/ion-backdrop.entry.js +3 -3
  326. package/dist/esm/ion-breadcrumb_2.entry.js +9 -9
  327. package/dist/esm/ion-button_2.entry.js +7 -7
  328. package/dist/esm/ion-card_5.entry.js +11 -11
  329. package/dist/esm/ion-checkbox.entry.js +5 -5
  330. package/dist/esm/ion-chip.entry.js +4 -4
  331. package/dist/esm/ion-col_3.entry.js +7 -7
  332. package/dist/esm/ion-datetime-button.entry.js +15 -14
  333. package/dist/esm/ion-datetime_3.entry.js +83 -23
  334. package/dist/esm/ion-fab_3.entry.js +9 -9
  335. package/dist/esm/ion-img.entry.js +4 -4
  336. package/dist/esm/ion-infinite-scroll_2.entry.js +7 -7
  337. package/dist/esm/ion-input.entry.js +14 -6
  338. package/dist/esm/ion-item-option_3.entry.js +8 -8
  339. package/dist/esm/ion-item_8.entry.js +17 -17
  340. package/dist/esm/ion-loading.entry.js +9 -9
  341. package/dist/esm/ion-menu_3.entry.js +14 -14
  342. package/dist/esm/ion-modal.entry.js +90 -34
  343. package/dist/esm/ion-nav_2.entry.js +8 -8
  344. package/dist/esm/ion-picker-column-internal.entry.js +11 -7
  345. package/dist/esm/ion-picker-internal.entry.js +4 -4
  346. package/dist/esm/ion-popover.entry.js +12 -12
  347. package/dist/esm/ion-progress-bar.entry.js +4 -4
  348. package/dist/esm/ion-radio_2.entry.js +5 -5
  349. package/dist/esm/ion-range.entry.js +131 -26
  350. package/dist/esm/ion-refresher_2.entry.js +7 -7
  351. package/dist/esm/ion-reorder_2.entry.js +6 -6
  352. package/dist/esm/ion-ripple-effect.entry.js +3 -3
  353. package/dist/esm/ion-route_4.entry.js +5 -5
  354. package/dist/esm/ion-searchbar.entry.js +32 -8
  355. package/dist/esm/ion-segment_2.entry.js +8 -8
  356. package/dist/esm/ion-select_3.entry.js +12 -12
  357. package/dist/esm/ion-spinner.entry.js +3 -3
  358. package/dist/esm/ion-split-pane.entry.js +4 -4
  359. package/dist/esm/ion-tab-bar_2.entry.js +7 -7
  360. package/dist/esm/ion-tab_2.entry.js +6 -6
  361. package/dist/esm/ion-text.entry.js +4 -4
  362. package/dist/esm/ion-textarea.entry.js +6 -6
  363. package/dist/esm/ion-toast.entry.js +9 -9
  364. package/dist/esm/ion-toggle.entry.js +4 -4
  365. package/dist/esm/{ionic-global-ad9a1810.js → ionic-global-94f25d1b.js} +1 -1
  366. package/dist/esm/ionic.js +6 -6
  367. package/dist/esm/{ios.transition-b76c7020.js → ios.transition-a50a9a55.js} +4 -4
  368. package/dist/esm/loader.js +5 -5
  369. package/dist/esm/{md.transition-564937a7.js → md.transition-0da92976.js} +4 -4
  370. package/dist/esm/{notch-controller-15d281a4.js → notch-controller-6bd3e0f9.js} +1 -1
  371. package/dist/esm/{overlays-04a9a43f.js → overlays-b874c3c3.js} +129 -41
  372. package/dist/esm/{status-tap-5a95077d.js → status-tap-dfea3607.js} +3 -3
  373. package/dist/esm/{swipe-back-fa0ec5cd.js → swipe-back-c6d0e5d9.js} +1 -1
  374. package/dist/esm-es5/{animation-60dbdd13.js → animation-6a0c5338.js} +1 -1
  375. package/dist/esm-es5/app-globals-318eef52.js +4 -0
  376. package/dist/esm-es5/{button-active-47ac8092.js → button-active-414be235.js} +1 -1
  377. package/dist/esm-es5/data-bb424ba8.js +4 -0
  378. package/dist/esm-es5/{form-controller-014aa89f.js → form-controller-21dd62b1.js} +1 -1
  379. package/dist/esm-es5/framework-delegate-ed4ba327.js +4 -0
  380. package/dist/esm-es5/hardware-back-button-6107a37c.js +4 -0
  381. package/dist/esm-es5/helpers-be245865.js +4 -0
  382. package/dist/esm-es5/index-020f5464.js +4 -0
  383. package/dist/esm-es5/index-6e05b96e.js +4 -0
  384. package/dist/esm-es5/index-a1a47f01.js +5 -0
  385. package/dist/esm-es5/{index-eb12ef92.js → index-f3946ac1.js} +1 -1
  386. package/dist/esm-es5/{index-0b4beb69.js → index-fae1515c.js} +1 -1
  387. package/dist/esm-es5/index.js +1 -1
  388. package/dist/esm-es5/input-shims-a52daa3a.js +4 -0
  389. package/dist/esm-es5/{input.utils-6e9b0046.js → input.utils-a445f677.js} +1 -1
  390. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  391. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  392. package/dist/esm-es5/ion-alert.entry.js +1 -1
  393. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  394. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  395. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  396. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  397. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  398. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  399. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  400. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  401. package/dist/esm-es5/ion-chip.entry.js +1 -1
  402. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  403. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  404. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  405. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  406. package/dist/esm-es5/ion-img.entry.js +1 -1
  407. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  408. package/dist/esm-es5/ion-input.entry.js +1 -1
  409. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  410. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  411. package/dist/esm-es5/ion-loading.entry.js +1 -1
  412. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  413. package/dist/esm-es5/ion-modal.entry.js +1 -1
  414. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  415. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  416. package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
  417. package/dist/esm-es5/ion-popover.entry.js +1 -1
  418. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  419. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  420. package/dist/esm-es5/ion-range.entry.js +1 -1
  421. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  422. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  423. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  424. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  425. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  426. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  427. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  428. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  429. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  430. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  431. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  432. package/dist/esm-es5/ion-text.entry.js +1 -1
  433. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  434. package/dist/esm-es5/ion-toast.entry.js +1 -1
  435. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  436. package/dist/esm-es5/{ionic-global-ad9a1810.js → ionic-global-94f25d1b.js} +1 -1
  437. package/dist/esm-es5/ionic.js +1 -1
  438. package/dist/esm-es5/{ios.transition-b76c7020.js → ios.transition-a50a9a55.js} +1 -1
  439. package/dist/esm-es5/loader.js +1 -1
  440. package/dist/esm-es5/md.transition-0da92976.js +4 -0
  441. package/dist/esm-es5/{notch-controller-15d281a4.js → notch-controller-6bd3e0f9.js} +1 -1
  442. package/dist/esm-es5/overlays-b874c3c3.js +4 -0
  443. package/dist/esm-es5/{status-tap-5a95077d.js → status-tap-dfea3607.js} +1 -1
  444. package/dist/esm-es5/{swipe-back-fa0ec5cd.js → swipe-back-c6d0e5d9.js} +1 -1
  445. package/dist/html.html-data.json +13 -1
  446. package/dist/ionic/index.esm.js +1 -1
  447. package/dist/ionic/ionic.esm.js +1 -1
  448. package/dist/ionic/ionic.js +1 -1
  449. package/dist/ionic/{p-30cd5e7b.js → p-0047bd0e.js} +1 -1
  450. package/dist/ionic/{p-70e34286.system.entry.js → p-01a1ff55.system.entry.js} +1 -1
  451. package/dist/ionic/{p-b0ff8075.entry.js → p-01de45e4.entry.js} +1 -1
  452. package/dist/ionic/{p-2e14c533.system.js → p-0609a7d8.system.js} +1 -1
  453. package/dist/ionic/p-08ab4c96.js +4 -0
  454. package/dist/ionic/{p-e04b9647.system.entry.js → p-094cb5ba.system.entry.js} +1 -1
  455. package/dist/ionic/p-0aac3a1c.js +4 -0
  456. package/dist/ionic/{p-de55ec45.js → p-0b743628.js} +1 -1
  457. package/dist/ionic/{p-b253ad7f.js → p-12a8643e.js} +1 -1
  458. package/dist/ionic/p-185d82fc.entry.js +4 -0
  459. package/dist/ionic/p-193921ce.entry.js +4 -0
  460. package/dist/ionic/{p-b8c685a7.system.js → p-1bc9b5f5.system.js} +1 -1
  461. package/dist/ionic/p-1cd372ed.js +4 -0
  462. package/dist/ionic/{p-123b4809.js → p-1e151efb.js} +1 -1
  463. package/dist/ionic/{p-bf05cbc7.entry.js → p-211d8901.entry.js} +1 -1
  464. package/dist/ionic/p-212f2c37.entry.js +4 -0
  465. package/dist/ionic/p-2433bf5e.system.js +4 -0
  466. package/dist/ionic/p-2732a6ce.entry.js +4 -0
  467. package/dist/ionic/{p-89ca4c4b.system.js → p-280f1fe7.system.js} +1 -1
  468. package/dist/ionic/{p-94be3ad7.js → p-2c118b1e.js} +1 -1
  469. package/dist/ionic/p-2c1408df.system.js +5 -0
  470. package/dist/ionic/p-2e2808f3.entry.js +4 -0
  471. package/dist/ionic/{p-0457213c.entry.js → p-32086ea4.entry.js} +1 -1
  472. package/dist/ionic/{p-16a61810.entry.js → p-339dee28.entry.js} +1 -1
  473. package/dist/ionic/{p-88e9052d.entry.js → p-34e2b446.entry.js} +1 -1
  474. package/dist/ionic/{p-eb07b88f.entry.js → p-374838e4.entry.js} +1 -1
  475. package/dist/ionic/p-3789920e.js +4 -0
  476. package/dist/ionic/{p-bdca4784.js → p-37aab7f7.js} +1 -1
  477. package/dist/ionic/p-3b7d328b.system.entry.js +4 -0
  478. package/dist/ionic/{p-f53d074d.system.entry.js → p-3b9edd02.system.entry.js} +1 -1
  479. package/dist/ionic/{p-5e23bea8.system.entry.js → p-3d23a234.system.entry.js} +1 -1
  480. package/dist/ionic/{p-717e2526.system.entry.js → p-3f75319a.system.entry.js} +2 -2
  481. package/dist/ionic/{p-c858f685.js → p-46bcc2f5.js} +1 -1
  482. package/dist/ionic/p-47686f0a.system.entry.js +4 -0
  483. package/dist/ionic/{p-afd6d696.system.entry.js → p-47d7ffb4.system.entry.js} +1 -1
  484. package/dist/ionic/{p-7b1ed642.system.entry.js → p-48331301.system.entry.js} +1 -1
  485. package/dist/ionic/{p-a3df16b9.system.entry.js → p-491ec3d6.system.entry.js} +1 -1
  486. package/dist/ionic/p-495aabd4.system.entry.js +4 -0
  487. package/dist/ionic/{p-cde3ac34.system.entry.js → p-49616da4.system.entry.js} +1 -1
  488. package/dist/ionic/p-4c68b459.system.entry.js +4 -0
  489. package/dist/ionic/{p-5cb5f63d.system.entry.js → p-4cc54847.system.entry.js} +1 -1
  490. package/dist/ionic/p-4da978ac.entry.js +4 -0
  491. package/dist/ionic/{p-a022b684.system.entry.js → p-4f9018d4.system.entry.js} +1 -1
  492. package/dist/ionic/{p-3481d54e.system.entry.js → p-55ae3e14.system.entry.js} +1 -1
  493. package/dist/ionic/{p-aaaa615c.system.entry.js → p-56271222.system.entry.js} +1 -1
  494. package/dist/ionic/{p-42a9f663.system.entry.js → p-565a12d7.system.entry.js} +1 -1
  495. package/dist/ionic/{p-d39ab63d.entry.js → p-56b810d5.entry.js} +1 -1
  496. package/dist/ionic/{p-31c495c2.js → p-56ee6d9a.js} +1 -1
  497. package/dist/ionic/{p-a85d9047.system.entry.js → p-5a0345f7.system.entry.js} +1 -1
  498. package/dist/ionic/{p-ba97a133.system.entry.js → p-5b8d7cdb.system.entry.js} +1 -1
  499. package/dist/ionic/p-5d2011e1.entry.js +4 -0
  500. package/dist/ionic/p-5f3d659f.entry.js +4 -0
  501. package/dist/ionic/p-6236eae6.entry.js +4 -0
  502. package/dist/ionic/{p-8794fa00.system.entry.js → p-625ef2fb.system.entry.js} +1 -1
  503. package/dist/ionic/{p-6871553b.system.js → p-62b7320a.system.js} +1 -1
  504. package/dist/ionic/{p-6525a8cd.system.js → p-638865d1.system.js} +1 -1
  505. package/dist/ionic/p-662cccde.entry.js +4 -0
  506. package/dist/ionic/p-68416ff0.entry.js +4 -0
  507. package/dist/ionic/{p-c747f89b.system.entry.js → p-686ddecb.system.entry.js} +2 -2
  508. package/dist/ionic/p-6a6550fa.js +4 -0
  509. package/dist/ionic/p-6a6c61b1.system.entry.js +4 -0
  510. package/dist/ionic/p-6afef6c1.system.js +4 -0
  511. package/dist/ionic/{p-abcedc15.system.entry.js → p-6b178502.system.entry.js} +1 -1
  512. package/dist/ionic/p-6c45c617.js +4 -0
  513. package/dist/ionic/{p-74deb358.system.js → p-6ecddf53.system.js} +1 -1
  514. package/dist/ionic/{p-5c580e89.entry.js → p-70929384.entry.js} +1 -1
  515. package/dist/ionic/p-73d70509.system.js +4 -0
  516. package/dist/ionic/{p-ae35294f.system.entry.js → p-776f7b9e.system.entry.js} +1 -1
  517. package/dist/ionic/{p-a3f572a7.js → p-779aede8.js} +1 -1
  518. package/dist/ionic/p-7872e970.system.entry.js +4 -0
  519. package/dist/ionic/{p-657ccdd6.entry.js → p-804ffec9.entry.js} +1 -1
  520. package/dist/ionic/{p-a0b28c69.system.entry.js → p-81c8fa81.system.entry.js} +1 -1
  521. package/dist/ionic/{p-8e651c29.entry.js → p-8294b727.entry.js} +1 -1
  522. package/dist/ionic/p-8528c070.entry.js +4 -0
  523. package/dist/ionic/p-87e81684.system.entry.js +4 -0
  524. package/dist/ionic/p-8954015c.entry.js +4 -0
  525. package/dist/ionic/p-8a1b0abb.system.js +4 -0
  526. package/dist/ionic/{p-5928fac9.system.entry.js → p-8a335b91.system.entry.js} +1 -1
  527. package/dist/ionic/{p-cd9a7017.system.entry.js → p-8eba832c.system.entry.js} +1 -1
  528. package/dist/ionic/{p-91cb3f9a.entry.js → p-8ed4de58.entry.js} +1 -1
  529. package/dist/ionic/{p-502780e4.entry.js → p-917bb906.entry.js} +1 -1
  530. package/dist/ionic/{p-b2595011.system.entry.js → p-93f86b06.system.entry.js} +1 -1
  531. package/dist/ionic/{p-9393a49f.js → p-942a9358.js} +1 -1
  532. package/dist/ionic/p-9625a2e6.entry.js +4 -0
  533. package/dist/ionic/{p-f0194418.system.entry.js → p-9bc8bd0c.system.entry.js} +1 -1
  534. package/dist/ionic/{p-18beebdf.system.entry.js → p-9d53b773.system.entry.js} +2 -2
  535. package/dist/ionic/{p-dcb5711d.entry.js → p-9fbfbaef.entry.js} +1 -1
  536. package/dist/ionic/p-a04ecf1a.system.js +4 -0
  537. package/dist/ionic/{p-c2289cd1.js → p-a1036ce7.js} +1 -1
  538. package/dist/ionic/{p-ea25b4c8.system.entry.js → p-a3b2d4a7.system.entry.js} +2 -2
  539. package/dist/ionic/{p-5f169eba.entry.js → p-a5cd2e1f.entry.js} +1 -1
  540. package/dist/ionic/p-a5d9fafe.entry.js +4 -0
  541. package/dist/ionic/{p-49543c9c.system.js → p-a667dd1f.system.js} +1 -1
  542. package/dist/ionic/{p-df504a37.system.js → p-a875459d.system.js} +1 -1
  543. package/dist/ionic/p-ad60590b.entry.js +4 -0
  544. package/dist/ionic/{p-1924f2e0.system.entry.js → p-b1bebf4a.system.entry.js} +2 -2
  545. package/dist/ionic/p-b535c93a.entry.js +4 -0
  546. package/dist/ionic/p-b8735394.entry.js +4 -0
  547. package/dist/ionic/p-bb5bbcdf.js +4 -0
  548. package/dist/ionic/{p-37c33319.system.js → p-bd313b73.system.js} +1 -1
  549. package/dist/ionic/p-c379d010.system.entry.js +4 -0
  550. package/dist/ionic/{p-7173ba59.system.entry.js → p-c5ce0862.system.entry.js} +2 -2
  551. package/dist/ionic/p-c76ef1ea.entry.js +4 -0
  552. package/dist/ionic/p-c8580577.system.js +4 -0
  553. package/dist/ionic/{p-275705e5.entry.js → p-cc0cf2d1.entry.js} +1 -1
  554. package/dist/ionic/{p-c39cc96d.system.entry.js → p-d3a95477.system.entry.js} +1 -1
  555. package/dist/ionic/{p-ceceac26.js → p-d68ecea4.js} +1 -1
  556. package/dist/ionic/p-d873a8c2.system.entry.js +4 -0
  557. package/dist/ionic/{p-64db1331.entry.js → p-dbd77435.entry.js} +1 -1
  558. package/dist/ionic/p-dc2d302c.entry.js +4 -0
  559. package/dist/ionic/{p-601e17b4.entry.js → p-dd2996cf.entry.js} +1 -1
  560. package/dist/ionic/{p-508a4c87.entry.js → p-dec423a3.entry.js} +1 -1
  561. package/dist/ionic/{p-1131946f.system.entry.js → p-deeae694.system.entry.js} +1 -1
  562. package/dist/ionic/p-e06d65b3.system.entry.js +4 -0
  563. package/dist/ionic/{p-d4cadd34.system.js → p-e0948431.system.js} +1 -1
  564. package/dist/ionic/{p-86813176.system.entry.js → p-e15cfec4.system.entry.js} +1 -1
  565. package/dist/ionic/p-e1bd8d9c.system.entry.js +4 -0
  566. package/dist/ionic/{p-1636923f.system.js → p-e34eefb5.system.js} +1 -1
  567. package/dist/ionic/{p-b6279412.entry.js → p-e57a212a.entry.js} +1 -1
  568. package/dist/ionic/{p-3471a7c0.system.entry.js → p-e6ee6ead.system.entry.js} +1 -1
  569. package/dist/ionic/p-e7055fb8.entry.js +4 -0
  570. package/dist/ionic/p-ea723fc4.entry.js +4 -0
  571. package/dist/ionic/p-ead0d463.js +5 -0
  572. package/dist/ionic/{p-30d77a91.system.js → p-ebc1ca90.system.js} +1 -1
  573. package/dist/ionic/p-ed3ad350.entry.js +4 -0
  574. package/dist/ionic/{p-5d7e32ce.js → p-efef9f3a.js} +1 -1
  575. package/dist/ionic/p-f4ccaa64.entry.js +4 -0
  576. package/dist/ionic/p-f4fb429a.system.js +4 -0
  577. package/dist/ionic/{p-a5951821.system.js → p-f549716b.system.js} +1 -1
  578. package/dist/ionic/p-f6a50d5c.entry.js +4 -0
  579. package/dist/ionic/p-fbd01db3.system.js +4 -0
  580. package/dist/ionic/p-fc053a55.entry.js +4 -0
  581. package/dist/ionic/{p-1f19958f.system.entry.js → p-fd059a23.system.entry.js} +1 -1
  582. package/dist/ionic/{p-f8c96502.system.entry.js → p-fdcf1482.system.entry.js} +1 -1
  583. package/dist/ionic/{p-e2bb92ed.system.js → p-fe320051.system.js} +1 -1
  584. package/dist/ionic/{p-3079950e.entry.js → p-fe3ae39d.entry.js} +1 -1
  585. package/dist/types/components/datetime/datetime-interface.d.ts +10 -0
  586. package/dist/types/components/datetime/datetime.d.ts +10 -1
  587. package/dist/types/components/datetime/utils/format.d.ts +7 -13
  588. package/dist/types/components/datetime/utils/manipulation.d.ts +7 -7
  589. package/dist/types/components/datetime/utils/state.d.ts +2 -2
  590. package/dist/types/components/datetime/utils/validate.d.ts +8 -0
  591. package/dist/types/components/input/input.utils.d.ts +1 -1
  592. package/dist/types/components/range/range.d.ts +29 -0
  593. package/dist/types/components/searchbar/searchbar.d.ts +37 -0
  594. package/dist/types/components/toggle/toggle.d.ts +1 -1
  595. package/dist/types/components.d.ts +36 -4
  596. package/dist/types/utils/framework-delegate.d.ts +1 -1
  597. package/dist/types/utils/hardware-back-button.d.ts +1 -1
  598. package/dist/types/utils/helpers.d.ts +1 -1
  599. package/dist/types/utils/keyboard/keyboard-controller.d.ts +1 -1
  600. package/dist/types/utils/overlays.d.ts +7 -2
  601. package/hydrate/index.js +737 -340
  602. package/package.json +9 -5
  603. package/dist/collection/components/modal/test/a11y/modal.spec.js +0 -22
  604. package/dist/esm-es5/app-globals-5cf6195b.js +0 -4
  605. package/dist/esm-es5/data-0f3ab200.js +0 -4
  606. package/dist/esm-es5/framework-delegate-fed7fe7c.js +0 -4
  607. package/dist/esm-es5/hardware-back-button-b410a047.js +0 -4
  608. package/dist/esm-es5/helpers-c0b9ca37.js +0 -4
  609. package/dist/esm-es5/index-47b2066d.js +0 -4
  610. package/dist/esm-es5/index-4c30cddd.js +0 -5
  611. package/dist/esm-es5/index-d64f34ea.js +0 -4
  612. package/dist/esm-es5/input-shims-b90ca55f.js +0 -4
  613. package/dist/esm-es5/md.transition-564937a7.js +0 -4
  614. package/dist/esm-es5/overlays-04a9a43f.js +0 -4
  615. package/dist/ionic/p-027f3674.entry.js +0 -4
  616. package/dist/ionic/p-05d560ec.entry.js +0 -4
  617. package/dist/ionic/p-0b34d3a7.system.js +0 -4
  618. package/dist/ionic/p-0e23c289.system.entry.js +0 -4
  619. package/dist/ionic/p-1f16d040.entry.js +0 -4
  620. package/dist/ionic/p-21ca1f1c.js +0 -4
  621. package/dist/ionic/p-2327064c.entry.js +0 -4
  622. package/dist/ionic/p-23c73017.entry.js +0 -4
  623. package/dist/ionic/p-2e1f014a.system.entry.js +0 -4
  624. package/dist/ionic/p-337ac0f5.entry.js +0 -4
  625. package/dist/ionic/p-396083cc.entry.js +0 -4
  626. package/dist/ionic/p-3a7de59c.entry.js +0 -4
  627. package/dist/ionic/p-3c6f02cf.system.js +0 -4
  628. package/dist/ionic/p-3d961d93.entry.js +0 -4
  629. package/dist/ionic/p-3e9ad72a.system.entry.js +0 -4
  630. package/dist/ionic/p-43a5edee.entry.js +0 -4
  631. package/dist/ionic/p-49aba878.js +0 -4
  632. package/dist/ionic/p-4f777b5e.js +0 -4
  633. package/dist/ionic/p-4fda5c35.entry.js +0 -4
  634. package/dist/ionic/p-5b40d967.entry.js +0 -4
  635. package/dist/ionic/p-5c2ae448.js +0 -4
  636. package/dist/ionic/p-5c6a04bd.entry.js +0 -4
  637. package/dist/ionic/p-61ba2137.system.js +0 -4
  638. package/dist/ionic/p-64761c90.entry.js +0 -4
  639. package/dist/ionic/p-64856c3c.system.entry.js +0 -4
  640. package/dist/ionic/p-6486e393.system.entry.js +0 -4
  641. package/dist/ionic/p-667e3e2d.entry.js +0 -4
  642. package/dist/ionic/p-68ba8e77.system.entry.js +0 -4
  643. package/dist/ionic/p-72fa96bf.system.js +0 -5
  644. package/dist/ionic/p-7330c044.system.js +0 -4
  645. package/dist/ionic/p-7ce40e7b.entry.js +0 -4
  646. package/dist/ionic/p-9056778e.system.entry.js +0 -4
  647. package/dist/ionic/p-95d5a097.entry.js +0 -4
  648. package/dist/ionic/p-9cd7ba27.system.js +0 -4
  649. package/dist/ionic/p-9ec7208d.system.js +0 -4
  650. package/dist/ionic/p-a6e465f5.entry.js +0 -4
  651. package/dist/ionic/p-a8a56449.entry.js +0 -4
  652. package/dist/ionic/p-bd4787eb.entry.js +0 -4
  653. package/dist/ionic/p-c11bab7e.entry.js +0 -4
  654. package/dist/ionic/p-c1797ec5.system.entry.js +0 -4
  655. package/dist/ionic/p-c308f773.entry.js +0 -4
  656. package/dist/ionic/p-c80c7e90.system.js +0 -4
  657. package/dist/ionic/p-cb9e71e0.entry.js +0 -4
  658. package/dist/ionic/p-db30f71b.entry.js +0 -4
  659. package/dist/ionic/p-dbcba5a2.js +0 -4
  660. package/dist/ionic/p-e81bf09e.system.entry.js +0 -4
  661. package/dist/ionic/p-e9f9388e.system.js +0 -4
  662. package/dist/ionic/p-ed7a529f.js +0 -5
  663. package/dist/ionic/p-edcada2b.system.entry.js +0 -4
  664. package/dist/ionic/p-f460c7ae.entry.js +0 -4
  665. package/dist/ionic/p-f7dce541.js +0 -4
  666. package/dist/ionic/p-f840d817.entry.js +0 -4
  667. package/dist/ionic/p-fb9f8495.system.entry.js +0 -4
  668. package/dist/ionic/p-fd2aa50c.js +0 -4
  669. /package/dist/ionic/{p-b5839dc2.js → p-1b3ffb2f.js} +0 -0
  670. /package/dist/ionic/{p-fd8ced99.system.js → p-5fc8d5ef.system.js} +0 -0
@@ -39,7 +39,7 @@ export class Spinner {
39
39
  svgs.push(buildLine(spinner, duration, i, spinner.lines));
40
40
  }
41
41
  }
42
- return (h(Host, { key: '47cd6cd98e36e5b99fbe263a6a102610cae240c3', class: createColorClasses(self.color, {
42
+ return (h(Host, { key: '9e08bf306b28bdd76884d353dcaaf31c1bb591f2', class: createColorClasses(self.color, {
43
43
  [mode]: true,
44
44
  [`spinner-${spinnerName}`]: true,
45
45
  'spinner-paused': self.paused || config.getBoolean('_testing'),
@@ -108,12 +108,12 @@ export class SplitPane {
108
108
  }
109
109
  render() {
110
110
  const mode = getIonMode(this);
111
- return (h(Host, { key: '3efe241375d23ae12c47927aa1fc1f3f4b4e5807', class: {
111
+ return (h(Host, { key: '57ee198506248916e74d8d082ad547a471e6cc73', class: {
112
112
  [mode]: true,
113
113
  // Used internally for styling
114
114
  [`split-pane-${mode}`]: true,
115
115
  'split-pane-visible': this.visible,
116
- } }, h("slot", { key: 'd5c94319658e2291dcc356e6ed7a9abc1a48a8b9' })));
116
+ } }, h("slot", { key: '2cd89fa50cfe8a7a6bdda981bb89d5a24a8eec88' })));
117
117
  }
118
118
  static get is() { return "ion-split-pane"; }
119
119
  static get encapsulation() { return "shadow"; }
@@ -48,10 +48,10 @@ export class Tab {
48
48
  }
49
49
  render() {
50
50
  const { tab, active, component } = this;
51
- return (h(Host, { key: '0f4b90f0b1027e89bd447ace17af31c8e155a827', role: "tabpanel", "aria-hidden": !active ? 'true' : null, "aria-labelledby": `tab-button-${tab}`, class: {
51
+ return (h(Host, { key: '4fe50fa809503794be2ef91383e49b72cad6fa82', role: "tabpanel", "aria-hidden": !active ? 'true' : null, "aria-labelledby": `tab-button-${tab}`, class: {
52
52
  'ion-page': component === undefined,
53
53
  'tab-hidden': !active,
54
- } }, h("slot", { key: 'ec3eaacf8b7085510e89273aa8373805ee98a381' })));
54
+ } }, h("slot", { key: '937777a826936d6b399329a926a704008339803e' })));
55
55
  }
56
56
  static get is() { return "ion-tab"; }
57
57
  static get encapsulation() { return "shadow"; }
@@ -51,11 +51,11 @@ export class TabBar {
51
51
  const { color, translucent, keyboardVisible } = this;
52
52
  const mode = getIonMode(this);
53
53
  const shouldHide = keyboardVisible && this.el.getAttribute('slot') !== 'top';
54
- return (h(Host, { key: 'e2b4b50270f171ed251359df6c65c5e7e4d526a4', role: "tablist", "aria-hidden": shouldHide ? 'true' : null, class: createColorClasses(color, {
54
+ return (h(Host, { key: '5083528e7f802d2f323ce50585edc98eeb9754c6', role: "tablist", "aria-hidden": shouldHide ? 'true' : null, class: createColorClasses(color, {
55
55
  [mode]: true,
56
56
  'tab-bar-translucent': translucent,
57
57
  'tab-bar-hidden': shouldHide,
58
- }) }, h("slot", { key: '37495b2eddd01a758ceaeb36426abc9bd20bcca3' })));
58
+ }) }, h("slot", { key: 'eb33cdd12da49062219d4aa17a319c3e6361c5c5' })));
59
59
  }
60
60
  static get is() { return "ion-tab-bar"; }
61
61
  static get encapsulation() { return "shadow"; }
@@ -70,7 +70,7 @@ export class TabButton {
70
70
  rel,
71
71
  target,
72
72
  };
73
- return (h(Host, { key: '9926f9392e7910ff3159397e4f907e0d7d2cf5a0', onClick: this.onClick, onKeyup: this.onKeyUp, id: tab !== undefined ? `tab-button-${tab}` : null, class: {
73
+ return (h(Host, { key: 'c7b6a72766b71f34800137dadcf29af657bebddf', onClick: this.onClick, onKeyup: this.onKeyUp, id: tab !== undefined ? `tab-button-${tab}` : null, class: {
74
74
  [mode]: true,
75
75
  'tab-selected': selected,
76
76
  'tab-disabled': disabled,
@@ -82,7 +82,7 @@ export class TabButton {
82
82
  'ion-activatable': true,
83
83
  'ion-selectable': true,
84
84
  'ion-focusable': true,
85
- } }, h("a", Object.assign({ key: '4b3ace749583a5502e94462f9a70c5158fe0194a' }, attrs, { class: "button-native", part: "native", role: "tab", "aria-selected": selected ? 'true' : null, "aria-disabled": disabled ? 'true' : null, tabindex: disabled ? '-1' : undefined }, inheritedAttributes), h("span", { key: 'a2a30c02fbd5052da12586a5ab00a45f3bf53b88', class: "button-inner" }, h("slot", { key: '3fb22ffbb09000d99537b531220c029330ae6940' })), mode === 'md' && h("ion-ripple-effect", { type: "unbounded" }))));
85
+ } }, h("a", Object.assign({ key: 'a1eca4a5cf0dfdb55099811d03f204f7b3807a2e' }, attrs, { class: "button-native", part: "native", role: "tab", "aria-selected": selected ? 'true' : null, "aria-disabled": disabled ? 'true' : null, tabindex: disabled ? '-1' : undefined }, inheritedAttributes), h("span", { key: '888a6d8b95c2f0ca8f74f492729bd28f0d3273d5', class: "button-inner" }, h("slot", { key: '83a234af52ffce9ff0f4cc497712c962115a5813' })), mode === 'md' && h("ion-ripple-effect", { key: '771aff1b83233411e0cf706c3e94c78bca534794', type: "unbounded" }))));
86
86
  }
87
87
  static get is() { return "ion-tab-button"; }
88
88
  static get encapsulation() { return "shadow"; }
@@ -135,7 +135,7 @@ export class Tabs {
135
135
  return Array.from(this.el.querySelectorAll('ion-tab'));
136
136
  }
137
137
  render() {
138
- return (h(Host, { key: '9044f05f4716fd9c158864175290dfb044e63539', onIonTabButtonClick: this.onTabClicked }, h("slot", { key: '178492f52f15a042e47531007a3564a935847818', name: "top" }), h("div", { key: 'b3affaaeb7752194acde36d9de74dbe2b3280cd1', class: "tabs-inner" }, h("slot", { key: '98f0f4e2903f1a6cec041e06b75073c57960a912' })), h("slot", { key: '0899482561bdaf35e97e5a40860c40978daca03a', name: "bottom" })));
138
+ return (h(Host, { key: '5102fdd8ae80408811312631f0739c356d913840', onIonTabButtonClick: this.onTabClicked }, h("slot", { key: '55f781cd010dcebf9675f2a0b4eab9f4271b780e', name: "top" }), h("div", { key: '2da0ee7b8c82e4bfa42f8bc5873e23e50a88c405', class: "tabs-inner" }, h("slot", { key: '6335a62a10398c008c91f87f15b4a940a95e175d' })), h("slot", { key: '9b6f08a21c703cc7fdebd48eb746d0fde6a8454d', name: "bottom" })));
139
139
  }
140
140
  static get is() { return "ion-tabs"; }
141
141
  static get encapsulation() { return "shadow"; }
@@ -13,9 +13,9 @@ export class Text {
13
13
  }
14
14
  render() {
15
15
  const mode = getIonMode(this);
16
- return (h(Host, { key: '8922ebdd7486c9cb9f9b547a49e5be2261df4ba1', class: createColorClasses(this.color, {
16
+ return (h(Host, { key: '4330b56cbc4e15953d9b3162fb40af728a8195dd', class: createColorClasses(this.color, {
17
17
  [mode]: true,
18
- }) }, h("slot", { key: '164cbd0f81a00adfac04f544524e905f721c121c' })));
18
+ }) }, h("slot", { key: 'ec674a71d8fbb04d537fd79d617d9db4a607c340' })));
19
19
  }
20
20
  static get is() { return "ion-text"; }
21
21
  static get encapsulation() { return "shadow"; }
@@ -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: '2b3d5139161f4b9075dce537c14b4087986b37c4', class: getIonMode(this) }, h("slot", { key: '3c4838c43e1230f9413a3cb66584417fd11382b2' })));
8
+ return (h(Host, { key: 'd2667635930e4c0896805f452357e7dc9086bc72', class: getIonMode(this) }, h("slot", { key: '66eb1487f3da4da2ef71b812a8d0f0fe884c7d81' })));
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: 'b68a272a33ec81d282629a569676f64d3215a0c7', class: createColorClasses(this.color, {
30
+ return (h(Host, { key: '6f43362b782ef7d340c241bb66f1469663c03cc1', class: createColorClasses(this.color, {
31
31
  [mode]: true,
32
32
  [`title-${size}`]: true,
33
33
  'title-rtl': document.dir === 'rtl',
34
- }) }, h("div", { key: '9069816a14e6e358695c5bd465787cf297c761bc', class: "toolbar-title" }, h("slot", { key: '8894bd04f2292b54050ee864abb5396deadf9874' }))));
34
+ }) }, h("div", { key: '9c3ff1a289e533ee3426b71ab5560fbea3529502', class: "toolbar-title" }, h("slot", { key: '50d5cc5a1519ad58f1994d2f8c8f08f62baac1fe' }))));
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: 'c8d7e7d2baa01d3ed5d65a845bc61acf087c0b18', tabindex: "-1" }, this.htmlAttributes, { style: {
391
+ return (h(Host, Object.assign({ key: '23803334fb668f6ce7044d3a321cb84bc753bd16', 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: '27c0feeb89c4efb47c42623a4b036ed84338ed10', class: wrapperClass }, h("div", { key: '41d5a3069f92e4a6acef2793fa4e236cdbdaae88', 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: '176f497bc990ef2ecc14c7fa90dd3a54a912030a', 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: '7cd7138ba079fccf97f318b91e9986491ab4214d', class: wrapperClass }, h("div", { key: '93b78fa64e24435adeb77a04c1d1d53d2f093864', class: "toast-container", part: "container" }, this.renderButtons(startButtons, 'start'), this.icon !== undefined && (h("ion-icon", { key: '9a3c71b164ebcfba2540acb7568beffa76b62f47', class: "toast-icon", part: "icon", icon: this.icon, lazy: false, "aria-hidden": "true" })), h("div", { key: 'feb9268102d844f1314205f7440de7066cf0620e', 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"; }
@@ -421,7 +421,7 @@ Developers can dismiss this warning by removing their usage of the "legacy" prop
421
421
  "optional": false,
422
422
  "docs": {
423
423
  "tags": [],
424
- "text": "How to control the alignment of the toggle and label on the cross axis.\n``\"start\"`: The label and control will appear on the left of the cross axis in LTR, and on the right side in RTL.\n`\"center\"`: The label and control will appear at the center of the cross axis in both LTR and RTL."
424
+ "text": "How to control the alignment of the toggle and label on the cross axis.\n`\"start\"`: The label and control will appear on the left of the cross axis in LTR, and on the right side in RTL.\n`\"center\"`: The label and control will appear at the center of the cross axis in both LTR and RTL."
425
425
  },
426
426
  "attribute": "alignment",
427
427
  "reflect": false,
@@ -3,13 +3,141 @@
3
3
  */
4
4
  import { expect } from "@playwright/test";
5
5
  import { configs, test } from "../../../../utils/test/playwright/index";
6
- configs().forEach(({ title, screenshot, config }) => {
6
+ configs({ themes: ['light', 'dark'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
7
+ test.describe(title('toolbar: basic (LTR only)'), () => {
8
+ test('should not have visual regressions with text only', async ({ page }) => {
9
+ await page.setContent(`
10
+ <ion-header>
11
+ <ion-toolbar>
12
+ <ion-title>Toolbar</ion-title>
13
+ </ion-toolbar>
14
+ </ion-header>
15
+ `, config);
16
+ const header = page.locator('ion-header');
17
+ await expect(header).toHaveScreenshot(screenshot(`toolbar-basic-text-only`));
18
+ });
19
+ });
20
+ });
21
+ configs({ themes: ['light', 'dark'] }).forEach(({ title, screenshot, config }) => {
7
22
  test.describe(title('toolbar: basic'), () => {
8
- test('should not have visual regressions', async ({ page }) => {
9
- await page.goto(`/src/components/toolbar/test/basic`, config);
10
- // capture both header toolbars at once, but don't include all the white space in the ion-content
23
+ test('should truncate long title with ellipsis', async ({ page }) => {
24
+ await page.setContent(`
25
+ <ion-header>
26
+ <ion-toolbar>
27
+ <ion-title>This is the title that never ends. It just goes on and on my friend.</ion-title>
28
+ </ion-toolbar>
29
+ </ion-header>
30
+ `, config);
31
+ const header = page.locator('ion-header');
32
+ await expect(header).toHaveScreenshot(screenshot(`toolbar-basic-long-text`));
33
+ });
34
+ test('should not have visual regressions with icon-only buttons', async ({ page }) => {
35
+ await page.setContent(`
36
+ <ion-header>
37
+ <ion-toolbar>
38
+ <ion-buttons slot="secondary">
39
+ <ion-button>
40
+ <ion-icon slot="icon-only" name="person-circle"></ion-icon>
41
+ </ion-button>
42
+ <ion-button>
43
+ <ion-icon slot="icon-only" name="search"></ion-icon>
44
+ </ion-button>
45
+ </ion-buttons>
46
+ <ion-buttons slot="primary">
47
+ <ion-button color="secondary">
48
+ <ion-icon slot="icon-only" ios="ellipsis-horizontal" md="ellipsis-vertical"></ion-icon>
49
+ </ion-button>
50
+ </ion-buttons>
51
+ <ion-title>Toolbar</ion-title>
52
+ </ion-toolbar>
53
+ <ion-toolbar>
54
+ <ion-buttons slot="secondary">
55
+ <ion-button class="ion-activated">
56
+ <ion-icon slot="icon-only" name="person-circle"></ion-icon>
57
+ </ion-button>
58
+ <ion-button class="ion-activated">
59
+ <ion-icon slot="icon-only" name="search"></ion-icon>
60
+ </ion-button>
61
+ </ion-buttons>
62
+ <ion-buttons slot="primary">
63
+ <ion-button color="secondary" class="ion-activated">
64
+ <ion-icon slot="icon-only" ios="ellipsis-horizontal" md="ellipsis-vertical"></ion-icon>
65
+ </ion-button>
66
+ </ion-buttons>
67
+ <ion-title>Activated Buttons</ion-title>
68
+ </ion-toolbar>
69
+ </ion-header>
70
+ `, config);
71
+ const header = page.locator('ion-header');
72
+ await expect(header).toHaveScreenshot(screenshot(`toolbar-basic-icon-buttons`));
73
+ });
74
+ test('should not have visual regressions with buttons with icons and text', async ({ page }) => {
75
+ await page.setContent(`
76
+ <ion-header>
77
+ <ion-toolbar>
78
+ <ion-buttons slot="secondary">
79
+ <ion-button fill="solid">
80
+ <ion-icon slot="start" name="person-circle"></ion-icon>
81
+ Solid
82
+ </ion-button>
83
+ </ion-buttons>
84
+ <ion-title>Solid</ion-title>
85
+ <ion-buttons slot="primary">
86
+ <ion-button fill="solid" color="secondary">
87
+ Help
88
+ <ion-icon slot="end" name="help-circle"></ion-icon>
89
+ </ion-button>
90
+ </ion-buttons>
91
+ </ion-toolbar>
92
+ <ion-toolbar>
93
+ <ion-buttons slot="secondary">
94
+ <ion-button fill="solid" class="ion-activated">
95
+ <ion-icon slot="start" name="person-circle"></ion-icon>
96
+ Solid
97
+ </ion-button>
98
+ </ion-buttons>
99
+ <ion-title>Solid Activated</ion-title>
100
+ <ion-buttons slot="primary">
101
+ <ion-button fill="solid" color="secondary" class="ion-activated">
102
+ Help
103
+ <ion-icon slot="end" name="help-circle"></ion-icon>
104
+ </ion-button>
105
+ </ion-buttons>
106
+ </ion-toolbar>
107
+ <ion-toolbar>
108
+ <ion-buttons slot="secondary">
109
+ <ion-button fill="outline">
110
+ <ion-icon slot="start" name="star"></ion-icon>
111
+ Star
112
+ </ion-button>
113
+ </ion-buttons>
114
+ <ion-title>Outline</ion-title>
115
+ <ion-buttons slot="primary">
116
+ <ion-button color="secondary" fill="outline">
117
+ Info
118
+ <ion-icon slot="end" name="information-circle"></ion-icon>
119
+ </ion-button>
120
+ </ion-buttons>
121
+ </ion-toolbar>
122
+ <ion-toolbar>
123
+ <ion-buttons slot="secondary">
124
+ <ion-button fill="outline" class="ion-activated">
125
+ <ion-icon slot="start" name="star"></ion-icon>
126
+ Star
127
+ </ion-button>
128
+ </ion-buttons>
129
+ <ion-title>Outline Activated</ion-title>
130
+ <ion-buttons slot="primary">
131
+ <ion-button color="secondary" fill="outline" class="ion-activated">
132
+ Info
133
+ <ion-icon slot="end" name="information-circle"></ion-icon>
134
+ </ion-button>
135
+ </ion-buttons>
136
+ </ion-toolbar>
137
+ </ion-header>
138
+ `, config);
11
139
  const header = page.locator('ion-header');
12
- await expect(header).toHaveScreenshot(screenshot(`toolbar-basic`));
140
+ await expect(header).toHaveScreenshot(screenshot(`toolbar-basic-text-icon-buttons`));
13
141
  });
14
142
  });
15
143
  });
@@ -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: 'afac0f08f3981483c072984ce047df5dc9cc1e99', class: Object.assign(Object.assign({}, childStyles), createColorClasses(this.color, {
65
+ return (h(Host, { key: '8907ed75fbb2b1dced55c481bba6363f1dca815b', 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: '30d4f1d0ec01cc646398301b5f7d469391eb35d2', class: "toolbar-background" }), h("div", { key: '175d1f283e670b57a9bf8fd2a8c5e7d0da749aa8', class: "toolbar-container" }, h("slot", { key: '4853b18092737b32b5995457536fa5a7fc2816ef', name: "start" }), h("slot", { key: '6eb4921200aad02d7977d134edad6cff2aad91ad', name: "secondary" }), h("div", { key: '024e0339c74c4b9a886d49e96723243719643dc2', class: "toolbar-content" }, h("slot", { key: 'b6452c84692fedd6efe33ac67907d01253b76f8f' })), h("slot", { key: '636e56eeaa318ce45a9c3854a30b8eb2819a33e0', name: "primary" }), h("slot", { key: 'a45c19b93dca3719d75bd4d99acc49de87137a7d', name: "end" }))));
68
+ })) }, h("div", { key: '6bfa09b08d6517f0d680f53b739854cecd631bc9', class: "toolbar-background" }), h("div", { key: '1531bd6dd9e0a5843309bba854b744c453037ad0', class: "toolbar-container" }, h("slot", { key: '881b41697d386eae651b019128573f0fa432cd33', name: "start" }), h("slot", { key: '64a284e6eae5311ac3125dfadb4bb32bdba9d089', name: "secondary" }), h("div", { key: 'c1f47503563b38084b27d7ba54f17ec478482b94', class: "toolbar-content" }, h("slot", { key: '9a85acfba72252705619ae32acae9c14f81aa57d' })), h("slot", { key: '89e08bd761dc6940dbebc5d06f5f080af204aa72', name: "primary" }), h("slot", { key: 'a1cb7d95627f8a3d24dd4b9c11718fc164f53674', name: "end" }))));
69
69
  }
70
70
  static get is() { return "ion-toolbar"; }
71
71
  static get encapsulation() { return "shadow"; }
@@ -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();
@@ -237,7 +237,7 @@ export const findItemLabel = (componentEl) => {
237
237
  }
238
238
  return null;
239
239
  };
240
- export const focusElement = (el) => {
240
+ export const focusVisibleElement = (el) => {
241
241
  el.focus();
242
242
  /**
243
243
  * When programmatically focusing an element,
@@ -96,7 +96,7 @@ export const enableScrollAssist = (componentEl, inputEl, contentEl, footerEl, ke
96
96
  const focusOut = () => {
97
97
  hasKeyboardBeenPresentedForTextField = false;
98
98
  win === null || win === void 0 ? void 0 : win.removeEventListener('ionKeyboardDidShow', keyboardShow);
99
- componentEl.removeEventListener('focusout', focusOut, true);
99
+ componentEl.removeEventListener('focusout', focusOut);
100
100
  };
101
101
  /**
102
102
  * When the input is about to receive
@@ -116,13 +116,13 @@ export const enableScrollAssist = (componentEl, inputEl, contentEl, footerEl, ke
116
116
  }
117
117
  jsSetFocus(componentEl, inputEl, contentEl, footerEl, keyboardHeight, addScrollPadding, disableClonedInput, platformHeight);
118
118
  win === null || win === void 0 ? void 0 : win.addEventListener('ionKeyboardDidShow', keyboardShow);
119
- componentEl.addEventListener('focusout', focusOut, true);
119
+ componentEl.addEventListener('focusout', focusOut);
120
120
  };
121
- componentEl.addEventListener('focusin', focusIn, true);
121
+ componentEl.addEventListener('focusin', focusIn);
122
122
  return () => {
123
- componentEl.removeEventListener('focusin', focusIn, true);
123
+ componentEl.removeEventListener('focusin', focusIn);
124
124
  win === null || win === void 0 ? void 0 : win.removeEventListener('ionKeyboardDidShow', keyboardShow);
125
- componentEl.removeEventListener('focusout', focusOut, true);
125
+ componentEl.removeEventListener('focusout', focusOut);
126
126
  };
127
127
  };
128
128
  /**
@@ -2,12 +2,12 @@
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 { shouldUseCloseWatcher } from "./hardware-back-button";
6
6
  import { config } from "../global/config";
7
7
  import { getIonMode } from "../global/ionic-global";
8
8
  import { CoreDelegate } from "./framework-delegate";
9
9
  import { OVERLAY_BACK_BUTTON_PRIORITY } from "./hardware-back-button";
10
- import { addEventListener, componentOnReady, focusElement, getElementRoot, removeEventListener } from "./helpers";
10
+ import { addEventListener, componentOnReady, focusVisibleElement, getElementRoot, removeEventListener, } from "./helpers";
11
11
  import { printIonWarning } from "./logging";
12
12
  let lastOverlayIndex = 0;
13
13
  let lastId = 0;
@@ -99,32 +99,48 @@ export const createOverlay = (tagName, opts) => {
99
99
  * valid usage for the disabled property on ion-button.
100
100
  */
101
101
  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])';
102
+ const isOverlayHidden = (overlay) => overlay.classList.contains('overlay-hidden');
103
+ /**
104
+ * Focuses the first descendant in an overlay
105
+ * that can receive focus. If none exists,
106
+ * the entire overlay will be focused.
107
+ */
102
108
  export const focusFirstDescendant = (ref, overlay) => {
103
- let firstInput = ref.querySelector(focusableQueryString);
104
- const shadowRoot = firstInput === null || firstInput === void 0 ? void 0 : firstInput.shadowRoot;
105
- if (shadowRoot) {
106
- // If there are no inner focusable elements, just focus the host element.
107
- firstInput = shadowRoot.querySelector(focusableQueryString) || firstInput;
108
- }
109
- if (firstInput) {
110
- focusElement(firstInput);
111
- }
112
- else {
113
- // Focus overlay instead of letting focus escape
114
- overlay.focus();
115
- }
109
+ const firstInput = ref.querySelector(focusableQueryString);
110
+ focusElementInOverlay(firstInput, overlay);
116
111
  };
117
- const isOverlayHidden = (overlay) => overlay.classList.contains('overlay-hidden');
112
+ /**
113
+ * Focuses the last descendant in an overlay
114
+ * that can receive focus. If none exists,
115
+ * the entire overlay will be focused.
116
+ */
118
117
  const focusLastDescendant = (ref, overlay) => {
119
118
  const inputs = Array.from(ref.querySelectorAll(focusableQueryString));
120
- let lastInput = inputs.length > 0 ? inputs[inputs.length - 1] : null;
121
- const shadowRoot = lastInput === null || lastInput === void 0 ? void 0 : lastInput.shadowRoot;
119
+ const lastInput = inputs.length > 0 ? inputs[inputs.length - 1] : null;
120
+ focusElementInOverlay(lastInput, overlay);
121
+ };
122
+ /**
123
+ * Focuses a particular element in an overlay. If the element
124
+ * doesn't have anything focusable associated with it then
125
+ * the overlay itself will be focused.
126
+ * This should be used instead of the focus() method
127
+ * on most elements because the focusable element
128
+ * may not be the host element.
129
+ *
130
+ * For example, if an ion-button should be focused
131
+ * then we should actually focus the native <button>
132
+ * element inside of ion-button's shadow root, not
133
+ * the host element itself.
134
+ */
135
+ const focusElementInOverlay = (hostToFocus, overlay) => {
136
+ let elementToFocus = hostToFocus;
137
+ const shadowRoot = hostToFocus === null || hostToFocus === void 0 ? void 0 : hostToFocus.shadowRoot;
122
138
  if (shadowRoot) {
123
139
  // If there are no inner focusable elements, just focus the host element.
124
- lastInput = shadowRoot.querySelector(focusableQueryString) || lastInput;
140
+ elementToFocus = shadowRoot.querySelector(focusableQueryString) || hostToFocus;
125
141
  }
126
- if (lastInput) {
127
- lastInput.focus();
142
+ if (elementToFocus) {
143
+ focusVisibleElement(elementToFocus);
128
144
  }
129
145
  else {
130
146
  // Focus overlay instead of letting focus escape
@@ -175,6 +191,21 @@ const trapKeyboardFocus = (ev, doc) => {
175
191
  */
176
192
  if (lastOverlay === target) {
177
193
  lastOverlay.lastFocus = undefined;
194
+ /**
195
+ * Toasts can be presented from an overlay.
196
+ * However, focus should still be returned to
197
+ * the overlay when clicking a toast. Normally,
198
+ * focus would be returned to the last focusable
199
+ * descendant in the overlay which may not always be
200
+ * the button that the toast was presented from. In this case,
201
+ * the focus may be returned to an unexpected element.
202
+ * To account for this, we make sure to return focus to the
203
+ * last focused element in the overlay if focus is
204
+ * moved to the toast.
205
+ */
206
+ }
207
+ else if (target.tagName === 'ION-TOAST') {
208
+ focusElementInOverlay(lastOverlay.lastFocus, lastOverlay);
178
209
  /**
179
210
  * Otherwise, we must be focusing an element
180
211
  * inside of the overlay. The two possible options
@@ -246,6 +277,21 @@ const trapKeyboardFocus = (ev, doc) => {
246
277
  */
247
278
  if (lastOverlay.contains(target)) {
248
279
  lastOverlay.lastFocus = target;
280
+ /**
281
+ * Toasts can be presented from an overlay.
282
+ * However, focus should still be returned to
283
+ * the overlay when clicking a toast. Normally,
284
+ * focus would be returned to the last focusable
285
+ * descendant in the overlay which may not always be
286
+ * the button that the toast was presented from. In this case,
287
+ * the focus may be returned to an unexpected element.
288
+ * To account for this, we make sure to return focus to the
289
+ * last focused element in the overlay if focus is
290
+ * moved to the toast.
291
+ */
292
+ }
293
+ else if (target.tagName === 'ION-TOAST') {
294
+ focusElementInOverlay(lastOverlay.lastFocus, lastOverlay);
249
295
  }
250
296
  else {
251
297
  /**
@@ -319,7 +365,7 @@ const connectListeners = (doc) => {
319
365
  * this behavior will be handled via the ionBackButton
320
366
  * event.
321
367
  */
322
- if (!shoudUseCloseWatcher()) {
368
+ if (!shouldUseCloseWatcher()) {
323
369
  doc.addEventListener('keydown', (ev) => {
324
370
  if (ev.key === 'Escape') {
325
371
  const lastOverlay = getPresentedOverlay(doc);
@@ -409,15 +455,7 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
409
455
  return;
410
456
  }
411
457
  setRootAriaHidden(true);
412
- /**
413
- * Hide all other overlays from screen readers so only this one
414
- * can be read. Note that presenting an overlay always makes
415
- * it the topmost one.
416
- */
417
- if (doc !== undefined) {
418
- const presentedOverlays = getPresentedOverlays(doc);
419
- presentedOverlays.forEach((o) => o.setAttribute('aria-hidden', 'true'));
420
- }
458
+ hideOverlaysFromScreenReaders(overlay.el);
421
459
  overlay.presented = true;
422
460
  overlay.willPresent.emit();
423
461
  (_a = overlay.willPresentShorthand) === null || _a === void 0 ? void 0 : _a.emit();
@@ -510,7 +548,7 @@ const restoreElementFocus = async (overlayEl) => {
510
548
  }
511
549
  };
512
550
  export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnimation, opts) => {
513
- var _a, _b, _c;
551
+ var _a, _b;
514
552
  if (!overlay.presented) {
515
553
  return false;
516
554
  }
@@ -561,13 +599,7 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
561
599
  console.error(err);
562
600
  }
563
601
  overlay.el.remove();
564
- /**
565
- * If there are other overlays presented, unhide the new
566
- * topmost one from screen readers.
567
- */
568
- if (doc !== undefined) {
569
- (_c = getPresentedOverlay(doc)) === null || _c === void 0 ? void 0 : _c.removeAttribute('aria-hidden');
570
- }
602
+ revealOverlaysToScreenReaders();
571
603
  return true;
572
604
  };
573
605
  const getAppRoot = (doc) => {
@@ -763,3 +795,59 @@ export const createTriggerController = () => {
763
795
  removeClickListener,
764
796
  };
765
797
  };
798
+ /**
799
+ * Ensure that underlying overlays have aria-hidden if necessary so that screen readers
800
+ * cannot move focus to these elements. Note that we cannot rely on focus/focusin/focusout
801
+ * events here because those events do not fire when the screen readers moves to a non-focusable
802
+ * element such as text.
803
+ * Without this logic screen readers would be able to move focus outside of the top focus-trapped overlay.
804
+ *
805
+ * @param newTopMostOverlay - The overlay that is being presented. Since the overlay has not been
806
+ * fully presented yet at the time this function is called it will not be included in the getPresentedOverlays result.
807
+ */
808
+ const hideOverlaysFromScreenReaders = (newTopMostOverlay) => {
809
+ var _a;
810
+ if (doc === undefined)
811
+ return;
812
+ const overlays = getPresentedOverlays(doc);
813
+ for (let i = overlays.length - 1; i >= 0; i--) {
814
+ const presentedOverlay = overlays[i];
815
+ const nextPresentedOverlay = (_a = overlays[i + 1]) !== null && _a !== void 0 ? _a : newTopMostOverlay;
816
+ /**
817
+ * If next overlay has aria-hidden then all remaining overlays will have it too.
818
+ * Or, if the next overlay is a Toast that does not have aria-hidden then current overlay
819
+ * should not have aria-hidden either so focus can remain in the current overlay.
820
+ */
821
+ if (nextPresentedOverlay.hasAttribute('aria-hidden') || nextPresentedOverlay.tagName !== 'ION-TOAST') {
822
+ presentedOverlay.setAttribute('aria-hidden', 'true');
823
+ }
824
+ }
825
+ };
826
+ /**
827
+ * When dismissing an overlay we need to reveal the new top-most overlay to screen readers.
828
+ * If the top-most overlay is a Toast we potentially need to reveal more overlays since
829
+ * focus is never automatically moved to the Toast.
830
+ */
831
+ const revealOverlaysToScreenReaders = () => {
832
+ if (doc === undefined)
833
+ return;
834
+ const overlays = getPresentedOverlays(doc);
835
+ for (let i = overlays.length - 1; i >= 0; i--) {
836
+ const currentOverlay = overlays[i];
837
+ /**
838
+ * If the current we are looking at is a Toast then we can remove aria-hidden.
839
+ * However, we potentially need to keep looking at the overlay stack because there
840
+ * could be more Toasts underneath. Additionally, we need to unhide the closest non-Toast
841
+ * overlay too so focus can move there since focus is never automatically moved to the Toast.
842
+ */
843
+ currentOverlay.removeAttribute('aria-hidden');
844
+ /**
845
+ * If we found a non-Toast element then we can just remove aria-hidden and stop searching entirely
846
+ * since this overlay should always receive focus. As a result, all underlying overlays should still
847
+ * be hidden from screen readers.
848
+ */
849
+ if (currentOverlay.tagName !== 'ION-TOAST') {
850
+ break;
851
+ }
852
+ }
853
+ };