@ionic/core 7.5.4-dev.11701112913.1ea61220 → 7.5.4-dev.11702935369.11a4baba

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 (507) hide show
  1. package/components/animation.js +11 -12
  2. package/components/checkbox.js +0 -2
  3. package/components/index4.js +12 -10
  4. package/components/index5.js +22 -0
  5. package/components/input-shims.js +7 -12
  6. package/components/input.utils.js +2 -3
  7. package/components/ion-datetime.js +2 -2
  8. package/components/ion-input.js +8 -31
  9. package/components/ion-modal.js +2 -2
  10. package/components/ion-range.js +0 -2
  11. package/components/ion-select.js +29 -44
  12. package/components/ion-skeleton-text.js +1 -14
  13. package/components/ion-textarea.js +7 -30
  14. package/components/ion-toast.js +74 -419
  15. package/components/ion-toggle.js +0 -2
  16. package/components/item.js +2 -2
  17. package/components/label.js +2 -2
  18. package/components/overlays.js +1 -2
  19. package/components/radio-group.js +0 -2
  20. package/components/radio.js +2 -42
  21. package/dist/cjs/{animation-d101aa7a.js → animation-1083855c.js} +12 -13
  22. package/dist/cjs/{app-globals-ef077808.js → app-globals-d1892126.js} +1 -1
  23. package/dist/cjs/{button-active-69c3bee4.js → button-active-e93ab34d.js} +2 -2
  24. package/dist/cjs/{capacitor-f68447d3.js → capacitor-2ffba62a.js} +1 -1
  25. package/dist/cjs/{haptic-a74c2767.js → haptic-678abc9f.js} +1 -1
  26. package/dist/cjs/index-306a7476.js +32 -0
  27. package/dist/cjs/{index-9146d04a.js → index-4323b635.js} +14 -12
  28. package/dist/cjs/{index-adbcffee.js → index-84c4c696.js} +3 -3
  29. package/dist/cjs/{index-e9634bc9.js → index-9f379eaa.js} +1 -1
  30. package/dist/cjs/index.cjs.js +10 -10
  31. package/dist/cjs/{input-shims-3e3f35b9.js → input-shims-b0a75a01.js} +10 -15
  32. package/dist/cjs/{input.utils-bdb6953c.js → input.utils-0fe3097c.js} +3 -4
  33. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  34. package/dist/cjs/ion-action-sheet.cjs.entry.js +8 -8
  35. package/dist/cjs/ion-alert.cjs.entry.js +8 -8
  36. package/dist/cjs/ion-app_8.cjs.entry.js +11 -11
  37. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  38. package/dist/cjs/ion-back-button.cjs.entry.js +3 -3
  39. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  40. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +3 -3
  41. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  42. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  43. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -4
  44. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  45. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  46. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  47. package/dist/cjs/ion-datetime_3.cjs.entry.js +10 -10
  48. package/dist/cjs/ion-fab_3.cjs.entry.js +3 -3
  49. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  50. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +2 -2
  51. package/dist/cjs/ion-input.cjs.entry.js +14 -37
  52. package/dist/cjs/ion-item-option_3.cjs.entry.js +2 -2
  53. package/dist/cjs/ion-item_8.cjs.entry.js +7 -20
  54. package/dist/cjs/ion-loading.cjs.entry.js +5 -5
  55. package/dist/cjs/ion-menu_3.cjs.entry.js +8 -8
  56. package/dist/cjs/ion-modal.cjs.entry.js +10 -10
  57. package/dist/cjs/ion-nav_2.cjs.entry.js +3 -3
  58. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +5 -5
  59. package/dist/cjs/ion-picker-internal.cjs.entry.js +1 -1
  60. package/dist/cjs/ion-popover.cjs.entry.js +6 -6
  61. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  62. package/dist/cjs/ion-radio_2.cjs.entry.js +3 -8
  63. package/dist/cjs/ion-range.cjs.entry.js +2 -4
  64. package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -7
  65. package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -6
  66. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  67. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  68. package/dist/cjs/ion-searchbar.cjs.entry.js +3 -3
  69. package/dist/cjs/ion-segment_2.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-select_3.cjs.entry.js +38 -54
  71. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  72. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  73. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +6 -6
  74. package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
  75. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  76. package/dist/cjs/ion-textarea.cjs.entry.js +12 -35
  77. package/dist/cjs/ion-toast.cjs.entry.js +93 -435
  78. package/dist/cjs/ion-toggle.cjs.entry.js +6 -8
  79. package/dist/cjs/{ionic-global-4538d91c.js → ionic-global-91f1f8f2.js} +1 -1
  80. package/dist/cjs/ionic.cjs.js +4 -4
  81. package/dist/cjs/{ios.transition-7972d9e3.js → ios.transition-facbe500.js} +4 -4
  82. package/dist/cjs/{keyboard-840107b3.js → keyboard-38f2bb7b.js} +3 -3
  83. package/dist/cjs/{keyboard-controller-019f42df.js → keyboard-controller-50beb83a.js} +2 -2
  84. package/dist/cjs/{keyboard-43df0428.js → keyboard-fd7db491.js} +1 -1
  85. package/dist/cjs/loader.cjs.js +4 -4
  86. package/dist/cjs/{md.transition-6e61a10f.js → md.transition-0a7d53f1.js} +4 -4
  87. package/dist/cjs/{notch-controller-c22d1344.js → notch-controller-f4f6af5d.js} +1 -1
  88. package/dist/cjs/{overlays-ba1a1e21.js → overlays-91bb8ff7.js} +2 -4
  89. package/dist/cjs/{status-tap-2e9f9c86.js → status-tap-a9d8edcf.js} +1 -1
  90. package/dist/collection/components/checkbox/checkbox.js +0 -2
  91. package/dist/collection/components/datetime/datetime.ios.css +0 -1
  92. package/dist/collection/components/datetime/datetime.md.css +0 -1
  93. package/dist/collection/components/icon/test/dir/heart-broken.svg +0 -0
  94. package/dist/collection/components/input/input.ios.css +3 -10
  95. package/dist/collection/components/input/input.js +6 -31
  96. package/dist/collection/components/input/input.md.css +12 -13
  97. package/dist/collection/components/item/item.ios.css +15 -85
  98. package/dist/collection/components/item/item.md.css +15 -85
  99. package/dist/collection/components/item/test/basic/item.e2e.js +0 -26
  100. package/dist/collection/components/item/test/disabled/item.e2e.js +1 -0
  101. package/dist/collection/components/item/test/icons/heart-broken.svg +0 -0
  102. package/dist/collection/components/item/test/text/item.e2e.js +14 -0
  103. package/dist/collection/components/label/label.ios.css +3 -14
  104. package/dist/collection/components/label/label.md.css +3 -14
  105. package/dist/collection/components/modal/gestures/swipe-to-close.js +1 -2
  106. package/dist/collection/components/note/test/a11y/note.e2e.js +0 -43
  107. package/dist/collection/components/radio/radio.js +2 -5
  108. package/dist/collection/components/radio-group/radio-group.js +0 -24
  109. package/dist/collection/components/range/range.js +0 -2
  110. package/dist/collection/components/select/select.ios.css +7 -61
  111. package/dist/collection/components/select/select.js +28 -45
  112. package/dist/collection/components/select/select.md.css +19 -64
  113. package/dist/collection/components/select/test/label/select.e2e.js +1 -1
  114. package/dist/collection/components/select/test/legacy/wrapping/select.e2e.js +1 -1
  115. package/dist/collection/components/skeleton-text/skeleton-text.js +0 -39
  116. package/dist/collection/components/textarea/textarea.ios.css +5 -37
  117. package/dist/collection/components/textarea/textarea.js +5 -30
  118. package/dist/collection/components/textarea/textarea.md.css +14 -47
  119. package/dist/collection/components/toast/animations/ios.enter.js +1 -2
  120. package/dist/collection/components/toast/animations/md.enter.js +3 -4
  121. package/dist/collection/components/toast/animations/utils.js +14 -20
  122. package/dist/collection/components/toast/toast.ios.css +10 -10
  123. package/dist/collection/components/toast/toast.js +1 -104
  124. package/dist/collection/components/toast/toast.md.css +0 -10
  125. package/dist/collection/components/toggle/toggle.js +0 -2
  126. package/dist/collection/utils/animation/animation.js +11 -12
  127. package/dist/collection/utils/browser/index.js +22 -0
  128. package/dist/collection/utils/forms/index.js +0 -1
  129. package/dist/collection/utils/input-shims/input-shims.js +6 -12
  130. package/dist/collection/utils/menu-controller/index.js +12 -10
  131. package/dist/collection/utils/overlays.js +0 -1
  132. package/dist/collection/utils/slot-mutation-controller.js +2 -3
  133. package/dist/docs.json +2 -127
  134. package/dist/esm/{animation-cf3dd234.js → animation-8aa13916.js} +12 -13
  135. package/dist/esm/{app-globals-ba8b3a06.js → app-globals-8d413354.js} +1 -1
  136. package/dist/esm/{button-active-109ba60d.js → button-active-c7a04c9a.js} +2 -2
  137. package/dist/esm/{capacitor-f1f25364.js → capacitor-b4979570.js} +1 -1
  138. package/dist/esm/{haptic-1a66d69f.js → haptic-1243b917.js} +1 -1
  139. package/dist/esm/index-7a14ecec.js +29 -0
  140. package/dist/esm/{index-50582f1c.js → index-d62333a6.js} +3 -3
  141. package/dist/esm/{index-6a48e009.js → index-e2052f20.js} +14 -12
  142. package/dist/esm/{index-c9e82353.js → index-f0cc4e14.js} +1 -1
  143. package/dist/esm/index.js +10 -10
  144. package/dist/esm/{input-shims-1d767845.js → input-shims-d0c93e5d.js} +9 -14
  145. package/dist/esm/{input.utils-2cf5e372.js → input.utils-ec063df4.js} +3 -4
  146. package/dist/esm/ion-accordion_2.entry.js +3 -3
  147. package/dist/esm/ion-action-sheet.entry.js +8 -8
  148. package/dist/esm/ion-alert.entry.js +8 -8
  149. package/dist/esm/ion-app_8.entry.js +11 -11
  150. package/dist/esm/ion-avatar_3.entry.js +2 -2
  151. package/dist/esm/ion-back-button.entry.js +3 -3
  152. package/dist/esm/ion-backdrop.entry.js +2 -2
  153. package/dist/esm/ion-breadcrumb_2.entry.js +3 -3
  154. package/dist/esm/ion-button_2.entry.js +2 -2
  155. package/dist/esm/ion-card_5.entry.js +2 -2
  156. package/dist/esm/ion-checkbox.entry.js +2 -4
  157. package/dist/esm/ion-chip.entry.js +2 -2
  158. package/dist/esm/ion-col_3.entry.js +2 -2
  159. package/dist/esm/ion-datetime-button.entry.js +2 -2
  160. package/dist/esm/ion-datetime_3.entry.js +10 -10
  161. package/dist/esm/ion-fab_3.entry.js +3 -3
  162. package/dist/esm/ion-img.entry.js +2 -2
  163. package/dist/esm/ion-infinite-scroll_2.entry.js +2 -2
  164. package/dist/esm/ion-input.entry.js +14 -37
  165. package/dist/esm/ion-item-option_3.entry.js +2 -2
  166. package/dist/esm/ion-item_8.entry.js +7 -20
  167. package/dist/esm/ion-loading.entry.js +5 -5
  168. package/dist/esm/ion-menu_3.entry.js +8 -8
  169. package/dist/esm/ion-modal.entry.js +10 -10
  170. package/dist/esm/ion-nav_2.entry.js +3 -3
  171. package/dist/esm/ion-picker-column-internal.entry.js +5 -5
  172. package/dist/esm/ion-picker-internal.entry.js +1 -1
  173. package/dist/esm/ion-popover.entry.js +6 -6
  174. package/dist/esm/ion-progress-bar.entry.js +2 -2
  175. package/dist/esm/ion-radio_2.entry.js +3 -8
  176. package/dist/esm/ion-range.entry.js +2 -4
  177. package/dist/esm/ion-refresher_2.entry.js +7 -7
  178. package/dist/esm/ion-reorder_2.entry.js +6 -6
  179. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  180. package/dist/esm/ion-route_4.entry.js +2 -2
  181. package/dist/esm/ion-searchbar.entry.js +3 -3
  182. package/dist/esm/ion-segment_2.entry.js +2 -2
  183. package/dist/esm/ion-select_3.entry.js +34 -50
  184. package/dist/esm/ion-spinner.entry.js +2 -2
  185. package/dist/esm/ion-split-pane.entry.js +2 -2
  186. package/dist/esm/ion-tab-bar_2.entry.js +6 -6
  187. package/dist/esm/ion-tab_2.entry.js +1 -1
  188. package/dist/esm/ion-text.entry.js +2 -2
  189. package/dist/esm/ion-textarea.entry.js +12 -35
  190. package/dist/esm/ion-toast.entry.js +77 -419
  191. package/dist/esm/ion-toggle.entry.js +6 -8
  192. package/dist/esm/{ionic-global-7efdecd0.js → ionic-global-8673c5ce.js} +1 -1
  193. package/dist/esm/ionic.js +5 -5
  194. package/dist/esm/{ios.transition-e20d71bc.js → ios.transition-2fdb6f26.js} +4 -4
  195. package/dist/esm/{keyboard-b6230bfb.js → keyboard-b063f012.js} +1 -1
  196. package/dist/esm/{keyboard-9f771a04.js → keyboard-b551279d.js} +3 -3
  197. package/dist/esm/{keyboard-controller-3f0faa10.js → keyboard-controller-0c2dce71.js} +2 -2
  198. package/dist/esm/loader.js +5 -5
  199. package/dist/esm/{md.transition-a8469407.js → md.transition-6f8b3cd0.js} +4 -4
  200. package/dist/esm/{notch-controller-3f79197e.js → notch-controller-8c9c0e54.js} +1 -1
  201. package/dist/esm/{overlays-d79b34b4.js → overlays-d4c45da6.js} +3 -4
  202. package/dist/esm/polyfills/core-js.js +0 -0
  203. package/dist/esm/polyfills/dom.js +0 -0
  204. package/dist/esm/polyfills/es5-html-element.js +0 -0
  205. package/dist/esm/polyfills/index.js +0 -0
  206. package/dist/esm/polyfills/system.js +0 -0
  207. package/dist/esm/{status-tap-7ca28a1c.js → status-tap-71db1a8f.js} +1 -1
  208. package/dist/esm-es5/{animation-cf3dd234.js → animation-8aa13916.js} +1 -1
  209. package/dist/esm-es5/app-globals-8d413354.js +4 -0
  210. package/dist/esm-es5/{button-active-109ba60d.js → button-active-c7a04c9a.js} +1 -1
  211. package/dist/esm-es5/{capacitor-f1f25364.js → capacitor-b4979570.js} +1 -1
  212. package/dist/esm-es5/{haptic-1a66d69f.js → haptic-1243b917.js} +1 -1
  213. package/dist/esm-es5/{index-50582f1c.js → index-d62333a6.js} +1 -1
  214. package/dist/esm-es5/index-e2052f20.js +4 -0
  215. package/dist/esm-es5/index-f0cc4e14.js +4 -0
  216. package/dist/esm-es5/index.js +1 -1
  217. package/dist/esm-es5/input-shims-d0c93e5d.js +4 -0
  218. package/dist/esm-es5/input.utils-ec063df4.js +4 -0
  219. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  220. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  221. package/dist/esm-es5/ion-alert.entry.js +1 -1
  222. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  223. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  224. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  225. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  226. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  227. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  228. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  229. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  230. package/dist/esm-es5/ion-chip.entry.js +1 -1
  231. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  232. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  233. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  234. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  235. package/dist/esm-es5/ion-img.entry.js +1 -1
  236. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  237. package/dist/esm-es5/ion-input.entry.js +1 -1
  238. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  239. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  240. package/dist/esm-es5/ion-loading.entry.js +1 -1
  241. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  242. package/dist/esm-es5/ion-modal.entry.js +1 -1
  243. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  244. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  245. package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
  246. package/dist/esm-es5/ion-popover.entry.js +1 -1
  247. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  248. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  249. package/dist/esm-es5/ion-range.entry.js +1 -1
  250. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  251. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  252. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  253. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  254. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  255. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  256. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  257. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  258. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  259. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  260. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  261. package/dist/esm-es5/ion-text.entry.js +1 -1
  262. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  263. package/dist/esm-es5/ion-toast.entry.js +1 -1
  264. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  265. package/dist/esm-es5/{ionic-global-7efdecd0.js → ionic-global-8673c5ce.js} +1 -1
  266. package/dist/esm-es5/ionic.js +1 -1
  267. package/dist/esm-es5/{ios.transition-e20d71bc.js → ios.transition-2fdb6f26.js} +1 -1
  268. package/dist/esm-es5/{keyboard-b6230bfb.js → keyboard-b063f012.js} +1 -1
  269. package/dist/esm-es5/{keyboard-9f771a04.js → keyboard-b551279d.js} +1 -1
  270. package/dist/esm-es5/{keyboard-controller-3f0faa10.js → keyboard-controller-0c2dce71.js} +1 -1
  271. package/dist/esm-es5/loader.js +1 -1
  272. package/dist/esm-es5/md.transition-6f8b3cd0.js +4 -0
  273. package/dist/esm-es5/{notch-controller-3f79197e.js → notch-controller-8c9c0e54.js} +1 -1
  274. package/dist/esm-es5/{overlays-d79b34b4.js → overlays-d4c45da6.js} +1 -1
  275. package/dist/esm-es5/{status-tap-7ca28a1c.js → status-tap-71db1a8f.js} +1 -1
  276. package/dist/html.html-data.json +1 -14
  277. package/dist/ionic/index.esm.js +1 -1
  278. package/dist/ionic/ionic.esm.js +1 -1
  279. package/dist/ionic/ionic.js +1 -1
  280. package/dist/ionic/p-02863edb.system.js +4 -0
  281. package/dist/ionic/{p-bf3396e1.entry.js → p-0335e66c.entry.js} +1 -1
  282. package/dist/ionic/{p-1b5b6845.system.entry.js → p-076e622f.system.entry.js} +1 -1
  283. package/dist/ionic/{p-35787a6f.entry.js → p-08dcf03a.entry.js} +1 -1
  284. package/dist/ionic/{p-4c50b357.system.entry.js → p-091702af.system.entry.js} +1 -1
  285. package/dist/ionic/{p-e53f2605.entry.js → p-094dbfa5.entry.js} +1 -1
  286. package/dist/ionic/{p-1fc6b5a5.system.entry.js → p-0993782a.system.entry.js} +1 -1
  287. package/dist/ionic/p-0d8e9076.system.entry.js +4 -0
  288. package/dist/ionic/p-0f23c3a5.entry.js +4 -0
  289. package/dist/ionic/p-0f4f11eb.entry.js +4 -0
  290. package/dist/ionic/{p-8a9760f7.system.entry.js → p-10a2ab8c.system.entry.js} +1 -1
  291. package/dist/ionic/{p-3fc0b7ba.entry.js → p-1289df52.entry.js} +1 -1
  292. package/dist/ionic/{p-35e25602.system.entry.js → p-14be0381.system.entry.js} +1 -1
  293. package/dist/ionic/{p-2151a4a4.system.entry.js → p-153ea88b.system.entry.js} +1 -1
  294. package/dist/ionic/{p-e4d66e2d.system.entry.js → p-176a386b.system.entry.js} +1 -1
  295. package/dist/ionic/{p-15512a5e.system.entry.js → p-1acd1607.system.entry.js} +1 -1
  296. package/dist/ionic/{p-eec1aa12.system.entry.js → p-1b16c2ef.system.entry.js} +1 -1
  297. package/dist/ionic/{p-a3434028.system.entry.js → p-1df460d5.system.entry.js} +1 -1
  298. package/dist/ionic/{p-0148306b.system.js → p-1e87e3fb.system.js} +1 -1
  299. package/dist/ionic/{p-3962542f.system.entry.js → p-202654b4.system.entry.js} +1 -1
  300. package/dist/ionic/p-276afddd.js +4 -0
  301. package/dist/ionic/{p-ce20c101.entry.js → p-287d76e0.entry.js} +1 -1
  302. package/dist/ionic/{p-20ff4d7f.system.entry.js → p-2954d245.system.entry.js} +1 -1
  303. package/dist/ionic/p-2ac243b7.entry.js +4 -0
  304. package/dist/ionic/p-2e8e0045.js +4 -0
  305. package/dist/ionic/{p-138a4a93.entry.js → p-31589ed7.entry.js} +1 -1
  306. package/dist/ionic/{p-70bf6086.system.entry.js → p-3299adbf.system.entry.js} +1 -1
  307. package/dist/ionic/p-3602001b.system.js +4 -0
  308. package/dist/ionic/p-3632220b.system.js +4 -0
  309. package/dist/ionic/{p-3dedd258.system.entry.js → p-3878d22f.system.entry.js} +1 -1
  310. package/dist/ionic/{p-957f3028.system.entry.js → p-38fbf9f5.system.entry.js} +1 -1
  311. package/dist/ionic/{p-13dd7d20.system.js → p-3b3046e8.system.js} +1 -1
  312. package/dist/ionic/{p-e5fd9f10.js → p-3bad5c1a.js} +1 -1
  313. package/dist/ionic/{p-0c40f7d3.system.js → p-3d074f21.system.js} +1 -1
  314. package/dist/ionic/p-3daa6ecf.js +4 -0
  315. package/dist/ionic/{p-510bc27b.entry.js → p-40f5a803.entry.js} +1 -1
  316. package/dist/ionic/{p-958f1c70.system.js → p-41477ad9.system.js} +1 -1
  317. package/dist/ionic/{p-a135e3ba.js → p-419eb426.js} +1 -1
  318. package/dist/ionic/{p-0e8335b9.entry.js → p-44723fa5.entry.js} +1 -1
  319. package/dist/ionic/{p-5b978c94.system.js → p-4639874e.system.js} +2 -2
  320. package/dist/ionic/p-4c724478.entry.js +4 -0
  321. package/dist/ionic/{p-f6d089a7.entry.js → p-4d06fd5b.entry.js} +1 -1
  322. package/dist/ionic/{p-938c4956.js → p-4f91b9c6.js} +1 -1
  323. package/dist/ionic/{p-ed8a02a2.system.entry.js → p-51086b36.system.entry.js} +1 -1
  324. package/dist/ionic/{p-abaa9b48.system.js → p-5504ca9b.system.js} +1 -1
  325. package/dist/ionic/{p-020dd47f.entry.js → p-55a8f9a3.entry.js} +1 -1
  326. package/dist/ionic/p-5916b355.system.entry.js +4 -0
  327. package/dist/ionic/{p-bedc16f0.system.entry.js → p-5b9cb91d.system.entry.js} +1 -1
  328. package/dist/ionic/{p-2d86b19a.entry.js → p-6008efa0.entry.js} +1 -1
  329. package/dist/ionic/{p-cb6c380e.system.entry.js → p-664cb3ad.system.entry.js} +1 -1
  330. package/dist/ionic/p-67eecef4.system.js +4 -0
  331. package/dist/ionic/{p-27923249.system.entry.js → p-6a61d423.system.entry.js} +1 -1
  332. package/dist/ionic/{p-e525dbea.entry.js → p-6e4225ed.entry.js} +1 -1
  333. package/dist/ionic/{p-00a10b94.system.entry.js → p-793625e5.system.entry.js} +1 -1
  334. package/dist/ionic/{p-89703003.entry.js → p-7e6cf80c.entry.js} +1 -1
  335. package/dist/ionic/{p-c7138053.system.entry.js → p-7eaa28eb.system.entry.js} +1 -1
  336. package/dist/ionic/{p-696c63fb.system.entry.js → p-7fd77f56.system.entry.js} +1 -1
  337. package/dist/ionic/{p-11cb4e19.js → p-81c818e7.js} +1 -1
  338. package/dist/ionic/p-843fe6e3.entry.js +4 -0
  339. package/dist/ionic/p-8708a93c.entry.js +4 -0
  340. package/dist/ionic/{p-ab1908ba.system.entry.js → p-889118cf.system.entry.js} +1 -1
  341. package/dist/ionic/{p-9471d511.system.entry.js → p-88cfa8f1.system.entry.js} +1 -1
  342. package/dist/ionic/{p-edd568c5.js → p-8bda8767.js} +1 -1
  343. package/dist/ionic/p-8c44e074.system.entry.js +4 -0
  344. package/dist/ionic/{p-53f75103.system.js → p-8c63eccf.system.js} +1 -1
  345. package/dist/ionic/{p-5885e9af.js → p-8cf94fc1.js} +1 -1
  346. package/dist/ionic/p-8d9c5be5.system.entry.js +4 -0
  347. package/dist/ionic/{p-5a7df436.entry.js → p-8f518e79.entry.js} +1 -1
  348. package/dist/ionic/p-910c1904.system.entry.js +4 -0
  349. package/dist/ionic/{p-47826f19.entry.js → p-93a2c76b.entry.js} +1 -1
  350. package/dist/ionic/p-94154db4.js +4 -0
  351. package/dist/ionic/{p-c4381a06.entry.js → p-952c64ea.entry.js} +1 -1
  352. package/dist/ionic/{p-60f25049.js → p-959e7a7a.js} +1 -1
  353. package/dist/ionic/p-97c65aa5.js +4 -0
  354. package/dist/ionic/p-9ab6f3e6.system.js +4 -0
  355. package/dist/ionic/p-9c7a56f0.entry.js +4 -0
  356. package/dist/ionic/{p-51b94085.system.entry.js → p-9c933855.system.entry.js} +1 -1
  357. package/dist/ionic/{p-c2e199ac.entry.js → p-9da6eef4.entry.js} +1 -1
  358. package/dist/ionic/p-9e4bb700.entry.js +4 -0
  359. package/dist/ionic/{p-50375f3b.system.entry.js → p-a134a81b.system.entry.js} +1 -1
  360. package/dist/ionic/p-a30595f3.system.entry.js +4 -0
  361. package/dist/ionic/p-a3b6e1b2.entry.js +4 -0
  362. package/dist/ionic/{p-d3278cb8.entry.js → p-a7c33806.entry.js} +1 -1
  363. package/dist/ionic/p-a809a205.js +4 -0
  364. package/dist/ionic/{p-aec8a70a.system.js → p-ab4cff27.system.js} +1 -1
  365. package/dist/ionic/p-ad227931.system.js +4 -0
  366. package/dist/ionic/{p-5c7107b4.system.entry.js → p-ae2e4e30.system.entry.js} +1 -1
  367. package/dist/ionic/{p-8be2b964.entry.js → p-b1200f55.entry.js} +1 -1
  368. package/dist/ionic/{p-400a78f3.system.entry.js → p-b4085a03.system.entry.js} +1 -1
  369. package/dist/ionic/{p-9292fd42.system.js → p-b4b4bb29.system.js} +1 -1
  370. package/dist/ionic/{p-6a309574.js → p-b923f3d7.js} +1 -1
  371. package/dist/ionic/{p-25b8d65c.entry.js → p-b95cc39b.entry.js} +1 -1
  372. package/dist/ionic/{p-3e8d7ed8.js → p-b977b57a.js} +1 -1
  373. package/dist/ionic/{p-f9a641fa.system.js → p-bba2ce59.system.js} +1 -1
  374. package/dist/ionic/{p-d73eb00e.entry.js → p-bd946be0.entry.js} +1 -1
  375. package/dist/ionic/p-c096895d.system.js +4 -0
  376. package/dist/ionic/{p-a03566c4.system.entry.js → p-c2af8468.system.entry.js} +2 -2
  377. package/dist/ionic/p-c3b62be8.system.entry.js +4 -0
  378. package/dist/ionic/{p-2fb115dc.entry.js → p-c5106edf.entry.js} +1 -1
  379. package/dist/ionic/p-c75422d5.entry.js +4 -0
  380. package/dist/ionic/p-c87d155e.entry.js +4 -0
  381. package/dist/ionic/p-cbe7738f.entry.js +4 -0
  382. package/dist/ionic/p-cc196b34.js +4 -0
  383. package/dist/ionic/{p-1511dc35.system.js → p-cc68ad40.system.js} +1 -1
  384. package/dist/ionic/{p-e7d20dfb.system.js → p-ccdcb022.system.js} +1 -1
  385. package/dist/ionic/{p-6825ff8d.entry.js → p-cd1c8ab2.entry.js} +1 -1
  386. package/dist/ionic/{p-a6880f79.system.entry.js → p-cd3a87bd.system.entry.js} +1 -1
  387. package/dist/ionic/{p-7dafac2c.system.entry.js → p-ce62bf2c.system.entry.js} +1 -1
  388. package/dist/ionic/{p-ebdaf11b.entry.js → p-ce9bf0ed.entry.js} +1 -1
  389. package/dist/ionic/p-d05b431a.system.entry.js +4 -0
  390. package/dist/ionic/{p-71e70a57.system.entry.js → p-d0c701d0.system.entry.js} +1 -1
  391. package/dist/ionic/{p-03a36678.entry.js → p-d1ac0094.entry.js} +1 -1
  392. package/dist/ionic/p-d1de1188.js +4 -0
  393. package/dist/ionic/{p-f8febce9.system.entry.js → p-d27ade6f.system.entry.js} +1 -1
  394. package/dist/ionic/p-d37d3ebc.system.entry.js +4 -0
  395. package/dist/ionic/{p-b3d50a72.entry.js → p-d59f70db.entry.js} +1 -1
  396. package/dist/ionic/{p-152998a6.system.entry.js → p-d9c86724.system.entry.js} +1 -1
  397. package/dist/ionic/{p-df18d20d.js → p-da26ba41.js} +1 -1
  398. package/dist/ionic/{p-4430713b.entry.js → p-da6b2907.entry.js} +1 -1
  399. package/dist/ionic/p-dee844d7.js +4 -0
  400. package/dist/ionic/{p-9939c98e.entry.js → p-e23c3d22.entry.js} +1 -1
  401. package/dist/ionic/{p-bc48e521.system.entry.js → p-ecbc7728.system.entry.js} +1 -1
  402. package/dist/ionic/{p-12d62aa9.entry.js → p-ef0d410f.entry.js} +1 -1
  403. package/dist/ionic/{p-6abde4f1.system.entry.js → p-f2743f0f.system.entry.js} +1 -1
  404. package/dist/ionic/{p-a9424586.entry.js → p-f30dabf4.entry.js} +1 -1
  405. package/dist/ionic/{p-3e1deb37.system.entry.js → p-f323209c.system.entry.js} +1 -1
  406. package/dist/ionic/{p-664cc492.entry.js → p-f33808d4.entry.js} +1 -1
  407. package/dist/ionic/{p-bc6e32d2.entry.js → p-f3d770d2.entry.js} +1 -1
  408. package/dist/ionic/p-f47f2024.entry.js +4 -0
  409. package/dist/ionic/p-f9336ef9.system.js +4 -0
  410. package/dist/ionic/{p-d2de097b.entry.js → p-fc758470.entry.js} +1 -1
  411. package/dist/ionic/p-ff5a10f9.system.js +4 -0
  412. package/dist/types/components/input/input.d.ts +0 -2
  413. package/dist/types/components/radio-group/radio-group-interface.d.ts +0 -1
  414. package/dist/types/components/radio-group/radio-group.d.ts +1 -8
  415. package/dist/types/components/router/router.d.ts +1 -2
  416. package/dist/types/components/select/select.d.ts +1 -6
  417. package/dist/types/components/skeleton-text/skeleton-text.d.ts +1 -9
  418. package/dist/types/components/textarea/textarea.d.ts +0 -2
  419. package/dist/types/components/toast/animations/utils.d.ts +4 -15
  420. package/dist/types/components/toast/toast-interface.d.ts +0 -2
  421. package/dist/types/components/toast/toast.d.ts +1 -28
  422. package/dist/types/components.d.ts +6 -37
  423. package/dist/types/interface.d.ts +5 -1
  424. package/dist/types/utils/animation/animation-interface.d.ts +4 -4
  425. package/dist/types/utils/browser/index.d.ts +2 -11
  426. package/dist/types/utils/forms/index.d.ts +0 -1
  427. package/dist/types/utils/hardware-back-button.d.ts +0 -4
  428. package/dist/types/utils/overlays.d.ts +0 -1
  429. package/dist/types/utils/slot-mutation-controller.d.ts +2 -2
  430. package/dist/types/utils/test/playwright/page/utils/goto.d.ts +1 -1
  431. package/hydrate/index.js +169 -616
  432. package/package.json +31 -30
  433. package/dist/cjs/compare-with-utils-c0444525.js +0 -44
  434. package/dist/cjs/index-c8d52405.js +0 -10
  435. package/dist/collection/components/input/test/slot/input.e2e.js +0 -51
  436. package/dist/collection/components/select/test/slot/select.e2e.js +0 -67
  437. package/dist/collection/components/textarea/test/slot/textarea.e2e.js +0 -51
  438. package/dist/collection/components/toast/gestures/swipe-to-dismiss.js +0 -267
  439. package/dist/collection/components/toast/test/swipe-gesture/toast.e2e.js +0 -84
  440. package/dist/collection/utils/forms/compare-with-utils.js +0 -39
  441. package/dist/esm/compare-with-utils-4928c09d.js +0 -41
  442. package/dist/esm/index-a5d50daf.js +0 -7
  443. package/dist/esm-es5/app-globals-ba8b3a06.js +0 -4
  444. package/dist/esm-es5/compare-with-utils-4928c09d.js +0 -4
  445. package/dist/esm-es5/index-6a48e009.js +0 -4
  446. package/dist/esm-es5/index-c9e82353.js +0 -4
  447. package/dist/esm-es5/input-shims-1d767845.js +0 -4
  448. package/dist/esm-es5/input.utils-2cf5e372.js +0 -4
  449. package/dist/esm-es5/md.transition-a8469407.js +0 -4
  450. package/dist/ionic/p-02663394.system.js +0 -4
  451. package/dist/ionic/p-0fa05d7a.system.entry.js +0 -4
  452. package/dist/ionic/p-11104d0d.entry.js +0 -4
  453. package/dist/ionic/p-314c4dee.js +0 -4
  454. package/dist/ionic/p-33c650c5.entry.js +0 -4
  455. package/dist/ionic/p-3554b264.js +0 -4
  456. package/dist/ionic/p-37afecd5.entry.js +0 -4
  457. package/dist/ionic/p-3afb9c3d.entry.js +0 -4
  458. package/dist/ionic/p-3bc3d880.system.js +0 -4
  459. package/dist/ionic/p-40dd5937.system.js +0 -4
  460. package/dist/ionic/p-43716898.js +0 -4
  461. package/dist/ionic/p-494e75ad.js +0 -4
  462. package/dist/ionic/p-4e3c07a6.system.js +0 -4
  463. package/dist/ionic/p-4e4ee05e.js +0 -4
  464. package/dist/ionic/p-561cc050.system.js +0 -4
  465. package/dist/ionic/p-57b14769.js +0 -4
  466. package/dist/ionic/p-647fcea8.entry.js +0 -4
  467. package/dist/ionic/p-6b45cfd0.system.entry.js +0 -4
  468. package/dist/ionic/p-6c89025e.system.entry.js +0 -4
  469. package/dist/ionic/p-6dc21cd1.system.entry.js +0 -4
  470. package/dist/ionic/p-70dcf429.js +0 -4
  471. package/dist/ionic/p-710cea83.system.js +0 -4
  472. package/dist/ionic/p-78a8e1e8.entry.js +0 -4
  473. package/dist/ionic/p-79841aa8.entry.js +0 -4
  474. package/dist/ionic/p-7ac30f6a.entry.js +0 -4
  475. package/dist/ionic/p-7acd17bc.entry.js +0 -4
  476. package/dist/ionic/p-7b44e419.js +0 -4
  477. package/dist/ionic/p-81bdfa1c.system.entry.js +0 -4
  478. package/dist/ionic/p-8414ed31.entry.js +0 -4
  479. package/dist/ionic/p-92ac915c.system.js +0 -4
  480. package/dist/ionic/p-a6b819ca.entry.js +0 -4
  481. package/dist/ionic/p-ad6ed7ab.system.entry.js +0 -4
  482. package/dist/ionic/p-be499f29.entry.js +0 -4
  483. package/dist/ionic/p-c2db1374.system.js +0 -4
  484. package/dist/ionic/p-c3547c7a.system.js +0 -4
  485. package/dist/ionic/p-c700acef.system.js +0 -4
  486. package/dist/ionic/p-cd73cfd1.system.entry.js +0 -4
  487. package/dist/ionic/p-e3b7a2d0.system.entry.js +0 -4
  488. package/dist/ionic/p-e9fe3c8b.system.entry.js +0 -4
  489. package/dist/ionic/p-f2d4e3c8.entry.js +0 -4
  490. package/dist/ionic/p-f4ccdc77.js +0 -4
  491. package/dist/ionic/p-f7769c83.js +0 -4
  492. package/dist/node_modules/ionicons/dist/collection/components/icon/icon.css +0 -144
  493. package/dist/types/components/toast/gestures/swipe-to-dismiss.d.ts +0 -9
  494. package/dist/types/utils/forms/compare-with-utils.d.ts +0 -18
  495. /package/dist/cjs/{index-73186843.js → index-53026db1.js} +0 -0
  496. /package/dist/cjs/{index-09471526.js → index-677c4d13.js} +0 -0
  497. /package/dist/esm/{index-c132c5f1.js → index-4d016006.js} +0 -0
  498. /package/dist/esm/{index-4392ebcb.js → index-8eb0239b.js} +0 -0
  499. /package/dist/esm-es5/{index-c132c5f1.js → index-4d016006.js} +0 -0
  500. /package/dist/esm-es5/{index-a5d50daf.js → index-7a14ecec.js} +0 -0
  501. /package/dist/esm-es5/{index-4392ebcb.js → index-8eb0239b.js} +0 -0
  502. /package/dist/ionic/{p-8050b9b9.system.js → p-0c55ffe1.system.js} +0 -0
  503. /package/dist/ionic/{p-792919fd.system.js → p-0e94957a.system.js} +0 -0
  504. /package/dist/ionic/{p-dab42c1b.system.js → p-2814c8e5.system.js} +0 -0
  505. /package/dist/ionic/{p-f5e886cd.js → p-8a40746c.js} +0 -0
  506. /package/dist/ionic/{p-7b30edcc.js → p-b347cfd1.js} +0 -0
  507. /package/dist/ionic/{p-ea96fa73.js → p-e90d610c.js} +0 -0
@@ -334,7 +334,9 @@
334
334
  }
335
335
 
336
336
  .native-wrapper {
337
+ display: flex;
337
338
  position: relative;
339
+ flex-grow: 1;
338
340
  width: 100%;
339
341
  height: 100%;
340
342
  }
@@ -405,12 +407,6 @@
405
407
  word-break: break-word;
406
408
  }
407
409
 
408
- .textarea-wrapper-inner {
409
- display: flex;
410
- width: 100%;
411
- min-height: inherit;
412
- }
413
-
414
410
  :host(.ion-touched.ion-invalid) {
415
411
  --highlight-color: var(--highlight-color-invalid);
416
412
  }
@@ -686,13 +682,6 @@
686
682
  margin-bottom: 0px;
687
683
  }
688
684
 
689
- :host(.textarea-label-placement-stacked) ::slotted([slot=start]),
690
- :host(.textarea-label-placement-stacked) ::slotted([slot=end]),
691
- :host(.textarea-label-placement-floating) ::slotted([slot=start]),
692
- :host(.textarea-label-placement-floating) ::slotted([slot=end]) {
693
- margin-top: 8px;
694
- }
695
-
696
685
  /**
697
686
  * This makes the label sit over the textarea
698
687
  * when the textarea is blurred and has no value.
@@ -718,7 +707,9 @@
718
707
  /**
719
708
  * This makes the label sit above the textarea.
720
709
  */
721
- :host(.label-floating) .label-text-wrapper {
710
+ :host(.textarea-label-placement-stacked) .label-text-wrapper,
711
+ :host(.has-focus.textarea-label-placement-floating) .label-text-wrapper,
712
+ :host(.has-value.textarea-label-placement-floating) .label-text-wrapper {
722
713
  transform: translateY(50%) scale(0.75);
723
714
  /**
724
715
  * Label text should not extend
@@ -727,29 +718,6 @@
727
718
  max-width: calc(100% / 0.75);
728
719
  }
729
720
 
730
- .start-slot-wrapper, .end-slot-wrapper {
731
- padding-left: 0;
732
- padding-right: 0;
733
- padding-top: var(--padding-top);
734
- padding-bottom: var(--padding-bottom);
735
- display: flex;
736
- flex-shrink: 0;
737
- align-self: start;
738
- }
739
-
740
- ::slotted([slot=start]),
741
- ::slotted([slot=end]) {
742
- margin-top: 0;
743
- }
744
-
745
- ::slotted([slot=start]) {
746
- margin-inline-end: 16px;
747
- }
748
-
749
- ::slotted([slot=end]) {
750
- margin-inline-start: 16px;
751
- }
752
-
753
721
  /**
754
722
  * Convert a font size to a dynamic font size.
755
723
  * Fonts that participate in Dynamic Type should use
@@ -13,8 +13,6 @@ import { getCounterText } from "../input/input.utils";
13
13
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
14
14
  *
15
15
  * @slot label - The label text to associate with the textarea. Use the `labelPlacement` property to control where the label is placed relative to the textarea. Use this if you need to render a label with custom HTML. (EXPERIMENTAL)
16
- * @slot start - Content to display at the leading edge of the textarea. (EXPERIMENTAL)
17
- * @slot end - Content to display at the trailing edge of the textarea. (EXPERIMENTAL)
18
16
  */
19
17
  export class Textarea {
20
18
  constructor() {
@@ -123,7 +121,7 @@ export class Textarea {
123
121
  connectedCallback() {
124
122
  const { el } = this;
125
123
  this.legacyFormController = createLegacyFormController(el);
126
- this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => forceUpdate(this));
124
+ this.slotMutationController = createSlotMutationController(el, 'label', () => forceUpdate(this));
127
125
  this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
128
126
  this.emitStyle();
129
127
  this.debounceChanged();
@@ -191,8 +189,6 @@ export class Textarea {
191
189
  'has-placeholder': this.placeholder !== undefined,
192
190
  'has-value': this.hasValue(),
193
191
  'has-focus': this.hasFocus,
194
- // TODO(FW-2876): remove this
195
- legacy: !!this.legacy,
196
192
  });
197
193
  }
198
194
  }
@@ -364,41 +360,20 @@ Developers can use the "legacy" property to continue using the legacy form marku
364
360
  return (h("div", { class: "textarea-bottom" }, this.renderHintText(), this.renderCounter()));
365
361
  }
366
362
  renderTextarea() {
367
- const { inputId, disabled, fill, shape, labelPlacement, el, hasFocus } = this;
363
+ const { inputId, disabled, fill, shape, labelPlacement } = this;
368
364
  const mode = getIonMode(this);
369
365
  const value = this.getValue();
370
366
  const inItem = hostContext('ion-item', this.el);
371
367
  const shouldRenderHighlight = mode === 'md' && fill !== 'outline' && !inItem;
372
- const hasValue = this.hasValue();
373
- const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
374
- /**
375
- * If the label is stacked, it should always sit above the textarea.
376
- * For floating labels, the label should move above the textarea if
377
- * the textarea has a value, is focused, or has anything in either
378
- * the start or end slot.
379
- *
380
- * If there is content in the start slot, the label would overlap
381
- * it if not forced to float. This is also applied to the end slot
382
- * because with the default or solid fills, the textarea is not
383
- * vertically centered in the container, but the label is. This
384
- * causes the slots and label to appear vertically offset from each
385
- * other when the label isn't floating above the input. This doesn't
386
- * apply to the outline fill, but this was not accounted for to keep
387
- * things consistent.
388
- *
389
- * TODO(FW-5592): Remove hasStartEndSlots condition
390
- */
391
- const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
392
368
  return (h(Host, { class: createColorClasses(this.color, {
393
369
  [mode]: true,
394
- 'has-value': hasValue,
395
- 'has-focus': hasFocus,
396
- 'label-floating': labelShouldFloat,
370
+ 'has-value': this.hasValue(),
371
+ 'has-focus': this.hasFocus,
397
372
  [`textarea-fill-${fill}`]: fill !== undefined,
398
373
  [`textarea-shape-${shape}`]: shape !== undefined,
399
374
  [`textarea-label-placement-${labelPlacement}`]: true,
400
375
  'textarea-disabled': disabled,
401
- }) }, h("label", { class: "textarea-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { class: "textarea-wrapper-inner" }, h("div", { class: "start-slot-wrapper" }, h("slot", { name: "start" })), h("div", { class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, h("textarea", Object.assign({ class: "native-textarea", ref: (el) => (this.nativeInput = el), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown }, this.inheritedAttributes), value)), h("div", { class: "end-slot-wrapper" }, h("slot", { name: "end" }))), shouldRenderHighlight && h("div", { class: "textarea-highlight" })), this.renderBottomContent()));
376
+ }) }, h("label", { class: "textarea-wrapper" }, this.renderLabelContainer(), h("div", { class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, h("textarea", Object.assign({ class: "native-textarea", ref: (el) => (this.nativeInput = el), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown }, this.inheritedAttributes), value)), shouldRenderHighlight && h("div", { class: "textarea-highlight" })), this.renderBottomContent()));
402
377
  }
403
378
  render() {
404
379
  const { legacyFormController } = this;
@@ -334,7 +334,9 @@
334
334
  }
335
335
 
336
336
  .native-wrapper {
337
+ display: flex;
337
338
  position: relative;
339
+ flex-grow: 1;
338
340
  width: 100%;
339
341
  height: 100%;
340
342
  }
@@ -405,12 +407,6 @@
405
407
  word-break: break-word;
406
408
  }
407
409
 
408
- .textarea-wrapper-inner {
409
- display: flex;
410
- width: 100%;
411
- min-height: inherit;
412
- }
413
-
414
410
  :host(.ion-touched.ion-invalid) {
415
411
  --highlight-color: var(--highlight-color-invalid);
416
412
  }
@@ -686,13 +682,6 @@
686
682
  margin-bottom: 0px;
687
683
  }
688
684
 
689
- :host(.textarea-label-placement-stacked) ::slotted([slot=start]),
690
- :host(.textarea-label-placement-stacked) ::slotted([slot=end]),
691
- :host(.textarea-label-placement-floating) ::slotted([slot=start]),
692
- :host(.textarea-label-placement-floating) ::slotted([slot=end]) {
693
- margin-top: 8px;
694
- }
695
-
696
685
  /**
697
686
  * This makes the label sit over the textarea
698
687
  * when the textarea is blurred and has no value.
@@ -718,7 +707,9 @@
718
707
  /**
719
708
  * This makes the label sit above the textarea.
720
709
  */
721
- :host(.label-floating) .label-text-wrapper {
710
+ :host(.textarea-label-placement-stacked) .label-text-wrapper,
711
+ :host(.has-focus.textarea-label-placement-floating) .label-text-wrapper,
712
+ :host(.has-value.textarea-label-placement-floating) .label-text-wrapper {
722
713
  transform: translateY(50%) scale(0.75);
723
714
  /**
724
715
  * Label text should not extend
@@ -727,29 +718,6 @@
727
718
  max-width: calc(100% / 0.75);
728
719
  }
729
720
 
730
- .start-slot-wrapper, .end-slot-wrapper {
731
- padding-left: 0;
732
- padding-right: 0;
733
- padding-top: var(--padding-top);
734
- padding-bottom: var(--padding-bottom);
735
- display: flex;
736
- flex-shrink: 0;
737
- align-self: start;
738
- }
739
-
740
- ::slotted([slot=start]),
741
- ::slotted([slot=end]) {
742
- margin-top: 0;
743
- }
744
-
745
- ::slotted([slot=start]) {
746
- margin-inline-end: 16px;
747
- }
748
-
749
- ::slotted([slot=end]) {
750
- margin-inline-start: 16px;
751
- }
752
-
753
721
  /**
754
722
  * Convert a font size to a dynamic font size.
755
723
  * Fonts that participate in Dynamic Type should use
@@ -959,7 +927,9 @@
959
927
  }
960
928
  }
961
929
 
962
- :host(.label-floating.textarea-fill-solid) .label-text-wrapper {
930
+ :host(.textarea-fill-solid.textarea-label-placement-stacked) .label-text-wrapper,
931
+ :host(.has-focus.textarea-fill-solid.textarea-label-placement-floating) .label-text-wrapper,
932
+ :host(.has-value.textarea-fill-solid.textarea-label-placement-floating) .label-text-wrapper {
963
933
  /**
964
934
  * Label text should not extend
965
935
  * beyond the bounds of the textarea.
@@ -1091,7 +1061,9 @@
1091
1061
  /**
1092
1062
  * This makes the label sit above the textarea.
1093
1063
  */
1094
- :host(.label-floating.textarea-fill-outline) .label-text-wrapper {
1064
+ :host(.has-focus.textarea-fill-outline.textarea-label-placement-floating) .label-text-wrapper,
1065
+ :host(.has-value.textarea-fill-outline.textarea-label-placement-floating) .label-text-wrapper,
1066
+ :host(.textarea-fill-outline.textarea-label-placement-stacked) .label-text-wrapper {
1095
1067
  transform: translateY(-32%) scale(0.75);
1096
1068
  margin-left: 0;
1097
1069
  margin-right: 0;
@@ -1123,13 +1095,6 @@
1123
1095
  margin-bottom: 0px;
1124
1096
  }
1125
1097
 
1126
- :host(.textarea-fill-outline.textarea-label-placement-stacked) ::slotted([slot=start]),
1127
- :host(.textarea-fill-outline.textarea-label-placement-stacked) ::slotted([slot=end]),
1128
- :host(.textarea-fill-outline.textarea-label-placement-floating) ::slotted([slot=start]),
1129
- :host(.textarea-fill-outline.textarea-label-placement-floating) ::slotted([slot=end]) {
1130
- margin-top: 12px;
1131
- }
1132
-
1133
1098
  :host(.textarea-fill-outline) .textarea-outline-container {
1134
1099
  left: 0;
1135
1100
  right: 0;
@@ -1265,7 +1230,9 @@
1265
1230
  * the floating/stacked label. We simulate this "cut out"
1266
1231
  * by removing the top border from the notch fragment.
1267
1232
  */
1268
- :host(.label-floating.textarea-fill-outline) .textarea-outline-notch {
1233
+ :host(.has-focus.textarea-fill-outline.textarea-label-placement-floating) .textarea-outline-notch,
1234
+ :host(.has-value.textarea-fill-outline.textarea-label-placement-floating) .textarea-outline-notch,
1235
+ :host(.textarea-fill-outline.textarea-label-placement-stacked) .textarea-outline-notch {
1269
1236
  border-top: none;
1270
1237
  }
1271
1238
 
@@ -3,7 +3,6 @@
3
3
  */
4
4
  import { createAnimation } from "../../../utils/animation/animation";
5
5
  import { getElementRoot } from "../../../utils/helpers";
6
- import { getOffsetForMiddlePosition } from "./utils";
7
6
  /**
8
7
  * iOS Toast Enter Animation
9
8
  */
@@ -19,7 +18,7 @@ export const iosEnterAnimation = (baseEl, opts) => {
19
18
  wrapperAnimation.fromTo('transform', 'translateY(-100%)', `translateY(${top})`);
20
19
  break;
21
20
  case 'middle':
22
- const topPosition = getOffsetForMiddlePosition(baseEl.clientHeight, wrapperEl.clientHeight);
21
+ const topPosition = Math.floor(baseEl.clientHeight / 2 - wrapperEl.clientHeight / 2);
23
22
  wrapperEl.style.top = `${topPosition}px`;
24
23
  wrapperAnimation.fromTo('opacity', 0.01, 1);
25
24
  break;
@@ -3,7 +3,6 @@
3
3
  */
4
4
  import { createAnimation } from "../../../utils/animation/animation";
5
5
  import { getElementRoot } from "../../../utils/helpers";
6
- import { getOffsetForMiddlePosition } from "./utils";
7
6
  /**
8
7
  * MD Toast Enter Animation
9
8
  */
@@ -16,16 +15,16 @@ export const mdEnterAnimation = (baseEl, opts) => {
16
15
  wrapperAnimation.addElement(wrapperEl);
17
16
  switch (position) {
18
17
  case 'top':
19
- wrapperEl.style.setProperty('transform', `translateY(${top})`);
18
+ wrapperEl.style.top = top;
20
19
  wrapperAnimation.fromTo('opacity', 0.01, 1);
21
20
  break;
22
21
  case 'middle':
23
- const topPosition = getOffsetForMiddlePosition(baseEl.clientHeight, wrapperEl.clientHeight);
22
+ const topPosition = Math.floor(baseEl.clientHeight / 2 - wrapperEl.clientHeight / 2);
24
23
  wrapperEl.style.top = `${topPosition}px`;
25
24
  wrapperAnimation.fromTo('opacity', 0.01, 1);
26
25
  break;
27
26
  default:
28
- wrapperEl.style.setProperty('transform', `translateY(${bottom})`);
27
+ wrapperEl.style.bottom = bottom;
29
28
  wrapperAnimation.fromTo('opacity', 0.01, 1);
30
29
  break;
31
30
  }
@@ -7,12 +7,10 @@ import { printIonWarning } from "../../../utils/logging/index";
7
7
  * Calculate the CSS top and bottom position of the toast, to be used
8
8
  * as starting points for the animation keyframes.
9
9
  *
10
- * The default animations for both MD and iOS
11
- * use translateY, which calculates from the
12
- * top edge of the screen. This behavior impacts
13
- * how we compute the offset when a toast has
14
- * position='bottom' since we need to calculate from
15
- * the bottom edge of the screen instead.
10
+ * Note that MD animates bottom-positioned toasts using style.bottom,
11
+ * which calculates from the bottom edge of the screen, while iOS uses
12
+ * translateY, which calculates from the top edge of the screen. This
13
+ * is why the bottom calculates differ slightly between modes.
16
14
  *
17
15
  * @param position The value of the toast's position prop.
18
16
  * @param positionAnchor The element the toast should be anchored to,
@@ -27,7 +25,7 @@ export function getAnimationPosition(position, positionAnchor, mode, toast) {
27
25
  */
28
26
  let offset;
29
27
  if (mode === 'md') {
30
- offset = position === 'top' ? 8 : -8;
28
+ offset = 8;
31
29
  }
32
30
  else {
33
31
  offset = position === 'top' ? 10 : -10;
@@ -50,7 +48,12 @@ export function getAnimationPosition(position, positionAnchor, mode, toast) {
50
48
  * to the top edge of the anchor. We want to calculate from the
51
49
  * bottom edge of the screen instead.
52
50
  */
53
- offset -= win.innerHeight - box.top;
51
+ if (mode === 'md') {
52
+ offset += win.innerHeight - box.top;
53
+ }
54
+ else {
55
+ offset -= win.innerHeight - box.top;
56
+ }
54
57
  }
55
58
  /**
56
59
  * We don't include safe area here because that should already be
@@ -64,7 +67,9 @@ export function getAnimationPosition(position, positionAnchor, mode, toast) {
64
67
  else {
65
68
  return {
66
69
  top: `calc(${offset}px + var(--ion-safe-area-top, 0px))`,
67
- bottom: `calc(${offset}px - var(--ion-safe-area-bottom, 0px))`,
70
+ bottom: mode === 'md'
71
+ ? `calc(${offset}px + var(--ion-safe-area-bottom, 0px))`
72
+ : `calc(${offset}px - var(--ion-safe-area-bottom, 0px))`,
68
73
  };
69
74
  }
70
75
  }
@@ -78,14 +83,3 @@ function warnIfAnchorIsHidden(positionAnchor, toast) {
78
83
  printIonWarning('The positionAnchor element for ion-toast was found in the DOM, but appears to be hidden. This may lead to unexpected positioning of the toast.', toast);
79
84
  }
80
85
  }
81
- /**
82
- * Returns the top offset required to place
83
- * the toast in the middle of the screen.
84
- * Only needed when position="toast".
85
- * @param toastHeight - The height of the ion-toast element
86
- * @param wrapperHeight - The height of the .toast-wrapper element
87
- * inside the toast's shadow root.
88
- */
89
- export const getOffsetForMiddlePosition = (toastHeight, wrapperHeight) => {
90
- return Math.floor(toastHeight / 2 - wrapperHeight / 2);
91
- };
@@ -167,16 +167,6 @@
167
167
  }
168
168
  }
169
169
 
170
- .toast-wrapper.toast-top {
171
- transform: translate3d(0, -100%, 0);
172
- top: 0;
173
- }
174
-
175
- .toast-wrapper.toast-bottom {
176
- transform: translate3d(0, 100%, 0);
177
- bottom: 0;
178
- }
179
-
180
170
  .toast-container {
181
171
  display: flex;
182
172
  align-items: center;
@@ -309,10 +299,20 @@
309
299
  background: rgba(var(--ion-color-base-rgb), 0.8);
310
300
  }
311
301
  }
302
+ .toast-wrapper.toast-top {
303
+ transform: translate3d(0, -100%, 0);
304
+ top: 0;
305
+ }
306
+
312
307
  .toast-wrapper.toast-middle {
313
308
  opacity: 0.01;
314
309
  }
315
310
 
311
+ .toast-wrapper.toast-bottom {
312
+ transform: translate3d(0, 100%, 0);
313
+ bottom: 0;
314
+ }
315
+
316
316
  .toast-content {
317
317
  -webkit-padding-start: 15px;
318
318
  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 { GESTURE, createDelegateController, createTriggerController, dismiss, eventMethod, isCancel, prepareOverlay, present, safeCall, setOverlayId, } from "../../utils/overlays";
9
+ import { 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,7 +16,6 @@ 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";
20
19
  // TODO(FW-2832): types
21
20
  /**
22
21
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
@@ -42,41 +41,6 @@ export class Toast {
42
41
  this.callButtonHandler(cancelButton);
43
42
  }
44
43
  };
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
- };
80
44
  this.revealContentToScreenReader = false;
81
45
  this.overlayIndex = undefined;
82
46
  this.delegate = undefined;
@@ -97,37 +61,9 @@ export class Toast {
97
61
  this.animated = true;
98
62
  this.icon = undefined;
99
63
  this.htmlAttributes = undefined;
100
- this.swipeGesture = undefined;
101
64
  this.isOpen = false;
102
65
  this.trigger = undefined;
103
66
  }
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
- }
131
67
  onIsOpenChange(newValue, oldValue) {
132
68
  if (newValue === true && oldValue === false) {
133
69
  this.present();
@@ -189,14 +125,6 @@ export class Toast {
189
125
  if (this.duration > 0) {
190
126
  this.durationTimeout = setTimeout(() => this.dismiss(undefined, 'timeout'), this.duration);
191
127
  }
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
- }
200
128
  unlock();
201
129
  }
202
130
  /**
@@ -231,11 +159,6 @@ export class Toast {
231
159
  this.revealContentToScreenReader = false;
232
160
  }
233
161
  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();
239
162
  unlock();
240
163
  return dismissed;
241
164
  }
@@ -776,29 +699,6 @@ export class Toast {
776
699
  "text": "Additional attributes to pass to the toast."
777
700
  }
778
701
  },
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
- },
802
702
  "isOpen": {
803
703
  "type": "boolean",
804
704
  "mutable": false,
@@ -1109,9 +1009,6 @@ export class Toast {
1109
1009
  static get elementRef() { return "el"; }
1110
1010
  static get watchers() {
1111
1011
  return [{
1112
- "propName": "swipeGesture",
1113
- "methodName": "swipeGestureChanged"
1114
- }, {
1115
1012
  "propName": "isOpen",
1116
1013
  "methodName": "onIsOpenChange"
1117
1014
  }, {
@@ -167,16 +167,6 @@
167
167
  }
168
168
  }
169
169
 
170
- .toast-wrapper.toast-top {
171
- transform: translate3d(0, -100%, 0);
172
- top: 0;
173
- }
174
-
175
- .toast-wrapper.toast-bottom {
176
- transform: translate3d(0, 100%, 0);
177
- bottom: 0;
178
- }
179
-
180
170
  .toast-container {
181
171
  display: flex;
182
172
  align-items: center;
@@ -123,8 +123,6 @@ 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,
128
126
  });
129
127
  }
130
128
  }
@@ -463,16 +463,6 @@ 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;
476
466
  onFinishCallbacks.forEach((onFinishCallback) => {
477
467
  return onFinishCallback.c(currentStep, ani);
478
468
  });
@@ -677,8 +667,17 @@ export const createAnimation = (animationId) => {
677
667
  update(false, false);
678
668
  }
679
669
  }
680
- if (playTo !== undefined && !parentAnimation) {
681
- play();
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
+ }
682
681
  }
683
682
  return ani;
684
683
  };
@@ -1,5 +1,27 @@
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
+ */
4
26
  export const win = typeof window !== 'undefined' ? window : undefined;
5
27
  export const doc = typeof document !== 'undefined' ? document : undefined;
@@ -3,4 +3,3 @@
3
3
  */
4
4
  export * from './form-controller';
5
5
  export * from './notch-controller';
6
- export * from './compare-with-utils';