@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
@@ -0,0 +1,267 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { Build } from "@stencil/core";
5
+ import { createAnimation } from "../../../utils/animation/animation";
6
+ import { createGesture } from "../../../utils/gesture/index";
7
+ import { getElementRoot } from "../../../utils/helpers";
8
+ import { OVERLAY_GESTURE_PRIORITY } from "../../../utils/overlays";
9
+ import { getOffsetForMiddlePosition } from "../animations/utils";
10
+ /**
11
+ * Create a gesture that allows the Toast
12
+ * to be swiped to dismiss.
13
+ * @param el - The Toast element
14
+ * @param toastPosition - The last computed position of the Toast. This is computed in the "present" method.
15
+ * @param onDismiss - A callback to fire when the Toast was swiped to dismiss.
16
+ */
17
+ export const createSwipeToDismissGesture = (el, toastPosition, onDismiss) => {
18
+ /**
19
+ * Users should swipe on the visible toast wrapper
20
+ * rather than on ion-toast which covers the entire screen.
21
+ * When testing the class instance the inner wrapper will not
22
+ * be defined. As a result, we use a placeholder element in those environments.
23
+ */
24
+ const wrapperEl = Build.isTesting
25
+ ? document.createElement('div')
26
+ : getElementRoot(el).querySelector('.toast-wrapper');
27
+ const hostElHeight = el.clientHeight;
28
+ const wrapperElBox = wrapperEl.getBoundingClientRect();
29
+ /**
30
+ * The maximum amount that
31
+ * the toast can be swiped. This should
32
+ * account for the wrapper element's height
33
+ * too so the toast can be swiped offscreen
34
+ * completely.
35
+ */
36
+ let MAX_SWIPE_DISTANCE = 0;
37
+ /**
38
+ * The step value at which a toast
39
+ * is eligible for dismissing via gesture.
40
+ */
41
+ const DISMISS_THRESHOLD = 0.5;
42
+ /**
43
+ * The middle position Toast starts 50% of the way
44
+ * through the animation, so we need to use this
45
+ * as the starting point for our step values.
46
+ */
47
+ const STEP_OFFSET = el.position === 'middle' ? 0.5 : 0;
48
+ /**
49
+ * When the Toast is at the top users will be
50
+ * swiping up. As a result, the delta values will be
51
+ * negative numbers which will result in negative steps
52
+ * and thresholds. As a result, we need to make those numbers
53
+ * positive.
54
+ */
55
+ const INVERSION_FACTOR = el.position === 'top' ? -1 : 1;
56
+ /**
57
+ * The top offset that places the
58
+ * toast in the middle of the screen.
59
+ * Only needed when position="middle".
60
+ */
61
+ const topPosition = getOffsetForMiddlePosition(hostElHeight, wrapperElBox.height);
62
+ const SWIPE_UP_DOWN_KEYFRAMES = [
63
+ { offset: 0, transform: `translateY(-${topPosition + wrapperElBox.height}px)` },
64
+ { offset: 0.5, transform: `translateY(0px)` },
65
+ { offset: 1, transform: `translateY(${topPosition + wrapperElBox.height}px)` },
66
+ ];
67
+ const swipeAnimation = createAnimation('toast-swipe-to-dismiss-animation')
68
+ .addElement(wrapperEl)
69
+ /**
70
+ * The specific value here does not actually
71
+ * matter. We just need this to be a positive
72
+ * value so the animation does not jump
73
+ * to the end when the user beings to drag.
74
+ */
75
+ .duration(100);
76
+ switch (el.position) {
77
+ case 'middle':
78
+ MAX_SWIPE_DISTANCE = hostElHeight + wrapperElBox.height;
79
+ swipeAnimation.keyframes(SWIPE_UP_DOWN_KEYFRAMES);
80
+ /**
81
+ * Toast can be swiped up or down but
82
+ * should start in the middle of the screen.
83
+ */
84
+ swipeAnimation.progressStart(true, 0.5);
85
+ break;
86
+ case 'top':
87
+ /**
88
+ * The bottom edge of the wrapper
89
+ * includes the distance between the top
90
+ * of the screen and the top of the wrapper
91
+ * as well as the wrapper height so the wrapper
92
+ * can be dragged fully offscreen.
93
+ */
94
+ MAX_SWIPE_DISTANCE = wrapperElBox.bottom;
95
+ swipeAnimation.keyframes([
96
+ { offset: 0, transform: `translateY(${toastPosition.top})` },
97
+ { offset: 1, transform: 'translateY(-100%)' },
98
+ ]);
99
+ swipeAnimation.progressStart(true, 0);
100
+ break;
101
+ case 'bottom':
102
+ default:
103
+ /**
104
+ * This computes the distance between the
105
+ * top of the wrapper and the bottom of the
106
+ * screen including the height of the wrapper
107
+ * element so it can be dragged fully offscreen.
108
+ */
109
+ MAX_SWIPE_DISTANCE = hostElHeight - wrapperElBox.top;
110
+ swipeAnimation.keyframes([
111
+ { offset: 0, transform: `translateY(${toastPosition.bottom})` },
112
+ { offset: 1, transform: 'translateY(100%)' },
113
+ ]);
114
+ swipeAnimation.progressStart(true, 0);
115
+ break;
116
+ }
117
+ const computeStep = (delta) => {
118
+ return (delta * INVERSION_FACTOR) / MAX_SWIPE_DISTANCE;
119
+ };
120
+ const onMove = (detail) => {
121
+ const step = STEP_OFFSET + computeStep(detail.deltaY);
122
+ swipeAnimation.progressStep(step);
123
+ };
124
+ const onEnd = (detail) => {
125
+ const velocity = detail.velocityY;
126
+ const threshold = ((detail.deltaY + velocity * 1000) / MAX_SWIPE_DISTANCE) * INVERSION_FACTOR;
127
+ /**
128
+ * Disable the gesture for the remainder of the animation.
129
+ * It will be re-enabled if the toast animates back to
130
+ * its initial presented position.
131
+ */
132
+ gesture.enable(false);
133
+ let shouldDismiss = true;
134
+ let playTo = 1;
135
+ let step = 0;
136
+ let remainingDistance = 0;
137
+ if (el.position === 'middle') {
138
+ /**
139
+ * A middle positioned Toast appears
140
+ * in the middle of the screen (at animation offset 0.5).
141
+ * As a result, the threshold will be calculated relative
142
+ * to this starting position. In other words at animation offset 0.5
143
+ * the threshold will be 0. We want the middle Toast to be eligible
144
+ * for dismiss when the user has swiped either half way up or down the
145
+ * screen. As a result, we divide DISMISS_THRESHOLD in half. We also
146
+ * consider when the threshold is a negative in the event the
147
+ * user drags up (since the deltaY will also be negative).
148
+ */
149
+ shouldDismiss = threshold >= DISMISS_THRESHOLD / 2 || threshold <= -DISMISS_THRESHOLD / 2;
150
+ /**
151
+ * Since we are replacing the keyframes
152
+ * below the animation always starts from
153
+ * the beginning of the new keyframes.
154
+ * Similarly, we are always playing to
155
+ * the end of the new keyframes.
156
+ */
157
+ playTo = 1;
158
+ step = 0;
159
+ /**
160
+ * The Toast should animate from wherever its
161
+ * current position is to the desired end state.
162
+ *
163
+ * To begin, we get the current position of the
164
+ * Toast for its starting state.
165
+ */
166
+ const wrapperElBox = wrapperEl.getBoundingClientRect();
167
+ const startOffset = wrapperElBox.top - topPosition;
168
+ const startPosition = `${startOffset}px`;
169
+ /**
170
+ * If the deltaY is negative then the user is swiping
171
+ * up, so the Toast should animate to the top of the screen.
172
+ * If the deltaY is positive then the user is swiping
173
+ * down, so the Toast should animate to the bottom of the screen.
174
+ * We also account for when the deltaY is 0, but realistically
175
+ * that should never happen because it means the user did not drag
176
+ * the toast.
177
+ */
178
+ const offsetFactor = detail.deltaY <= 0 ? -1 : 1;
179
+ const endOffset = (topPosition + wrapperElBox.height) * offsetFactor;
180
+ /**
181
+ * If the Toast should dismiss
182
+ * then we need to figure out which edge of
183
+ * the screen it should animate towards.
184
+ * By default, the Toast will come
185
+ * back to its default state in the
186
+ * middle of the screen.
187
+ */
188
+ const endPosition = shouldDismiss ? `${endOffset}px` : '0px';
189
+ const KEYFRAMES = [
190
+ { offset: 0, transform: `translateY(${startPosition})` },
191
+ { offset: 1, transform: `translateY(${endPosition})` },
192
+ ];
193
+ swipeAnimation.keyframes(KEYFRAMES);
194
+ /**
195
+ * Compute the remaining amount of pixels the
196
+ * toast needs to move to be fully dismissed.
197
+ */
198
+ remainingDistance = endOffset - startOffset;
199
+ }
200
+ else {
201
+ shouldDismiss = threshold >= DISMISS_THRESHOLD;
202
+ playTo = shouldDismiss ? 1 : 0;
203
+ step = computeStep(detail.deltaY);
204
+ /**
205
+ * Compute the remaining amount of pixels the
206
+ * toast needs to move to be fully dismissed.
207
+ */
208
+ const remainingStepAmount = shouldDismiss ? 1 - step : step;
209
+ remainingDistance = remainingStepAmount * MAX_SWIPE_DISTANCE;
210
+ }
211
+ /**
212
+ * The animation speed should depend on how quickly
213
+ * the user flicks the toast across the screen. However,
214
+ * it should be no slower than 200ms.
215
+ * We use Math.abs on the remainingDistance because that value
216
+ * can be negative when swiping up on a middle position toast.
217
+ */
218
+ const duration = Math.min(Math.abs(remainingDistance) / Math.abs(velocity), 200);
219
+ swipeAnimation
220
+ .onFinish(() => {
221
+ if (shouldDismiss) {
222
+ onDismiss();
223
+ swipeAnimation.destroy();
224
+ }
225
+ else {
226
+ if (el.position === 'middle') {
227
+ /**
228
+ * If the toast snapped back to
229
+ * the middle of the screen we need
230
+ * to reset the keyframes
231
+ * so the toast can be swiped
232
+ * up or down again.
233
+ */
234
+ swipeAnimation.keyframes(SWIPE_UP_DOWN_KEYFRAMES).progressStart(true, 0.5);
235
+ }
236
+ else {
237
+ swipeAnimation.progressStart(true, 0);
238
+ }
239
+ /**
240
+ * If the toast did not dismiss then
241
+ * the user should be able to swipe again.
242
+ */
243
+ gesture.enable(true);
244
+ }
245
+ /**
246
+ * This must be a one time callback
247
+ * otherwise a new callback will
248
+ * be added every time onEnd runs.
249
+ */
250
+ }, { oneTimeCallback: true })
251
+ .progressEnd(playTo, step, duration);
252
+ };
253
+ const gesture = createGesture({
254
+ el: wrapperEl,
255
+ gestureName: 'toast-swipe-to-dismiss',
256
+ gesturePriority: OVERLAY_GESTURE_PRIORITY,
257
+ /**
258
+ * Toast only supports vertical swipes.
259
+ * This needs to be updated if we later
260
+ * support horizontal swipes.
261
+ */
262
+ direction: 'y',
263
+ onMove,
264
+ onEnd,
265
+ });
266
+ return gesture;
267
+ };
@@ -0,0 +1,84 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { configs, test, dragElementBy } from "../../../../utils/test/playwright/index";
5
+ /**
6
+ * This behavior does not vary across modes and directions.
7
+ */
8
+ configs({ directions: ['ltr'], modes: ['ios'] }).forEach(({ title, config }) => {
9
+ test.describe(title('toast: swipe gesture with top position'), () => {
10
+ test.beforeEach(async ({ page }) => {
11
+ await page.goto('src/components/toast/test/swipe-gesture', config);
12
+ });
13
+ test('should swipe up to dismiss', async ({ page }) => {
14
+ const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
15
+ const ionToastDidDismiss = await page.spyOnEvent('ionToastDidDismiss');
16
+ const presentButton = page.locator('#top');
17
+ await presentButton.click();
18
+ await ionToastDidPresent.next();
19
+ const toastWrapper = page.locator('ion-toast#top-toast .toast-wrapper');
20
+ await dragElementBy(toastWrapper, page, 0, -30);
21
+ await ionToastDidDismiss.next();
22
+ });
23
+ test('should swipe up to dismiss with anchor', async ({ page }) => {
24
+ const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
25
+ const ionToastDidDismiss = await page.spyOnEvent('ionToastDidDismiss');
26
+ const presentButton = page.locator('#top-anchor');
27
+ await presentButton.click();
28
+ await ionToastDidPresent.next();
29
+ const toastWrapper = page.locator('ion-toast#top-anchor-toast .toast-wrapper');
30
+ await dragElementBy(toastWrapper, page, 0, -30);
31
+ await ionToastDidDismiss.next();
32
+ });
33
+ });
34
+ test.describe(title('toast: swipe gesture with bottom position'), () => {
35
+ test.beforeEach(async ({ page }) => {
36
+ await page.goto('src/components/toast/test/swipe-gesture', config);
37
+ });
38
+ test('should swipe down to dismiss', async ({ page }) => {
39
+ const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
40
+ const ionToastDidDismiss = await page.spyOnEvent('ionToastDidDismiss');
41
+ const presentButton = page.locator('#bottom');
42
+ await presentButton.click();
43
+ await ionToastDidPresent.next();
44
+ const toastWrapper = page.locator('ion-toast#bottom-toast .toast-wrapper');
45
+ await dragElementBy(toastWrapper, page, 0, 30);
46
+ await ionToastDidDismiss.next();
47
+ });
48
+ test('should swipe down to dismiss with anchor', async ({ page }) => {
49
+ const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
50
+ const ionToastDidDismiss = await page.spyOnEvent('ionToastDidDismiss');
51
+ const presentButton = page.locator('#bottom-anchor');
52
+ await presentButton.click();
53
+ await ionToastDidPresent.next();
54
+ const toastWrapper = page.locator('ion-toast#bottom-anchor-toast .toast-wrapper');
55
+ await dragElementBy(toastWrapper, page, 0, 30);
56
+ await ionToastDidDismiss.next();
57
+ });
58
+ });
59
+ test.describe(title('toast: swipe gesture with middle position'), () => {
60
+ test.beforeEach(async ({ page }) => {
61
+ await page.goto('src/components/toast/test/swipe-gesture', config);
62
+ });
63
+ test('should swipe down to dismiss', async ({ page }) => {
64
+ const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
65
+ const ionToastDidDismiss = await page.spyOnEvent('ionToastDidDismiss');
66
+ const presentButton = page.locator('#middle');
67
+ await presentButton.click();
68
+ await ionToastDidPresent.next();
69
+ const toastWrapper = page.locator('ion-toast#middle-toast .toast-wrapper');
70
+ await dragElementBy(toastWrapper, page, 0, 100);
71
+ await ionToastDidDismiss.next();
72
+ });
73
+ test('should swipe up to dismiss', async ({ page }) => {
74
+ const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
75
+ const ionToastDidDismiss = await page.spyOnEvent('ionToastDidDismiss');
76
+ const presentButton = page.locator('#middle');
77
+ await presentButton.click();
78
+ await ionToastDidPresent.next();
79
+ const toastWrapper = page.locator('ion-toast#middle-toast .toast-wrapper');
80
+ await dragElementBy(toastWrapper, page, 0, -100);
81
+ await ionToastDidDismiss.next();
82
+ });
83
+ });
84
+ });
@@ -0,0 +1,25 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { newSpecPage } from "@stencil/core/testing";
5
+ import { Toast } from "../toast";
6
+ import { config } from "../../../global/config";
7
+ describe('toast: duration config', () => {
8
+ it('should have duration set to 0', async () => {
9
+ const page = await newSpecPage({
10
+ components: [Toast],
11
+ html: `<ion-toast></ion-toast>`,
12
+ });
13
+ const toast = page.body.querySelector('ion-toast');
14
+ expect(toast.duration).toBe(0);
15
+ });
16
+ it('should have duration set to 5000', async () => {
17
+ config.reset({ toastDuration: 5000 });
18
+ const page = await newSpecPage({
19
+ components: [Toast],
20
+ html: `<ion-toast></ion-toast>`,
21
+ });
22
+ const toast = page.body.querySelector('ion-toast');
23
+ expect(toast.duration).toBe(5000);
24
+ });
25
+ });
@@ -4,6 +4,7 @@
4
4
  import { h } from "@stencil/core";
5
5
  import { newSpecPage } from "@stencil/core/testing";
6
6
  import { config } from "../../../global/config";
7
+ import { createAnimation } from "../../../utils/animation/animation";
7
8
  import { Toast } from "../toast";
8
9
  describe('toast: custom html', () => {
9
10
  it('should not allow for custom html by default', async () => {
@@ -118,3 +119,82 @@ describe('toast: button cancel', () => {
118
119
  expect(buttonCancel.getAttribute('part')).toBe('button cancel');
119
120
  });
120
121
  });
122
+ describe('toast: swipe gesture', () => {
123
+ describe('prefersSwipeGesture()', () => {
124
+ let toast;
125
+ beforeEach(() => {
126
+ toast = new Toast();
127
+ });
128
+ it('should return true if set to a valid swipe value', () => {
129
+ toast.swipeGesture = 'vertical';
130
+ expect(toast.prefersSwipeGesture()).toBe(true);
131
+ });
132
+ it('should return false if set to undefined', () => {
133
+ toast.swipeGesture = undefined;
134
+ expect(toast.prefersSwipeGesture()).toBe(false);
135
+ });
136
+ it('should return false if set to null', () => {
137
+ toast.swipeGesture = null;
138
+ expect(toast.prefersSwipeGesture()).toBe(false);
139
+ });
140
+ it('should return false if set to invalid string', () => {
141
+ toast.swipeGesture = 'limit'; // `'limit'` doesn't exist
142
+ expect(toast.prefersSwipeGesture()).toBe(false);
143
+ });
144
+ });
145
+ describe('swipeGesture property', () => {
146
+ let toast;
147
+ beforeEach(() => {
148
+ toast = new Toast();
149
+ // Stub the enter animation so we aren't querying elements in the DOM that may not exist
150
+ toast.enterAnimation = () => createAnimation();
151
+ });
152
+ it('should not create a swipe gesture on present if swipeGesture is undefined', async () => {
153
+ expect(toast.gesture).toBe(undefined);
154
+ await toast.present();
155
+ expect(toast.gesture).toBe(undefined);
156
+ });
157
+ it('should create a swipe gesture on present', async () => {
158
+ toast.swipeGesture = 'vertical';
159
+ expect(toast.gesture).toBe(undefined);
160
+ await toast.present();
161
+ expect(toast.gesture).not.toBe(undefined);
162
+ });
163
+ it('should destroy a swipe gesture on dismiss', async () => {
164
+ toast.swipeGesture = 'vertical';
165
+ await toast.present();
166
+ expect(toast.gesture).not.toBe(undefined);
167
+ await toast.dismiss();
168
+ expect(toast.gesture).toBe(undefined);
169
+ });
170
+ it('should create a swipe gesture if swipeGesture is set after present', async () => {
171
+ await toast.present();
172
+ expect(toast.gesture).toBe(undefined);
173
+ /**
174
+ * Manually invoke the watch
175
+ * callback synchronously.
176
+ */
177
+ toast.swipeGesture = 'vertical';
178
+ toast.swipeGestureChanged();
179
+ expect(toast.gesture).not.toBe(undefined);
180
+ });
181
+ it('should destroy a swipe gesture if swipeGesture is cleared after present', async () => {
182
+ toast.swipeGesture = 'vertical';
183
+ await toast.present();
184
+ expect(toast.gesture).not.toBe(undefined);
185
+ /**
186
+ * Manually invoke the watch
187
+ * callback synchronously.
188
+ */
189
+ toast.swipeGesture = undefined;
190
+ toast.swipeGestureChanged();
191
+ expect(toast.gesture).toBe(undefined);
192
+ });
193
+ it('should not create a swipe gesture if the toast is not presented', async () => {
194
+ expect(toast.gesture).toBe(undefined);
195
+ toast.swipeGesture = 'vertical';
196
+ toast.swipeGestureChanged();
197
+ expect(toast.gesture).toBe(undefined);
198
+ });
199
+ });
200
+ });
@@ -189,6 +189,16 @@
189
189
  }
190
190
  }
191
191
 
192
+ .toast-wrapper.toast-top {
193
+ transform: translate3d(0, -100%, 0);
194
+ top: 0;
195
+ }
196
+
197
+ .toast-wrapper.toast-bottom {
198
+ transform: translate3d(0, 100%, 0);
199
+ bottom: 0;
200
+ }
201
+
192
202
  .toast-container {
193
203
  display: flex;
194
204
  align-items: center;
@@ -343,20 +353,10 @@
343
353
  background: rgba(var(--ion-color-base-rgb), 0.8);
344
354
  }
345
355
  }
346
- .toast-wrapper.toast-top {
347
- transform: translate3d(0, -100%, 0);
348
- top: 0;
349
- }
350
-
351
356
  .toast-wrapper.toast-middle {
352
357
  opacity: 0.01;
353
358
  }
354
359
 
355
- .toast-wrapper.toast-bottom {
356
- transform: translate3d(0, 100%, 0);
357
- bottom: 0;
358
- }
359
-
360
360
  .toast-content {
361
361
  -webkit-padding-start: 15px;
362
362
  padding-inline-start: 15px;
@@ -6,7 +6,7 @@ import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
6
6
  import { raf } from "../../utils/helpers";
7
7
  import { createLockController } from "../../utils/lock-controller";
8
8
  import { printIonWarning } from "../../utils/logging/index";
9
- import { createDelegateController, createTriggerController, dismiss, eventMethod, isCancel, prepareOverlay, present, safeCall, setOverlayId, } from "../../utils/overlays";
9
+ import { GESTURE, createDelegateController, createTriggerController, dismiss, eventMethod, isCancel, prepareOverlay, present, safeCall, setOverlayId, } from "../../utils/overlays";
10
10
  import { sanitizeDOMString } from "../../utils/sanitization/index";
11
11
  import { createColorClasses, getClassMap } from "../../utils/theme";
12
12
  import { config } from "../../global/config";
@@ -16,6 +16,7 @@ import { iosLeaveAnimation } from "./animations/ios.leave";
16
16
  import { mdEnterAnimation } from "./animations/md.enter";
17
17
  import { mdLeaveAnimation } from "./animations/md.leave";
18
18
  import { getAnimationPosition } from "./animations/utils";
19
+ import { createSwipeToDismissGesture } from "./gestures/swipe-to-dismiss";
19
20
  // TODO(FW-2832): types
20
21
  /**
21
22
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
@@ -41,6 +42,41 @@ export class Toast {
41
42
  this.callButtonHandler(cancelButton);
42
43
  }
43
44
  };
45
+ /**
46
+ * Create a new swipe gesture so Toast
47
+ * can be swiped to dismiss.
48
+ */
49
+ this.createSwipeGesture = (toastPosition) => {
50
+ const gesture = (this.gesture = createSwipeToDismissGesture(this.el, toastPosition, () => {
51
+ /**
52
+ * If the gesture completed then
53
+ * we should dismiss the toast.
54
+ */
55
+ this.dismiss(undefined, GESTURE);
56
+ }));
57
+ gesture.enable(true);
58
+ };
59
+ /**
60
+ * Destroy an existing swipe gesture
61
+ * so Toast can no longer be swiped to dismiss.
62
+ */
63
+ this.destroySwipeGesture = () => {
64
+ const { gesture } = this;
65
+ if (gesture === undefined) {
66
+ return;
67
+ }
68
+ gesture.destroy();
69
+ this.gesture = undefined;
70
+ };
71
+ /**
72
+ * Returns `true` if swipeGesture
73
+ * is configured to a value that enables the swipe behavior.
74
+ * Returns `false` otherwise.
75
+ */
76
+ this.prefersSwipeGesture = () => {
77
+ const { swipeGesture } = this;
78
+ return swipeGesture === 'vertical';
79
+ };
44
80
  this.revealContentToScreenReader = false;
45
81
  this.overlayIndex = undefined;
46
82
  this.delegate = undefined;
@@ -61,9 +97,37 @@ export class Toast {
61
97
  this.animated = true;
62
98
  this.icon = undefined;
63
99
  this.htmlAttributes = undefined;
100
+ this.swipeGesture = undefined;
64
101
  this.isOpen = false;
65
102
  this.trigger = undefined;
66
103
  }
104
+ swipeGestureChanged() {
105
+ /**
106
+ * If the Toast is presented, then we need to destroy
107
+ * any actives gestures before a new gesture is potentially
108
+ * created below.
109
+ *
110
+ * If the Toast is dismissed, then no gesture should be available
111
+ * since the Toast is not visible. This case should never
112
+ * happen since the "dismiss" method handles destroying
113
+ * any active swipe gestures, but we keep this code
114
+ * around to handle the first case.
115
+ */
116
+ this.destroySwipeGesture();
117
+ /**
118
+ * A new swipe gesture should only be created
119
+ * if the Toast is presented. If the Toast is not
120
+ * yet presented then the "present" method will
121
+ * handle calling the swipe gesture setup function.
122
+ */
123
+ if (this.presented && this.prefersSwipeGesture()) {
124
+ /**
125
+ * If the Toast is presented then
126
+ * lastPresentedPosition is defined.
127
+ */
128
+ this.createSwipeGesture(this.lastPresentedPosition);
129
+ }
130
+ }
67
131
  onIsOpenChange(newValue, oldValue) {
68
132
  if (newValue === true && oldValue === false) {
69
133
  this.present();
@@ -135,6 +199,14 @@ export class Toast {
135
199
  if (this.duration > 0) {
136
200
  this.durationTimeout = setTimeout(() => this.dismiss(undefined, 'timeout'), this.duration);
137
201
  }
202
+ /**
203
+ * If the Toast has a swipe gesture then we can
204
+ * create the gesture so users can swipe the
205
+ * presented Toast.
206
+ */
207
+ if (this.prefersSwipeGesture()) {
208
+ this.createSwipeGesture(animationPosition);
209
+ }
138
210
  unlock();
139
211
  }
140
212
  /**
@@ -169,6 +241,11 @@ export class Toast {
169
241
  this.revealContentToScreenReader = false;
170
242
  }
171
243
  this.lastPresentedPosition = undefined;
244
+ /**
245
+ * If the Toast has a swipe gesture then we can
246
+ * safely destroy it now that it is dismissed.
247
+ */
248
+ this.destroySwipeGesture();
172
249
  unlock();
173
250
  return dismissed;
174
251
  }
@@ -709,6 +786,29 @@ export class Toast {
709
786
  "text": "Additional attributes to pass to the toast."
710
787
  }
711
788
  },
789
+ "swipeGesture": {
790
+ "type": "string",
791
+ "mutable": false,
792
+ "complexType": {
793
+ "original": "ToastSwipeGestureDirection",
794
+ "resolved": "\"vertical\" | undefined",
795
+ "references": {
796
+ "ToastSwipeGestureDirection": {
797
+ "location": "import",
798
+ "path": "./toast-interface",
799
+ "id": "src/components/toast/toast-interface.ts::ToastSwipeGestureDirection"
800
+ }
801
+ }
802
+ },
803
+ "required": false,
804
+ "optional": true,
805
+ "docs": {
806
+ "tags": [],
807
+ "text": "If set to 'vertical', the Toast can be dismissed with\na swipe gesture. The swipe direction is determined by\nthe value of the `position` property:\n`top`: The Toast can be swiped up to dismiss.\n`bottom`: The Toast can be swiped down to dismiss.\n`middle`: The Toast can be swiped up or down to dismiss."
808
+ },
809
+ "attribute": "swipe-gesture",
810
+ "reflect": false
811
+ },
712
812
  "isOpen": {
713
813
  "type": "boolean",
714
814
  "mutable": false,
@@ -1019,6 +1119,9 @@ export class Toast {
1019
1119
  static get elementRef() { return "el"; }
1020
1120
  static get watchers() {
1021
1121
  return [{
1122
+ "propName": "swipeGesture",
1123
+ "methodName": "swipeGestureChanged"
1124
+ }, {
1022
1125
  "propName": "isOpen",
1023
1126
  "methodName": "onIsOpenChange"
1024
1127
  }, {
@@ -189,6 +189,16 @@
189
189
  }
190
190
  }
191
191
 
192
+ .toast-wrapper.toast-top {
193
+ transform: translate3d(0, -100%, 0);
194
+ top: 0;
195
+ }
196
+
197
+ .toast-wrapper.toast-bottom {
198
+ transform: translate3d(0, 100%, 0);
199
+ bottom: 0;
200
+ }
201
+
192
202
  .toast-container {
193
203
  display: flex;
194
204
  align-items: center;