@ionic/core 7.5.7-dev.11701270755.14f050ad → 7.5.7-dev.11701274462.156e6f06

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 (512) hide show
  1. package/components/animation.js +12 -11
  2. package/components/backdrop.js +12 -0
  3. package/components/checkbox.js +2 -0
  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 +61 -28
  12. package/components/ion-input.js +31 -8
  13. package/components/ion-modal.js +2 -2
  14. package/components/ion-picker-column-internal.d.ts +11 -0
  15. package/components/ion-picker-column-internal.js +9 -0
  16. package/components/ion-picker-column.js +2 -2
  17. package/components/{ion-picker-legacy.d.ts → ion-picker-internal.d.ts} +4 -4
  18. package/components/ion-picker-internal.js +9 -0
  19. package/components/ion-picker.js +299 -1
  20. package/components/ion-range.js +2 -0
  21. package/components/ion-select.js +44 -29
  22. package/components/ion-skeleton-text.js +14 -1
  23. package/components/ion-textarea.js +30 -7
  24. package/components/ion-toast.js +419 -74
  25. package/components/ion-toggle.js +2 -0
  26. package/components/item.js +2 -2
  27. package/components/label.js +2 -2
  28. package/components/overlays.js +6 -12
  29. package/components/picker-column-internal.js +390 -0
  30. package/components/picker-column.js +320 -331
  31. package/components/{picker.js → picker-internal.js} +16 -16
  32. package/components/radio-group.js +2 -0
  33. package/components/radio.js +42 -2
  34. package/dist/cjs/{animation-1083855c.js → animation-d101aa7a.js} +13 -12
  35. package/dist/cjs/{button-active-cd07b55b.js → button-active-ba107e4e.js} +2 -2
  36. package/dist/cjs/{capacitor-2ffba62a.js → capacitor-f68447d3.js} +1 -1
  37. package/dist/cjs/compare-with-utils-c0444525.js +44 -0
  38. package/dist/cjs/{data-4845b494.js → data-c8d21093.js} +1 -1
  39. package/dist/cjs/{gesture-controller-d6a3f907.js → gesture-controller-b46721be.js} +0 -1
  40. package/dist/cjs/{haptic-678abc9f.js → haptic-a74c2767.js} +1 -1
  41. package/dist/cjs/{index-0f8b33f8.js → index-0ee995e4.js} +1 -1
  42. package/dist/cjs/{index-d7561763.js → index-4f0c67e1.js} +11 -13
  43. package/dist/cjs/{index-573877f3.js → index-56d41f51.js} +2 -2
  44. package/dist/cjs/index-c8d52405.js +10 -0
  45. package/dist/cjs/{index-9f379eaa.js → index-e9634bc9.js} +1 -1
  46. package/dist/cjs/index.cjs.js +10 -10
  47. package/dist/cjs/{input-shims-b0a75a01.js → input-shims-3e3f35b9.js} +15 -10
  48. package/dist/cjs/{input.utils-0fe3097c.js → input.utils-bdb6953c.js} +4 -3
  49. package/dist/cjs/ion-action-sheet.cjs.entry.js +8 -8
  50. package/dist/cjs/ion-alert.cjs.entry.js +8 -8
  51. package/dist/cjs/ion-app_8.cjs.entry.js +10 -10
  52. package/dist/cjs/ion-backdrop.cjs.entry.js +12 -0
  53. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -0
  54. package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
  55. package/dist/cjs/ion-datetime_3.cjs.entry.js +43 -30
  56. package/dist/cjs/ion-input.cjs.entry.js +34 -11
  57. package/dist/cjs/ion-item-option_3.cjs.entry.js +1 -1
  58. package/dist/cjs/ion-item_8.cjs.entry.js +17 -4
  59. package/dist/cjs/ion-loading.cjs.entry.js +3 -4
  60. package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
  61. package/dist/cjs/ion-modal.cjs.entry.js +10 -10
  62. package/dist/cjs/ion-nav_2.cjs.entry.js +2 -2
  63. package/dist/cjs/{ion-picker-column.cjs.entry.js → ion-picker-column-internal.cjs.entry.js} +12 -12
  64. package/dist/cjs/{ion-picker.cjs.entry.js → ion-picker-internal.cjs.entry.js} +13 -13
  65. package/dist/cjs/ion-popover.cjs.entry.js +4 -5
  66. package/dist/cjs/ion-radio_2.cjs.entry.js +6 -1
  67. package/dist/cjs/ion-range.cjs.entry.js +3 -1
  68. package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -7
  69. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  70. package/dist/cjs/ion-segment_2.cjs.entry.js +1 -1
  71. package/dist/cjs/ion-select_3.cjs.entry.js +51 -36
  72. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
  73. package/dist/cjs/ion-textarea.cjs.entry.js +33 -10
  74. package/dist/cjs/ion-toast.cjs.entry.js +434 -93
  75. package/dist/cjs/ion-toggle.cjs.entry.js +6 -4
  76. package/dist/cjs/ionic.cjs.js +1 -1
  77. package/dist/cjs/{ios.transition-ac909bc8.js → ios.transition-f4caf640.js} +3 -3
  78. package/dist/cjs/{keyboard-fd7db491.js → keyboard-43df0428.js} +1 -1
  79. package/dist/cjs/{keyboard-38f2bb7b.js → keyboard-840107b3.js} +3 -3
  80. package/dist/cjs/{keyboard-controller-50beb83a.js → keyboard-controller-019f42df.js} +2 -2
  81. package/dist/cjs/loader.cjs.js +1 -1
  82. package/dist/cjs/{md.transition-907af519.js → md.transition-33331e93.js} +3 -3
  83. package/dist/cjs/{notch-controller-f4f6af5d.js → notch-controller-c22d1344.js} +1 -1
  84. package/dist/cjs/{overlays-dbb71984.js → overlays-4d8897dc.js} +7 -12
  85. package/dist/cjs/{swipe-back-a6dc6e5d.js → swipe-back-d0412fb6.js} +2 -2
  86. package/dist/collection/collection-manifest.json +6 -7
  87. package/dist/collection/components/backdrop/backdrop.js +12 -0
  88. package/dist/collection/components/checkbox/checkbox.js +2 -0
  89. package/dist/collection/components/content/content.css +4 -0
  90. package/dist/collection/components/datetime/datetime.ios.css +26 -84
  91. package/dist/collection/components/datetime/datetime.js +29 -14
  92. package/dist/collection/components/datetime/datetime.md.css +26 -89
  93. package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +1 -1
  94. package/dist/collection/components/datetime/test/a11y/datetime.spec.js +9 -6
  95. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +0 -10
  96. package/dist/collection/components/datetime/test/disabled/datetime.spec.js +4 -4
  97. package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +5 -5
  98. package/dist/collection/components/datetime/test/month-year-picker/datetime.e2e.js +1 -1
  99. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +2 -2
  100. package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +1 -1
  101. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +2 -2
  102. package/dist/collection/components/datetime/test/values/datetime.e2e.js +5 -5
  103. package/dist/collection/components/datetime/utils/data.js +1 -1
  104. package/dist/collection/components/input/input.ios.css +10 -3
  105. package/dist/collection/components/input/input.js +31 -6
  106. package/dist/collection/components/input/input.md.css +13 -12
  107. package/dist/collection/components/input/test/slot/input.e2e.js +51 -0
  108. package/dist/collection/components/item/item.ios.css +26 -3
  109. package/dist/collection/components/item/item.md.css +26 -3
  110. package/dist/collection/components/item/test/basic/item.e2e.js +1 -1
  111. package/dist/collection/components/item/test/disabled/item.e2e.js +0 -1
  112. package/dist/collection/components/label/label.ios.css +14 -3
  113. package/dist/collection/components/label/label.md.css +14 -3
  114. package/dist/collection/components/modal/gestures/swipe-to-close.js +2 -1
  115. package/dist/collection/components/note/test/a11y/note.e2e.js +43 -0
  116. package/dist/collection/components/picker/picker.ios.css +205 -100
  117. package/dist/collection/components/picker/picker.js +735 -463
  118. package/dist/collection/components/picker/picker.md.css +194 -98
  119. package/dist/collection/components/picker/test/basic/picker.e2e.js +13 -106
  120. package/dist/collection/components/{picker-legacy → picker}/test/is-open/picker.e2e.js +4 -4
  121. package/dist/collection/components/{picker-legacy → picker}/test/picker-id.spec.js +5 -5
  122. package/dist/collection/components/{picker-legacy → picker}/test/trigger/picker.e2e.js +1 -1
  123. package/dist/collection/components/picker-column/picker-column.ios.css +176 -59
  124. package/dist/collection/components/picker-column/picker-column.js +333 -478
  125. package/dist/collection/components/picker-column/picker-column.md.css +113 -63
  126. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-aria.spec.js +3 -3
  127. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-dynamic.spec.js +2 -2
  128. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column.spec.js +2 -2
  129. package/dist/collection/components/{picker-legacy-column → picker-column}/test/standalone/picker-column.e2e.js +3 -3
  130. package/dist/collection/components/picker-column-internal/picker-column-internal.ios.css +138 -0
  131. package/dist/collection/components/picker-column-internal/picker-column-internal.js +565 -0
  132. package/dist/collection/components/{picker-legacy-column/picker-column.md.css → picker-column-internal/picker-column-internal.md.css} +63 -113
  133. package/dist/collection/components/{picker-column/test/basic/picker-column.e2e.js → picker-column-internal/test/basic/picker-column-internal.e2e.js} +7 -7
  134. package/dist/collection/components/{picker-column/test/disabled/picker-column.e2e.js → picker-column-internal/test/disabled/picker-column-internal.e2e.js} +39 -39
  135. package/dist/collection/components/{picker-legacy/picker.md.css → picker-internal/picker-internal.ios.css} +100 -192
  136. package/dist/collection/components/picker-internal/picker-internal.js +544 -0
  137. package/dist/collection/components/{picker-legacy-column/picker-column.ios.css → picker-internal/picker-internal.md.css} +101 -98
  138. package/dist/collection/components/{picker/test/a11y/picker.e2e.js → picker-internal/test/a11y/picker-internal.e2e.js} +2 -2
  139. package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +118 -0
  140. package/dist/collection/components/{picker/test/keyboard-entry/picker.e2e.js → picker-internal/test/keyboard-entry/picker-internal.e2e.js} +20 -20
  141. package/dist/collection/components/radio/radio.js +5 -2
  142. package/dist/collection/components/radio-group/radio-group.js +24 -0
  143. package/dist/collection/components/radio-group/test/radio-group.spec.js +69 -0
  144. package/dist/collection/components/range/range.js +2 -0
  145. package/dist/collection/components/select/select.ios.css +61 -7
  146. package/dist/collection/components/select/select.js +45 -28
  147. package/dist/collection/components/select/select.md.css +64 -19
  148. package/dist/collection/components/select/test/item/select.e2e.js +13 -0
  149. package/dist/collection/components/select/test/label/select.e2e.js +1 -1
  150. package/dist/collection/components/select/test/legacy/wrapping/select.e2e.js +1 -1
  151. package/dist/collection/components/select/test/slot/select.e2e.js +67 -0
  152. package/dist/collection/components/skeleton-text/skeleton-text.js +39 -0
  153. package/dist/collection/components/textarea/test/slot/textarea.e2e.js +51 -0
  154. package/dist/collection/components/textarea/textarea.ios.css +37 -5
  155. package/dist/collection/components/textarea/textarea.js +30 -5
  156. package/dist/collection/components/textarea/textarea.md.css +47 -14
  157. package/dist/collection/components/toast/animations/ios.enter.js +2 -1
  158. package/dist/collection/components/toast/animations/md.enter.js +4 -3
  159. package/dist/collection/components/toast/animations/utils.js +20 -14
  160. package/dist/collection/components/toast/gestures/swipe-to-dismiss.js +267 -0
  161. package/dist/collection/components/toast/test/swipe-gesture/toast.e2e.js +84 -0
  162. package/dist/collection/components/toast/test/toast-config.spec.js +25 -0
  163. package/dist/collection/components/toast/test/toast.spec.js +80 -0
  164. package/dist/collection/components/toast/toast.ios.css +10 -10
  165. package/dist/collection/components/toast/toast.js +104 -1
  166. package/dist/collection/components/toast/toast.md.css +10 -0
  167. package/dist/collection/components/toggle/toggle.js +2 -0
  168. package/dist/collection/utils/animation/animation.js +12 -11
  169. package/dist/collection/utils/animation/test/animation.spec.js +16 -0
  170. package/dist/collection/utils/browser/index.js +0 -22
  171. package/dist/collection/utils/forms/compare-with-utils.js +39 -0
  172. package/dist/collection/utils/forms/index.js +1 -0
  173. package/dist/collection/utils/gesture/gesture-controller.js +1 -1
  174. package/dist/collection/utils/input-shims/input-shims.js +12 -6
  175. package/dist/collection/utils/menu-controller/index.js +10 -12
  176. package/dist/collection/utils/overlays.js +5 -11
  177. package/dist/collection/utils/slot-mutation-controller.js +3 -2
  178. package/dist/docs.json +166 -385
  179. package/dist/esm/{animation-8aa13916.js → animation-cf3dd234.js} +13 -12
  180. package/dist/esm/{button-active-5b0516e7.js → button-active-47196c40.js} +2 -2
  181. package/dist/esm/{capacitor-b4979570.js → capacitor-f1f25364.js} +1 -1
  182. package/dist/esm/compare-with-utils-4928c09d.js +41 -0
  183. package/dist/esm/{data-12e24f00.js → data-44d9e816.js} +1 -1
  184. package/dist/esm/{gesture-controller-3723db7c.js → gesture-controller-0fa396c4.js} +1 -1
  185. package/dist/esm/{haptic-1243b917.js → haptic-1a66d69f.js} +1 -1
  186. package/dist/esm/{index-0aa6e61f.js → index-23c05a55.js} +11 -13
  187. package/dist/esm/{index-6a0ccabb.js → index-702b3cd3.js} +2 -2
  188. package/dist/esm/index-a5d50daf.js +7 -0
  189. package/dist/esm/{index-f0cc4e14.js → index-c9e82353.js} +1 -1
  190. package/dist/esm/{index-32cbee52.js → index-ff313b19.js} +2 -2
  191. package/dist/esm/index.js +10 -10
  192. package/dist/esm/{input-shims-d0c93e5d.js → input-shims-1d767845.js} +14 -9
  193. package/dist/esm/{input.utils-ec063df4.js → input.utils-2cf5e372.js} +4 -3
  194. package/dist/esm/ion-action-sheet.entry.js +8 -8
  195. package/dist/esm/ion-alert.entry.js +8 -8
  196. package/dist/esm/ion-app_8.entry.js +10 -10
  197. package/dist/esm/ion-backdrop.entry.js +12 -0
  198. package/dist/esm/ion-checkbox.entry.js +2 -0
  199. package/dist/esm/ion-datetime-button.entry.js +1 -1
  200. package/dist/esm/ion-datetime_3.entry.js +42 -29
  201. package/dist/esm/ion-input.entry.js +34 -11
  202. package/dist/esm/ion-item-option_3.entry.js +1 -1
  203. package/dist/esm/ion-item_8.entry.js +17 -4
  204. package/dist/esm/ion-loading.entry.js +3 -4
  205. package/dist/esm/ion-menu_3.entry.js +7 -7
  206. package/dist/esm/ion-modal.entry.js +10 -10
  207. package/dist/esm/ion-nav_2.entry.js +2 -2
  208. package/dist/esm/{ion-picker-column.entry.js → ion-picker-column-internal.entry.js} +12 -12
  209. package/dist/esm/{ion-picker.entry.js → ion-picker-internal.entry.js} +13 -13
  210. package/dist/esm/ion-popover.entry.js +4 -5
  211. package/dist/esm/ion-radio_2.entry.js +6 -1
  212. package/dist/esm/ion-range.entry.js +3 -1
  213. package/dist/esm/ion-refresher_2.entry.js +7 -7
  214. package/dist/esm/ion-reorder_2.entry.js +4 -4
  215. package/dist/esm/ion-segment_2.entry.js +1 -1
  216. package/dist/esm/ion-select_3.entry.js +47 -32
  217. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  218. package/dist/esm/ion-textarea.entry.js +33 -10
  219. package/dist/esm/ion-toast.entry.js +417 -76
  220. package/dist/esm/ion-toggle.entry.js +6 -4
  221. package/dist/esm/ionic.js +1 -1
  222. package/dist/esm/{ios.transition-1651c430.js → ios.transition-c3e77862.js} +3 -3
  223. package/dist/esm/{keyboard-b551279d.js → keyboard-9f771a04.js} +3 -3
  224. package/dist/esm/{keyboard-b063f012.js → keyboard-b6230bfb.js} +1 -1
  225. package/dist/esm/{keyboard-controller-0c2dce71.js → keyboard-controller-3f0faa10.js} +2 -2
  226. package/dist/esm/loader.js +1 -1
  227. package/dist/esm/{md.transition-66f18369.js → md.transition-1173eca9.js} +3 -3
  228. package/dist/esm/{notch-controller-8c9c0e54.js → notch-controller-3f79197e.js} +1 -1
  229. package/dist/esm/{overlays-789cd7a7.js → overlays-34169295.js} +7 -13
  230. package/dist/esm/{swipe-back-cc4c2bcb.js → swipe-back-0f3bfc8e.js} +2 -2
  231. package/dist/esm-es5/{animation-8aa13916.js → animation-cf3dd234.js} +1 -1
  232. package/dist/esm-es5/{button-active-5b0516e7.js → button-active-47196c40.js} +1 -1
  233. package/dist/esm-es5/{capacitor-b4979570.js → capacitor-f1f25364.js} +1 -1
  234. package/dist/esm-es5/compare-with-utils-4928c09d.js +4 -0
  235. package/dist/esm-es5/{gesture-controller-3723db7c.js → gesture-controller-0fa396c4.js} +1 -1
  236. package/dist/esm-es5/{haptic-1243b917.js → haptic-1a66d69f.js} +1 -1
  237. package/dist/esm-es5/index-23c05a55.js +4 -0
  238. package/dist/esm-es5/{index-6a0ccabb.js → index-702b3cd3.js} +1 -1
  239. package/dist/esm-es5/index-c9e82353.js +4 -0
  240. package/dist/esm-es5/{index-32cbee52.js → index-ff313b19.js} +1 -1
  241. package/dist/esm-es5/index.js +1 -1
  242. package/dist/esm-es5/input-shims-1d767845.js +4 -0
  243. package/dist/esm-es5/input.utils-2cf5e372.js +4 -0
  244. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  245. package/dist/esm-es5/ion-alert.entry.js +1 -1
  246. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  247. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  248. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  249. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  250. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  251. package/dist/esm-es5/ion-input.entry.js +1 -1
  252. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  253. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  254. package/dist/esm-es5/ion-loading.entry.js +1 -1
  255. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  256. package/dist/esm-es5/ion-modal.entry.js +1 -1
  257. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  258. package/dist/esm-es5/ion-picker-column-internal.entry.js +4 -0
  259. package/dist/esm-es5/ion-picker-internal.entry.js +4 -0
  260. package/dist/esm-es5/ion-popover.entry.js +1 -1
  261. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  262. package/dist/esm-es5/ion-range.entry.js +1 -1
  263. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  264. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  265. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  266. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  267. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  268. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  269. package/dist/esm-es5/ion-toast.entry.js +1 -1
  270. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  271. package/dist/esm-es5/ionic.js +1 -1
  272. package/dist/esm-es5/{ios.transition-1651c430.js → ios.transition-c3e77862.js} +1 -1
  273. package/dist/esm-es5/{keyboard-b551279d.js → keyboard-9f771a04.js} +1 -1
  274. package/dist/esm-es5/{keyboard-b063f012.js → keyboard-b6230bfb.js} +1 -1
  275. package/dist/esm-es5/{keyboard-controller-0c2dce71.js → keyboard-controller-3f0faa10.js} +1 -1
  276. package/dist/esm-es5/loader.js +1 -1
  277. package/dist/esm-es5/md.transition-1173eca9.js +4 -0
  278. package/dist/esm-es5/{notch-controller-8c9c0e54.js → notch-controller-3f79197e.js} +1 -1
  279. package/dist/esm-es5/overlays-34169295.js +4 -0
  280. package/dist/esm-es5/swipe-back-0f3bfc8e.js +4 -0
  281. package/dist/html.html-data.json +15 -120
  282. package/dist/ionic/index.esm.js +1 -1
  283. package/dist/ionic/ionic.esm.js +1 -1
  284. package/dist/ionic/{p-02d8fdba.system.entry.js → p-03ed6107.system.entry.js} +1 -1
  285. package/dist/ionic/p-0547e914.entry.js +4 -0
  286. package/dist/ionic/{p-81c818e7.js → p-11cb4e19.js} +1 -1
  287. package/dist/ionic/p-131761b4.entry.js +4 -0
  288. package/dist/ionic/p-196f2123.system.entry.js +4 -0
  289. package/dist/ionic/{p-64ed03a3.entry.js → p-1abc74d9.entry.js} +1 -1
  290. package/dist/ionic/p-1cf5e8d6.entry.js +4 -0
  291. package/dist/ionic/{p-c4042875.system.js → p-21b4981c.system.js} +1 -1
  292. package/dist/ionic/p-2207f3c2.js +4 -0
  293. package/dist/ionic/p-27eb8a91.system.entry.js +4 -0
  294. package/dist/ionic/p-2a41d4d1.js +4 -0
  295. package/dist/ionic/p-31189dae.entry.js +4 -0
  296. package/dist/ionic/p-314c4dee.js +4 -0
  297. package/dist/ionic/{p-4f3e2767.system.entry.js → p-37c69d34.system.entry.js} +1 -1
  298. package/dist/ionic/p-385c51f8.system.entry.js +4 -0
  299. package/dist/ionic/{p-477a182e.entry.js → p-3abf5b7a.entry.js} +1 -1
  300. package/dist/ionic/p-3bc3d880.system.js +4 -0
  301. package/dist/ionic/{p-56224549.entry.js → p-3de79805.entry.js} +1 -1
  302. package/dist/ionic/{p-9e6bf9ed.entry.js → p-3e655d4c.entry.js} +1 -1
  303. package/dist/ionic/p-40903d34.system.js +1 -1
  304. package/dist/ionic/p-43716898.js +4 -0
  305. package/dist/ionic/p-450a26bf.js +4 -0
  306. package/dist/ionic/p-485668f0.entry.js +4 -0
  307. package/dist/ionic/p-48c59094.system.entry.js +4 -0
  308. package/dist/ionic/p-494e75ad.js +4 -0
  309. package/dist/ionic/{p-cb62e3fc.system.entry.js → p-4c80afe1.system.entry.js} +1 -1
  310. package/dist/ionic/{p-0e23256e.system.entry.js → p-54824705.system.entry.js} +1 -1
  311. package/dist/ionic/p-561cc050.system.js +4 -0
  312. package/dist/ionic/{p-4a142496.system.entry.js → p-587afb80.system.entry.js} +1 -1
  313. package/dist/ionic/{p-8cf94fc1.js → p-5885e9af.js} +1 -1
  314. package/dist/ionic/p-5bd4e009.entry.js +4 -0
  315. package/dist/ionic/{p-b3e79338.system.entry.js → p-5e6bc319.system.entry.js} +1 -1
  316. package/dist/ionic/{p-939d903b.entry.js → p-64ab3eb3.entry.js} +1 -1
  317. package/dist/ionic/p-671dbd61.js +4 -0
  318. package/dist/ionic/{p-702d85d8.system.js → p-67951604.system.js} +1 -1
  319. package/dist/ionic/{p-835e0346.entry.js → p-6797887a.entry.js} +1 -1
  320. package/dist/ionic/p-693cabd5.entry.js +4 -0
  321. package/dist/ionic/{p-b923f3d7.js → p-6a309574.js} +1 -1
  322. package/dist/ionic/{p-a4cda7a8.system.entry.js → p-6e23777e.system.entry.js} +1 -1
  323. package/dist/ionic/{p-06e6d235.system.entry.js → p-7047a40c.system.entry.js} +2 -2
  324. package/dist/ionic/p-70dcf429.js +4 -0
  325. package/dist/ionic/p-710cea83.system.js +4 -0
  326. package/dist/ionic/p-7b44e419.js +4 -0
  327. package/dist/ionic/p-80a9b397.entry.js +4 -0
  328. package/dist/ionic/{p-9b5301cc.system.entry.js → p-823890d5.system.entry.js} +1 -1
  329. package/dist/ionic/{p-a57f223c.system.js → p-83a455fd.system.js} +1 -1
  330. package/dist/ionic/{p-baa7cb1e.entry.js → p-8ad82eb3.entry.js} +1 -1
  331. package/dist/ionic/{p-c1229981.entry.js → p-8b15ca22.entry.js} +1 -1
  332. package/dist/ionic/{p-a7e2ac5c.js → p-8b1be026.js} +1 -1
  333. package/dist/ionic/p-8dbdb163.system.js +4 -0
  334. package/dist/ionic/p-8ddfecbf.entry.js +4 -0
  335. package/dist/ionic/{p-b4b4bb29.system.js → p-9292fd42.system.js} +1 -1
  336. package/dist/ionic/{p-41477ad9.system.js → p-958f1c70.system.js} +1 -1
  337. package/dist/ionic/{p-5ce11143.entry.js → p-965677f1.entry.js} +1 -1
  338. package/dist/ionic/p-98712253.system.entry.js +4 -0
  339. package/dist/ionic/p-9c6787e2.entry.js +4 -0
  340. package/dist/ionic/{p-6500b298.system.js → p-9e852ff1.system.js} +1 -1
  341. package/dist/ionic/p-a11c1aff.system.entry.js +4 -0
  342. package/dist/ionic/{p-419eb426.js → p-a135e3ba.js} +1 -1
  343. package/dist/ionic/p-a31099a4.entry.js +4 -0
  344. package/dist/ionic/p-a6bc00ab.entry.js +4 -0
  345. package/dist/ionic/p-a9c3699b.system.entry.js +4 -0
  346. package/dist/ionic/p-ad4b4f73.system.entry.js +4 -0
  347. package/dist/ionic/{p-ab4cff27.system.js → p-aec8a70a.system.js} +1 -1
  348. package/dist/ionic/p-b673ee9b.entry.js +4 -0
  349. package/dist/ionic/p-be0f6600.system.js +4 -0
  350. package/dist/ionic/p-beb64be7.system.entry.js +4 -0
  351. package/dist/ionic/{p-dd837fa8.entry.js → p-c1e725db.entry.js} +1 -1
  352. package/dist/ionic/p-c2db1374.system.js +4 -0
  353. package/dist/ionic/p-c3547c7a.system.js +4 -0
  354. package/dist/ionic/{p-c7fd81ba.system.js → p-c4de53af.system.js} +1 -1
  355. package/dist/ionic/p-c700acef.system.js +4 -0
  356. package/dist/ionic/p-c919498d.entry.js +4 -0
  357. package/dist/ionic/{p-3f88eab8.system.entry.js → p-cc615985.system.entry.js} +1 -1
  358. package/dist/ionic/p-d48872b1.system.js +4 -0
  359. package/dist/ionic/p-d4fba36b.system.entry.js +4 -0
  360. package/dist/ionic/{p-22813b28.system.entry.js → p-d61a2cee.system.entry.js} +1 -1
  361. package/dist/ionic/{p-c31fc05f.system.entry.js → p-db5043df.system.entry.js} +1 -1
  362. package/dist/ionic/{p-100ef961.js → p-e0b06b65.js} +1 -1
  363. package/dist/ionic/p-e5b8f2f7.js +4 -0
  364. package/dist/ionic/{p-3bad5c1a.js → p-e5fd9f10.js} +1 -1
  365. package/dist/ionic/{p-302091ab.js → p-e627ed84.js} +1 -1
  366. package/dist/ionic/{p-ccdcb022.system.js → p-e7d20dfb.system.js} +1 -1
  367. package/dist/ionic/{p-14b4348c.system.js → p-e9e5755c.system.js} +1 -1
  368. package/dist/ionic/p-ea9addc8.system.entry.js +4 -0
  369. package/dist/ionic/p-f36112b4.entry.js +4 -0
  370. package/dist/ionic/p-f43f4102.entry.js +4 -0
  371. package/dist/ionic/p-f5d78105.entry.js +4 -0
  372. package/dist/ionic/p-f7769c83.js +4 -0
  373. package/dist/ionic/{p-bba2ce59.system.js → p-f9a641fa.system.js} +1 -1
  374. package/dist/ionic/{p-2e1794df.system.js → p-fa8d4788.system.js} +1 -1
  375. package/dist/ionic/p-fcb148dc.system.entry.js +4 -0
  376. package/dist/ionic/p-fcc23f25.system.entry.js +4 -0
  377. package/dist/ionic/{p-878c7aa5.system.entry.js → p-fce6b76a.system.entry.js} +1 -1
  378. package/dist/ionic/p-fdcf04c3.system.entry.js +4 -0
  379. package/dist/ionic/{p-a0b6d438.js → p-fe1f93f2.js} +1 -1
  380. package/dist/types/components/backdrop/backdrop.d.ts +3 -0
  381. package/dist/types/components/datetime/datetime.d.ts +1 -0
  382. package/dist/types/components/datetime/utils/data.d.ts +2 -2
  383. package/dist/types/components/input/input.d.ts +2 -0
  384. package/dist/types/components/menu/menu.d.ts +1 -1
  385. package/dist/types/components/picker/picker.d.ts +131 -74
  386. package/dist/types/components/picker-column/picker-column.d.ts +39 -94
  387. package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +102 -0
  388. package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +8 -0
  389. package/dist/types/components/picker-internal/picker-internal.d.ts +102 -0
  390. package/dist/types/components/radio-group/radio-group-interface.d.ts +1 -0
  391. package/dist/types/components/radio-group/radio-group.d.ts +8 -1
  392. package/dist/types/components/router/router.d.ts +2 -1
  393. package/dist/types/components/select/select.d.ts +6 -1
  394. package/dist/types/components/skeleton-text/skeleton-text.d.ts +9 -1
  395. package/dist/types/components/textarea/textarea.d.ts +2 -0
  396. package/dist/types/components/toast/animations/utils.d.ts +15 -4
  397. package/dist/types/components/toast/gestures/swipe-to-dismiss.d.ts +9 -0
  398. package/dist/types/components/toast/toast-interface.d.ts +2 -0
  399. package/dist/types/components/toast/toast.d.ts +28 -1
  400. package/dist/types/components.d.ts +159 -157
  401. package/dist/types/interface.d.ts +2 -6
  402. package/dist/types/utils/animation/animation-interface.d.ts +4 -4
  403. package/dist/types/utils/browser/index.d.ts +11 -2
  404. package/dist/types/utils/config.d.ts +2 -2
  405. package/dist/types/utils/forms/compare-with-utils.d.ts +18 -0
  406. package/dist/types/utils/forms/index.d.ts +1 -0
  407. package/dist/types/utils/gesture/gesture-controller.d.ts +0 -1
  408. package/dist/types/utils/hardware-back-button.d.ts +4 -0
  409. package/dist/types/utils/overlays.d.ts +3 -5
  410. package/dist/types/utils/slot-mutation-controller.d.ts +2 -2
  411. package/hydrate/index.js +2003 -1567
  412. package/package.json +1 -1
  413. package/components/ion-picker-column-option.d.ts +0 -11
  414. package/components/ion-picker-column-option.js +0 -52
  415. package/components/ion-picker-legacy-column.d.ts +0 -11
  416. package/components/ion-picker-legacy-column.js +0 -9
  417. package/components/ion-picker-legacy.js +0 -309
  418. package/components/picker-column2.js +0 -379
  419. package/dist/cjs/index-306a7476.js +0 -32
  420. package/dist/cjs/ion-picker-column-option.cjs.entry.js +0 -35
  421. package/dist/collection/components/item/test/text/item.e2e.js +0 -14
  422. package/dist/collection/components/picker-column-option/picker-column-option.js +0 -68
  423. package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +0 -18
  424. package/dist/collection/components/picker-legacy/picker.ios.css +0 -367
  425. package/dist/collection/components/picker-legacy/picker.js +0 -817
  426. package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +0 -25
  427. package/dist/collection/components/picker-legacy-column/picker-column.js +0 -419
  428. package/dist/collection/utils/test/overlays/overlays-scroll-blocking.spec.js +0 -65
  429. package/dist/esm/index-7a14ecec.js +0 -29
  430. package/dist/esm/ion-picker-column-option.entry.js +0 -31
  431. package/dist/esm-es5/index-0aa6e61f.js +0 -4
  432. package/dist/esm-es5/index-f0cc4e14.js +0 -4
  433. package/dist/esm-es5/input-shims-d0c93e5d.js +0 -4
  434. package/dist/esm-es5/input.utils-ec063df4.js +0 -4
  435. package/dist/esm-es5/ion-picker-column-option.entry.js +0 -4
  436. package/dist/esm-es5/ion-picker-column.entry.js +0 -4
  437. package/dist/esm-es5/ion-picker.entry.js +0 -4
  438. package/dist/esm-es5/md.transition-66f18369.js +0 -4
  439. package/dist/esm-es5/overlays-789cd7a7.js +0 -4
  440. package/dist/esm-es5/swipe-back-cc4c2bcb.js +0 -4
  441. package/dist/ionic/p-0c244faf.entry.js +0 -4
  442. package/dist/ionic/p-20cf4994.js +0 -4
  443. package/dist/ionic/p-234b9617.system.entry.js +0 -4
  444. package/dist/ionic/p-25c34422.system.entry.js +0 -4
  445. package/dist/ionic/p-276afddd.js +0 -4
  446. package/dist/ionic/p-2804781b.entry.js +0 -4
  447. package/dist/ionic/p-2ad38423.system.entry.js +0 -4
  448. package/dist/ionic/p-2ba9414e.entry.js +0 -4
  449. package/dist/ionic/p-2e8e0045.js +0 -4
  450. package/dist/ionic/p-332f64af.system.entry.js +0 -4
  451. package/dist/ionic/p-352c0232.system.entry.js +0 -4
  452. package/dist/ionic/p-3602001b.system.js +0 -4
  453. package/dist/ionic/p-3632220b.system.js +0 -4
  454. package/dist/ionic/p-39074595.entry.js +0 -4
  455. package/dist/ionic/p-439e20ef.entry.js +0 -4
  456. package/dist/ionic/p-4cd588b3.system.entry.js +0 -4
  457. package/dist/ionic/p-67aab78f.js +0 -4
  458. package/dist/ionic/p-67eecef4.system.js +0 -4
  459. package/dist/ionic/p-6893f6e4.entry.js +0 -4
  460. package/dist/ionic/p-77e7a9c8.entry.js +0 -4
  461. package/dist/ionic/p-7c66a566.system.entry.js +0 -4
  462. package/dist/ionic/p-8b4ab236.entry.js +0 -4
  463. package/dist/ionic/p-9403b297.system.entry.js +0 -4
  464. package/dist/ionic/p-966cf574.system.entry.js +0 -4
  465. package/dist/ionic/p-97c65aa5.js +0 -4
  466. package/dist/ionic/p-992d3bad.entry.js +0 -4
  467. package/dist/ionic/p-9ab6f3e6.system.js +0 -4
  468. package/dist/ionic/p-9b89cbde.js +0 -4
  469. package/dist/ionic/p-9c967a65.system.entry.js +0 -4
  470. package/dist/ionic/p-a21b8d05.entry.js +0 -4
  471. package/dist/ionic/p-b0cee324.entry.js +0 -4
  472. package/dist/ionic/p-b1142133.entry.js +0 -4
  473. package/dist/ionic/p-b4cbb736.js +0 -4
  474. package/dist/ionic/p-b6a8588f.entry.js +0 -4
  475. package/dist/ionic/p-b6f8ee31.entry.js +0 -4
  476. package/dist/ionic/p-ba70d455.entry.js +0 -4
  477. package/dist/ionic/p-bd7a3269.entry.js +0 -4
  478. package/dist/ionic/p-c32bf078.system.entry.js +0 -4
  479. package/dist/ionic/p-cc196b34.js +0 -4
  480. package/dist/ionic/p-d1de1188.js +0 -4
  481. package/dist/ionic/p-d21bfe66.system.entry.js +0 -4
  482. package/dist/ionic/p-d3952bd5.system.entry.js +0 -4
  483. package/dist/ionic/p-dc565ca3.js +0 -4
  484. package/dist/ionic/p-dfa756ed.system.js +0 -4
  485. package/dist/ionic/p-e88ed07f.system.js +0 -4
  486. package/dist/ionic/p-eb07ec1a.system.entry.js +0 -4
  487. package/dist/ionic/p-eb5697b5.system.js +0 -4
  488. package/dist/ionic/p-ee800093.entry.js +0 -4
  489. package/dist/ionic/p-f0559c5d.system.entry.js +0 -4
  490. package/dist/ionic/p-fdd22426.entry.js +0 -4
  491. package/dist/ionic/p-ff5a10f9.system.js +0 -4
  492. package/dist/types/components/picker/picker-interfaces.d.ts +0 -8
  493. package/dist/types/components/picker-column-option/picker-column-option.d.ts +0 -16
  494. package/dist/types/components/picker-legacy/picker.d.ts +0 -158
  495. package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
  496. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.enter.js +0 -0
  497. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.leave.js +0 -0
  498. /package/dist/collection/components/picker/{picker-interfaces.js → picker-interface.js} +0 -0
  499. /package/dist/collection/components/{picker-legacy-column → picker-column}/test/test.utils.js +0 -0
  500. /package/dist/collection/components/{picker-column/picker-column-interfaces.js → picker-column-internal/picker-column-internal-interfaces.js} +0 -0
  501. /package/dist/collection/components/{picker-legacy/picker-interface.js → picker-internal/picker-internal-interfaces.js} +0 -0
  502. /package/dist/esm-es5/{data-12e24f00.js → data-44d9e816.js} +0 -0
  503. /package/dist/esm-es5/{index-7a14ecec.js → index-a5d50daf.js} +0 -0
  504. /package/dist/ionic/{p-bb849ebb.js → p-17240d90.js} +0 -0
  505. /package/dist/ionic/{p-0e94957a.system.js → p-792919fd.system.js} +0 -0
  506. /package/dist/ionic/{p-b347cfd1.js → p-7b30edcc.js} +0 -0
  507. /package/dist/ionic/{p-e4219e27.system.js → p-b8c3f071.system.js} +0 -0
  508. /package/dist/types/components/{picker-legacy → picker}/animations/ios.enter.d.ts +0 -0
  509. /package/dist/types/components/{picker-legacy → picker}/animations/ios.leave.d.ts +0 -0
  510. /package/dist/types/components/{picker-legacy → picker}/picker-interface.d.ts +0 -0
  511. /package/dist/types/components/{picker-legacy-column → picker-column}/test/test.utils.d.ts +0 -0
  512. /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,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();
@@ -125,6 +189,14 @@ export class Toast {
125
189
  if (this.duration > 0) {
126
190
  this.durationTimeout = setTimeout(() => this.dismiss(undefined, 'timeout'), this.duration);
127
191
  }
192
+ /**
193
+ * If the Toast has a swipe gesture then we can
194
+ * create the gesture so users can swipe the
195
+ * presented Toast.
196
+ */
197
+ if (this.prefersSwipeGesture()) {
198
+ this.createSwipeGesture(animationPosition);
199
+ }
128
200
  unlock();
129
201
  }
130
202
  /**
@@ -159,6 +231,11 @@ export class Toast {
159
231
  this.revealContentToScreenReader = false;
160
232
  }
161
233
  this.lastPresentedPosition = undefined;
234
+ /**
235
+ * If the Toast has a swipe gesture then we can
236
+ * safely destroy it now that it is dismissed.
237
+ */
238
+ this.destroySwipeGesture();
162
239
  unlock();
163
240
  return dismissed;
164
241
  }
@@ -699,6 +776,29 @@ export class Toast {
699
776
  "text": "Additional attributes to pass to the toast."
700
777
  }
701
778
  },
779
+ "swipeGesture": {
780
+ "type": "string",
781
+ "mutable": false,
782
+ "complexType": {
783
+ "original": "ToastSwipeGestureDirection",
784
+ "resolved": "\"vertical\" | undefined",
785
+ "references": {
786
+ "ToastSwipeGestureDirection": {
787
+ "location": "import",
788
+ "path": "./toast-interface",
789
+ "id": "src/components/toast/toast-interface.ts::ToastSwipeGestureDirection"
790
+ }
791
+ }
792
+ },
793
+ "required": false,
794
+ "optional": true,
795
+ "docs": {
796
+ "tags": [],
797
+ "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."
798
+ },
799
+ "attribute": "swipe-gesture",
800
+ "reflect": false
801
+ },
702
802
  "isOpen": {
703
803
  "type": "boolean",
704
804
  "mutable": false,
@@ -1009,6 +1109,9 @@ export class Toast {
1009
1109
  static get elementRef() { return "el"; }
1010
1110
  static get watchers() {
1011
1111
  return [{
1112
+ "propName": "swipeGesture",
1113
+ "methodName": "swipeGestureChanged"
1114
+ }, {
1012
1115
  "propName": "isOpen",
1013
1116
  "methodName": "onIsOpenChange"
1014
1117
  }, {
@@ -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;
@@ -123,6 +123,8 @@ export class Toggle {
123
123
  if (this.legacyFormController.hasLegacyControl()) {
124
124
  this.ionStyle.emit({
125
125
  'interactive-disabled': this.disabled,
126
+ // TODO(FW-2990): remove this
127
+ legacy: !!this.legacy,
126
128
  });
127
129
  }
128
130
  }
@@ -463,6 +463,16 @@ export const createAnimation = (animationId) => {
463
463
  }
464
464
  }
465
465
  });
466
+ /**
467
+ * Clean up any value coercion before
468
+ * the user callbacks fire otherwise
469
+ * they may get stale values. For example,
470
+ * if someone calls progressStart(0) the
471
+ * animation may still be reversed.
472
+ */
473
+ forceDurationValue = undefined;
474
+ forceDirectionValue = undefined;
475
+ forceDelayValue = undefined;
466
476
  onFinishCallbacks.forEach((onFinishCallback) => {
467
477
  return onFinishCallback.c(currentStep, ani);
468
478
  });
@@ -667,17 +677,8 @@ export const createAnimation = (animationId) => {
667
677
  update(false, false);
668
678
  }
669
679
  }
670
- if (playTo !== undefined) {
671
- onFinish(() => {
672
- forceDurationValue = undefined;
673
- forceDirectionValue = undefined;
674
- forceDelayValue = undefined;
675
- }, {
676
- oneTimeCallback: true,
677
- });
678
- if (!parentAnimation) {
679
- play();
680
- }
680
+ if (playTo !== undefined && !parentAnimation) {
681
+ play();
681
682
  }
682
683
  return ani;
683
684
  };
@@ -5,6 +5,22 @@ import { createAnimation } from "../animation";
5
5
  import { processKeyframes } from "../animation-utils";
6
6
  import { getTimeGivenProgression } from "../cubic-bezier";
7
7
  describe('Animation Class', () => {
8
+ describe('progressEnd callbacks', () => {
9
+ test('coerced state should be reset before onFinish runs', (done) => {
10
+ const el = document.createElement('div');
11
+ const animation = createAnimation()
12
+ .addElement(el)
13
+ .fromTo('transform', 'translateX(0px)', 'translateX(100px)')
14
+ .duration(50);
15
+ animation
16
+ .onFinish(() => {
17
+ expect(animation.getDirection()).toBe('normal');
18
+ expect(animation.getDuration()).toBe(50);
19
+ done();
20
+ })
21
+ .progressEnd(0, 0.5, 10);
22
+ });
23
+ });
8
24
  describe('play()', () => {
9
25
  it('should resolve when the animation is cancelled', async () => {
10
26
  // Tell Jest to expect 1 assertion for async code
@@ -1,27 +1,5 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- /**
5
- * When accessing the document or window, it is important
6
- * to account for SSR applications where the
7
- * window is not available. Code that accesses
8
- * window when it is not available will crash.
9
- * Even checking if `window === undefined` will cause
10
- * apps to crash in SSR.
11
- *
12
- * Use win below to access an SSR-safe version
13
- * of the window.
14
- *
15
- * Example 1:
16
- * Before:
17
- * if (window.innerWidth > 768) { ... }
18
- *
19
- * After:
20
- * import { win } from 'path/to/this/file';
21
- * if (win?.innerWidth > 768) { ... }
22
- *
23
- * Note: Code inside of this if-block will
24
- * not run in an SSR environment.
25
- */
26
4
  export const win = typeof window !== 'undefined' ? window : undefined;
27
5
  export const doc = typeof document !== 'undefined' ? document : undefined;
@@ -0,0 +1,39 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ /**
5
+ * Uses the compareWith param to compare two values to determine if they are equal.
6
+ *
7
+ * @param currentValue The current value of the control.
8
+ * @param compareValue The value to compare against.
9
+ * @param compareWith The function or property name to use to compare values.
10
+ */
11
+ export const compareOptions = (currentValue, compareValue, compareWith) => {
12
+ if (typeof compareWith === 'function') {
13
+ return compareWith(currentValue, compareValue);
14
+ }
15
+ else if (typeof compareWith === 'string') {
16
+ return currentValue[compareWith] === compareValue[compareWith];
17
+ }
18
+ else {
19
+ return Array.isArray(compareValue) ? compareValue.includes(currentValue) : currentValue === compareValue;
20
+ }
21
+ };
22
+ /**
23
+ * Compares a value against the current value(s) to determine if it is selected.
24
+ *
25
+ * @param currentValue The current value of the control.
26
+ * @param compareValue The value to compare against.
27
+ * @param compareWith The function or property name to use to compare values.
28
+ */
29
+ export const isOptionSelected = (currentValue, compareValue, compareWith) => {
30
+ if (currentValue === undefined) {
31
+ return false;
32
+ }
33
+ if (Array.isArray(currentValue)) {
34
+ return currentValue.some((val) => compareOptions(val, compareValue, compareWith));
35
+ }
36
+ else {
37
+ return compareOptions(currentValue, compareValue, compareWith);
38
+ }
39
+ };
@@ -3,3 +3,4 @@
3
3
  */
4
4
  export * from './form-controller';
5
5
  export * from './notch-controller';
6
+ export * from './compare-with-utils';
@@ -189,5 +189,5 @@ class BlockerDelegate {
189
189
  this.ctrl = undefined;
190
190
  }
191
191
  }
192
- export const BACKDROP_NO_SCROLL = 'backdrop-no-scroll';
192
+ const BACKDROP_NO_SCROLL = 'backdrop-no-scroll';
193
193
  export const GESTURE_CONTROLLER = new GestureController();
@@ -1,6 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import { doc } from "../browser/index";
4
5
  import { findClosestIonContent } from "../content";
5
6
  import { componentOnReady } from "../helpers";
6
7
  import { Keyboard } from "../native/keyboard";
@@ -11,7 +12,13 @@ const INPUT_BLURRING = true;
11
12
  const SCROLL_ASSIST = true;
12
13
  const HIDE_CARET = true;
13
14
  export const startInputShims = async (config, platform) => {
14
- const doc = document;
15
+ /**
16
+ * If doc is undefined then we are in an SSR environment
17
+ * where input shims do not apply.
18
+ */
19
+ if (doc === undefined) {
20
+ return;
21
+ }
15
22
  const isIOS = platform === 'ios';
16
23
  const isAndroid = platform === 'android';
17
24
  /**
@@ -90,11 +97,10 @@ export const startInputShims = async (config, platform) => {
90
97
  for (const input of inputs) {
91
98
  registerInput(input);
92
99
  }
93
- // TODO(FW-2832): types
94
- doc.addEventListener('ionInputDidLoad', ((ev) => {
100
+ doc.addEventListener('ionInputDidLoad', (ev) => {
95
101
  registerInput(ev.detail);
96
- }));
97
- doc.addEventListener('ionInputDidUnload', ((ev) => {
102
+ });
103
+ doc.addEventListener('ionInputDidUnload', (ev) => {
98
104
  unregisterInput(ev.detail);
99
- }));
105
+ });
100
106
  };
@@ -1,8 +1,9 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { printIonWarning } from "../logging/index";
4
+ import { doc } from "../browser/index";
5
5
  import { MENU_BACK_BUTTON_PRIORITY } from "../hardware-back-button";
6
+ import { printIonWarning } from "../logging/index";
6
7
  import { componentOnReady } from "../helpers";
7
8
  import { menuOverlayAnimation } from "./animations/overlay";
8
9
  import { menuPushAnimation } from "./animations/push";
@@ -184,17 +185,14 @@ const createMenuController = () => {
184
185
  registerAnimation('reveal', menuRevealAnimation);
185
186
  registerAnimation('push', menuPushAnimation);
186
187
  registerAnimation('overlay', menuOverlayAnimation);
187
- if (typeof document !== 'undefined') {
188
- document.addEventListener('ionBackButton', (ev) => {
189
- // TODO(FW-2832): type
190
- const openMenu = _getOpenSync();
191
- if (openMenu) {
192
- ev.detail.register(MENU_BACK_BUTTON_PRIORITY, () => {
193
- return openMenu.close();
194
- });
195
- }
196
- });
197
- }
188
+ doc === null || doc === void 0 ? void 0 : doc.addEventListener('ionBackButton', (ev) => {
189
+ const openMenu = _getOpenSync();
190
+ if (openMenu) {
191
+ ev.detail.register(MENU_BACK_BUTTON_PRIORITY, () => {
192
+ return openMenu.close();
193
+ });
194
+ }
195
+ });
198
196
  return {
199
197
  registerAnimation,
200
198
  get,