@ionic/core 7.5.8-dev.11701806358.1ca1b519 → 7.5.8-dev.11701876182.1e71e7a0

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 (551) hide show
  1. package/components/animation.js +12 -11
  2. package/components/backdrop.js +12 -0
  3. package/components/checkbox.js +5 -3
  4. package/components/data.js +1 -1
  5. package/components/gesture-controller.js +1 -1
  6. package/components/index4.js +10 -12
  7. package/components/index5.js +0 -22
  8. package/components/input-shims.js +12 -7
  9. package/components/input.utils.js +3 -2
  10. package/components/ion-content.js +1 -1
  11. package/components/ion-datetime.js +64 -40
  12. package/components/ion-infinite-scroll.js +11 -3
  13. package/components/ion-input.js +31 -8
  14. package/components/ion-modal.js +2 -2
  15. package/components/ion-picker-column-internal.d.ts +11 -0
  16. package/components/ion-picker-column-internal.js +9 -0
  17. package/components/ion-picker-column.js +2 -2
  18. package/components/{ion-picker-legacy.d.ts → ion-picker-internal.d.ts} +4 -4
  19. package/components/ion-picker-internal.js +9 -0
  20. package/components/ion-picker.js +309 -1
  21. package/components/ion-range.js +5 -3
  22. package/components/ion-select.js +44 -29
  23. package/components/ion-skeleton-text.js +14 -1
  24. package/components/ion-textarea.js +30 -7
  25. package/components/ion-toast.js +419 -74
  26. package/components/ion-toggle.js +5 -3
  27. package/components/item.js +2 -2
  28. package/components/label.js +2 -2
  29. package/components/overlays.js +6 -12
  30. package/components/picker-column-internal.js +390 -0
  31. package/components/picker-column.js +317 -363
  32. package/components/{picker.js → picker-internal.js} +16 -16
  33. package/components/radio-group.js +2 -0
  34. package/components/radio.js +45 -5
  35. package/dist/cjs/{animation-cc40e39c.js → animation-9b401d39.js} +13 -12
  36. package/dist/cjs/{button-active-9d7e0640.js → button-active-a5185907.js} +2 -2
  37. package/dist/cjs/{capacitor-46980811.js → capacitor-c04564bf.js} +1 -1
  38. package/dist/cjs/compare-with-utils-df1001d7.js +44 -0
  39. package/dist/cjs/{data-e7526b58.js → data-36b9094e.js} +1 -1
  40. package/dist/cjs/{gesture-controller-9436f482.js → gesture-controller-c40c045a.js} +0 -1
  41. package/dist/cjs/{haptic-216df36c.js → haptic-b882e0bb.js} +1 -1
  42. package/dist/cjs/{index-8c1e77d6.js → index-b4f986cd.js} +1 -1
  43. package/dist/cjs/index-c8d52405.js +10 -0
  44. package/dist/cjs/{index-5cbb20f9.js → index-ce101dc9.js} +11 -13
  45. package/dist/cjs/{index-ee07ed59.js → index-d1b59ffa.js} +1 -1
  46. package/dist/cjs/{index-d4c2e02c.js → index-f8f13389.js} +2 -2
  47. package/dist/cjs/index.cjs.js +10 -10
  48. package/dist/cjs/{input-shims-87102b6a.js → input-shims-a23bb0f4.js} +15 -10
  49. package/dist/cjs/{input.utils-2a11c1fe.js → input.utils-3d0166a2.js} +4 -3
  50. package/dist/cjs/ion-action-sheet.cjs.entry.js +8 -8
  51. package/dist/cjs/ion-alert.cjs.entry.js +8 -8
  52. package/dist/cjs/ion-app_8.cjs.entry.js +10 -10
  53. package/dist/cjs/ion-backdrop.cjs.entry.js +12 -0
  54. package/dist/cjs/ion-checkbox.cjs.entry.js +5 -3
  55. package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
  56. package/dist/cjs/ion-datetime_3.cjs.entry.js +60 -40
  57. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +11 -3
  58. package/dist/cjs/ion-input.cjs.entry.js +34 -11
  59. package/dist/cjs/ion-item-option_3.cjs.entry.js +1 -1
  60. package/dist/cjs/ion-item_8.cjs.entry.js +17 -4
  61. package/dist/cjs/ion-loading.cjs.entry.js +3 -4
  62. package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
  63. package/dist/cjs/ion-modal.cjs.entry.js +10 -10
  64. package/dist/cjs/ion-nav_2.cjs.entry.js +2 -2
  65. package/dist/cjs/{ion-picker-column.cjs.entry.js → ion-picker-column-internal.cjs.entry.js} +74 -107
  66. package/dist/cjs/{ion-picker.cjs.entry.js → ion-picker-internal.cjs.entry.js} +13 -13
  67. package/dist/cjs/ion-popover.cjs.entry.js +4 -5
  68. package/dist/cjs/ion-radio_2.cjs.entry.js +9 -4
  69. package/dist/cjs/ion-range.cjs.entry.js +6 -4
  70. package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -7
  71. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  72. package/dist/cjs/ion-segment_2.cjs.entry.js +1 -1
  73. package/dist/cjs/ion-select_3.cjs.entry.js +51 -36
  74. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
  75. package/dist/cjs/ion-textarea.cjs.entry.js +33 -10
  76. package/dist/cjs/ion-toast.cjs.entry.js +434 -93
  77. package/dist/cjs/ion-toggle.cjs.entry.js +9 -7
  78. package/dist/cjs/ionic.cjs.js +1 -1
  79. package/dist/cjs/{ios.transition-a4ffb5a2.js → ios.transition-6787b799.js} +3 -3
  80. package/dist/cjs/{keyboard-9390928c.js → keyboard-0272231f.js} +1 -1
  81. package/dist/cjs/{keyboard-7d621ee9.js → keyboard-af1bb365.js} +3 -3
  82. package/dist/cjs/{keyboard-controller-2158b478.js → keyboard-controller-c05e747a.js} +2 -2
  83. package/dist/cjs/loader.cjs.js +1 -1
  84. package/dist/cjs/{md.transition-292abe1c.js → md.transition-e033d20a.js} +3 -3
  85. package/dist/cjs/{notch-controller-1dce508a.js → notch-controller-9735e7ac.js} +1 -1
  86. package/dist/cjs/{overlays-e8e05b0e.js → overlays-27a6fb16.js} +7 -12
  87. package/dist/cjs/{swipe-back-b8f2330b.js → swipe-back-2a858bbd.js} +2 -2
  88. package/dist/collection/collection-manifest.json +6 -7
  89. package/dist/collection/components/backdrop/backdrop.js +12 -0
  90. package/dist/collection/components/checkbox/checkbox.ios.css +0 -6
  91. package/dist/collection/components/checkbox/checkbox.js +4 -1
  92. package/dist/collection/components/checkbox/checkbox.md.css +0 -6
  93. package/dist/collection/components/checkbox/test/checkbox.spec.js +14 -0
  94. package/dist/collection/components/content/content.css +4 -0
  95. package/dist/collection/components/datetime/datetime.ios.css +38 -83
  96. package/dist/collection/components/datetime/datetime.js +36 -24
  97. package/dist/collection/components/datetime/datetime.md.css +38 -88
  98. package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +1 -1
  99. package/dist/collection/components/datetime/test/a11y/datetime.spec.js +9 -6
  100. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +0 -10
  101. package/dist/collection/components/datetime/test/datetime.e2e.js +2 -2
  102. package/dist/collection/components/datetime/test/disabled/datetime.spec.js +4 -4
  103. package/dist/collection/components/datetime/test/locale/datetime.e2e.js +2 -2
  104. package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +6 -6
  105. package/dist/collection/components/datetime/test/month-year-picker/datetime.e2e.js +1 -1
  106. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +41 -43
  107. package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +1 -1
  108. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +4 -4
  109. package/dist/collection/components/datetime/test/values/datetime.e2e.js +12 -15
  110. package/dist/collection/components/datetime/utils/data.js +1 -1
  111. package/dist/collection/components/infinite-scroll/infinite-scroll.js +11 -3
  112. package/dist/collection/components/infinite-scroll/test/small-dom-update/infinite-scroll.e2e.js +31 -0
  113. package/dist/collection/components/input/input.ios.css +10 -3
  114. package/dist/collection/components/input/input.js +31 -6
  115. package/dist/collection/components/input/input.md.css +13 -12
  116. package/dist/collection/components/input/test/slot/input.e2e.js +51 -0
  117. package/dist/collection/components/item/item.ios.css +41 -3
  118. package/dist/collection/components/item/item.md.css +41 -3
  119. package/dist/collection/components/item/test/basic/item.e2e.js +1 -1
  120. package/dist/collection/components/item/test/disabled/item.e2e.js +0 -1
  121. package/dist/collection/components/label/label.ios.css +14 -3
  122. package/dist/collection/components/label/label.md.css +14 -3
  123. package/dist/collection/components/modal/gestures/swipe-to-close.js +2 -1
  124. package/dist/collection/components/note/test/a11y/note.e2e.js +43 -0
  125. package/dist/collection/components/picker/picker.ios.css +205 -100
  126. package/dist/collection/components/picker/picker.js +743 -461
  127. package/dist/collection/components/picker/picker.md.css +194 -98
  128. package/dist/collection/components/picker/test/basic/picker.e2e.js +13 -99
  129. package/dist/collection/components/{picker-legacy → picker}/test/is-open/picker.e2e.js +4 -4
  130. package/dist/collection/components/{picker-legacy → picker}/test/picker-id.spec.js +5 -5
  131. package/dist/collection/components/{picker-legacy → picker}/test/trigger/picker.e2e.js +1 -1
  132. package/dist/collection/components/picker-column/picker-column.ios.css +160 -120
  133. package/dist/collection/components/picker-column/picker-column.js +329 -514
  134. package/dist/collection/components/picker-column/picker-column.md.css +107 -134
  135. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-aria.spec.js +3 -3
  136. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-dynamic.spec.js +2 -2
  137. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column.spec.js +2 -2
  138. package/dist/collection/components/{picker-legacy-column → picker-column}/test/standalone/picker-column.e2e.js +3 -3
  139. package/dist/collection/components/{picker-column-option/picker-column-option.md.css → picker-column-internal/picker-column-internal.ios.css} +53 -6
  140. package/dist/collection/components/picker-column-internal/picker-column-internal.js +565 -0
  141. package/dist/collection/components/{picker-legacy-column/picker-column.md.css → picker-column-internal/picker-column-internal.md.css} +63 -113
  142. package/dist/collection/components/{picker-column/test/basic/picker-column.e2e.js → picker-column-internal/test/basic/picker-column-internal.e2e.js} +8 -8
  143. package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +162 -0
  144. package/dist/collection/components/{picker-legacy/picker.md.css → picker-internal/picker-internal.ios.css} +100 -192
  145. package/dist/collection/components/picker-internal/picker-internal.js +544 -0
  146. package/dist/collection/components/{picker-legacy-column/picker-column.ios.css → picker-internal/picker-internal.md.css} +101 -98
  147. package/dist/collection/components/{picker/test/a11y/picker.e2e.js → picker-internal/test/a11y/picker-internal.e2e.js} +2 -2
  148. package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +118 -0
  149. package/dist/collection/components/{picker/test/keyboard-entry/picker.e2e.js → picker-internal/test/keyboard-entry/picker-internal.e2e.js} +22 -23
  150. package/dist/collection/components/radio/radio.ios.css +0 -6
  151. package/dist/collection/components/radio/radio.js +7 -3
  152. package/dist/collection/components/radio/radio.md.css +0 -6
  153. package/dist/collection/components/radio/test/radio.spec.js +14 -0
  154. package/dist/collection/components/radio-group/radio-group.js +24 -0
  155. package/dist/collection/components/radio-group/test/radio-group.spec.js +69 -0
  156. package/dist/collection/components/range/range.ios.css +0 -6
  157. package/dist/collection/components/range/range.js +4 -1
  158. package/dist/collection/components/range/range.md.css +0 -6
  159. package/dist/collection/components/range/test/range.spec.js +16 -0
  160. package/dist/collection/components/select/select.ios.css +60 -7
  161. package/dist/collection/components/select/select.js +45 -28
  162. package/dist/collection/components/select/select.md.css +63 -19
  163. package/dist/collection/components/select/test/item/select.e2e.js +15 -0
  164. package/dist/collection/components/select/test/label/select.e2e.js +1 -1
  165. package/dist/collection/components/select/test/legacy/wrapping/select.e2e.js +1 -1
  166. package/dist/collection/components/select/test/slot/select.e2e.js +67 -0
  167. package/dist/collection/components/skeleton-text/skeleton-text.js +39 -0
  168. package/dist/collection/components/textarea/test/slot/textarea.e2e.js +51 -0
  169. package/dist/collection/components/textarea/textarea.ios.css +37 -5
  170. package/dist/collection/components/textarea/textarea.js +30 -5
  171. package/dist/collection/components/textarea/textarea.md.css +47 -14
  172. package/dist/collection/components/toast/animations/ios.enter.js +2 -1
  173. package/dist/collection/components/toast/animations/md.enter.js +4 -3
  174. package/dist/collection/components/toast/animations/utils.js +20 -14
  175. package/dist/collection/components/toast/gestures/swipe-to-dismiss.js +267 -0
  176. package/dist/collection/components/toast/test/swipe-gesture/toast.e2e.js +84 -0
  177. package/dist/collection/components/toast/test/toast-config.spec.js +25 -0
  178. package/dist/collection/components/toast/test/toast.spec.js +80 -0
  179. package/dist/collection/components/toast/toast.ios.css +10 -10
  180. package/dist/collection/components/toast/toast.js +104 -1
  181. package/dist/collection/components/toast/toast.md.css +10 -0
  182. package/dist/collection/components/toggle/test/toggle.spec.js +12 -0
  183. package/dist/collection/components/toggle/toggle.ios.css +0 -6
  184. package/dist/collection/components/toggle/toggle.js +4 -1
  185. package/dist/collection/components/toggle/toggle.md.css +0 -6
  186. package/dist/collection/utils/animation/animation.js +12 -11
  187. package/dist/collection/utils/animation/test/animation.spec.js +16 -0
  188. package/dist/collection/utils/browser/index.js +0 -22
  189. package/dist/collection/utils/forms/compare-with-utils.js +39 -0
  190. package/dist/collection/utils/forms/index.js +1 -0
  191. package/dist/collection/utils/gesture/gesture-controller.js +1 -1
  192. package/dist/collection/utils/input-shims/input-shims.js +12 -6
  193. package/dist/collection/utils/menu-controller/index.js +10 -12
  194. package/dist/collection/utils/overlays.js +5 -11
  195. package/dist/collection/utils/slot-mutation-controller.js +3 -2
  196. package/dist/docs.json +265 -561
  197. package/dist/esm/{animation-fb0e0f6f.js → animation-dde8cc0d.js} +13 -12
  198. package/dist/esm/{button-active-ed9d848c.js → button-active-c6ee4f50.js} +2 -2
  199. package/dist/esm/{capacitor-b0e5fe83.js → capacitor-59395cbd.js} +1 -1
  200. package/dist/esm/compare-with-utils-a96ff2ea.js +41 -0
  201. package/dist/esm/{data-4b9508c9.js → data-f5c75b4e.js} +1 -1
  202. package/dist/esm/{gesture-controller-314a54f6.js → gesture-controller-1bf57181.js} +1 -1
  203. package/dist/esm/{haptic-152c4172.js → haptic-554688a5.js} +1 -1
  204. package/dist/esm/{index-80492ed3.js → index-0c12c22b.js} +11 -13
  205. package/dist/esm/{index-d8817fb0.js → index-1932b201.js} +2 -2
  206. package/dist/esm/{index-39782642.js → index-2cf77112.js} +2 -2
  207. package/dist/esm/{index-ba9976bb.js → index-82eeb47f.js} +1 -1
  208. package/dist/esm/index-a5d50daf.js +7 -0
  209. package/dist/esm/index.js +10 -10
  210. package/dist/esm/{input-shims-0a2e541d.js → input-shims-6539ce13.js} +14 -9
  211. package/dist/esm/{input.utils-2846d430.js → input.utils-a5a2d164.js} +4 -3
  212. package/dist/esm/ion-action-sheet.entry.js +8 -8
  213. package/dist/esm/ion-alert.entry.js +8 -8
  214. package/dist/esm/ion-app_8.entry.js +10 -10
  215. package/dist/esm/ion-backdrop.entry.js +12 -0
  216. package/dist/esm/ion-checkbox.entry.js +5 -3
  217. package/dist/esm/ion-datetime-button.entry.js +1 -1
  218. package/dist/esm/ion-datetime_3.entry.js +59 -39
  219. package/dist/esm/ion-infinite-scroll_2.entry.js +11 -3
  220. package/dist/esm/ion-input.entry.js +34 -11
  221. package/dist/esm/ion-item-option_3.entry.js +1 -1
  222. package/dist/esm/ion-item_8.entry.js +17 -4
  223. package/dist/esm/ion-loading.entry.js +3 -4
  224. package/dist/esm/ion-menu_3.entry.js +7 -7
  225. package/dist/esm/ion-modal.entry.js +10 -10
  226. package/dist/esm/ion-nav_2.entry.js +2 -2
  227. package/dist/esm/{ion-picker-column.entry.js → ion-picker-column-internal.entry.js} +74 -107
  228. package/dist/esm/{ion-picker.entry.js → ion-picker-internal.entry.js} +13 -13
  229. package/dist/esm/ion-popover.entry.js +4 -5
  230. package/dist/esm/ion-radio_2.entry.js +9 -4
  231. package/dist/esm/ion-range.entry.js +6 -4
  232. package/dist/esm/ion-refresher_2.entry.js +7 -7
  233. package/dist/esm/ion-reorder_2.entry.js +4 -4
  234. package/dist/esm/ion-segment_2.entry.js +1 -1
  235. package/dist/esm/ion-select_3.entry.js +47 -32
  236. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  237. package/dist/esm/ion-textarea.entry.js +33 -10
  238. package/dist/esm/ion-toast.entry.js +417 -76
  239. package/dist/esm/ion-toggle.entry.js +9 -7
  240. package/dist/esm/ionic.js +1 -1
  241. package/dist/esm/{ios.transition-fd16bec1.js → ios.transition-802a84a6.js} +3 -3
  242. package/dist/esm/{keyboard-c402e885.js → keyboard-52278bd7.js} +3 -3
  243. package/dist/esm/{keyboard-dbb05fb9.js → keyboard-73175e24.js} +1 -1
  244. package/dist/esm/{keyboard-controller-5d90929a.js → keyboard-controller-ec5c2bfa.js} +2 -2
  245. package/dist/esm/loader.js +1 -1
  246. package/dist/esm/{md.transition-94ac93e1.js → md.transition-43c2874d.js} +3 -3
  247. package/dist/esm/{notch-controller-d09b6aca.js → notch-controller-fea7f9c5.js} +1 -1
  248. package/dist/esm/{overlays-fbc5cab5.js → overlays-32ef481d.js} +7 -13
  249. package/dist/esm/{swipe-back-a8ca7f93.js → swipe-back-a6f386fc.js} +2 -2
  250. package/dist/esm-es5/{animation-fb0e0f6f.js → animation-dde8cc0d.js} +1 -1
  251. package/dist/esm-es5/{button-active-ed9d848c.js → button-active-c6ee4f50.js} +1 -1
  252. package/dist/esm-es5/{capacitor-b0e5fe83.js → capacitor-59395cbd.js} +1 -1
  253. package/dist/esm-es5/compare-with-utils-a96ff2ea.js +4 -0
  254. package/dist/esm-es5/{gesture-controller-314a54f6.js → gesture-controller-1bf57181.js} +1 -1
  255. package/dist/esm-es5/{haptic-152c4172.js → haptic-554688a5.js} +1 -1
  256. package/dist/esm-es5/index-0c12c22b.js +4 -0
  257. package/dist/esm-es5/{index-d8817fb0.js → index-1932b201.js} +1 -1
  258. package/dist/esm-es5/{index-39782642.js → index-2cf77112.js} +1 -1
  259. package/dist/esm-es5/{index-ba9976bb.js → index-82eeb47f.js} +1 -1
  260. package/dist/esm-es5/index.js +1 -1
  261. package/dist/esm-es5/input-shims-6539ce13.js +4 -0
  262. package/dist/esm-es5/input.utils-a5a2d164.js +4 -0
  263. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  264. package/dist/esm-es5/ion-alert.entry.js +1 -1
  265. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  266. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  267. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  268. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  269. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  270. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  271. package/dist/esm-es5/ion-input.entry.js +1 -1
  272. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  273. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  274. package/dist/esm-es5/ion-loading.entry.js +1 -1
  275. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  276. package/dist/esm-es5/ion-modal.entry.js +1 -1
  277. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  278. package/dist/esm-es5/ion-picker-column-internal.entry.js +4 -0
  279. package/dist/esm-es5/ion-picker-internal.entry.js +4 -0
  280. package/dist/esm-es5/ion-popover.entry.js +1 -1
  281. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  282. package/dist/esm-es5/ion-range.entry.js +1 -1
  283. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  284. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  285. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  286. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  287. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  288. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  289. package/dist/esm-es5/ion-toast.entry.js +1 -1
  290. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  291. package/dist/esm-es5/ionic.js +1 -1
  292. package/dist/esm-es5/{ios.transition-fd16bec1.js → ios.transition-802a84a6.js} +1 -1
  293. package/dist/esm-es5/{keyboard-c402e885.js → keyboard-52278bd7.js} +1 -1
  294. package/dist/esm-es5/{keyboard-dbb05fb9.js → keyboard-73175e24.js} +1 -1
  295. package/dist/esm-es5/{keyboard-controller-5d90929a.js → keyboard-controller-ec5c2bfa.js} +1 -1
  296. package/dist/esm-es5/loader.js +1 -1
  297. package/dist/esm-es5/md.transition-43c2874d.js +4 -0
  298. package/dist/esm-es5/{notch-controller-d09b6aca.js → notch-controller-fea7f9c5.js} +1 -1
  299. package/dist/esm-es5/overlays-32ef481d.js +4 -0
  300. package/dist/esm-es5/swipe-back-a6f386fc.js +4 -0
  301. package/dist/html.html-data.json +15 -153
  302. package/dist/ionic/index.esm.js +1 -1
  303. package/dist/ionic/ionic.esm.js +1 -1
  304. package/dist/ionic/p-01d14eba.system.entry.js +4 -0
  305. package/dist/ionic/p-042e6f4b.entry.js +4 -0
  306. package/dist/ionic/p-05d83227.system.entry.js +4 -0
  307. package/dist/ionic/{p-32e19bee.system.js → p-0bd51c34.system.js} +1 -1
  308. package/dist/ionic/p-16756e94.system.entry.js +4 -0
  309. package/dist/ionic/p-1b19c04b.entry.js +4 -0
  310. package/dist/ionic/{p-95c26010.system.js → p-1cca10d6.system.js} +1 -1
  311. package/dist/ionic/p-1e4371bd.js +4 -0
  312. package/dist/ionic/{p-21c3515a.entry.js → p-251666e2.entry.js} +1 -1
  313. package/dist/ionic/{p-4e8e09e1.js → p-27281edd.js} +1 -1
  314. package/dist/ionic/p-28249b10.system.entry.js +4 -0
  315. package/dist/ionic/p-28a2c2a2.entry.js +4 -0
  316. package/dist/ionic/p-29d03b3a.js +4 -0
  317. package/dist/ionic/p-2b7827c7.js +4 -0
  318. package/dist/ionic/p-2d3b9fa3.system.entry.js +4 -0
  319. package/dist/ionic/p-2d539df1.entry.js +4 -0
  320. package/dist/ionic/{p-9c229210.system.entry.js → p-3137c025.system.entry.js} +2 -2
  321. package/dist/ionic/{p-3e1e14d9.system.js → p-31b2326e.system.js} +1 -1
  322. package/dist/ionic/{p-30029cc2.system.js → p-31fcb233.system.js} +1 -1
  323. package/dist/ionic/{p-1d624e03.system.js → p-33a37fad.system.js} +1 -1
  324. package/dist/ionic/p-35ce400e.system.js +4 -0
  325. package/dist/ionic/p-36d187af.js +4 -0
  326. package/dist/ionic/p-376a6063.js +4 -0
  327. package/dist/ionic/p-38f2c6bb.system.js +4 -0
  328. package/dist/ionic/p-39c31982.system.entry.js +4 -0
  329. package/dist/ionic/{p-75445583.js → p-3a75d7fd.js} +1 -1
  330. package/dist/ionic/{p-1fc72959.entry.js → p-3dd98a73.entry.js} +1 -1
  331. package/dist/ionic/p-3e6b47e8.system.entry.js +4 -0
  332. package/dist/ionic/p-3f5179b5.entry.js +4 -0
  333. package/dist/ionic/p-40f68333.system.js +4 -0
  334. package/dist/ionic/{p-643a8fae.js → p-42f189f4.js} +1 -1
  335. package/dist/ionic/p-438e1b8a.entry.js +4 -0
  336. package/dist/ionic/{p-b752714f.system.entry.js → p-46d400b4.system.entry.js} +1 -1
  337. package/dist/ionic/p-47b6ba5b.js +4 -0
  338. package/dist/ionic/{p-5d42b6b4.entry.js → p-4d67d27a.entry.js} +1 -1
  339. package/dist/ionic/{p-535d2a67.entry.js → p-4f3ae45a.entry.js} +1 -1
  340. package/dist/ionic/p-517a9885.system.entry.js +4 -0
  341. package/dist/ionic/p-53ec4f1c.system.js +4 -0
  342. package/dist/ionic/p-5e4eec2e.entry.js +4 -0
  343. package/dist/ionic/{p-57477107.system.js → p-5e745192.system.js} +1 -1
  344. package/dist/ionic/{p-a9a80f5b.entry.js → p-5eda1d7d.entry.js} +1 -1
  345. package/dist/ionic/{p-e8e86f69.system.entry.js → p-6577aea9.system.entry.js} +1 -1
  346. package/dist/ionic/p-6a6477b2.js +4 -0
  347. package/dist/ionic/{p-4890093d.js → p-6de472cb.js} +1 -1
  348. package/dist/ionic/{p-b4d31b30.system.entry.js → p-6de62649.system.entry.js} +1 -1
  349. package/dist/ionic/p-72f6ff89.js +4 -0
  350. package/dist/ionic/p-765f4dde.entry.js +4 -0
  351. package/dist/ionic/{p-3f6270b3.entry.js → p-78aadecb.entry.js} +1 -1
  352. package/dist/ionic/p-7d92bf15.system.entry.js +4 -0
  353. package/dist/ionic/p-7ee0f3f2.entry.js +4 -0
  354. package/dist/ionic/p-80fa068e.entry.js +4 -0
  355. package/dist/ionic/p-8314281e.system.js +4 -0
  356. package/dist/ionic/p-88d5fbd3.js +4 -0
  357. package/dist/ionic/{p-4911a5d6.entry.js → p-88fde0e0.entry.js} +1 -1
  358. package/dist/ionic/{p-0e4f2e17.system.js → p-8985cdb6.system.js} +1 -1
  359. package/dist/ionic/{p-96dbbac1.system.entry.js → p-8acae6b0.system.entry.js} +1 -1
  360. package/dist/ionic/p-8d69a624.entry.js +4 -0
  361. package/dist/ionic/p-8de17614.system.entry.js +4 -0
  362. package/dist/ionic/p-908475e7.system.entry.js +4 -0
  363. package/dist/ionic/p-91d33c4a.js +4 -0
  364. package/dist/ionic/p-979d4f5c.system.js +4 -0
  365. package/dist/ionic/p-9b7f0b0f.entry.js +4 -0
  366. package/dist/ionic/p-9e447eb1.system.js +4 -0
  367. package/dist/ionic/{p-f910cc73.system.entry.js → p-9eec42cc.system.entry.js} +1 -1
  368. package/dist/ionic/p-9f6ee2c0.system.entry.js +4 -0
  369. package/dist/ionic/{p-77965464.system.entry.js → p-a0bb7b92.system.entry.js} +1 -1
  370. package/dist/ionic/p-a0d7bb5e.system.js +4 -0
  371. package/dist/ionic/{p-6d72fb44.entry.js → p-a1987850.entry.js} +1 -1
  372. package/dist/ionic/p-a3277a67.entry.js +4 -0
  373. package/dist/ionic/{p-6b7c55cd.entry.js → p-a9978d08.entry.js} +1 -1
  374. package/dist/ionic/{p-fbf3a689.system.entry.js → p-ada96dd0.system.entry.js} +1 -1
  375. package/dist/ionic/p-afd6ca9d.entry.js +4 -0
  376. package/dist/ionic/p-b56d0866.system.entry.js +4 -0
  377. package/dist/ionic/p-b6f9d32a.entry.js +4 -0
  378. package/dist/ionic/{p-9b97df10.js → p-bb3615f7.js} +1 -1
  379. package/dist/ionic/p-c61cc894.js +4 -0
  380. package/dist/ionic/{p-20d469d0.system.js → p-c7c8429a.system.js} +1 -1
  381. package/dist/ionic/{p-304383f9.system.js → p-cabad15b.system.js} +1 -1
  382. package/dist/ionic/p-cce9f61a.system.entry.js +4 -0
  383. package/dist/ionic/{p-31158892.js → p-cdbeaadc.js} +1 -1
  384. package/dist/ionic/p-d032f825.system.entry.js +4 -0
  385. package/dist/ionic/p-d51674c5.system.js +4 -0
  386. package/dist/ionic/{p-b133e9b4.entry.js → p-ddb30596.entry.js} +1 -1
  387. package/dist/ionic/{p-98d82c73.system.js → p-ddbb2d5b.system.js} +1 -1
  388. package/dist/ionic/p-de6f8b28.system.js +4 -0
  389. package/dist/ionic/p-de756e5c.js +4 -0
  390. package/dist/ionic/p-dee7c1d0.system.entry.js +4 -0
  391. package/dist/ionic/p-dfd9432a.entry.js +4 -0
  392. package/dist/ionic/{p-54dfc9b5.system.js → p-e24ce1e5.system.js} +1 -1
  393. package/dist/ionic/p-e3584231.system.js +1 -1
  394. package/dist/ionic/{p-6fd64e7c.system.entry.js → p-e6d68e02.system.entry.js} +1 -1
  395. package/dist/ionic/p-e94c392d.entry.js +4 -0
  396. package/dist/ionic/p-f0445d82.system.entry.js +4 -0
  397. package/dist/ionic/{p-8ededb41.js → p-f5d2dc9b.js} +1 -1
  398. package/dist/ionic/p-f656e032.system.entry.js +4 -0
  399. package/dist/ionic/{p-76d3765d.js → p-f70970cf.js} +1 -1
  400. package/dist/ionic/{p-c18de88a.system.entry.js → p-fba0a6e7.system.entry.js} +1 -1
  401. package/dist/ionic/p-feae5133.entry.js +4 -0
  402. package/dist/types/components/backdrop/backdrop.d.ts +3 -0
  403. package/dist/types/components/checkbox/checkbox.d.ts +1 -0
  404. package/dist/types/components/datetime/datetime.d.ts +1 -0
  405. package/dist/types/components/datetime/utils/data.d.ts +2 -2
  406. package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +7 -0
  407. package/dist/types/components/input/input.d.ts +2 -0
  408. package/dist/types/components/menu/menu.d.ts +1 -1
  409. package/dist/types/components/picker/picker.d.ts +131 -74
  410. package/dist/types/components/picker-column/picker-column.d.ts +39 -105
  411. package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +102 -0
  412. package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +8 -0
  413. package/dist/types/components/picker-internal/picker-internal.d.ts +102 -0
  414. package/dist/types/components/radio/radio.d.ts +1 -0
  415. package/dist/types/components/radio-group/radio-group-interface.d.ts +1 -0
  416. package/dist/types/components/radio-group/radio-group.d.ts +8 -1
  417. package/dist/types/components/range/range.d.ts +1 -0
  418. package/dist/types/components/router/router.d.ts +2 -1
  419. package/dist/types/components/select/select.d.ts +6 -1
  420. package/dist/types/components/skeleton-text/skeleton-text.d.ts +9 -1
  421. package/dist/types/components/textarea/textarea.d.ts +2 -0
  422. package/dist/types/components/toast/animations/utils.d.ts +15 -4
  423. package/dist/types/components/toast/gestures/swipe-to-dismiss.d.ts +9 -0
  424. package/dist/types/components/toast/toast-interface.d.ts +2 -0
  425. package/dist/types/components/toast/toast.d.ts +28 -1
  426. package/dist/types/components/toggle/toggle.d.ts +1 -0
  427. package/dist/types/components.d.ts +159 -169
  428. package/dist/types/interface.d.ts +2 -6
  429. package/dist/types/jest.d.ts +5 -0
  430. package/dist/types/utils/animation/animation-interface.d.ts +4 -4
  431. package/dist/types/utils/browser/index.d.ts +11 -2
  432. package/dist/types/utils/config.d.ts +2 -2
  433. package/dist/types/utils/forms/compare-with-utils.d.ts +18 -0
  434. package/dist/types/utils/forms/index.d.ts +1 -0
  435. package/dist/types/utils/gesture/gesture-controller.d.ts +0 -1
  436. package/dist/types/utils/hardware-back-button.d.ts +4 -0
  437. package/dist/types/utils/overlays.d.ts +3 -5
  438. package/dist/types/utils/slot-mutation-controller.d.ts +2 -2
  439. package/hydrate/index.js +1855 -1509
  440. package/package.json +1 -1
  441. package/components/ion-picker-column-option.d.ts +0 -11
  442. package/components/ion-picker-column-option.js +0 -9
  443. package/components/ion-picker-legacy-column.d.ts +0 -11
  444. package/components/ion-picker-legacy-column.js +0 -9
  445. package/components/ion-picker-legacy.js +0 -309
  446. package/components/picker-column-option.js +0 -122
  447. package/components/picker-column2.js +0 -379
  448. package/dist/cjs/index-306a7476.js +0 -32
  449. package/dist/cjs/ion-picker-column-option.cjs.entry.js +0 -104
  450. package/dist/collection/components/item/test/text/item.e2e.js +0 -14
  451. package/dist/collection/components/picker-column/test/disabled/picker-column.e2e.js +0 -113
  452. package/dist/collection/components/picker-column/test/slots/picker-column.e2e.js +0 -39
  453. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +0 -87
  454. package/dist/collection/components/picker-column-option/picker-column-option.js +0 -173
  455. package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +0 -18
  456. package/dist/collection/components/picker-column-option/test/basic/picker-column-option.e2e.js +0 -37
  457. package/dist/collection/components/picker-legacy/picker.ios.css +0 -367
  458. package/dist/collection/components/picker-legacy/picker.js +0 -817
  459. package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +0 -25
  460. package/dist/collection/components/picker-legacy-column/picker-column.js +0 -419
  461. package/dist/collection/utils/test/overlays/overlays-scroll-blocking.spec.js +0 -65
  462. package/dist/esm/index-7a14ecec.js +0 -29
  463. package/dist/esm/ion-picker-column-option.entry.js +0 -100
  464. package/dist/esm-es5/index-80492ed3.js +0 -4
  465. package/dist/esm-es5/input-shims-0a2e541d.js +0 -4
  466. package/dist/esm-es5/input.utils-2846d430.js +0 -4
  467. package/dist/esm-es5/ion-picker-column-option.entry.js +0 -4
  468. package/dist/esm-es5/ion-picker-column.entry.js +0 -4
  469. package/dist/esm-es5/ion-picker.entry.js +0 -4
  470. package/dist/esm-es5/md.transition-94ac93e1.js +0 -4
  471. package/dist/esm-es5/overlays-fbc5cab5.js +0 -4
  472. package/dist/esm-es5/swipe-back-a8ca7f93.js +0 -4
  473. package/dist/ionic/p-22e5af95.entry.js +0 -4
  474. package/dist/ionic/p-232d1f22.entry.js +0 -4
  475. package/dist/ionic/p-23672c82.system.entry.js +0 -4
  476. package/dist/ionic/p-26798a7b.system.entry.js +0 -4
  477. package/dist/ionic/p-27bcbbc7.system.entry.js +0 -4
  478. package/dist/ionic/p-2ab4e925.system.entry.js +0 -4
  479. package/dist/ionic/p-2d5aeccc.js +0 -4
  480. package/dist/ionic/p-2d600c25.system.js +0 -4
  481. package/dist/ionic/p-308e1341.js +0 -4
  482. package/dist/ionic/p-32303650.system.entry.js +0 -4
  483. package/dist/ionic/p-34c39c48.entry.js +0 -4
  484. package/dist/ionic/p-3ba01a9c.system.entry.js +0 -4
  485. package/dist/ionic/p-3c58a71b.js +0 -4
  486. package/dist/ionic/p-3fd26bd6.system.entry.js +0 -4
  487. package/dist/ionic/p-3fe96156.system.js +0 -4
  488. package/dist/ionic/p-42ba3902.entry.js +0 -4
  489. package/dist/ionic/p-4a081ea9.entry.js +0 -4
  490. package/dist/ionic/p-4a31c99f.entry.js +0 -4
  491. package/dist/ionic/p-4a36430f.system.entry.js +0 -4
  492. package/dist/ionic/p-51abefb7.system.js +0 -4
  493. package/dist/ionic/p-563c41f0.system.entry.js +0 -4
  494. package/dist/ionic/p-5a68960f.entry.js +0 -4
  495. package/dist/ionic/p-6c37f051.js +0 -4
  496. package/dist/ionic/p-73190c5f.entry.js +0 -4
  497. package/dist/ionic/p-73aa7604.entry.js +0 -4
  498. package/dist/ionic/p-7b725280.entry.js +0 -4
  499. package/dist/ionic/p-8017aad2.system.entry.js +0 -4
  500. package/dist/ionic/p-83af3685.system.js +0 -4
  501. package/dist/ionic/p-846ee227.entry.js +0 -4
  502. package/dist/ionic/p-856c430d.js +0 -4
  503. package/dist/ionic/p-8c97cdc0.entry.js +0 -4
  504. package/dist/ionic/p-8fa6583d.system.js +0 -4
  505. package/dist/ionic/p-9282b16f.entry.js +0 -4
  506. package/dist/ionic/p-93000a81.system.entry.js +0 -4
  507. package/dist/ionic/p-990ffd0e.js +0 -4
  508. package/dist/ionic/p-9ba90516.system.entry.js +0 -4
  509. package/dist/ionic/p-a225bf0f.system.entry.js +0 -4
  510. package/dist/ionic/p-a60a1ce5.js +0 -4
  511. package/dist/ionic/p-a8baa23e.entry.js +0 -4
  512. package/dist/ionic/p-a98dc0c1.entry.js +0 -4
  513. package/dist/ionic/p-a9e3b5be.system.entry.js +0 -4
  514. package/dist/ionic/p-ab9456e9.system.entry.js +0 -4
  515. package/dist/ionic/p-afcf4620.entry.js +0 -4
  516. package/dist/ionic/p-c2910c78.entry.js +0 -4
  517. package/dist/ionic/p-c8f0a036.entry.js +0 -4
  518. package/dist/ionic/p-ca8938f4.js +0 -4
  519. package/dist/ionic/p-ca9d1792.system.entry.js +0 -4
  520. package/dist/ionic/p-cde52378.system.entry.js +0 -4
  521. package/dist/ionic/p-d43f1f3d.system.js +0 -4
  522. package/dist/ionic/p-d662d908.js +0 -4
  523. package/dist/ionic/p-d9695ad9.system.js +0 -4
  524. package/dist/ionic/p-da15f571.system.entry.js +0 -4
  525. package/dist/ionic/p-e4d90573.js +0 -4
  526. package/dist/ionic/p-f54c72b0.system.js +0 -4
  527. package/dist/ionic/p-f7a36cd0.system.js +0 -4
  528. package/dist/ionic/p-f967631d.js +0 -4
  529. package/dist/ionic/p-fe4dde76.entry.js +0 -4
  530. package/dist/ionic/p-ffd5dba4.system.entry.js +0 -4
  531. package/dist/types/components/picker/picker-interfaces.d.ts +0 -8
  532. package/dist/types/components/picker-column-option/picker-column-option.d.ts +0 -66
  533. package/dist/types/components/picker-legacy/picker.d.ts +0 -158
  534. package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
  535. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.enter.js +0 -0
  536. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.leave.js +0 -0
  537. /package/dist/collection/components/picker/{picker-interfaces.js → picker-interface.js} +0 -0
  538. /package/dist/collection/components/{picker-legacy-column → picker-column}/test/test.utils.js +0 -0
  539. /package/dist/collection/components/{picker-column/picker-column-interfaces.js → picker-column-internal/picker-column-internal-interfaces.js} +0 -0
  540. /package/dist/collection/components/{picker-legacy/picker-interface.js → picker-internal/picker-internal-interfaces.js} +0 -0
  541. /package/dist/esm-es5/{data-4b9508c9.js → data-f5c75b4e.js} +0 -0
  542. /package/dist/esm-es5/{index-7a14ecec.js → index-a5d50daf.js} +0 -0
  543. /package/dist/ionic/{p-368f5215.js → p-2aea8b1e.js} +0 -0
  544. /package/dist/ionic/{p-0e94957a.system.js → p-792919fd.system.js} +0 -0
  545. /package/dist/ionic/{p-b347cfd1.js → p-7b30edcc.js} +0 -0
  546. /package/dist/ionic/{p-f58981c2.system.js → p-82e3d633.system.js} +0 -0
  547. /package/dist/types/components/{picker-legacy → picker}/animations/ios.enter.d.ts +0 -0
  548. /package/dist/types/components/{picker-legacy → picker}/animations/ios.leave.d.ts +0 -0
  549. /package/dist/types/components/{picker-legacy → picker}/picker-interface.d.ts +0 -0
  550. /package/dist/types/components/{picker-legacy-column → picker-column}/test/test.utils.d.ts +0 -0
  551. /package/dist/types/components/{picker-column/picker-column-interfaces.d.ts → picker-column-internal/picker-column-internal-interfaces.d.ts} +0 -0
@@ -6,14 +6,102 @@ import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './conf
6
6
  import { g as getElementRoot, r as raf } from './helpers-ae653409.js';
7
7
  import { c as createLockController } from './lock-controller-316928be.js';
8
8
  import { p as printIonWarning } from './index-9b0d46f4.js';
9
- import { d as createDelegateController, e as createTriggerController, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-fbc5cab5.js';
9
+ import { O as OVERLAY_GESTURE_PRIORITY, d as createDelegateController, e as createTriggerController, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall, G as GESTURE } from './overlays-32ef481d.js';
10
10
  import { g as getClassMap, c as createColorClasses } from './theme-01f3f29c.js';
11
11
  import { c as config, b as getIonMode } from './ionic-global-c0cda98e.js';
12
- import { c as createAnimation } from './animation-fb0e0f6f.js';
13
- import { w as win } from './index-7a14ecec.js';
12
+ import { c as createAnimation } from './animation-dde8cc0d.js';
13
+ import { w as win } from './index-a5d50daf.js';
14
+ import { createGesture } from './index-2cf77112.js';
14
15
  import './framework-delegate-bc1fd82a.js';
15
- import './gesture-controller-314a54f6.js';
16
16
  import './hardware-back-button-b2bc76db.js';
17
+ import './gesture-controller-1bf57181.js';
18
+
19
+ /**
20
+ * Calculate the CSS top and bottom position of the toast, to be used
21
+ * as starting points for the animation keyframes.
22
+ *
23
+ * The default animations for both MD and iOS
24
+ * use translateY, which calculates from the
25
+ * top edge of the screen. This behavior impacts
26
+ * how we compute the offset when a toast has
27
+ * position='bottom' since we need to calculate from
28
+ * the bottom edge of the screen instead.
29
+ *
30
+ * @param position The value of the toast's position prop.
31
+ * @param positionAnchor The element the toast should be anchored to,
32
+ * if applicable.
33
+ * @param mode The toast component's mode (md, ios, etc).
34
+ * @param toast A reference to the toast element itself.
35
+ */
36
+ function getAnimationPosition(position, positionAnchor, mode, toast) {
37
+ /**
38
+ * Start with a predefined offset from the edge the toast will be
39
+ * positioned relative to, whether on the screen or anchor element.
40
+ */
41
+ let offset;
42
+ if (mode === 'md') {
43
+ offset = position === 'top' ? 8 : -8;
44
+ }
45
+ else {
46
+ offset = position === 'top' ? 10 : -10;
47
+ }
48
+ /**
49
+ * If positionAnchor is defined, add in the distance from the target
50
+ * screen edge to the target anchor edge. For position="top", the
51
+ * bottom anchor edge is targeted. For position="bottom", the top
52
+ * anchor edge is targeted.
53
+ */
54
+ if (positionAnchor && win) {
55
+ warnIfAnchorIsHidden(positionAnchor, toast);
56
+ const box = positionAnchor.getBoundingClientRect();
57
+ if (position === 'top') {
58
+ offset += box.bottom;
59
+ }
60
+ else if (position === 'bottom') {
61
+ /**
62
+ * Just box.top is the distance from the top edge of the screen
63
+ * to the top edge of the anchor. We want to calculate from the
64
+ * bottom edge of the screen instead.
65
+ */
66
+ offset -= win.innerHeight - box.top;
67
+ }
68
+ /**
69
+ * We don't include safe area here because that should already be
70
+ * accounted for when checking the position of the anchor.
71
+ */
72
+ return {
73
+ top: `${offset}px`,
74
+ bottom: `${offset}px`,
75
+ };
76
+ }
77
+ else {
78
+ return {
79
+ top: `calc(${offset}px + var(--ion-safe-area-top, 0px))`,
80
+ bottom: `calc(${offset}px - var(--ion-safe-area-bottom, 0px))`,
81
+ };
82
+ }
83
+ }
84
+ /**
85
+ * If the anchor element is hidden, getBoundingClientRect()
86
+ * will return all 0s for it, which can cause unexpected
87
+ * results in the position calculation when animating.
88
+ */
89
+ function warnIfAnchorIsHidden(positionAnchor, toast) {
90
+ if (positionAnchor.offsetParent === null) {
91
+ 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);
92
+ }
93
+ }
94
+ /**
95
+ * Returns the top offset required to place
96
+ * the toast in the middle of the screen.
97
+ * Only needed when position="toast".
98
+ * @param toastHeight - The height of the ion-toast element
99
+ * @param wrapperHeight - The height of the .toast-wrapper element
100
+ * inside the toast's shadow root.
101
+ */
102
+ const getOffsetForMiddlePosition = (toastHeight, wrapperHeight) => {
103
+ return Math.floor(toastHeight / 2 - wrapperHeight / 2);
104
+ };
17
105
 
18
106
  /**
19
107
  * iOS Toast Enter Animation
@@ -30,7 +118,7 @@ const iosEnterAnimation = (baseEl, opts) => {
30
118
  wrapperAnimation.fromTo('transform', 'translateY(-100%)', `translateY(${top})`);
31
119
  break;
32
120
  case 'middle':
33
- const topPosition = Math.floor(baseEl.clientHeight / 2 - wrapperEl.clientHeight / 2);
121
+ const topPosition = getOffsetForMiddlePosition(baseEl.clientHeight, wrapperEl.clientHeight);
34
122
  wrapperEl.style.top = `${topPosition}px`;
35
123
  wrapperAnimation.fromTo('opacity', 0.01, 1);
36
124
  break;
@@ -77,16 +165,16 @@ const mdEnterAnimation = (baseEl, opts) => {
77
165
  wrapperAnimation.addElement(wrapperEl);
78
166
  switch (position) {
79
167
  case 'top':
80
- wrapperEl.style.top = top;
168
+ wrapperEl.style.setProperty('transform', `translateY(${top})`);
81
169
  wrapperAnimation.fromTo('opacity', 0.01, 1);
82
170
  break;
83
171
  case 'middle':
84
- const topPosition = Math.floor(baseEl.clientHeight / 2 - wrapperEl.clientHeight / 2);
172
+ const topPosition = getOffsetForMiddlePosition(baseEl.clientHeight, wrapperEl.clientHeight);
85
173
  wrapperEl.style.top = `${topPosition}px`;
86
174
  wrapperAnimation.fromTo('opacity', 0.01, 1);
87
175
  break;
88
176
  default:
89
- wrapperEl.style.bottom = bottom;
177
+ wrapperEl.style.setProperty('transform', `translateY(${bottom})`);
90
178
  wrapperAnimation.fromTo('opacity', 0.01, 1);
91
179
  break;
92
180
  }
@@ -106,89 +194,265 @@ const mdLeaveAnimation = (baseEl) => {
106
194
  };
107
195
 
108
196
  /**
109
- * Calculate the CSS top and bottom position of the toast, to be used
110
- * as starting points for the animation keyframes.
111
- *
112
- * Note that MD animates bottom-positioned toasts using style.bottom,
113
- * which calculates from the bottom edge of the screen, while iOS uses
114
- * translateY, which calculates from the top edge of the screen. This
115
- * is why the bottom calculates differ slightly between modes.
116
- *
117
- * @param position The value of the toast's position prop.
118
- * @param positionAnchor The element the toast should be anchored to,
119
- * if applicable.
120
- * @param mode The toast component's mode (md, ios, etc).
121
- * @param toast A reference to the toast element itself.
197
+ * Create a gesture that allows the Toast
198
+ * to be swiped to dismiss.
199
+ * @param el - The Toast element
200
+ * @param toastPosition - The last computed position of the Toast. This is computed in the "present" method.
201
+ * @param onDismiss - A callback to fire when the Toast was swiped to dismiss.
122
202
  */
123
- function getAnimationPosition(position, positionAnchor, mode, toast) {
203
+ const createSwipeToDismissGesture = (el, toastPosition, onDismiss) => {
124
204
  /**
125
- * Start with a predefined offset from the edge the toast will be
126
- * positioned relative to, whether on the screen or anchor element.
205
+ * Users should swipe on the visible toast wrapper
206
+ * rather than on ion-toast which covers the entire screen.
207
+ * When testing the class instance the inner wrapper will not
208
+ * be defined. As a result, we use a placeholder element in those environments.
127
209
  */
128
- let offset;
129
- if (mode === 'md') {
130
- offset = 8;
131
- }
132
- else {
133
- offset = position === 'top' ? 10 : -10;
134
- }
210
+ const wrapperEl = getElementRoot(el).querySelector('.toast-wrapper');
211
+ const hostElHeight = el.clientHeight;
212
+ const wrapperElBox = wrapperEl.getBoundingClientRect();
135
213
  /**
136
- * If positionAnchor is defined, add in the distance from the target
137
- * screen edge to the target anchor edge. For position="top", the
138
- * bottom anchor edge is targeted. For position="bottom", the top
139
- * anchor edge is targeted.
214
+ * The maximum amount that
215
+ * the toast can be swiped. This should
216
+ * account for the wrapper element's height
217
+ * too so the toast can be swiped offscreen
218
+ * completely.
140
219
  */
141
- if (positionAnchor && win) {
142
- warnIfAnchorIsHidden(positionAnchor, toast);
143
- const box = positionAnchor.getBoundingClientRect();
144
- if (position === 'top') {
145
- offset += box.bottom;
220
+ let MAX_SWIPE_DISTANCE = 0;
221
+ /**
222
+ * The step value at which a toast
223
+ * is eligible for dismissing via gesture.
224
+ */
225
+ const DISMISS_THRESHOLD = 0.5;
226
+ /**
227
+ * The middle position Toast starts 50% of the way
228
+ * through the animation, so we need to use this
229
+ * as the starting point for our step values.
230
+ */
231
+ const STEP_OFFSET = el.position === 'middle' ? 0.5 : 0;
232
+ /**
233
+ * When the Toast is at the top users will be
234
+ * swiping up. As a result, the delta values will be
235
+ * negative numbers which will result in negative steps
236
+ * and thresholds. As a result, we need to make those numbers
237
+ * positive.
238
+ */
239
+ const INVERSION_FACTOR = el.position === 'top' ? -1 : 1;
240
+ /**
241
+ * The top offset that places the
242
+ * toast in the middle of the screen.
243
+ * Only needed when position="middle".
244
+ */
245
+ const topPosition = getOffsetForMiddlePosition(hostElHeight, wrapperElBox.height);
246
+ const SWIPE_UP_DOWN_KEYFRAMES = [
247
+ { offset: 0, transform: `translateY(-${topPosition + wrapperElBox.height}px)` },
248
+ { offset: 0.5, transform: `translateY(0px)` },
249
+ { offset: 1, transform: `translateY(${topPosition + wrapperElBox.height}px)` },
250
+ ];
251
+ const swipeAnimation = createAnimation('toast-swipe-to-dismiss-animation')
252
+ .addElement(wrapperEl)
253
+ /**
254
+ * The specific value here does not actually
255
+ * matter. We just need this to be a positive
256
+ * value so the animation does not jump
257
+ * to the end when the user beings to drag.
258
+ */
259
+ .duration(100);
260
+ switch (el.position) {
261
+ case 'middle':
262
+ MAX_SWIPE_DISTANCE = hostElHeight + wrapperElBox.height;
263
+ swipeAnimation.keyframes(SWIPE_UP_DOWN_KEYFRAMES);
264
+ /**
265
+ * Toast can be swiped up or down but
266
+ * should start in the middle of the screen.
267
+ */
268
+ swipeAnimation.progressStart(true, 0.5);
269
+ break;
270
+ case 'top':
271
+ /**
272
+ * The bottom edge of the wrapper
273
+ * includes the distance between the top
274
+ * of the screen and the top of the wrapper
275
+ * as well as the wrapper height so the wrapper
276
+ * can be dragged fully offscreen.
277
+ */
278
+ MAX_SWIPE_DISTANCE = wrapperElBox.bottom;
279
+ swipeAnimation.keyframes([
280
+ { offset: 0, transform: `translateY(${toastPosition.top})` },
281
+ { offset: 1, transform: 'translateY(-100%)' },
282
+ ]);
283
+ swipeAnimation.progressStart(true, 0);
284
+ break;
285
+ case 'bottom':
286
+ default:
287
+ /**
288
+ * This computes the distance between the
289
+ * top of the wrapper and the bottom of the
290
+ * screen including the height of the wrapper
291
+ * element so it can be dragged fully offscreen.
292
+ */
293
+ MAX_SWIPE_DISTANCE = hostElHeight - wrapperElBox.top;
294
+ swipeAnimation.keyframes([
295
+ { offset: 0, transform: `translateY(${toastPosition.bottom})` },
296
+ { offset: 1, transform: 'translateY(100%)' },
297
+ ]);
298
+ swipeAnimation.progressStart(true, 0);
299
+ break;
300
+ }
301
+ const computeStep = (delta) => {
302
+ return (delta * INVERSION_FACTOR) / MAX_SWIPE_DISTANCE;
303
+ };
304
+ const onMove = (detail) => {
305
+ const step = STEP_OFFSET + computeStep(detail.deltaY);
306
+ swipeAnimation.progressStep(step);
307
+ };
308
+ const onEnd = (detail) => {
309
+ const velocity = detail.velocityY;
310
+ const threshold = ((detail.deltaY + velocity * 1000) / MAX_SWIPE_DISTANCE) * INVERSION_FACTOR;
311
+ /**
312
+ * Disable the gesture for the remainder of the animation.
313
+ * It will be re-enabled if the toast animates back to
314
+ * its initial presented position.
315
+ */
316
+ gesture.enable(false);
317
+ let shouldDismiss = true;
318
+ let playTo = 1;
319
+ let step = 0;
320
+ let remainingDistance = 0;
321
+ if (el.position === 'middle') {
322
+ /**
323
+ * A middle positioned Toast appears
324
+ * in the middle of the screen (at animation offset 0.5).
325
+ * As a result, the threshold will be calculated relative
326
+ * to this starting position. In other words at animation offset 0.5
327
+ * the threshold will be 0. We want the middle Toast to be eligible
328
+ * for dismiss when the user has swiped either half way up or down the
329
+ * screen. As a result, we divide DISMISS_THRESHOLD in half. We also
330
+ * consider when the threshold is a negative in the event the
331
+ * user drags up (since the deltaY will also be negative).
332
+ */
333
+ shouldDismiss = threshold >= DISMISS_THRESHOLD / 2 || threshold <= -DISMISS_THRESHOLD / 2;
334
+ /**
335
+ * Since we are replacing the keyframes
336
+ * below the animation always starts from
337
+ * the beginning of the new keyframes.
338
+ * Similarly, we are always playing to
339
+ * the end of the new keyframes.
340
+ */
341
+ playTo = 1;
342
+ step = 0;
343
+ /**
344
+ * The Toast should animate from wherever its
345
+ * current position is to the desired end state.
346
+ *
347
+ * To begin, we get the current position of the
348
+ * Toast for its starting state.
349
+ */
350
+ const wrapperElBox = wrapperEl.getBoundingClientRect();
351
+ const startOffset = wrapperElBox.top - topPosition;
352
+ const startPosition = `${startOffset}px`;
353
+ /**
354
+ * If the deltaY is negative then the user is swiping
355
+ * up, so the Toast should animate to the top of the screen.
356
+ * If the deltaY is positive then the user is swiping
357
+ * down, so the Toast should animate to the bottom of the screen.
358
+ * We also account for when the deltaY is 0, but realistically
359
+ * that should never happen because it means the user did not drag
360
+ * the toast.
361
+ */
362
+ const offsetFactor = detail.deltaY <= 0 ? -1 : 1;
363
+ const endOffset = (topPosition + wrapperElBox.height) * offsetFactor;
364
+ /**
365
+ * If the Toast should dismiss
366
+ * then we need to figure out which edge of
367
+ * the screen it should animate towards.
368
+ * By default, the Toast will come
369
+ * back to its default state in the
370
+ * middle of the screen.
371
+ */
372
+ const endPosition = shouldDismiss ? `${endOffset}px` : '0px';
373
+ const KEYFRAMES = [
374
+ { offset: 0, transform: `translateY(${startPosition})` },
375
+ { offset: 1, transform: `translateY(${endPosition})` },
376
+ ];
377
+ swipeAnimation.keyframes(KEYFRAMES);
378
+ /**
379
+ * Compute the remaining amount of pixels the
380
+ * toast needs to move to be fully dismissed.
381
+ */
382
+ remainingDistance = endOffset - startOffset;
146
383
  }
147
- else if (position === 'bottom') {
384
+ else {
385
+ shouldDismiss = threshold >= DISMISS_THRESHOLD;
386
+ playTo = shouldDismiss ? 1 : 0;
387
+ step = computeStep(detail.deltaY);
148
388
  /**
149
- * Just box.top is the distance from the top edge of the screen
150
- * to the top edge of the anchor. We want to calculate from the
151
- * bottom edge of the screen instead.
389
+ * Compute the remaining amount of pixels the
390
+ * toast needs to move to be fully dismissed.
152
391
  */
153
- if (mode === 'md') {
154
- offset += win.innerHeight - box.top;
392
+ const remainingStepAmount = shouldDismiss ? 1 - step : step;
393
+ remainingDistance = remainingStepAmount * MAX_SWIPE_DISTANCE;
394
+ }
395
+ /**
396
+ * The animation speed should depend on how quickly
397
+ * the user flicks the toast across the screen. However,
398
+ * it should be no slower than 200ms.
399
+ * We use Math.abs on the remainingDistance because that value
400
+ * can be negative when swiping up on a middle position toast.
401
+ */
402
+ const duration = Math.min(Math.abs(remainingDistance) / Math.abs(velocity), 200);
403
+ swipeAnimation
404
+ .onFinish(() => {
405
+ if (shouldDismiss) {
406
+ onDismiss();
407
+ swipeAnimation.destroy();
155
408
  }
156
409
  else {
157
- offset -= win.innerHeight - box.top;
410
+ if (el.position === 'middle') {
411
+ /**
412
+ * If the toast snapped back to
413
+ * the middle of the screen we need
414
+ * to reset the keyframes
415
+ * so the toast can be swiped
416
+ * up or down again.
417
+ */
418
+ swipeAnimation.keyframes(SWIPE_UP_DOWN_KEYFRAMES).progressStart(true, 0.5);
419
+ }
420
+ else {
421
+ swipeAnimation.progressStart(true, 0);
422
+ }
423
+ /**
424
+ * If the toast did not dismiss then
425
+ * the user should be able to swipe again.
426
+ */
427
+ gesture.enable(true);
158
428
  }
159
- }
429
+ /**
430
+ * This must be a one time callback
431
+ * otherwise a new callback will
432
+ * be added every time onEnd runs.
433
+ */
434
+ }, { oneTimeCallback: true })
435
+ .progressEnd(playTo, step, duration);
436
+ };
437
+ const gesture = createGesture({
438
+ el: wrapperEl,
439
+ gestureName: 'toast-swipe-to-dismiss',
440
+ gesturePriority: OVERLAY_GESTURE_PRIORITY,
160
441
  /**
161
- * We don't include safe area here because that should already be
162
- * accounted for when checking the position of the anchor.
442
+ * Toast only supports vertical swipes.
443
+ * This needs to be updated if we later
444
+ * support horizontal swipes.
163
445
  */
164
- return {
165
- top: `${offset}px`,
166
- bottom: `${offset}px`,
167
- };
168
- }
169
- else {
170
- return {
171
- top: `calc(${offset}px + var(--ion-safe-area-top, 0px))`,
172
- bottom: mode === 'md'
173
- ? `calc(${offset}px + var(--ion-safe-area-bottom, 0px))`
174
- : `calc(${offset}px - var(--ion-safe-area-bottom, 0px))`,
175
- };
176
- }
177
- }
178
- /**
179
- * If the anchor element is hidden, getBoundingClientRect()
180
- * will return all 0s for it, which can cause unexpected
181
- * results in the position calculation when animating.
182
- */
183
- function warnIfAnchorIsHidden(positionAnchor, toast) {
184
- if (positionAnchor.offsetParent === null) {
185
- 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);
186
- }
187
- }
446
+ direction: 'y',
447
+ onMove,
448
+ onEnd,
449
+ });
450
+ return gesture;
451
+ };
188
452
 
189
- const toastIosCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}@supports (inset-inline-start: 0){:host{inset-inline-start:0}}@supports not (inset-inline-start: 0){:host{left:0}:host-context([dir=rtl]){left:unset;right:unset;right:0}@supports selector(:dir(rtl)){:host(:dir(rtl)){left:unset;right:unset;right:0}}}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}@supports (inset-inline-start: 0){.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}}@supports not (inset-inline-start: 0){.toast-wrapper{left:var(--start);right:var(--end)}:host-context([dir=rtl]) .toast-wrapper{left:unset;right:unset;left:var(--end);right:var(--start)}[dir=rtl] .toast-wrapper{left:unset;right:unset;left:var(--end);right:var(--start)}@supports selector(:dir(rtl)){.toast-wrapper:dir(rtl){left:unset;right:unset;left:var(--end);right:var(--start)}}}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;pointer-events:auto;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-50, #f2f2f2);--border-radius:14px;--button-color:var(--ion-color-primary, #3880ff);--color:var(--ion-color-step-850, #262626);--max-width:700px;--max-height:478px;--start:10px;--end:10px;font-size:clamp(14px, 0.875rem, 43.4px)}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;z-index:10}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){:host(.toast-translucent) .toast-wrapper{background:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}:host(.ion-color.toast-translucent) .toast-wrapper{background:rgba(var(--ion-color-base-rgb), 0.8)}}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-middle{opacity:0.01}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-content{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:15px;padding-bottom:15px}.toast-header{margin-bottom:2px;font-weight:500}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;min-height:44px;-webkit-transition:background-color, opacity 100ms linear;transition:background-color, opacity 100ms linear;border:0;background-color:transparent;font-family:var(--ion-font-family);font-size:clamp(17px, 1.0625rem, 21.998px);font-weight:500;overflow:hidden}.toast-button.ion-activated{opacity:0.4}@media (any-hover: hover){.toast-button:hover{opacity:0.6}}";
453
+ const toastIosCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}@supports (inset-inline-start: 0){:host{inset-inline-start:0}}@supports not (inset-inline-start: 0){:host{left:0}:host-context([dir=rtl]){left:unset;right:unset;right:0}@supports selector(:dir(rtl)){:host(:dir(rtl)){left:unset;right:unset;right:0}}}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}@supports (inset-inline-start: 0){.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}}@supports not (inset-inline-start: 0){.toast-wrapper{left:var(--start);right:var(--end)}:host-context([dir=rtl]) .toast-wrapper{left:unset;right:unset;left:var(--end);right:var(--start)}[dir=rtl] .toast-wrapper{left:unset;right:unset;left:var(--end);right:var(--start)}@supports selector(:dir(rtl)){.toast-wrapper:dir(rtl){left:unset;right:unset;left:var(--end);right:var(--start)}}}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;pointer-events:auto;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-50, #f2f2f2);--border-radius:14px;--button-color:var(--ion-color-primary, #3880ff);--color:var(--ion-color-step-850, #262626);--max-width:700px;--max-height:478px;--start:10px;--end:10px;font-size:clamp(14px, 0.875rem, 43.4px)}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;z-index:10}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){:host(.toast-translucent) .toast-wrapper{background:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}:host(.ion-color.toast-translucent) .toast-wrapper{background:rgba(var(--ion-color-base-rgb), 0.8)}}.toast-wrapper.toast-middle{opacity:0.01}.toast-content{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:15px;padding-bottom:15px}.toast-header{margin-bottom:2px;font-weight:500}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;min-height:44px;-webkit-transition:background-color, opacity 100ms linear;transition:background-color, opacity 100ms linear;border:0;background-color:transparent;font-family:var(--ion-font-family);font-size:clamp(17px, 1.0625rem, 21.998px);font-weight:500;overflow:hidden}.toast-button.ion-activated{opacity:0.4}@media (any-hover: hover){.toast-button:hover{opacity:0.6}}";
190
454
 
191
- const toastMdCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}@supports (inset-inline-start: 0){:host{inset-inline-start:0}}@supports not (inset-inline-start: 0){:host{left:0}:host-context([dir=rtl]){left:unset;right:unset;right:0}@supports selector(:dir(rtl)){:host(:dir(rtl)){left:unset;right:unset;right:0}}}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}@supports (inset-inline-start: 0){.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}}@supports not (inset-inline-start: 0){.toast-wrapper{left:var(--start);right:var(--end)}:host-context([dir=rtl]) .toast-wrapper{left:unset;right:unset;left:var(--end);right:var(--start)}[dir=rtl] .toast-wrapper{left:unset;right:unset;left:var(--end);right:var(--start)}@supports selector(:dir(rtl)){.toast-wrapper:dir(rtl){left:unset;right:unset;left:var(--end);right:var(--start)}}}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;pointer-events:auto;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-800, #333333);--border-radius:4px;--box-shadow:0 3px 5px -1px rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12);--button-color:var(--ion-color-primary, #3880ff);--color:var(--ion-color-step-50, #f2f2f2);--max-width:700px;--start:8px;--end:8px;font-size:0.875rem}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;opacity:0.01;z-index:10}.toast-content{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:14px;padding-bottom:14px}.toast-header{margin-bottom:2px;font-weight:500;line-height:1.25rem}.toast-message{line-height:1.25rem}.toast-layout-baseline .toast-button-group-start{-webkit-margin-start:8px;margin-inline-start:8px}.toast-layout-stacked .toast-button-group-start{-webkit-margin-end:8px;margin-inline-end:8px;margin-top:8px}.toast-layout-baseline .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px}.toast-layout-stacked .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px;margin-bottom:8px}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;position:relative;background-color:transparent;font-family:var(--ion-font-family);font-size:0.875rem;font-weight:500;letter-spacing:0.84px;text-transform:uppercase;overflow:hidden}.toast-button-cancel{color:var(--ion-color-step-100, #e6e6e6)}.toast-button-icon-only{border-radius:50%;-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px;padding-top:9px;padding-bottom:9px;width:36px;height:36px}@media (any-hover: hover){.toast-button:hover{background-color:rgba(var(--ion-color-primary-rgb, 56, 128, 255), 0.08)}.toast-button-cancel:hover{background-color:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.08)}}";
455
+ const toastMdCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}@supports (inset-inline-start: 0){:host{inset-inline-start:0}}@supports not (inset-inline-start: 0){:host{left:0}:host-context([dir=rtl]){left:unset;right:unset;right:0}@supports selector(:dir(rtl)){:host(:dir(rtl)){left:unset;right:unset;right:0}}}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}@supports (inset-inline-start: 0){.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}}@supports not (inset-inline-start: 0){.toast-wrapper{left:var(--start);right:var(--end)}:host-context([dir=rtl]) .toast-wrapper{left:unset;right:unset;left:var(--end);right:var(--start)}[dir=rtl] .toast-wrapper{left:unset;right:unset;left:var(--end);right:var(--start)}@supports selector(:dir(rtl)){.toast-wrapper:dir(rtl){left:unset;right:unset;left:var(--end);right:var(--start)}}}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;pointer-events:auto;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-800, #333333);--border-radius:4px;--box-shadow:0 3px 5px -1px rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12);--button-color:var(--ion-color-primary, #3880ff);--color:var(--ion-color-step-50, #f2f2f2);--max-width:700px;--start:8px;--end:8px;font-size:0.875rem}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;opacity:0.01;z-index:10}.toast-content{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:14px;padding-bottom:14px}.toast-header{margin-bottom:2px;font-weight:500;line-height:1.25rem}.toast-message{line-height:1.25rem}.toast-layout-baseline .toast-button-group-start{-webkit-margin-start:8px;margin-inline-start:8px}.toast-layout-stacked .toast-button-group-start{-webkit-margin-end:8px;margin-inline-end:8px;margin-top:8px}.toast-layout-baseline .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px}.toast-layout-stacked .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px;margin-bottom:8px}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;position:relative;background-color:transparent;font-family:var(--ion-font-family);font-size:0.875rem;font-weight:500;letter-spacing:0.84px;text-transform:uppercase;overflow:hidden}.toast-button-cancel{color:var(--ion-color-step-100, #e6e6e6)}.toast-button-icon-only{border-radius:50%;-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px;padding-top:9px;padding-bottom:9px;width:36px;height:36px}@media (any-hover: hover){.toast-button:hover{background-color:rgba(var(--ion-color-primary-rgb, 56, 128, 255), 0.08)}.toast-button-cancel:hover{background-color:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.08)}}";
192
456
 
193
457
  const Toast = class {
194
458
  constructor(hostRef) {
@@ -213,6 +477,41 @@ const Toast = class {
213
477
  this.callButtonHandler(cancelButton);
214
478
  }
215
479
  };
480
+ /**
481
+ * Create a new swipe gesture so Toast
482
+ * can be swiped to dismiss.
483
+ */
484
+ this.createSwipeGesture = (toastPosition) => {
485
+ const gesture = (this.gesture = createSwipeToDismissGesture(this.el, toastPosition, () => {
486
+ /**
487
+ * If the gesture completed then
488
+ * we should dismiss the toast.
489
+ */
490
+ this.dismiss(undefined, GESTURE);
491
+ }));
492
+ gesture.enable(true);
493
+ };
494
+ /**
495
+ * Destroy an existing swipe gesture
496
+ * so Toast can no longer be swiped to dismiss.
497
+ */
498
+ this.destroySwipeGesture = () => {
499
+ const { gesture } = this;
500
+ if (gesture === undefined) {
501
+ return;
502
+ }
503
+ gesture.destroy();
504
+ this.gesture = undefined;
505
+ };
506
+ /**
507
+ * Returns `true` if swipeGesture
508
+ * is configured to a value that enables the swipe behavior.
509
+ * Returns `false` otherwise.
510
+ */
511
+ this.prefersSwipeGesture = () => {
512
+ const { swipeGesture } = this;
513
+ return swipeGesture === 'vertical';
514
+ };
216
515
  this.revealContentToScreenReader = false;
217
516
  this.overlayIndex = undefined;
218
517
  this.delegate = undefined;
@@ -233,9 +532,37 @@ const Toast = class {
233
532
  this.animated = true;
234
533
  this.icon = undefined;
235
534
  this.htmlAttributes = undefined;
535
+ this.swipeGesture = undefined;
236
536
  this.isOpen = false;
237
537
  this.trigger = undefined;
238
538
  }
539
+ swipeGestureChanged() {
540
+ /**
541
+ * If the Toast is presented, then we need to destroy
542
+ * any actives gestures before a new gesture is potentially
543
+ * created below.
544
+ *
545
+ * If the Toast is dismissed, then no gesture should be available
546
+ * since the Toast is not visible. This case should never
547
+ * happen since the "dismiss" method handles destroying
548
+ * any active swipe gestures, but we keep this code
549
+ * around to handle the first case.
550
+ */
551
+ this.destroySwipeGesture();
552
+ /**
553
+ * A new swipe gesture should only be created
554
+ * if the Toast is presented. If the Toast is not
555
+ * yet presented then the "present" method will
556
+ * handle calling the swipe gesture setup function.
557
+ */
558
+ if (this.presented && this.prefersSwipeGesture()) {
559
+ /**
560
+ * If the Toast is presented then
561
+ * lastPresentedPosition is defined.
562
+ */
563
+ this.createSwipeGesture(this.lastPresentedPosition);
564
+ }
565
+ }
239
566
  onIsOpenChange(newValue, oldValue) {
240
567
  if (newValue === true && oldValue === false) {
241
568
  this.present();
@@ -307,6 +634,14 @@ const Toast = class {
307
634
  if (this.duration > 0) {
308
635
  this.durationTimeout = setTimeout(() => this.dismiss(undefined, 'timeout'), this.duration);
309
636
  }
637
+ /**
638
+ * If the Toast has a swipe gesture then we can
639
+ * create the gesture so users can swipe the
640
+ * presented Toast.
641
+ */
642
+ if (this.prefersSwipeGesture()) {
643
+ this.createSwipeGesture(animationPosition);
644
+ }
310
645
  unlock();
311
646
  }
312
647
  /**
@@ -341,6 +676,11 @@ const Toast = class {
341
676
  this.revealContentToScreenReader = false;
342
677
  }
343
678
  this.lastPresentedPosition = undefined;
679
+ /**
680
+ * If the Toast has a swipe gesture then we can
681
+ * safely destroy it now that it is dismissed.
682
+ */
683
+ this.destroySwipeGesture();
344
684
  unlock();
345
685
  return dismissed;
346
686
  }
@@ -485,6 +825,7 @@ const Toast = class {
485
825
  }
486
826
  get el() { return getElement(this); }
487
827
  static get watchers() { return {
828
+ "swipeGesture": ["swipeGestureChanged"],
488
829
  "isOpen": ["onIsOpenChange"],
489
830
  "trigger": ["triggerChanged"]
490
831
  }; }