@ionic/core 7.5.8-dev.11701791090.18ebbea8 → 7.5.8-dev.11701806358.1ca1b519

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 (308) hide show
  1. package/components/backdrop.js +0 -12
  2. package/components/data.js +1 -1
  3. package/components/gesture-controller.js +1 -1
  4. package/components/ion-content.js +1 -1
  5. package/components/ion-datetime.js +40 -64
  6. package/components/ion-input.js +2 -21
  7. package/components/ion-picker-column-option.d.ts +11 -0
  8. package/components/ion-picker-column-option.js +9 -0
  9. package/components/ion-picker-column.js +2 -2
  10. package/components/ion-picker-legacy-column.d.ts +11 -0
  11. package/components/ion-picker-legacy-column.js +9 -0
  12. package/components/{ion-picker-internal.d.ts → ion-picker-legacy.d.ts} +4 -4
  13. package/components/ion-picker-legacy.js +309 -0
  14. package/components/ion-picker.js +1 -309
  15. package/components/ion-textarea.js +2 -25
  16. package/components/overlays.js +11 -4
  17. package/components/picker-column-option.js +122 -0
  18. package/components/picker-column.js +363 -317
  19. package/components/picker-column2.js +379 -0
  20. package/components/{picker-internal.js → picker.js} +16 -16
  21. package/dist/cjs/{button-active-417ccdcb.js → button-active-9d7e0640.js} +1 -1
  22. package/dist/cjs/{data-36b9094e.js → data-e7526b58.js} +1 -1
  23. package/dist/cjs/{gesture-controller-c40c045a.js → gesture-controller-9436f482.js} +1 -0
  24. package/dist/cjs/{index-d1b59ffa.js → index-ee07ed59.js} +1 -1
  25. package/dist/cjs/index.cjs.js +3 -3
  26. package/dist/cjs/ion-action-sheet.cjs.entry.js +4 -4
  27. package/dist/cjs/ion-alert.cjs.entry.js +4 -4
  28. package/dist/cjs/ion-app_8.cjs.entry.js +2 -2
  29. package/dist/cjs/ion-backdrop.cjs.entry.js +0 -12
  30. package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
  31. package/dist/cjs/ion-datetime_3.cjs.entry.js +36 -56
  32. package/dist/cjs/ion-input.cjs.entry.js +2 -21
  33. package/dist/cjs/ion-item-option_3.cjs.entry.js +1 -1
  34. package/dist/cjs/ion-loading.cjs.entry.js +2 -1
  35. package/dist/cjs/ion-menu_3.cjs.entry.js +3 -3
  36. package/dist/cjs/ion-modal.cjs.entry.js +3 -3
  37. package/dist/cjs/ion-nav_2.cjs.entry.js +1 -1
  38. package/dist/cjs/ion-picker-column-option.cjs.entry.js +104 -0
  39. package/dist/cjs/{ion-picker-column-internal.cjs.entry.js → ion-picker-column.cjs.entry.js} +105 -72
  40. package/dist/cjs/{ion-picker-internal.cjs.entry.js → ion-picker.cjs.entry.js} +13 -13
  41. package/dist/cjs/ion-popover.cjs.entry.js +2 -1
  42. package/dist/cjs/ion-range.cjs.entry.js +1 -1
  43. package/dist/cjs/ion-refresher_2.cjs.entry.js +3 -3
  44. package/dist/cjs/ion-reorder_2.cjs.entry.js +1 -1
  45. package/dist/cjs/ion-segment_2.cjs.entry.js +1 -1
  46. package/dist/cjs/ion-select_3.cjs.entry.js +2 -1
  47. package/dist/cjs/ion-textarea.cjs.entry.js +2 -25
  48. package/dist/cjs/ion-toast.cjs.entry.js +2 -1
  49. package/dist/cjs/ion-toggle.cjs.entry.js +1 -1
  50. package/dist/cjs/ionic.cjs.js +1 -1
  51. package/dist/cjs/loader.cjs.js +1 -1
  52. package/dist/cjs/{overlays-5c379703.js → overlays-e8e05b0e.js} +11 -4
  53. package/dist/cjs/{swipe-back-2a858bbd.js → swipe-back-b8f2330b.js} +2 -2
  54. package/dist/collection/collection-manifest.json +7 -6
  55. package/dist/collection/components/backdrop/backdrop.js +0 -12
  56. package/dist/collection/components/content/content.css +0 -4
  57. package/dist/collection/components/datetime/datetime.ios.css +83 -37
  58. package/dist/collection/components/datetime/datetime.js +24 -36
  59. package/dist/collection/components/datetime/datetime.md.css +88 -37
  60. package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +1 -1
  61. package/dist/collection/components/datetime/test/a11y/datetime.spec.js +6 -9
  62. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +10 -0
  63. package/dist/collection/components/datetime/test/datetime.e2e.js +2 -2
  64. package/dist/collection/components/datetime/test/disabled/datetime.spec.js +4 -4
  65. package/dist/collection/components/datetime/test/locale/datetime.e2e.js +2 -2
  66. package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +6 -6
  67. package/dist/collection/components/datetime/test/month-year-picker/datetime.e2e.js +1 -1
  68. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +43 -41
  69. package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +1 -1
  70. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +4 -4
  71. package/dist/collection/components/datetime/test/values/datetime.e2e.js +15 -12
  72. package/dist/collection/components/datetime/utils/data.js +1 -1
  73. package/dist/collection/components/input/input.js +2 -21
  74. package/dist/collection/components/input/test/clear-on-edit/input.e2e.js +9 -21
  75. package/dist/collection/components/picker/picker.ios.css +100 -205
  76. package/dist/collection/components/picker/picker.js +461 -743
  77. package/dist/collection/components/picker/picker.md.css +98 -194
  78. package/dist/collection/components/{picker-internal/test/a11y/picker-internal.e2e.js → picker/test/a11y/picker.e2e.js} +2 -2
  79. package/dist/collection/components/picker/test/basic/picker.e2e.js +99 -13
  80. package/dist/collection/components/{picker-internal/test/keyboard-entry/picker-internal.e2e.js → picker/test/keyboard-entry/picker.e2e.js} +23 -22
  81. package/dist/collection/components/picker-column/picker-column.ios.css +120 -160
  82. package/dist/collection/components/picker-column/picker-column.js +514 -329
  83. package/dist/collection/components/picker-column/picker-column.md.css +134 -107
  84. package/dist/collection/components/{picker-column-internal/test/basic/picker-column-internal.e2e.js → picker-column/test/basic/picker-column.e2e.js} +8 -8
  85. package/dist/collection/components/picker-column/test/disabled/picker-column.e2e.js +113 -0
  86. package/dist/collection/components/picker-column/test/slots/picker-column.e2e.js +39 -0
  87. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +87 -0
  88. package/dist/collection/components/picker-column-option/picker-column-option.js +173 -0
  89. package/dist/collection/components/{picker-column-internal/picker-column-internal.ios.css → picker-column-option/picker-column-option.md.css} +6 -53
  90. package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +18 -0
  91. package/dist/collection/components/picker-column-option/test/basic/picker-column-option.e2e.js +37 -0
  92. package/dist/collection/components/picker-legacy/picker.ios.css +367 -0
  93. package/dist/collection/components/picker-legacy/picker.js +817 -0
  94. package/dist/collection/components/{picker-internal/picker-internal.ios.css → picker-legacy/picker.md.css} +192 -100
  95. package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +25 -0
  96. package/dist/collection/components/{picker → picker-legacy}/test/is-open/picker.e2e.js +4 -4
  97. package/dist/collection/components/{picker → picker-legacy}/test/picker-id.spec.js +5 -5
  98. package/dist/collection/components/{picker → picker-legacy}/test/trigger/picker.e2e.js +1 -1
  99. package/dist/collection/components/{picker-internal/picker-internal.md.css → picker-legacy-column/picker-column.ios.css} +98 -101
  100. package/dist/collection/components/picker-legacy-column/picker-column.js +419 -0
  101. package/dist/collection/components/{picker-column-internal/picker-column-internal.md.css → picker-legacy-column/picker-column.md.css} +113 -63
  102. package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column-aria.spec.js +3 -3
  103. package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column-dynamic.spec.js +2 -2
  104. package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column.spec.js +2 -2
  105. package/dist/collection/components/{picker-column → picker-legacy-column}/test/standalone/picker-column.e2e.js +3 -3
  106. package/dist/collection/components/textarea/test/clear-on-edit/textarea.e2e.js +0 -28
  107. package/dist/collection/components/textarea/textarea.js +2 -25
  108. package/dist/collection/utils/gesture/gesture-controller.js +1 -1
  109. package/dist/collection/utils/overlays.js +11 -4
  110. package/dist/collection/utils/test/overlays/overlays-scroll-blocking.spec.js +65 -0
  111. package/dist/docs.json +493 -40
  112. package/dist/esm/{button-active-3fdf3e4f.js → button-active-ed9d848c.js} +1 -1
  113. package/dist/esm/{data-f5c75b4e.js → data-4b9508c9.js} +1 -1
  114. package/dist/esm/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
  115. package/dist/esm/{index-2cf77112.js → index-39782642.js} +2 -2
  116. package/dist/esm/index.js +3 -3
  117. package/dist/esm/ion-action-sheet.entry.js +4 -4
  118. package/dist/esm/ion-alert.entry.js +4 -4
  119. package/dist/esm/ion-app_8.entry.js +2 -2
  120. package/dist/esm/ion-backdrop.entry.js +0 -12
  121. package/dist/esm/ion-datetime-button.entry.js +1 -1
  122. package/dist/esm/ion-datetime_3.entry.js +35 -55
  123. package/dist/esm/ion-input.entry.js +2 -21
  124. package/dist/esm/ion-item-option_3.entry.js +1 -1
  125. package/dist/esm/ion-loading.entry.js +2 -1
  126. package/dist/esm/ion-menu_3.entry.js +3 -3
  127. package/dist/esm/ion-modal.entry.js +3 -3
  128. package/dist/esm/ion-nav_2.entry.js +1 -1
  129. package/dist/esm/ion-picker-column-option.entry.js +100 -0
  130. package/dist/esm/{ion-picker-column-internal.entry.js → ion-picker-column.entry.js} +105 -72
  131. package/dist/esm/{ion-picker-internal.entry.js → ion-picker.entry.js} +13 -13
  132. package/dist/esm/ion-popover.entry.js +2 -1
  133. package/dist/esm/ion-range.entry.js +1 -1
  134. package/dist/esm/ion-refresher_2.entry.js +3 -3
  135. package/dist/esm/ion-reorder_2.entry.js +1 -1
  136. package/dist/esm/ion-segment_2.entry.js +1 -1
  137. package/dist/esm/ion-select_3.entry.js +2 -1
  138. package/dist/esm/ion-textarea.entry.js +2 -25
  139. package/dist/esm/ion-toast.entry.js +2 -1
  140. package/dist/esm/ion-toggle.entry.js +1 -1
  141. package/dist/esm/ionic.js +1 -1
  142. package/dist/esm/loader.js +1 -1
  143. package/dist/esm/{overlays-abf58489.js → overlays-fbc5cab5.js} +11 -4
  144. package/dist/esm/{swipe-back-a6f386fc.js → swipe-back-a8ca7f93.js} +2 -2
  145. package/dist/esm-es5/{button-active-3fdf3e4f.js → button-active-ed9d848c.js} +1 -1
  146. package/dist/esm-es5/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
  147. package/dist/esm-es5/{index-2cf77112.js → index-39782642.js} +1 -1
  148. package/dist/esm-es5/index.js +1 -1
  149. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  150. package/dist/esm-es5/ion-alert.entry.js +1 -1
  151. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  152. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  153. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  154. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  155. package/dist/esm-es5/ion-input.entry.js +1 -1
  156. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  157. package/dist/esm-es5/ion-loading.entry.js +1 -1
  158. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  159. package/dist/esm-es5/ion-modal.entry.js +1 -1
  160. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  161. package/dist/esm-es5/ion-picker-column-option.entry.js +4 -0
  162. package/dist/esm-es5/ion-picker-column.entry.js +4 -0
  163. package/dist/esm-es5/ion-picker.entry.js +4 -0
  164. package/dist/esm-es5/ion-popover.entry.js +1 -1
  165. package/dist/esm-es5/ion-range.entry.js +1 -1
  166. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  167. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  168. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  169. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  170. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  171. package/dist/esm-es5/ion-toast.entry.js +1 -1
  172. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  173. package/dist/esm-es5/ionic.js +1 -1
  174. package/dist/esm-es5/loader.js +1 -1
  175. package/dist/esm-es5/overlays-fbc5cab5.js +4 -0
  176. package/dist/esm-es5/swipe-back-a8ca7f93.js +4 -0
  177. package/dist/html.html-data.json +152 -1
  178. package/dist/ionic/index.esm.js +1 -1
  179. package/dist/ionic/ionic.esm.js +1 -1
  180. package/dist/ionic/{p-b0dc1cf9.system.js → p-1d624e03.system.js} +1 -1
  181. package/dist/ionic/{p-d40a974a.entry.js → p-1fc72959.entry.js} +1 -1
  182. package/dist/ionic/{p-c7c8429a.system.js → p-20d469d0.system.js} +1 -1
  183. package/dist/ionic/{p-0519cd21.entry.js → p-21c3515a.entry.js} +1 -1
  184. package/dist/ionic/{p-6470b136.entry.js → p-22e5af95.entry.js} +1 -1
  185. package/dist/ionic/p-232d1f22.entry.js +4 -0
  186. package/dist/ionic/p-23672c82.system.entry.js +4 -0
  187. package/dist/ionic/p-26798a7b.system.entry.js +4 -0
  188. package/dist/ionic/p-27bcbbc7.system.entry.js +4 -0
  189. package/dist/ionic/{p-765a08a7.system.entry.js → p-32303650.system.entry.js} +1 -1
  190. package/dist/ionic/p-3ba01a9c.system.entry.js +4 -0
  191. package/dist/ionic/{p-31b2326e.system.js → p-3e1e14d9.system.js} +1 -1
  192. package/dist/ionic/{p-667df818.system.entry.js → p-3fd26bd6.system.entry.js} +1 -1
  193. package/dist/ionic/{p-864c4046.entry.js → p-42ba3902.entry.js} +1 -1
  194. package/dist/ionic/{p-88fde0e0.entry.js → p-4911a5d6.entry.js} +1 -1
  195. package/dist/ionic/{p-a6f9dd7b.entry.js → p-4a081ea9.entry.js} +1 -1
  196. package/dist/ionic/{p-7b8d0af2.system.entry.js → p-4a36430f.system.entry.js} +1 -1
  197. package/dist/ionic/p-51abefb7.system.js +4 -0
  198. package/dist/ionic/{p-0b1bc636.entry.js → p-535d2a67.entry.js} +1 -1
  199. package/dist/ionic/{p-af5cfad2.system.js → p-54dfc9b5.system.js} +1 -1
  200. package/dist/ionic/p-563c41f0.system.entry.js +4 -0
  201. package/dist/ionic/{p-b04e4d62.entry.js → p-5d42b6b4.entry.js} +1 -1
  202. package/dist/ionic/{p-50880712.entry.js → p-6b7c55cd.entry.js} +1 -1
  203. package/dist/ionic/{p-a1987850.entry.js → p-6d72fb44.entry.js} +1 -1
  204. package/dist/ionic/{p-e6d68e02.system.entry.js → p-6fd64e7c.system.entry.js} +1 -1
  205. package/dist/ionic/p-73190c5f.entry.js +4 -0
  206. package/dist/ionic/p-73aa7604.entry.js +4 -0
  207. package/dist/ionic/{p-17f893be.js → p-76d3765d.js} +1 -1
  208. package/dist/ionic/{p-94389114.system.entry.js → p-77965464.system.entry.js} +1 -1
  209. package/dist/ionic/{p-98b14ece.entry.js → p-7b725280.entry.js} +1 -1
  210. package/dist/ionic/p-8017aad2.system.entry.js +4 -0
  211. package/dist/ionic/p-846ee227.entry.js +4 -0
  212. package/dist/ionic/p-8c97cdc0.entry.js +4 -0
  213. package/dist/ionic/{p-f5d2dc9b.js → p-8ededb41.js} +1 -1
  214. package/dist/ionic/p-8fa6583d.system.js +4 -0
  215. package/dist/ionic/p-9282b16f.entry.js +4 -0
  216. package/dist/ionic/{p-d7be6b7e.system.entry.js → p-96dbbac1.system.entry.js} +1 -1
  217. package/dist/ionic/{p-bb3615f7.js → p-9b97df10.js} +1 -1
  218. package/dist/ionic/p-9ba90516.system.entry.js +4 -0
  219. package/dist/ionic/{p-a0126dd5.system.entry.js → p-9c229210.system.entry.js} +2 -2
  220. package/dist/ionic/{p-7faba551.system.entry.js → p-a225bf0f.system.entry.js} +1 -1
  221. package/dist/ionic/p-a60a1ce5.js +4 -0
  222. package/dist/ionic/p-a8baa23e.entry.js +4 -0
  223. package/dist/ionic/{p-ad019ef0.entry.js → p-a9a80f5b.entry.js} +1 -1
  224. package/dist/ionic/p-afcf4620.entry.js +4 -0
  225. package/dist/ionic/{p-ddb30596.entry.js → p-b133e9b4.entry.js} +1 -1
  226. package/dist/ionic/{p-08f196ce.system.entry.js → p-b4d31b30.system.entry.js} +1 -1
  227. package/dist/ionic/{p-e553006f.system.entry.js → p-c18de88a.system.entry.js} +1 -1
  228. package/dist/ionic/p-c2910c78.entry.js +4 -0
  229. package/dist/ionic/p-c8f0a036.entry.js +4 -0
  230. package/dist/ionic/p-ca8938f4.js +4 -0
  231. package/dist/ionic/p-ca9d1792.system.entry.js +4 -0
  232. package/dist/ionic/{p-c3d09cf2.system.entry.js → p-cde52378.system.entry.js} +1 -1
  233. package/dist/ionic/p-da15f571.system.entry.js +4 -0
  234. package/dist/ionic/p-e3584231.system.js +1 -1
  235. package/dist/ionic/{p-6577aea9.system.entry.js → p-e8e86f69.system.entry.js} +1 -1
  236. package/dist/ionic/{p-9eec42cc.system.entry.js → p-f910cc73.system.entry.js} +1 -1
  237. package/dist/ionic/{p-3b686a65.system.entry.js → p-fbf3a689.system.entry.js} +1 -1
  238. package/dist/ionic/p-fe4dde76.entry.js +4 -0
  239. package/dist/ionic/p-ffd5dba4.system.entry.js +4 -0
  240. package/dist/types/components/backdrop/backdrop.d.ts +0 -3
  241. package/dist/types/components/datetime/datetime.d.ts +0 -1
  242. package/dist/types/components/datetime/utils/data.d.ts +2 -2
  243. package/dist/types/components/menu/menu.d.ts +1 -1
  244. package/dist/types/components/picker/picker-interfaces.d.ts +8 -0
  245. package/dist/types/components/picker/picker.d.ts +74 -131
  246. package/dist/types/components/picker-column/picker-column.d.ts +105 -39
  247. package/dist/types/components/picker-column-option/picker-column-option.d.ts +66 -0
  248. package/dist/types/components/picker-legacy/picker.d.ts +158 -0
  249. package/dist/types/components/picker-legacy-column/picker-column.d.ts +46 -0
  250. package/dist/types/components.d.ts +163 -122
  251. package/dist/types/interface.d.ts +1 -1
  252. package/dist/types/utils/config.d.ts +2 -2
  253. package/dist/types/utils/gesture/gesture-controller.d.ts +1 -0
  254. package/dist/types/utils/overlays.d.ts +5 -2
  255. package/hydrate/index.js +1367 -1296
  256. package/package.json +1 -1
  257. package/components/ion-picker-column-internal.d.ts +0 -11
  258. package/components/ion-picker-column-internal.js +0 -9
  259. package/components/ion-picker-internal.js +0 -9
  260. package/components/picker-column-internal.js +0 -390
  261. package/dist/collection/components/picker-column-internal/picker-column-internal.js +0 -565
  262. package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +0 -162
  263. package/dist/collection/components/picker-internal/picker-internal.js +0 -544
  264. package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +0 -118
  265. package/dist/esm-es5/ion-picker-column-internal.entry.js +0 -4
  266. package/dist/esm-es5/ion-picker-internal.entry.js +0 -4
  267. package/dist/esm-es5/overlays-abf58489.js +0 -4
  268. package/dist/esm-es5/swipe-back-a6f386fc.js +0 -4
  269. package/dist/ionic/p-18b6bd23.system.entry.js +0 -4
  270. package/dist/ionic/p-1d17219f.entry.js +0 -4
  271. package/dist/ionic/p-25b32c3d.entry.js +0 -4
  272. package/dist/ionic/p-2ba0657d.system.entry.js +0 -4
  273. package/dist/ionic/p-35ce400e.system.js +0 -4
  274. package/dist/ionic/p-3de71759.entry.js +0 -4
  275. package/dist/ionic/p-3e960213.system.entry.js +0 -4
  276. package/dist/ionic/p-61d7d7fb.js +0 -4
  277. package/dist/ionic/p-67da080d.entry.js +0 -4
  278. package/dist/ionic/p-6a6477b2.js +0 -4
  279. package/dist/ionic/p-73637557.system.entry.js +0 -4
  280. package/dist/ionic/p-73ea8f82.system.entry.js +0 -4
  281. package/dist/ionic/p-80fa068e.entry.js +0 -4
  282. package/dist/ionic/p-82045bc1.entry.js +0 -4
  283. package/dist/ionic/p-908475e7.system.entry.js +0 -4
  284. package/dist/ionic/p-9c3b6849.entry.js +0 -4
  285. package/dist/ionic/p-b4bad293.system.entry.js +0 -4
  286. package/dist/ionic/p-c3289ef2.entry.js +0 -4
  287. package/dist/ionic/p-cce9f61a.system.entry.js +0 -4
  288. package/dist/ionic/p-d1cb29a8.system.entry.js +0 -4
  289. package/dist/ionic/p-e94c392d.entry.js +0 -4
  290. package/dist/ionic/p-f2c21dae.system.js +0 -4
  291. package/dist/ionic/p-f51666d3.entry.js +0 -4
  292. package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +0 -102
  293. package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +0 -8
  294. package/dist/types/components/picker-internal/picker-internal.d.ts +0 -102
  295. /package/dist/collection/components/{picker-internal/picker-internal-interfaces.js → picker/picker-interfaces.js} +0 -0
  296. /package/dist/collection/components/{picker-column-internal/picker-column-internal-interfaces.js → picker-column/picker-column-interfaces.js} +0 -0
  297. /package/dist/collection/components/{picker → picker-legacy}/animations/ios.enter.js +0 -0
  298. /package/dist/collection/components/{picker → picker-legacy}/animations/ios.leave.js +0 -0
  299. /package/dist/collection/components/{picker → picker-legacy}/picker-interface.js +0 -0
  300. /package/dist/collection/components/{picker-column → picker-legacy-column}/test/test.utils.js +0 -0
  301. /package/dist/esm-es5/{data-f5c75b4e.js → data-4b9508c9.js} +0 -0
  302. /package/dist/ionic/{p-2aea8b1e.js → p-368f5215.js} +0 -0
  303. /package/dist/ionic/{p-82e3d633.system.js → p-f58981c2.system.js} +0 -0
  304. /package/dist/types/components/{picker-column-internal/picker-column-internal-interfaces.d.ts → picker-column/picker-column-interfaces.d.ts} +0 -0
  305. /package/dist/types/components/{picker → picker-legacy}/animations/ios.enter.d.ts +0 -0
  306. /package/dist/types/components/{picker → picker-legacy}/animations/ios.leave.d.ts +0 -0
  307. /package/dist/types/components/{picker → picker-legacy}/picker-interface.d.ts +0 -0
  308. /package/dist/types/components/{picker-column → picker-legacy-column}/test/test.utils.d.ts +0 -0
@@ -71,19 +71,6 @@
71
71
  overflow: hidden;
72
72
  }
73
73
 
74
- /**
75
- * When using the wheel picker to switch
76
- * between months, sometimes the allowed
77
- * dates may be filtered. As a result, it
78
- * is possible to get a layout shift as
79
- * the picker column will shrink to fit the
80
- * widest item in the column. Setting a minimum
81
- * width avoids this layout shifting.
82
- */
83
- ion-picker-column-internal {
84
- min-width: 26px;
85
- }
86
-
87
74
  :host(.datetime-size-fixed) {
88
75
  width: auto;
89
76
  height: auto;
@@ -94,7 +81,7 @@ ion-picker-column-internal {
94
81
  }
95
82
 
96
83
  /**
97
- * This ensures that the picker is apppropriately
84
+ * This ensures that the picker is appropriately
98
85
  * sized and never truncates the text.
99
86
  */
100
87
  :host(.datetime-size-fixed.datetime-prefer-wheel) {
@@ -317,23 +304,8 @@ ion-picker-column-internal {
317
304
  justify-content: space-between;
318
305
  }
319
306
 
320
- :host .calendar-action-buttons ion-item,
321
307
  :host .calendar-action-buttons ion-button {
322
- --background: translucent;
323
- }
324
-
325
- :host .calendar-action-buttons ion-item ion-label {
326
- display: flex;
327
- align-items: center;
328
- }
329
-
330
- :host .calendar-action-buttons ion-item ion-icon {
331
- -webkit-padding-start: 4px;
332
- padding-inline-start: 4px;
333
- -webkit-padding-end: 0;
334
- padding-inline-end: 0;
335
- padding-top: 0;
336
- padding-bottom: 0;
308
+ --background: transparent;
337
309
  }
338
310
 
339
311
  :host .calendar-days-of-week {
@@ -515,8 +487,66 @@ ion-picker-column-internal {
515
487
  position: static;
516
488
  }
517
489
 
518
- :host(.show-month-and-year) .calendar-action-buttons ion-item {
519
- --color: var(--ion-color-base);
490
+ :host(.show-month-and-year) .calendar-action-buttons .calendar-month-year-toggle {
491
+ color: var(--ion-color-base);
492
+ }
493
+
494
+ .calendar-month-year {
495
+ min-width: 0;
496
+ }
497
+
498
+ .calendar-month-year-toggle {
499
+ font-family: inherit;
500
+ font-size: inherit;
501
+ font-style: inherit;
502
+ font-weight: inherit;
503
+ letter-spacing: inherit;
504
+ text-decoration: inherit;
505
+ text-indent: inherit;
506
+ text-overflow: inherit;
507
+ text-transform: inherit;
508
+ text-align: inherit;
509
+ white-space: inherit;
510
+ color: inherit;
511
+ position: relative;
512
+ border: 0;
513
+ outline: none;
514
+ background: transparent;
515
+ cursor: pointer;
516
+ z-index: 1;
517
+ }
518
+ .calendar-month-year-toggle::after {
519
+ left: 0;
520
+ right: 0;
521
+ top: 0;
522
+ bottom: 0;
523
+ position: absolute;
524
+ content: "";
525
+ opacity: 0;
526
+ transition: opacity 15ms linear, background-color 15ms linear;
527
+ z-index: -1;
528
+ }
529
+ .calendar-month-year-toggle.ion-focused::after {
530
+ background: currentColor;
531
+ }
532
+ .calendar-month-year-toggle:disabled {
533
+ opacity: 0.3;
534
+ pointer-events: none;
535
+ }
536
+
537
+ .calendar-month-year-toggle ion-icon {
538
+ -webkit-padding-start: 4px;
539
+ padding-inline-start: 4px;
540
+ -webkit-padding-end: 0;
541
+ padding-inline-end: 0;
542
+ padding-top: 0;
543
+ padding-bottom: 0;
544
+ flex-shrink: 0;
545
+ }
546
+
547
+ .calendar-month-year-toggle #toggle-wrapper {
548
+ display: inline-flex;
549
+ align-items: center;
520
550
  }
521
551
 
522
552
  /**
@@ -605,15 +635,31 @@ ion-picker-column-internal {
605
635
  margin-top: 10px;
606
636
  }
607
637
 
608
- :host .calendar-action-buttons ion-item {
609
- --padding-start: 16px;
610
- --background-hover: transparent;
611
- --background-activated: transparent;
638
+ .calendar-month-year-toggle {
639
+ -webkit-padding-start: 16px;
640
+ padding-inline-start: 16px;
641
+ -webkit-padding-end: 16px;
642
+ padding-inline-end: 16px;
643
+ padding-top: 0px;
644
+ padding-bottom: 0px;
645
+ min-height: 44px;
612
646
  font-size: min(1rem, 25.6px);
613
647
  font-weight: 600;
614
648
  }
649
+ .calendar-month-year-toggle.ion-focused::after {
650
+ opacity: 0.15;
651
+ }
652
+
653
+ .calendar-month-year-toggle #toggle-wrapper {
654
+ -webkit-margin-start: 0;
655
+ margin-inline-start: 0;
656
+ -webkit-margin-end: 8px;
657
+ margin-inline-end: 8px;
658
+ margin-top: 10px;
659
+ margin-bottom: 10px;
660
+ }
615
661
 
616
- :host .calendar-action-buttons ion-item ion-icon,
662
+ :host .calendar-action-buttons .calendar-month-year-toggle ion-icon,
617
663
  :host .calendar-action-buttons ion-buttons ion-button {
618
664
  color: var(--ion-color-base);
619
665
  }
@@ -977,7 +977,7 @@ export class Datetime {
977
977
  const renderArray = forcePresentation === 'time-date'
978
978
  ? [this.renderTimePickerColumns(forcePresentation), this.renderDatePickerColumns(forcePresentation)]
979
979
  : [this.renderDatePickerColumns(forcePresentation), this.renderTimePickerColumns(forcePresentation)];
980
- return h("ion-picker-internal", null, renderArray);
980
+ return h("ion-picker", null, renderArray);
981
981
  }
982
982
  renderDatePickerColumns(forcePresentation) {
983
983
  return forcePresentation === 'date-time' || forcePresentation === 'time-date'
@@ -1036,7 +1036,7 @@ export class Datetime {
1036
1036
  const todayString = workingParts.day !== null
1037
1037
  ? `${workingParts.year}-${workingParts.month}-${workingParts.day}`
1038
1038
  : `${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) => {
1039
+ return (h("ion-picker-column", { class: "date-column", color: this.color, disabled: disabled, value: todayString, onIonChange: (ev) => {
1040
1040
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
1041
1041
  // Due to a Safari 14 issue we need to destroy
1042
1042
  // the scroll listener before we update state
@@ -1052,7 +1052,7 @@ export class Datetime {
1052
1052
  // the working parts have been updated.
1053
1053
  this.initializeCalendarListener();
1054
1054
  ev.stopPropagation();
1055
- } }));
1055
+ } }, items.map((item) => (h("ion-picker-column-option", { part: item.value === todayString ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: item.value, disabled: item.disabled, value: item.value }, item.text)))));
1056
1056
  }
1057
1057
  renderIndividualDatePickerColumns(forcePresentation) {
1058
1058
  const { workingParts, isDateEnabled } = this;
@@ -1120,7 +1120,8 @@ export class Datetime {
1120
1120
  }
1121
1121
  const { disabled, workingParts } = this;
1122
1122
  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) => {
1123
+ const pickerColumnValue = (_a = (workingParts.day !== null ? workingParts.day : this.defaultParts.day)) !== null && _a !== void 0 ? _a : undefined;
1124
+ return (h("ion-picker-column", { class: "day-column", color: this.color, disabled: disabled, value: pickerColumnValue, onIonChange: (ev) => {
1124
1125
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
1125
1126
  // Due to a Safari 14 issue we need to destroy
1126
1127
  // the scroll listener before we update state
@@ -1134,7 +1135,7 @@ export class Datetime {
1134
1135
  // the working parts have been updated.
1135
1136
  this.initializeCalendarListener();
1136
1137
  ev.stopPropagation();
1137
- } }));
1138
+ } }, days.map((day) => (h("ion-picker-column-option", { part: day.value === pickerColumnValue ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: day.value, disabled: day.disabled, value: day.value }, day.text)))));
1138
1139
  }
1139
1140
  renderMonthPickerColumn(months) {
1140
1141
  if (months.length === 0) {
@@ -1142,7 +1143,7 @@ export class Datetime {
1142
1143
  }
1143
1144
  const { disabled, workingParts } = this;
1144
1145
  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) => {
1146
+ return (h("ion-picker-column", { class: "month-column", color: this.color, disabled: disabled, value: workingParts.month, onIonChange: (ev) => {
1146
1147
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
1147
1148
  // Due to a Safari 14 issue we need to destroy
1148
1149
  // the scroll listener before we update state
@@ -1156,7 +1157,7 @@ export class Datetime {
1156
1157
  // the working parts have been updated.
1157
1158
  this.initializeCalendarListener();
1158
1159
  ev.stopPropagation();
1159
- } }));
1160
+ } }, months.map((month) => (h("ion-picker-column-option", { part: month.value === workingParts.month ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: month.value, disabled: month.disabled, value: month.value }, month.text)))));
1160
1161
  }
1161
1162
  renderYearPickerColumn(years) {
1162
1163
  if (years.length === 0) {
@@ -1164,7 +1165,7 @@ export class Datetime {
1164
1165
  }
1165
1166
  const { disabled, workingParts } = this;
1166
1167
  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) => {
1168
+ return (h("ion-picker-column", { class: "year-column", color: this.color, disabled: disabled, value: workingParts.year, onIonChange: (ev) => {
1168
1169
  // TODO(FW-1823) Remove this when iOS 14 support is dropped.
1169
1170
  // Due to a Safari 14 issue we need to destroy
1170
1171
  // the scroll listener before we update state
@@ -1178,7 +1179,7 @@ export class Datetime {
1178
1179
  // the working parts have been updated.
1179
1180
  this.initializeCalendarListener();
1180
1181
  ev.stopPropagation();
1181
- } }));
1182
+ } }, years.map((year) => (h("ion-picker-column-option", { part: year.value === workingParts.year ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: year.value, disabled: year.disabled, value: year.value }, year.text)))));
1182
1183
  }
1183
1184
  renderTimePickerColumns(forcePresentation) {
1184
1185
  if (['date', 'month', 'month-year', 'year'].includes(forcePresentation)) {
@@ -1207,22 +1208,22 @@ export class Datetime {
1207
1208
  if (hoursData.length === 0)
1208
1209
  return [];
1209
1210
  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) => {
1211
+ return (h("ion-picker-column", { color: this.color, disabled: disabled, value: activePart.hour, numericInput: true, onIonChange: (ev) => {
1211
1212
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { hour: ev.detail.value }));
1212
1213
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { hour: ev.detail.value }));
1213
1214
  ev.stopPropagation();
1214
- } }));
1215
+ } }, hoursData.map((hour) => (h("ion-picker-column-option", { part: hour.value === activePart.hour ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: hour.value, disabled: hour.disabled, value: hour.value }, hour.text)))));
1215
1216
  }
1216
1217
  renderMinutePickerColumn(minutesData) {
1217
1218
  const { disabled, workingParts } = this;
1218
1219
  if (minutesData.length === 0)
1219
1220
  return [];
1220
1221
  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) => {
1222
+ return (h("ion-picker-column", { color: this.color, disabled: disabled, value: activePart.minute, numericInput: true, onIonChange: (ev) => {
1222
1223
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { minute: ev.detail.value }));
1223
1224
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { minute: ev.detail.value }));
1224
1225
  ev.stopPropagation();
1225
- } }));
1226
+ } }, minutesData.map((minute) => (h("ion-picker-column-option", { part: minute.value === activePart.minute ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: minute.value, disabled: minute.disabled, value: minute.value }, minute.text)))));
1226
1227
  }
1227
1228
  renderDayPeriodPickerColumn(dayPeriodData) {
1228
1229
  const { disabled, workingParts } = this;
@@ -1231,12 +1232,12 @@ export class Datetime {
1231
1232
  }
1232
1233
  const activePart = this.getActivePartsWithFallback();
1233
1234
  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) => {
1235
+ return (h("ion-picker-column", { style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, disabled: disabled, value: activePart.ampm, onIonChange: (ev) => {
1235
1236
  const hour = calculateHourFromAMPM(workingParts, ev.detail.value);
1236
1237
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { ampm: ev.detail.value, hour }));
1237
1238
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { ampm: ev.detail.value, hour }));
1238
1239
  ev.stopPropagation();
1239
- } }));
1240
+ } }, dayPeriodData.map((dayPeriod) => (h("ion-picker-column-option", { part: dayPeriod.value === activePart.ampm ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: dayPeriod.value, disabled: dayPeriod.disabled, value: dayPeriod.value }, dayPeriod.text)))));
1240
1241
  }
1241
1242
  renderWheelView(forcePresentation) {
1242
1243
  const { locale } = this;
@@ -1257,26 +1258,11 @@ export class Datetime {
1257
1258
  const nextMonthDisabled = disabled || isNextMonthDisabled(this.workingParts, this.maxParts);
1258
1259
  // don't use the inheritAttributes util because it removes dir from the host, and we still need that
1259
1260
  const hostDir = this.el.getAttribute('dir') || undefined;
1260
- return (h("div", { class: "calendar-header" }, h("div", { class: "calendar-action-buttons" }, h("div", { class: "calendar-month-year" }, h("ion-item", { part: "month-year-button", ref: (el) => (this.monthYearToggleItemRef = el), button: true, "aria-label": "Show year picker", detail: false, lines: "none", disabled: disabled, onClick: () => {
1261
- var _a;
1262
- this.toggleMonthAndYearView();
1263
- /**
1264
- * TODO: FW-3547
1265
- *
1266
- * Currently there is not a way to set the aria-label on the inner button
1267
- * on the `ion-item` and have it be reactive to changes. This is a workaround
1268
- * until we either refactor `ion-item` to a button or Stencil adds a way to
1269
- * have reactive props for built-in properties, such as `aria-label`.
1270
- */
1271
- const { monthYearToggleItemRef } = this;
1272
- if (monthYearToggleItemRef) {
1273
- const btn = (_a = monthYearToggleItemRef.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.item-native');
1274
- if (btn) {
1275
- const monthYearAriaLabel = this.showMonthAndYear ? 'Hide year picker' : 'Show year picker';
1276
- btn.setAttribute('aria-label', monthYearAriaLabel);
1277
- }
1278
- }
1279
- } }, h("ion-label", null, getMonthAndYear(this.locale, this.workingParts), h("ion-icon", { "aria-hidden": "true", icon: this.showMonthAndYear ? expandedIcon : collapsedIcon, lazy: false, flipRtl: true })))), h("div", { class: "calendar-next-prev" }, h("ion-buttons", null, h("ion-button", { "aria-label": "Previous month", disabled: prevMonthDisabled, onClick: () => this.prevMonth() }, h("ion-icon", { dir: hostDir, "aria-hidden": "true", slot: "icon-only", icon: chevronBack, lazy: false, flipRtl: true })), h("ion-button", { "aria-label": "Next month", disabled: nextMonthDisabled, onClick: () => this.nextMonth() }, h("ion-icon", { dir: hostDir, "aria-hidden": "true", slot: "icon-only", icon: chevronForward, lazy: false, flipRtl: true }))))), h("div", { class: "calendar-days-of-week", "aria-hidden": "true" }, getDaysOfWeek(this.locale, mode, this.firstDayOfWeek % 7).map((d) => {
1261
+ return (h("div", { class: "calendar-header" }, h("div", { class: "calendar-action-buttons" }, h("div", { class: "calendar-month-year" }, h("button", { class: {
1262
+ 'calendar-month-year-toggle': true,
1263
+ 'ion-activatable': true,
1264
+ 'ion-focusable': true,
1265
+ }, part: "month-year-button", disabled: disabled, "aria-label": this.showMonthAndYear ? 'Hide year picker' : 'Show year picker', onClick: () => this.toggleMonthAndYearView() }, h("span", { id: "toggle-wrapper" }, getMonthAndYear(this.locale, this.workingParts), h("ion-icon", { "aria-hidden": "true", icon: this.showMonthAndYear ? expandedIcon : collapsedIcon, lazy: false, flipRtl: true })), mode === 'md' && h("ion-ripple-effect", null))), h("div", { class: "calendar-next-prev" }, h("ion-buttons", null, h("ion-button", { "aria-label": "Previous month", disabled: prevMonthDisabled, onClick: () => this.prevMonth() }, h("ion-icon", { dir: hostDir, "aria-hidden": "true", slot: "icon-only", icon: chevronBack, lazy: false, flipRtl: true })), h("ion-button", { "aria-label": "Next month", disabled: nextMonthDisabled, onClick: () => this.nextMonth() }, h("ion-icon", { dir: hostDir, "aria-hidden": "true", slot: "icon-only", icon: chevronForward, lazy: false, flipRtl: true }))))), h("div", { class: "calendar-days-of-week", "aria-hidden": "true" }, getDaysOfWeek(this.locale, mode, this.firstDayOfWeek % 7).map((d) => {
1280
1266
  return h("div", { class: "day-of-week" }, d);
1281
1267
  }))));
1282
1268
  }
@@ -1437,7 +1423,7 @@ export class Datetime {
1437
1423
  * This will correctly scroll the element position to the correct time value,
1438
1424
  * before the popover is fully presented.
1439
1425
  */
1440
- const cols = ev.target.querySelectorAll('ion-picker-column-internal');
1426
+ const cols = ev.target.querySelectorAll('ion-picker-column');
1441
1427
  // TODO (FW-615): Potentially remove this when intersection observers are fixed in picker column
1442
1428
  cols.forEach((col) => col.scrollActiveItemIntoView());
1443
1429
  }, style: {
@@ -2365,3 +2351,5 @@ export class Datetime {
2365
2351
  }
2366
2352
  }
2367
2353
  let datetimeIds = 0;
2354
+ const WHEEL_ITEM_PART = 'wheel-item';
2355
+ const WHEEL_ITEM_ACTIVE_PART = `active`;
@@ -71,19 +71,6 @@
71
71
  overflow: hidden;
72
72
  }
73
73
 
74
- /**
75
- * When using the wheel picker to switch
76
- * between months, sometimes the allowed
77
- * dates may be filtered. As a result, it
78
- * is possible to get a layout shift as
79
- * the picker column will shrink to fit the
80
- * widest item in the column. Setting a minimum
81
- * width avoids this layout shifting.
82
- */
83
- ion-picker-column-internal {
84
- min-width: 26px;
85
- }
86
-
87
74
  :host(.datetime-size-fixed) {
88
75
  width: auto;
89
76
  height: auto;
@@ -94,7 +81,7 @@ ion-picker-column-internal {
94
81
  }
95
82
 
96
83
  /**
97
- * This ensures that the picker is apppropriately
84
+ * This ensures that the picker is appropriately
98
85
  * sized and never truncates the text.
99
86
  */
100
87
  :host(.datetime-size-fixed.datetime-prefer-wheel) {
@@ -317,23 +304,8 @@ ion-picker-column-internal {
317
304
  justify-content: space-between;
318
305
  }
319
306
 
320
- :host .calendar-action-buttons ion-item,
321
307
  :host .calendar-action-buttons ion-button {
322
- --background: translucent;
323
- }
324
-
325
- :host .calendar-action-buttons ion-item ion-label {
326
- display: flex;
327
- align-items: center;
328
- }
329
-
330
- :host .calendar-action-buttons ion-item ion-icon {
331
- -webkit-padding-start: 4px;
332
- padding-inline-start: 4px;
333
- -webkit-padding-end: 0;
334
- padding-inline-end: 0;
335
- padding-top: 0;
336
- padding-bottom: 0;
308
+ --background: transparent;
337
309
  }
338
310
 
339
311
  :host .calendar-days-of-week {
@@ -515,8 +487,66 @@ ion-picker-column-internal {
515
487
  position: static;
516
488
  }
517
489
 
518
- :host(.show-month-and-year) .calendar-action-buttons ion-item {
519
- --color: var(--ion-color-base);
490
+ :host(.show-month-and-year) .calendar-action-buttons .calendar-month-year-toggle {
491
+ color: var(--ion-color-base);
492
+ }
493
+
494
+ .calendar-month-year {
495
+ min-width: 0;
496
+ }
497
+
498
+ .calendar-month-year-toggle {
499
+ font-family: inherit;
500
+ font-size: inherit;
501
+ font-style: inherit;
502
+ font-weight: inherit;
503
+ letter-spacing: inherit;
504
+ text-decoration: inherit;
505
+ text-indent: inherit;
506
+ text-overflow: inherit;
507
+ text-transform: inherit;
508
+ text-align: inherit;
509
+ white-space: inherit;
510
+ color: inherit;
511
+ position: relative;
512
+ border: 0;
513
+ outline: none;
514
+ background: transparent;
515
+ cursor: pointer;
516
+ z-index: 1;
517
+ }
518
+ .calendar-month-year-toggle::after {
519
+ left: 0;
520
+ right: 0;
521
+ top: 0;
522
+ bottom: 0;
523
+ position: absolute;
524
+ content: "";
525
+ opacity: 0;
526
+ transition: opacity 15ms linear, background-color 15ms linear;
527
+ z-index: -1;
528
+ }
529
+ .calendar-month-year-toggle.ion-focused::after {
530
+ background: currentColor;
531
+ }
532
+ .calendar-month-year-toggle:disabled {
533
+ opacity: 0.3;
534
+ pointer-events: none;
535
+ }
536
+
537
+ .calendar-month-year-toggle ion-icon {
538
+ -webkit-padding-start: 4px;
539
+ padding-inline-start: 4px;
540
+ -webkit-padding-end: 0;
541
+ padding-inline-end: 0;
542
+ padding-top: 0;
543
+ padding-bottom: 0;
544
+ flex-shrink: 0;
545
+ }
546
+
547
+ .calendar-month-year-toggle #toggle-wrapper {
548
+ display: inline-flex;
549
+ align-items: center;
520
550
  }
521
551
 
522
552
  /**
@@ -600,15 +630,36 @@ ion-picker-column-internal {
600
630
  font-size: 2.125rem;
601
631
  }
602
632
 
603
- :host .datetime-calendar .calendar-action-buttons ion-item {
604
- --padding-start: 20px;
605
- }
606
-
607
- :host .calendar-action-buttons ion-item,
608
633
  :host .calendar-action-buttons ion-button {
609
634
  --color: var(--ion-color-step-650, #595959);
610
635
  }
611
636
 
637
+ .calendar-month-year-toggle {
638
+ -webkit-padding-start: 20px;
639
+ padding-inline-start: 20px;
640
+ -webkit-padding-end: 16px;
641
+ padding-inline-end: 16px;
642
+ padding-top: 12px;
643
+ padding-bottom: 12px;
644
+ min-height: 48px;
645
+ background: transparent;
646
+ color: var(--ion-color-step-650, #595959);
647
+ z-index: 1;
648
+ }
649
+ .calendar-month-year-toggle.ion-focused::after {
650
+ opacity: 0.04;
651
+ }
652
+
653
+ .calendar-month-year-toggle ion-ripple-effect {
654
+ color: currentColor;
655
+ }
656
+
657
+ @media (any-hover: hover) {
658
+ .calendar-month-year-toggle.ion-activatable:not(.ion-focused):hover::after {
659
+ background: currentColor;
660
+ opacity: 0.04;
661
+ }
662
+ }
612
663
  :host .calendar-days-of-week {
613
664
  -webkit-padding-start: 10px;
614
665
  padding-inline-start: 10px;
@@ -38,7 +38,7 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
38
38
  `, config);
39
39
  const tabKey = browserName === 'webkit' ? 'Alt+Tab' : 'Tab';
40
40
  const datetime = page.locator('ion-datetime');
41
- const monthYearButton = page.locator('.calendar-month-year ion-item');
41
+ const monthYearButton = page.locator('.calendar-month-year-toggle');
42
42
  const prevButton = page.locator('.calendar-next-prev ion-button:nth-child(1)');
43
43
  const nextButton = page.locator('.calendar-next-prev ion-button:nth-child(2)');
44
44
  await page.keyboard.press(tabKey);
@@ -2,7 +2,6 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { newSpecPage } from "@stencil/core/testing";
5
- import { Item } from "../../../item/item";
6
5
  import { Datetime } from "../../datetime";
7
6
  describe('datetime', () => {
8
7
  beforeEach(() => {
@@ -18,25 +17,23 @@ describe('datetime', () => {
18
17
  let page;
19
18
  beforeEach(async () => {
20
19
  page = await newSpecPage({
21
- components: [Datetime, Item],
20
+ components: [Datetime],
22
21
  html: `<ion-datetime></ion-datetime>`,
23
22
  });
24
23
  });
25
24
  it('should have aria-label "Show year picker" when collapsed', async () => {
26
25
  const datetime = page.body.querySelector('ion-datetime');
27
- const item = datetime.shadowRoot.querySelector('.calendar-month-year ion-item');
28
- const monthYearToggleBtn = item.shadowRoot.querySelector('button');
26
+ const monthYearToggleBtn = datetime.shadowRoot.querySelector('.calendar-month-year .calendar-month-year-toggle');
29
27
  const ariaLabel = monthYearToggleBtn.getAttribute('aria-label');
30
28
  expect(ariaLabel).toContain('Show year picker');
31
29
  });
32
30
  it('should have aria-label "Hide year picker" when expanded', async () => {
33
31
  const datetime = page.body.querySelector('ion-datetime');
34
- const item = datetime.shadowRoot.querySelector('.calendar-month-year ion-item');
35
- item.click();
32
+ const monthYearToggleBtn = datetime.shadowRoot.querySelector('.calendar-month-year .calendar-month-year-toggle');
33
+ monthYearToggleBtn.click();
36
34
  await page.waitForChanges();
37
- const itemAfter = datetime.shadowRoot.querySelector('.calendar-month-year ion-item');
38
- const monthYearToggleBtn = itemAfter.shadowRoot.querySelector('button');
39
- const ariaLabel = monthYearToggleBtn.getAttribute('aria-label');
35
+ const monthYearToggleBtnAfter = datetime.shadowRoot.querySelector('.calendar-month-year .calendar-month-year-toggle');
36
+ const ariaLabel = monthYearToggleBtnAfter.getAttribute('aria-label');
40
37
  expect(ariaLabel).toContain('Hide year picker');
41
38
  });
42
39
  });
@@ -372,4 +372,14 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
372
372
  await expect(datetime).toHaveScreenshot(screenshot(`datetime-focus-calendar-day`));
373
373
  });
374
374
  });
375
+ test.describe(title('datetime: calendar month toggle'), () => {
376
+ test('should have focus styles', async ({ page }) => {
377
+ await page.setContent('<ion-datetime value="2021-01-01"></ion-datetime>', config);
378
+ const datetime = page.locator('ion-datetime');
379
+ await page.waitForSelector('.datetime-ready');
380
+ const monthYearToggle = datetime.locator('.calendar-month-year-toggle');
381
+ monthYearToggle.evaluate((el) => el.classList.add('ion-focused'));
382
+ await expect(datetime).toHaveScreenshot(screenshot(`date-month-toggle-focused`));
383
+ });
384
+ });
375
385
  });
@@ -13,7 +13,7 @@ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => {
13
13
  });
14
14
  test('should switch the calendar header when moving to a month with a different number of days', async ({ page, }) => {
15
15
  const monthYearToggle = page.locator('ion-datetime .calendar-month-year');
16
- const monthColumnItems = page.locator('ion-datetime .month-column .picker-item:not(.picker-item-empty)');
16
+ const monthColumnItems = page.locator('ion-datetime .month-column ion-picker-column-option');
17
17
  await expect(monthYearToggle).toContainText('January 2022');
18
18
  await monthYearToggle.click();
19
19
  await page.waitForChanges();
@@ -24,7 +24,7 @@ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => {
24
24
  });
25
25
  test('should adjust the selected day when moving to a month with a different number of days', async ({ page }) => {
26
26
  const monthYearToggle = page.locator('ion-datetime .calendar-month-year');
27
- const monthColumnItems = page.locator('ion-datetime .month-column .picker-item:not(.picker-item-empty)');
27
+ const monthColumnItems = page.locator('ion-datetime .month-column ion-picker-column-option');
28
28
  const datetime = page.locator('ion-datetime');
29
29
  const ionChange = await page.spyOnEvent('ionChange');
30
30
  await monthYearToggle.click();
@@ -4,8 +4,8 @@
4
4
  import { h } from "@stencil/core";
5
5
  import { newSpecPage } from "@stencil/core/testing";
6
6
  import { Datetime } from "../../../datetime/datetime";
7
- import { PickerColumnInternal } from "../../../picker-column-internal/picker-column-internal";
8
- import { PickerInternal } from "../../../picker-internal/picker-internal";
7
+ import { PickerColumn } from "../../../picker-column/picker-column";
8
+ import { Picker } from "../../../picker/picker";
9
9
  describe('ion-datetime disabled', () => {
10
10
  beforeEach(() => {
11
11
  // IntersectionObserver isn't available in test environment
@@ -19,12 +19,12 @@ describe('ion-datetime disabled', () => {
19
19
  });
20
20
  it('picker should be disabled in prefer wheel mode', async () => {
21
21
  const page = await newSpecPage({
22
- components: [Datetime, PickerColumnInternal, PickerInternal],
22
+ components: [Datetime, PickerColumn, Picker],
23
23
  template: () => (h("ion-datetime", { id: "inline-datetime-wheel", disabled: true, "prefer-wheel": true, value: "2022-04-21T00:00:00" })),
24
24
  });
25
25
  await page.waitForChanges();
26
26
  const datetime = page.body.querySelector('ion-datetime');
27
- const columns = datetime.shadowRoot.querySelectorAll('ion-picker-column-internal');
27
+ const columns = datetime.shadowRoot.querySelectorAll('ion-picker-column');
28
28
  await expect(columns.length).toEqual(4);
29
29
  columns.forEach((column) => {
30
30
  expect(column.disabled).toBe(true);
@@ -85,10 +85,10 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
85
85
  });
86
86
  test('should correctly localize year column data', async ({ page }) => {
87
87
  await page.setContent(`
88
- <ion-datetime prefer-wheel="true" locale="ar-EG" presentation="date" value="2022-01-01"></ion-datetime>
88
+ <ion-datetime prefer-wheel="true" locale="ar-EG" presentation="date" value="2022-01-01" max="2022" min="2022"></ion-datetime>
89
89
  `, config);
90
90
  await page.waitForSelector('.datetime-ready');
91
- const datetimeYear = page.locator('ion-datetime .year-column .picker-item[data-value="2022"]');
91
+ const datetimeYear = page.locator('ion-datetime .year-column ion-picker-column-option').nth(0);
92
92
  await expect(datetimeYear).toHaveText('٢٠٢٢');
93
93
  });
94
94
  });