@ionic/core 7.5.7-dev.11701270755.14f050ad → 7.5.7-dev.11701273756.1eb73d4c

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 (511) 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 +25 -3
  109. package/dist/collection/components/item/item.md.css +25 -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/label/select.e2e.js +1 -1
  149. package/dist/collection/components/select/test/legacy/wrapping/select.e2e.js +1 -1
  150. package/dist/collection/components/select/test/slot/select.e2e.js +67 -0
  151. package/dist/collection/components/skeleton-text/skeleton-text.js +39 -0
  152. package/dist/collection/components/textarea/test/slot/textarea.e2e.js +51 -0
  153. package/dist/collection/components/textarea/textarea.ios.css +37 -5
  154. package/dist/collection/components/textarea/textarea.js +30 -5
  155. package/dist/collection/components/textarea/textarea.md.css +47 -14
  156. package/dist/collection/components/toast/animations/ios.enter.js +2 -1
  157. package/dist/collection/components/toast/animations/md.enter.js +4 -3
  158. package/dist/collection/components/toast/animations/utils.js +20 -14
  159. package/dist/collection/components/toast/gestures/swipe-to-dismiss.js +267 -0
  160. package/dist/collection/components/toast/test/swipe-gesture/toast.e2e.js +84 -0
  161. package/dist/collection/components/toast/test/toast-config.spec.js +25 -0
  162. package/dist/collection/components/toast/test/toast.spec.js +80 -0
  163. package/dist/collection/components/toast/toast.ios.css +10 -10
  164. package/dist/collection/components/toast/toast.js +104 -1
  165. package/dist/collection/components/toast/toast.md.css +10 -0
  166. package/dist/collection/components/toggle/toggle.js +2 -0
  167. package/dist/collection/utils/animation/animation.js +12 -11
  168. package/dist/collection/utils/animation/test/animation.spec.js +16 -0
  169. package/dist/collection/utils/browser/index.js +0 -22
  170. package/dist/collection/utils/forms/compare-with-utils.js +39 -0
  171. package/dist/collection/utils/forms/index.js +1 -0
  172. package/dist/collection/utils/gesture/gesture-controller.js +1 -1
  173. package/dist/collection/utils/input-shims/input-shims.js +12 -6
  174. package/dist/collection/utils/menu-controller/index.js +10 -12
  175. package/dist/collection/utils/overlays.js +5 -11
  176. package/dist/collection/utils/slot-mutation-controller.js +3 -2
  177. package/dist/docs.json +166 -385
  178. package/dist/esm/{animation-8aa13916.js → animation-cf3dd234.js} +13 -12
  179. package/dist/esm/{button-active-5b0516e7.js → button-active-47196c40.js} +2 -2
  180. package/dist/esm/{capacitor-b4979570.js → capacitor-f1f25364.js} +1 -1
  181. package/dist/esm/compare-with-utils-4928c09d.js +41 -0
  182. package/dist/esm/{data-12e24f00.js → data-44d9e816.js} +1 -1
  183. package/dist/esm/{gesture-controller-3723db7c.js → gesture-controller-0fa396c4.js} +1 -1
  184. package/dist/esm/{haptic-1243b917.js → haptic-1a66d69f.js} +1 -1
  185. package/dist/esm/{index-0aa6e61f.js → index-23c05a55.js} +11 -13
  186. package/dist/esm/{index-6a0ccabb.js → index-702b3cd3.js} +2 -2
  187. package/dist/esm/index-a5d50daf.js +7 -0
  188. package/dist/esm/{index-f0cc4e14.js → index-c9e82353.js} +1 -1
  189. package/dist/esm/{index-32cbee52.js → index-ff313b19.js} +2 -2
  190. package/dist/esm/index.js +10 -10
  191. package/dist/esm/{input-shims-d0c93e5d.js → input-shims-1d767845.js} +14 -9
  192. package/dist/esm/{input.utils-ec063df4.js → input.utils-2cf5e372.js} +4 -3
  193. package/dist/esm/ion-action-sheet.entry.js +8 -8
  194. package/dist/esm/ion-alert.entry.js +8 -8
  195. package/dist/esm/ion-app_8.entry.js +10 -10
  196. package/dist/esm/ion-backdrop.entry.js +12 -0
  197. package/dist/esm/ion-checkbox.entry.js +2 -0
  198. package/dist/esm/ion-datetime-button.entry.js +1 -1
  199. package/dist/esm/ion-datetime_3.entry.js +42 -29
  200. package/dist/esm/ion-input.entry.js +34 -11
  201. package/dist/esm/ion-item-option_3.entry.js +1 -1
  202. package/dist/esm/ion-item_8.entry.js +17 -4
  203. package/dist/esm/ion-loading.entry.js +3 -4
  204. package/dist/esm/ion-menu_3.entry.js +7 -7
  205. package/dist/esm/ion-modal.entry.js +10 -10
  206. package/dist/esm/ion-nav_2.entry.js +2 -2
  207. package/dist/esm/{ion-picker-column.entry.js → ion-picker-column-internal.entry.js} +12 -12
  208. package/dist/esm/{ion-picker.entry.js → ion-picker-internal.entry.js} +13 -13
  209. package/dist/esm/ion-popover.entry.js +4 -5
  210. package/dist/esm/ion-radio_2.entry.js +6 -1
  211. package/dist/esm/ion-range.entry.js +3 -1
  212. package/dist/esm/ion-refresher_2.entry.js +7 -7
  213. package/dist/esm/ion-reorder_2.entry.js +4 -4
  214. package/dist/esm/ion-segment_2.entry.js +1 -1
  215. package/dist/esm/ion-select_3.entry.js +47 -32
  216. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  217. package/dist/esm/ion-textarea.entry.js +33 -10
  218. package/dist/esm/ion-toast.entry.js +417 -76
  219. package/dist/esm/ion-toggle.entry.js +6 -4
  220. package/dist/esm/ionic.js +1 -1
  221. package/dist/esm/{ios.transition-1651c430.js → ios.transition-c3e77862.js} +3 -3
  222. package/dist/esm/{keyboard-b551279d.js → keyboard-9f771a04.js} +3 -3
  223. package/dist/esm/{keyboard-b063f012.js → keyboard-b6230bfb.js} +1 -1
  224. package/dist/esm/{keyboard-controller-0c2dce71.js → keyboard-controller-3f0faa10.js} +2 -2
  225. package/dist/esm/loader.js +1 -1
  226. package/dist/esm/{md.transition-66f18369.js → md.transition-1173eca9.js} +3 -3
  227. package/dist/esm/{notch-controller-8c9c0e54.js → notch-controller-3f79197e.js} +1 -1
  228. package/dist/esm/{overlays-789cd7a7.js → overlays-34169295.js} +7 -13
  229. package/dist/esm/{swipe-back-cc4c2bcb.js → swipe-back-0f3bfc8e.js} +2 -2
  230. package/dist/esm-es5/{animation-8aa13916.js → animation-cf3dd234.js} +1 -1
  231. package/dist/esm-es5/{button-active-5b0516e7.js → button-active-47196c40.js} +1 -1
  232. package/dist/esm-es5/{capacitor-b4979570.js → capacitor-f1f25364.js} +1 -1
  233. package/dist/esm-es5/compare-with-utils-4928c09d.js +4 -0
  234. package/dist/esm-es5/{gesture-controller-3723db7c.js → gesture-controller-0fa396c4.js} +1 -1
  235. package/dist/esm-es5/{haptic-1243b917.js → haptic-1a66d69f.js} +1 -1
  236. package/dist/esm-es5/index-23c05a55.js +4 -0
  237. package/dist/esm-es5/{index-6a0ccabb.js → index-702b3cd3.js} +1 -1
  238. package/dist/esm-es5/index-c9e82353.js +4 -0
  239. package/dist/esm-es5/{index-32cbee52.js → index-ff313b19.js} +1 -1
  240. package/dist/esm-es5/index.js +1 -1
  241. package/dist/esm-es5/input-shims-1d767845.js +4 -0
  242. package/dist/esm-es5/input.utils-2cf5e372.js +4 -0
  243. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  244. package/dist/esm-es5/ion-alert.entry.js +1 -1
  245. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  246. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  247. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  248. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  249. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  250. package/dist/esm-es5/ion-input.entry.js +1 -1
  251. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  252. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  253. package/dist/esm-es5/ion-loading.entry.js +1 -1
  254. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  255. package/dist/esm-es5/ion-modal.entry.js +1 -1
  256. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  257. package/dist/esm-es5/ion-picker-column-internal.entry.js +4 -0
  258. package/dist/esm-es5/ion-picker-internal.entry.js +4 -0
  259. package/dist/esm-es5/ion-popover.entry.js +1 -1
  260. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  261. package/dist/esm-es5/ion-range.entry.js +1 -1
  262. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  263. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  264. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  265. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  266. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  267. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  268. package/dist/esm-es5/ion-toast.entry.js +1 -1
  269. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  270. package/dist/esm-es5/ionic.js +1 -1
  271. package/dist/esm-es5/{ios.transition-1651c430.js → ios.transition-c3e77862.js} +1 -1
  272. package/dist/esm-es5/{keyboard-b551279d.js → keyboard-9f771a04.js} +1 -1
  273. package/dist/esm-es5/{keyboard-b063f012.js → keyboard-b6230bfb.js} +1 -1
  274. package/dist/esm-es5/{keyboard-controller-0c2dce71.js → keyboard-controller-3f0faa10.js} +1 -1
  275. package/dist/esm-es5/loader.js +1 -1
  276. package/dist/esm-es5/md.transition-1173eca9.js +4 -0
  277. package/dist/esm-es5/{notch-controller-8c9c0e54.js → notch-controller-3f79197e.js} +1 -1
  278. package/dist/esm-es5/overlays-34169295.js +4 -0
  279. package/dist/esm-es5/swipe-back-0f3bfc8e.js +4 -0
  280. package/dist/html.html-data.json +15 -120
  281. package/dist/ionic/index.esm.js +1 -1
  282. package/dist/ionic/ionic.esm.js +1 -1
  283. package/dist/ionic/{p-02d8fdba.system.entry.js → p-03ed6107.system.entry.js} +1 -1
  284. package/dist/ionic/p-0547e914.entry.js +4 -0
  285. package/dist/ionic/{p-81c818e7.js → p-11cb4e19.js} +1 -1
  286. package/dist/ionic/p-131761b4.entry.js +4 -0
  287. package/dist/ionic/p-196f2123.system.entry.js +4 -0
  288. package/dist/ionic/{p-64ed03a3.entry.js → p-1abc74d9.entry.js} +1 -1
  289. package/dist/ionic/p-1cf5e8d6.entry.js +4 -0
  290. package/dist/ionic/{p-c4042875.system.js → p-21b4981c.system.js} +1 -1
  291. package/dist/ionic/p-2207f3c2.js +4 -0
  292. package/dist/ionic/p-27eb8a91.system.entry.js +4 -0
  293. package/dist/ionic/p-2a41d4d1.js +4 -0
  294. package/dist/ionic/p-31189dae.entry.js +4 -0
  295. package/dist/ionic/p-314c4dee.js +4 -0
  296. package/dist/ionic/{p-4f3e2767.system.entry.js → p-37c69d34.system.entry.js} +1 -1
  297. package/dist/ionic/p-385c51f8.system.entry.js +4 -0
  298. package/dist/ionic/{p-477a182e.entry.js → p-3abf5b7a.entry.js} +1 -1
  299. package/dist/ionic/p-3bc3d880.system.js +4 -0
  300. package/dist/ionic/{p-56224549.entry.js → p-3de79805.entry.js} +1 -1
  301. package/dist/ionic/{p-9e6bf9ed.entry.js → p-3e655d4c.entry.js} +1 -1
  302. package/dist/ionic/p-40903d34.system.js +1 -1
  303. package/dist/ionic/p-43716898.js +4 -0
  304. package/dist/ionic/p-450a26bf.js +4 -0
  305. package/dist/ionic/p-485668f0.entry.js +4 -0
  306. package/dist/ionic/p-48c59094.system.entry.js +4 -0
  307. package/dist/ionic/p-494e75ad.js +4 -0
  308. package/dist/ionic/{p-cb62e3fc.system.entry.js → p-4c80afe1.system.entry.js} +1 -1
  309. package/dist/ionic/{p-0e23256e.system.entry.js → p-54824705.system.entry.js} +1 -1
  310. package/dist/ionic/p-561cc050.system.js +4 -0
  311. package/dist/ionic/{p-4a142496.system.entry.js → p-587afb80.system.entry.js} +1 -1
  312. package/dist/ionic/{p-8cf94fc1.js → p-5885e9af.js} +1 -1
  313. package/dist/ionic/p-5bd4e009.entry.js +4 -0
  314. package/dist/ionic/{p-b3e79338.system.entry.js → p-5e6bc319.system.entry.js} +1 -1
  315. package/dist/ionic/{p-939d903b.entry.js → p-64ab3eb3.entry.js} +1 -1
  316. package/dist/ionic/p-671dbd61.js +4 -0
  317. package/dist/ionic/{p-702d85d8.system.js → p-67951604.system.js} +1 -1
  318. package/dist/ionic/{p-835e0346.entry.js → p-6797887a.entry.js} +1 -1
  319. package/dist/ionic/{p-b923f3d7.js → p-6a309574.js} +1 -1
  320. package/dist/ionic/{p-a4cda7a8.system.entry.js → p-6e23777e.system.entry.js} +1 -1
  321. package/dist/ionic/{p-06e6d235.system.entry.js → p-7047a40c.system.entry.js} +2 -2
  322. package/dist/ionic/p-70dcf429.js +4 -0
  323. package/dist/ionic/p-710cea83.system.js +4 -0
  324. package/dist/ionic/p-7b44e419.js +4 -0
  325. package/dist/ionic/p-80a9b397.entry.js +4 -0
  326. package/dist/ionic/{p-9b5301cc.system.entry.js → p-823890d5.system.entry.js} +1 -1
  327. package/dist/ionic/{p-a57f223c.system.js → p-83a455fd.system.js} +1 -1
  328. package/dist/ionic/{p-baa7cb1e.entry.js → p-8ad82eb3.entry.js} +1 -1
  329. package/dist/ionic/{p-c1229981.entry.js → p-8b15ca22.entry.js} +1 -1
  330. package/dist/ionic/{p-a7e2ac5c.js → p-8b1be026.js} +1 -1
  331. package/dist/ionic/p-8dbdb163.system.js +4 -0
  332. package/dist/ionic/p-8ddfecbf.entry.js +4 -0
  333. package/dist/ionic/{p-b4b4bb29.system.js → p-9292fd42.system.js} +1 -1
  334. package/dist/ionic/{p-41477ad9.system.js → p-958f1c70.system.js} +1 -1
  335. package/dist/ionic/{p-5ce11143.entry.js → p-965677f1.entry.js} +1 -1
  336. package/dist/ionic/p-9c6787e2.entry.js +4 -0
  337. package/dist/ionic/{p-6500b298.system.js → p-9e852ff1.system.js} +1 -1
  338. package/dist/ionic/p-a11c1aff.system.entry.js +4 -0
  339. package/dist/ionic/{p-419eb426.js → p-a135e3ba.js} +1 -1
  340. package/dist/ionic/p-a31099a4.entry.js +4 -0
  341. package/dist/ionic/p-a6bc00ab.entry.js +4 -0
  342. package/dist/ionic/p-a9c3699b.system.entry.js +4 -0
  343. package/dist/ionic/p-ac668fb8.entry.js +4 -0
  344. package/dist/ionic/p-ad4b4f73.system.entry.js +4 -0
  345. package/dist/ionic/{p-ab4cff27.system.js → p-aec8a70a.system.js} +1 -1
  346. package/dist/ionic/p-b673ee9b.entry.js +4 -0
  347. package/dist/ionic/p-be0f6600.system.js +4 -0
  348. package/dist/ionic/p-beb64be7.system.entry.js +4 -0
  349. package/dist/ionic/{p-dd837fa8.entry.js → p-c1e725db.entry.js} +1 -1
  350. package/dist/ionic/p-c2db1374.system.js +4 -0
  351. package/dist/ionic/p-c3547c7a.system.js +4 -0
  352. package/dist/ionic/{p-c7fd81ba.system.js → p-c4de53af.system.js} +1 -1
  353. package/dist/ionic/p-c700acef.system.js +4 -0
  354. package/dist/ionic/p-c919498d.entry.js +4 -0
  355. package/dist/ionic/{p-3f88eab8.system.entry.js → p-cc615985.system.entry.js} +1 -1
  356. package/dist/ionic/p-d48872b1.system.js +4 -0
  357. package/dist/ionic/p-d4fba36b.system.entry.js +4 -0
  358. package/dist/ionic/{p-22813b28.system.entry.js → p-d61a2cee.system.entry.js} +1 -1
  359. package/dist/ionic/{p-c31fc05f.system.entry.js → p-db5043df.system.entry.js} +1 -1
  360. package/dist/ionic/{p-100ef961.js → p-e0b06b65.js} +1 -1
  361. package/dist/ionic/p-e5b8f2f7.js +4 -0
  362. package/dist/ionic/{p-3bad5c1a.js → p-e5fd9f10.js} +1 -1
  363. package/dist/ionic/{p-302091ab.js → p-e627ed84.js} +1 -1
  364. package/dist/ionic/{p-ccdcb022.system.js → p-e7d20dfb.system.js} +1 -1
  365. package/dist/ionic/{p-14b4348c.system.js → p-e9e5755c.system.js} +1 -1
  366. package/dist/ionic/p-ea9addc8.system.entry.js +4 -0
  367. package/dist/ionic/p-edd07654.system.entry.js +4 -0
  368. package/dist/ionic/p-f36112b4.entry.js +4 -0
  369. package/dist/ionic/p-f43f4102.entry.js +4 -0
  370. package/dist/ionic/p-f5d78105.entry.js +4 -0
  371. package/dist/ionic/p-f7769c83.js +4 -0
  372. package/dist/ionic/{p-bba2ce59.system.js → p-f9a641fa.system.js} +1 -1
  373. package/dist/ionic/{p-2e1794df.system.js → p-fa8d4788.system.js} +1 -1
  374. package/dist/ionic/p-fcb148dc.system.entry.js +4 -0
  375. package/dist/ionic/p-fcc23f25.system.entry.js +4 -0
  376. package/dist/ionic/{p-878c7aa5.system.entry.js → p-fce6b76a.system.entry.js} +1 -1
  377. package/dist/ionic/p-fdcf04c3.system.entry.js +4 -0
  378. package/dist/ionic/{p-a0b6d438.js → p-fe1f93f2.js} +1 -1
  379. package/dist/types/components/backdrop/backdrop.d.ts +3 -0
  380. package/dist/types/components/datetime/datetime.d.ts +1 -0
  381. package/dist/types/components/datetime/utils/data.d.ts +2 -2
  382. package/dist/types/components/input/input.d.ts +2 -0
  383. package/dist/types/components/menu/menu.d.ts +1 -1
  384. package/dist/types/components/picker/picker.d.ts +131 -74
  385. package/dist/types/components/picker-column/picker-column.d.ts +39 -94
  386. package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +102 -0
  387. package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +8 -0
  388. package/dist/types/components/picker-internal/picker-internal.d.ts +102 -0
  389. package/dist/types/components/radio-group/radio-group-interface.d.ts +1 -0
  390. package/dist/types/components/radio-group/radio-group.d.ts +8 -1
  391. package/dist/types/components/router/router.d.ts +2 -1
  392. package/dist/types/components/select/select.d.ts +6 -1
  393. package/dist/types/components/skeleton-text/skeleton-text.d.ts +9 -1
  394. package/dist/types/components/textarea/textarea.d.ts +2 -0
  395. package/dist/types/components/toast/animations/utils.d.ts +15 -4
  396. package/dist/types/components/toast/gestures/swipe-to-dismiss.d.ts +9 -0
  397. package/dist/types/components/toast/toast-interface.d.ts +2 -0
  398. package/dist/types/components/toast/toast.d.ts +28 -1
  399. package/dist/types/components.d.ts +159 -157
  400. package/dist/types/interface.d.ts +2 -6
  401. package/dist/types/utils/animation/animation-interface.d.ts +4 -4
  402. package/dist/types/utils/browser/index.d.ts +11 -2
  403. package/dist/types/utils/config.d.ts +2 -2
  404. package/dist/types/utils/forms/compare-with-utils.d.ts +18 -0
  405. package/dist/types/utils/forms/index.d.ts +1 -0
  406. package/dist/types/utils/gesture/gesture-controller.d.ts +0 -1
  407. package/dist/types/utils/hardware-back-button.d.ts +4 -0
  408. package/dist/types/utils/overlays.d.ts +3 -5
  409. package/dist/types/utils/slot-mutation-controller.d.ts +2 -2
  410. package/hydrate/index.js +2003 -1567
  411. package/package.json +1 -1
  412. package/components/ion-picker-column-option.d.ts +0 -11
  413. package/components/ion-picker-column-option.js +0 -52
  414. package/components/ion-picker-legacy-column.d.ts +0 -11
  415. package/components/ion-picker-legacy-column.js +0 -9
  416. package/components/ion-picker-legacy.js +0 -309
  417. package/components/picker-column2.js +0 -379
  418. package/dist/cjs/index-306a7476.js +0 -32
  419. package/dist/cjs/ion-picker-column-option.cjs.entry.js +0 -35
  420. package/dist/collection/components/item/test/text/item.e2e.js +0 -14
  421. package/dist/collection/components/picker-column-option/picker-column-option.js +0 -68
  422. package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +0 -18
  423. package/dist/collection/components/picker-legacy/picker.ios.css +0 -367
  424. package/dist/collection/components/picker-legacy/picker.js +0 -817
  425. package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +0 -25
  426. package/dist/collection/components/picker-legacy-column/picker-column.js +0 -419
  427. package/dist/collection/utils/test/overlays/overlays-scroll-blocking.spec.js +0 -65
  428. package/dist/esm/index-7a14ecec.js +0 -29
  429. package/dist/esm/ion-picker-column-option.entry.js +0 -31
  430. package/dist/esm-es5/index-0aa6e61f.js +0 -4
  431. package/dist/esm-es5/index-f0cc4e14.js +0 -4
  432. package/dist/esm-es5/input-shims-d0c93e5d.js +0 -4
  433. package/dist/esm-es5/input.utils-ec063df4.js +0 -4
  434. package/dist/esm-es5/ion-picker-column-option.entry.js +0 -4
  435. package/dist/esm-es5/ion-picker-column.entry.js +0 -4
  436. package/dist/esm-es5/ion-picker.entry.js +0 -4
  437. package/dist/esm-es5/md.transition-66f18369.js +0 -4
  438. package/dist/esm-es5/overlays-789cd7a7.js +0 -4
  439. package/dist/esm-es5/swipe-back-cc4c2bcb.js +0 -4
  440. package/dist/ionic/p-0c244faf.entry.js +0 -4
  441. package/dist/ionic/p-20cf4994.js +0 -4
  442. package/dist/ionic/p-234b9617.system.entry.js +0 -4
  443. package/dist/ionic/p-25c34422.system.entry.js +0 -4
  444. package/dist/ionic/p-276afddd.js +0 -4
  445. package/dist/ionic/p-2804781b.entry.js +0 -4
  446. package/dist/ionic/p-2ad38423.system.entry.js +0 -4
  447. package/dist/ionic/p-2ba9414e.entry.js +0 -4
  448. package/dist/ionic/p-2e8e0045.js +0 -4
  449. package/dist/ionic/p-332f64af.system.entry.js +0 -4
  450. package/dist/ionic/p-352c0232.system.entry.js +0 -4
  451. package/dist/ionic/p-3602001b.system.js +0 -4
  452. package/dist/ionic/p-3632220b.system.js +0 -4
  453. package/dist/ionic/p-39074595.entry.js +0 -4
  454. package/dist/ionic/p-439e20ef.entry.js +0 -4
  455. package/dist/ionic/p-4cd588b3.system.entry.js +0 -4
  456. package/dist/ionic/p-67aab78f.js +0 -4
  457. package/dist/ionic/p-67eecef4.system.js +0 -4
  458. package/dist/ionic/p-6893f6e4.entry.js +0 -4
  459. package/dist/ionic/p-77e7a9c8.entry.js +0 -4
  460. package/dist/ionic/p-7c66a566.system.entry.js +0 -4
  461. package/dist/ionic/p-8b4ab236.entry.js +0 -4
  462. package/dist/ionic/p-9403b297.system.entry.js +0 -4
  463. package/dist/ionic/p-966cf574.system.entry.js +0 -4
  464. package/dist/ionic/p-97c65aa5.js +0 -4
  465. package/dist/ionic/p-992d3bad.entry.js +0 -4
  466. package/dist/ionic/p-9ab6f3e6.system.js +0 -4
  467. package/dist/ionic/p-9b89cbde.js +0 -4
  468. package/dist/ionic/p-9c967a65.system.entry.js +0 -4
  469. package/dist/ionic/p-a21b8d05.entry.js +0 -4
  470. package/dist/ionic/p-b0cee324.entry.js +0 -4
  471. package/dist/ionic/p-b1142133.entry.js +0 -4
  472. package/dist/ionic/p-b4cbb736.js +0 -4
  473. package/dist/ionic/p-b6a8588f.entry.js +0 -4
  474. package/dist/ionic/p-b6f8ee31.entry.js +0 -4
  475. package/dist/ionic/p-ba70d455.entry.js +0 -4
  476. package/dist/ionic/p-bd7a3269.entry.js +0 -4
  477. package/dist/ionic/p-c32bf078.system.entry.js +0 -4
  478. package/dist/ionic/p-cc196b34.js +0 -4
  479. package/dist/ionic/p-d1de1188.js +0 -4
  480. package/dist/ionic/p-d21bfe66.system.entry.js +0 -4
  481. package/dist/ionic/p-d3952bd5.system.entry.js +0 -4
  482. package/dist/ionic/p-dc565ca3.js +0 -4
  483. package/dist/ionic/p-dfa756ed.system.js +0 -4
  484. package/dist/ionic/p-e88ed07f.system.js +0 -4
  485. package/dist/ionic/p-eb07ec1a.system.entry.js +0 -4
  486. package/dist/ionic/p-eb5697b5.system.js +0 -4
  487. package/dist/ionic/p-ee800093.entry.js +0 -4
  488. package/dist/ionic/p-f0559c5d.system.entry.js +0 -4
  489. package/dist/ionic/p-fdd22426.entry.js +0 -4
  490. package/dist/ionic/p-ff5a10f9.system.js +0 -4
  491. package/dist/types/components/picker/picker-interfaces.d.ts +0 -8
  492. package/dist/types/components/picker-column-option/picker-column-option.d.ts +0 -16
  493. package/dist/types/components/picker-legacy/picker.d.ts +0 -158
  494. package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
  495. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.enter.js +0 -0
  496. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.leave.js +0 -0
  497. /package/dist/collection/components/picker/{picker-interfaces.js → picker-interface.js} +0 -0
  498. /package/dist/collection/components/{picker-legacy-column → picker-column}/test/test.utils.js +0 -0
  499. /package/dist/collection/components/{picker-column/picker-column-interfaces.js → picker-column-internal/picker-column-internal-interfaces.js} +0 -0
  500. /package/dist/collection/components/{picker-legacy/picker-interface.js → picker-internal/picker-internal-interfaces.js} +0 -0
  501. /package/dist/esm-es5/{data-12e24f00.js → data-44d9e816.js} +0 -0
  502. /package/dist/esm-es5/{index-7a14ecec.js → index-a5d50daf.js} +0 -0
  503. /package/dist/ionic/{p-bb849ebb.js → p-17240d90.js} +0 -0
  504. /package/dist/ionic/{p-0e94957a.system.js → p-792919fd.system.js} +0 -0
  505. /package/dist/ionic/{p-b347cfd1.js → p-7b30edcc.js} +0 -0
  506. /package/dist/ionic/{p-e4219e27.system.js → p-b8c3f071.system.js} +0 -0
  507. /package/dist/types/components/{picker-legacy → picker}/animations/ios.enter.d.ts +0 -0
  508. /package/dist/types/components/{picker-legacy → picker}/animations/ios.leave.d.ts +0 -0
  509. /package/dist/types/components/{picker-legacy → picker}/picker-interface.d.ts +0 -0
  510. /package/dist/types/components/{picker-legacy-column → picker-column}/test/test.utils.d.ts +0 -0
  511. /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,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,
@@ -5,7 +5,6 @@ import { doc } from "./browser/index";
5
5
  import { config } from "../global/config";
6
6
  import { getIonMode } from "../global/ionic-global";
7
7
  import { CoreDelegate } from "./framework-delegate";
8
- import { BACKDROP_NO_SCROLL } from "./gesture/gesture-controller";
9
8
  import { OVERLAY_BACK_BUTTON_PRIORITY } from "./hardware-back-button";
10
9
  import { addEventListener, componentOnReady, focusElement, getElementRoot, removeEventListener } from "./helpers";
11
10
  import { printIonWarning } from "./logging";
@@ -29,10 +28,7 @@ export const alertController = /*@__PURE__*/ createController('ion-alert');
29
28
  export const actionSheetController = /*@__PURE__*/ createController('ion-action-sheet');
30
29
  export const loadingController = /*@__PURE__*/ createController('ion-loading');
31
30
  export const modalController = /*@__PURE__*/ createController('ion-modal');
32
- /**
33
- * @deprecated Use the inline ion-picker component instead.
34
- */
35
- export const pickerController = /*@__PURE__*/ createController('ion-picker-legacy');
31
+ export const pickerController = /*@__PURE__*/ createController('ion-picker');
36
32
  export const popoverController = /*@__PURE__*/ createController('ion-popover');
37
33
  export const toastController = /*@__PURE__*/ createController('ion-toast');
38
34
  /**
@@ -142,7 +138,7 @@ const focusLastDescendant = (ref, overlay) => {
142
138
  * Should NOT include: Toast
143
139
  */
144
140
  const trapKeyboardFocus = (ev, doc) => {
145
- const lastOverlay = getPresentedOverlay(doc, 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker-legacy,ion-popover');
141
+ const lastOverlay = getPresentedOverlay(doc, 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover');
146
142
  const target = ev.target;
147
143
  /**
148
144
  * If no active overlay, ignore this event.
@@ -327,7 +323,7 @@ export const dismissOverlay = (doc, data, role, overlayTag, id) => {
327
323
  */
328
324
  export const getOverlays = (doc, selector) => {
329
325
  if (selector === undefined) {
330
- selector = 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker-legacy,ion-popover,ion-toast';
326
+ selector = 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover,ion-toast';
331
327
  }
332
328
  return Array.from(doc.querySelectorAll(selector)).filter((c) => c.overlayIndex > 0);
333
329
  };
@@ -393,7 +389,6 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
393
389
  return;
394
390
  }
395
391
  setRootAriaHidden(true);
396
- document.body.classList.add(BACKDROP_NO_SCROLL);
397
392
  overlay.presented = true;
398
393
  overlay.willPresent.emit();
399
394
  (_a = overlay.willPresentShorthand) === null || _a === void 0 ? void 0 : _a.emit();
@@ -456,14 +451,12 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
456
451
  if (!overlay.presented) {
457
452
  return false;
458
453
  }
459
- const lastOverlay = doc !== undefined && getPresentedOverlays(doc).length === 1;
460
454
  /**
461
455
  * If this is the last visible overlay then
462
456
  * we want to re-add the root to the accessibility tree.
463
457
  */
464
- if (lastOverlay) {
458
+ if (doc !== undefined && getPresentedOverlays(doc).length === 1) {
465
459
  setRootAriaHidden(false);
466
- document.body.classList.remove(BACKDROP_NO_SCROLL);
467
460
  }
468
461
  overlay.presented = false;
469
462
  try {
@@ -569,6 +562,7 @@ export const safeCall = (handler, arg) => {
569
562
  };
570
563
  export const BACKDROP = 'backdrop';
571
564
  export const GESTURE = 'gesture';
565
+ export const OVERLAY_GESTURE_PRIORITY = 39;
572
566
  /**
573
567
  * Creates a delegate controller.
574
568
  *
@@ -9,13 +9,14 @@ import { raf } from "./helpers";
9
9
  * This is not needed for components using native slots in the Shadow DOM.
10
10
  * @internal
11
11
  * @param el The host element to observe
12
- * @param slotName mutationCallback will fire when nodes on this slot change
12
+ * @param slotName mutationCallback will fire when nodes on these slot(s) change
13
13
  * @param mutationCallback The callback to fire whenever the slotted content changes
14
14
  */
15
15
  export const createSlotMutationController = (el, slotName, mutationCallback) => {
16
16
  let hostMutationObserver;
17
17
  let slottedContentMutationObserver;
18
18
  if (win !== undefined && 'MutationObserver' in win) {
19
+ const slots = Array.isArray(slotName) ? slotName : [slotName];
19
20
  hostMutationObserver = new MutationObserver((entries) => {
20
21
  for (const entry of entries) {
21
22
  for (const node of entry.addedNodes) {
@@ -23,7 +24,7 @@ export const createSlotMutationController = (el, slotName, mutationCallback) =>
23
24
  * Check to see if the added node
24
25
  * is our slotted content.
25
26
  */
26
- if (node.nodeType === Node.ELEMENT_NODE && node.slot === slotName) {
27
+ if (node.nodeType === Node.ELEMENT_NODE && slots.includes(node.slot)) {
27
28
  /**
28
29
  * If so, we want to watch the slotted
29
30
  * content itself for changes. This lets us