@ionic/core 7.5.7-dev.11701273756.1eb73d4c → 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 (378) 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 -25
  79. package/dist/collection/components/item/item.md.css +3 -25
  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/label/select.e2e.js +1 -1
  98. package/dist/collection/components/select/test/legacy/wrapping/select.e2e.js +1 -1
  99. package/dist/collection/components/skeleton-text/skeleton-text.js +0 -39
  100. package/dist/collection/components/textarea/textarea.ios.css +5 -37
  101. package/dist/collection/components/textarea/textarea.js +5 -30
  102. package/dist/collection/components/textarea/textarea.md.css +14 -47
  103. package/dist/collection/components/toast/animations/ios.enter.js +1 -2
  104. package/dist/collection/components/toast/animations/md.enter.js +3 -4
  105. package/dist/collection/components/toast/animations/utils.js +14 -20
  106. package/dist/collection/components/toast/test/toast.spec.js +0 -80
  107. package/dist/collection/components/toast/toast.ios.css +10 -10
  108. package/dist/collection/components/toast/toast.js +1 -104
  109. package/dist/collection/components/toast/toast.md.css +0 -10
  110. package/dist/collection/components/toggle/toggle.js +0 -2
  111. package/dist/collection/utils/animation/animation.js +11 -12
  112. package/dist/collection/utils/animation/test/animation.spec.js +0 -16
  113. package/dist/collection/utils/browser/index.js +22 -0
  114. package/dist/collection/utils/forms/index.js +0 -1
  115. package/dist/collection/utils/input-shims/input-shims.js +6 -12
  116. package/dist/collection/utils/menu-controller/index.js +12 -10
  117. package/dist/collection/utils/overlays.js +0 -1
  118. package/dist/collection/utils/slot-mutation-controller.js +2 -3
  119. package/dist/docs.json +12 -137
  120. package/dist/esm/{animation-cf3dd234.js → animation-8aa13916.js} +12 -13
  121. package/dist/esm/{button-active-47196c40.js → button-active-ce5cba4c.js} +1 -1
  122. package/dist/esm/{capacitor-f1f25364.js → capacitor-b4979570.js} +1 -1
  123. package/dist/esm/{data-44d9e816.js → data-316b33f5.js} +64 -14
  124. package/dist/esm/{haptic-1a66d69f.js → haptic-1243b917.js} +1 -1
  125. package/dist/esm/{index-23c05a55.js → index-0aa6e61f.js} +13 -11
  126. package/dist/esm/{index-702b3cd3.js → index-6a0ccabb.js} +2 -2
  127. package/dist/esm/index-7a14ecec.js +29 -0
  128. package/dist/esm/{index-c9e82353.js → index-f0cc4e14.js} +1 -1
  129. package/dist/esm/index.js +8 -8
  130. package/dist/esm/{input-shims-1d767845.js → input-shims-d0c93e5d.js} +9 -14
  131. package/dist/esm/{input.utils-2cf5e372.js → input.utils-ec063df4.js} +3 -4
  132. package/dist/esm/ion-action-sheet.entry.js +6 -6
  133. package/dist/esm/ion-alert.entry.js +6 -6
  134. package/dist/esm/ion-app_8.entry.js +8 -8
  135. package/dist/esm/ion-checkbox.entry.js +0 -2
  136. package/dist/esm/ion-datetime-button.entry.js +1 -1
  137. package/dist/esm/ion-datetime_3.entry.js +44 -25
  138. package/dist/esm/ion-input.entry.js +11 -34
  139. package/dist/esm/ion-item_8.entry.js +4 -17
  140. package/dist/esm/ion-loading.entry.js +3 -3
  141. package/dist/esm/ion-menu_3.entry.js +5 -5
  142. package/dist/esm/ion-modal.entry.js +8 -8
  143. package/dist/esm/ion-nav_2.entry.js +1 -1
  144. package/dist/esm/ion-picker-column-internal.entry.js +10 -14
  145. package/dist/esm/ion-popover.entry.js +4 -4
  146. package/dist/esm/ion-radio_2.entry.js +1 -6
  147. package/dist/esm/ion-range.entry.js +0 -2
  148. package/dist/esm/ion-refresher_2.entry.js +4 -4
  149. package/dist/esm/ion-reorder_2.entry.js +3 -3
  150. package/dist/esm/ion-select_3.entry.js +31 -47
  151. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  152. package/dist/esm/ion-textarea.entry.js +10 -33
  153. package/dist/esm/ion-toast.entry.js +75 -417
  154. package/dist/esm/ion-toggle.entry.js +3 -5
  155. package/dist/esm/ionic.js +1 -1
  156. package/dist/esm/{ios.transition-c3e77862.js → ios.transition-1651c430.js} +3 -3
  157. package/dist/esm/{keyboard-b6230bfb.js → keyboard-b063f012.js} +1 -1
  158. package/dist/esm/{keyboard-9f771a04.js → keyboard-b551279d.js} +3 -3
  159. package/dist/esm/{keyboard-controller-3f0faa10.js → keyboard-controller-0c2dce71.js} +2 -2
  160. package/dist/esm/loader.js +1 -1
  161. package/dist/esm/{md.transition-1173eca9.js → md.transition-66f18369.js} +3 -3
  162. package/dist/esm/{notch-controller-3f79197e.js → notch-controller-8c9c0e54.js} +1 -1
  163. package/dist/esm/{overlays-34169295.js → overlays-6c9feb7e.js} +2 -3
  164. package/dist/esm-es5/{animation-cf3dd234.js → animation-8aa13916.js} +1 -1
  165. package/dist/esm-es5/{button-active-47196c40.js → button-active-ce5cba4c.js} +1 -1
  166. package/dist/esm-es5/{capacitor-f1f25364.js → capacitor-b4979570.js} +1 -1
  167. package/dist/esm-es5/data-316b33f5.js +4 -0
  168. package/dist/esm-es5/{haptic-1a66d69f.js → haptic-1243b917.js} +1 -1
  169. package/dist/esm-es5/index-0aa6e61f.js +4 -0
  170. package/dist/esm-es5/{index-702b3cd3.js → index-6a0ccabb.js} +1 -1
  171. package/dist/esm-es5/index-f0cc4e14.js +4 -0
  172. package/dist/esm-es5/index.js +1 -1
  173. package/dist/esm-es5/input-shims-d0c93e5d.js +4 -0
  174. package/dist/esm-es5/input.utils-ec063df4.js +4 -0
  175. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  176. package/dist/esm-es5/ion-alert.entry.js +1 -1
  177. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  178. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  179. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  180. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  181. package/dist/esm-es5/ion-input.entry.js +1 -1
  182. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  183. package/dist/esm-es5/ion-loading.entry.js +1 -1
  184. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  185. package/dist/esm-es5/ion-modal.entry.js +1 -1
  186. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  187. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  188. package/dist/esm-es5/ion-popover.entry.js +1 -1
  189. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  190. package/dist/esm-es5/ion-range.entry.js +1 -1
  191. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  192. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  193. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  194. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  195. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  196. package/dist/esm-es5/ion-toast.entry.js +1 -1
  197. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  198. package/dist/esm-es5/ionic.js +1 -1
  199. package/dist/esm-es5/{ios.transition-c3e77862.js → ios.transition-1651c430.js} +1 -1
  200. package/dist/esm-es5/{keyboard-b6230bfb.js → keyboard-b063f012.js} +1 -1
  201. package/dist/esm-es5/{keyboard-9f771a04.js → keyboard-b551279d.js} +1 -1
  202. package/dist/esm-es5/{keyboard-controller-3f0faa10.js → keyboard-controller-0c2dce71.js} +1 -1
  203. package/dist/esm-es5/loader.js +1 -1
  204. package/dist/esm-es5/md.transition-66f18369.js +4 -0
  205. package/dist/esm-es5/{notch-controller-3f79197e.js → notch-controller-8c9c0e54.js} +1 -1
  206. package/dist/esm-es5/{overlays-34169295.js → overlays-6c9feb7e.js} +1 -1
  207. package/dist/html.html-data.json +1 -14
  208. package/dist/ionic/index.esm.js +1 -1
  209. package/dist/ionic/ionic.esm.js +1 -1
  210. package/dist/ionic/p-014e8840.system.js +4 -0
  211. package/dist/ionic/{p-83a455fd.system.js → p-09d142b3.system.js} +1 -1
  212. package/dist/ionic/p-0d8e9393.entry.js +4 -0
  213. package/dist/ionic/{p-3abf5b7a.entry.js → p-0dc0d9b5.entry.js} +1 -1
  214. package/dist/ionic/{p-54824705.system.entry.js → p-0e23256e.system.entry.js} +1 -1
  215. package/dist/ionic/{p-e9e5755c.system.js → p-14b4348c.system.js} +1 -1
  216. package/dist/ionic/{p-ea9addc8.system.entry.js → p-18e01b30.system.entry.js} +1 -1
  217. package/dist/ionic/{p-823890d5.system.entry.js → p-1cb5f2f8.system.entry.js} +1 -1
  218. package/dist/ionic/p-1e5165db.system.entry.js +4 -0
  219. package/dist/ionic/p-20cf4994.js +4 -0
  220. package/dist/ionic/p-276afddd.js +4 -0
  221. package/dist/ionic/p-2e8e0045.js +4 -0
  222. package/dist/ionic/{p-d61a2cee.system.entry.js → p-34d2de14.system.entry.js} +1 -1
  223. package/dist/ionic/p-352c0232.system.entry.js +4 -0
  224. package/dist/ionic/p-3602001b.system.js +4 -0
  225. package/dist/ionic/p-3632220b.system.js +4 -0
  226. package/dist/ionic/{p-37c69d34.system.entry.js → p-377c636c.system.entry.js} +1 -1
  227. package/dist/ionic/{p-fce6b76a.system.entry.js → p-39044fe6.system.entry.js} +1 -1
  228. package/dist/ionic/{p-e5fd9f10.js → p-3bad5c1a.js} +1 -1
  229. package/dist/ionic/p-3ce8c3e3.entry.js +4 -0
  230. package/dist/ionic/p-40903d34.system.js +1 -1
  231. package/dist/ionic/{p-958f1c70.system.js → p-41477ad9.system.js} +1 -1
  232. package/dist/ionic/{p-a135e3ba.js → p-419eb426.js} +1 -1
  233. package/dist/ionic/p-4794e0ac.system.entry.js +4 -0
  234. package/dist/ionic/{p-587afb80.system.entry.js → p-4a142496.system.entry.js} +1 -1
  235. package/dist/ionic/p-4cd588b3.system.entry.js +4 -0
  236. package/dist/ionic/p-4dbac22d.entry.js +4 -0
  237. package/dist/ionic/p-4fa201a7.entry.js +4 -0
  238. package/dist/ionic/{p-4c80afe1.system.entry.js → p-587be954.system.entry.js} +1 -1
  239. package/dist/ionic/p-5c299019.entry.js +4 -0
  240. package/dist/ionic/{p-f36112b4.entry.js → p-64296b15.entry.js} +1 -1
  241. package/dist/ionic/{p-1abc74d9.entry.js → p-64ed03a3.entry.js} +1 -1
  242. package/dist/ionic/p-67aab78f.js +4 -0
  243. package/dist/ionic/{p-03ed6107.system.entry.js → p-67e644bd.system.entry.js} +1 -1
  244. package/dist/ionic/{p-cc615985.system.entry.js → p-67ed452a.system.entry.js} +1 -1
  245. package/dist/ionic/p-67eecef4.system.js +4 -0
  246. package/dist/ionic/p-6d812360.system.entry.js +4 -0
  247. package/dist/ionic/{p-67951604.system.js → p-702d85d8.system.js} +1 -1
  248. package/dist/ionic/p-7176cea3.entry.js +4 -0
  249. package/dist/ionic/{p-8b15ca22.entry.js → p-73411c1b.entry.js} +1 -1
  250. package/dist/ionic/p-77e7a9c8.entry.js +4 -0
  251. package/dist/ionic/{p-8ad82eb3.entry.js → p-79e83e0a.entry.js} +1 -1
  252. package/dist/ionic/p-7f85ffa9.js +4 -0
  253. package/dist/ionic/{p-2a41d4d1.js → p-800ef057.js} +1 -1
  254. package/dist/ionic/{p-11cb4e19.js → p-81c818e7.js} +1 -1
  255. package/dist/ionic/p-88980f5f.system.entry.js +4 -0
  256. package/dist/ionic/{p-5885e9af.js → p-8cf94fc1.js} +1 -1
  257. package/dist/ionic/{p-3e655d4c.entry.js → p-8e1bded3.entry.js} +1 -1
  258. package/dist/ionic/p-97c65aa5.js +4 -0
  259. package/dist/ionic/{p-d48872b1.system.js → p-97e31c0a.system.js} +1 -1
  260. package/dist/ionic/p-9ab6f3e6.system.js +4 -0
  261. package/dist/ionic/p-9b89cbde.js +4 -0
  262. package/dist/ionic/{p-fe1f93f2.js → p-a0b6d438.js} +1 -1
  263. package/dist/ionic/p-a21b8d05.entry.js +4 -0
  264. package/dist/ionic/p-a5c1e6ce.entry.js +4 -0
  265. package/dist/ionic/{p-c4de53af.system.js → p-a936d224.system.js} +1 -1
  266. package/dist/ionic/{p-aec8a70a.system.js → p-ab4cff27.system.js} +1 -1
  267. package/dist/ionic/p-b0cee324.entry.js +4 -0
  268. package/dist/ionic/p-b1142133.entry.js +4 -0
  269. package/dist/ionic/p-b203659a.system.entry.js +4 -0
  270. package/dist/ionic/{p-6797887a.entry.js → p-b2a74a72.entry.js} +1 -1
  271. package/dist/ionic/{p-9292fd42.system.js → p-b4b4bb29.system.js} +1 -1
  272. package/dist/ionic/p-b6f8ee31.entry.js +4 -0
  273. package/dist/ionic/{p-31189dae.entry.js → p-b91fe549.entry.js} +1 -1
  274. package/dist/ionic/{p-6a309574.js → p-b923f3d7.js} +1 -1
  275. package/dist/ionic/{p-f9a641fa.system.js → p-bba2ce59.system.js} +1 -1
  276. package/dist/ionic/{p-5e6bc319.system.entry.js → p-bed722c4.system.entry.js} +1 -1
  277. package/dist/ionic/{p-21b4981c.system.js → p-c4042875.system.js} +1 -1
  278. package/dist/ionic/p-cc196b34.js +4 -0
  279. package/dist/ionic/{p-e7d20dfb.system.js → p-ccdcb022.system.js} +1 -1
  280. package/dist/ionic/{p-fcb148dc.system.entry.js → p-cf425ec5.system.entry.js} +1 -1
  281. package/dist/ionic/p-d1de1188.js +4 -0
  282. package/dist/ionic/p-d21bfe66.system.entry.js +4 -0
  283. package/dist/ionic/p-d3952bd5.system.entry.js +4 -0
  284. package/dist/ionic/{p-196f2123.system.entry.js → p-ddfc4ef4.system.entry.js} +1 -1
  285. package/dist/ionic/{p-c1e725db.entry.js → p-deab76dc.entry.js} +1 -1
  286. package/dist/ionic/p-dfa756ed.system.js +4 -0
  287. package/dist/ionic/p-e6b240a0.js +4 -0
  288. package/dist/ionic/{p-64ab3eb3.entry.js → p-f37b4b79.entry.js} +1 -1
  289. package/dist/ionic/{p-7047a40c.system.entry.js → p-f3c82f74.system.entry.js} +1 -1
  290. package/dist/ionic/{p-b673ee9b.entry.js → p-f54ddd19.entry.js} +1 -1
  291. package/dist/ionic/p-ff5a10f9.system.js +4 -0
  292. package/dist/types/components/datetime/utils/manipulation.d.ts +34 -7
  293. package/dist/types/components/input/input.d.ts +0 -2
  294. package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +0 -4
  295. package/dist/types/components/radio-group/radio-group-interface.d.ts +0 -1
  296. package/dist/types/components/radio-group/radio-group.d.ts +1 -8
  297. package/dist/types/components/router/router.d.ts +1 -2
  298. package/dist/types/components/select/select.d.ts +1 -6
  299. package/dist/types/components/skeleton-text/skeleton-text.d.ts +1 -9
  300. package/dist/types/components/textarea/textarea.d.ts +0 -2
  301. package/dist/types/components/toast/animations/utils.d.ts +4 -15
  302. package/dist/types/components/toast/toast-interface.d.ts +0 -2
  303. package/dist/types/components/toast/toast.d.ts +1 -28
  304. package/dist/types/components.d.ts +6 -45
  305. package/dist/types/interface.d.ts +5 -1
  306. package/dist/types/utils/animation/animation-interface.d.ts +4 -4
  307. package/dist/types/utils/browser/index.d.ts +2 -11
  308. package/dist/types/utils/forms/index.d.ts +0 -1
  309. package/dist/types/utils/hardware-back-button.d.ts +0 -4
  310. package/dist/types/utils/overlays.d.ts +0 -1
  311. package/dist/types/utils/slot-mutation-controller.d.ts +2 -2
  312. package/hydrate/index.js +276 -659
  313. package/package.json +1 -1
  314. package/dist/cjs/compare-with-utils-c0444525.js +0 -44
  315. package/dist/cjs/index-c8d52405.js +0 -10
  316. package/dist/collection/components/datetime/test/disabled/datetime.spec.js +0 -33
  317. package/dist/collection/components/input/test/slot/input.e2e.js +0 -51
  318. package/dist/collection/components/radio-group/test/radio-group.spec.js +0 -69
  319. package/dist/collection/components/select/test/slot/select.e2e.js +0 -67
  320. package/dist/collection/components/textarea/test/slot/textarea.e2e.js +0 -51
  321. package/dist/collection/components/toast/gestures/swipe-to-dismiss.js +0 -267
  322. package/dist/collection/components/toast/test/swipe-gesture/toast.e2e.js +0 -84
  323. package/dist/collection/components/toast/test/toast-config.spec.js +0 -25
  324. package/dist/collection/utils/forms/compare-with-utils.js +0 -39
  325. package/dist/esm/compare-with-utils-4928c09d.js +0 -41
  326. package/dist/esm/index-a5d50daf.js +0 -7
  327. package/dist/esm-es5/compare-with-utils-4928c09d.js +0 -4
  328. package/dist/esm-es5/data-44d9e816.js +0 -4
  329. package/dist/esm-es5/index-23c05a55.js +0 -4
  330. package/dist/esm-es5/index-c9e82353.js +0 -4
  331. package/dist/esm-es5/input-shims-1d767845.js +0 -4
  332. package/dist/esm-es5/input.utils-2cf5e372.js +0 -4
  333. package/dist/esm-es5/md.transition-1173eca9.js +0 -4
  334. package/dist/ionic/p-0547e914.entry.js +0 -4
  335. package/dist/ionic/p-131761b4.entry.js +0 -4
  336. package/dist/ionic/p-17240d90.js +0 -4
  337. package/dist/ionic/p-1cf5e8d6.entry.js +0 -4
  338. package/dist/ionic/p-2207f3c2.js +0 -4
  339. package/dist/ionic/p-27eb8a91.system.entry.js +0 -4
  340. package/dist/ionic/p-314c4dee.js +0 -4
  341. package/dist/ionic/p-385c51f8.system.entry.js +0 -4
  342. package/dist/ionic/p-3bc3d880.system.js +0 -4
  343. package/dist/ionic/p-43716898.js +0 -4
  344. package/dist/ionic/p-450a26bf.js +0 -4
  345. package/dist/ionic/p-485668f0.entry.js +0 -4
  346. package/dist/ionic/p-48c59094.system.entry.js +0 -4
  347. package/dist/ionic/p-494e75ad.js +0 -4
  348. package/dist/ionic/p-561cc050.system.js +0 -4
  349. package/dist/ionic/p-671dbd61.js +0 -4
  350. package/dist/ionic/p-70dcf429.js +0 -4
  351. package/dist/ionic/p-710cea83.system.js +0 -4
  352. package/dist/ionic/p-7b44e419.js +0 -4
  353. package/dist/ionic/p-80a9b397.entry.js +0 -4
  354. package/dist/ionic/p-8ddfecbf.entry.js +0 -4
  355. package/dist/ionic/p-9c6787e2.entry.js +0 -4
  356. package/dist/ionic/p-a11c1aff.system.entry.js +0 -4
  357. package/dist/ionic/p-a31099a4.entry.js +0 -4
  358. package/dist/ionic/p-a6bc00ab.entry.js +0 -4
  359. package/dist/ionic/p-ac668fb8.entry.js +0 -4
  360. package/dist/ionic/p-ad4b4f73.system.entry.js +0 -4
  361. package/dist/ionic/p-b8c3f071.system.js +0 -4
  362. package/dist/ionic/p-be0f6600.system.js +0 -4
  363. package/dist/ionic/p-c2db1374.system.js +0 -4
  364. package/dist/ionic/p-c3547c7a.system.js +0 -4
  365. package/dist/ionic/p-c700acef.system.js +0 -4
  366. package/dist/ionic/p-d4fba36b.system.entry.js +0 -4
  367. package/dist/ionic/p-e5b8f2f7.js +0 -4
  368. package/dist/ionic/p-edd07654.system.entry.js +0 -4
  369. package/dist/ionic/p-f43f4102.entry.js +0 -4
  370. package/dist/ionic/p-f5d78105.entry.js +0 -4
  371. package/dist/ionic/p-f7769c83.js +0 -4
  372. package/dist/ionic/p-fcc23f25.system.entry.js +0 -4
  373. package/dist/ionic/p-fdcf04c3.system.entry.js +0 -4
  374. package/dist/types/components/toast/gestures/swipe-to-dismiss.d.ts +0 -9
  375. package/dist/types/utils/forms/compare-with-utils.d.ts +0 -18
  376. /package/dist/esm-es5/{index-a5d50daf.js → index-7a14ecec.js} +0 -0
  377. /package/dist/ionic/{p-792919fd.system.js → p-0e94957a.system.js} +0 -0
  378. /package/dist/ionic/{p-7b30edcc.js → p-b347cfd1.js} +0 -0
@@ -704,14 +704,24 @@ export class Datetime {
704
704
  * or modal that the datetime was presented in.
705
705
  */
706
706
  async confirm(closeOverlay = false) {
707
- const { isCalendarPicker, activeParts } = this;
707
+ const { isCalendarPicker, activeParts, preferWheel, workingParts } = this;
708
708
  /**
709
709
  * We only update the value if the presentation is not a calendar picker.
710
710
  */
711
711
  if (activeParts !== undefined || !isCalendarPicker) {
712
712
  const activePartsIsArray = Array.isArray(activeParts);
713
713
  if (activePartsIsArray && activeParts.length === 0) {
714
- this.setValue(undefined);
714
+ if (preferWheel) {
715
+ /**
716
+ * If the datetime is using a wheel picker, but the
717
+ * active parts are empty, then the user has confirmed the
718
+ * initial value (working parts) presented to them.
719
+ */
720
+ this.setValue(convertDataToISO(workingParts));
721
+ }
722
+ else {
723
+ this.setValue(undefined);
724
+ }
715
725
  }
716
726
  else {
717
727
  this.setValue(convertDataToISO(activeParts));
@@ -915,9 +925,18 @@ export class Datetime {
915
925
  const yearValues = (this.parsedYearValues = convertToArrayOfNumbers(this.yearValues));
916
926
  const dayValues = (this.parsedDayValues = convertToArrayOfNumbers(this.dayValues));
917
927
  const todayParts = (this.todayParts = parseDate(getToday()));
918
- this.defaultParts = getClosestValidDate(todayParts, monthValues, dayValues, yearValues, hourValues, minuteValues);
919
928
  this.processMinParts();
920
929
  this.processMaxParts();
930
+ this.defaultParts = getClosestValidDate({
931
+ refParts: todayParts,
932
+ monthValues,
933
+ dayValues,
934
+ yearValues,
935
+ hourValues,
936
+ minuteValues,
937
+ minParts: this.minParts,
938
+ maxParts: this.maxParts,
939
+ });
921
940
  this.processValue(this.value);
922
941
  this.emitStyle();
923
942
  }
@@ -985,7 +1004,7 @@ export class Datetime {
985
1004
  : this.renderIndividualDatePickerColumns(forcePresentation);
986
1005
  }
987
1006
  renderCombinedDatePickerColumn() {
988
- const { defaultParts, disabled, workingParts, locale, minParts, maxParts, todayParts, isDateEnabled } = this;
1007
+ const { defaultParts, workingParts, locale, minParts, maxParts, todayParts, isDateEnabled } = this;
989
1008
  const activePart = this.getActivePartsWithFallback();
990
1009
  /**
991
1010
  * By default, generate a range of 3 months:
@@ -1036,7 +1055,7 @@ export class Datetime {
1036
1055
  const todayString = workingParts.day !== null
1037
1056
  ? `${workingParts.year}-${workingParts.month}-${workingParts.day}`
1038
1057
  : `${defaultParts.year}-${defaultParts.month}-${defaultParts.day}`;
1039
- return (h("ion-picker-column-internal", { class: "date-column", color: this.color, disabled: disabled, items: items, value: todayString, onIonChange: (ev) => {
1058
+ return (h("ion-picker-column-internal", { class: "date-column", color: this.color, items: items, value: todayString, onIonChange: (ev) => {
1040
1059
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
1041
1060
  // Due to a Safari 14 issue we need to destroy
1042
1061
  // the scroll listener before we update state
@@ -1118,9 +1137,9 @@ export class Datetime {
1118
1137
  if (days.length === 0) {
1119
1138
  return [];
1120
1139
  }
1121
- const { disabled, workingParts } = this;
1140
+ const { workingParts } = this;
1122
1141
  const activePart = this.getActivePartsWithFallback();
1123
- return (h("ion-picker-column-internal", { class: "day-column", color: this.color, disabled: disabled, items: days, value: (_a = (workingParts.day !== null ? workingParts.day : this.defaultParts.day)) !== null && _a !== void 0 ? _a : undefined, onIonChange: (ev) => {
1142
+ return (h("ion-picker-column-internal", { class: "day-column", color: this.color, items: days, value: (_a = (workingParts.day !== null ? workingParts.day : this.defaultParts.day)) !== null && _a !== void 0 ? _a : undefined, onIonChange: (ev) => {
1124
1143
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
1125
1144
  // Due to a Safari 14 issue we need to destroy
1126
1145
  // the scroll listener before we update state
@@ -1140,9 +1159,9 @@ export class Datetime {
1140
1159
  if (months.length === 0) {
1141
1160
  return [];
1142
1161
  }
1143
- const { disabled, workingParts } = this;
1162
+ const { workingParts } = this;
1144
1163
  const activePart = this.getActivePartsWithFallback();
1145
- return (h("ion-picker-column-internal", { class: "month-column", color: this.color, disabled: disabled, items: months, value: workingParts.month, onIonChange: (ev) => {
1164
+ return (h("ion-picker-column-internal", { class: "month-column", color: this.color, items: months, value: workingParts.month, onIonChange: (ev) => {
1146
1165
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
1147
1166
  // Due to a Safari 14 issue we need to destroy
1148
1167
  // the scroll listener before we update state
@@ -1162,9 +1181,9 @@ export class Datetime {
1162
1181
  if (years.length === 0) {
1163
1182
  return [];
1164
1183
  }
1165
- const { disabled, workingParts } = this;
1184
+ const { workingParts } = this;
1166
1185
  const activePart = this.getActivePartsWithFallback();
1167
- return (h("ion-picker-column-internal", { class: "year-column", color: this.color, disabled: disabled, items: years, value: workingParts.year, onIonChange: (ev) => {
1186
+ return (h("ion-picker-column-internal", { class: "year-column", color: this.color, items: years, value: workingParts.year, onIonChange: (ev) => {
1168
1187
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
1169
1188
  // Due to a Safari 14 issue we need to destroy
1170
1189
  // the scroll listener before we update state
@@ -1203,35 +1222,35 @@ export class Datetime {
1203
1222
  ];
1204
1223
  }
1205
1224
  renderHourPickerColumn(hoursData) {
1206
- const { disabled, workingParts } = this;
1225
+ const { workingParts } = this;
1207
1226
  if (hoursData.length === 0)
1208
1227
  return [];
1209
1228
  const activePart = this.getActivePartsWithFallback();
1210
- return (h("ion-picker-column-internal", { color: this.color, disabled: disabled, value: activePart.hour, items: hoursData, numericInput: true, onIonChange: (ev) => {
1229
+ return (h("ion-picker-column-internal", { color: this.color, value: activePart.hour, items: hoursData, numericInput: true, onIonChange: (ev) => {
1211
1230
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { hour: ev.detail.value }));
1212
1231
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { hour: ev.detail.value }));
1213
1232
  ev.stopPropagation();
1214
1233
  } }));
1215
1234
  }
1216
1235
  renderMinutePickerColumn(minutesData) {
1217
- const { disabled, workingParts } = this;
1236
+ const { workingParts } = this;
1218
1237
  if (minutesData.length === 0)
1219
1238
  return [];
1220
1239
  const activePart = this.getActivePartsWithFallback();
1221
- return (h("ion-picker-column-internal", { color: this.color, disabled: disabled, value: activePart.minute, items: minutesData, numericInput: true, onIonChange: (ev) => {
1240
+ return (h("ion-picker-column-internal", { color: this.color, value: activePart.minute, items: minutesData, numericInput: true, onIonChange: (ev) => {
1222
1241
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { minute: ev.detail.value }));
1223
1242
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { minute: ev.detail.value }));
1224
1243
  ev.stopPropagation();
1225
1244
  } }));
1226
1245
  }
1227
1246
  renderDayPeriodPickerColumn(dayPeriodData) {
1228
- const { disabled, workingParts } = this;
1247
+ const { workingParts } = this;
1229
1248
  if (dayPeriodData.length === 0) {
1230
1249
  return [];
1231
1250
  }
1232
1251
  const activePart = this.getActivePartsWithFallback();
1233
1252
  const isDayPeriodRTL = isLocaleDayPeriodRTL(this.locale);
1234
- return (h("ion-picker-column-internal", { style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, disabled: disabled, value: activePart.ampm, items: dayPeriodData, onIonChange: (ev) => {
1253
+ return (h("ion-picker-column-internal", { style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, value: activePart.ampm, items: dayPeriodData, onIonChange: (ev) => {
1235
1254
  const hour = calculateHourFromAMPM(workingParts, ev.detail.value);
1236
1255
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { ampm: ev.detail.value, hour }));
1237
1256
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { ampm: ev.detail.value, hour }));
@@ -325,7 +325,6 @@ ion-picker-column-internal {
325
325
  :host .calendar-action-buttons ion-item ion-label {
326
326
  display: flex;
327
327
  align-items: center;
328
- width: auto;
329
328
  }
330
329
 
331
330
  :host .calendar-action-buttons ion-item ion-icon {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { getPreviousYear, getNextYear, getPreviousMonth, getNextMonth, getPreviousDay, getNextDay, getPreviousWeek, getNextWeek, getEndOfWeek, getStartOfWeek, convert12HourTo24Hour, getInternalHourValue, calculateHourFromAMPM, subtractDays, addDays, validateParts, } from "../utils/manipulation";
4
+ import { getPreviousYear, getNextYear, getPreviousMonth, getNextMonth, getPreviousDay, getNextDay, getPreviousWeek, getNextWeek, getEndOfWeek, getStartOfWeek, convert12HourTo24Hour, getInternalHourValue, calculateHourFromAMPM, subtractDays, addDays, validateParts, getClosestValidDate, } from "../utils/manipulation";
5
5
  describe('addDays()', () => {
6
6
  it('should correctly add days', () => {
7
7
  expect(addDays({
@@ -431,3 +431,135 @@ describe('validateParts()', () => {
431
431
  })).toEqual({ month: 1, day: 1, year: 2022, hour: 9, minute: 30 });
432
432
  });
433
433
  });
434
+ describe('getClosestValidDate()', () => {
435
+ it('should match a date with only month/day/year', () => {
436
+ // October 10, 2023
437
+ const refParts = { month: 10, day: 10, year: 2023 };
438
+ // April 10, 2021
439
+ const minParts = { month: 4, day: 10, year: 2021 };
440
+ // September 14, 2021
441
+ const maxParts = { month: 9, day: 14, year: 2021 };
442
+ // September 4, 2021
443
+ const expected = { month: 9, day: 4, year: 2021, dayOfWeek: undefined };
444
+ expect(getClosestValidDate({
445
+ refParts,
446
+ monthValues: [2, 3, 7, 9, 10],
447
+ dayValues: [4, 15, 25],
448
+ yearValues: [2020, 2021, 2023],
449
+ maxParts,
450
+ minParts,
451
+ })).toEqual(expected);
452
+ });
453
+ it('should match a date when the reference date is before the min', () => {
454
+ // April 2, 2020 3:20 PM
455
+ const refParts = { month: 4, day: 2, year: 2020, hour: 15, minute: 20 };
456
+ // September 10, 2021 10:10 AM
457
+ const minParts = { month: 9, day: 10, year: 2021, hour: 10, minute: 10 };
458
+ // September 14, 2021 10:11 AM
459
+ const maxParts = { month: 9, day: 14, year: 2021, hour: 10, minute: 11 };
460
+ // September 11, 2021 11:15 AM
461
+ const expected = {
462
+ year: 2021,
463
+ day: 11,
464
+ month: 9,
465
+ hour: 11,
466
+ minute: 15,
467
+ ampm: 'am',
468
+ dayOfWeek: undefined,
469
+ };
470
+ expect(getClosestValidDate({
471
+ refParts,
472
+ monthValues: [4, 9, 11],
473
+ dayValues: [11, 12, 13, 14],
474
+ yearValues: [2020, 2021, 2023],
475
+ hourValues: [9, 10, 11],
476
+ minuteValues: [11, 12, 13, 14, 15],
477
+ maxParts,
478
+ minParts,
479
+ })).toEqual(expected);
480
+ });
481
+ it('should match a date when the reference date is before the min', () => {
482
+ // April 2, 2020 3:20 PM
483
+ const refParts = { month: 4, day: 2, year: 2020, hour: 15, minute: 20 };
484
+ // September 10, 2021 10:10 AM
485
+ const minParts = { month: 9, day: 10, year: 2021, hour: 10, minute: 10 };
486
+ // September 10, 2021 10:15 AM
487
+ const maxParts = { month: 9, day: 10, year: 2021, hour: 10, minute: 15 };
488
+ // September 10, 2021 10:15 AM
489
+ const expected = {
490
+ month: 9,
491
+ day: 10,
492
+ year: 2021,
493
+ hour: 10,
494
+ minute: 15,
495
+ ampm: 'am',
496
+ dayOfWeek: undefined,
497
+ };
498
+ expect(getClosestValidDate({
499
+ refParts,
500
+ monthValues: [4, 9, 11],
501
+ dayValues: [10, 12, 13, 14],
502
+ yearValues: [2020, 2021, 2023],
503
+ hourValues: [9, 10, 11],
504
+ minuteValues: [11, 12, 13, 14, 15],
505
+ minParts,
506
+ maxParts,
507
+ })).toEqual(expected);
508
+ });
509
+ it('should only clamp minutes if within the same day and hour as min/max', () => {
510
+ // April 2, 2020 9:16 AM
511
+ const refParts = { month: 4, day: 2, year: 2020, hour: 9, minute: 16 };
512
+ // September 10, 2021 10:10 AM
513
+ const minParts = { month: 9, day: 10, year: 2021, hour: 10, minute: 10 };
514
+ // September 10, 2021 11:15 AM
515
+ const maxParts = { month: 9, day: 10, year: 2021, hour: 11, minute: 15 };
516
+ // September 10, 2021 10:16 AM
517
+ const expected = {
518
+ month: 9,
519
+ day: 10,
520
+ year: 2021,
521
+ hour: 10,
522
+ minute: 16,
523
+ ampm: 'am',
524
+ dayOfWeek: undefined,
525
+ };
526
+ expect(getClosestValidDate({
527
+ refParts,
528
+ monthValues: [4, 9, 11],
529
+ dayValues: [10, 12, 13, 14],
530
+ yearValues: [2020, 2021, 2023],
531
+ hourValues: [9, 10, 11],
532
+ minuteValues: [10, 15, 16],
533
+ minParts,
534
+ maxParts,
535
+ })).toEqual(expected);
536
+ });
537
+ it('should return the closest valid date after adjusting the allowed year', () => {
538
+ // April 2, 2022 9:16 AM
539
+ const refParts = { month: 4, day: 2, year: 2022, hour: 9, minute: 16 };
540
+ // September 10, 2021 10:10 AM
541
+ const minParts = { month: 9, day: 10, year: 2021, hour: 10, minute: 10 };
542
+ // September 10, 2023 11:15 AM
543
+ const maxParts = { month: 9, day: 10, year: 2023, hour: 11, minute: 15 };
544
+ // April 2, 2022 9:16 AM
545
+ const expected = {
546
+ month: 4,
547
+ day: 2,
548
+ year: 2022,
549
+ hour: 9,
550
+ minute: 16,
551
+ ampm: 'am',
552
+ dayOfWeek: undefined,
553
+ };
554
+ expect(getClosestValidDate({
555
+ refParts,
556
+ monthValues: [4, 9, 11],
557
+ dayValues: [2, 10, 12, 13, 14],
558
+ yearValues: [2020, 2021, 2022, 2023],
559
+ hourValues: [9, 10, 11],
560
+ minuteValues: [10, 15, 16],
561
+ minParts,
562
+ maxParts,
563
+ })).toEqual(expected);
564
+ });
565
+ });
@@ -0,0 +1,27 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { newSpecPage } from "@stencil/core/testing";
5
+ import { Datetime } from "../../datetime";
6
+ describe('datetime: preferWheel', () => {
7
+ beforeEach(() => {
8
+ const mockIntersectionObserver = jest.fn();
9
+ mockIntersectionObserver.mockReturnValue({
10
+ observe: () => null,
11
+ unobserve: () => null,
12
+ disconnect: () => null,
13
+ });
14
+ global.IntersectionObserver = mockIntersectionObserver;
15
+ });
16
+ it('should select the working day when clicking the confirm button', async () => {
17
+ const page = await newSpecPage({
18
+ components: [Datetime],
19
+ html: '<ion-datetime prefer-wheel="true" max="2021" show-default-buttons="true"></ion-datetime>',
20
+ });
21
+ const datetime = page.body.querySelector('ion-datetime');
22
+ const confirmButton = datetime.shadowRoot.querySelector('#confirm-button');
23
+ confirmButton.click();
24
+ await page.waitForChanges();
25
+ expect(datetime.value).toBe('2021-12-31T23:59:00');
26
+ });
27
+ });
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { isSameDay } from "./comparison";
4
+ import { isAfter, isBefore, isSameDay } from "./comparison";
5
5
  import { getNumDaysInMonth } from "./helpers";
6
6
  import { clampDate, parseAmPm } from "./parse";
7
7
  const twoDigit = (val) => {
@@ -355,32 +355,82 @@ export const validateParts = (parts, minParts, maxParts) => {
355
355
  * Returns the closest date to refParts
356
356
  * that also meets the constraints of
357
357
  * the *Values params.
358
- * @param refParts The reference date
359
- * @param monthValues The allowed month values
360
- * @param dayValues The allowed day (of the month) values
361
- * @param yearValues The allowed year values
362
- * @param hourValues The allowed hour values
363
- * @param minuteValues The allowed minute values
364
358
  */
365
- export const getClosestValidDate = (refParts, monthValues, dayValues, yearValues, hourValues, minuteValues) => {
359
+ export const getClosestValidDate = ({ refParts, monthValues, dayValues, yearValues, hourValues, minuteValues, minParts, maxParts, }) => {
366
360
  const { hour, minute, day, month, year } = refParts;
367
361
  const copyParts = Object.assign(Object.assign({}, refParts), { dayOfWeek: undefined });
362
+ if (yearValues !== undefined) {
363
+ // Filters out years that are out of the min/max bounds
364
+ const filteredYears = yearValues.filter((year) => {
365
+ if (minParts !== undefined && year < minParts.year) {
366
+ return false;
367
+ }
368
+ if (maxParts !== undefined && year > maxParts.year) {
369
+ return false;
370
+ }
371
+ return true;
372
+ });
373
+ copyParts.year = findClosestValue(year, filteredYears);
374
+ }
368
375
  if (monthValues !== undefined) {
369
- copyParts.month = findClosestValue(month, monthValues);
376
+ // Filters out months that are out of the min/max bounds
377
+ const filteredMonths = monthValues.filter((month) => {
378
+ if (minParts !== undefined && copyParts.year === minParts.year && month < minParts.month) {
379
+ return false;
380
+ }
381
+ if (maxParts !== undefined && copyParts.year === maxParts.year && month > maxParts.month) {
382
+ return false;
383
+ }
384
+ return true;
385
+ });
386
+ copyParts.month = findClosestValue(month, filteredMonths);
370
387
  }
371
388
  // Day is nullable but cannot be undefined
372
389
  if (day !== null && dayValues !== undefined) {
373
- copyParts.day = findClosestValue(day, dayValues);
374
- }
375
- if (yearValues !== undefined) {
376
- copyParts.year = findClosestValue(year, yearValues);
390
+ // Filters out days that are out of the min/max bounds
391
+ const filteredDays = dayValues.filter((day) => {
392
+ if (minParts !== undefined && isBefore(Object.assign(Object.assign({}, copyParts), { day }), minParts)) {
393
+ return false;
394
+ }
395
+ if (maxParts !== undefined && isAfter(Object.assign(Object.assign({}, copyParts), { day }), maxParts)) {
396
+ return false;
397
+ }
398
+ return true;
399
+ });
400
+ copyParts.day = findClosestValue(day, filteredDays);
377
401
  }
378
402
  if (hour !== undefined && hourValues !== undefined) {
379
- copyParts.hour = findClosestValue(hour, hourValues);
403
+ // Filters out hours that are out of the min/max bounds
404
+ const filteredHours = hourValues.filter((hour) => {
405
+ if ((minParts === null || minParts === void 0 ? void 0 : minParts.hour) !== undefined && isSameDay(copyParts, minParts) && hour < minParts.hour) {
406
+ return false;
407
+ }
408
+ if ((maxParts === null || maxParts === void 0 ? void 0 : maxParts.hour) !== undefined && isSameDay(copyParts, maxParts) && hour > maxParts.hour) {
409
+ return false;
410
+ }
411
+ return true;
412
+ });
413
+ copyParts.hour = findClosestValue(hour, filteredHours);
380
414
  copyParts.ampm = parseAmPm(copyParts.hour);
381
415
  }
382
416
  if (minute !== undefined && minuteValues !== undefined) {
383
- copyParts.minute = findClosestValue(minute, minuteValues);
417
+ // Filters out minutes that are out of the min/max bounds
418
+ const filteredMinutes = minuteValues.filter((minute) => {
419
+ if ((minParts === null || minParts === void 0 ? void 0 : minParts.minute) !== undefined &&
420
+ isSameDay(copyParts, minParts) &&
421
+ copyParts.hour === minParts.hour &&
422
+ minute < minParts.minute) {
423
+ return false;
424
+ }
425
+ if ((maxParts === null || maxParts === void 0 ? void 0 : maxParts.minute) !== undefined &&
426
+ isSameDay(copyParts, maxParts) &&
427
+ copyParts.hour === maxParts.hour &&
428
+ minute > maxParts.minute) {
429
+ return false;
430
+ }
431
+ return true;
432
+ });
433
+ copyParts.minute = findClosestValue(minute, filteredMinutes);
384
434
  }
385
435
  return copyParts;
386
436
  };
@@ -350,7 +350,6 @@
350
350
  display: flex;
351
351
  position: relative;
352
352
  flex-grow: 1;
353
- align-items: center;
354
353
  width: 100%;
355
354
  }
356
355
 
@@ -655,7 +654,9 @@
655
654
  /**
656
655
  * This makes the label sit above the input.
657
656
  */
658
- :host(.label-floating) .label-text-wrapper {
657
+ :host(.input-label-placement-stacked) .label-text-wrapper,
658
+ :host(.has-focus.input-label-placement-floating) .label-text-wrapper,
659
+ :host(.has-value.input-label-placement-floating) .label-text-wrapper {
659
660
  transform: translateY(50%) scale(0.75);
660
661
  /**
661
662
  * Label text should not extend
@@ -664,14 +665,6 @@
664
665
  max-width: calc(100% / 0.75);
665
666
  }
666
667
 
667
- ::slotted([slot=start]) {
668
- margin-inline-end: 16px;
669
- }
670
-
671
- ::slotted([slot=end]) {
672
- margin-inline-start: 16px;
673
- }
674
-
675
668
  /**
676
669
  * Convert a font size to a dynamic font size.
677
670
  * Fonts that participate in Dynamic Type should use
@@ -14,8 +14,6 @@ import { getCounterText } from "./input.utils";
14
14
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
15
15
  *
16
16
  * @slot label - The label text to associate with the input. Use the `labelPlacement` property to control where the label is placed relative to the input. Use this if you need to render a label with custom HTML. (EXPERIMENTAL)
17
- * @slot start - Content to display at the leading edge of the input. (EXPERIMENTAL)
18
- * @slot end - Content to display at the trailing edge of the input. (EXPERIMENTAL)
19
17
  */
20
18
  export class Input {
21
19
  constructor() {
@@ -159,7 +157,7 @@ export class Input {
159
157
  connectedCallback() {
160
158
  const { el } = this;
161
159
  this.legacyFormController = createLegacyFormController(el);
162
- this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => forceUpdate(this));
160
+ this.slotMutationController = createSlotMutationController(el, 'label', () => forceUpdate(this));
163
161
  this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
164
162
  this.emitStyle();
165
163
  this.debounceChanged();
@@ -258,8 +256,6 @@ export class Input {
258
256
  'has-value': this.hasValue(),
259
257
  'has-focus': this.hasFocus,
260
258
  'interactive-disabled': this.disabled,
261
- // TODO(FW-2764): remove this
262
- legacy: !!this.legacy,
263
259
  });
264
260
  }
265
261
  }
@@ -365,50 +361,29 @@ export class Input {
365
361
  return this.renderLabel();
366
362
  }
367
363
  renderInput() {
368
- const { disabled, fill, readonly, shape, inputId, labelPlacement, el, hasFocus } = this;
364
+ const { disabled, fill, readonly, shape, inputId, labelPlacement } = this;
369
365
  const mode = getIonMode(this);
370
366
  const value = this.getValue();
371
367
  const inItem = hostContext('ion-item', this.el);
372
368
  const shouldRenderHighlight = mode === 'md' && fill !== 'outline' && !inItem;
373
- const hasValue = this.hasValue();
374
- const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
375
- /**
376
- * If the label is stacked, it should always sit above the input.
377
- * For floating labels, the label should move above the input if
378
- * the input has a value, is focused, or has anything in either
379
- * the start or end slot.
380
- *
381
- * If there is content in the start slot, the label would overlap
382
- * it if not forced to float. This is also applied to the end slot
383
- * because with the default or solid fills, the input is not
384
- * vertically centered in the container, but the label is. This
385
- * causes the slots and label to appear vertically offset from each
386
- * other when the label isn't floating above the input. This doesn't
387
- * apply to the outline fill, but this was not accounted for to keep
388
- * things consistent.
389
- *
390
- * TODO(FW-5592): Remove hasStartEndSlots condition
391
- */
392
- const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
393
369
  return (h(Host, { class: createColorClasses(this.color, {
394
370
  [mode]: true,
395
- 'has-value': hasValue,
396
- 'has-focus': hasFocus,
397
- 'label-floating': labelShouldFloat,
371
+ 'has-value': this.hasValue(),
372
+ 'has-focus': this.hasFocus,
398
373
  [`input-fill-${fill}`]: fill !== undefined,
399
374
  [`input-shape-${shape}`]: shape !== undefined,
400
375
  [`input-label-placement-${labelPlacement}`]: true,
401
376
  'in-item': inItem,
402
377
  'in-item-color': hostContext('ion-item.ion-color', this.el),
403
378
  'input-disabled': disabled,
404
- }) }, h("label", { class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { class: "native-wrapper" }, h("slot", { name: "start" }), h("input", Object.assign({ class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, accept: this.accept, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, size: this.size, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
379
+ }) }, h("label", { class: "input-wrapper" }, this.renderLabelContainer(), h("div", { class: "native-wrapper" }, h("input", Object.assign({ class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, accept: this.accept, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, size: this.size, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
405
380
  /**
406
381
  * This prevents mobile browsers from
407
382
  * blurring the input when the clear
408
383
  * button is activated.
409
384
  */
410
385
  ev.preventDefault();
411
- }, onClick: this.clearTextInput }, h("ion-icon", { "aria-hidden": "true", icon: mode === 'ios' ? closeCircle : closeSharp }))), h("slot", { name: "end" })), shouldRenderHighlight && h("div", { class: "input-highlight" })), this.renderBottomContent()));
386
+ }, onClick: this.clearTextInput }, h("ion-icon", { "aria-hidden": "true", icon: mode === 'ios' ? closeCircle : closeSharp })))), shouldRenderHighlight && h("div", { class: "input-highlight" })), this.renderBottomContent()));
412
387
  }
413
388
  // TODO FW-2764 Remove this
414
389
  renderLegacyInput() {
@@ -350,7 +350,6 @@
350
350
  display: flex;
351
351
  position: relative;
352
352
  flex-grow: 1;
353
- align-items: center;
354
353
  width: 100%;
355
354
  }
356
355
 
@@ -655,7 +654,9 @@
655
654
  /**
656
655
  * This makes the label sit above the input.
657
656
  */
658
- :host(.label-floating) .label-text-wrapper {
657
+ :host(.input-label-placement-stacked) .label-text-wrapper,
658
+ :host(.has-focus.input-label-placement-floating) .label-text-wrapper,
659
+ :host(.has-value.input-label-placement-floating) .label-text-wrapper {
659
660
  transform: translateY(50%) scale(0.75);
660
661
  /**
661
662
  * Label text should not extend
@@ -664,14 +665,6 @@
664
665
  max-width: calc(100% / 0.75);
665
666
  }
666
667
 
667
- ::slotted([slot=start]) {
668
- margin-inline-end: 16px;
669
- }
670
-
671
- ::slotted([slot=end]) {
672
- margin-inline-start: 16px;
673
- }
674
-
675
668
  /**
676
669
  * Convert a font size to a dynamic font size.
677
670
  * Fonts that participate in Dynamic Type should use
@@ -914,7 +907,9 @@
914
907
  }
915
908
  }
916
909
 
917
- :host(.label-floating.input-fill-solid.input-label-placement-floating) .label-text-wrapper {
910
+ :host(.input-fill-solid.input-label-placement-stacked) .label-text-wrapper,
911
+ :host(.has-focus.input-fill-solid.input-label-placement-floating) .label-text-wrapper,
912
+ :host(.has-value.input-fill-solid.input-label-placement-floating) .label-text-wrapper {
918
913
  /**
919
914
  * Label text should not extend
920
915
  * beyond the bounds of the input.
@@ -1068,7 +1063,9 @@
1068
1063
  /**
1069
1064
  * This makes the label sit above the input.
1070
1065
  */
1071
- :host(.label-floating.input-fill-outline) .label-text-wrapper {
1066
+ :host(.has-focus.input-fill-outline.input-label-placement-floating) .label-text-wrapper,
1067
+ :host(.has-value.input-fill-outline.input-label-placement-floating) .label-text-wrapper,
1068
+ :host(.input-fill-outline.input-label-placement-stacked) .label-text-wrapper {
1072
1069
  transform: translateY(-32%) scale(0.75);
1073
1070
  margin-left: 0;
1074
1071
  margin-right: 0;
@@ -1229,7 +1226,9 @@
1229
1226
  * the floating/stacked label. We simulate this "cut out"
1230
1227
  * by removing the top border from the notch fragment.
1231
1228
  */
1232
- :host(.label-floating.input-fill-outline) .input-outline-notch {
1229
+ :host(.has-focus.input-fill-outline.input-label-placement-floating) .input-outline-notch,
1230
+ :host(.has-value.input-fill-outline.input-label-placement-floating) .input-outline-notch,
1231
+ :host(.input-fill-outline.input-label-placement-stacked) .input-outline-notch {
1233
1232
  border-top: none;
1234
1233
  }
1235
1234