@ionic/core 7.4.2-dev.11695944163.13e7414e → 7.4.2-dev.11696878562.16da82aa

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 (527) hide show
  1. package/components/action-sheet.js +2 -2
  2. package/components/alert.js +8 -0
  3. package/components/button.js +2 -2
  4. package/components/buttons.js +2 -2
  5. package/components/checkbox.js +2 -2
  6. package/components/data.js +96 -22
  7. package/components/haptic.js +1 -0
  8. package/components/index.js +1 -0
  9. package/components/ion-back-button.js +2 -2
  10. package/components/ion-badge.js +2 -2
  11. package/components/ion-breadcrumb.js +2 -2
  12. package/components/ion-card-content.js +2 -2
  13. package/components/ion-card-subtitle.js +2 -2
  14. package/components/ion-card-title.js +2 -2
  15. package/components/ion-card.js +2 -2
  16. package/components/ion-chip.js +3 -8
  17. package/components/ion-datetime-button.js +6 -6
  18. package/components/ion-datetime.js +6 -6
  19. package/components/ion-header.js +1 -1
  20. package/components/ion-input.js +2 -2
  21. package/components/ion-item-divider.js +2 -2
  22. package/components/ion-item-option.js +2 -2
  23. package/components/ion-item-options.js +2 -2
  24. package/components/ion-loading.js +2 -2
  25. package/components/ion-menu-button.js +2 -2
  26. package/components/ion-nav.js +1 -0
  27. package/components/ion-range.js +2 -2
  28. package/components/ion-reorder.js +2 -2
  29. package/components/ion-router.js +3 -0
  30. package/components/ion-searchbar.js +3 -9
  31. package/components/ion-select.js +3 -3
  32. package/components/ion-textarea.js +2 -2
  33. package/components/ion-title.js +2 -2
  34. package/components/ion-toast.js +152 -15
  35. package/components/ion-toolbar.js +1 -1
  36. package/components/ios.transition.js +5 -4
  37. package/components/item.js +2 -2
  38. package/components/label.js +2 -2
  39. package/components/list-header.js +2 -2
  40. package/components/note.js +2 -2
  41. package/components/overlays.js +1 -0
  42. package/components/radio.js +2 -2
  43. package/css/core.css +0 -100
  44. package/css/core.css.map +1 -1
  45. package/css/display.css +0 -33
  46. package/css/display.css.map +1 -1
  47. package/css/float-elements.css +0 -33
  48. package/css/float-elements.css.map +1 -1
  49. package/css/global.bundle.css +6 -84
  50. package/css/global.bundle.css.map +1 -1
  51. package/css/ionic-swiper.css +0 -33
  52. package/css/ionic-swiper.css.map +1 -1
  53. package/css/ionic.bundle.css +1 -1
  54. package/css/ionic.bundle.css.map +1 -1
  55. package/css/padding.css +0 -33
  56. package/css/padding.css.map +1 -1
  57. package/css/structure.css +0 -33
  58. package/css/structure.css.map +1 -1
  59. package/css/text-alignment.css +0 -33
  60. package/css/text-alignment.css.map +1 -1
  61. package/css/text-transformation.css +0 -33
  62. package/css/text-transformation.css.map +1 -1
  63. package/css/typography.css +6 -51
  64. package/css/typography.css.map +1 -1
  65. package/css/utils.bundle.css +0 -165
  66. package/css/utils.bundle.css.map +1 -1
  67. package/dist/cjs/{button-active-32f15660.js → button-active-19cc8cae.js} +1 -1
  68. package/dist/cjs/{data-db832785.js → data-c8d21093.js} +96 -22
  69. package/dist/cjs/{haptic-c5f6b4d5.js → haptic-678abc9f.js} +1 -0
  70. package/dist/cjs/{index-4e502bd1.js → index-77d4b2e7.js} +2 -2
  71. package/dist/cjs/index.cjs.js +6 -4
  72. package/dist/cjs/ion-action-sheet.cjs.entry.js +5 -5
  73. package/dist/cjs/ion-alert.cjs.entry.js +11 -3
  74. package/dist/cjs/ion-app_8.cjs.entry.js +7 -7
  75. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  76. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  77. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  78. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  79. package/dist/cjs/ion-card_5.cjs.entry.js +8 -8
  80. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  81. package/dist/cjs/ion-chip.cjs.entry.js +2 -7
  82. package/dist/cjs/ion-datetime-button.cjs.entry.js +6 -6
  83. package/dist/cjs/ion-datetime_3.cjs.entry.js +8 -8
  84. package/dist/cjs/ion-input.cjs.entry.js +2 -2
  85. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  86. package/dist/cjs/ion-item_8.cjs.entry.js +10 -10
  87. package/dist/cjs/ion-loading.cjs.entry.js +3 -3
  88. package/dist/cjs/ion-menu_3.cjs.entry.js +3 -3
  89. package/dist/cjs/ion-modal.cjs.entry.js +2 -2
  90. package/dist/cjs/ion-nav_2.cjs.entry.js +2 -1
  91. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +1 -1
  92. package/dist/cjs/ion-popover.cjs.entry.js +2 -2
  93. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  94. package/dist/cjs/ion-range.cjs.entry.js +2 -2
  95. package/dist/cjs/ion-refresher_2.cjs.entry.js +1 -1
  96. package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
  97. package/dist/cjs/ion-route_4.cjs.entry.js +3 -0
  98. package/dist/cjs/ion-searchbar.cjs.entry.js +3 -9
  99. package/dist/cjs/ion-select_3.cjs.entry.js +4 -4
  100. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  101. package/dist/cjs/ion-toast.cjs.entry.js +169 -34
  102. package/dist/cjs/ion-toggle.cjs.entry.js +1 -1
  103. package/dist/cjs/ionic.cjs.js +1 -1
  104. package/dist/cjs/{ios.transition-7ff33297.js → ios.transition-458ee399.js} +6 -5
  105. package/dist/cjs/loader.cjs.js +1 -1
  106. package/dist/cjs/{md.transition-2224e480.js → md.transition-3423dd44.js} +1 -1
  107. package/dist/cjs/{overlays-d3a13e61.js → overlays-817dca17.js} +1 -0
  108. package/dist/collection/components/accordion/accordion.ios.css +0 -66
  109. package/dist/collection/components/accordion/accordion.md.css +0 -33
  110. package/dist/collection/components/accordion-group/accordion-group.ios.css +0 -66
  111. package/dist/collection/components/accordion-group/accordion-group.md.css +0 -99
  112. package/dist/collection/components/action-sheet/action-sheet.ios.css +12 -80
  113. package/dist/collection/components/action-sheet/action-sheet.md.css +8 -76
  114. package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +0 -27
  115. package/dist/collection/components/alert/alert.ios.css +0 -99
  116. package/dist/collection/components/alert/alert.js +8 -0
  117. package/dist/collection/components/alert/alert.md.css +0 -99
  118. package/dist/collection/components/alert/test/a11y/alert.e2e.js +11 -0
  119. package/dist/collection/components/avatar/avatar.ios.css +0 -66
  120. package/dist/collection/components/avatar/avatar.md.css +0 -66
  121. package/dist/collection/components/back-button/back-button.ios.css +1 -83
  122. package/dist/collection/components/back-button/back-button.md.css +3 -75
  123. package/dist/collection/components/backdrop/backdrop.ios.css +0 -66
  124. package/dist/collection/components/backdrop/backdrop.md.css +0 -66
  125. package/dist/collection/components/badge/badge.ios.css +1 -75
  126. package/dist/collection/components/badge/badge.md.css +1 -67
  127. package/dist/collection/components/breadcrumb/breadcrumb.ios.css +3 -80
  128. package/dist/collection/components/breadcrumb/breadcrumb.md.css +3 -69
  129. package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +0 -33
  130. package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +0 -33
  131. package/dist/collection/components/breadcrumbs/test/a11y/breadcrumbs.e2e.js +0 -21
  132. package/dist/collection/components/button/button.ios.css +19 -118
  133. package/dist/collection/components/button/button.md.css +3 -69
  134. package/dist/collection/components/buttons/buttons.ios.css +3 -102
  135. package/dist/collection/components/buttons/buttons.md.css +2 -101
  136. package/dist/collection/components/card/card.ios.css +1 -67
  137. package/dist/collection/components/card/card.md.css +1 -67
  138. package/dist/collection/components/card-content/card-content.ios.css +5 -71
  139. package/dist/collection/components/card-content/card-content.md.css +5 -71
  140. package/dist/collection/components/card-header/card-header.ios.css +0 -66
  141. package/dist/collection/components/card-header/card-header.md.css +0 -66
  142. package/dist/collection/components/card-subtitle/card-subtitle.ios.css +1 -67
  143. package/dist/collection/components/card-subtitle/card-subtitle.md.css +1 -67
  144. package/dist/collection/components/card-title/card-title.ios.css +1 -67
  145. package/dist/collection/components/card-title/card-title.md.css +1 -67
  146. package/dist/collection/components/checkbox/checkbox.ios.css +2 -101
  147. package/dist/collection/components/checkbox/checkbox.md.css +2 -101
  148. package/dist/collection/components/checkbox/test/a11y/checkbox.e2e.js +0 -18
  149. package/dist/collection/components/chip/{chip.md.css → chip.css} +7 -43
  150. package/dist/collection/components/chip/chip.js +2 -4
  151. package/dist/collection/components/col/col.css +0 -66
  152. package/dist/collection/components/content/content.css +0 -33
  153. package/dist/collection/components/datetime/datetime.ios.css +7 -198
  154. package/dist/collection/components/datetime/datetime.js +13 -7
  155. package/dist/collection/components/datetime/datetime.md.css +5 -97
  156. package/dist/collection/components/datetime/test/hour-cycle/datetime.e2e.js +14 -0
  157. package/dist/collection/components/datetime/utils/data.js +33 -7
  158. package/dist/collection/components/datetime/utils/format.js +27 -10
  159. package/dist/collection/components/datetime/utils/helpers.js +37 -5
  160. package/dist/collection/components/datetime-button/datetime-button.css +2 -36
  161. package/dist/collection/components/datetime-button/datetime-button.js +4 -4
  162. package/dist/collection/components/fab/fab.css +0 -66
  163. package/dist/collection/components/fab-button/fab-button.ios.css +0 -66
  164. package/dist/collection/components/fab-button/fab-button.md.css +0 -66
  165. package/dist/collection/components/fab-list/fab-list.css +0 -66
  166. package/dist/collection/components/footer/footer.ios.css +0 -66
  167. package/dist/collection/components/footer/footer.md.css +0 -66
  168. package/dist/collection/components/grid/grid.css +0 -66
  169. package/dist/collection/components/header/header.ios.css +2 -71
  170. package/dist/collection/components/header/header.md.css +0 -66
  171. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +0 -66
  172. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +0 -66
  173. package/dist/collection/components/input/input.ios.css +1 -100
  174. package/dist/collection/components/input/input.md.css +1 -199
  175. package/dist/collection/components/input/test/a11y/input.e2e.js +1 -15
  176. package/dist/collection/components/item/item.ios.css +4 -70
  177. package/dist/collection/components/item/item.md.css +6 -138
  178. package/dist/collection/components/item/test/a11y/item.e2e.js +1 -116
  179. package/dist/collection/components/item-divider/item-divider.ios.css +9 -101
  180. package/dist/collection/components/item-divider/item-divider.md.css +11 -103
  181. package/dist/collection/components/item-group/item-group.ios.css +1 -68
  182. package/dist/collection/components/item-group/item-group.md.css +1 -68
  183. package/dist/collection/components/item-option/item-option.ios.css +1 -67
  184. package/dist/collection/components/item-option/item-option.md.css +1 -67
  185. package/dist/collection/components/item-options/item-options.ios.css +1 -99
  186. package/dist/collection/components/item-options/item-options.md.css +1 -99
  187. package/dist/collection/components/item-sliding/item-sliding.css +0 -33
  188. package/dist/collection/components/label/label.ios.css +6 -105
  189. package/dist/collection/components/label/label.md.css +5 -104
  190. package/dist/collection/components/list/list.ios.css +0 -99
  191. package/dist/collection/components/list/list.md.css +0 -99
  192. package/dist/collection/components/list-header/list-header.ios.css +1 -100
  193. package/dist/collection/components/list-header/list-header.md.css +1 -100
  194. package/dist/collection/components/loading/loading.ios.css +1 -67
  195. package/dist/collection/components/loading/loading.md.css +1 -67
  196. package/dist/collection/components/loading/test/a11y/loading.e2e.js +0 -19
  197. package/dist/collection/components/menu/menu.ios.css +0 -66
  198. package/dist/collection/components/menu/menu.md.css +0 -66
  199. package/dist/collection/components/menu-button/menu-button.ios.css +2 -70
  200. package/dist/collection/components/menu-button/menu-button.md.css +3 -71
  201. package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +1 -20
  202. package/dist/collection/components/modal/modal.ios.css +0 -66
  203. package/dist/collection/components/modal/modal.md.css +0 -66
  204. package/dist/collection/components/nav/nav.css +0 -33
  205. package/dist/collection/components/nav/nav.js +1 -0
  206. package/dist/collection/components/note/note.ios.css +0 -67
  207. package/dist/collection/components/note/note.md.css +1 -67
  208. package/dist/collection/components/picker/picker.ios.css +0 -66
  209. package/dist/collection/components/picker/picker.md.css +0 -66
  210. package/dist/collection/components/picker-column/picker-column.ios.css +0 -66
  211. package/dist/collection/components/picker-column/picker-column.md.css +0 -66
  212. package/dist/collection/components/picker-column-internal/picker-column-internal.ios.css +0 -33
  213. package/dist/collection/components/picker-column-internal/picker-column-internal.md.css +0 -66
  214. package/dist/collection/components/picker-internal/picker-internal.ios.css +0 -66
  215. package/dist/collection/components/picker-internal/picker-internal.md.css +0 -66
  216. package/dist/collection/components/popover/popover.ios.css +0 -66
  217. package/dist/collection/components/popover/popover.md.css +0 -66
  218. package/dist/collection/components/progress-bar/progress-bar.ios.css +0 -33
  219. package/dist/collection/components/progress-bar/progress-bar.md.css +0 -33
  220. package/dist/collection/components/radio/radio.ios.css +5 -104
  221. package/dist/collection/components/radio/radio.md.css +5 -104
  222. package/dist/collection/components/radio/test/a11y/radio.e2e.js +0 -21
  223. package/dist/collection/components/range/range.ios.css +8 -82
  224. package/dist/collection/components/range/range.md.css +11 -99
  225. package/dist/collection/components/range/test/a11y/range.e2e.js +0 -22
  226. package/dist/collection/components/refresher/refresher.ios.css +0 -66
  227. package/dist/collection/components/refresher/refresher.md.css +0 -66
  228. package/dist/collection/components/reorder/reorder.ios.css +2 -75
  229. package/dist/collection/components/reorder/reorder.md.css +2 -75
  230. package/dist/collection/components/reorder-group/reorder-group.css +0 -33
  231. package/dist/collection/components/ripple-effect/ripple-effect.css +0 -33
  232. package/dist/collection/components/router/router.js +2 -0
  233. package/dist/collection/components/router/utils/path.js +1 -0
  234. package/dist/collection/components/router-link/router-link.css +0 -33
  235. package/dist/collection/components/router-outlet/router-outlet.css +0 -33
  236. package/dist/collection/components/row/row.css +0 -66
  237. package/dist/collection/components/searchbar/searchbar.ios.css +16 -95
  238. package/dist/collection/components/searchbar/searchbar.js +1 -7
  239. package/dist/collection/components/searchbar/searchbar.md.css +10 -77
  240. package/dist/collection/components/searchbar/test/basic/searchbar.e2e.js +0 -18
  241. package/dist/collection/components/segment/segment.ios.css +0 -99
  242. package/dist/collection/components/segment/segment.md.css +0 -99
  243. package/dist/collection/components/segment-button/segment-button.ios.css +0 -66
  244. package/dist/collection/components/segment-button/segment-button.md.css +0 -66
  245. package/dist/collection/components/select/select.ios.css +3 -102
  246. package/dist/collection/components/select/select.js +1 -1
  247. package/dist/collection/components/select/select.md.css +2 -167
  248. package/dist/collection/components/select/test/a11y/select.e2e.js +0 -22
  249. package/dist/collection/components/select-popover/select-popover.ios.css +1 -101
  250. package/dist/collection/components/select-popover/select-popover.md.css +0 -99
  251. package/dist/collection/components/skeleton-text/skeleton-text.css +0 -33
  252. package/dist/collection/components/spinner/spinner.css +0 -33
  253. package/dist/collection/components/split-pane/split-pane.ios.css +0 -99
  254. package/dist/collection/components/split-pane/split-pane.md.css +0 -99
  255. package/dist/collection/components/tab-bar/tab-bar.ios.css +0 -99
  256. package/dist/collection/components/tab-bar/tab-bar.md.css +0 -99
  257. package/dist/collection/components/tab-button/tab-button.ios.css +0 -66
  258. package/dist/collection/components/tab-button/tab-button.md.css +0 -66
  259. package/dist/collection/components/tabs/tabs.css +0 -33
  260. package/dist/collection/components/text/text.css +0 -33
  261. package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +1 -15
  262. package/dist/collection/components/textarea/textarea.ios.css +1 -133
  263. package/dist/collection/components/textarea/textarea.md.css +1 -199
  264. package/dist/collection/components/thumbnail/thumbnail.css +0 -33
  265. package/dist/collection/components/title/title.ios.css +10 -44
  266. package/dist/collection/components/title/title.md.css +2 -35
  267. package/dist/collection/components/toast/animations/ios.enter.js +2 -3
  268. package/dist/collection/components/toast/animations/ios.leave.js +2 -3
  269. package/dist/collection/components/toast/animations/md.enter.js +2 -3
  270. package/dist/collection/components/toast/animations/utils.js +85 -0
  271. package/dist/collection/components/toast/test/a11y/toast.e2e.js +1 -98
  272. package/dist/collection/components/toast/test/position-anchor/toast.e2e.js +45 -0
  273. package/dist/collection/components/toast/toast.ios.css +3 -74
  274. package/dist/collection/components/toast/toast.js +91 -9
  275. package/dist/collection/components/toast/toast.md.css +4 -74
  276. package/dist/collection/components/toggle/toggle.ios.css +0 -99
  277. package/dist/collection/components/toggle/toggle.md.css +0 -99
  278. package/dist/collection/components/toolbar/toolbar.ios.css +14 -66
  279. package/dist/collection/components/toolbar/toolbar.md.css +0 -66
  280. package/dist/collection/index.js +1 -0
  281. package/dist/collection/utils/native/haptic.js +1 -0
  282. package/dist/collection/utils/overlays.js +1 -0
  283. package/dist/collection/utils/transition/ios.transition.js +5 -4
  284. package/dist/docs.json +73 -10
  285. package/dist/esm/{button-active-513e9fff.js → button-active-d2346892.js} +1 -1
  286. package/dist/esm/{data-009dbf15.js → data-44d9e816.js} +96 -22
  287. package/dist/esm/{haptic-6447af60.js → haptic-1243b917.js} +1 -0
  288. package/dist/esm/{index-39bc1180.js → index-dac72b4c.js} +2 -2
  289. package/dist/esm/index.js +5 -4
  290. package/dist/esm/ion-action-sheet.entry.js +5 -5
  291. package/dist/esm/ion-alert.entry.js +11 -3
  292. package/dist/esm/ion-app_8.entry.js +7 -7
  293. package/dist/esm/ion-avatar_3.entry.js +2 -2
  294. package/dist/esm/ion-back-button.entry.js +2 -2
  295. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  296. package/dist/esm/ion-button_2.entry.js +2 -2
  297. package/dist/esm/ion-card_5.entry.js +8 -8
  298. package/dist/esm/ion-checkbox.entry.js +2 -2
  299. package/dist/esm/ion-chip.entry.js +2 -7
  300. package/dist/esm/ion-datetime-button.entry.js +6 -6
  301. package/dist/esm/ion-datetime_3.entry.js +8 -8
  302. package/dist/esm/ion-input.entry.js +2 -2
  303. package/dist/esm/ion-item-option_3.entry.js +4 -4
  304. package/dist/esm/ion-item_8.entry.js +10 -10
  305. package/dist/esm/ion-loading.entry.js +3 -3
  306. package/dist/esm/ion-menu_3.entry.js +3 -3
  307. package/dist/esm/ion-modal.entry.js +2 -2
  308. package/dist/esm/ion-nav_2.entry.js +2 -1
  309. package/dist/esm/ion-picker-column-internal.entry.js +1 -1
  310. package/dist/esm/ion-popover.entry.js +2 -2
  311. package/dist/esm/ion-radio_2.entry.js +2 -2
  312. package/dist/esm/ion-range.entry.js +2 -2
  313. package/dist/esm/ion-refresher_2.entry.js +1 -1
  314. package/dist/esm/ion-reorder_2.entry.js +3 -3
  315. package/dist/esm/ion-route_4.entry.js +3 -0
  316. package/dist/esm/ion-searchbar.entry.js +3 -9
  317. package/dist/esm/ion-select_3.entry.js +4 -4
  318. package/dist/esm/ion-textarea.entry.js +2 -2
  319. package/dist/esm/ion-toast.entry.js +152 -17
  320. package/dist/esm/ion-toggle.entry.js +1 -1
  321. package/dist/esm/ionic.js +1 -1
  322. package/dist/esm/{ios.transition-72ffa6ed.js → ios.transition-991c1a56.js} +6 -5
  323. package/dist/esm/loader.js +1 -1
  324. package/dist/esm/{md.transition-e6a907d4.js → md.transition-fb443521.js} +1 -1
  325. package/dist/esm/{overlays-8fc6656c.js → overlays-e064e499.js} +1 -0
  326. package/dist/esm-es5/{button-active-513e9fff.js → button-active-d2346892.js} +1 -1
  327. package/dist/esm-es5/data-44d9e816.js +4 -0
  328. package/dist/esm-es5/{index-39bc1180.js → index-dac72b4c.js} +1 -1
  329. package/dist/esm-es5/index.js +1 -1
  330. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  331. package/dist/esm-es5/ion-alert.entry.js +1 -1
  332. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  333. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  334. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  335. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  336. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  337. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  338. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  339. package/dist/esm-es5/ion-chip.entry.js +1 -1
  340. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  341. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  342. package/dist/esm-es5/ion-input.entry.js +1 -1
  343. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  344. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  345. package/dist/esm-es5/ion-loading.entry.js +1 -1
  346. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  347. package/dist/esm-es5/ion-modal.entry.js +1 -1
  348. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  349. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  350. package/dist/esm-es5/ion-popover.entry.js +1 -1
  351. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  352. package/dist/esm-es5/ion-range.entry.js +1 -1
  353. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  354. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  355. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  356. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  357. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  358. package/dist/esm-es5/ion-toast.entry.js +1 -1
  359. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  360. package/dist/esm-es5/ionic.js +1 -1
  361. package/dist/esm-es5/ios.transition-991c1a56.js +4 -0
  362. package/dist/esm-es5/loader.js +1 -1
  363. package/dist/esm-es5/{md.transition-e6a907d4.js → md.transition-fb443521.js} +1 -1
  364. package/dist/html.html-data.json +11 -1
  365. package/dist/ionic/index.esm.js +1 -1
  366. package/dist/ionic/ionic.esm.js +1 -1
  367. package/dist/ionic/{p-7ea21b21.system.entry.js → p-06116432.system.entry.js} +1 -1
  368. package/dist/ionic/p-06c94b76.entry.js +4 -0
  369. package/dist/ionic/p-09e15a2a.system.entry.js +4 -0
  370. package/dist/ionic/p-0bd3cc92.entry.js +4 -0
  371. package/dist/ionic/{p-a0a87b9c.entry.js → p-13ce151b.entry.js} +1 -1
  372. package/dist/ionic/{p-270aa06b.entry.js → p-14dec15f.entry.js} +1 -1
  373. package/dist/ionic/p-161a6465.system.entry.js +4 -0
  374. package/dist/ionic/p-17240d90.js +4 -0
  375. package/dist/ionic/p-17e6836b.system.entry.js +4 -0
  376. package/dist/ionic/p-1bce805b.entry.js +4 -0
  377. package/dist/ionic/p-1c406ee0.system.entry.js +4 -0
  378. package/dist/ionic/{p-c5729044.system.entry.js → p-1e207aa7.system.entry.js} +1 -1
  379. package/dist/ionic/p-20e5eb3e.entry.js +4 -0
  380. package/dist/ionic/{p-972763df.js → p-2b70878e.js} +1 -1
  381. package/dist/ionic/p-2bea5600.entry.js +4 -0
  382. package/dist/ionic/{p-380ef450.entry.js → p-2d74ee51.entry.js} +1 -1
  383. package/dist/ionic/{p-2c35490e.entry.js → p-2dac36bf.entry.js} +1 -1
  384. package/dist/ionic/p-2ffbf4bc.system.entry.js +4 -0
  385. package/dist/ionic/p-30bd5385.system.entry.js +4 -0
  386. package/dist/ionic/{p-00aed720.system.js → p-315dd3f8.system.js} +1 -1
  387. package/dist/ionic/{p-08c5b9f4.system.entry.js → p-3b1a8994.system.entry.js} +1 -1
  388. package/dist/ionic/p-3cbcb899.entry.js +4 -0
  389. package/dist/ionic/p-419b8565.entry.js +4 -0
  390. package/dist/ionic/p-420da334.system.entry.js +4 -0
  391. package/dist/ionic/p-48393630.system.js +4 -0
  392. package/dist/ionic/{p-ca9b6832.system.js → p-4cf29e23.system.js} +1 -1
  393. package/dist/ionic/p-4e312f80.system.entry.js +4 -0
  394. package/dist/ionic/p-50b11c2b.system.entry.js +4 -0
  395. package/dist/ionic/p-568fec78.entry.js +4 -0
  396. package/dist/ionic/p-5c8c9748.system.entry.js +4 -0
  397. package/dist/ionic/p-5f6605c4.entry.js +4 -0
  398. package/dist/ionic/{p-3730f493.entry.js → p-62f05fd2.entry.js} +1 -1
  399. package/dist/ionic/p-674e6f0c.js +4 -0
  400. package/dist/ionic/p-6ba07931.system.entry.js +4 -0
  401. package/dist/ionic/p-6ca0e4b2.system.entry.js +4 -0
  402. package/dist/ionic/p-6cb04881.system.entry.js +4 -0
  403. package/dist/ionic/p-6edbc09b.system.js +1 -1
  404. package/dist/ionic/p-716fbba9.js +4 -0
  405. package/dist/ionic/p-7779d376.entry.js +4 -0
  406. package/dist/ionic/{p-3b104ae6.entry.js → p-78f204ee.entry.js} +1 -1
  407. package/dist/ionic/p-7dc0ee11.system.entry.js +4 -0
  408. package/dist/ionic/p-7e9e16bf.system.entry.js +4 -0
  409. package/dist/ionic/p-82f58c25.system.entry.js +4 -0
  410. package/dist/ionic/{p-f474437d.system.entry.js → p-86e73df8.system.entry.js} +1 -1
  411. package/dist/ionic/p-88ad9cb6.entry.js +4 -0
  412. package/dist/ionic/p-8a1faf2c.system.js +4 -0
  413. package/dist/ionic/p-8b79baf0.entry.js +4 -0
  414. package/dist/ionic/p-974cbc3a.entry.js +4 -0
  415. package/dist/ionic/{p-f39999bb.system.js → p-9eb5455c.system.js} +1 -1
  416. package/dist/ionic/{p-784863dd.entry.js → p-a27a6256.entry.js} +1 -1
  417. package/dist/ionic/p-b0dd4f33.entry.js +4 -0
  418. package/dist/ionic/p-b49fe110.entry.js +4 -0
  419. package/dist/ionic/{p-2a393411.entry.js → p-b61cf76c.entry.js} +1 -1
  420. package/dist/ionic/{p-09babc88.entry.js → p-b7dad585.entry.js} +1 -1
  421. package/dist/ionic/p-b8c3f071.system.js +4 -0
  422. package/dist/ionic/p-be321bb6.system.entry.js +4 -0
  423. package/dist/ionic/{p-2f1ba678.system.entry.js → p-be337735.system.entry.js} +1 -1
  424. package/dist/ionic/p-c4d08d6d.system.entry.js +4 -0
  425. package/dist/ionic/{p-c7fca267.entry.js → p-c8251e8c.entry.js} +1 -1
  426. package/dist/ionic/{p-c68b68b1.entry.js → p-cc3aa152.entry.js} +1 -1
  427. package/dist/ionic/p-cd675d89.system.entry.js +4 -0
  428. package/dist/ionic/p-ce24ddd7.system.entry.js +4 -0
  429. package/dist/ionic/p-d6dcbd7c.js +4 -0
  430. package/dist/ionic/p-de0f1af2.system.entry.js +4 -0
  431. package/dist/ionic/p-e89abe38.system.entry.js +4 -0
  432. package/dist/ionic/p-ea88031d.entry.js +4 -0
  433. package/dist/ionic/p-ebaeeee8.entry.js +4 -0
  434. package/dist/ionic/{p-e64ce6ad.system.entry.js → p-ec3fa33b.system.entry.js} +1 -1
  435. package/dist/ionic/p-f0dcf99b.entry.js +4 -0
  436. package/dist/ionic/p-f180d2b6.entry.js +4 -0
  437. package/dist/ionic/{p-4a1ac160.system.entry.js → p-f767d6b4.system.entry.js} +1 -1
  438. package/dist/ionic/{p-63a73b69.system.entry.js → p-f7f6af24.system.entry.js} +1 -1
  439. package/dist/types/components/datetime/datetime-interface.d.ts +1 -0
  440. package/dist/types/components/datetime/datetime.d.ts +2 -2
  441. package/dist/types/components/datetime/utils/data.d.ts +3 -3
  442. package/dist/types/components/datetime/utils/format.d.ts +3 -3
  443. package/dist/types/components/datetime/utils/helpers.d.ts +15 -1
  444. package/dist/types/components/toast/animations/ios.enter.d.ts +2 -1
  445. package/dist/types/components/toast/animations/ios.leave.d.ts +2 -2
  446. package/dist/types/components/toast/animations/md.enter.d.ts +2 -1
  447. package/dist/types/components/toast/animations/utils.d.ts +18 -0
  448. package/dist/types/components/toast/toast-interface.d.ts +11 -0
  449. package/dist/types/components/toast/toast.d.ts +21 -1
  450. package/dist/types/components.d.ts +16 -8
  451. package/dist/types/index.d.ts +1 -0
  452. package/hydrate/index.js +338 -124
  453. package/package.json +5 -6
  454. package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +0 -26
  455. package/dist/collection/components/badge/test/a11y/badge.e2e.js +0 -22
  456. package/dist/collection/components/button/test/a11y/button.e2e.js +0 -61
  457. package/dist/collection/components/buttons/test/a11y/buttons.e2e.js +0 -74
  458. package/dist/collection/components/card/test/a11y/card.e2e.js +0 -31
  459. package/dist/collection/components/chip/chip.ios.css +0 -190
  460. package/dist/collection/components/chip/test/a11y/chip.e2e.js +0 -58
  461. package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +0 -28
  462. package/dist/collection/components/datetime-button/test/a11y/datetime-button.e2e.js +0 -38
  463. package/dist/collection/components/item-divider/test/a11y/item-divider.e2e.js +0 -44
  464. package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +0 -34
  465. package/dist/collection/components/label/test/a11y/label.e2e.js +0 -66
  466. package/dist/collection/components/list-header/test/a11y/list-header.e2e.js +0 -24
  467. package/dist/collection/components/note/test/a11y/note.e2e.js +0 -52
  468. package/dist/collection/components/reorder-group/test/a11y/reorder-group.e2e.js +0 -33
  469. package/dist/collection/components/searchbar/test/a11y/searchbar.e2e.js +0 -37
  470. package/dist/collection/components/title/test/a11y/title.e2e.js +0 -61
  471. package/dist/collection/css/test/a11y/typography.e2e.js +0 -32
  472. package/dist/esm-es5/data-009dbf15.js +0 -4
  473. package/dist/esm-es5/ios.transition-72ffa6ed.js +0 -4
  474. package/dist/ionic/p-0610d658.entry.js +0 -4
  475. package/dist/ionic/p-06c29a8b.entry.js +0 -4
  476. package/dist/ionic/p-0c535e5a.system.entry.js +0 -4
  477. package/dist/ionic/p-160d0dfd.system.entry.js +0 -4
  478. package/dist/ionic/p-1c1c18b3.system.entry.js +0 -4
  479. package/dist/ionic/p-234a7edb.js +0 -4
  480. package/dist/ionic/p-2b8cd28f.entry.js +0 -4
  481. package/dist/ionic/p-2e93e3db.entry.js +0 -4
  482. package/dist/ionic/p-3e1b4045.system.entry.js +0 -4
  483. package/dist/ionic/p-4342501d.entry.js +0 -4
  484. package/dist/ionic/p-442f2497.system.js +0 -4
  485. package/dist/ionic/p-44ef7224.system.js +0 -4
  486. package/dist/ionic/p-450fe187.system.entry.js +0 -4
  487. package/dist/ionic/p-47c15b22.system.entry.js +0 -4
  488. package/dist/ionic/p-4d0eb845.system.entry.js +0 -4
  489. package/dist/ionic/p-4e4bedbd.entry.js +0 -4
  490. package/dist/ionic/p-50d2e748.js +0 -4
  491. package/dist/ionic/p-5a5ff46b.system.entry.js +0 -4
  492. package/dist/ionic/p-5c790762.system.js +0 -4
  493. package/dist/ionic/p-622d7b0e.system.entry.js +0 -4
  494. package/dist/ionic/p-6f940aec.system.entry.js +0 -4
  495. package/dist/ionic/p-7302a3e1.entry.js +0 -4
  496. package/dist/ionic/p-74824d64.entry.js +0 -4
  497. package/dist/ionic/p-7cfd253c.js +0 -4
  498. package/dist/ionic/p-857591f7.system.entry.js +0 -4
  499. package/dist/ionic/p-86859d57.system.entry.js +0 -4
  500. package/dist/ionic/p-8d5c7b4e.system.entry.js +0 -4
  501. package/dist/ionic/p-8e06ca5e.entry.js +0 -4
  502. package/dist/ionic/p-90d892fd.entry.js +0 -4
  503. package/dist/ionic/p-9493d5e8.system.entry.js +0 -4
  504. package/dist/ionic/p-969e9fce.system.entry.js +0 -4
  505. package/dist/ionic/p-972817e1.js +0 -4
  506. package/dist/ionic/p-9ad5893a.entry.js +0 -4
  507. package/dist/ionic/p-af14deab.system.entry.js +0 -4
  508. package/dist/ionic/p-b2215bd4.entry.js +0 -4
  509. package/dist/ionic/p-b8846173.entry.js +0 -4
  510. package/dist/ionic/p-bb8365af.system.entry.js +0 -4
  511. package/dist/ionic/p-be22efa8.entry.js +0 -4
  512. package/dist/ionic/p-c3d501f5.system.entry.js +0 -4
  513. package/dist/ionic/p-c872a0a0.entry.js +0 -4
  514. package/dist/ionic/p-daf85ebe.entry.js +0 -4
  515. package/dist/ionic/p-db3f69d6.entry.js +0 -4
  516. package/dist/ionic/p-df16bb3f.system.entry.js +0 -4
  517. package/dist/ionic/p-e8fa3573.system.entry.js +0 -4
  518. package/dist/ionic/p-edbec144.entry.js +0 -4
  519. package/dist/ionic/p-f5ebccec.entry.js +0 -4
  520. package/dist/ionic/p-f8eaac8b.system.entry.js +0 -4
  521. package/dist/ionic/p-fa1a57ae.system.entry.js +0 -4
  522. /package/dist/esm-es5/{haptic-6447af60.js → haptic-1243b917.js} +0 -0
  523. /package/dist/esm-es5/{overlays-8fc6656c.js → overlays-e064e499.js} +0 -0
  524. /package/dist/ionic/{p-f9015336.js → p-3faf56ab.js} +0 -0
  525. /package/dist/ionic/{p-7a3caa4e.system.js → p-40bd36f3.system.js} +0 -0
  526. /package/dist/ionic/{p-14d7b7e2.system.js → p-b4b4bb29.system.js} +0 -0
  527. /package/dist/ionic/{p-bb6f38ed.js → p-b923f3d7.js} +0 -0
@@ -6,13 +6,12 @@ import { getElementRoot } from "../../../utils/helpers";
6
6
  /**
7
7
  * iOS Toast Leave Animation
8
8
  */
9
- export const iosLeaveAnimation = (baseEl, position) => {
9
+ export const iosLeaveAnimation = (baseEl, opts) => {
10
10
  const baseAnimation = createAnimation();
11
11
  const wrapperAnimation = createAnimation();
12
+ const { position, top, bottom } = opts;
12
13
  const root = getElementRoot(baseEl);
13
14
  const wrapperEl = root.querySelector('.toast-wrapper');
14
- const bottom = `calc(-10px - var(--ion-safe-area-bottom, 0px))`;
15
- const top = `calc(10px + var(--ion-safe-area-top, 0px))`;
16
15
  wrapperAnimation.addElement(wrapperEl);
17
16
  switch (position) {
18
17
  case 'top':
@@ -6,13 +6,12 @@ import { getElementRoot } from "../../../utils/helpers";
6
6
  /**
7
7
  * MD Toast Enter Animation
8
8
  */
9
- export const mdEnterAnimation = (baseEl, position) => {
9
+ export const mdEnterAnimation = (baseEl, opts) => {
10
10
  const baseAnimation = createAnimation();
11
11
  const wrapperAnimation = createAnimation();
12
+ const { position, top, bottom } = opts;
12
13
  const root = getElementRoot(baseEl);
13
14
  const wrapperEl = root.querySelector('.toast-wrapper');
14
- const bottom = `calc(8px + var(--ion-safe-area-bottom, 0px))`;
15
- const top = `calc(8px + var(--ion-safe-area-top, 0px))`;
16
15
  wrapperAnimation.addElement(wrapperEl);
17
16
  switch (position) {
18
17
  case 'top':
@@ -0,0 +1,85 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { win } from "../../../utils/browser/index";
5
+ import { printIonWarning } from "../../../utils/logging/index";
6
+ /**
7
+ * Calculate the CSS top and bottom position of the toast, to be used
8
+ * as starting points for the animation keyframes.
9
+ *
10
+ * Note that MD animates bottom-positioned toasts using style.bottom,
11
+ * which calculates from the bottom edge of the screen, while iOS uses
12
+ * translateY, which calculates from the top edge of the screen. This
13
+ * is why the bottom calculates differ slightly between modes.
14
+ *
15
+ * @param position The value of the toast's position prop.
16
+ * @param positionAnchor The element the toast should be anchored to,
17
+ * if applicable.
18
+ * @param mode The toast component's mode (md, ios, etc).
19
+ * @param toast A reference to the toast element itself.
20
+ */
21
+ export function getAnimationPosition(position, positionAnchor, mode, toast) {
22
+ /**
23
+ * Start with a predefined offset from the edge the toast will be
24
+ * positioned relative to, whether on the screen or anchor element.
25
+ */
26
+ let offset;
27
+ if (mode === 'md') {
28
+ offset = 8;
29
+ }
30
+ else {
31
+ offset = position === 'top' ? 10 : -10;
32
+ }
33
+ /**
34
+ * If positionAnchor is defined, add in the distance from the target
35
+ * screen edge to the target anchor edge. For position="top", the
36
+ * bottom anchor edge is targeted. For position="bottom", the top
37
+ * anchor edge is targeted.
38
+ */
39
+ if (positionAnchor && win) {
40
+ warnIfAnchorIsHidden(positionAnchor, toast);
41
+ const box = positionAnchor.getBoundingClientRect();
42
+ if (position === 'top') {
43
+ offset += box.bottom;
44
+ }
45
+ else if (position === 'bottom') {
46
+ /**
47
+ * Just box.top is the distance from the top edge of the screen
48
+ * to the top edge of the anchor. We want to calculate from the
49
+ * bottom edge of the screen instead.
50
+ */
51
+ if (mode === 'md') {
52
+ offset += win.innerHeight - box.top;
53
+ }
54
+ else {
55
+ offset -= win.innerHeight - box.top;
56
+ }
57
+ }
58
+ /**
59
+ * We don't include safe area here because that should already be
60
+ * accounted for when checking the position of the anchor.
61
+ */
62
+ return {
63
+ top: `${offset}px`,
64
+ bottom: `${offset}px`,
65
+ };
66
+ }
67
+ else {
68
+ return {
69
+ top: `calc(${offset}px + var(--ion-safe-area-top, 0px))`,
70
+ bottom: mode === 'md'
71
+ ? `calc(${offset}px + var(--ion-safe-area-bottom, 0px))`
72
+ : `calc(${offset}px - var(--ion-safe-area-bottom, 0px))`,
73
+ };
74
+ }
75
+ }
76
+ /**
77
+ * If the anchor element is hidden, getBoundingClientRect()
78
+ * will return all 0s for it, which can cause unexpected
79
+ * results in the position calculation when animating.
80
+ */
81
+ function warnIfAnchorIsHidden(positionAnchor, toast) {
82
+ if (positionAnchor.offsetParent === null) {
83
+ printIonWarning('The positionAnchor element for ion-toast was found in the DOM, but appears to be hidden. This may lead to unexpected positioning of the toast.', toast);
84
+ }
85
+ }
@@ -7,7 +7,7 @@ import { configs, test } from "../../../../utils/test/playwright/index";
7
7
  /**
8
8
  * This test does not check LTR vs RTL layouts
9
9
  */
10
- configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
10
+ configs({ directions: ['ltr'] }).forEach(({ title, config }) => {
11
11
  test.describe(title('toast: a11y'), () => {
12
12
  test.beforeEach(async ({ page }) => {
13
13
  await page.goto(`/src/components/toast/test/a11y`, config);
@@ -45,101 +45,4 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
45
45
  await expect(toastButton).toHaveAttribute('aria-label', 'close button');
46
46
  });
47
47
  });
48
- test.describe(title('toast: font scaling'), () => {
49
- test('should scale header text on larger font sizes', async ({ page }) => {
50
- await page.setContent(`
51
- <style>
52
- html {
53
- font-size: 310%;
54
- }
55
- </style>
56
-
57
- <ion-toast is-open="true" header="Testing" message="Hello world"></ion-toast>
58
- `, config);
59
- const toast = page.locator('ion-toast');
60
- await expect(toast).toBeVisible();
61
- const toastWrapper = toast.locator('.toast-wrapper');
62
- await expect(toastWrapper).toHaveScreenshot(screenshot('toast-header-scale'));
63
- });
64
- test('should scale message text on larger font sizes', async ({ page }) => {
65
- await page.setContent(`
66
- <style>
67
- html {
68
- font-size: 310%;
69
- }
70
- </style>
71
-
72
- <ion-toast is-open="true" message="Hello world"></ion-toast>
73
- `, config);
74
- const toast = page.locator('ion-toast');
75
- await expect(toast).toBeVisible();
76
- const toastWrapper = toast.locator('.toast-wrapper');
77
- await expect(toastWrapper).toHaveScreenshot(screenshot('toast-message-scale'));
78
- });
79
- test('should scale content icon on larger font sizes', async ({ page }) => {
80
- await page.setContent(`
81
- <style>
82
- html {
83
- font-size: 310%;
84
- }
85
- </style>
86
-
87
- <ion-toast is-open="true" message="Hello world" icon="alert"></ion-toast>
88
- `, config);
89
- const toast = page.locator('ion-toast');
90
- await expect(toast).toBeVisible();
91
- const toastWrapper = toast.locator('.toast-wrapper');
92
- await expect(toastWrapper).toHaveScreenshot(screenshot('toast-icon-scale'));
93
- });
94
- test('should scale button text on larger font sizes', async ({ page }) => {
95
- await page.setContent(`
96
- <style>
97
- html {
98
- font-size: 310%;
99
- }
100
- </style>
101
-
102
- <ion-toast is-open="true" message="Hello world"></ion-toast>
103
- `, config);
104
- const toast = page.locator('ion-toast');
105
- toast.evaluate((el) => {
106
- el.buttons = [
107
- {
108
- text: 'Cancel',
109
- },
110
- ];
111
- });
112
- await expect(toast).toBeVisible();
113
- const toastWrapper = toast.locator('.toast-wrapper');
114
- await expect(toastWrapper).toHaveScreenshot(screenshot('toast-buttons-scale'));
115
- });
116
- test('should scale buttons and icons on larger font sizes', async ({ page }) => {
117
- await page.setContent(`
118
- <style>
119
- html {
120
- font-size: 310%;
121
- }
122
- </style>
123
-
124
- <ion-toast is-open="true" message="Hello world"></ion-toast>
125
- `, config);
126
- const toast = page.locator('ion-toast');
127
- toast.evaluate((el) => {
128
- el.buttons = [
129
- {
130
- text: 'Cancel',
131
- icon: 'close',
132
- },
133
- ];
134
- });
135
- await expect(toast).toBeVisible();
136
- /**
137
- * Linux incorrectly clips the screenshot when capturing the toast container
138
- * with the inset styling.
139
- *
140
- * We capture the entire toast container (entire page) to avoid this issue.
141
- */
142
- await expect(toast).toHaveScreenshot(screenshot('toast-buttons-icon-scale'));
143
- });
144
- });
145
48
  });
@@ -0,0 +1,45 @@
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
+ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
7
+ test.describe(title('toast: positionAnchor'), () => {
8
+ test.beforeEach(async ({ page }) => {
9
+ await page.goto('/src/components/toast/test/position-anchor', config);
10
+ /**
11
+ * We need to screenshot the whole page to ensure the toasts are positioned
12
+ * correctly, but we don't need much extra white space between the header
13
+ * and footer.
14
+ */
15
+ await page.setViewportSize({
16
+ width: 425,
17
+ height: 425,
18
+ });
19
+ });
20
+ test('should place top-position toast underneath anchor', async ({ page }) => {
21
+ const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
22
+ await page.click('#headerAnchor');
23
+ await ionToastDidPresent.next();
24
+ await expect(page).toHaveScreenshot(screenshot(`toast-header-anchor`));
25
+ });
26
+ test('should place bottom-position toast above anchor', async ({ page }) => {
27
+ const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
28
+ await page.click('#footerAnchor');
29
+ await ionToastDidPresent.next();
30
+ await expect(page).toHaveScreenshot(screenshot(`toast-footer-anchor`));
31
+ });
32
+ test('should ignore anchor for middle-position toast', async ({ page }) => {
33
+ const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
34
+ await page.click('#middleAnchor');
35
+ await ionToastDidPresent.next();
36
+ await expect(page).toHaveScreenshot(screenshot(`toast-middle-anchor`));
37
+ });
38
+ test('should correctly anchor toast when using an element reference', async ({ page }) => {
39
+ const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
40
+ await page.click('#headerElAnchor');
41
+ await ionToastDidPresent.next();
42
+ await expect(page).toHaveScreenshot(screenshot(`toast-header-el-anchor`));
43
+ });
44
+ });
45
+ });
@@ -1,36 +1,3 @@
1
- /**
2
- * Convert a font size to a dynamic font size.
3
- * Fonts that participate in Dynamic Type should use
4
- * dynamic font sizes.
5
- * @param size - The initial font size including the unit (i.e. px or pt)
6
- * @param unit (optional) - The unit to convert to. Use this if you want to
7
- * convert to a unit other than $baselineUnit.
8
- */
9
- /**
10
- * Convert a font size to a dynamic font size but impose
11
- * a maximum font size.
12
- * @param size - The initial font size including the unit (i.e. px or pt)
13
- * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
14
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
15
- * convert to a unit other than $baselineUnit.
16
- */
17
- /**
18
- * Convert a font size to a dynamic font size but impose
19
- * a minimum font size.
20
- * @param size - The initial font size including the unit (i.e. px or pt)
21
- * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
22
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
23
- * convert to a unit other than $baselineUnit.
24
- */
25
- /**
26
- * Convert a font size to a dynamic font size but impose
27
- * maximum and minimum font sizes.
28
- * @param size - The initial font size including the unit (i.e. px or pt)
29
- * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
30
- * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
31
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
32
- * convert to a unit other than $baselineUnit.
33
- */
34
1
  :host {
35
2
  /**
36
3
  * @prop --background: Background of the toast
@@ -193,10 +160,6 @@
193
160
  margin-inline-start: 16px;
194
161
  }
195
162
 
196
- .toast-content {
197
- min-width: 0;
198
- }
199
-
200
163
  .toast-message {
201
164
  flex: 1;
202
165
  white-space: var(--white-space);
@@ -233,49 +196,15 @@
233
196
  cursor: pointer;
234
197
  }
235
198
  }
236
- /**
237
- * Convert a font size to a dynamic font size.
238
- * Fonts that participate in Dynamic Type should use
239
- * dynamic font sizes.
240
- * @param size - The initial font size including the unit (i.e. px or pt)
241
- * @param unit (optional) - The unit to convert to. Use this if you want to
242
- * convert to a unit other than $baselineUnit.
243
- */
244
- /**
245
- * Convert a font size to a dynamic font size but impose
246
- * a maximum font size.
247
- * @param size - The initial font size including the unit (i.e. px or pt)
248
- * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
249
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
250
- * convert to a unit other than $baselineUnit.
251
- */
252
- /**
253
- * Convert a font size to a dynamic font size but impose
254
- * a minimum font size.
255
- * @param size - The initial font size including the unit (i.e. px or pt)
256
- * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
257
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
258
- * convert to a unit other than $baselineUnit.
259
- */
260
- /**
261
- * Convert a font size to a dynamic font size but impose
262
- * maximum and minimum font sizes.
263
- * @param size - The initial font size including the unit (i.e. px or pt)
264
- * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
265
- * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
266
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
267
- * convert to a unit other than $baselineUnit.
268
- */
269
199
  :host {
270
200
  --background: var(--ion-color-step-50, #f2f2f2);
271
201
  --border-radius: 14px;
272
202
  --button-color: var(--ion-color-primary, #3880ff);
273
203
  --color: var(--ion-color-step-850, #262626);
274
204
  --max-width: 700px;
275
- --max-height: 478px;
276
205
  --start: 10px;
277
206
  --end: 10px;
278
- font-size: clamp(14px, 0.875rem, 43.4px);
207
+ font-size: 14px;
279
208
  }
280
209
 
281
210
  .toast-wrapper {
@@ -334,12 +263,12 @@
334
263
  padding-inline-end: 15px;
335
264
  padding-top: 10px;
336
265
  padding-bottom: 10px;
337
- min-height: 44px;
266
+ height: 44px;
338
267
  transition: background-color, opacity 100ms linear;
339
268
  border: 0;
340
269
  background-color: transparent;
341
270
  font-family: var(--ion-font-family);
342
- font-size: clamp(17px, 1.0625rem, 21.998px);
271
+ font-size: 17px;
343
272
  font-weight: 500;
344
273
  overflow: hidden;
345
274
  }
@@ -15,6 +15,7 @@ import { iosEnterAnimation } from "./animations/ios.enter";
15
15
  import { iosLeaveAnimation } from "./animations/ios.leave";
16
16
  import { mdEnterAnimation } from "./animations/md.enter";
17
17
  import { mdLeaveAnimation } from "./animations/md.leave";
18
+ import { getAnimationPosition } from "./animations/utils";
18
19
  // TODO(FW-2832): types
19
20
  /**
20
21
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
@@ -54,6 +55,7 @@ export class Toast {
54
55
  this.message = undefined;
55
56
  this.keyboardClose = false;
56
57
  this.position = 'bottom';
58
+ this.positionAnchor = undefined;
57
59
  this.buttons = undefined;
58
60
  this.translucent = false;
59
61
  this.animated = true;
@@ -101,7 +103,19 @@ export class Toast {
101
103
  async present() {
102
104
  const unlock = await this.lockController.lock();
103
105
  await this.delegateController.attachViewToDom();
104
- await present(this, 'toastEnter', iosEnterAnimation, mdEnterAnimation, this.position);
106
+ const { el, position } = this;
107
+ const anchor = this.getAnchorElement();
108
+ const animationPosition = getAnimationPosition(position, anchor, getIonMode(this), el);
109
+ /**
110
+ * Cache the calculated position of the toast, so we can re-use it
111
+ * in the dismiss animation.
112
+ */
113
+ this.lastPresentedPosition = animationPosition;
114
+ await present(this, 'toastEnter', iosEnterAnimation, mdEnterAnimation, {
115
+ position,
116
+ top: animationPosition.top,
117
+ bottom: animationPosition.bottom,
118
+ });
105
119
  /**
106
120
  * Content is revealed to screen readers after
107
121
  * the transition to avoid jank since this
@@ -123,15 +137,28 @@ export class Toast {
123
137
  * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
124
138
  */
125
139
  async dismiss(data, role) {
140
+ var _a, _b;
126
141
  const unlock = await this.lockController.lock();
127
- if (this.durationTimeout) {
128
- clearTimeout(this.durationTimeout);
142
+ const { durationTimeout, position, lastPresentedPosition } = this;
143
+ if (durationTimeout) {
144
+ clearTimeout(durationTimeout);
129
145
  }
130
- const dismissed = await dismiss(this, data, role, 'toastLeave', iosLeaveAnimation, mdLeaveAnimation, this.position);
146
+ const dismissed = await dismiss(this, data, role, 'toastLeave', iosLeaveAnimation, mdLeaveAnimation,
147
+ /**
148
+ * Fetch the cached position that was calculated back in the present
149
+ * animation. We always want to animate the dismiss from the same
150
+ * position the present stopped at, so the animation looks continuous.
151
+ */
152
+ {
153
+ position,
154
+ top: (_a = lastPresentedPosition === null || lastPresentedPosition === void 0 ? void 0 : lastPresentedPosition.top) !== null && _a !== void 0 ? _a : '',
155
+ bottom: (_b = lastPresentedPosition === null || lastPresentedPosition === void 0 ? void 0 : lastPresentedPosition.bottom) !== null && _b !== void 0 ? _b : '',
156
+ });
131
157
  if (dismissed) {
132
158
  this.delegateController.removeViewFromDom();
133
159
  this.revealContentToScreenReader = false;
134
160
  }
161
+ this.lastPresentedPosition = undefined;
135
162
  unlock();
136
163
  return dismissed;
137
164
  }
@@ -155,6 +182,37 @@ export class Toast {
155
182
  : [];
156
183
  return buttons;
157
184
  }
185
+ /**
186
+ * Returns the element specified by the positionAnchor prop,
187
+ * or undefined if prop's value is an ID string and the element
188
+ * is not found in the DOM.
189
+ */
190
+ getAnchorElement() {
191
+ const { position, positionAnchor, el } = this;
192
+ if (position === 'middle' && positionAnchor !== undefined) {
193
+ printIonWarning('The positionAnchor property is ignored when using position="middle".', this.el);
194
+ return undefined;
195
+ }
196
+ if (typeof positionAnchor === 'string') {
197
+ /**
198
+ * If the anchor is defined as an ID, find the element.
199
+ * We do this on every present so the toast doesn't need
200
+ * to account for the surrounding DOM changing since the
201
+ * last time it was presented.
202
+ */
203
+ const foundEl = document.getElementById(positionAnchor);
204
+ if (foundEl === null) {
205
+ printIonWarning(`An anchor element with an ID of "${positionAnchor}" was not found in the DOM.`, el);
206
+ return undefined;
207
+ }
208
+ return foundEl;
209
+ }
210
+ if (positionAnchor instanceof HTMLElement) {
211
+ return positionAnchor;
212
+ }
213
+ printIonWarning('Invalid positionAnchor value:', positionAnchor, el);
214
+ return undefined;
215
+ }
158
216
  async buttonClick(button) {
159
217
  const role = button.role;
160
218
  if (isCancel(role)) {
@@ -517,12 +575,34 @@ export class Toast {
517
575
  "optional": false,
518
576
  "docs": {
519
577
  "tags": [],
520
- "text": "The position of the toast on the screen."
578
+ "text": "The starting position of the toast on the screen. Can be tweaked further\nusing the `positionAnchor` property."
521
579
  },
522
580
  "attribute": "position",
523
581
  "reflect": false,
524
582
  "defaultValue": "'bottom'"
525
583
  },
584
+ "positionAnchor": {
585
+ "type": "string",
586
+ "mutable": false,
587
+ "complexType": {
588
+ "original": "HTMLElement | string",
589
+ "resolved": "HTMLElement | string | undefined",
590
+ "references": {
591
+ "HTMLElement": {
592
+ "location": "global",
593
+ "id": "global::HTMLElement"
594
+ }
595
+ }
596
+ },
597
+ "required": false,
598
+ "optional": true,
599
+ "docs": {
600
+ "tags": [],
601
+ "text": "The element to anchor the toast's position to. Can be set as a direct reference\nor the ID of the element. With `position=\"bottom\"`, the toast will sit above the\nchosen element. With `position=\"top\"`, the toast will sit below the chosen element.\nWith `position=\"middle\"`, the value of `positionAnchor` is ignored."
602
+ },
603
+ "attribute": "position-anchor",
604
+ "reflect": false
605
+ },
526
606
  "buttons": {
527
607
  "type": "unknown",
528
608
  "mutable": false,
@@ -813,8 +893,9 @@ export class Toast {
813
893
  "id": "global::Promise"
814
894
  },
815
895
  "ToastPresentOptions": {
816
- "location": "global",
817
- "id": "global::ToastPresentOptions"
896
+ "location": "import",
897
+ "path": "./toast-interface",
898
+ "id": "src/components/toast/toast-interface.ts::ToastPresentOptions"
818
899
  }
819
900
  },
820
901
  "return": "Promise<void>"
@@ -846,8 +927,9 @@ export class Toast {
846
927
  "id": "global::Promise"
847
928
  },
848
929
  "ToastDismissOptions": {
849
- "location": "global",
850
- "id": "global::ToastDismissOptions"
930
+ "location": "import",
931
+ "path": "./toast-interface",
932
+ "id": "src/components/toast/toast-interface.ts::ToastDismissOptions"
851
933
  }
852
934
  },
853
935
  "return": "Promise<boolean>"
@@ -1,36 +1,3 @@
1
- /**
2
- * Convert a font size to a dynamic font size.
3
- * Fonts that participate in Dynamic Type should use
4
- * dynamic font sizes.
5
- * @param size - The initial font size including the unit (i.e. px or pt)
6
- * @param unit (optional) - The unit to convert to. Use this if you want to
7
- * convert to a unit other than $baselineUnit.
8
- */
9
- /**
10
- * Convert a font size to a dynamic font size but impose
11
- * a maximum font size.
12
- * @param size - The initial font size including the unit (i.e. px or pt)
13
- * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
14
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
15
- * convert to a unit other than $baselineUnit.
16
- */
17
- /**
18
- * Convert a font size to a dynamic font size but impose
19
- * a minimum font size.
20
- * @param size - The initial font size including the unit (i.e. px or pt)
21
- * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
22
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
23
- * convert to a unit other than $baselineUnit.
24
- */
25
- /**
26
- * Convert a font size to a dynamic font size but impose
27
- * maximum and minimum font sizes.
28
- * @param size - The initial font size including the unit (i.e. px or pt)
29
- * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
30
- * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
31
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
32
- * convert to a unit other than $baselineUnit.
33
- */
34
1
  :host {
35
2
  /**
36
3
  * @prop --background: Background of the toast
@@ -193,10 +160,6 @@
193
160
  margin-inline-start: 16px;
194
161
  }
195
162
 
196
- .toast-content {
197
- min-width: 0;
198
- }
199
-
200
163
  .toast-message {
201
164
  flex: 1;
202
165
  white-space: var(--white-space);
@@ -233,39 +196,6 @@
233
196
  cursor: pointer;
234
197
  }
235
198
  }
236
- /**
237
- * Convert a font size to a dynamic font size.
238
- * Fonts that participate in Dynamic Type should use
239
- * dynamic font sizes.
240
- * @param size - The initial font size including the unit (i.e. px or pt)
241
- * @param unit (optional) - The unit to convert to. Use this if you want to
242
- * convert to a unit other than $baselineUnit.
243
- */
244
- /**
245
- * Convert a font size to a dynamic font size but impose
246
- * a maximum font size.
247
- * @param size - The initial font size including the unit (i.e. px or pt)
248
- * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
249
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
250
- * convert to a unit other than $baselineUnit.
251
- */
252
- /**
253
- * Convert a font size to a dynamic font size but impose
254
- * a minimum font size.
255
- * @param size - The initial font size including the unit (i.e. px or pt)
256
- * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
257
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
258
- * convert to a unit other than $baselineUnit.
259
- */
260
- /**
261
- * Convert a font size to a dynamic font size but impose
262
- * maximum and minimum font sizes.
263
- * @param size - The initial font size including the unit (i.e. px or pt)
264
- * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
265
- * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
266
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
267
- * convert to a unit other than $baselineUnit.
268
- */
269
199
  :host {
270
200
  --background: var(--ion-color-step-800, #333333);
271
201
  --border-radius: 4px;
@@ -275,7 +205,7 @@
275
205
  --max-width: 700px;
276
206
  --start: 8px;
277
207
  --end: 8px;
278
- font-size: 0.875rem;
208
+ font-size: 14px;
279
209
  }
280
210
 
281
211
  .toast-wrapper {
@@ -303,11 +233,11 @@
303
233
  .toast-header {
304
234
  margin-bottom: 2px;
305
235
  font-weight: 500;
306
- line-height: 1.25rem;
236
+ line-height: 20px;
307
237
  }
308
238
 
309
239
  .toast-message {
310
- line-height: 1.25rem;
240
+ line-height: 20px;
311
241
  }
312
242
 
313
243
  .toast-layout-baseline .toast-button-group-start {
@@ -342,7 +272,7 @@
342
272
  position: relative;
343
273
  background-color: transparent;
344
274
  font-family: var(--ion-font-family);
345
- font-size: 0.875rem;
275
+ font-size: 14px;
346
276
  font-weight: 500;
347
277
  letter-spacing: 0.84px;
348
278
  text-transform: uppercase;