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
@@ -4,7 +4,7 @@
4
4
  import { Build, Host, h } from "@stencil/core";
5
5
  import { getTimeGivenProgression } from "../../utils/animation/cubic-bezier";
6
6
  import { GESTURE_CONTROLLER } from "../../utils/gesture/index";
7
- import { shoudUseCloseWatcher } from "../../utils/hardware-back-button";
7
+ import { shouldUseCloseWatcher } from "../../utils/hardware-back-button";
8
8
  import { inheritAriaAttributes, assert, clamp, isEndSide as isEnd } from "../../utils/helpers";
9
9
  import { menuController } from "../../utils/menu-controller/index";
10
10
  import { getPresentedOverlay } from "../../utils/overlays";
@@ -601,13 +601,13 @@ export class Menu {
601
601
  * the ionBackButton listener in the menu controller
602
602
  * will handle closing the menu when Escape is pressed.
603
603
  */
604
- return (h(Host, { key: 'be7145625a30951e5cc26646f6121ee4fa4c910f', onKeyDown: shoudUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
604
+ return (h(Host, { key: '7443f67fbe5122052025bab862136044fc942401', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
605
605
  [mode]: true,
606
606
  [`menu-type-${type}`]: true,
607
607
  'menu-enabled': !disabled,
608
608
  [`menu-side-${side}`]: true,
609
609
  'menu-pane-visible': isPaneVisible,
610
- } }, h("div", { key: 'ecd6e0641ed67691db270190801f7be365a2d121', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: 'aea3780e259f2b3ea84697a509bb7f13fa9531e9' })), h("ion-backdrop", { key: 'be3253506a34c4c00eb1814621c674196b72db46', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
610
+ } }, h("div", { key: '45c7d37ace20f663a4bea89cb38bbc798f88dfbd', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: '975437a5d4029cc200b6dbc2d47a16b4318c00aa' })), h("ion-backdrop", { key: 'acc8a1f5dc1b1e2a34757bf797e794017f545bdc', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
611
611
  }
612
612
  static get is() { return "ion-menu"; }
613
613
  static get encapsulation() { return "shadow"; }
@@ -46,7 +46,7 @@ export class MenuButton {
46
46
  type: this.type,
47
47
  };
48
48
  const ariaLabel = inheritedAttributes['aria-label'] || 'menu';
49
- return (h(Host, { key: '2fd7130b8d28695162f7efebbd2131e5e9e4f330', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, "aria-hidden": hidden ? 'true' : null, class: createColorClasses(color, {
49
+ return (h(Host, { key: '7a4543dfcbf559f0d3a473683f8e0bd1d4c3542a', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, "aria-hidden": hidden ? 'true' : null, class: createColorClasses(color, {
50
50
  [mode]: true,
51
51
  button: true, // ion-buttons target .button
52
52
  'menu-button-hidden': hidden,
@@ -55,7 +55,7 @@ export class MenuButton {
55
55
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
56
56
  'ion-activatable': true,
57
57
  'ion-focusable': true,
58
- }) }, h("button", Object.assign({ key: 'fa6b1fb9291df812b04065b4b0ebdfd28e5217eb' }, attrs, { disabled: disabled, class: "button-native", part: "native", "aria-label": ariaLabel }), h("span", { key: '88106a08070ebff7457c581301efe649829aded2', class: "button-inner" }, h("slot", { key: 'e3edfb89e5705b2c08c66f3d3452457667de3657' }, h("ion-icon", { key: '24678e9c3bb2f1f3db113a2ae0ec93e407a7de0c', part: "icon", icon: menuIcon, mode: mode, lazy: false, "aria-hidden": "true" }))), mode === 'md' && h("ion-ripple-effect", { type: "unbounded" }))));
58
+ }) }, h("button", Object.assign({ key: '2b6944dc130fa765ac7559077254555583529ec3' }, attrs, { disabled: disabled, class: "button-native", part: "native", "aria-label": ariaLabel }), h("span", { key: 'b4d1006bec8c9e761c64ae3e2fb64848dfc30307', class: "button-inner" }, h("slot", { key: 'eaf1d57cd2e841c70095821576c52062dc76500b' }, h("ion-icon", { key: '105ddb806aae2e6add6cb3989fd4a5cf5ee7d952', part: "icon", icon: menuIcon, mode: mode, lazy: false, "aria-hidden": "true" }))), mode === 'md' && h("ion-ripple-effect", { key: '8a312aab747de2bdd6adee74fb0bfcbbde12c191', type: "unbounded" }))));
59
59
  }
60
60
  static get is() { return "ion-menu-button"; }
61
61
  static get encapsulation() { return "shadow"; }
@@ -26,10 +26,10 @@ export class MenuToggle {
26
26
  render() {
27
27
  const mode = getIonMode(this);
28
28
  const hidden = this.autoHide && !this.visible;
29
- return (h(Host, { key: '5b75baade530bf9e7ed9165a5db3e513975e22f2', onClick: this.onClick, "aria-hidden": hidden ? 'true' : null, class: {
29
+ return (h(Host, { key: '94a0815a634c6fb1991854bfbcf5b2b4b61d7710', onClick: this.onClick, "aria-hidden": hidden ? 'true' : null, class: {
30
30
  [mode]: true,
31
31
  'menu-toggle-hidden': hidden,
32
- } }, h("slot", { key: '65dea458274b685125c22af54aa153cf4977113c' })));
32
+ } }, h("slot", { key: 'f3ac6d17d5421390ab05f3f31ad00ec4f2ca5c7c' })));
33
33
  }
34
34
  static get is() { return "ion-menu-toggle"; }
35
35
  static get encapsulation() { return "shadow"; }
@@ -1,8 +1,9 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import { isIonContent, findClosestIonContent } from "../../../utils/content/index";
4
5
  import { createGesture } from "../../../utils/gesture/index";
5
- import { clamp, raf } from "../../../utils/helpers";
6
+ import { clamp, raf, getElementRoot } from "../../../utils/helpers";
6
7
  import { getBackdropValueForSheet } from "../utils";
7
8
  import { calculateSpringStep, handleCanDismiss } from "./utils";
8
9
  export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], getCurrentBreakpoint, onDismiss, onBreakpointChange) => {
@@ -87,19 +88,32 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
87
88
  }
88
89
  const canStart = (detail) => {
89
90
  /**
90
- * If the sheet is fully expanded and
91
- * the user is swiping on the content,
92
- * the gesture should not start to
93
- * allow for scrolling on the content.
91
+ * If we are swiping on the content, swiping should only be possible if the content
92
+ * is scrolled all the way to the top so that we do not interfere with scrolling.
93
+ *
94
+ * We cannot assume that the `ion-content` target will remain consistent between swipes.
95
+ * For example, when using ion-nav within a modal it is possible to swipe, push a view,
96
+ * and then swipe again. The target content will not be the same between swipes.
94
97
  */
95
- const content = detail.event.target.closest('ion-content');
98
+ const contentEl = findClosestIonContent(detail.event.target);
96
99
  currentBreakpoint = getCurrentBreakpoint();
97
- if (currentBreakpoint === 1 && content) {
98
- return false;
100
+ if (currentBreakpoint === 1 && contentEl) {
101
+ /**
102
+ * The modal should never swipe to close on the content with a refresher.
103
+ * Note 1: We cannot solve this by making this gesture have a higher priority than
104
+ * the refresher gesture as the iOS native refresh gesture uses a scroll listener in
105
+ * addition to a gesture.
106
+ *
107
+ * Note 2: Do not use getScrollElement here because we need this to be a synchronous
108
+ * operation, and getScrollElement is asynchronous.
109
+ */
110
+ const scrollEl = isIonContent(contentEl) ? getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
111
+ const hasRefresherInContent = !!contentEl.querySelector('ion-refresher');
112
+ return !hasRefresherInContent && scrollEl.scrollTop === 0;
99
113
  }
100
114
  return true;
101
115
  };
102
- const onStart = () => {
116
+ const onStart = (detail) => {
103
117
  /**
104
118
  * If canDismiss is anything other than `true`
105
119
  * then users should be able to swipe down
@@ -114,11 +128,10 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
114
128
  */
115
129
  canDismissBlocksGesture = baseEl.canDismiss !== undefined && baseEl.canDismiss !== true && minBreakpoint === 0;
116
130
  /**
117
- * If swiping on the content
118
- * we should disable scrolling otherwise
119
- * the sheet will expand and the content will scroll.
131
+ * If we are pulling down, then it is possible we are pulling on the content.
132
+ * We do not want scrolling to happen at the same time as the gesture.
120
133
  */
121
- if (contentEl) {
134
+ if (detail.deltaY > 0 && contentEl) {
122
135
  contentEl.scrollY = false;
123
136
  }
124
137
  raf(() => {
@@ -131,6 +144,15 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
131
144
  animation.progressStart(true, 1 - currentBreakpoint);
132
145
  };
133
146
  const onMove = (detail) => {
147
+ /**
148
+ * If we are pulling down, then it is possible we are pulling on the content.
149
+ * We do not want scrolling to happen at the same time as the gesture.
150
+ * This accounts for when the user scrolls down, scrolls all the way up, and then
151
+ * pulls down again such that the modal should start to move.
152
+ */
153
+ if (detail.deltaY > 0 && contentEl) {
154
+ contentEl.scrollY = false;
155
+ }
134
156
  /**
135
157
  * Given the change in gesture position on the Y axis,
136
158
  * compute where the offset of the animation should be
@@ -233,6 +255,16 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
233
255
  else if (!shouldRemainOpen) {
234
256
  onDismiss();
235
257
  }
258
+ /**
259
+ * If the sheet is going to be fully expanded then we should enable
260
+ * scrolling immediately. The sheet modal animation takes ~500ms to finish
261
+ * so if we wait until then there is a visible delay for when scrolling is
262
+ * re-enabled. Native iOS allows for scrolling on the sheet modal as soon
263
+ * as the gesture is released, so we align with that.
264
+ */
265
+ if (contentEl && snapToBreakpoint === breakpoints[breakpoints.length - 1]) {
266
+ contentEl.scrollY = true;
267
+ }
236
268
  return new Promise((resolve) => {
237
269
  animation
238
270
  .onFinish(() => {
@@ -251,13 +283,6 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
251
283
  animation.progressStart(true, 1 - snapToBreakpoint);
252
284
  currentBreakpoint = snapToBreakpoint;
253
285
  onBreakpointChange(currentBreakpoint);
254
- /**
255
- * If the sheet is fully expanded, we can safely
256
- * enable scrolling again.
257
- */
258
- if (contentEl && currentBreakpoint === breakpoints[breakpoints.length - 1]) {
259
- contentEl.scrollY = true;
260
- }
261
286
  /**
262
287
  * Backdrop should become enabled
263
288
  * after the backdropBreakpoint value
@@ -131,9 +131,41 @@ export class Modal {
131
131
  this.triggerController.removeClickListener();
132
132
  }
133
133
  componentWillLoad() {
134
- const { breakpoints, initialBreakpoint, el } = this;
134
+ const { breakpoints, initialBreakpoint, el, htmlAttributes } = this;
135
135
  const isSheetModal = (this.isSheetModal = breakpoints !== undefined && initialBreakpoint !== undefined);
136
- this.inheritedAttributes = inheritAttributes(el, ['aria-label', 'role']);
136
+ const attributesToInherit = ['aria-label', 'role'];
137
+ this.inheritedAttributes = inheritAttributes(el, attributesToInherit);
138
+ /**
139
+ * When using a controller modal you can set attributes
140
+ * using the htmlAttributes property. Since the above attributes
141
+ * need to be inherited inside of the modal, we need to look
142
+ * and see if these attributes are being set via htmlAttributes.
143
+ *
144
+ * We could alternatively move this to componentDidLoad to simplify the work
145
+ * here, but we'd then need to make inheritedAttributes a State variable,
146
+ * thus causing another render to always happen after the first render.
147
+ */
148
+ if (htmlAttributes !== undefined) {
149
+ attributesToInherit.forEach((attribute) => {
150
+ const attributeValue = htmlAttributes[attribute];
151
+ if (attributeValue) {
152
+ /**
153
+ * If an attribute we need to inherit was
154
+ * set using htmlAttributes then add it to
155
+ * inheritedAttributes and remove it from htmlAttributes.
156
+ * This ensures the attribute is inherited and not
157
+ * set on the host.
158
+ *
159
+ * In this case, if an inherited attribute is set
160
+ * on the host element and using htmlAttributes then
161
+ * htmlAttributes wins, but that's not a pattern that we recommend.
162
+ * The only time you'd need htmlAttributes is when using modalController.
163
+ */
164
+ this.inheritedAttributes = Object.assign(Object.assign({}, this.inheritedAttributes), { [attribute]: htmlAttributes[attribute] });
165
+ delete htmlAttributes[attribute];
166
+ }
167
+ });
168
+ }
137
169
  if (isSheetModal) {
138
170
  this.currentBreakpoint = this.initialBreakpoint;
139
171
  }
@@ -530,18 +562,18 @@ export class Modal {
530
562
  const mode = getIonMode(this);
531
563
  const isCardModal = presentingElement !== undefined && mode === 'ios';
532
564
  const isHandleCycle = handleBehavior === 'cycle';
533
- return (h(Host, Object.assign({ key: '0c2c4369ab2df4ef4660addea5e927c6a0232864', "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
565
+ return (h(Host, Object.assign({ key: 'e4ad28e6e794560d85252aebdca7f4752e4e7e99', "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
534
566
  zIndex: `${20000 + this.overlayIndex}`,
535
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), h("ion-backdrop", { key: 'd044383a776c2ee1703f996caedaedca47f2948f', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { class: "modal-shadow" }), h("div", Object.assign({ key: '8d23b6a3cc9069e4d46fa0645cde9db3e6f89507',
567
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), h("ion-backdrop", { key: '6efd67361a062d15488390f9f0d6c0841e541893', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '557b1c6b297df75acc80d1350b971e65ace6c343', class: "modal-shadow" }), h("div", Object.assign({ key: '67f9b27b662303fbaadaee2ae89972caadfd9994',
536
568
  /*
537
569
  role and aria-modal must be used on the
538
570
  same element. They must also be set inside the
539
571
  shadow DOM otherwise ion-button will not be highlighted
540
572
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
541
573
  */
542
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { class: "modal-handle",
574
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: '8f1eecc451b52467a8c3cfe500335cf6254bbfbc', class: "modal-handle",
543
575
  // Prevents the handle from receiving keyboard focus when it does not cycle
544
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle" })), h("slot", { key: '3fbb689e4bf5575fbb26ad1000f6ac5993f3bf8f' }))));
576
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle" })), h("slot", { key: 'cdc923404f01a14b9071a434c68547da3b22c71e' }))));
545
577
  }
546
578
  static get is() { return "ion-modal"; }
547
579
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,32 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { h } from "@stencil/core";
5
+ import { newSpecPage } from "@stencil/core/testing";
6
+ import { Modal } from "../modal";
7
+ it('should inherit attributes', async () => {
8
+ /**
9
+ * Note: This example should not be used in production.
10
+ * This only serves to check that `role` can be customized.
11
+ */
12
+ const page = await newSpecPage({
13
+ components: [Modal],
14
+ template: () => h("ion-modal", { overlayIndex: 1, "aria-label": "my label", role: "presentation" }),
15
+ });
16
+ const modal = page.body.querySelector('ion-modal');
17
+ const contentWrapper = modal.shadowRoot.querySelector('[part="content"]');
18
+ expect(contentWrapper.getAttribute('aria-label')).toBe('my label');
19
+ expect(contentWrapper.getAttribute('role')).toBe('presentation');
20
+ });
21
+ it('should inherit attributes when set via htmlAttributes', async () => {
22
+ const page = await newSpecPage({
23
+ components: [Modal],
24
+ template: () => (h("ion-modal", { overlayIndex: 1, htmlAttributes: { 'aria-label': 'my label', role: 'presentation' } })),
25
+ });
26
+ const modal = page.body.querySelector('ion-modal');
27
+ const contentWrapper = modal.shadowRoot.querySelector('[part="content"]');
28
+ expect(contentWrapper.getAttribute('aria-label')).toBe('my label');
29
+ expect(contentWrapper.getAttribute('role')).toBe('presentation');
30
+ expect(modal.hasAttribute('aria-label')).toBe(false);
31
+ expect(modal.hasAttribute('role')).toBe(false);
32
+ });
@@ -827,7 +827,7 @@ export class Nav {
827
827
  }
828
828
  }
829
829
  render() {
830
- return h("slot", { key: '654286a8a7ef03d4a22497eb51e781a9a8979774' });
830
+ return h("slot", { key: '6894eccc60e446294b01261477691ea1e88348ab' });
831
831
  }
832
832
  static get is() { return "ion-nav"; }
833
833
  static get encapsulation() { return "shadow"; }
@@ -14,7 +14,7 @@ export class NavLink {
14
14
  this.routerAnimation = undefined;
15
15
  }
16
16
  render() {
17
- return h(Host, { key: 'a781794425ad0866705bc6691256184b93477a74', onClick: this.onClick });
17
+ return h(Host, { key: 'dab6e8a908395d99c87452c5e5aa4e61d9e72435', onClick: this.onClick });
18
18
  }
19
19
  static get is() { return "ion-nav-link"; }
20
20
  static get properties() {
@@ -13,9 +13,9 @@ export class Note {
13
13
  }
14
14
  render() {
15
15
  const mode = getIonMode(this);
16
- return (h(Host, { key: 'eebc0ea94483a248192408a1546739700281d2ae', class: createColorClasses(this.color, {
16
+ return (h(Host, { key: '79a17a318ec6e8326c9741b4a9bb4598acdc225e', class: createColorClasses(this.color, {
17
17
  [mode]: true,
18
- }) }, h("slot", { key: '33018e11967398327a0e7c20522547a4d9e8f55b' })));
18
+ }) }, h("slot", { key: '5adeaccfabb4bee7b84ea5c5de804bd255b29255' })));
19
19
  }
20
20
  static get is() { return "ion-note"; }
21
21
  static get encapsulation() { return "shadow"; }
@@ -184,11 +184,11 @@ export class Picker {
184
184
  render() {
185
185
  const { htmlAttributes } = this;
186
186
  const mode = getIonMode(this);
187
- return (h(Host, Object.assign({ key: 'c266cc072afaba2da22f70d8b62dc4bc6756d188', "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
187
+ return (h(Host, Object.assign({ key: 'eb5f91ea74fb11daa6942f779ef461742cad9ecb', "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
188
188
  zIndex: `${20000 + this.overlayIndex}`,
189
189
  }, class: Object.assign({ [mode]: true,
190
190
  // Used internally for styling
191
- [`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: '35ee3e5028028835580e28ac2c8db65a924d5d6a', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '8b454e6edbcfc45c57d3d8baf7c14b7905921a6e', tabindex: "0" }), h("div", { key: 'e0fee78ec6d097bf0963190f748e5daad602e0f7', class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, h("div", { key: 'ce66bca18fc3e982ad7d6660f27cb1a03fb8247b', class: "picker-toolbar" }, this.buttons.map((b) => (h("div", { class: buttonWrapperClass(b) }, h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), h("div", { key: 'a58b9523fe16f109dd6de0610717c5077fed964b', class: "picker-columns" }, h("div", { key: 'acd54c0314cff51e8513a08dd9755c4b847c0617', class: "picker-above-highlight" }), this.presented && this.columns.map((c) => h("ion-picker-column", { col: c })), h("div", { key: '604730bd87582d048d850c6e0a0f29ba33258918', class: "picker-below-highlight" }))), h("div", { key: '93baf5e6e57aec5f084d7d5b24af14e7d8126b5a', tabindex: "0" })));
191
+ [`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: '7ea872d939e62f14129fff15334b2822ad2360c9', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '2d77c225091eacab0207e28c96b966122afafef0', tabindex: "0" }), h("div", { key: '630d21e0c60ad97b71462cdc540858bb6ced0b8f', class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, h("div", { key: 'fa8553ec8d2ce8bf93e16e02334b6475cb51b5d4', class: "picker-toolbar" }, this.buttons.map((b) => (h("div", { class: buttonWrapperClass(b) }, h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), h("div", { key: '177d1bcbd0ce38f16d9c936295a917fb981d02d7', class: "picker-columns" }, h("div", { key: 'be99b6e0279c210ef91a88ccc81acc7d37917a53', class: "picker-above-highlight" }), this.presented && this.columns.map((c) => h("ion-picker-column", { col: c })), h("div", { key: 'b36b21e8133b59e873e1d3447a1279f1b971c854', class: "picker-below-highlight" }))), h("div", { key: '17cea6dd24dbb0a08073ca4a84bfe027eb24833d', tabindex: "0" })));
192
192
  }
193
193
  static get is() { return "ion-picker"; }
194
194
  static get encapsulation() { return "scoped"; }
@@ -336,9 +336,9 @@ export class PickerColumnCmp {
336
336
  render() {
337
337
  const col = this.col;
338
338
  const mode = getIonMode(this);
339
- return (h(Host, { key: '06e2ae483a3bcf4fe721ad0c48cded6a1efdc6c0', class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
339
+ return (h(Host, { key: '49bb4c67a67c7318d4c305df78ceabae36355112', class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
340
340
  'max-width': this.col.columnWidth,
341
- } }, col.prefix && (h("div", { class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), h("div", { key: '14bea013788d899edf7155eb3cc10f79fe8e4690', class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index) => (h("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index }, o.text)))), col.suffix && (h("div", { class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
341
+ } }, col.prefix && (h("div", { key: '7e65761d24473e4ba0ce2d4fc707a5c5e8127903', class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), h("div", { key: '65c3aea609401e8ae4ea6d363a1b9436796c0a86', class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index) => (h("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index }, o.text)))), col.suffix && (h("div", { key: 'c2e5a324ba95dd8832d3eb81b139e1f674d74a35', class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
342
342
  }
343
343
  static get is() { return "ion-picker-column"; }
344
344
  static get originalStyleUrls() {
@@ -244,7 +244,11 @@ export class PickerColumnInternal {
244
244
  */
245
245
  componentWillLoad() {
246
246
  const visibleCallback = (entries) => {
247
- const ev = entries[0];
247
+ /**
248
+ * Browsers will sometimes group multiple IO events into a single callback.
249
+ * As a result, we want to grab the last/most recent event in case there are multiple events.
250
+ */
251
+ const ev = entries[entries.length - 1];
248
252
  if (ev.isIntersecting) {
249
253
  const { activeItem, el } = this;
250
254
  this.isColumnVisible = true;
@@ -333,11 +337,11 @@ export class PickerColumnInternal {
333
337
  * the attribute can be moved to datetime.tsx and set on every
334
338
  * instance of ion-picker-column-internal there instead.
335
339
  */
336
- return (h(Host, { key: 'd0e3818aa4ab06aefd988d1b42ae754244727b8f', exportparts: `${PICKER_ITEM_PART}, ${PICKER_ITEM_ACTIVE_PART}`, disabled: pickerDisabled, tabindex: pickerDisabled ? null : 0, class: createColorClasses(color, {
340
+ return (h(Host, { key: '42a034f2533d30d19f96a121eb74d5f757e1c684', exportparts: `${PICKER_ITEM_PART}, ${PICKER_ITEM_ACTIVE_PART}`, disabled: pickerDisabled, tabindex: pickerDisabled ? null : 0, class: createColorClasses(color, {
337
341
  [mode]: true,
338
342
  ['picker-column-active']: isActive,
339
343
  ['picker-column-numeric-input']: numericInput,
340
- }) }, h("div", { key: 'ec3b16415db5f64e3fab37fda023560ebcdc9423', class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '40c78c9a1277807572d73e23048c2730cab88f5a', class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: 'c51fa817f6999356cf3568a46098e954936b45d5', class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), items.map((item, index) => {
344
+ }) }, h("div", { key: '85efccb40c87d473c06026b8041d57b40d2369c3', class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '9fae4dd6697f23acba18c218ba250ea77954b18d', class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: 'f117afeb204a4f6bb34a1cd0e1b786fa479d8b32', class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), items.map((item, index) => {
341
345
  const isItemDisabled = pickerDisabled || item.disabled || false;
342
346
  {
343
347
  /*
@@ -354,7 +358,7 @@ export class PickerColumnInternal {
354
358
  }, "data-value": item.value, "data-index": index, onClick: (ev) => {
355
359
  this.centerPickerItemInView(ev.target, true);
356
360
  }, disabled: isItemDisabled, part: PICKER_ITEM_PART }, item.text));
357
- }), h("div", { key: '80a7461dfe571f46466219b05007b021711aed32', class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: 'fed82263295f58c51e2b753d0c06c7d71872b8a7', class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: 'e805dff4122cc4e5fb4d7dcb96054fee8ad3bd07', class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0")));
361
+ }), h("div", { key: '28aa37f9ce90e88b9c3a5b2c399e3066e9f339e1', class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: 'ef4ae6bee2b17918f0c2aba9d5c720c1d95987e4', class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '564967bc8e42a9018163850da3a967a933b3de7b', class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0")));
358
362
  }
359
363
  static get is() { return "ion-picker-column-internal"; }
360
364
  static get encapsulation() { return "shadow"; }
@@ -468,7 +468,7 @@ export class PickerInternal {
468
468
  this.emitInputModeChange();
469
469
  }
470
470
  render() {
471
- return (h(Host, { key: 'f6b301345583f5ccfc31cce536176af7aeefd193', onPointerDown: (ev) => this.onPointerDown(ev), onClick: () => this.onClick() }, h("input", { key: 'e57fd191d49cc500b719d5b9ad35054d55e96c43', "aria-hidden": "true", tabindex: -1, inputmode: "numeric", type: "number", onKeyDown: (ev) => {
471
+ return (h(Host, { key: '01cbd466787242ad070b01909714089570b4d67f', onPointerDown: (ev) => this.onPointerDown(ev), onClick: () => this.onClick() }, h("input", { key: '7ff8c0a74c107610a6f0dd9fbc2fc7a4a6dc2468', "aria-hidden": "true", tabindex: -1, inputmode: "numeric", type: "number", onKeyDown: (ev) => {
472
472
  var _a;
473
473
  /**
474
474
  * The "Enter" key represents
@@ -483,7 +483,7 @@ export class PickerInternal {
483
483
  if (ev.key === 'Enter') {
484
484
  (_a = this.inputEl) === null || _a === void 0 ? void 0 : _a.blur();
485
485
  }
486
- }, ref: (el) => (this.inputEl = el), onInput: () => this.onInputChange(), onBlur: () => this.exitInputMode() }), h("div", { key: '3360e7d913f87293844928e430acde69d399f68e', class: "picker-before" }), h("div", { key: '4db89e681458d4eec5d60ff47d3e0ba9fd116682', class: "picker-after" }), h("div", { key: 'a21b20d77dac8141623995b5a53f416d3d9fc1ef', class: "picker-highlight", ref: (el) => (this.highlightEl = el) }), h("slot", { key: '86c7d926523b615b4769bd1a4e9713b351089369' })));
486
+ }, ref: (el) => (this.inputEl = el), onInput: () => this.onInputChange(), onBlur: () => this.exitInputMode() }), h("div", { key: '4700c9d877f54ae8f3fb173122193c27637f70a4', class: "picker-before" }), h("div", { key: '7ceae834b15d559f3819ec2116f83669cf6665fc', class: "picker-after" }), h("div", { key: '2d3bfda76279c2ee14edc067c53651be23b8b525', class: "picker-highlight", ref: (el) => (this.highlightEl = el) }), h("slot", { key: '4797def7a3882a8a911ad47949b76f58a9f448d1' })));
487
487
  }
488
488
  static get is() { return "ion-picker-internal"; }
489
489
  static get encapsulation() { return "shadow"; }
@@ -141,7 +141,6 @@
141
141
  --ion-safe-area-left: 0px;
142
142
  display: flex;
143
143
  flex-direction: column;
144
- overflow: hidden;
145
144
  }
146
145
 
147
146
  :host(.popover-nested.popover-side-left) {
@@ -335,9 +335,9 @@ export class Popover {
335
335
  const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes } = this;
336
336
  const desktop = isPlatform('desktop');
337
337
  const enableArrow = arrow && !parentPopover;
338
- return (h(Host, Object.assign({ key: '104a5bf92a9bbd2efc71d499a8500e5d55f81711', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
338
+ return (h(Host, Object.assign({ key: 'f3b86c7bc6ef6b1b27a6ac78e7ddd98e46223bd4', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
339
339
  zIndex: `${20000 + this.overlayIndex}`,
340
- }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: 'ef0baa04c22444d4bc705220235a892308d67586', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { class: "popover-arrow", part: "arrow" }), h("div", { key: '5cc5f5c353de614e484e9cfeacecfca9fbfde0e0', class: "popover-content", part: "content" }, h("slot", { key: '2d85c591cdc85efa98afbf40f676525f1402efcf' })))));
340
+ }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { key: 'f7fbd914100838ed7d419eedd19e6b1efa691127', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: 'a651cb4daa6556e761c2e2b672306ad25e4c9429', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { key: '7c5c7d8d6f9530535124e3fc75a38055f68b7589', class: "popover-arrow", part: "arrow" }), h("div", { key: '9f92fff4f36941e8f7de9774aef7d7508ca5cfe5', class: "popover-content", part: "content" }, h("slot", { key: '26c4e3df40a4832caff996ead3321c656eb5704f' })))));
341
341
  }
342
342
  static get is() { return "ion-popover"; }
343
343
  static get encapsulation() { return "shadow"; }
@@ -141,7 +141,6 @@
141
141
  --ion-safe-area-left: 0px;
142
142
  display: flex;
143
143
  flex-direction: column;
144
- overflow: hidden;
145
144
  }
146
145
 
147
146
  :host(.popover-nested.popover-side-left) {
@@ -46,6 +46,82 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
46
46
  * Translucent popovers are only available on iOS
47
47
  */
48
48
  configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
49
+ test.describe(title('popover: scrolling'), async () => {
50
+ test.beforeEach(({ skip }) => {
51
+ test.info().annotations.push({
52
+ type: 'issue',
53
+ description: 'https://github.com/ionic-team/ionic-framework/issues/29211',
54
+ });
55
+ // We are testing if Ionic sets overflow is set correctly on elements,
56
+ // so we do not need to test across browsers
57
+ skip.browser('webkit', 'Behavior does not vary across browsers');
58
+ skip.browser('firefox', 'Behavior does not vary across browsers');
59
+ });
60
+ test('should scroll to bottom without IonContent', async ({ page }) => {
61
+ await page.setContent(`
62
+ <style>
63
+ ion-popover {
64
+ --height: 150px;
65
+ }
66
+ </style>
67
+ <ion-popover>
68
+ <p>Text</p>
69
+ <p>Text</p>
70
+ <p>Text</p>
71
+ <p>Text</p>
72
+ <p>Text</p>
73
+ <p>Text</p>
74
+ <p>Text</p>
75
+ <p>Text</p>
76
+ <p>Text</p>
77
+ <p>Text</p>
78
+ </ion-popover>
79
+ `, config);
80
+ const popover = page.locator('ion-popover');
81
+ const viewport = popover.locator('.popover-viewport');
82
+ const p = popover.locator('p');
83
+ const lastP = await p.last();
84
+ await popover.evaluate((el) => el.present());
85
+ await expect(lastP).not.toBeInViewport();
86
+ // hover over viewport and scroll to bottom
87
+ await viewport.hover();
88
+ await page.mouse.wheel(0, 500);
89
+ await expect(lastP).toBeInViewport();
90
+ });
91
+ test('should scroll to bottom with IonContent', async ({ page }) => {
92
+ await page.setContent(`
93
+ <style>
94
+ ion-popover {
95
+ --height: 150px;
96
+ }
97
+ </style>
98
+ <ion-popover>
99
+ <ion-content>
100
+ <p>Text</p>
101
+ <p>Text</p>
102
+ <p>Text</p>
103
+ <p>Text</p>
104
+ <p>Text</p>
105
+ <p>Text</p>
106
+ <p>Text</p>
107
+ <p>Text</p>
108
+ <p>Text</p>
109
+ <p>Text</p>
110
+ </ion-content>
111
+ </ion-popover>
112
+ `, config);
113
+ const popover = page.locator('ion-popover');
114
+ const content = popover.locator('ion-content');
115
+ const p = popover.locator('p');
116
+ const lastP = await p.last();
117
+ await popover.evaluate((el) => el.present());
118
+ await expect(lastP).not.toBeInViewport();
119
+ // hover over viewport and scroll to bottom
120
+ await content.hover();
121
+ await page.mouse.wheel(0, 500);
122
+ await expect(lastP).toBeInViewport();
123
+ });
124
+ });
49
125
  test.describe(title('popover: translucent variants'), async () => {
50
126
  let popoverFixture;
51
127
  test.beforeEach(async ({ page }) => {
@@ -26,7 +26,7 @@ export class ProgressBar {
26
26
  const { color, type, reversed, value, buffer } = this;
27
27
  const paused = config.getBoolean('_testing');
28
28
  const mode = getIonMode(this);
29
- return (h(Host, { key: '384d09558f91dc8119e689c3a8923e67c54c7eb2', role: "progressbar", "aria-valuenow": type === 'determinate' ? value : null, "aria-valuemin": "0", "aria-valuemax": "1", class: createColorClasses(color, {
29
+ return (h(Host, { key: '944b79ed6fce1b2c0ed48681cd8517a5abbddd80', role: "progressbar", "aria-valuenow": type === 'determinate' ? value : null, "aria-valuemin": "0", "aria-valuemax": "1", class: createColorClasses(color, {
30
30
  [mode]: true,
31
31
  [`progress-bar-${type}`]: true,
32
32
  'progress-paused': paused,
@@ -153,7 +153,7 @@ export class RadioGroup {
153
153
  const { label, labelId, el, name, value } = this;
154
154
  const mode = getIonMode(this);
155
155
  renderHiddenInput(true, el, name, value, false);
156
- return h(Host, { key: 'd8e84feca8f4dbe7605bc4ad096b6e68b482ba68', role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick, class: mode });
156
+ return h(Host, { key: '6065674a08ac2ead25e87219b5628879a759b75a', role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick, class: mode });
157
157
  }
158
158
  static get is() { return "ion-radio-group"; }
159
159
  static get properties() {