voyager-ionic-core 7.6.5 → 7.7.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 (722) hide show
  1. package/components/action-sheet.js +12 -6
  2. package/components/alert.js +11 -5
  3. package/components/backdrop.js +5 -3
  4. package/components/button.js +6 -4
  5. package/components/buttons.js +5 -3
  6. package/components/checkbox.js +4 -2
  7. package/components/data.js +1 -1
  8. package/components/hardware-back-button.js +47 -3
  9. package/components/helpers.js +1 -1
  10. package/components/icon.js +2 -1
  11. package/components/ion-accordion-group.js +6 -4
  12. package/components/ion-accordion.js +9 -5
  13. package/components/ion-app.js +14 -3
  14. package/components/ion-avatar.js +5 -3
  15. package/components/ion-back-button.js +6 -4
  16. package/components/ion-badge.js +6 -4
  17. package/components/ion-breadcrumb.js +6 -4
  18. package/components/ion-breadcrumbs.js +6 -4
  19. package/components/ion-card-content.js +5 -3
  20. package/components/ion-card-header.js +6 -4
  21. package/components/ion-card-subtitle.js +6 -4
  22. package/components/ion-card-title.js +6 -4
  23. package/components/ion-card.js +5 -3
  24. package/components/ion-chip.js +6 -4
  25. package/components/ion-col.js +4 -3
  26. package/components/ion-content.js +5 -4
  27. package/components/ion-datetime-button.js +6 -4
  28. package/components/ion-datetime.js +40 -19
  29. package/components/ion-fab-button.js +6 -4
  30. package/components/ion-fab-list.js +4 -3
  31. package/components/ion-fab.js +4 -3
  32. package/components/ion-footer.js +6 -4
  33. package/components/ion-grid.js +4 -3
  34. package/components/ion-header.js +6 -4
  35. package/components/ion-img.js +3 -2
  36. package/components/ion-infinite-scroll-content.js +6 -4
  37. package/components/ion-infinite-scroll.js +3 -2
  38. package/components/ion-input.js +4 -2
  39. package/components/ion-item-divider.js +6 -4
  40. package/components/ion-item-group.js +5 -3
  41. package/components/ion-item-option.js +6 -4
  42. package/components/ion-item-options.js +5 -3
  43. package/components/ion-item-sliding.js +3 -2
  44. package/components/ion-loading.js +10 -4
  45. package/components/ion-menu-button.js +6 -4
  46. package/components/ion-menu-toggle.js +4 -3
  47. package/components/ion-menu.js +13 -5
  48. package/components/ion-modal.js +13 -10
  49. package/components/ion-nav-link.js +1 -1
  50. package/components/ion-nav.js +3 -2
  51. package/components/ion-picker.js +10 -4
  52. package/components/ion-progress-bar.js +5 -3
  53. package/components/ion-range.js +4 -2
  54. package/components/ion-refresher-content.js +1 -1
  55. package/components/ion-refresher.js +5 -3
  56. package/components/ion-reorder-group.js +3 -2
  57. package/components/ion-reorder.js +5 -3
  58. package/components/ion-router-link.js +4 -3
  59. package/components/ion-router-outlet.js +3 -2
  60. package/components/ion-row.js +3 -2
  61. package/components/ion-searchbar.js +8 -6
  62. package/components/ion-segment-button.js +7 -5
  63. package/components/ion-segment.js +13 -4
  64. package/components/ion-select-option.js +3 -2
  65. package/components/ion-select.js +24 -3
  66. package/components/ion-skeleton-text.js +4 -3
  67. package/components/ion-split-pane.js +15 -14
  68. package/components/ion-tab-bar.js +6 -4
  69. package/components/ion-tab-button.js +6 -4
  70. package/components/ion-tab.js +4 -3
  71. package/components/ion-tabs.js +3 -2
  72. package/components/ion-text.js +4 -3
  73. package/components/ion-textarea.js +4 -2
  74. package/components/ion-thumbnail.js +3 -2
  75. package/components/ion-title.js +6 -4
  76. package/components/ion-toast.js +10 -4
  77. package/components/ion-toggle.js +4 -2
  78. package/components/ion-toolbar.js +6 -4
  79. package/components/item.js +15 -16
  80. package/components/label.js +5 -3
  81. package/components/list-header.js +6 -4
  82. package/components/list.js +5 -3
  83. package/components/note.js +6 -4
  84. package/components/overlays.js +83 -19
  85. package/components/picker-column-internal.js +7 -5
  86. package/components/picker-column.js +6 -4
  87. package/components/picker-internal.js +21 -3
  88. package/components/popover.js +12 -6
  89. package/components/radio-group.js +1 -1
  90. package/components/radio.js +4 -2
  91. package/components/ripple-effect.js +3 -2
  92. package/components/select-popover.js +7 -5
  93. package/components/spinner.js +3 -2
  94. package/css/core.css +28 -0
  95. package/css/core.css.map +1 -1
  96. package/css/ionic.bundle.css +1 -1
  97. package/css/ionic.bundle.css.map +1 -1
  98. package/dist/cjs/{animation-9b401d39.js → animation-fdab9de5.js} +1 -1
  99. package/dist/cjs/{app-globals-07127773.js → app-globals-92ad1b3d.js} +1 -1
  100. package/dist/cjs/{button-active-85665616.js → button-active-2d6520ec.js} +1 -1
  101. package/dist/cjs/{form-controller-7d42a722.js → form-controller-7b90d7b7.js} +1 -1
  102. package/dist/cjs/{framework-delegate-1c29b14a.js → framework-delegate-a3e6d060.js} +1 -1
  103. package/dist/cjs/{hardware-back-button-76833cac.js → hardware-back-button-2696acaf.js} +48 -2
  104. package/dist/cjs/{helpers-76bb7efb.js → helpers-2e1028fa.js} +1 -1
  105. package/dist/cjs/{index-71f41461.js → index-0ffe376d.js} +56 -23
  106. package/dist/cjs/{index-b4f986cd.js → index-10da82ce.js} +1 -1
  107. package/dist/cjs/{index-da15e99c.js → index-53d162b2.js} +1 -1
  108. package/dist/cjs/{index-96a721a7.js → index-a43f7a0f.js} +4 -4
  109. package/dist/cjs/{index-6bb6b651.js → index-c3580a90.js} +4 -4
  110. package/dist/cjs/index.cjs.js +11 -11
  111. package/dist/cjs/{input-shims-a23bb0f4.js → input-shims-6f804705.js} +2 -2
  112. package/dist/cjs/{input.utils-3d0166a2.js → input.utils-d693d18a.js} +1 -1
  113. package/dist/cjs/ion-accordion_2.cjs.entry.js +18 -12
  114. package/dist/cjs/ion-action-sheet.cjs.entry.js +20 -14
  115. package/dist/cjs/ion-alert.cjs.entry.js +19 -13
  116. package/dist/cjs/ion-app_8.cjs.entry.js +72 -50
  117. package/dist/cjs/ion-avatar_3.cjs.entry.js +16 -11
  118. package/dist/cjs/ion-back-button.cjs.entry.js +9 -7
  119. package/dist/cjs/ion-backdrop.cjs.entry.js +7 -5
  120. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +15 -11
  121. package/dist/cjs/ion-button_2.cjs.entry.js +11 -8
  122. package/dist/cjs/ion-card_5.cjs.entry.js +31 -21
  123. package/dist/cjs/ion-checkbox.cjs.entry.js +8 -6
  124. package/dist/cjs/ion-chip.cjs.entry.js +8 -6
  125. package/dist/cjs/ion-col_3.cjs.entry.js +13 -10
  126. package/dist/cjs/ion-datetime-button.cjs.entry.js +8 -6
  127. package/dist/cjs/ion-datetime_3.cjs.entry.js +62 -33
  128. package/dist/cjs/ion-fab_3.cjs.entry.js +17 -13
  129. package/dist/cjs/ion-img.cjs.entry.js +6 -5
  130. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +13 -10
  131. package/dist/cjs/ion-input.cjs.entry.js +10 -8
  132. package/dist/cjs/ion-item-option_3.cjs.entry.js +18 -13
  133. package/dist/cjs/ion-item_8.cjs.entry.js +53 -33
  134. package/dist/cjs/ion-loading.cjs.entry.js +17 -11
  135. package/dist/cjs/ion-menu_3.cjs.entry.js +29 -19
  136. package/dist/cjs/ion-modal.cjs.entry.js +21 -18
  137. package/dist/cjs/ion-nav_2.cjs.entry.js +10 -9
  138. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +10 -8
  139. package/dist/cjs/ion-picker-internal.cjs.entry.js +23 -5
  140. package/dist/cjs/ion-popover.cjs.entry.js +20 -14
  141. package/dist/cjs/ion-progress-bar.cjs.entry.js +8 -6
  142. package/dist/cjs/ion-radio_2.cjs.entry.js +9 -7
  143. package/dist/cjs/ion-range.cjs.entry.js +9 -7
  144. package/dist/cjs/ion-refresher_2.cjs.entry.js +11 -9
  145. package/dist/cjs/ion-reorder_2.cjs.entry.js +12 -9
  146. package/dist/cjs/ion-ripple-effect.cjs.entry.js +5 -4
  147. package/dist/cjs/ion-route_4.cjs.entry.js +7 -6
  148. package/dist/cjs/ion-searchbar.cjs.entry.js +11 -9
  149. package/dist/cjs/ion-segment_2.cjs.entry.js +23 -12
  150. package/dist/cjs/ion-select_3.cjs.entry.js +42 -18
  151. package/dist/cjs/ion-spinner.cjs.entry.js +5 -4
  152. package/dist/cjs/ion-split-pane.cjs.entry.js +17 -16
  153. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +15 -11
  154. package/dist/cjs/ion-tab_2.cjs.entry.js +10 -8
  155. package/dist/cjs/ion-text.cjs.entry.js +6 -5
  156. package/dist/cjs/ion-textarea.cjs.entry.js +10 -8
  157. package/dist/cjs/ion-toast.cjs.entry.js +17 -11
  158. package/dist/cjs/ion-toggle.cjs.entry.js +8 -6
  159. package/dist/cjs/{ionic-global-c70c3fb5.js → ionic-global-59a10130.js} +1 -1
  160. package/dist/cjs/ionic.cjs.js +7 -7
  161. package/dist/cjs/{ios.transition-9624a175.js → ios.transition-c3b11cc3.js} +4 -4
  162. package/dist/cjs/loader.cjs.js +6 -6
  163. package/dist/cjs/{md.transition-786baf9a.js → md.transition-82a8c649.js} +4 -4
  164. package/dist/cjs/{notch-controller-9735e7ac.js → notch-controller-db0127c4.js} +1 -1
  165. package/dist/cjs/{overlays-4c97edb0.js → overlays-fb7ca451.js} +85 -22
  166. package/dist/cjs/{status-tap-66296dcb.js → status-tap-692f6d32.js} +3 -3
  167. package/dist/cjs/{swipe-back-e37a1a5c.js → swipe-back-7a848bb8.js} +1 -1
  168. package/dist/collection/collection-manifest.json +1 -1
  169. package/dist/collection/components/accordion/accordion.js +5 -3
  170. package/dist/collection/components/accordion/test/disabled/accordion.e2e.js +94 -0
  171. package/dist/collection/components/accordion/test/readonly/accordion.e2e.js +94 -0
  172. package/dist/collection/components/accordion-group/accordion-group.js +2 -2
  173. package/dist/collection/components/action-sheet/action-sheet.ios.css +13 -1
  174. package/dist/collection/components/action-sheet/action-sheet.js +9 -5
  175. package/dist/collection/components/alert/alert.ios.css +23 -0
  176. package/dist/collection/components/alert/alert.js +8 -4
  177. package/dist/collection/components/alert/test/basic/alert.e2e.js +29 -4
  178. package/dist/collection/components/app/app.js +12 -2
  179. package/dist/collection/components/avatar/avatar.js +1 -1
  180. package/dist/collection/components/back-button/back-button.js +2 -2
  181. package/dist/collection/components/backdrop/backdrop.js +1 -1
  182. package/dist/collection/components/badge/badge.js +2 -2
  183. package/dist/collection/components/breadcrumb/breadcrumb.js +2 -2
  184. package/dist/collection/components/breadcrumbs/breadcrumbs.js +2 -2
  185. package/dist/collection/components/button/button.js +2 -2
  186. package/dist/collection/components/button/test/basic/button.e2e.js +1 -1
  187. package/dist/collection/components/buttons/buttons.js +1 -1
  188. package/dist/collection/components/card/card.js +1 -1
  189. package/dist/collection/components/card-content/card-content.js +1 -1
  190. package/dist/collection/components/card-header/card-header.js +2 -2
  191. package/dist/collection/components/card-subtitle/card-subtitle.js +2 -2
  192. package/dist/collection/components/card-title/card-title.js +2 -2
  193. package/dist/collection/components/chip/chip.js +2 -2
  194. package/dist/collection/components/col/col.js +2 -2
  195. package/dist/collection/components/content/content.js +3 -3
  196. package/dist/collection/components/datetime/datetime.js +35 -16
  197. package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +3 -3
  198. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +12 -12
  199. package/dist/collection/components/datetime/test/datetime.e2e.js +1 -1
  200. package/dist/collection/components/datetime/test/disable-dates/datetime.e2e.js +1 -1
  201. package/dist/collection/components/datetime/test/disabled/datetime.e2e.js +4 -4
  202. package/dist/collection/components/datetime/test/display/datetime.e2e.js +9 -9
  203. package/dist/collection/components/datetime/test/locale/datetime.e2e.js +3 -3
  204. package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +11 -11
  205. package/dist/collection/components/datetime/test/month-year-picker/datetime.e2e.js +1 -1
  206. package/dist/collection/components/datetime/test/multiple/datetime.e2e.js +22 -5
  207. package/dist/collection/components/datetime/test/position/datetime.e2e.js +1 -1
  208. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +32 -32
  209. package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +3 -3
  210. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +4 -4
  211. package/dist/collection/components/datetime/test/set-value/datetime.e2e.js +4 -4
  212. package/dist/collection/components/datetime/test/time-label/datetime.e2e.js +2 -2
  213. package/dist/collection/components/datetime/test/values/datetime.e2e.js +4 -4
  214. package/dist/collection/components/datetime-button/datetime-button.js +1 -1
  215. package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +14 -14
  216. package/dist/collection/components/datetime-button/test/disabled/datetime-button.e2e.js +2 -2
  217. package/dist/collection/components/datetime-button/test/multiple/datetime-button.e2e.js +6 -6
  218. package/dist/collection/components/fab/fab.js +2 -2
  219. package/dist/collection/components/fab-button/fab-button.js +2 -2
  220. package/dist/collection/components/fab-list/fab-list.js +2 -2
  221. package/dist/collection/components/footer/footer.js +2 -2
  222. package/dist/collection/components/grid/grid.js +2 -2
  223. package/dist/collection/components/header/header.js +2 -2
  224. package/dist/collection/components/header/test/condense/header.e2e.js +2 -2
  225. package/dist/collection/components/img/img.js +1 -1
  226. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  227. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  228. package/dist/collection/components/item/item.ios.css +2 -39
  229. package/dist/collection/components/item/item.js +10 -12
  230. package/dist/collection/components/item/item.md.css +2 -39
  231. package/dist/collection/components/item/test/item.spec.js +20 -0
  232. package/dist/collection/components/item-divider/item-divider.js +2 -2
  233. package/dist/collection/components/item-group/item-group.js +1 -1
  234. package/dist/collection/components/item-option/item-option.js +2 -2
  235. package/dist/collection/components/item-options/item-options.js +1 -1
  236. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  237. package/dist/collection/components/label/label.js +1 -1
  238. package/dist/collection/components/label/test/basic/label.e2e.js +2 -2
  239. package/dist/collection/components/list/list.js +1 -1
  240. package/dist/collection/components/list-header/list-header.js +2 -2
  241. package/dist/collection/components/loading/loading.js +8 -4
  242. package/dist/collection/components/menu/menu.js +8 -8
  243. package/dist/collection/components/menu-button/menu-button.js +2 -2
  244. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  245. package/dist/collection/components/modal/modal.js +11 -10
  246. package/dist/collection/components/modal/test/animations/modal.e2e.js +36 -0
  247. package/dist/collection/components/modal/test/sheet/modal.e2e.js +1 -1
  248. package/dist/collection/components/modal/test/standalone/modal.e2e.js +1 -1
  249. package/dist/collection/components/nav/nav.js +1 -1
  250. package/dist/collection/components/nav-link/nav-link.js +1 -1
  251. package/dist/collection/components/note/note.js +2 -2
  252. package/dist/collection/components/note/test/a11y/note.e2e.js +6 -6
  253. package/dist/collection/components/picker/picker.js +8 -4
  254. package/dist/collection/components/picker-column/picker-column.js +2 -2
  255. package/dist/collection/components/picker-column-internal/picker-column-internal.js +3 -3
  256. package/dist/collection/components/picker-internal/picker-internal.js +17 -1
  257. package/dist/collection/components/picker-internal/test/keyboard-entry/picker-internal.e2e.js +32 -0
  258. package/dist/collection/components/popover/popover.ios.css +8 -1
  259. package/dist/collection/components/popover/popover.js +8 -4
  260. package/dist/collection/components/popover/popover.md.css +1 -1
  261. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  262. package/dist/collection/components/radio-group/radio-group.js +1 -1
  263. package/dist/collection/components/radio-group/test/radio-group-events.e2e.js +15 -15
  264. package/dist/collection/components/range/test/label/range.e2e.js +2 -2
  265. package/dist/collection/components/range/test/range-events.e2e.js +2 -2
  266. package/dist/collection/components/refresher/refresher.js +1 -1
  267. package/dist/collection/components/refresher/test/test.utils.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/ripple-effect/test/basic/ripple-effect.e2e.js +2 -2
  273. package/dist/collection/components/router-link/router-link.js +2 -2
  274. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  275. package/dist/collection/components/row/row.js +1 -1
  276. package/dist/collection/components/searchbar/searchbar.js +4 -4
  277. package/dist/collection/components/segment/segment.js +9 -2
  278. package/dist/collection/components/segment-button/segment-button.js +3 -3
  279. package/dist/collection/components/select/select.js +20 -1
  280. package/dist/collection/components/select/test/disabled/select.e2e.js +1 -1
  281. package/dist/collection/components/select/test/select.spec.js +15 -0
  282. package/dist/collection/components/select-option/select-option.js +1 -1
  283. package/dist/collection/components/select-popover/select-popover.ios.css +10 -0
  284. package/dist/collection/components/select-popover/select-popover.js +1 -1
  285. package/dist/collection/components/select-popover/select-popover.md.css +10 -0
  286. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  287. package/dist/collection/components/spinner/spinner.js +1 -1
  288. package/dist/collection/components/split-pane/split-pane.js +11 -12
  289. package/dist/collection/components/tab/tab.js +2 -2
  290. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  291. package/dist/collection/components/tab-button/tab-button.js +2 -2
  292. package/dist/collection/components/tabs/tabs.js +1 -1
  293. package/dist/collection/components/text/text.js +2 -2
  294. package/dist/collection/components/textarea/test/textarea-events.e2e.js +4 -4
  295. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  296. package/dist/collection/components/title/title.js +2 -2
  297. package/dist/collection/components/toast/test/toast.spec.js +12 -0
  298. package/dist/collection/components/toast/toast.js +8 -4
  299. package/dist/collection/components/toolbar/toolbar.js +2 -2
  300. package/dist/collection/utils/hardware-back-button.js +45 -2
  301. package/dist/collection/utils/helpers.js +1 -1
  302. package/dist/collection/utils/overlays.js +82 -17
  303. package/dist/collection/utils/test/hardware-back-button.spec.js +38 -0
  304. package/dist/collection/utils/test/overlays/overlays.e2e.js +33 -0
  305. package/dist/collection/utils/test/overlays/overlays.spec.js +51 -0
  306. package/dist/docs.json +26 -31
  307. package/dist/esm/{animation-dde8cc0d.js → animation-60dbdd13.js} +1 -1
  308. package/dist/esm/{app-globals-52c78291.js → app-globals-5cf6195b.js} +1 -1
  309. package/dist/esm/{button-active-b62776db.js → button-active-47ac8092.js} +1 -1
  310. package/dist/esm/{data-775093f5.js → data-0f3ab200.js} +1 -1
  311. package/dist/esm/{form-controller-548aa79c.js → form-controller-014aa89f.js} +1 -1
  312. package/dist/esm/{framework-delegate-bc1fd82a.js → framework-delegate-fed7fe7c.js} +1 -1
  313. package/dist/esm/{hardware-back-button-b2bc76db.js → hardware-back-button-b410a047.js} +48 -3
  314. package/dist/esm/{helpers-ae653409.js → helpers-c0b9ca37.js} +1 -1
  315. package/dist/esm/{index-a97c95a7.js → index-0b4beb69.js} +4 -4
  316. package/dist/esm/{index-01cb9192.js → index-47b2066d.js} +4 -4
  317. package/dist/esm/{index-27668d5b.js → index-4c30cddd.js} +56 -23
  318. package/dist/esm/{index-82eeb47f.js → index-d64f34ea.js} +1 -1
  319. package/dist/esm/{index-b9e742e5.js → index-eb12ef92.js} +1 -1
  320. package/dist/esm/index.js +11 -11
  321. package/dist/esm/{input-shims-6539ce13.js → input-shims-b90ca55f.js} +2 -2
  322. package/dist/esm/{input.utils-a5a2d164.js → input.utils-6e9b0046.js} +1 -1
  323. package/dist/esm/ion-accordion_2.entry.js +18 -12
  324. package/dist/esm/ion-action-sheet.entry.js +20 -14
  325. package/dist/esm/ion-alert.entry.js +19 -13
  326. package/dist/esm/ion-app_8.entry.js +62 -40
  327. package/dist/esm/ion-avatar_3.entry.js +16 -11
  328. package/dist/esm/ion-back-button.entry.js +9 -7
  329. package/dist/esm/ion-backdrop.entry.js +7 -5
  330. package/dist/esm/ion-breadcrumb_2.entry.js +15 -11
  331. package/dist/esm/ion-button_2.entry.js +11 -8
  332. package/dist/esm/ion-card_5.entry.js +31 -21
  333. package/dist/esm/ion-checkbox.entry.js +8 -6
  334. package/dist/esm/ion-chip.entry.js +8 -6
  335. package/dist/esm/ion-col_3.entry.js +13 -10
  336. package/dist/esm/ion-datetime-button.entry.js +9 -7
  337. package/dist/esm/ion-datetime_3.entry.js +63 -34
  338. package/dist/esm/ion-fab_3.entry.js +17 -13
  339. package/dist/esm/ion-img.entry.js +6 -5
  340. package/dist/esm/ion-infinite-scroll_2.entry.js +13 -10
  341. package/dist/esm/ion-input.entry.js +10 -8
  342. package/dist/esm/ion-item-option_3.entry.js +18 -13
  343. package/dist/esm/ion-item_8.entry.js +53 -33
  344. package/dist/esm/ion-loading.entry.js +17 -11
  345. package/dist/esm/ion-menu_3.entry.js +29 -19
  346. package/dist/esm/ion-modal.entry.js +21 -18
  347. package/dist/esm/ion-nav_2.entry.js +10 -9
  348. package/dist/esm/ion-picker-column-internal.entry.js +10 -8
  349. package/dist/esm/ion-picker-internal.entry.js +23 -5
  350. package/dist/esm/ion-popover.entry.js +20 -14
  351. package/dist/esm/ion-progress-bar.entry.js +8 -6
  352. package/dist/esm/ion-radio_2.entry.js +9 -7
  353. package/dist/esm/ion-range.entry.js +9 -7
  354. package/dist/esm/ion-refresher_2.entry.js +11 -9
  355. package/dist/esm/ion-reorder_2.entry.js +12 -9
  356. package/dist/esm/ion-ripple-effect.entry.js +5 -4
  357. package/dist/esm/ion-route_4.entry.js +7 -6
  358. package/dist/esm/ion-searchbar.entry.js +11 -9
  359. package/dist/esm/ion-segment_2.entry.js +23 -12
  360. package/dist/esm/ion-select_3.entry.js +42 -18
  361. package/dist/esm/ion-spinner.entry.js +5 -4
  362. package/dist/esm/ion-split-pane.entry.js +17 -16
  363. package/dist/esm/ion-tab-bar_2.entry.js +15 -11
  364. package/dist/esm/ion-tab_2.entry.js +10 -8
  365. package/dist/esm/ion-text.entry.js +6 -5
  366. package/dist/esm/ion-textarea.entry.js +10 -8
  367. package/dist/esm/ion-toast.entry.js +17 -11
  368. package/dist/esm/ion-toggle.entry.js +8 -6
  369. package/dist/esm/{ionic-global-8fa0f940.js → ionic-global-ad9a1810.js} +1 -1
  370. package/dist/esm/ionic.js +8 -8
  371. package/dist/esm/{ios.transition-62fd50ab.js → ios.transition-b76c7020.js} +4 -4
  372. package/dist/esm/loader.js +7 -7
  373. package/dist/esm/{md.transition-7e56966a.js → md.transition-564937a7.js} +4 -4
  374. package/dist/esm/{notch-controller-fea7f9c5.js → notch-controller-15d281a4.js} +1 -1
  375. package/dist/esm/{overlays-8414359b.js → overlays-04a9a43f.js} +86 -22
  376. package/dist/esm/{status-tap-129c01cf.js → status-tap-5a95077d.js} +3 -3
  377. package/dist/esm/{swipe-back-18cb49f7.js → swipe-back-fa0ec5cd.js} +1 -1
  378. package/dist/esm-es5/{animation-dde8cc0d.js → animation-60dbdd13.js} +1 -1
  379. package/dist/esm-es5/app-globals-5cf6195b.js +4 -0
  380. package/dist/esm-es5/{button-active-b62776db.js → button-active-47ac8092.js} +1 -1
  381. package/dist/esm-es5/{data-775093f5.js → data-0f3ab200.js} +1 -1
  382. package/dist/esm-es5/{form-controller-548aa79c.js → form-controller-014aa89f.js} +1 -1
  383. package/dist/esm-es5/{framework-delegate-bc1fd82a.js → framework-delegate-fed7fe7c.js} +1 -1
  384. package/dist/esm-es5/hardware-back-button-b410a047.js +4 -0
  385. package/dist/esm-es5/helpers-c0b9ca37.js +4 -0
  386. package/dist/esm-es5/{index-a97c95a7.js → index-0b4beb69.js} +1 -1
  387. package/dist/esm-es5/{index-01cb9192.js → index-47b2066d.js} +1 -1
  388. package/dist/esm-es5/index-4c30cddd.js +5 -0
  389. package/dist/esm-es5/index-d64f34ea.js +4 -0
  390. package/dist/esm-es5/{index-b9e742e5.js → index-eb12ef92.js} +1 -1
  391. package/dist/esm-es5/index.js +1 -1
  392. package/dist/esm-es5/{input-shims-6539ce13.js → input-shims-b90ca55f.js} +1 -1
  393. package/dist/esm-es5/{input.utils-a5a2d164.js → input.utils-6e9b0046.js} +1 -1
  394. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  395. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  396. package/dist/esm-es5/ion-alert.entry.js +1 -1
  397. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  398. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  399. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  400. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  401. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  402. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  403. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  404. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  405. package/dist/esm-es5/ion-chip.entry.js +1 -1
  406. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  407. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  408. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  409. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  410. package/dist/esm-es5/ion-img.entry.js +1 -1
  411. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  412. package/dist/esm-es5/ion-input.entry.js +1 -1
  413. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  414. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  415. package/dist/esm-es5/ion-loading.entry.js +1 -1
  416. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  417. package/dist/esm-es5/ion-modal.entry.js +1 -1
  418. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  419. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  420. package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
  421. package/dist/esm-es5/ion-popover.entry.js +1 -1
  422. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  423. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  424. package/dist/esm-es5/ion-range.entry.js +1 -1
  425. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  426. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  427. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  428. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  429. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  430. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  431. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  432. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  433. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  434. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  435. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  436. package/dist/esm-es5/ion-text.entry.js +1 -1
  437. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  438. package/dist/esm-es5/ion-toast.entry.js +1 -1
  439. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  440. package/dist/esm-es5/{ionic-global-8fa0f940.js → ionic-global-ad9a1810.js} +1 -1
  441. package/dist/esm-es5/ionic.js +2 -2
  442. package/dist/esm-es5/{ios.transition-62fd50ab.js → ios.transition-b76c7020.js} +1 -1
  443. package/dist/esm-es5/loader.js +2 -2
  444. package/dist/esm-es5/md.transition-564937a7.js +4 -0
  445. package/dist/esm-es5/{notch-controller-fea7f9c5.js → notch-controller-15d281a4.js} +1 -1
  446. package/dist/esm-es5/overlays-04a9a43f.js +4 -0
  447. package/dist/esm-es5/{status-tap-129c01cf.js → status-tap-5a95077d.js} +1 -1
  448. package/dist/esm-es5/{swipe-back-18cb49f7.js → swipe-back-fa0ec5cd.js} +1 -1
  449. package/dist/ionic/index.esm.js +1 -1
  450. package/dist/ionic/ionic.esm.js +1 -1
  451. package/dist/ionic/ionic.js +1 -1
  452. package/dist/ionic/p-027f3674.entry.js +4 -0
  453. package/dist/ionic/p-0457213c.entry.js +4 -0
  454. package/dist/ionic/p-05d560ec.entry.js +4 -0
  455. package/dist/ionic/p-0b34d3a7.system.js +4 -0
  456. package/dist/ionic/p-0e23c289.system.entry.js +4 -0
  457. package/dist/ionic/p-1131946f.system.entry.js +4 -0
  458. package/dist/ionic/{p-25221a73.js → p-123b4809.js} +1 -1
  459. package/dist/ionic/{p-d2707f9d.system.js → p-1636923f.system.js} +1 -1
  460. package/dist/ionic/p-16a61810.entry.js +4 -0
  461. package/dist/ionic/p-18beebdf.system.entry.js +4 -0
  462. package/dist/ionic/p-1924f2e0.system.entry.js +4 -0
  463. package/dist/ionic/{p-53ec4f1c.system.js → p-1dfc11b3.system.js} +1 -1
  464. package/dist/ionic/p-1f16d040.entry.js +4 -0
  465. package/dist/ionic/p-1f19958f.system.entry.js +4 -0
  466. package/dist/ionic/p-21ca1f1c.js +4 -0
  467. package/dist/ionic/p-2327064c.entry.js +4 -0
  468. package/dist/ionic/{p-7bae84aa.entry.js → p-23c73017.entry.js} +1 -1
  469. package/dist/ionic/p-275705e5.entry.js +4 -0
  470. package/dist/ionic/{p-32b8e50d.system.js → p-2e14c533.system.js} +1 -1
  471. package/dist/ionic/p-2e1f014a.system.entry.js +4 -0
  472. package/dist/ionic/p-3079950e.entry.js +4 -0
  473. package/dist/ionic/{p-03e00f90.js → p-30cd5e7b.js} +1 -1
  474. package/dist/ionic/p-30d77a91.system.js +4 -0
  475. package/dist/ionic/{p-376a6063.js → p-31c495c2.js} +1 -1
  476. package/dist/ionic/p-337ac0f5.entry.js +4 -0
  477. package/dist/ionic/p-3471a7c0.system.entry.js +4 -0
  478. package/dist/ionic/p-3481d54e.system.entry.js +4 -0
  479. package/dist/ionic/{p-cabad15b.system.js → p-37c33319.system.js} +1 -1
  480. package/dist/ionic/p-396083cc.entry.js +4 -0
  481. package/dist/ionic/{p-e814f9c0.entry.js → p-3a7de59c.entry.js} +1 -1
  482. package/dist/ionic/{p-d51674c5.system.js → p-3c6f02cf.system.js} +1 -1
  483. package/dist/ionic/p-3d961d93.entry.js +4 -0
  484. package/dist/ionic/p-3e9ad72a.system.entry.js +4 -0
  485. package/dist/ionic/p-42a9f663.system.entry.js +4 -0
  486. package/dist/ionic/p-43a5edee.entry.js +4 -0
  487. package/dist/ionic/{p-8aa1d0b7.system.js → p-49543c9c.system.js} +1 -1
  488. package/dist/ionic/p-49aba878.js +4 -0
  489. package/dist/ionic/{p-88d5fbd3.js → p-4f777b5e.js} +1 -1
  490. package/dist/ionic/p-4fda5c35.entry.js +4 -0
  491. package/dist/ionic/{p-249633a4.entry.js → p-502780e4.entry.js} +1 -1
  492. package/dist/ionic/{p-436bd99a.entry.js → p-508a4c87.entry.js} +1 -1
  493. package/dist/ionic/p-5928fac9.system.entry.js +4 -0
  494. package/dist/ionic/{p-d5216086.entry.js → p-5b40d967.entry.js} +1 -1
  495. package/dist/ionic/p-5c2ae448.js +4 -0
  496. package/dist/ionic/p-5c580e89.entry.js +4 -0
  497. package/dist/ionic/p-5c6a04bd.entry.js +4 -0
  498. package/dist/ionic/p-5cb5f63d.system.entry.js +4 -0
  499. package/dist/ionic/{p-fd41bd8a.js → p-5d7e32ce.js} +1 -1
  500. package/dist/ionic/p-5e23bea8.system.entry.js +4 -0
  501. package/dist/ionic/{p-ed60d571.entry.js → p-5f169eba.entry.js} +1 -1
  502. package/dist/ionic/{p-13387c28.entry.js → p-601e17b4.entry.js} +1 -1
  503. package/dist/ionic/p-61ba2137.system.js +4 -0
  504. package/dist/ionic/p-64761c90.entry.js +4 -0
  505. package/dist/ionic/{p-c1c57873.system.entry.js → p-64856c3c.system.entry.js} +1 -1
  506. package/dist/ionic/p-6486e393.system.entry.js +4 -0
  507. package/dist/ionic/p-64db1331.entry.js +4 -0
  508. package/dist/ionic/{p-ef3a6b51.system.js → p-6525a8cd.system.js} +1 -1
  509. package/dist/ionic/p-657ccdd6.entry.js +4 -0
  510. package/dist/ionic/p-667e3e2d.entry.js +4 -0
  511. package/dist/ionic/p-6871553b.system.js +4 -0
  512. package/dist/ionic/p-68ba8e77.system.entry.js +4 -0
  513. package/dist/ionic/p-70e34286.system.entry.js +4 -0
  514. package/dist/ionic/p-7173ba59.system.entry.js +4 -0
  515. package/dist/ionic/p-717e2526.system.entry.js +4 -0
  516. package/dist/ionic/p-72fa96bf.system.js +5 -0
  517. package/dist/ionic/{p-87bb3735.system.js → p-7330c044.system.js} +1 -1
  518. package/dist/ionic/{p-ae638cb5.system.js → p-74deb358.system.js} +1 -1
  519. package/dist/ionic/p-7b1ed642.system.entry.js +4 -0
  520. package/dist/ionic/{p-b6f6f00e.entry.js → p-7ce40e7b.entry.js} +1 -1
  521. package/dist/ionic/p-86813176.system.entry.js +4 -0
  522. package/dist/ionic/p-8794fa00.system.entry.js +4 -0
  523. package/dist/ionic/p-88e9052d.entry.js +4 -0
  524. package/dist/ionic/{p-3c33dc30.system.js → p-89ca4c4b.system.js} +1 -1
  525. package/dist/ionic/p-8e651c29.entry.js +4 -0
  526. package/dist/ionic/p-9056778e.system.entry.js +4 -0
  527. package/dist/ionic/p-91cb3f9a.entry.js +4 -0
  528. package/dist/ionic/{p-29d03b3a.js → p-9393a49f.js} +1 -1
  529. package/dist/ionic/{p-3a75d7fd.js → p-94be3ad7.js} +1 -1
  530. package/dist/ionic/p-95d5a097.entry.js +4 -0
  531. package/dist/ionic/p-9cd7ba27.system.js +4 -0
  532. package/dist/ionic/p-9ec7208d.system.js +4 -0
  533. package/dist/ionic/p-a022b684.system.entry.js +4 -0
  534. package/dist/ionic/p-a0b28c69.system.entry.js +4 -0
  535. package/dist/ionic/p-a3df16b9.system.entry.js +4 -0
  536. package/dist/ionic/{p-4180a747.js → p-a3f572a7.js} +1 -1
  537. package/dist/ionic/{p-4a4bbcc5.system.js → p-a5951821.system.js} +2 -2
  538. package/dist/ionic/p-a6e465f5.entry.js +4 -0
  539. package/dist/ionic/{p-bb41c476.system.entry.js → p-a85d9047.system.entry.js} +1 -1
  540. package/dist/ionic/p-a8a56449.entry.js +4 -0
  541. package/dist/ionic/p-aaaa615c.system.entry.js +4 -0
  542. package/dist/ionic/p-abcedc15.system.entry.js +4 -0
  543. package/dist/ionic/{p-0bd51c34.system.js → p-abe101da.system.js} +1 -1
  544. package/dist/ionic/p-ae35294f.system.entry.js +4 -0
  545. package/dist/ionic/p-afd6d696.system.entry.js +4 -0
  546. package/dist/ionic/p-b06ac4a5.system.js +4 -0
  547. package/dist/ionic/p-b0ff8075.entry.js +4 -0
  548. package/dist/ionic/{p-66d633fb.js → p-b253ad7f.js} +1 -1
  549. package/dist/ionic/p-b2595011.system.entry.js +4 -0
  550. package/dist/ionic/p-b5839dc2.js +4 -0
  551. package/dist/ionic/p-b6279412.entry.js +4 -0
  552. package/dist/ionic/p-b8c685a7.system.js +4 -0
  553. package/dist/ionic/p-ba97a133.system.entry.js +4 -0
  554. package/dist/ionic/p-bd4787eb.entry.js +4 -0
  555. package/dist/ionic/p-bdca4784.js +4 -0
  556. package/dist/ionic/p-bf05cbc7.entry.js +4 -0
  557. package/dist/ionic/p-c11bab7e.entry.js +4 -0
  558. package/dist/ionic/p-c1797ec5.system.entry.js +4 -0
  559. package/dist/ionic/{p-36d187af.js → p-c2289cd1.js} +1 -1
  560. package/dist/ionic/p-c308f773.entry.js +4 -0
  561. package/dist/ionic/p-c39cc96d.system.entry.js +4 -0
  562. package/dist/ionic/p-c747f89b.system.entry.js +4 -0
  563. package/dist/ionic/{p-7798c78a.system.js → p-c80c7e90.system.js} +1 -1
  564. package/dist/ionic/{p-013013a3.js → p-c858f685.js} +1 -1
  565. package/dist/ionic/p-c995da88.system.js +4 -0
  566. package/dist/ionic/p-cb9e71e0.entry.js +4 -0
  567. package/dist/ionic/p-cd9a7017.system.entry.js +4 -0
  568. package/dist/ionic/p-cde3ac34.system.entry.js +4 -0
  569. package/dist/ionic/p-ceceac26.js +4 -0
  570. package/dist/ionic/{p-803ad1e3.entry.js → p-d39ab63d.entry.js} +1 -1
  571. package/dist/ionic/{p-43afd001.system.js → p-d4cadd34.system.js} +1 -1
  572. package/dist/ionic/p-db30f71b.entry.js +4 -0
  573. package/dist/ionic/p-dbcba5a2.js +4 -0
  574. package/dist/ionic/{p-1052ef2b.entry.js → p-dcb5711d.entry.js} +1 -1
  575. package/dist/ionic/{p-23ce95e8.js → p-de55ec45.js} +1 -1
  576. package/dist/ionic/p-df504a37.system.js +4 -0
  577. package/dist/ionic/p-e04b9647.system.entry.js +4 -0
  578. package/dist/ionic/{p-38f2c6bb.system.js → p-e2bb92ed.system.js} +1 -1
  579. package/dist/ionic/p-e81bf09e.system.entry.js +4 -0
  580. package/dist/ionic/p-e9f9388e.system.js +4 -0
  581. package/dist/ionic/p-ea25b4c8.system.entry.js +4 -0
  582. package/dist/ionic/p-eb07b88f.entry.js +4 -0
  583. package/dist/ionic/p-ed7a529f.js +5 -0
  584. package/dist/ionic/p-edcada2b.system.entry.js +4 -0
  585. package/dist/ionic/p-f0194418.system.entry.js +4 -0
  586. package/dist/ionic/p-f460c7ae.entry.js +4 -0
  587. package/dist/ionic/p-f53d074d.system.entry.js +4 -0
  588. package/dist/ionic/{p-18cae04f.js → p-f7dce541.js} +1 -1
  589. package/dist/ionic/p-f840d817.entry.js +4 -0
  590. package/dist/ionic/p-f8c96502.system.entry.js +4 -0
  591. package/dist/ionic/p-fb9f8495.system.entry.js +4 -0
  592. package/dist/ionic/p-fd2aa50c.js +4 -0
  593. package/dist/ionic/p-fd8ced99.system.js +4 -0
  594. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +2 -2
  595. package/dist/types/components/action-sheet/action-sheet.d.ts +4 -0
  596. package/dist/types/components/alert/alert-interface.d.ts +2 -2
  597. package/dist/types/components/alert/alert.d.ts +4 -0
  598. package/dist/types/components/item/item.d.ts +1 -0
  599. package/dist/types/components/loading/loading.d.ts +4 -0
  600. package/dist/types/components/modal/modal.d.ts +4 -0
  601. package/dist/types/components/picker/picker.d.ts +4 -0
  602. package/dist/types/components/popover/popover.d.ts +4 -0
  603. package/dist/types/components/toast/toast-interface.d.ts +2 -2
  604. package/dist/types/components/toast/toast.d.ts +4 -0
  605. package/dist/types/components.d.ts +7 -7
  606. package/dist/types/interface.d.ts +1 -1
  607. package/dist/types/utils/browser/index.d.ts +22 -1
  608. package/dist/types/utils/config.d.ts +7 -0
  609. package/dist/types/utils/hardware-back-button.d.ts +13 -0
  610. package/hydrate/index.d.ts +1 -1
  611. package/hydrate/index.js +794 -373
  612. package/package.json +9 -9
  613. package/dist/collection/components/accordion/test/accordion.e2e.js +0 -39
  614. package/dist/esm-es5/app-globals-52c78291.js +0 -4
  615. package/dist/esm-es5/hardware-back-button-b2bc76db.js +0 -4
  616. package/dist/esm-es5/helpers-ae653409.js +0 -4
  617. package/dist/esm-es5/index-27668d5b.js +0 -5
  618. package/dist/esm-es5/index-82eeb47f.js +0 -4
  619. package/dist/esm-es5/md.transition-7e56966a.js +0 -4
  620. package/dist/esm-es5/overlays-8414359b.js +0 -4
  621. package/dist/ionic/p-005e0ad0.js +0 -4
  622. package/dist/ionic/p-01438d78.entry.js +0 -4
  623. package/dist/ionic/p-02e530f5.system.js +0 -4
  624. package/dist/ionic/p-0abedd22.entry.js +0 -4
  625. package/dist/ionic/p-0d2b6901.entry.js +0 -4
  626. package/dist/ionic/p-127ff448.entry.js +0 -4
  627. package/dist/ionic/p-1a0bf247.system.entry.js +0 -4
  628. package/dist/ionic/p-1a5f0313.system.js +0 -4
  629. package/dist/ionic/p-1cca10d6.system.js +0 -4
  630. package/dist/ionic/p-1f7fc88d.entry.js +0 -4
  631. package/dist/ionic/p-1ffb40d0.system.entry.js +0 -4
  632. package/dist/ionic/p-23a9d086.js +0 -4
  633. package/dist/ionic/p-25553eba.system.entry.js +0 -4
  634. package/dist/ionic/p-2a496995.js +0 -4
  635. package/dist/ionic/p-3197dbf7.entry.js +0 -4
  636. package/dist/ionic/p-32ad210f.system.js +0 -4
  637. package/dist/ionic/p-35e1a80f.system.entry.js +0 -4
  638. package/dist/ionic/p-38c337e7.system.js +0 -4
  639. package/dist/ionic/p-3b83e483.system.entry.js +0 -4
  640. package/dist/ionic/p-3bcbbf43.system.entry.js +0 -4
  641. package/dist/ionic/p-3f0afc6f.entry.js +0 -4
  642. package/dist/ionic/p-40f68333.system.js +0 -4
  643. package/dist/ionic/p-41040a92.system.entry.js +0 -4
  644. package/dist/ionic/p-41aa2662.entry.js +0 -4
  645. package/dist/ionic/p-48f7e8cc.system.entry.js +0 -4
  646. package/dist/ionic/p-4b3623da.js +0 -4
  647. package/dist/ionic/p-4cd6a04c.system.entry.js +0 -4
  648. package/dist/ionic/p-525b6ac4.system.entry.js +0 -4
  649. package/dist/ionic/p-54c92c77.entry.js +0 -4
  650. package/dist/ionic/p-5a85d71d.entry.js +0 -4
  651. package/dist/ionic/p-5aecd304.system.entry.js +0 -4
  652. package/dist/ionic/p-5c2da581.system.entry.js +0 -4
  653. package/dist/ionic/p-619fafe3.system.entry.js +0 -4
  654. package/dist/ionic/p-61bf9f6f.system.entry.js +0 -4
  655. package/dist/ionic/p-677cb2f7.js +0 -4
  656. package/dist/ionic/p-67c3a2a8.system.js +0 -5
  657. package/dist/ionic/p-688a36c7.entry.js +0 -4
  658. package/dist/ionic/p-6a257379.entry.js +0 -4
  659. package/dist/ionic/p-6b9eee40.system.entry.js +0 -4
  660. package/dist/ionic/p-6ba863b1.system.entry.js +0 -4
  661. package/dist/ionic/p-6e165986.system.entry.js +0 -4
  662. package/dist/ionic/p-7510e462.entry.js +0 -4
  663. package/dist/ionic/p-76b6b42e.system.entry.js +0 -4
  664. package/dist/ionic/p-770f5b43.system.js +0 -4
  665. package/dist/ionic/p-7751def0.system.entry.js +0 -4
  666. package/dist/ionic/p-788942c8.system.entry.js +0 -4
  667. package/dist/ionic/p-790220fd.system.js +0 -4
  668. package/dist/ionic/p-7de774dd.entry.js +0 -4
  669. package/dist/ionic/p-8084e9cb.entry.js +0 -4
  670. package/dist/ionic/p-80ddd0c1.entry.js +0 -4
  671. package/dist/ionic/p-85e04029.entry.js +0 -4
  672. package/dist/ionic/p-87e10168.system.entry.js +0 -4
  673. package/dist/ionic/p-888db766.system.js +0 -4
  674. package/dist/ionic/p-88d99112.system.entry.js +0 -4
  675. package/dist/ionic/p-89c28901.system.entry.js +0 -4
  676. package/dist/ionic/p-928e945d.system.entry.js +0 -4
  677. package/dist/ionic/p-978c6799.system.entry.js +0 -4
  678. package/dist/ionic/p-9a0b9b64.entry.js +0 -4
  679. package/dist/ionic/p-a2d75455.entry.js +0 -4
  680. package/dist/ionic/p-a706cf11.system.entry.js +0 -4
  681. package/dist/ionic/p-a78d17e2.entry.js +0 -4
  682. package/dist/ionic/p-aca77953.entry.js +0 -4
  683. package/dist/ionic/p-b09c8228.entry.js +0 -4
  684. package/dist/ionic/p-b2205a7c.system.entry.js +0 -4
  685. package/dist/ionic/p-b43cf55f.entry.js +0 -4
  686. package/dist/ionic/p-bc59962f.system.entry.js +0 -4
  687. package/dist/ionic/p-be04fcd8.system.entry.js +0 -4
  688. package/dist/ionic/p-bf595ef8.system.entry.js +0 -4
  689. package/dist/ionic/p-bf80f9d1.entry.js +0 -4
  690. package/dist/ionic/p-c0f62b42.system.js +0 -4
  691. package/dist/ionic/p-c16d9f2c.system.entry.js +0 -4
  692. package/dist/ionic/p-c48a9ef3.system.entry.js +0 -4
  693. package/dist/ionic/p-c9219299.entry.js +0 -4
  694. package/dist/ionic/p-cae77add.system.entry.js +0 -4
  695. package/dist/ionic/p-cd6bb7f5.system.entry.js +0 -4
  696. package/dist/ionic/p-cdce5ba3.system.entry.js +0 -4
  697. package/dist/ionic/p-d6129c6e.js +0 -5
  698. package/dist/ionic/p-d6beb1c9.system.entry.js +0 -4
  699. package/dist/ionic/p-db798370.system.entry.js +0 -4
  700. package/dist/ionic/p-dc1d883c.system.entry.js +0 -4
  701. package/dist/ionic/p-dd9dff11.entry.js +0 -4
  702. package/dist/ionic/p-ddbb2d5b.system.js +0 -4
  703. package/dist/ionic/p-de6f8b28.system.js +0 -4
  704. package/dist/ionic/p-df62accd.entry.js +0 -4
  705. package/dist/ionic/p-e1e05489.system.entry.js +0 -4
  706. package/dist/ionic/p-e3ff3cde.system.entry.js +0 -4
  707. package/dist/ionic/p-e8294cc1.entry.js +0 -4
  708. package/dist/ionic/p-e87564bc.entry.js +0 -4
  709. package/dist/ionic/p-ea7f77e7.entry.js +0 -4
  710. package/dist/ionic/p-eb210b21.system.entry.js +0 -4
  711. package/dist/ionic/p-eb80ca40.entry.js +0 -4
  712. package/dist/ionic/p-eba17ff5.system.entry.js +0 -4
  713. package/dist/ionic/p-eef72e06.js +0 -4
  714. package/dist/ionic/p-efcc4b66.entry.js +0 -4
  715. package/dist/ionic/p-f08d8865.js +0 -4
  716. package/dist/ionic/p-f3478ed6.system.entry.js +0 -4
  717. package/dist/ionic/p-f4bf2448.entry.js +0 -4
  718. package/dist/ionic/p-f4e37ba7.entry.js +0 -4
  719. package/dist/ionic/p-f56d53bd.entry.js +0 -4
  720. package/dist/ionic/p-f8564a9b.system.entry.js +0 -4
  721. package/dist/ionic/p-f865bc9a.entry.js +0 -4
  722. package/dist/ionic/p-fd1a0431.js +0 -4
@@ -0,0 +1,94 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { expect } from "@playwright/test";
5
+ import { configs, test } from "../../../../utils/test/playwright/index";
6
+ // NOTE: these tests cannot be re-written as spec tests because the `getAccordions` method in accordion-group.tsx uses a `:scope` selector
7
+ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ config, title }) => {
8
+ test.describe(title('accordion: readonly'), () => {
9
+ test('should properly set readonly on child accordions', async ({ page }) => {
10
+ await page.setContent(`
11
+ <ion-accordion-group animated="false">
12
+ <ion-accordion>
13
+ <ion-item slot="header">Label</ion-item>
14
+ <div slot="content">Content</div>
15
+ </ion-accordion>
16
+ </ion-accordion-group>
17
+ `, config);
18
+ const accordionGroup = page.locator('ion-accordion-group');
19
+ const accordion = page.locator('ion-accordion');
20
+ await expect(accordion).toHaveJSProperty('readonly', false);
21
+ await accordionGroup.evaluate((el) => {
22
+ el.readonly = true;
23
+ });
24
+ await page.waitForChanges();
25
+ await expect(accordion).toHaveJSProperty('readonly', true);
26
+ });
27
+ test('should not open accordion on click when group is readonly', async ({ page }) => {
28
+ await page.setContent(`
29
+ <ion-accordion-group animated="false" readonly>
30
+ <ion-accordion>
31
+ <ion-item slot="header">Label</ion-item>
32
+ <div slot="content">Content</div>
33
+ </ion-accordion>
34
+ </ion-accordion-group>
35
+ `, config);
36
+ const accordion = page.locator('ion-accordion');
37
+ await expect(accordion).toHaveClass(/accordion-collapsed/);
38
+ accordion.click();
39
+ await page.waitForChanges();
40
+ await expect(accordion).toHaveClass(/accordion-collapsed/);
41
+ });
42
+ test('should not open accordion on click when accordion is readonly', async ({ page }) => {
43
+ await page.setContent(`
44
+ <ion-accordion-group animated="false">
45
+ <ion-accordion readonly>
46
+ <ion-item slot="header">Label</ion-item>
47
+ <div slot="content">Content</div>
48
+ </ion-accordion>
49
+ </ion-accordion-group>
50
+ `, config);
51
+ const accordion = page.locator('ion-accordion');
52
+ await expect(accordion).toHaveClass(/accordion-collapsed/);
53
+ accordion.click();
54
+ await page.waitForChanges();
55
+ await expect(accordion).toHaveClass(/accordion-collapsed/);
56
+ });
57
+ test('should not open accordion via keyboard navigation when group is readonly', async ({ page, browserName }) => {
58
+ await page.setContent(`
59
+ <ion-accordion-group animated="false" readonly>
60
+ <ion-accordion>
61
+ <ion-item slot="header">Label</ion-item>
62
+ <div slot="content">Content</div>
63
+ </ion-accordion>
64
+ </ion-accordion-group>
65
+ `, config);
66
+ const accordion = page.locator('ion-accordion');
67
+ const tabKey = browserName === 'webkit' ? 'Alt+Tab' : 'Tab';
68
+ await expect(accordion).toHaveClass(/accordion-collapsed/);
69
+ await page.keyboard.press(tabKey);
70
+ await page.waitForChanges();
71
+ await page.keyboard.press('Enter');
72
+ await page.waitForChanges();
73
+ await expect(accordion).toHaveClass(/accordion-collapsed/);
74
+ });
75
+ test('should not open accordion via keyboard navigation when accordion is readonly', async ({ page, browserName, }) => {
76
+ await page.setContent(`
77
+ <ion-accordion-group animated="false">
78
+ <ion-accordion readonly>
79
+ <ion-item slot="header">Label</ion-item>
80
+ <div slot="content">Content</div>
81
+ </ion-accordion>
82
+ </ion-accordion-group>
83
+ `, config);
84
+ const accordion = page.locator('ion-accordion');
85
+ const tabKey = browserName === 'webkit' ? 'Alt+Tab' : 'Tab';
86
+ await expect(accordion).toHaveClass(/accordion-collapsed/);
87
+ await page.keyboard.press(tabKey);
88
+ await page.waitForChanges();
89
+ await page.keyboard.press('Enter');
90
+ await page.waitForChanges();
91
+ await expect(accordion).toHaveClass(/accordion-collapsed/);
92
+ });
93
+ });
94
+ });
@@ -197,12 +197,12 @@ export class AccordionGroup {
197
197
  render() {
198
198
  const { disabled, readonly, expand } = this;
199
199
  const mode = getIonMode(this);
200
- return (h(Host, { class: {
200
+ return (h(Host, { key: 'ac2e26ac91c95d08172bd2b51daa7a711c21db9e', class: {
201
201
  [mode]: true,
202
202
  'accordion-group-disabled': disabled,
203
203
  'accordion-group-readonly': readonly,
204
204
  [`accordion-group-expand-${expand}`]: true,
205
- }, role: "presentation" }, h("slot", null)));
205
+ }, role: "presentation" }, h("slot", { key: '444adc2af5730897eba57095da046d6bdb5af70f' })));
206
206
  }
207
207
  static get is() { return "ion-accordion-group"; }
208
208
  static get encapsulation() { return "shadow"; }
@@ -318,7 +318,19 @@
318
318
  -webkit-margin-end: auto;
319
319
  margin-inline-end: auto;
320
320
  margin-top: var(--ion-safe-area-top, 0);
321
- margin-bottom: var(--ion-safe-area-bottom, 0);
321
+ /**
322
+ * Bottom safe area is applied as padding so that it impacts the bounding box.
323
+ * When the action sheet is shown/hidden, this element is transformed by translating
324
+ * 100% of its height. This translation needs to include the bottom safe area
325
+ * otherwise part of the action sheet will still be visible at the end of
326
+ * the show transition.
327
+ *
328
+ * If this code is changed, reviewers should verify that the action
329
+ * sheet still translates out of the viewport completely when the bottom
330
+ * safe area is a positive value.
331
+ */
332
+ padding-bottom: var(--ion-safe-area-bottom, 0);
333
+ box-sizing: content-box;
322
334
  }
323
335
 
324
336
  .action-sheet-container {
@@ -79,6 +79,10 @@ export class ActionSheet {
79
79
  * This can be useful in a button handler for determining which button was
80
80
  * clicked to dismiss the action sheet.
81
81
  * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
82
+ *
83
+ * This is a no-op if the overlay has not been presented yet. If you want
84
+ * to remove an overlay from the DOM that was never presented, use the
85
+ * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
82
86
  */
83
87
  async dismiss(data, role) {
84
88
  const unlock = await this.lockController.lock();
@@ -187,12 +191,12 @@ export class ActionSheet {
187
191
  const cancelButton = allButtons.find((b) => b.role === 'cancel');
188
192
  const buttons = allButtons.filter((b) => b.role !== 'cancel');
189
193
  const headerID = `action-sheet-${overlayIndex}-header`;
190
- return (h(Host, Object.assign({ role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
194
+ return (h(Host, Object.assign({ key: 'cd141d12d7d86d3402fd220c4afb61cdbf064c04', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
191
195
  zIndex: `${20000 + this.overlayIndex}`,
192
- }, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { tappable: this.backdropDismiss }), h("div", { tabindex: "0" }), h("div", { class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { class: "action-sheet-container" }, h("div", { class: "action-sheet-group", ref: (el) => (this.groupEl = el) }, header !== undefined && (h("div", { id: headerID, class: {
196
+ }, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: 'b6a051e2cf5e101edbf59c8a40a04d8f7107fb3c', tappable: this.backdropDismiss }), h("div", { key: '5bfa2b37a417aaff3776f06d92a8544dfcbf714f', tabindex: "0" }), h("div", { key: '77d5a217803fd7be8f8dbedcd0ef5e59f0fd9800', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { key: '3901d56215f05cdab074e2ec321391281a165097', class: "action-sheet-container" }, h("div", { key: '275f5c7981b2ee44fb632b3d137c7209cbfcf45c', class: "action-sheet-group", ref: (el) => (this.groupEl = el) }, header !== undefined && (h("div", { id: headerID, class: {
193
197
  'action-sheet-title': true,
194
198
  'action-sheet-has-sub-title': this.subHeader !== undefined,
195
- } }, header, this.subHeader && h("div", { class: "action-sheet-sub-title" }, this.subHeader))), buttons.map((b) => (h("button", Object.assign({}, b.htmlAttributes, { type: "button", id: b.id, class: buttonClass(b), onClick: () => this.buttonClick(b) }), h("span", { class: "action-sheet-button-inner" }, b.icon && h("ion-icon", { icon: b.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" }), b.text), mode === 'md' && h("ion-ripple-effect", null))))), cancelButton && (h("div", { class: "action-sheet-group action-sheet-group-cancel" }, h("button", Object.assign({}, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), h("span", { class: "action-sheet-button-inner" }, cancelButton.icon && (h("ion-icon", { icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && h("ion-ripple-effect", null)))))), h("div", { tabindex: "0" })));
199
+ } }, header, this.subHeader && h("div", { class: "action-sheet-sub-title" }, this.subHeader))), buttons.map((b) => (h("button", Object.assign({}, b.htmlAttributes, { type: "button", id: b.id, class: buttonClass(b), onClick: () => this.buttonClick(b) }), h("span", { class: "action-sheet-button-inner" }, b.icon && h("ion-icon", { icon: b.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" }), b.text), mode === 'md' && h("ion-ripple-effect", null))))), cancelButton && (h("div", { class: "action-sheet-group action-sheet-group-cancel" }, h("button", Object.assign({}, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), h("span", { class: "action-sheet-button-inner" }, cancelButton.icon && (h("ion-icon", { icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && h("ion-ripple-effect", null)))))), h("div", { key: '4285893438675be9b40838a93c2ff382a1074cd3', tabindex: "0" })));
196
200
  }
197
201
  static get is() { return "ion-action-sheet"; }
198
202
  static get encapsulation() { return "scoped"; }
@@ -690,7 +694,7 @@ export class ActionSheet {
690
694
  }, {
691
695
  "name": "role",
692
696
  "type": "string | undefined",
693
- "docs": "The role of the element that is dismissing the action sheet.\nThis can be useful in a button handler for determining which button was\nclicked to dismiss the action sheet.\nSome examples include: ``\"cancel\"`, `\"destructive\"`, \"selected\"`, and `\"backdrop\"`."
697
+ "docs": "The role of the element that is dismissing the action sheet.\nThis can be useful in a button handler for determining which button was\nclicked to dismiss the action sheet.\nSome examples include: ``\"cancel\"`, `\"destructive\"`, \"selected\"`, and `\"backdrop\"`.\n\nThis is a no-op if the overlay has not been presented yet. If you want\nto remove an overlay from the DOM that was never presented, use the\n[remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method."
694
698
  }],
695
699
  "references": {
696
700
  "Promise": {
@@ -707,7 +711,7 @@ export class ActionSheet {
707
711
  "text": "data Any data to emit in the dismiss events."
708
712
  }, {
709
713
  "name": "param",
710
- "text": "role The role of the element that is dismissing the action sheet.\nThis can be useful in a button handler for determining which button was\nclicked to dismiss the action sheet.\nSome examples include: ``\"cancel\"`, `\"destructive\"`, \"selected\"`, and `\"backdrop\"`."
714
+ "text": "role The role of the element that is dismissing the action sheet.\nThis can be useful in a button handler for determining which button was\nclicked to dismiss the action sheet.\nSome examples include: ``\"cancel\"`, `\"destructive\"`, \"selected\"`, and `\"backdrop\"`.\n\nThis is a no-op if the overlay has not been presented yet. If you want\nto remove an overlay from the DOM that was never presented, use the\n[remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method."
711
715
  }]
712
716
  }
713
717
  },
@@ -663,6 +663,29 @@ textarea.alert-input {
663
663
  flex-wrap: wrap;
664
664
  }
665
665
 
666
+ /**
667
+ * The right border should only be applied to the first button
668
+ * when the group has 2 or less buttons (horizontal).
669
+ * Otherwise, the right border should not be applied
670
+ * when the group has 3 or more buttons (vertical).
671
+ */
672
+ .alert-button-group-vertical .alert-button {
673
+ border-right: none;
674
+ }
675
+ :host-context([dir=rtl]) .alert-button-group-vertical .alert-button:last-child {
676
+ border-right: none;
677
+ }
678
+
679
+ [dir=rtl] .alert-button-group-vertical .alert-button:last-child {
680
+ border-right: none;
681
+ }
682
+
683
+ @supports selector(:dir(rtl)) {
684
+ .alert-button-group-vertical .alert-button:last-child:dir(rtl) {
685
+ border-right: none;
686
+ }
687
+ }
688
+
666
689
  .alert-button {
667
690
  /**
668
691
  * This padding ensures that alerts
@@ -220,6 +220,10 @@ export class Alert {
220
220
  * This can be useful in a button handler for determining which button was
221
221
  * clicked to dismiss the alert.
222
222
  * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
223
+ *
224
+ * This is a no-op if the overlay has not been presented yet. If you want
225
+ * to remove an overlay from the DOM that was never presented, use the
226
+ * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
223
227
  */
224
228
  async dismiss(data, role) {
225
229
  const unlock = await this.lockController.lock();
@@ -387,9 +391,9 @@ export class Alert {
387
391
  * If neither is defined, don't set aria-labelledby.
388
392
  */
389
393
  const ariaLabelledBy = header ? hdrId : subHeader ? subHdrId : null;
390
- return (h(Host, Object.assign({ role: role, "aria-modal": "true", "aria-labelledby": ariaLabelledBy, "aria-describedby": message !== undefined ? msgId : null, tabindex: "-1" }, htmlAttributes, { style: {
394
+ return (h(Host, Object.assign({ key: '4b7f7880dc5f39aa9b61981af0a821ac0350af7f', role: role, "aria-modal": "true", "aria-labelledby": ariaLabelledBy, "aria-describedby": message !== undefined ? msgId : null, tabindex: "-1" }, htmlAttributes, { style: {
391
395
  zIndex: `${20000 + overlayIndex}`,
392
- }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { tappable: this.backdropDismiss }), h("div", { tabindex: "0" }), h("div", { class: "alert-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { class: "alert-head" }, header && (h("h2", { id: hdrId, class: "alert-title" }, header)), subHeader && (h("h2", { id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), h("div", { tabindex: "0" })));
396
+ }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: '961a2684013ac61d59882914fd8d759ddb542fe7', tappable: this.backdropDismiss }), h("div", { key: '2ec08c3719b3cd8a4cae09d2c6ac778ffad5f940', tabindex: "0" }), h("div", { key: 'ee543683d20693c9a9497aca4d41f032aa580c9c', class: "alert-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { key: '55015102b67d080249a8859fc8788f3a82d5ead9', class: "alert-head" }, header && (h("h2", { id: hdrId, class: "alert-title" }, header)), subHeader && (h("h2", { id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), h("div", { key: 'df7bcfb0cb41965f169de05edd631a050d5ce648', tabindex: "0" })));
393
397
  }
394
398
  static get is() { return "ion-alert"; }
395
399
  static get encapsulation() { return "scoped"; }
@@ -932,7 +936,7 @@ export class Alert {
932
936
  }, {
933
937
  "name": "role",
934
938
  "type": "string | undefined",
935
- "docs": "The role of the element that is dismissing the alert.\nThis can be useful in a button handler for determining which button was\nclicked to dismiss the alert.\nSome examples include: ``\"cancel\"`, `\"destructive\"`, \"selected\"`, and `\"backdrop\"`."
939
+ "docs": "The role of the element that is dismissing the alert.\nThis can be useful in a button handler for determining which button was\nclicked to dismiss the alert.\nSome examples include: ``\"cancel\"`, `\"destructive\"`, \"selected\"`, and `\"backdrop\"`.\n\nThis is a no-op if the overlay has not been presented yet. If you want\nto remove an overlay from the DOM that was never presented, use the\n[remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method."
936
940
  }],
937
941
  "references": {
938
942
  "Promise": {
@@ -949,7 +953,7 @@ export class Alert {
949
953
  "text": "data Any data to emit in the dismiss events."
950
954
  }, {
951
955
  "name": "param",
952
- "text": "role The role of the element that is dismissing the alert.\nThis can be useful in a button handler for determining which button was\nclicked to dismiss the alert.\nSome examples include: ``\"cancel\"`, `\"destructive\"`, \"selected\"`, and `\"backdrop\"`."
956
+ "text": "role The role of the element that is dismissing the alert.\nThis can be useful in a button handler for determining which button was\nclicked to dismiss the alert.\nSome examples include: ``\"cancel\"`, `\"destructive\"`, \"selected\"`, and `\"backdrop\"`.\n\nThis is a no-op if the overlay has not been presented yet. If you want\nto remove an overlay from the DOM that was never presented, use the\n[remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method."
953
957
  }]
954
958
  }
955
959
  },
@@ -55,10 +55,6 @@ configs().forEach(({ config, screenshot, title }) => {
55
55
  await alertFixture.open('#longMessage');
56
56
  await alertFixture.screenshot('longMessage');
57
57
  });
58
- test('more than two buttons', async () => {
59
- await alertFixture.open('#multipleButtons');
60
- await alertFixture.screenshot('multipleButtons');
61
- });
62
58
  test('no message', async () => {
63
59
  await alertFixture.open('#noMessage');
64
60
  await alertFixture.screenshot('noMessage');
@@ -81,6 +77,35 @@ configs().forEach(({ config, screenshot, title }) => {
81
77
  });
82
78
  });
83
79
  });
80
+ configs({ themes: ['light', 'dark'] }).forEach(({ config, screenshot, title }) => {
81
+ test.describe(title('should not have visual regressions'), () => {
82
+ test('more than two buttons', async ({ page }) => {
83
+ await page.setContent(`
84
+ <ion-alert
85
+ header="Alert"
86
+ sub-header="Subtitle"
87
+ message="This is an alert message."
88
+ is-open="true"
89
+ ></ion-alert>
90
+
91
+ <script>
92
+ const alert = document.querySelector('ion-alert');
93
+ alert.buttons = [
94
+ 'Open Modal',
95
+ {
96
+ text: 'Delete',
97
+ id: 'delete-button',
98
+ role: 'destructive',
99
+ },
100
+ 'Cancel'
101
+ ];
102
+ </script>
103
+ `, config);
104
+ const alert = page.locator('ion-alert');
105
+ await expect(alert).toHaveScreenshot(screenshot(`alert-multipleButtons`));
106
+ });
107
+ });
108
+ });
84
109
  class AlertFixture {
85
110
  constructor(page, screenshot) {
86
111
  this.page = page;
@@ -2,6 +2,8 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { Build, Host, h } from "@stencil/core";
5
+ import { shoudUseCloseWatcher } from "../../utils/hardware-back-button";
6
+ import { printIonWarning } from "../../utils/logging/index";
5
7
  import { isPlatform } from "../../utils/platform";
6
8
  import { config } from "../../global/config";
7
9
  import { getIonMode } from "../../global/ionic-global";
@@ -25,10 +27,18 @@ export class App {
25
27
  import('../../utils/input-shims/input-shims').then((module) => module.startInputShims(config, platform));
26
28
  }
27
29
  const hardwareBackButtonModule = await import('../../utils/hardware-back-button');
28
- if (config.getBoolean('hardwareBackButton', isHybrid)) {
30
+ const supportsHardwareBackButtonEvents = isHybrid || shoudUseCloseWatcher();
31
+ if (config.getBoolean('hardwareBackButton', supportsHardwareBackButtonEvents)) {
29
32
  hardwareBackButtonModule.startHardwareBackButton();
30
33
  }
31
34
  else {
35
+ /**
36
+ * If an app sets hardwareBackButton: false and experimentalCloseWatcher: true
37
+ * then the close watcher will not be used.
38
+ */
39
+ if (shoudUseCloseWatcher()) {
40
+ printIonWarning('experimentalCloseWatcher was set to `true`, but hardwareBackButton was set to `false`. Both config options must be `true` for the Close Watcher API to be used.');
41
+ }
32
42
  hardwareBackButtonModule.blockHardwareBackButton();
33
43
  }
34
44
  if (typeof window !== 'undefined') {
@@ -55,7 +65,7 @@ export class App {
55
65
  }
56
66
  render() {
57
67
  const mode = getIonMode(this);
58
- return (h(Host, { class: {
68
+ return (h(Host, { key: '3535eb5c0dab78a78011e552524a98599b2b650f', class: {
59
69
  [mode]: true,
60
70
  'ion-page': true,
61
71
  'force-statusbar-padding': config.getBoolean('_forceStatusbarPadding'),
@@ -5,7 +5,7 @@ import { Host, h } from "@stencil/core";
5
5
  import { getIonMode } from "../../global/ionic-global";
6
6
  export class Avatar {
7
7
  render() {
8
- return (h(Host, { class: getIonMode(this) }, h("slot", null)));
8
+ return (h(Host, { key: '95d7ca334f9b66e0983cbc1b782ded0b9a54eaa9', class: getIonMode(this) }, h("slot", { key: '011d20189acdb03bee328aa4fa0511826a0b3a36' })));
9
9
  }
10
10
  static get is() { return "ion-avatar"; }
11
11
  static get encapsulation() { return "shadow"; }
@@ -72,7 +72,7 @@ export class BackButton {
72
72
  const showBackButton = defaultHref !== undefined;
73
73
  const mode = getIonMode(this);
74
74
  const ariaLabel = inheritedAttributes['aria-label'] || backButtonText || 'back';
75
- return (h(Host, { onClick: this.onClick, class: createColorClasses(color, {
75
+ return (h(Host, { key: '175fff2d7a41d2deaaf7b781c5ba2aac9311ebf4', onClick: this.onClick, class: createColorClasses(color, {
76
76
  [mode]: true,
77
77
  button: true, // ion-buttons target .button
78
78
  'back-button-disabled': disabled,
@@ -82,7 +82,7 @@ export class BackButton {
82
82
  'ion-activatable': true,
83
83
  'ion-focusable': true,
84
84
  'show-back-button': showBackButton,
85
- }) }, h("button", { type: type, disabled: disabled, class: "button-native", part: "native", "aria-label": ariaLabel }, h("span", { class: "button-inner" }, backButtonIcon && (h("ion-icon", { part: "icon", icon: backButtonIcon, "aria-hidden": "true", lazy: false, "flip-rtl": icon === undefined })), backButtonText && (h("span", { part: "text", "aria-hidden": "true", class: "button-text" }, backButtonText))), mode === 'md' && h("ion-ripple-effect", { type: this.rippleType }))));
85
+ }) }, h("button", { key: '59fe30c167ea82e2431e45d46060a01bcb2aea77', type: type, disabled: disabled, class: "button-native", part: "native", "aria-label": ariaLabel }, h("span", { key: '3d704fb7ef001446361e7a09d43763a771b242b9', class: "button-inner" }, backButtonIcon && (h("ion-icon", { part: "icon", icon: backButtonIcon, "aria-hidden": "true", lazy: false, "flip-rtl": icon === undefined })), backButtonText && (h("span", { part: "text", "aria-hidden": "true", class: "button-text" }, backButtonText))), mode === 'md' && h("ion-ripple-effect", { type: this.rippleType }))));
86
86
  }
87
87
  static get is() { return "ion-back-button"; }
88
88
  static get encapsulation() { return "shadow"; }
@@ -35,7 +35,7 @@ export class Backdrop {
35
35
  }
36
36
  render() {
37
37
  const mode = getIonMode(this);
38
- return (h(Host, { tabindex: "-1", "aria-hidden": "true", class: {
38
+ return (h(Host, { key: 'b2adb9dabef01fa49388d67d9e8a4a370931f633', tabindex: "-1", "aria-hidden": "true", class: {
39
39
  [mode]: true,
40
40
  'backdrop-hide': !this.visible,
41
41
  'backdrop-no-tappable': !this.tappable,
@@ -13,9 +13,9 @@ export class Badge {
13
13
  }
14
14
  render() {
15
15
  const mode = getIonMode(this);
16
- return (h(Host, { class: createColorClasses(this.color, {
16
+ return (h(Host, { key: '043eea016721e53f0af1cbf1371bc08694281204', class: createColorClasses(this.color, {
17
17
  [mode]: true,
18
- }) }, h("slot", null)));
18
+ }) }, h("slot", { key: 'bd510450d6b60f2794491244e68a83049a5ef6dd' })));
19
19
  }
20
20
  static get is() { return "ion-badge"; }
21
21
  static get encapsulation() { return "shadow"; }
@@ -64,7 +64,7 @@ export class Breadcrumb {
64
64
  // to show the separator as long as it isn't also the last breadcrumb
65
65
  // otherwise if not collapsed use the value in separator
66
66
  const showSeparator = last ? false : collapsed ? (showCollapsedIndicator && !last ? true : false) : separator;
67
- return (h(Host, { onClick: (ev) => openURL(href, ev, routerDirection, routerAnimation), "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
67
+ return (h(Host, { key: '632efa1bc6dc446e81efe8cd7763cb9b16466563', onClick: (ev) => openURL(href, ev, routerDirection, routerAnimation), "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
68
68
  [mode]: true,
69
69
  'breadcrumb-active': active,
70
70
  'breadcrumb-collapsed': collapsed,
@@ -74,7 +74,7 @@ export class Breadcrumb {
74
74
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
75
75
  'ion-activatable': clickable,
76
76
  'ion-focusable': clickable,
77
- }) }, h(TagType, Object.assign({}, attrs, { class: "breadcrumb-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur }, inheritedAttributes), h("slot", { name: "start" }), h("slot", null), h("slot", { name: "end" })), showCollapsedIndicator && (h("button", { part: "collapsed-indicator", "aria-label": "Show more breadcrumbs", onClick: () => this.collapsedIndicatorClick(), ref: (collapsedEl) => (this.collapsedRef = collapsedEl), class: {
77
+ }) }, h(TagType, Object.assign({ key: '6f232cfc590b2e2a23a2e1ee40d6658e7d8b4953' }, attrs, { class: "breadcrumb-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur }, inheritedAttributes), h("slot", { key: 'fec56c6f92c147fbd6273d3efb82b1a6c944699c', name: "start" }), h("slot", { key: '80aa33cdcaab810f544803c6105b489172542846' }), h("slot", { key: '6e1d3f332ae35f5061204bece9756a9bac4aaf4a', name: "end" })), showCollapsedIndicator && (h("button", { part: "collapsed-indicator", "aria-label": "Show more breadcrumbs", onClick: () => this.collapsedIndicatorClick(), ref: (collapsedEl) => (this.collapsedRef = collapsedEl), class: {
78
78
  'breadcrumbs-collapsed-indicator': true,
79
79
  } }, h("ion-icon", { "aria-hidden": "true", icon: ellipsisHorizontal, lazy: false }))), showSeparator && (
80
80
  /**
@@ -105,12 +105,12 @@ export class Breadcrumbs {
105
105
  render() {
106
106
  const { color, collapsed } = this;
107
107
  const mode = getIonMode(this);
108
- return (h(Host, { class: createColorClasses(color, {
108
+ return (h(Host, { key: '35f8a2bffdd85ba6dc31834ebef69602a5a7cca1', class: createColorClasses(color, {
109
109
  [mode]: true,
110
110
  'in-toolbar': hostContext('ion-toolbar', this.el),
111
111
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
112
112
  'breadcrumbs-collapsed': collapsed,
113
- }) }, h("slot", { onSlotchange: this.slotChanged })));
113
+ }) }, h("slot", { key: 'ada062b5d17380d311861d1cf1a22dd62bac5497', onSlotchange: this.slotChanged })));
114
114
  }
115
115
  static get is() { return "ion-breadcrumbs"; }
116
116
  static get encapsulation() { return "shadow"; }
@@ -199,7 +199,7 @@ export class Button {
199
199
  {
200
200
  type !== 'button' && this.renderHiddenButton();
201
201
  }
202
- return (h(Host, { onClick: this.handleClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
202
+ return (h(Host, { key: '8533314504b286ec10e26722f93376d86a7ca1c9', onClick: this.handleClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
203
203
  [mode]: true,
204
204
  [buttonType]: true,
205
205
  [`${buttonType}-${expand}`]: expand !== undefined,
@@ -214,7 +214,7 @@ export class Button {
214
214
  'button-disabled': disabled,
215
215
  'ion-activatable': true,
216
216
  'ion-focusable': true,
217
- }) }, h(TagType, Object.assign({}, attrs, { class: "button-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur }, inheritedAttributes), h("span", { class: "button-inner" }, h("slot", { name: "icon-only" }), h("slot", { name: "start" }), h("slot", null), h("slot", { name: "end" })), mode === 'md' && h("ion-ripple-effect", { type: this.rippleType }))));
217
+ }) }, h(TagType, Object.assign({ key: '79bf020fdac0c2ceb2b05547b3e5a9a11e60abb4' }, attrs, { class: "button-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur }, inheritedAttributes), h("span", { key: '109481ba86102647023b746b054b2718d3c9d92a', class: "button-inner" }, h("slot", { key: 'f824ddd9f988b9bd33136555b16aa790d9291b49', name: "icon-only" }), h("slot", { key: 'd614f4e430792c5f93be4b3a8c57a826d74b9cfd', name: "start" }), h("slot", { key: '95d00c8a980c31cc7f84732f51a17a0cd285a7cb' }), h("slot", { key: 'a228ff52cbe04dc9d2e22bb66611ecc96d130e6f', name: "end" })), mode === 'md' && h("ion-ripple-effect", { type: this.rippleType }))));
218
218
  }
219
219
  static get is() { return "ion-button"; }
220
220
  static get encapsulation() { return "shadow"; }
@@ -44,7 +44,7 @@ configs({ modes: ['md'] }).forEach(({ config, screenshot, title }) => {
44
44
  await page.mouse.move(boundingBox.x + boundingBox.width / 2, boundingBox.y + boundingBox.height / 2);
45
45
  await page.mouse.down();
46
46
  }
47
- await page.waitForSelector('#default.ion-activated');
47
+ await page.locator('#default.ion-activated').waitFor();
48
48
  await expect(button).toHaveScreenshot(screenshot(`button-ripple-effect`));
49
49
  });
50
50
  });
@@ -9,7 +9,7 @@ export class Buttons {
9
9
  }
10
10
  render() {
11
11
  const mode = getIonMode(this);
12
- return (h(Host, { class: {
12
+ return (h(Host, { key: '52c0c5535f5688a481746fe8fd92b6c02941526f', class: {
13
13
  [mode]: true,
14
14
  ['buttons-collapse']: this.collapse,
15
15
  } }));
@@ -49,7 +49,7 @@ export class Card {
49
49
  }
50
50
  render() {
51
51
  const mode = getIonMode(this);
52
- return (h(Host, { class: createColorClasses(this.color, {
52
+ return (h(Host, { key: '9e35c114ce466623024b94dd6797118ad027417d', class: createColorClasses(this.color, {
53
53
  [mode]: true,
54
54
  'card-disabled': this.disabled,
55
55
  'ion-activatable': this.isClickable(),
@@ -9,7 +9,7 @@ import { getIonMode } from "../../global/ionic-global";
9
9
  export class CardContent {
10
10
  render() {
11
11
  const mode = getIonMode(this);
12
- return (h(Host, { class: {
12
+ return (h(Host, { key: 'd4da147bb0b0b14684b54d37d04ba5a8f7a7d71d', class: {
13
13
  [mode]: true,
14
14
  // Used internally for styling
15
15
  [`card-content-${mode}`]: true,
@@ -14,11 +14,11 @@ export class CardHeader {
14
14
  }
15
15
  render() {
16
16
  const mode = getIonMode(this);
17
- return (h(Host, { class: createColorClasses(this.color, {
17
+ return (h(Host, { key: '070294064c4b17c941961c9cccf1ae6592b385b6', class: createColorClasses(this.color, {
18
18
  'card-header-translucent': this.translucent,
19
19
  'ion-inherit-color': true,
20
20
  [mode]: true,
21
- }) }, h("slot", null)));
21
+ }) }, h("slot", { key: 'adac918d5e93bf69b07c5bda329ebf8c719bd623' })));
22
22
  }
23
23
  static get is() { return "ion-card-header"; }
24
24
  static get encapsulation() { return "shadow"; }
@@ -13,10 +13,10 @@ export class CardSubtitle {
13
13
  }
14
14
  render() {
15
15
  const mode = getIonMode(this);
16
- return (h(Host, { role: "heading", "aria-level": "3", class: createColorClasses(this.color, {
16
+ return (h(Host, { key: 'ae115cf349cd13f88d20b1fbab6b8a813a87b925', role: "heading", "aria-level": "3", class: createColorClasses(this.color, {
17
17
  'ion-inherit-color': true,
18
18
  [mode]: true,
19
- }) }, h("slot", null)));
19
+ }) }, h("slot", { key: 'f5dd779b34b5c5c541cbbe56cc8a877e50513252' })));
20
20
  }
21
21
  static get is() { return "ion-card-subtitle"; }
22
22
  static get encapsulation() { return "shadow"; }
@@ -13,10 +13,10 @@ export class CardTitle {
13
13
  }
14
14
  render() {
15
15
  const mode = getIonMode(this);
16
- return (h(Host, { role: "heading", "aria-level": "2", class: createColorClasses(this.color, {
16
+ return (h(Host, { key: '432d7bf971fda63c30c748986143ec2a8be9e4af', role: "heading", "aria-level": "2", class: createColorClasses(this.color, {
17
17
  'ion-inherit-color': true,
18
18
  [mode]: true,
19
- }) }, h("slot", null)));
19
+ }) }, h("slot", { key: '3c5dcf6ac1bf981c6c0488f0027765269c80db5a' })));
20
20
  }
21
21
  static get is() { return "ion-card-title"; }
22
22
  static get encapsulation() { return "shadow"; }
@@ -15,12 +15,12 @@ export class Chip {
15
15
  }
16
16
  render() {
17
17
  const mode = getIonMode(this);
18
- return (h(Host, { "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
18
+ return (h(Host, { key: 'eca7cc616c0c9dd2ab28efd41e203fa094880e9e', "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
19
19
  [mode]: true,
20
20
  'chip-outline': this.outline,
21
21
  'chip-disabled': this.disabled,
22
22
  'ion-activatable': true,
23
- }) }, h("slot", null), mode === 'md' && h("ion-ripple-effect", null)));
23
+ }) }, h("slot", { key: 'b64c9067132791f73a8434c37d5a335fb2d96f74' }), mode === 'md' && h("ion-ripple-effect", null)));
24
24
  }
25
25
  static get is() { return "ion-chip"; }
26
26
  static get encapsulation() { return "shadow"; }
@@ -111,9 +111,9 @@ export class Col {
111
111
  render() {
112
112
  const isRTL = document.dir === 'rtl';
113
113
  const mode = getIonMode(this);
114
- return (h(Host, { class: {
114
+ return (h(Host, { key: 'c186972dd12d10a4600975c326f20666fed96abf', class: {
115
115
  [mode]: true,
116
- }, style: Object.assign(Object.assign(Object.assign(Object.assign({}, this.calculateOffset(isRTL)), this.calculatePull(isRTL)), this.calculatePush(isRTL)), this.calculateSize()) }, h("slot", null)));
116
+ }, style: Object.assign(Object.assign(Object.assign(Object.assign({}, this.calculateOffset(isRTL)), this.calculatePull(isRTL)), this.calculatePush(isRTL)), this.calculateSize()) }, h("slot", { key: '54cc8bd92f94cfd30d9f3e8e59e0f0dc38abfd63' })));
117
117
  }
118
118
  static get is() { return "ion-col"; }
119
119
  static get encapsulation() { return "shadow"; }
@@ -336,7 +336,7 @@ export class Content {
336
336
  const transitionShadow = mode === 'ios';
337
337
  const TagType = isMainContent ? 'main' : 'div';
338
338
  this.resize();
339
- return (h(Host, { class: createColorClasses(this.color, {
339
+ return (h(Host, { key: '65d85e1f7f85876a76eec79addc4bd9f697a5d84', class: createColorClasses(this.color, {
340
340
  [mode]: true,
341
341
  'content-sizing': hostContext('ion-popover', this.el),
342
342
  overscroll: forceOverscroll,
@@ -344,12 +344,12 @@ export class Content {
344
344
  }), style: {
345
345
  '--offset-top': `${this.cTop}px`,
346
346
  '--offset-bottom': `${this.cBottom}px`,
347
- } }, h("div", { ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), h(TagType, { class: {
347
+ } }, h("div", { key: 'e2ac474a62cbc864772c497469100436f41289ff', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), h(TagType, { key: '567a4bc2bcb13adfd987b088f95ac4b20b789f2c', class: {
348
348
  'inner-scroll': true,
349
349
  'scroll-x': scrollX,
350
350
  'scroll-y': scrollY,
351
351
  overscroll: (scrollX || scrollY) && forceOverscroll,
352
- }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", null)), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, h("slot", { name: "fixed" })));
352
+ }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '13909f87dd9f49bf1664ad95038499da376b9480' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, h("slot", { key: '05b56c139e203cfd1e3dd08054e99328e97e9243', name: "fixed" })));
353
353
  }
354
354
  static get is() { return "ion-content"; }
355
355
  static get encapsulation() { return "shadow"; }