@ionic/core 7.5.7-dev.11701274462.156e6f06 → 7.5.7-dev.11701896424.13d40ac9

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 (379) hide show
  1. package/components/animation.js +11 -12
  2. package/components/checkbox.js +0 -2
  3. package/components/data.js +64 -14
  4. package/components/index4.js +12 -10
  5. package/components/index5.js +22 -0
  6. package/components/input-shims.js +7 -12
  7. package/components/input.utils.js +2 -3
  8. package/components/ion-datetime.js +38 -19
  9. package/components/ion-input.js +8 -31
  10. package/components/ion-modal.js +2 -2
  11. package/components/ion-range.js +0 -2
  12. package/components/ion-select.js +29 -44
  13. package/components/ion-skeleton-text.js +1 -14
  14. package/components/ion-textarea.js +7 -30
  15. package/components/ion-toast.js +74 -419
  16. package/components/ion-toggle.js +0 -2
  17. package/components/item.js +2 -2
  18. package/components/label.js +2 -2
  19. package/components/overlays.js +1 -2
  20. package/components/picker-column-internal.js +7 -12
  21. package/components/radio-group.js +0 -2
  22. package/components/radio.js +2 -42
  23. package/dist/cjs/{animation-d101aa7a.js → animation-1083855c.js} +12 -13
  24. package/dist/cjs/{button-active-ba107e4e.js → button-active-af897e0e.js} +1 -1
  25. package/dist/cjs/{capacitor-f68447d3.js → capacitor-2ffba62a.js} +1 -1
  26. package/dist/cjs/{data-c8d21093.js → data-912a6f37.js} +64 -14
  27. package/dist/cjs/{haptic-a74c2767.js → haptic-678abc9f.js} +1 -1
  28. package/dist/cjs/index-306a7476.js +32 -0
  29. package/dist/cjs/{index-56d41f51.js → index-573877f3.js} +2 -2
  30. package/dist/cjs/{index-e9634bc9.js → index-9f379eaa.js} +1 -1
  31. package/dist/cjs/{index-4f0c67e1.js → index-d7561763.js} +13 -11
  32. package/dist/cjs/index.cjs.js +8 -8
  33. package/dist/cjs/{input-shims-3e3f35b9.js → input-shims-b0a75a01.js} +10 -15
  34. package/dist/cjs/{input.utils-bdb6953c.js → input.utils-0fe3097c.js} +3 -4
  35. package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -6
  36. package/dist/cjs/ion-alert.cjs.entry.js +6 -6
  37. package/dist/cjs/ion-app_8.cjs.entry.js +8 -8
  38. package/dist/cjs/ion-checkbox.cjs.entry.js +0 -2
  39. package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
  40. package/dist/cjs/ion-datetime_3.cjs.entry.js +44 -25
  41. package/dist/cjs/ion-input.cjs.entry.js +11 -34
  42. package/dist/cjs/ion-item_8.cjs.entry.js +4 -17
  43. package/dist/cjs/ion-loading.cjs.entry.js +3 -3
  44. package/dist/cjs/ion-menu_3.cjs.entry.js +5 -5
  45. package/dist/cjs/ion-modal.cjs.entry.js +8 -8
  46. package/dist/cjs/ion-nav_2.cjs.entry.js +1 -1
  47. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +10 -14
  48. package/dist/cjs/ion-popover.cjs.entry.js +4 -4
  49. package/dist/cjs/ion-radio_2.cjs.entry.js +1 -6
  50. package/dist/cjs/ion-range.cjs.entry.js +0 -2
  51. package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
  52. package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
  53. package/dist/cjs/ion-select_3.cjs.entry.js +35 -51
  54. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
  55. package/dist/cjs/ion-textarea.cjs.entry.js +10 -33
  56. package/dist/cjs/ion-toast.cjs.entry.js +92 -434
  57. package/dist/cjs/ion-toggle.cjs.entry.js +3 -5
  58. package/dist/cjs/ionic.cjs.js +1 -1
  59. package/dist/cjs/{ios.transition-f4caf640.js → ios.transition-ac909bc8.js} +3 -3
  60. package/dist/cjs/{keyboard-840107b3.js → keyboard-38f2bb7b.js} +3 -3
  61. package/dist/cjs/{keyboard-controller-019f42df.js → keyboard-controller-50beb83a.js} +2 -2
  62. package/dist/cjs/{keyboard-43df0428.js → keyboard-fd7db491.js} +1 -1
  63. package/dist/cjs/loader.cjs.js +1 -1
  64. package/dist/cjs/{md.transition-33331e93.js → md.transition-907af519.js} +3 -3
  65. package/dist/cjs/{notch-controller-c22d1344.js → notch-controller-f4f6af5d.js} +1 -1
  66. package/dist/cjs/{overlays-4d8897dc.js → overlays-2ffc5f27.js} +1 -3
  67. package/dist/collection/collection-manifest.json +2 -2
  68. package/dist/collection/components/checkbox/checkbox.js +0 -2
  69. package/dist/collection/components/datetime/datetime.ios.css +0 -1
  70. package/dist/collection/components/datetime/datetime.js +36 -17
  71. package/dist/collection/components/datetime/datetime.md.css +0 -1
  72. package/dist/collection/components/datetime/test/manipulation.spec.js +133 -1
  73. package/dist/collection/components/datetime/test/prefer-wheel/datetime.spec.js +27 -0
  74. package/dist/collection/components/datetime/utils/manipulation.js +65 -15
  75. package/dist/collection/components/input/input.ios.css +3 -10
  76. package/dist/collection/components/input/input.js +6 -31
  77. package/dist/collection/components/input/input.md.css +12 -13
  78. package/dist/collection/components/item/item.ios.css +3 -26
  79. package/dist/collection/components/item/item.md.css +3 -26
  80. package/dist/collection/components/item/test/basic/item.e2e.js +1 -1
  81. package/dist/collection/components/item/test/disabled/item.e2e.js +1 -0
  82. package/dist/collection/components/item/test/text/item.e2e.js +14 -0
  83. package/dist/collection/components/label/label.ios.css +3 -14
  84. package/dist/collection/components/label/label.md.css +3 -14
  85. package/dist/collection/components/modal/gestures/swipe-to-close.js +1 -2
  86. package/dist/collection/components/note/test/a11y/note.e2e.js +0 -43
  87. package/dist/collection/components/picker-column-internal/picker-column-internal.ios.css +3 -11
  88. package/dist/collection/components/picker-column-internal/picker-column-internal.js +5 -27
  89. package/dist/collection/components/picker-column-internal/picker-column-internal.md.css +3 -11
  90. package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +5 -34
  91. package/dist/collection/components/radio/radio.js +2 -5
  92. package/dist/collection/components/radio-group/radio-group.js +0 -24
  93. package/dist/collection/components/range/range.js +0 -2
  94. package/dist/collection/components/select/select.ios.css +7 -61
  95. package/dist/collection/components/select/select.js +28 -45
  96. package/dist/collection/components/select/select.md.css +19 -64
  97. package/dist/collection/components/select/test/item/select.e2e.js +0 -13
  98. package/dist/collection/components/select/test/label/select.e2e.js +1 -1
  99. package/dist/collection/components/select/test/legacy/wrapping/select.e2e.js +1 -1
  100. package/dist/collection/components/skeleton-text/skeleton-text.js +0 -39
  101. package/dist/collection/components/textarea/textarea.ios.css +5 -37
  102. package/dist/collection/components/textarea/textarea.js +5 -30
  103. package/dist/collection/components/textarea/textarea.md.css +14 -47
  104. package/dist/collection/components/toast/animations/ios.enter.js +1 -2
  105. package/dist/collection/components/toast/animations/md.enter.js +3 -4
  106. package/dist/collection/components/toast/animations/utils.js +14 -20
  107. package/dist/collection/components/toast/test/toast.spec.js +0 -80
  108. package/dist/collection/components/toast/toast.ios.css +10 -10
  109. package/dist/collection/components/toast/toast.js +1 -104
  110. package/dist/collection/components/toast/toast.md.css +0 -10
  111. package/dist/collection/components/toggle/toggle.js +0 -2
  112. package/dist/collection/utils/animation/animation.js +11 -12
  113. package/dist/collection/utils/animation/test/animation.spec.js +0 -16
  114. package/dist/collection/utils/browser/index.js +22 -0
  115. package/dist/collection/utils/forms/index.js +0 -1
  116. package/dist/collection/utils/input-shims/input-shims.js +6 -12
  117. package/dist/collection/utils/menu-controller/index.js +12 -10
  118. package/dist/collection/utils/overlays.js +0 -1
  119. package/dist/collection/utils/slot-mutation-controller.js +2 -3
  120. package/dist/docs.json +12 -137
  121. package/dist/esm/{animation-cf3dd234.js → animation-8aa13916.js} +12 -13
  122. package/dist/esm/{button-active-47196c40.js → button-active-ce5cba4c.js} +1 -1
  123. package/dist/esm/{capacitor-f1f25364.js → capacitor-b4979570.js} +1 -1
  124. package/dist/esm/{data-44d9e816.js → data-316b33f5.js} +64 -14
  125. package/dist/esm/{haptic-1a66d69f.js → haptic-1243b917.js} +1 -1
  126. package/dist/esm/{index-23c05a55.js → index-0aa6e61f.js} +13 -11
  127. package/dist/esm/{index-702b3cd3.js → index-6a0ccabb.js} +2 -2
  128. package/dist/esm/index-7a14ecec.js +29 -0
  129. package/dist/esm/{index-c9e82353.js → index-f0cc4e14.js} +1 -1
  130. package/dist/esm/index.js +8 -8
  131. package/dist/esm/{input-shims-1d767845.js → input-shims-d0c93e5d.js} +9 -14
  132. package/dist/esm/{input.utils-2cf5e372.js → input.utils-ec063df4.js} +3 -4
  133. package/dist/esm/ion-action-sheet.entry.js +6 -6
  134. package/dist/esm/ion-alert.entry.js +6 -6
  135. package/dist/esm/ion-app_8.entry.js +8 -8
  136. package/dist/esm/ion-checkbox.entry.js +0 -2
  137. package/dist/esm/ion-datetime-button.entry.js +1 -1
  138. package/dist/esm/ion-datetime_3.entry.js +44 -25
  139. package/dist/esm/ion-input.entry.js +11 -34
  140. package/dist/esm/ion-item_8.entry.js +4 -17
  141. package/dist/esm/ion-loading.entry.js +3 -3
  142. package/dist/esm/ion-menu_3.entry.js +5 -5
  143. package/dist/esm/ion-modal.entry.js +8 -8
  144. package/dist/esm/ion-nav_2.entry.js +1 -1
  145. package/dist/esm/ion-picker-column-internal.entry.js +10 -14
  146. package/dist/esm/ion-popover.entry.js +4 -4
  147. package/dist/esm/ion-radio_2.entry.js +1 -6
  148. package/dist/esm/ion-range.entry.js +0 -2
  149. package/dist/esm/ion-refresher_2.entry.js +4 -4
  150. package/dist/esm/ion-reorder_2.entry.js +3 -3
  151. package/dist/esm/ion-select_3.entry.js +31 -47
  152. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  153. package/dist/esm/ion-textarea.entry.js +10 -33
  154. package/dist/esm/ion-toast.entry.js +75 -417
  155. package/dist/esm/ion-toggle.entry.js +3 -5
  156. package/dist/esm/ionic.js +1 -1
  157. package/dist/esm/{ios.transition-c3e77862.js → ios.transition-1651c430.js} +3 -3
  158. package/dist/esm/{keyboard-b6230bfb.js → keyboard-b063f012.js} +1 -1
  159. package/dist/esm/{keyboard-9f771a04.js → keyboard-b551279d.js} +3 -3
  160. package/dist/esm/{keyboard-controller-3f0faa10.js → keyboard-controller-0c2dce71.js} +2 -2
  161. package/dist/esm/loader.js +1 -1
  162. package/dist/esm/{md.transition-1173eca9.js → md.transition-66f18369.js} +3 -3
  163. package/dist/esm/{notch-controller-3f79197e.js → notch-controller-8c9c0e54.js} +1 -1
  164. package/dist/esm/{overlays-34169295.js → overlays-6c9feb7e.js} +2 -3
  165. package/dist/esm-es5/{animation-cf3dd234.js → animation-8aa13916.js} +1 -1
  166. package/dist/esm-es5/{button-active-47196c40.js → button-active-ce5cba4c.js} +1 -1
  167. package/dist/esm-es5/{capacitor-f1f25364.js → capacitor-b4979570.js} +1 -1
  168. package/dist/esm-es5/data-316b33f5.js +4 -0
  169. package/dist/esm-es5/{haptic-1a66d69f.js → haptic-1243b917.js} +1 -1
  170. package/dist/esm-es5/index-0aa6e61f.js +4 -0
  171. package/dist/esm-es5/{index-702b3cd3.js → index-6a0ccabb.js} +1 -1
  172. package/dist/esm-es5/index-f0cc4e14.js +4 -0
  173. package/dist/esm-es5/index.js +1 -1
  174. package/dist/esm-es5/input-shims-d0c93e5d.js +4 -0
  175. package/dist/esm-es5/input.utils-ec063df4.js +4 -0
  176. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  177. package/dist/esm-es5/ion-alert.entry.js +1 -1
  178. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  179. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  180. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  181. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  182. package/dist/esm-es5/ion-input.entry.js +1 -1
  183. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  184. package/dist/esm-es5/ion-loading.entry.js +1 -1
  185. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  186. package/dist/esm-es5/ion-modal.entry.js +1 -1
  187. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  188. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  189. package/dist/esm-es5/ion-popover.entry.js +1 -1
  190. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  191. package/dist/esm-es5/ion-range.entry.js +1 -1
  192. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  193. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  194. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  195. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  196. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  197. package/dist/esm-es5/ion-toast.entry.js +1 -1
  198. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  199. package/dist/esm-es5/ionic.js +1 -1
  200. package/dist/esm-es5/{ios.transition-c3e77862.js → ios.transition-1651c430.js} +1 -1
  201. package/dist/esm-es5/{keyboard-b6230bfb.js → keyboard-b063f012.js} +1 -1
  202. package/dist/esm-es5/{keyboard-9f771a04.js → keyboard-b551279d.js} +1 -1
  203. package/dist/esm-es5/{keyboard-controller-3f0faa10.js → keyboard-controller-0c2dce71.js} +1 -1
  204. package/dist/esm-es5/loader.js +1 -1
  205. package/dist/esm-es5/md.transition-66f18369.js +4 -0
  206. package/dist/esm-es5/{notch-controller-3f79197e.js → notch-controller-8c9c0e54.js} +1 -1
  207. package/dist/esm-es5/{overlays-34169295.js → overlays-6c9feb7e.js} +1 -1
  208. package/dist/html.html-data.json +1 -14
  209. package/dist/ionic/index.esm.js +1 -1
  210. package/dist/ionic/ionic.esm.js +1 -1
  211. package/dist/ionic/p-014e8840.system.js +4 -0
  212. package/dist/ionic/{p-83a455fd.system.js → p-09d142b3.system.js} +1 -1
  213. package/dist/ionic/p-0d8e9393.entry.js +4 -0
  214. package/dist/ionic/{p-3abf5b7a.entry.js → p-0dc0d9b5.entry.js} +1 -1
  215. package/dist/ionic/{p-54824705.system.entry.js → p-0e23256e.system.entry.js} +1 -1
  216. package/dist/ionic/{p-e9e5755c.system.js → p-14b4348c.system.js} +1 -1
  217. package/dist/ionic/{p-ea9addc8.system.entry.js → p-18e01b30.system.entry.js} +1 -1
  218. package/dist/ionic/{p-823890d5.system.entry.js → p-1cb5f2f8.system.entry.js} +1 -1
  219. package/dist/ionic/p-1e5165db.system.entry.js +4 -0
  220. package/dist/ionic/p-20cf4994.js +4 -0
  221. package/dist/ionic/p-276afddd.js +4 -0
  222. package/dist/ionic/p-2e8e0045.js +4 -0
  223. package/dist/ionic/{p-d61a2cee.system.entry.js → p-34d2de14.system.entry.js} +1 -1
  224. package/dist/ionic/p-352c0232.system.entry.js +4 -0
  225. package/dist/ionic/p-3602001b.system.js +4 -0
  226. package/dist/ionic/p-3632220b.system.js +4 -0
  227. package/dist/ionic/{p-37c69d34.system.entry.js → p-377c636c.system.entry.js} +1 -1
  228. package/dist/ionic/{p-fce6b76a.system.entry.js → p-39044fe6.system.entry.js} +1 -1
  229. package/dist/ionic/{p-e5fd9f10.js → p-3bad5c1a.js} +1 -1
  230. package/dist/ionic/p-3ce8c3e3.entry.js +4 -0
  231. package/dist/ionic/p-40903d34.system.js +1 -1
  232. package/dist/ionic/{p-958f1c70.system.js → p-41477ad9.system.js} +1 -1
  233. package/dist/ionic/{p-a135e3ba.js → p-419eb426.js} +1 -1
  234. package/dist/ionic/p-4794e0ac.system.entry.js +4 -0
  235. package/dist/ionic/{p-587afb80.system.entry.js → p-4a142496.system.entry.js} +1 -1
  236. package/dist/ionic/p-4cd588b3.system.entry.js +4 -0
  237. package/dist/ionic/p-4dbac22d.entry.js +4 -0
  238. package/dist/ionic/p-4fa201a7.entry.js +4 -0
  239. package/dist/ionic/{p-4c80afe1.system.entry.js → p-587be954.system.entry.js} +1 -1
  240. package/dist/ionic/p-5c299019.entry.js +4 -0
  241. package/dist/ionic/{p-f36112b4.entry.js → p-64296b15.entry.js} +1 -1
  242. package/dist/ionic/{p-1abc74d9.entry.js → p-64ed03a3.entry.js} +1 -1
  243. package/dist/ionic/p-67aab78f.js +4 -0
  244. package/dist/ionic/{p-03ed6107.system.entry.js → p-67e644bd.system.entry.js} +1 -1
  245. package/dist/ionic/{p-cc615985.system.entry.js → p-67ed452a.system.entry.js} +1 -1
  246. package/dist/ionic/p-67eecef4.system.js +4 -0
  247. package/dist/ionic/p-6d812360.system.entry.js +4 -0
  248. package/dist/ionic/{p-67951604.system.js → p-702d85d8.system.js} +1 -1
  249. package/dist/ionic/p-7176cea3.entry.js +4 -0
  250. package/dist/ionic/{p-8b15ca22.entry.js → p-73411c1b.entry.js} +1 -1
  251. package/dist/ionic/p-77e7a9c8.entry.js +4 -0
  252. package/dist/ionic/{p-8ad82eb3.entry.js → p-79e83e0a.entry.js} +1 -1
  253. package/dist/ionic/p-7f85ffa9.js +4 -0
  254. package/dist/ionic/{p-2a41d4d1.js → p-800ef057.js} +1 -1
  255. package/dist/ionic/{p-11cb4e19.js → p-81c818e7.js} +1 -1
  256. package/dist/ionic/p-88980f5f.system.entry.js +4 -0
  257. package/dist/ionic/{p-5885e9af.js → p-8cf94fc1.js} +1 -1
  258. package/dist/ionic/{p-3e655d4c.entry.js → p-8e1bded3.entry.js} +1 -1
  259. package/dist/ionic/p-97c65aa5.js +4 -0
  260. package/dist/ionic/{p-d48872b1.system.js → p-97e31c0a.system.js} +1 -1
  261. package/dist/ionic/p-9ab6f3e6.system.js +4 -0
  262. package/dist/ionic/p-9b89cbde.js +4 -0
  263. package/dist/ionic/{p-fe1f93f2.js → p-a0b6d438.js} +1 -1
  264. package/dist/ionic/p-a21b8d05.entry.js +4 -0
  265. package/dist/ionic/p-a5c1e6ce.entry.js +4 -0
  266. package/dist/ionic/{p-c4de53af.system.js → p-a936d224.system.js} +1 -1
  267. package/dist/ionic/{p-aec8a70a.system.js → p-ab4cff27.system.js} +1 -1
  268. package/dist/ionic/p-b0cee324.entry.js +4 -0
  269. package/dist/ionic/p-b1142133.entry.js +4 -0
  270. package/dist/ionic/p-b203659a.system.entry.js +4 -0
  271. package/dist/ionic/{p-6797887a.entry.js → p-b2a74a72.entry.js} +1 -1
  272. package/dist/ionic/{p-9292fd42.system.js → p-b4b4bb29.system.js} +1 -1
  273. package/dist/ionic/p-b6f8ee31.entry.js +4 -0
  274. package/dist/ionic/{p-31189dae.entry.js → p-b91fe549.entry.js} +1 -1
  275. package/dist/ionic/{p-6a309574.js → p-b923f3d7.js} +1 -1
  276. package/dist/ionic/{p-f9a641fa.system.js → p-bba2ce59.system.js} +1 -1
  277. package/dist/ionic/{p-5e6bc319.system.entry.js → p-bed722c4.system.entry.js} +1 -1
  278. package/dist/ionic/{p-21b4981c.system.js → p-c4042875.system.js} +1 -1
  279. package/dist/ionic/p-cc196b34.js +4 -0
  280. package/dist/ionic/{p-e7d20dfb.system.js → p-ccdcb022.system.js} +1 -1
  281. package/dist/ionic/{p-fcb148dc.system.entry.js → p-cf425ec5.system.entry.js} +1 -1
  282. package/dist/ionic/p-d1de1188.js +4 -0
  283. package/dist/ionic/p-d21bfe66.system.entry.js +4 -0
  284. package/dist/ionic/p-d3952bd5.system.entry.js +4 -0
  285. package/dist/ionic/{p-196f2123.system.entry.js → p-ddfc4ef4.system.entry.js} +1 -1
  286. package/dist/ionic/{p-c1e725db.entry.js → p-deab76dc.entry.js} +1 -1
  287. package/dist/ionic/p-dfa756ed.system.js +4 -0
  288. package/dist/ionic/p-e6b240a0.js +4 -0
  289. package/dist/ionic/{p-64ab3eb3.entry.js → p-f37b4b79.entry.js} +1 -1
  290. package/dist/ionic/{p-7047a40c.system.entry.js → p-f3c82f74.system.entry.js} +1 -1
  291. package/dist/ionic/{p-b673ee9b.entry.js → p-f54ddd19.entry.js} +1 -1
  292. package/dist/ionic/p-ff5a10f9.system.js +4 -0
  293. package/dist/types/components/datetime/utils/manipulation.d.ts +34 -7
  294. package/dist/types/components/input/input.d.ts +0 -2
  295. package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +0 -4
  296. package/dist/types/components/radio-group/radio-group-interface.d.ts +0 -1
  297. package/dist/types/components/radio-group/radio-group.d.ts +1 -8
  298. package/dist/types/components/router/router.d.ts +1 -2
  299. package/dist/types/components/select/select.d.ts +1 -6
  300. package/dist/types/components/skeleton-text/skeleton-text.d.ts +1 -9
  301. package/dist/types/components/textarea/textarea.d.ts +0 -2
  302. package/dist/types/components/toast/animations/utils.d.ts +4 -15
  303. package/dist/types/components/toast/toast-interface.d.ts +0 -2
  304. package/dist/types/components/toast/toast.d.ts +1 -28
  305. package/dist/types/components.d.ts +6 -45
  306. package/dist/types/interface.d.ts +5 -1
  307. package/dist/types/utils/animation/animation-interface.d.ts +4 -4
  308. package/dist/types/utils/browser/index.d.ts +2 -11
  309. package/dist/types/utils/forms/index.d.ts +0 -1
  310. package/dist/types/utils/hardware-back-button.d.ts +0 -4
  311. package/dist/types/utils/overlays.d.ts +0 -1
  312. package/dist/types/utils/slot-mutation-controller.d.ts +2 -2
  313. package/hydrate/index.js +276 -659
  314. package/package.json +1 -1
  315. package/dist/cjs/compare-with-utils-c0444525.js +0 -44
  316. package/dist/cjs/index-c8d52405.js +0 -10
  317. package/dist/collection/components/datetime/test/disabled/datetime.spec.js +0 -33
  318. package/dist/collection/components/input/test/slot/input.e2e.js +0 -51
  319. package/dist/collection/components/radio-group/test/radio-group.spec.js +0 -69
  320. package/dist/collection/components/select/test/slot/select.e2e.js +0 -67
  321. package/dist/collection/components/textarea/test/slot/textarea.e2e.js +0 -51
  322. package/dist/collection/components/toast/gestures/swipe-to-dismiss.js +0 -267
  323. package/dist/collection/components/toast/test/swipe-gesture/toast.e2e.js +0 -84
  324. package/dist/collection/components/toast/test/toast-config.spec.js +0 -25
  325. package/dist/collection/utils/forms/compare-with-utils.js +0 -39
  326. package/dist/esm/compare-with-utils-4928c09d.js +0 -41
  327. package/dist/esm/index-a5d50daf.js +0 -7
  328. package/dist/esm-es5/compare-with-utils-4928c09d.js +0 -4
  329. package/dist/esm-es5/data-44d9e816.js +0 -4
  330. package/dist/esm-es5/index-23c05a55.js +0 -4
  331. package/dist/esm-es5/index-c9e82353.js +0 -4
  332. package/dist/esm-es5/input-shims-1d767845.js +0 -4
  333. package/dist/esm-es5/input.utils-2cf5e372.js +0 -4
  334. package/dist/esm-es5/md.transition-1173eca9.js +0 -4
  335. package/dist/ionic/p-0547e914.entry.js +0 -4
  336. package/dist/ionic/p-131761b4.entry.js +0 -4
  337. package/dist/ionic/p-17240d90.js +0 -4
  338. package/dist/ionic/p-1cf5e8d6.entry.js +0 -4
  339. package/dist/ionic/p-2207f3c2.js +0 -4
  340. package/dist/ionic/p-27eb8a91.system.entry.js +0 -4
  341. package/dist/ionic/p-314c4dee.js +0 -4
  342. package/dist/ionic/p-385c51f8.system.entry.js +0 -4
  343. package/dist/ionic/p-3bc3d880.system.js +0 -4
  344. package/dist/ionic/p-43716898.js +0 -4
  345. package/dist/ionic/p-450a26bf.js +0 -4
  346. package/dist/ionic/p-485668f0.entry.js +0 -4
  347. package/dist/ionic/p-48c59094.system.entry.js +0 -4
  348. package/dist/ionic/p-494e75ad.js +0 -4
  349. package/dist/ionic/p-561cc050.system.js +0 -4
  350. package/dist/ionic/p-671dbd61.js +0 -4
  351. package/dist/ionic/p-693cabd5.entry.js +0 -4
  352. package/dist/ionic/p-70dcf429.js +0 -4
  353. package/dist/ionic/p-710cea83.system.js +0 -4
  354. package/dist/ionic/p-7b44e419.js +0 -4
  355. package/dist/ionic/p-80a9b397.entry.js +0 -4
  356. package/dist/ionic/p-8ddfecbf.entry.js +0 -4
  357. package/dist/ionic/p-98712253.system.entry.js +0 -4
  358. package/dist/ionic/p-9c6787e2.entry.js +0 -4
  359. package/dist/ionic/p-a11c1aff.system.entry.js +0 -4
  360. package/dist/ionic/p-a31099a4.entry.js +0 -4
  361. package/dist/ionic/p-a6bc00ab.entry.js +0 -4
  362. package/dist/ionic/p-ad4b4f73.system.entry.js +0 -4
  363. package/dist/ionic/p-b8c3f071.system.js +0 -4
  364. package/dist/ionic/p-be0f6600.system.js +0 -4
  365. package/dist/ionic/p-c2db1374.system.js +0 -4
  366. package/dist/ionic/p-c3547c7a.system.js +0 -4
  367. package/dist/ionic/p-c700acef.system.js +0 -4
  368. package/dist/ionic/p-d4fba36b.system.entry.js +0 -4
  369. package/dist/ionic/p-e5b8f2f7.js +0 -4
  370. package/dist/ionic/p-f43f4102.entry.js +0 -4
  371. package/dist/ionic/p-f5d78105.entry.js +0 -4
  372. package/dist/ionic/p-f7769c83.js +0 -4
  373. package/dist/ionic/p-fcc23f25.system.entry.js +0 -4
  374. package/dist/ionic/p-fdcf04c3.system.entry.js +0 -4
  375. package/dist/types/components/toast/gestures/swipe-to-dismiss.d.ts +0 -9
  376. package/dist/types/utils/forms/compare-with-utils.d.ts +0 -18
  377. /package/dist/esm-es5/{index-a5d50daf.js → index-7a14ecec.js} +0 -0
  378. /package/dist/ionic/{p-792919fd.system.js → p-0e94957a.system.js} +0 -0
  379. /package/dist/ionic/{p-7b30edcc.js → p-b347cfd1.js} +0 -0
@@ -132,11 +132,6 @@
132
132
  overflow: hidden;
133
133
  }
134
134
 
135
- :host(.in-item:not(.legacy-select)) {
136
- flex: 1 1 0;
137
- width: 0;
138
- }
139
-
140
135
  :host(.in-item.legacy-select) {
141
136
  position: static;
142
137
  max-width: 45%;
@@ -237,12 +232,6 @@ button {
237
232
  margin-top: 0;
238
233
  margin-bottom: 0;
239
234
  position: relative;
240
- /**
241
- * Prevent the icon from shrinking when the label and/or
242
- * selected item text is long enough to fill the rest of
243
- * the container.
244
- */
245
- flex-shrink: 0;
246
235
  }
247
236
 
248
237
  /**
@@ -326,23 +315,6 @@ button {
326
315
  transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
327
316
  }
328
317
 
329
- .select-wrapper-inner {
330
- display: flex;
331
- align-items: center;
332
- overflow: hidden;
333
- }
334
-
335
- :host(.select-label-placement-stacked) .select-wrapper-inner,
336
- :host(.select-label-placement-floating) .select-wrapper-inner {
337
- /**
338
- * When using a stacked/floating label, the inner wrapper is
339
- * stacked vertically under the label container. This line
340
- * ensures that the inner wrapper fills all the remaining height
341
- * of the component.
342
- */
343
- flex-grow: 1;
344
- }
345
-
346
318
  :host(.ion-touched.ion-invalid) {
347
319
  --highlight-color: var(--highlight-color-invalid);
348
320
  }
@@ -583,23 +555,11 @@ button {
583
555
  * The placeholder should be hidden when the label
584
556
  * is on top of the select. This prevents the label
585
557
  * from overlapping any placeholder value.
586
- *
587
- * TODO(FW-5592): Remove :not(.label-floating) piece
588
558
  */
589
- :host(.select-label-placement-floating:not(.label-floating)) .native-wrapper .select-placeholder {
559
+ :host(.select-label-placement-floating) .native-wrapper .select-placeholder {
590
560
  opacity: 0;
591
561
  }
592
562
 
593
- /**
594
- * We don't use .label-floating here because that would
595
- * also include the case where the label is floating due
596
- * to content in the start/end slot. We want the opacity
597
- * to remain at the default in this case, since the select
598
- * isn't being actively interacted with.
599
- *
600
- * TODO(FW-5592): Change entire selector to:
601
- * :host(.label-floating.select-label-placement-floating) .native-wrapper .select-placeholder
602
- */
603
563
  :host(.select-expanded.select-label-placement-floating) .native-wrapper .select-placeholder,
604
564
  :host(.ion-focused.select-label-placement-floating) .native-wrapper .select-placeholder,
605
565
  :host(.has-value.select-label-placement-floating) .native-wrapper .select-placeholder {
@@ -609,7 +569,10 @@ button {
609
569
  /**
610
570
  * This makes the label sit above the input.
611
571
  */
612
- :host(.label-floating) .label-text-wrapper {
572
+ :host(.select-label-placement-stacked) .label-text-wrapper,
573
+ :host(.select-expanded.select-label-placement-floating) .label-text-wrapper,
574
+ :host(.ion-focused.select-label-placement-floating) .label-text-wrapper,
575
+ :host(.has-value.select-label-placement-floating) .label-text-wrapper {
613
576
  transform: translateY(50%) scale(0.75);
614
577
  /**
615
578
  * Label text should not extend
@@ -618,23 +581,6 @@ button {
618
581
  max-width: calc(100% / 0.75);
619
582
  }
620
583
 
621
- ::slotted([slot=start]), ::slotted([slot=end]) {
622
- /**
623
- * Prevent the slots from shrinking when the label and/or
624
- * selected item text is long enough to fill the rest of
625
- * the container.
626
- */
627
- flex-shrink: 0;
628
- }
629
-
630
- ::slotted([slot=start]) {
631
- margin-inline-end: 16px;
632
- }
633
-
634
- ::slotted([slot=end]) {
635
- margin-inline-start: 16px;
636
- }
637
-
638
584
  /**
639
585
  * Convert a font size to a dynamic font size.
640
586
  * Fonts that participate in Dynamic Type should use
@@ -758,8 +704,8 @@ button {
758
704
  color: var(--ion-color-step-650, #595959);
759
705
  }
760
706
 
761
- :host(.select-label-placement-stacked) .select-wrapper-inner,
762
- :host(.select-label-placement-floating) .select-wrapper-inner {
707
+ :host(.select-label-placement-stacked) .native-wrapper,
708
+ :host(.select-label-placement-floating) .native-wrapper {
763
709
  width: calc(100% - 1.125rem - 4px);
764
710
  }
765
711
 
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { Host, h, forceUpdate } from "@stencil/core";
5
- import { compareOptions, createLegacyFormController, createNotchController, isOptionSelected } from "../../utils/forms/index";
5
+ import { createLegacyFormController, createNotchController } from "../../utils/forms/index";
6
6
  import { findItemLabel, focusElement, getAriaLabel, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
7
7
  import { printIonWarning } from "../../utils/logging/index";
8
8
  import { actionSheetController, alertController, popoverController } from "../../utils/overlays";
@@ -16,8 +16,6 @@ import { getIonMode } from "../../global/ionic-global";
16
16
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
17
17
  *
18
18
  * @slot label - The label text to associate with the select. Use the `labelPlacement` property to control where the label is placed relative to the select. Use this if you need to render a label with custom HTML.
19
- * @slot start - Content to display at the leading edge of the select.
20
- * @slot end - Content to display at the trailing edge of the select.
21
19
  *
22
20
  * @part placeholder - The text displayed in the select when there is no value.
23
21
  * @part text - The displayed value of the select.
@@ -32,22 +30,8 @@ export class Select {
32
30
  // This flag ensures we log the deprecation warning at most once.
33
31
  this.hasLoggedDeprecationWarning = false;
34
32
  this.onClick = (ev) => {
35
- const target = ev.target;
36
- const closestSlot = target.closest('[slot="start"], [slot="end"]');
37
- if (target === this.el || closestSlot === null) {
38
- this.setFocus();
39
- this.open(ev);
40
- }
41
- else {
42
- /**
43
- * Prevent clicks to the start/end slots from opening the select.
44
- * We ensure the target isn't this element in case the select is slotted
45
- * in, for example, an item. This would prevent the select from ever
46
- * being opened since the element itself has slot="start"/"end".
47
- */
48
- ev.stopPropagation();
49
- ev.preventDefault();
50
- }
33
+ this.setFocus();
34
+ this.open(ev);
51
35
  };
52
36
  this.onFocus = () => {
53
37
  this.ionFocus.emit();
@@ -481,8 +465,6 @@ export class Select {
481
465
  style['has-placeholder'] = this.placeholder !== undefined;
482
466
  style['has-value'] = this.hasValue();
483
467
  style['has-focus'] = this.isExpanded;
484
- // TODO(FW-3194): remove this
485
- style['legacy'] = !!this.legacy;
486
468
  }
487
469
  this.ionStyle.emit(style);
488
470
  }
@@ -550,27 +532,7 @@ export class Select {
550
532
  const rtl = isRTL(el) ? 'rtl' : 'ltr';
551
533
  const inItem = hostContext('ion-item', this.el);
552
534
  const shouldRenderHighlight = mode === 'md' && fill !== 'outline' && !inItem;
553
- const hasValue = this.hasValue();
554
- const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
555
535
  renderHiddenInput(true, el, name, parseValue(value), disabled);
556
- /**
557
- * If the label is stacked, it should always sit above the select.
558
- * For floating labels, the label should move above the select if
559
- * the select has a value, is open, or has anything in either
560
- * the start or end slot.
561
- *
562
- * If there is content in the start slot, the label would overlap
563
- * it if not forced to float. This is also applied to the end slot
564
- * because with the default or solid fills, the select is not
565
- * vertically centered in the container, but the label is. This
566
- * causes the slots and label to appear vertically offset from each
567
- * other when the label isn't floating above the input. This doesn't
568
- * apply to the outline fill, but this was not accounted for to keep
569
- * things consistent.
570
- *
571
- * TODO(FW-5592): Remove hasStartEndSlots condition
572
- */
573
- const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
574
536
  return (h(Host, { onClick: this.onClick, class: createColorClasses(this.color, {
575
537
  [mode]: true,
576
538
  'in-item': inItem,
@@ -578,8 +540,7 @@ export class Select {
578
540
  'select-disabled': disabled,
579
541
  'select-expanded': isExpanded,
580
542
  'has-expanded-icon': expandedIcon !== undefined,
581
- 'has-value': hasValue,
582
- 'label-floating': labelShouldFloat,
543
+ 'has-value': this.hasValue(),
583
544
  'has-placeholder': placeholder !== undefined,
584
545
  'ion-focusable': true,
585
546
  [`select-${rtl}`]: true,
@@ -587,7 +548,7 @@ export class Select {
587
548
  [`select-justify-${justify}`]: justifyEnabled,
588
549
  [`select-shape-${shape}`]: shape !== undefined,
589
550
  [`select-label-placement-${labelPlacement}`]: true,
590
- }) }, h("label", { class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), h("div", { class: "select-wrapper-inner" }, h("slot", { name: "start" }), h("div", { class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { class: "select-highlight" }))));
551
+ }) }, h("label", { class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), h("div", { class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), !hasFloatingOrStackedLabel && this.renderSelectIcon(), this.renderListbox()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { class: "select-highlight" }))));
591
552
  }
592
553
  // TODO FW-3194 - Remove this
593
554
  renderLegacySelect() {
@@ -776,7 +737,7 @@ Developers can use the "legacy" property to continue using the legacy form marku
776
737
  "optional": true,
777
738
  "docs": {
778
739
  "tags": [],
779
- "text": "This property allows developers to specify a custom function or property\nname for comparing objects when determining the selected option in the\nion-select. When not specified, the default behavior will use strict\nequality (===) for comparison."
740
+ "text": "A property name or function used to compare object values"
780
741
  },
781
742
  "attribute": "compare-with",
782
743
  "reflect": false
@@ -1254,6 +1215,17 @@ Developers can use the "legacy" property to continue using the legacy form marku
1254
1215
  }];
1255
1216
  }
1256
1217
  }
1218
+ const isOptionSelected = (currentValue, compareValue, compareWith) => {
1219
+ if (currentValue === undefined) {
1220
+ return false;
1221
+ }
1222
+ if (Array.isArray(currentValue)) {
1223
+ return currentValue.some((val) => compareOptions(val, compareValue, compareWith));
1224
+ }
1225
+ else {
1226
+ return compareOptions(currentValue, compareValue, compareWith);
1227
+ }
1228
+ };
1257
1229
  const getOptionValue = (el) => {
1258
1230
  const value = el.value;
1259
1231
  return value === undefined ? el.textContent || '' : value;
@@ -1267,6 +1239,17 @@ const parseValue = (value) => {
1267
1239
  }
1268
1240
  return value.toString();
1269
1241
  };
1242
+ const compareOptions = (currentValue, compareValue, compareWith) => {
1243
+ if (typeof compareWith === 'function') {
1244
+ return compareWith(currentValue, compareValue);
1245
+ }
1246
+ else if (typeof compareWith === 'string') {
1247
+ return currentValue[compareWith] === compareValue[compareWith];
1248
+ }
1249
+ else {
1250
+ return Array.isArray(compareValue) ? compareValue.includes(currentValue) : currentValue === compareValue;
1251
+ }
1252
+ };
1270
1253
  const generateText = (opts, value, compareWith) => {
1271
1254
  if (value === undefined) {
1272
1255
  return '';
@@ -132,11 +132,6 @@
132
132
  overflow: hidden;
133
133
  }
134
134
 
135
- :host(.in-item:not(.legacy-select)) {
136
- flex: 1 1 0;
137
- width: 0;
138
- }
139
-
140
135
  :host(.in-item.legacy-select) {
141
136
  position: static;
142
137
  max-width: 45%;
@@ -237,12 +232,6 @@ button {
237
232
  margin-top: 0;
238
233
  margin-bottom: 0;
239
234
  position: relative;
240
- /**
241
- * Prevent the icon from shrinking when the label and/or
242
- * selected item text is long enough to fill the rest of
243
- * the container.
244
- */
245
- flex-shrink: 0;
246
235
  }
247
236
 
248
237
  /**
@@ -326,23 +315,6 @@ button {
326
315
  transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
327
316
  }
328
317
 
329
- .select-wrapper-inner {
330
- display: flex;
331
- align-items: center;
332
- overflow: hidden;
333
- }
334
-
335
- :host(.select-label-placement-stacked) .select-wrapper-inner,
336
- :host(.select-label-placement-floating) .select-wrapper-inner {
337
- /**
338
- * When using a stacked/floating label, the inner wrapper is
339
- * stacked vertically under the label container. This line
340
- * ensures that the inner wrapper fills all the remaining height
341
- * of the component.
342
- */
343
- flex-grow: 1;
344
- }
345
-
346
318
  :host(.ion-touched.ion-invalid) {
347
319
  --highlight-color: var(--highlight-color-invalid);
348
320
  }
@@ -583,23 +555,11 @@ button {
583
555
  * The placeholder should be hidden when the label
584
556
  * is on top of the select. This prevents the label
585
557
  * from overlapping any placeholder value.
586
- *
587
- * TODO(FW-5592): Remove :not(.label-floating) piece
588
558
  */
589
- :host(.select-label-placement-floating:not(.label-floating)) .native-wrapper .select-placeholder {
559
+ :host(.select-label-placement-floating) .native-wrapper .select-placeholder {
590
560
  opacity: 0;
591
561
  }
592
562
 
593
- /**
594
- * We don't use .label-floating here because that would
595
- * also include the case where the label is floating due
596
- * to content in the start/end slot. We want the opacity
597
- * to remain at the default in this case, since the select
598
- * isn't being actively interacted with.
599
- *
600
- * TODO(FW-5592): Change entire selector to:
601
- * :host(.label-floating.select-label-placement-floating) .native-wrapper .select-placeholder
602
- */
603
563
  :host(.select-expanded.select-label-placement-floating) .native-wrapper .select-placeholder,
604
564
  :host(.ion-focused.select-label-placement-floating) .native-wrapper .select-placeholder,
605
565
  :host(.has-value.select-label-placement-floating) .native-wrapper .select-placeholder {
@@ -609,7 +569,10 @@ button {
609
569
  /**
610
570
  * This makes the label sit above the input.
611
571
  */
612
- :host(.label-floating) .label-text-wrapper {
572
+ :host(.select-label-placement-stacked) .label-text-wrapper,
573
+ :host(.select-expanded.select-label-placement-floating) .label-text-wrapper,
574
+ :host(.ion-focused.select-label-placement-floating) .label-text-wrapper,
575
+ :host(.has-value.select-label-placement-floating) .label-text-wrapper {
613
576
  transform: translateY(50%) scale(0.75);
614
577
  /**
615
578
  * Label text should not extend
@@ -618,23 +581,6 @@ button {
618
581
  max-width: calc(100% / 0.75);
619
582
  }
620
583
 
621
- ::slotted([slot=start]), ::slotted([slot=end]) {
622
- /**
623
- * Prevent the slots from shrinking when the label and/or
624
- * selected item text is long enough to fill the rest of
625
- * the container.
626
- */
627
- flex-shrink: 0;
628
- }
629
-
630
- ::slotted([slot=start]) {
631
- margin-inline-end: 16px;
632
- }
633
-
634
- ::slotted([slot=end]) {
635
- margin-inline-start: 16px;
636
- }
637
-
638
584
  /**
639
585
  * Convert a font size to a dynamic font size.
640
586
  * Fonts that participate in Dynamic Type should use
@@ -878,7 +824,10 @@ button {
878
824
  }
879
825
  }
880
826
 
881
- :host(.label-floating.select-fill-solid) .label-text-wrapper {
827
+ :host(.select-fill-solid.select-label-placement-stacked) .label-text-wrapper,
828
+ :host(.select-expanded.select-fill-solid.select-label-placement-floating) .label-text-wrapper,
829
+ :host(.ion-focused.select-fill-solid.select-label-placement-floating) .label-text-wrapper,
830
+ :host(.has-value.select-fill-solid.select-label-placement-floating) .label-text-wrapper {
882
831
  /**
883
832
  * Label text should not extend
884
833
  * beyond the bounds of the select.
@@ -1034,7 +983,10 @@ button {
1034
983
  /**
1035
984
  * This makes the label sit above the select.
1036
985
  */
1037
- :host(.label-floating.select-fill-outline) .label-text-wrapper {
986
+ :host(.select-expanded.select-fill-outline.select-label-placement-floating) .label-text-wrapper,
987
+ :host(.ion-focused.select-fill-outline.select-label-placement-floating) .label-text-wrapper,
988
+ :host(.has-value.select-fill-outline.select-label-placement-floating) .label-text-wrapper,
989
+ :host(.select-fill-outline.select-label-placement-stacked) .label-text-wrapper {
1038
990
  transform: translateY(-32%) scale(0.75);
1039
991
  margin-left: 0;
1040
992
  margin-right: 0;
@@ -1179,7 +1131,10 @@ button {
1179
1131
  * the floating/stacked label. We simulate this "cut out"
1180
1132
  * by removing the top border from the notch fragment.
1181
1133
  */
1182
- :host(.label-floating.select-fill-outline) .select-outline-notch {
1134
+ :host(.select-expanded.select-fill-outline.select-label-placement-floating) .select-outline-notch,
1135
+ :host(.ion-focused.select-fill-outline.select-label-placement-floating) .select-outline-notch,
1136
+ :host(.has-value.select-fill-outline.select-label-placement-floating) .select-outline-notch,
1137
+ :host(.select-fill-outline.select-label-placement-stacked) .select-outline-notch {
1183
1138
  border-top: none;
1184
1139
  }
1185
1140
 
@@ -1344,8 +1299,8 @@ button {
1344
1299
  --border-radius: 16px;
1345
1300
  }
1346
1301
 
1347
- :host(.select-label-placement-stacked) .select-wrapper-inner,
1348
- :host(.select-label-placement-floating) .select-wrapper-inner {
1302
+ :host(.select-label-placement-stacked) .native-wrapper,
1303
+ :host(.select-label-placement-floating) .native-wrapper {
1349
1304
  width: calc(100% - 0.8125rem - 4px);
1350
1305
  }
1351
1306
 
@@ -37,18 +37,5 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
37
37
  const list = page.locator('ion-list');
38
38
  await expect(list).toHaveScreenshot(screenshot(`select-inset-list-no-fill`));
39
39
  });
40
- test('should render correctly in an item inside of a flex container', async ({ page }) => {
41
- await page.setContent(`
42
- <div id="container" style="display: flex">
43
- <ion-item>
44
- <ion-select label="Fruit" value="apple">
45
- <ion-select-option value="apple">Apple</ion-select-option>
46
- </ion-select>
47
- </ion-item>
48
- </div>
49
- `, config);
50
- const container = page.locator('#container');
51
- await expect(container).toHaveScreenshot(screenshot(`select-item-flex-container`));
52
- });
53
40
  });
54
41
  });
@@ -121,7 +121,7 @@ configs().forEach(({ title, screenshot, config }) => {
121
121
  });
122
122
  test('label should appear on top of the select when the select is expanded', async ({ page }) => {
123
123
  await page.setContent(`
124
- <ion-select class="select-expanded label-floating" label="Label" label-placement="floating" placeholder="Select a Fruit">
124
+ <ion-select class="select-expanded" label="Label" label-placement="floating" placeholder="Select a Fruit">
125
125
  <ion-select-option value="apples">Apples</ion-select-option>
126
126
  </ion-select>
127
127
  `, config);
@@ -27,7 +27,7 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
27
27
  await page.setContent(`
28
28
  <ion-item>
29
29
  <ion-label>Really long label should not wrap</ion-label>
30
- <ion-select value="wrap" legacy="true" class="ion-text-wrap">
30
+ <ion-select value="wrap" class="ion-text-wrap">
31
31
  <ion-select-option value="wrap">Should wrap value only when label exists and really long text exists to make it wrap the text</ion-select-option>
32
32
  </ion-select>
33
33
  </ion-item>
@@ -9,18 +9,6 @@ export class SkeletonText {
9
9
  constructor() {
10
10
  this.animated = false;
11
11
  }
12
- componentWillLoad() {
13
- this.emitStyle();
14
- }
15
- emitStyle() {
16
- // The emitted property is used by item in order
17
- // to add the item-skeleton-text class which applies
18
- // overflow: hidden to its label
19
- const style = {
20
- 'skeleton-text': true,
21
- };
22
- this.ionStyle.emit(style);
23
- }
24
12
  render() {
25
13
  const animated = this.animated && config.getBoolean('animated', true);
26
14
  const inMedia = hostContext('ion-avatar', this.el) || hostContext('ion-thumbnail', this.el);
@@ -65,32 +53,5 @@ export class SkeletonText {
65
53
  }
66
54
  };
67
55
  }
68
- static get events() {
69
- return [{
70
- "method": "ionStyle",
71
- "name": "ionStyle",
72
- "bubbles": true,
73
- "cancelable": true,
74
- "composed": true,
75
- "docs": {
76
- "tags": [{
77
- "name": "internal",
78
- "text": undefined
79
- }],
80
- "text": "Emitted when the styles change."
81
- },
82
- "complexType": {
83
- "original": "StyleEventDetail",
84
- "resolved": "StyleEventDetail",
85
- "references": {
86
- "StyleEventDetail": {
87
- "location": "import",
88
- "path": "../../interface",
89
- "id": "src/interface.d.ts::StyleEventDetail"
90
- }
91
- }
92
- }
93
- }];
94
- }
95
56
  static get elementRef() { return "el"; }
96
57
  }
@@ -356,7 +356,9 @@
356
356
  }
357
357
 
358
358
  .native-wrapper {
359
+ display: flex;
359
360
  position: relative;
361
+ flex-grow: 1;
360
362
  width: 100%;
361
363
  height: 100%;
362
364
  }
@@ -427,12 +429,6 @@
427
429
  word-break: break-word;
428
430
  }
429
431
 
430
- .textarea-wrapper-inner {
431
- display: flex;
432
- width: 100%;
433
- min-height: inherit;
434
- }
435
-
436
432
  :host(.ion-touched.ion-invalid) {
437
433
  --highlight-color: var(--highlight-color-invalid);
438
434
  }
@@ -708,13 +704,6 @@
708
704
  margin-bottom: 0px;
709
705
  }
710
706
 
711
- :host(.textarea-label-placement-stacked) ::slotted([slot=start]),
712
- :host(.textarea-label-placement-stacked) ::slotted([slot=end]),
713
- :host(.textarea-label-placement-floating) ::slotted([slot=start]),
714
- :host(.textarea-label-placement-floating) ::slotted([slot=end]) {
715
- margin-top: 8px;
716
- }
717
-
718
707
  /**
719
708
  * This makes the label sit over the textarea
720
709
  * when the textarea is blurred and has no value.
@@ -740,7 +729,9 @@
740
729
  /**
741
730
  * This makes the label sit above the textarea.
742
731
  */
743
- :host(.label-floating) .label-text-wrapper {
732
+ :host(.textarea-label-placement-stacked) .label-text-wrapper,
733
+ :host(.has-focus.textarea-label-placement-floating) .label-text-wrapper,
734
+ :host(.has-value.textarea-label-placement-floating) .label-text-wrapper {
744
735
  transform: translateY(50%) scale(0.75);
745
736
  /**
746
737
  * Label text should not extend
@@ -749,29 +740,6 @@
749
740
  max-width: calc(100% / 0.75);
750
741
  }
751
742
 
752
- .start-slot-wrapper, .end-slot-wrapper {
753
- padding-left: 0;
754
- padding-right: 0;
755
- padding-top: var(--padding-top);
756
- padding-bottom: var(--padding-bottom);
757
- display: flex;
758
- flex-shrink: 0;
759
- align-self: start;
760
- }
761
-
762
- ::slotted([slot=start]),
763
- ::slotted([slot=end]) {
764
- margin-top: 0;
765
- }
766
-
767
- ::slotted([slot=start]) {
768
- margin-inline-end: 16px;
769
- }
770
-
771
- ::slotted([slot=end]) {
772
- margin-inline-start: 16px;
773
- }
774
-
775
743
  /**
776
744
  * Convert a font size to a dynamic font size.
777
745
  * 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;