@ionic/core 7.3.4-dev.11694441708.198de185 → 7.3.4-dev.11694445679.1bc64f72

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 (490) hide show
  1. package/components/action-sheet.js +2 -2
  2. package/components/button-active.js +1 -1
  3. package/components/button.js +2 -2
  4. package/components/buttons.js +2 -2
  5. package/components/checkbox.js +6 -3
  6. package/components/data.js +31 -7
  7. package/components/index.js +2 -2
  8. package/components/index2.js +203 -429
  9. package/components/index3.js +429 -203
  10. package/components/ion-back-button.js +2 -2
  11. package/components/ion-badge.js +2 -2
  12. package/components/ion-breadcrumb.js +2 -2
  13. package/components/ion-card-content.js +2 -2
  14. package/components/ion-card-subtitle.js +2 -2
  15. package/components/ion-card-title.js +2 -2
  16. package/components/ion-card.js +2 -2
  17. package/components/ion-chip.js +3 -8
  18. package/components/ion-datetime-button.js +5 -2
  19. package/components/ion-datetime.js +132 -92
  20. package/components/ion-header.js +1 -1
  21. package/components/ion-item-divider.js +2 -2
  22. package/components/ion-item-option.js +2 -2
  23. package/components/ion-item-options.js +2 -2
  24. package/components/ion-item-sliding.js +1 -1
  25. package/components/ion-loading.js +2 -2
  26. package/components/ion-menu-button.js +2 -2
  27. package/components/ion-menu.js +3 -3
  28. package/components/ion-modal.js +2 -2
  29. package/components/ion-nav.js +1 -1
  30. package/components/ion-range.js +3 -3
  31. package/components/ion-refresher.js +3 -3
  32. package/components/ion-reorder-group.js +1 -1
  33. package/components/ion-reorder.js +2 -2
  34. package/components/ion-router-outlet.js +1 -1
  35. package/components/ion-searchbar.js +3 -9
  36. package/components/ion-segment.js +1 -1
  37. package/components/ion-textarea.js +2 -2
  38. package/components/ion-title.js +2 -2
  39. package/components/ion-toast.js +2 -2
  40. package/components/ion-toggle.js +7 -4
  41. package/components/ion-toolbar.js +2 -2
  42. package/components/ios.transition.js +5 -5
  43. package/components/item.js +2 -2
  44. package/components/label.js +2 -2
  45. package/components/list-header.js +2 -2
  46. package/components/md.transition.js +1 -1
  47. package/components/note.js +2 -2
  48. package/components/picker-column.js +1 -1
  49. package/components/popover.js +1 -1
  50. package/components/radio.js +6 -3
  51. package/components/swipe-back.js +1 -1
  52. package/css/core.css +0 -100
  53. package/css/core.css.map +1 -1
  54. package/css/display.css +0 -33
  55. package/css/display.css.map +1 -1
  56. package/css/float-elements.css +0 -33
  57. package/css/float-elements.css.map +1 -1
  58. package/css/global.bundle.css +6 -84
  59. package/css/global.bundle.css.map +1 -1
  60. package/css/ionic-swiper.css +0 -33
  61. package/css/ionic-swiper.css.map +1 -1
  62. package/css/ionic.bundle.css +1 -1
  63. package/css/ionic.bundle.css.map +1 -1
  64. package/css/padding.css +0 -33
  65. package/css/padding.css.map +1 -1
  66. package/css/structure.css +0 -33
  67. package/css/structure.css.map +1 -1
  68. package/css/text-alignment.css +0 -33
  69. package/css/text-alignment.css.map +1 -1
  70. package/css/text-transformation.css +0 -33
  71. package/css/text-transformation.css.map +1 -1
  72. package/css/typography.css +6 -51
  73. package/css/typography.css.map +1 -1
  74. package/css/utils.bundle.css +0 -165
  75. package/css/utils.bundle.css.map +1 -1
  76. package/dist/cjs/{data-967b9c15.js → data-db832785.js} +31 -7
  77. package/dist/cjs/{index-552c4df4.js → index-8568bedb.js} +2 -2
  78. package/dist/cjs/index.cjs.js +12 -11
  79. package/dist/cjs/ion-action-sheet.cjs.entry.js +2 -2
  80. package/dist/cjs/ion-app_8.cjs.entry.js +8 -8
  81. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  82. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  83. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  84. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  85. package/dist/cjs/ion-card_5.cjs.entry.js +8 -8
  86. package/dist/cjs/ion-checkbox.cjs.entry.js +5 -3
  87. package/dist/cjs/ion-chip.cjs.entry.js +2 -7
  88. package/dist/cjs/ion-datetime-button.cjs.entry.js +6 -3
  89. package/dist/cjs/ion-datetime_3.cjs.entry.js +132 -93
  90. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  91. package/dist/cjs/ion-item_8.cjs.entry.js +10 -10
  92. package/dist/cjs/ion-loading.cjs.entry.js +2 -2
  93. package/dist/cjs/ion-menu_3.cjs.entry.js +4 -4
  94. package/dist/cjs/ion-modal.cjs.entry.js +1 -1
  95. package/dist/cjs/ion-nav_2.cjs.entry.js +1 -1
  96. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  97. package/dist/cjs/ion-radio_2.cjs.entry.js +5 -3
  98. package/dist/cjs/ion-range.cjs.entry.js +2 -2
  99. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
  100. package/dist/cjs/ion-searchbar.cjs.entry.js +3 -9
  101. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  102. package/dist/cjs/ion-toast.cjs.entry.js +2 -2
  103. package/dist/cjs/ion-toggle.cjs.entry.js +5 -3
  104. package/dist/cjs/ionic.cjs.js +2 -2
  105. package/dist/cjs/{ios.transition-b53fc1d5.js → ios.transition-f7c78d7c.js} +5 -5
  106. package/dist/cjs/loader.cjs.js +1 -1
  107. package/dist/cjs/{md.transition-d96426d5.js → md.transition-65dc7dce.js} +1 -1
  108. package/dist/collection/collection-manifest.json +2 -2
  109. package/dist/collection/components/accordion/accordion.ios.css +0 -66
  110. package/dist/collection/components/accordion/accordion.md.css +0 -33
  111. package/dist/collection/components/accordion-group/accordion-group.ios.css +0 -66
  112. package/dist/collection/components/accordion-group/accordion-group.md.css +0 -99
  113. package/dist/collection/components/action-sheet/action-sheet.ios.css +12 -80
  114. package/dist/collection/components/action-sheet/action-sheet.md.css +8 -76
  115. package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +0 -27
  116. package/dist/collection/components/alert/alert.ios.css +0 -99
  117. package/dist/collection/components/alert/alert.md.css +0 -99
  118. package/dist/collection/components/avatar/avatar.ios.css +0 -66
  119. package/dist/collection/components/avatar/avatar.md.css +0 -66
  120. package/dist/collection/components/back-button/back-button.ios.css +1 -83
  121. package/dist/collection/components/back-button/back-button.md.css +3 -75
  122. package/dist/collection/components/backdrop/backdrop.ios.css +0 -66
  123. package/dist/collection/components/backdrop/backdrop.md.css +0 -66
  124. package/dist/collection/components/badge/badge.ios.css +1 -75
  125. package/dist/collection/components/badge/badge.md.css +1 -67
  126. package/dist/collection/components/breadcrumb/breadcrumb.ios.css +3 -80
  127. package/dist/collection/components/breadcrumb/breadcrumb.md.css +3 -69
  128. package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +0 -33
  129. package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +0 -33
  130. package/dist/collection/components/breadcrumbs/test/a11y/breadcrumbs.e2e.js +0 -21
  131. package/dist/collection/components/button/button.ios.css +19 -118
  132. package/dist/collection/components/button/button.md.css +3 -69
  133. package/dist/collection/components/buttons/buttons.ios.css +3 -102
  134. package/dist/collection/components/buttons/buttons.md.css +2 -101
  135. package/dist/collection/components/card/card.ios.css +1 -67
  136. package/dist/collection/components/card/card.md.css +1 -67
  137. package/dist/collection/components/card-content/card-content.ios.css +5 -71
  138. package/dist/collection/components/card-content/card-content.md.css +5 -71
  139. package/dist/collection/components/card-header/card-header.ios.css +0 -66
  140. package/dist/collection/components/card-header/card-header.md.css +0 -66
  141. package/dist/collection/components/card-subtitle/card-subtitle.ios.css +1 -67
  142. package/dist/collection/components/card-subtitle/card-subtitle.md.css +1 -67
  143. package/dist/collection/components/card-title/card-title.ios.css +1 -67
  144. package/dist/collection/components/card-title/card-title.md.css +1 -67
  145. package/dist/collection/components/checkbox/checkbox.ios.css +35 -99
  146. package/dist/collection/components/checkbox/checkbox.js +24 -4
  147. package/dist/collection/components/checkbox/checkbox.md.css +35 -99
  148. package/dist/collection/components/checkbox/test/item/checkbox.e2e.js +13 -0
  149. package/dist/collection/components/checkbox/test/label/checkbox.e2e.js +16 -0
  150. package/dist/collection/components/chip/{chip.md.css → chip.css} +7 -43
  151. package/dist/collection/components/chip/chip.js +2 -4
  152. package/dist/collection/components/col/col.css +0 -66
  153. package/dist/collection/components/content/content.css +0 -33
  154. package/dist/collection/components/datetime/datetime.ios.css +32 -95
  155. package/dist/collection/components/datetime/datetime.js +137 -93
  156. package/dist/collection/components/datetime/datetime.md.css +20 -94
  157. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +25 -0
  158. package/dist/collection/components/datetime/test/color/datetime.e2e.js +1 -1
  159. package/dist/collection/components/datetime/test/custom/datetime.e2e.js +27 -1
  160. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +15 -0
  161. package/dist/collection/components/datetime/test/set-value/datetime.e2e.js +9 -12
  162. package/dist/collection/components/datetime/utils/data.js +14 -6
  163. package/dist/collection/components/datetime/utils/parse.js +18 -1
  164. package/dist/collection/components/datetime-button/datetime-button.css +2 -36
  165. package/dist/collection/components/datetime-button/datetime-button.js +3 -0
  166. package/dist/collection/components/fab/fab.css +0 -66
  167. package/dist/collection/components/fab-button/fab-button.ios.css +0 -66
  168. package/dist/collection/components/fab-button/fab-button.md.css +0 -66
  169. package/dist/collection/components/fab-list/fab-list.css +0 -66
  170. package/dist/collection/components/footer/footer.ios.css +0 -66
  171. package/dist/collection/components/footer/footer.md.css +0 -66
  172. package/dist/collection/components/grid/grid.css +0 -66
  173. package/dist/collection/components/header/header.ios.css +2 -71
  174. package/dist/collection/components/header/header.md.css +0 -66
  175. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +0 -66
  176. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +0 -66
  177. package/dist/collection/components/input/input.ios.css +0 -99
  178. package/dist/collection/components/input/input.md.css +0 -198
  179. package/dist/collection/components/item/item.ios.css +4 -70
  180. package/dist/collection/components/item/item.md.css +6 -138
  181. package/dist/collection/components/item/test/a11y/item.e2e.js +1 -116
  182. package/dist/collection/components/item-divider/item-divider.ios.css +9 -101
  183. package/dist/collection/components/item-divider/item-divider.md.css +11 -103
  184. package/dist/collection/components/item-group/item-group.ios.css +1 -68
  185. package/dist/collection/components/item-group/item-group.md.css +1 -68
  186. package/dist/collection/components/item-option/item-option.ios.css +1 -67
  187. package/dist/collection/components/item-option/item-option.md.css +1 -67
  188. package/dist/collection/components/item-options/item-options.ios.css +1 -99
  189. package/dist/collection/components/item-options/item-options.md.css +1 -99
  190. package/dist/collection/components/item-sliding/item-sliding.css +0 -33
  191. package/dist/collection/components/label/label.ios.css +6 -105
  192. package/dist/collection/components/label/label.md.css +5 -104
  193. package/dist/collection/components/list/list.ios.css +0 -99
  194. package/dist/collection/components/list/list.md.css +0 -99
  195. package/dist/collection/components/list-header/list-header.ios.css +1 -100
  196. package/dist/collection/components/list-header/list-header.md.css +1 -100
  197. package/dist/collection/components/loading/loading.ios.css +1 -67
  198. package/dist/collection/components/loading/loading.md.css +1 -67
  199. package/dist/collection/components/loading/test/a11y/loading.e2e.js +0 -19
  200. package/dist/collection/components/menu/menu.ios.css +94 -66
  201. package/dist/collection/components/menu/menu.md.css +94 -66
  202. package/dist/collection/components/menu-button/menu-button.ios.css +2 -70
  203. package/dist/collection/components/menu-button/menu-button.md.css +3 -71
  204. package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +1 -20
  205. package/dist/collection/components/modal/modal.ios.css +0 -66
  206. package/dist/collection/components/modal/modal.md.css +0 -66
  207. package/dist/collection/components/nav/nav.css +0 -33
  208. package/dist/collection/components/note/note.ios.css +0 -67
  209. package/dist/collection/components/note/note.md.css +1 -67
  210. package/dist/collection/components/picker/picker.ios.css +0 -66
  211. package/dist/collection/components/picker/picker.md.css +0 -66
  212. package/dist/collection/components/picker-column/picker-column.ios.css +0 -66
  213. package/dist/collection/components/picker-column/picker-column.md.css +0 -66
  214. package/dist/collection/components/picker-column-internal/picker-column-internal.ios.css +0 -33
  215. package/dist/collection/components/picker-column-internal/picker-column-internal.md.css +0 -66
  216. package/dist/collection/components/picker-internal/picker-internal.ios.css +0 -66
  217. package/dist/collection/components/picker-internal/picker-internal.md.css +0 -66
  218. package/dist/collection/components/popover/popover.ios.css +0 -66
  219. package/dist/collection/components/popover/popover.md.css +0 -66
  220. package/dist/collection/components/progress-bar/progress-bar.ios.css +0 -33
  221. package/dist/collection/components/progress-bar/progress-bar.md.css +0 -33
  222. package/dist/collection/components/radio/radio.ios.css +33 -97
  223. package/dist/collection/components/radio/radio.js +24 -4
  224. package/dist/collection/components/radio/radio.md.css +33 -97
  225. package/dist/collection/components/radio/test/item/radio.e2e.js +15 -0
  226. package/dist/collection/components/radio/test/label-placement/radio.e2e.js +20 -0
  227. package/dist/collection/components/range/range.ios.css +46 -80
  228. package/dist/collection/components/range/range.js +3 -3
  229. package/dist/collection/components/range/range.md.css +49 -97
  230. package/dist/collection/components/range/test/a11y/range.e2e.js +0 -22
  231. package/dist/collection/components/range/test/label/range.e2e.js +48 -0
  232. package/dist/collection/components/refresher/refresher.ios.css +0 -66
  233. package/dist/collection/components/refresher/refresher.md.css +0 -66
  234. package/dist/collection/components/reorder/reorder.ios.css +2 -75
  235. package/dist/collection/components/reorder/reorder.md.css +2 -75
  236. package/dist/collection/components/reorder-group/reorder-group.css +0 -33
  237. package/dist/collection/components/ripple-effect/ripple-effect.css +0 -33
  238. package/dist/collection/components/router-link/router-link.css +0 -33
  239. package/dist/collection/components/router-outlet/router-outlet.css +0 -33
  240. package/dist/collection/components/router-outlet/router-outlet.js +6 -1
  241. package/dist/collection/components/row/row.css +0 -66
  242. package/dist/collection/components/searchbar/searchbar.ios.css +16 -95
  243. package/dist/collection/components/searchbar/searchbar.js +1 -7
  244. package/dist/collection/components/searchbar/searchbar.md.css +10 -77
  245. package/dist/collection/components/searchbar/test/basic/searchbar.e2e.js +0 -18
  246. package/dist/collection/components/segment/segment.ios.css +0 -99
  247. package/dist/collection/components/segment/segment.md.css +0 -99
  248. package/dist/collection/components/segment-button/segment-button.ios.css +0 -66
  249. package/dist/collection/components/segment-button/segment-button.md.css +0 -66
  250. package/dist/collection/components/select/select.ios.css +0 -99
  251. package/dist/collection/components/select/select.md.css +0 -165
  252. package/dist/collection/components/select-popover/select-popover.ios.css +1 -101
  253. package/dist/collection/components/select-popover/select-popover.md.css +0 -99
  254. package/dist/collection/components/skeleton-text/skeleton-text.css +0 -33
  255. package/dist/collection/components/spinner/spinner.css +0 -33
  256. package/dist/collection/components/split-pane/split-pane.ios.css +0 -99
  257. package/dist/collection/components/split-pane/split-pane.md.css +0 -99
  258. package/dist/collection/components/tab-bar/tab-bar.ios.css +0 -99
  259. package/dist/collection/components/tab-bar/tab-bar.md.css +0 -99
  260. package/dist/collection/components/tab-button/tab-button.ios.css +0 -66
  261. package/dist/collection/components/tab-button/tab-button.md.css +0 -66
  262. package/dist/collection/components/tabs/tabs.css +0 -33
  263. package/dist/collection/components/text/text.css +0 -33
  264. package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +1 -15
  265. package/dist/collection/components/textarea/textarea.ios.css +1 -133
  266. package/dist/collection/components/textarea/textarea.md.css +1 -199
  267. package/dist/collection/components/thumbnail/thumbnail.css +0 -33
  268. package/dist/collection/components/title/title.ios.css +10 -43
  269. package/dist/collection/components/title/title.md.css +2 -35
  270. package/dist/collection/components/toast/test/a11y/toast.e2e.js +1 -98
  271. package/dist/collection/components/toast/toast.ios.css +3 -74
  272. package/dist/collection/components/toast/toast.md.css +4 -74
  273. package/dist/collection/components/toggle/test/item/toggle.e2e.js +15 -0
  274. package/dist/collection/components/toggle/test/label/toggle.e2e.js +16 -0
  275. package/dist/collection/components/toggle/toggle.ios.css +35 -100
  276. package/dist/collection/components/toggle/toggle.js +24 -4
  277. package/dist/collection/components/toggle/toggle.md.css +35 -100
  278. package/dist/collection/components/toolbar/toolbar.ios.css +16 -70
  279. package/dist/collection/components/toolbar/toolbar.md.css +2 -70
  280. package/dist/collection/index.js +1 -0
  281. package/dist/collection/utils/transition/ios.transition.js +4 -4
  282. package/dist/docs.json +155 -21
  283. package/dist/esm/{data-4b448e3a.js → data-009dbf15.js} +31 -7
  284. package/dist/esm/{index-2970aafc.js → index-6391de89.js} +2 -2
  285. package/dist/esm/index.js +4 -4
  286. package/dist/esm/ion-action-sheet.entry.js +2 -2
  287. package/dist/esm/ion-app_8.entry.js +8 -8
  288. package/dist/esm/ion-avatar_3.entry.js +2 -2
  289. package/dist/esm/ion-back-button.entry.js +2 -2
  290. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  291. package/dist/esm/ion-button_2.entry.js +2 -2
  292. package/dist/esm/ion-card_5.entry.js +8 -8
  293. package/dist/esm/ion-checkbox.entry.js +5 -3
  294. package/dist/esm/ion-chip.entry.js +2 -7
  295. package/dist/esm/ion-datetime-button.entry.js +6 -3
  296. package/dist/esm/ion-datetime_3.entry.js +132 -93
  297. package/dist/esm/ion-item-option_3.entry.js +4 -4
  298. package/dist/esm/ion-item_8.entry.js +10 -10
  299. package/dist/esm/ion-loading.entry.js +2 -2
  300. package/dist/esm/ion-menu_3.entry.js +4 -4
  301. package/dist/esm/ion-modal.entry.js +1 -1
  302. package/dist/esm/ion-nav_2.entry.js +1 -1
  303. package/dist/esm/ion-popover.entry.js +1 -1
  304. package/dist/esm/ion-radio_2.entry.js +5 -3
  305. package/dist/esm/ion-range.entry.js +2 -2
  306. package/dist/esm/ion-reorder_2.entry.js +2 -2
  307. package/dist/esm/ion-searchbar.entry.js +3 -9
  308. package/dist/esm/ion-textarea.entry.js +2 -2
  309. package/dist/esm/ion-toast.entry.js +2 -2
  310. package/dist/esm/ion-toggle.entry.js +5 -3
  311. package/dist/esm/ionic.js +2 -2
  312. package/dist/esm/{ios.transition-4e8d7fb7.js → ios.transition-3137d23e.js} +5 -5
  313. package/dist/esm/loader.js +1 -1
  314. package/dist/esm/{md.transition-2b41d64c.js → md.transition-48b3b77c.js} +1 -1
  315. package/dist/esm-es5/data-009dbf15.js +4 -0
  316. package/dist/esm-es5/{index-2970aafc.js → index-6391de89.js} +1 -1
  317. package/dist/esm-es5/index.js +1 -1
  318. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  319. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  320. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  321. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  322. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  323. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  324. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  325. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  326. package/dist/esm-es5/ion-chip.entry.js +1 -1
  327. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  328. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  329. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  330. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  331. package/dist/esm-es5/ion-loading.entry.js +1 -1
  332. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  333. package/dist/esm-es5/ion-modal.entry.js +1 -1
  334. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  335. package/dist/esm-es5/ion-popover.entry.js +1 -1
  336. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  337. package/dist/esm-es5/ion-range.entry.js +1 -1
  338. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  339. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  340. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  341. package/dist/esm-es5/ion-toast.entry.js +1 -1
  342. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  343. package/dist/esm-es5/ionic.js +1 -1
  344. package/dist/esm-es5/ios.transition-3137d23e.js +4 -0
  345. package/dist/esm-es5/loader.js +1 -1
  346. package/dist/esm-es5/{md.transition-2b41d64c.js → md.transition-48b3b77c.js} +1 -1
  347. package/dist/html.html-data.json +52 -4
  348. package/dist/ionic/index.esm.js +1 -1
  349. package/dist/ionic/ionic.esm.js +1 -1
  350. package/dist/ionic/ionic.js +1 -1
  351. package/dist/ionic/p-06902103.system.js +4 -0
  352. package/dist/ionic/{p-a5481fd3.system.entry.js → p-0b68c41d.system.entry.js} +1 -1
  353. package/dist/ionic/p-0cc2bf5a.system.entry.js +4 -0
  354. package/dist/ionic/p-11248f01.js +4 -0
  355. package/dist/ionic/p-1f4adf06.system.entry.js +4 -0
  356. package/dist/ionic/p-2061c86f.system.entry.js +4 -0
  357. package/dist/ionic/{p-80eed21b.entry.js → p-208f640c.entry.js} +1 -1
  358. package/dist/ionic/p-218b6f33.entry.js +4 -0
  359. package/dist/ionic/p-2da6ba37.system.entry.js +4 -0
  360. package/dist/ionic/p-341d5877.entry.js +4 -0
  361. package/dist/ionic/p-38dd9aec.entry.js +4 -0
  362. package/dist/ionic/p-40138199.entry.js +4 -0
  363. package/dist/ionic/p-430e902d.entry.js +4 -0
  364. package/dist/ionic/p-44ef7224.system.js +4 -0
  365. package/dist/ionic/p-48144921.entry.js +4 -0
  366. package/dist/ionic/p-4ca1ce6b.system.entry.js +4 -0
  367. package/dist/ionic/p-51b165af.system.js +4 -0
  368. package/dist/ionic/p-57f0efcc.entry.js +4 -0
  369. package/dist/ionic/p-5ba27716.system.entry.js +4 -0
  370. package/dist/ionic/{p-2e45dce9.system.entry.js → p-62324608.system.entry.js} +1 -1
  371. package/dist/ionic/{p-5d418c78.entry.js → p-653f2fc6.entry.js} +1 -1
  372. package/dist/ionic/p-67b891af.entry.js +4 -0
  373. package/dist/ionic/p-69303bb5.system.js +4 -0
  374. package/dist/ionic/p-6b3afb0f.entry.js +4 -0
  375. package/dist/ionic/p-6bf632d0.system.entry.js +4 -0
  376. package/dist/ionic/{p-c569a270.entry.js → p-728ac2b3.entry.js} +1 -1
  377. package/dist/ionic/p-7cfd253c.js +4 -0
  378. package/dist/ionic/p-82f5c07e.system.entry.js +4 -0
  379. package/dist/ionic/p-82f8ee51.entry.js +4 -0
  380. package/dist/ionic/p-83bcaec9.system.entry.js +4 -0
  381. package/dist/ionic/p-86c5c320.entry.js +4 -0
  382. package/dist/ionic/{p-586e0a90.system.entry.js → p-87383d00.system.entry.js} +1 -1
  383. package/dist/ionic/p-90ec5785.system.entry.js +4 -0
  384. package/dist/ionic/{p-eaede417.entry.js → p-98ebc376.entry.js} +1 -1
  385. package/dist/ionic/p-9c32000a.entry.js +4 -0
  386. package/dist/ionic/{p-1decbac2.js → p-a2b25750.js} +1 -1
  387. package/dist/ionic/p-a34669bf.system.entry.js +4 -0
  388. package/dist/ionic/p-a3f9d271.entry.js +4 -0
  389. package/dist/ionic/p-a62c0ff4.js +4 -0
  390. package/dist/ionic/p-af0bc751.system.entry.js +4 -0
  391. package/dist/ionic/p-af986299.system.entry.js +4 -0
  392. package/dist/ionic/p-b0e9e0b8.system.entry.js +4 -0
  393. package/dist/ionic/p-b321c999.entry.js +4 -0
  394. package/dist/ionic/p-bbae0ac3.system.entry.js +4 -0
  395. package/dist/ionic/p-bf4b8d8a.system.entry.js +4 -0
  396. package/dist/ionic/p-d5e3bff3.entry.js +4 -0
  397. package/dist/ionic/p-d8a0267b.system.entry.js +4 -0
  398. package/dist/ionic/p-dbb48066.system.entry.js +4 -0
  399. package/dist/ionic/p-dc49c681.system.entry.js +4 -0
  400. package/dist/ionic/{p-f7dcca6a.system.js → p-df6743df.system.js} +1 -1
  401. package/dist/ionic/p-e112994b.system.entry.js +4 -0
  402. package/dist/ionic/{p-f29fe8c3.system.js → p-e3d5608d.system.js} +1 -1
  403. package/dist/ionic/p-e805ff9f.system.entry.js +4 -0
  404. package/dist/ionic/p-ed7b205b.entry.js +4 -0
  405. package/dist/ionic/p-f5c19164.entry.js +4 -0
  406. package/dist/ionic/p-f9567c67.entry.js +4 -0
  407. package/dist/ionic/p-fa3327e8.system.entry.js +4 -0
  408. package/dist/ionic/{p-fbb2649b.entry.js → p-fabb7294.entry.js} +1 -1
  409. package/dist/ionic/{p-8eed522b.entry.js → p-fac1660b.entry.js} +1 -1
  410. package/dist/ionic/p-fe83e3e2.entry.js +4 -0
  411. package/dist/types/components/checkbox/checkbox.d.ts +8 -1
  412. package/dist/types/components/datetime/datetime.d.ts +23 -10
  413. package/dist/types/components/datetime/utils/data.d.ts +1 -1
  414. package/dist/types/components/datetime/utils/parse.d.ts +3 -3
  415. package/dist/types/components/radio/radio.d.ts +8 -1
  416. package/dist/types/components/range/range.d.ts +2 -1
  417. package/dist/types/components/toast/toast-interface.d.ts +3 -0
  418. package/dist/types/components/toggle/toggle.d.ts +8 -1
  419. package/dist/types/components.d.ts +40 -16
  420. package/dist/types/index.d.ts +1 -0
  421. package/dist/types/interface.d.ts +1 -0
  422. package/hydrate/index.js +345 -264
  423. package/package.json +3 -3
  424. package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +0 -26
  425. package/dist/collection/components/badge/test/a11y/badge.e2e.js +0 -22
  426. package/dist/collection/components/button/test/a11y/button.e2e.js +0 -61
  427. package/dist/collection/components/buttons/test/a11y/buttons.e2e.js +0 -74
  428. package/dist/collection/components/card/test/a11y/card.e2e.js +0 -31
  429. package/dist/collection/components/chip/chip.ios.css +0 -190
  430. package/dist/collection/components/chip/test/a11y/chip.e2e.js +0 -58
  431. package/dist/collection/components/datetime-button/test/a11y/datetime-button.e2e.js +0 -38
  432. package/dist/collection/components/item-divider/test/a11y/item-divider.e2e.js +0 -44
  433. package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +0 -34
  434. package/dist/collection/components/label/test/a11y/label.e2e.js +0 -66
  435. package/dist/collection/components/list-header/test/a11y/list-header.e2e.js +0 -24
  436. package/dist/collection/components/note/test/a11y/note.e2e.js +0 -52
  437. package/dist/collection/components/reorder-group/test/a11y/reorder-group.e2e.js +0 -33
  438. package/dist/collection/components/searchbar/test/a11y/searchbar.e2e.js +0 -37
  439. package/dist/collection/components/title/test/a11y/title.e2e.js +0 -61
  440. package/dist/collection/css/test/a11y/typography.e2e.js +0 -32
  441. package/dist/esm-es5/data-4b448e3a.js +0 -4
  442. package/dist/esm-es5/ios.transition-4e8d7fb7.js +0 -4
  443. package/dist/ionic/p-0053fe81.system.entry.js +0 -4
  444. package/dist/ionic/p-060aa1aa.entry.js +0 -4
  445. package/dist/ionic/p-0e4377e6.system.entry.js +0 -4
  446. package/dist/ionic/p-1e5f9f20.entry.js +0 -4
  447. package/dist/ionic/p-2c012642.entry.js +0 -4
  448. package/dist/ionic/p-2cdcd6f2.entry.js +0 -4
  449. package/dist/ionic/p-2f4e5cd6.system.entry.js +0 -4
  450. package/dist/ionic/p-2f6fbeab.system.entry.js +0 -4
  451. package/dist/ionic/p-39bf6a89.js +0 -4
  452. package/dist/ionic/p-418fc6f2.system.entry.js +0 -4
  453. package/dist/ionic/p-468ac44a.system.entry.js +0 -4
  454. package/dist/ionic/p-5009cb46.entry.js +0 -4
  455. package/dist/ionic/p-5b88f780.entry.js +0 -4
  456. package/dist/ionic/p-5e8d7def.system.entry.js +0 -4
  457. package/dist/ionic/p-601fd53c.js +0 -4
  458. package/dist/ionic/p-65105512.entry.js +0 -4
  459. package/dist/ionic/p-66d2ef38.entry.js +0 -4
  460. package/dist/ionic/p-721933ff.system.js +0 -4
  461. package/dist/ionic/p-7ea1a467.system.js +0 -4
  462. package/dist/ionic/p-80b152fd.system.entry.js +0 -4
  463. package/dist/ionic/p-89d96720.entry.js +0 -4
  464. package/dist/ionic/p-91f9a6aa.system.entry.js +0 -4
  465. package/dist/ionic/p-94f99a8b.entry.js +0 -4
  466. package/dist/ionic/p-985d547d.system.entry.js +0 -4
  467. package/dist/ionic/p-98b618ce.system.entry.js +0 -4
  468. package/dist/ionic/p-9e306450.system.entry.js +0 -4
  469. package/dist/ionic/p-b03dae0c.system.entry.js +0 -4
  470. package/dist/ionic/p-b062bc29.entry.js +0 -4
  471. package/dist/ionic/p-b0b8c0c9.system.entry.js +0 -4
  472. package/dist/ionic/p-b3394798.system.entry.js +0 -4
  473. package/dist/ionic/p-bc8b9c38.system.entry.js +0 -4
  474. package/dist/ionic/p-c4aea998.entry.js +0 -4
  475. package/dist/ionic/p-c64711cc.entry.js +0 -4
  476. package/dist/ionic/p-c9fd7db5.system.entry.js +0 -4
  477. package/dist/ionic/p-caa4c0fa.entry.js +0 -4
  478. package/dist/ionic/p-cc8910e7.system.js +0 -4
  479. package/dist/ionic/p-cd4b6518.system.js +0 -4
  480. package/dist/ionic/p-d1e6b365.entry.js +0 -4
  481. package/dist/ionic/p-d4044209.system.entry.js +0 -4
  482. package/dist/ionic/p-d6de281e.entry.js +0 -4
  483. package/dist/ionic/p-e497d6a5.js +0 -4
  484. package/dist/ionic/p-e53b8af4.system.entry.js +0 -4
  485. package/dist/ionic/p-f1e5e368.system.entry.js +0 -4
  486. package/dist/ionic/p-f2b925a2.system.entry.js +0 -4
  487. package/dist/ionic/p-f78e60a5.entry.js +0 -4
  488. package/dist/ionic/p-f902ddc6.entry.js +0 -4
  489. package/dist/ionic/p-f9ec8c18.entry.js +0 -4
  490. package/dist/ionic/p-fade59a2.system.entry.js +0 -4
@@ -1,36 +1,3 @@
1
- /**
2
- * Convert a font size to a dynamic font size.
3
- * Fonts that participate in Dynamic Type should use
4
- * dynamic font sizes.
5
- * @param size - The initial font size including the unit (i.e. px or pt)
6
- * @param unit (optional) - The unit to convert to. Use this if you want to
7
- * convert to a unit other than $baselineUnit.
8
- */
9
- /**
10
- * Convert a font size to a dynamic font size but impose
11
- * a maximum font size.
12
- * @param size - The initial font size including the unit (i.e. px or pt)
13
- * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
14
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
15
- * convert to a unit other than $baselineUnit.
16
- */
17
- /**
18
- * Convert a font size to a dynamic font size but impose
19
- * a minimum font size.
20
- * @param size - The initial font size including the unit (i.e. px or pt)
21
- * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
22
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
23
- * convert to a unit other than $baselineUnit.
24
- */
25
- /**
26
- * Convert a font size to a dynamic font size but impose
27
- * maximum and minimum font sizes.
28
- * @param size - The initial font size including the unit (i.e. px or pt)
29
- * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
30
- * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
31
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
32
- * convert to a unit other than $baselineUnit.
33
- */
34
1
  :host {
35
2
  /**
36
3
  * @prop --background: The primary background of the datetime component.
@@ -314,6 +281,8 @@ ion-picker-column-internal {
314
281
  }
315
282
 
316
283
  :host .calendar-body .calendar-month {
284
+ display: flex;
285
+ flex-flow: column;
317
286
  /**
318
287
  * Swiping should snap to at
319
288
  * most one month at a time.
@@ -347,11 +316,21 @@ ion-picker-column-internal {
347
316
  grid-template-columns: repeat(7, 1fr);
348
317
  }
349
318
 
319
+ :host .calendar-day-wrapper {
320
+ display: flex;
321
+ align-items: center;
322
+ justify-content: center;
323
+ min-width: 0;
324
+ min-height: 0;
325
+ overflow: visible;
326
+ }
327
+
350
328
  /**
351
329
  * Center the day text vertically
352
330
  * and horizontally within its grid cell.
353
331
  */
354
332
  :host .calendar-day {
333
+ border-radius: 50%;
355
334
  -webkit-padding-start: 0px;
356
335
  padding-inline-start: 0px;
357
336
  -webkit-padding-end: 0px;
@@ -383,18 +362,9 @@ ion-picker-column-internal {
383
362
  opacity: 0.4;
384
363
  }
385
364
 
386
- .calendar-day-highlight {
387
- border-radius: 32px;
388
- -webkit-padding-start: 4px;
389
- padding-inline-start: 4px;
390
- -webkit-padding-end: 4px;
391
- padding-inline-end: 4px;
392
- padding-top: 4px;
393
- padding-bottom: 4px;
394
- position: absolute;
395
- width: 32px;
396
- height: 32px;
397
- z-index: -1;
365
+ .calendar-day:focus {
366
+ background: rgba(var(--ion-color-base-rgb), 0.2);
367
+ box-shadow: 0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2);
398
368
  }
399
369
 
400
370
  :host .datetime-time {
@@ -448,39 +418,6 @@ ion-picker-column-internal {
448
418
  --color: var(--ion-color-base);
449
419
  }
450
420
 
451
- /**
452
- * Convert a font size to a dynamic font size.
453
- * Fonts that participate in Dynamic Type should use
454
- * dynamic font sizes.
455
- * @param size - The initial font size including the unit (i.e. px or pt)
456
- * @param unit (optional) - The unit to convert to. Use this if you want to
457
- * convert to a unit other than $baselineUnit.
458
- */
459
- /**
460
- * Convert a font size to a dynamic font size but impose
461
- * a maximum font size.
462
- * @param size - The initial font size including the unit (i.e. px or pt)
463
- * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
464
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
465
- * convert to a unit other than $baselineUnit.
466
- */
467
- /**
468
- * Convert a font size to a dynamic font size but impose
469
- * a minimum font size.
470
- * @param size - The initial font size including the unit (i.e. px or pt)
471
- * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
472
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
473
- * convert to a unit other than $baselineUnit.
474
- */
475
- /**
476
- * Convert a font size to a dynamic font size but impose
477
- * maximum and minimum font sizes.
478
- * @param size - The initial font size including the unit (i.e. px or pt)
479
- * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
480
- * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
481
- * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
482
- * convert to a unit other than $baselineUnit.
483
- */
484
421
  :host {
485
422
  --background: var(--ion-color-light, #ffffff);
486
423
  --background-rgb: var(--ion-color-light-rgb);
@@ -567,25 +504,30 @@ ion-picker-column-internal {
567
504
  padding-inline-end: 8px;
568
505
  padding-top: 8px;
569
506
  padding-bottom: 8px;
507
+ align-items: center;
570
508
  height: calc(100% - 16px);
571
509
  }
572
510
 
573
- :host .calendar-day {
574
- font-size: 20px;
575
- }
576
-
577
- .calendar-day:focus .calendar-day-highlight,
578
- .calendar-day.calendar-day-active .calendar-day-highlight {
579
- opacity: 0.2;
511
+ :host .calendar-day-wrapper {
512
+ -webkit-padding-start: 4px;
513
+ padding-inline-start: 4px;
514
+ -webkit-padding-end: 4px;
515
+ padding-inline-end: 4px;
516
+ padding-top: 4px;
517
+ padding-bottom: 4px;
518
+ height: 0;
519
+ min-height: 16px;
580
520
  }
581
521
 
582
- .calendar-day.calendar-day-active .calendar-day-highlight {
583
- background: var(--ion-color-base);
522
+ :host .calendar-day {
523
+ width: 40px;
524
+ min-width: 40px;
525
+ height: 40px;
526
+ font-size: 20px;
584
527
  }
585
528
 
586
- .calendar-day:focus .calendar-day-highlight {
587
- /* stylelint-disable-next-line declaration-no-important */
588
- background: var(--ion-color-base) !important;
529
+ .calendar-day.calendar-day-active {
530
+ background: rgba(var(--ion-color-base-rgb), 0.2);
589
531
  }
590
532
 
591
533
  /**
@@ -614,11 +556,6 @@ ion-picker-column-internal {
614
556
  color: var(--ion-color-contrast);
615
557
  }
616
558
 
617
- .calendar-day.calendar-day-today.calendar-day-active .calendar-day-highlight {
618
- background: var(--ion-color-base);
619
- opacity: 1;
620
- }
621
-
622
559
  :host .datetime-time {
623
560
  -webkit-padding-start: 16px;
624
561
  padding-inline-start: 16px;
@@ -33,16 +33,17 @@ import { getCalendarDayState, getHighlightStyles, isDayDisabled, isMonthDisabled
33
33
  *
34
34
  * @part month-year-button - The button that opens the month/year picker when
35
35
  * using a grid style layout.
36
+ *
37
+ * @part calendar-day - The individual buttons that display a day inside of the datetime
38
+ * calendar.
39
+ * @part calendar-day active - The currently selected calendar day.
40
+ * @part calendar-day today - The calendar day that contains the current day.
41
+ * @part calendar-day disabled - The calendar day that is disabled.
36
42
  */
37
43
  export class Datetime {
38
44
  constructor() {
39
45
  this.inputId = `ion-dt-${datetimeIds++}`;
40
46
  this.prevPresentation = null;
41
- /**
42
- * Duplicate reference to `activeParts` that does not trigger a re-render of the component.
43
- * Allows caching an instance of the `activeParts` in between render cycles.
44
- */
45
- this.activePartsClone = [];
46
47
  this.warnIfIncorrectValueUsage = () => {
47
48
  const { multiple, value } = this;
48
49
  if (!multiple && Array.isArray(value)) {
@@ -70,9 +71,9 @@ export class Datetime {
70
71
  * data. This should be used when rendering an
71
72
  * interface in an environment where the `value`
72
73
  * may not be set. This function works
73
- * by returning the first selected date in
74
- * "activePartsClone" and then falling back to
75
- * defaultParts if no active date is selected.
74
+ * by returning the first selected date and then
75
+ * falling back to defaultParts if no active date
76
+ * is selected.
76
77
  */
77
78
  this.getActivePartsWithFallback = () => {
78
79
  var _a;
@@ -80,8 +81,8 @@ export class Datetime {
80
81
  return (_a = this.getActivePart()) !== null && _a !== void 0 ? _a : defaultParts;
81
82
  };
82
83
  this.getActivePart = () => {
83
- const { activePartsClone } = this;
84
- return Array.isArray(activePartsClone) ? activePartsClone[0] : activePartsClone;
84
+ const { activeParts } = this;
85
+ return Array.isArray(activeParts) ? activeParts[0] : activeParts;
85
86
  };
86
87
  this.closeParentOverlay = () => {
87
88
  const popoverOrModal = this.el.closest('ion-modal, ion-popover');
@@ -93,7 +94,7 @@ export class Datetime {
93
94
  this.workingParts = Object.assign({}, parts);
94
95
  };
95
96
  this.setActiveParts = (parts, removeDate = false) => {
96
- const { multiple, minParts, maxParts, activePartsClone } = this;
97
+ const { multiple, minParts, maxParts, activeParts } = this;
97
98
  /**
98
99
  * When setting the active parts, it is possible
99
100
  * to set invalid data. For example,
@@ -107,16 +108,7 @@ export class Datetime {
107
108
  const validatedParts = validateParts(parts, minParts, maxParts);
108
109
  this.setWorkingParts(validatedParts);
109
110
  if (multiple) {
110
- /**
111
- * We read from activePartsClone here because valueChanged() only updates that,
112
- * so it's the more reliable source of truth. If we read from activeParts, then
113
- * if you click July 1, manually set the value to July 2, and then click July 3,
114
- * the new value would be [July 1, July 3], ignoring the value set.
115
- *
116
- * We can then pass the new value to activeParts (rather than activePartsClone)
117
- * since the clone will be updated automatically by activePartsChanged().
118
- */
119
- const activePartsArray = Array.isArray(activePartsClone) ? activePartsClone : [activePartsClone];
111
+ const activePartsArray = Array.isArray(activeParts) ? activeParts : [activeParts];
120
112
  if (removeDate) {
121
113
  this.activeParts = activePartsArray.filter((p) => !isSameDay(p, validatedParts));
122
114
  }
@@ -241,7 +233,7 @@ export class Datetime {
241
233
  /**
242
234
  * Get the number of padding days so
243
235
  * we know how much to offset our next selector by
244
- * to grab the correct calenday-day element.
236
+ * to grab the correct calendar-day element.
245
237
  */
246
238
  const padding = currentMonth.querySelectorAll('.calendar-day-padding');
247
239
  const { day } = this.workingParts;
@@ -252,7 +244,7 @@ export class Datetime {
252
244
  * Get the calendar day element
253
245
  * and focus it.
254
246
  */
255
- const dayEl = currentMonth.querySelector(`.calendar-day:nth-of-type(${padding.length + day})`);
247
+ const dayEl = currentMonth.querySelector(`.calendar-day-wrapper:nth-of-type(${padding.length + day}) .calendar-day`);
256
248
  if (dayEl) {
257
249
  dayEl.focus();
258
250
  }
@@ -333,6 +325,19 @@ export class Datetime {
333
325
  const monthBox = month.getBoundingClientRect();
334
326
  if (Math.abs(monthBox.x - box.x) > 2)
335
327
  return;
328
+ /**
329
+ * If we're force-rendering a month, assume we've
330
+ * scrolled to that and return it.
331
+ *
332
+ * If forceRenderDate is ever used in a context where the
333
+ * forced month is not immediately auto-scrolled to, this
334
+ * should be updated to also check whether `month` has the
335
+ * same month and year as the forced date.
336
+ */
337
+ const { forceRenderDate } = this;
338
+ if (forceRenderDate !== undefined) {
339
+ return { month: forceRenderDate.month, year: forceRenderDate.year, day: forceRenderDate.day };
340
+ }
336
341
  /**
337
342
  * From here, we can determine if the start
338
343
  * month or the end month was scrolled into view.
@@ -387,6 +392,9 @@ export class Datetime {
387
392
  this.setWorkingParts(Object.assign(Object.assign({}, this.workingParts), { month, day: day, year }));
388
393
  calendarBodyRef.scrollLeft = workingMonth.clientWidth * (isRTL(this.el) ? -1 : 1);
389
394
  calendarBodyRef.style.removeProperty('overflow');
395
+ if (this.resolveForceDateScrolling) {
396
+ this.resolveForceDateScrolling();
397
+ }
390
398
  });
391
399
  };
392
400
  /**
@@ -441,10 +449,17 @@ export class Datetime {
441
449
  }
442
450
  };
443
451
  this.processValue = (value) => {
444
- const hasValue = value !== null && value !== undefined;
452
+ const hasValue = value !== null && value !== undefined && (!Array.isArray(value) || value.length > 0);
445
453
  const valueToProcess = hasValue ? parseDate(value) : this.defaultParts;
446
- const { minParts, maxParts } = this;
454
+ const { minParts, maxParts, workingParts, el } = this;
447
455
  this.warnIfIncorrectValueUsage();
456
+ /**
457
+ * Return early if the value wasn't parsed correctly, such as
458
+ * if an improperly formatted date string was provided.
459
+ */
460
+ if (!valueToProcess) {
461
+ return;
462
+ }
448
463
  /**
449
464
  * Datetime should only warn of out of bounds values
450
465
  * if set by the user. If the `value` is undefined,
@@ -462,16 +477,9 @@ export class Datetime {
462
477
  * that the values don't necessarily have to be in order.
463
478
  */
464
479
  const singleValue = Array.isArray(valueToProcess) ? valueToProcess[0] : valueToProcess;
465
- const { month, day, year, hour, minute } = clampDate(singleValue, minParts, maxParts);
480
+ const targetValue = clampDate(singleValue, minParts, maxParts);
481
+ const { month, day, year, hour, minute } = targetValue;
466
482
  const ampm = parseAmPm(hour);
467
- this.setWorkingParts({
468
- month,
469
- day,
470
- year,
471
- hour,
472
- minute,
473
- ampm,
474
- });
475
483
  /**
476
484
  * Since `activeParts` indicates a value that
477
485
  * been explicitly selected either by the
@@ -501,6 +509,62 @@ export class Datetime {
501
509
  */
502
510
  this.activeParts = [];
503
511
  }
512
+ /**
513
+ * Only animate if:
514
+ * 1. We're using grid style (wheel style pickers should just jump to new value)
515
+ * 2. The month and/or year actually changed, and both are defined (otherwise there's nothing to animate to)
516
+ * 3. The calendar body is visible (prevents animation when in collapsed datetime-button, for example)
517
+ * 4. The month/year picker is not open (since you wouldn't see the animation anyway)
518
+ */
519
+ const didChangeMonth = (month !== undefined && month !== workingParts.month) || (year !== undefined && year !== workingParts.year);
520
+ const bodyIsVisible = el.classList.contains('datetime-ready');
521
+ const { isGridStyle, showMonthAndYear } = this;
522
+ if (isGridStyle && didChangeMonth && bodyIsVisible && !showMonthAndYear) {
523
+ this.animateToDate(targetValue);
524
+ }
525
+ else {
526
+ /**
527
+ * We only need to do this if we didn't just animate to a new month,
528
+ * since that calls prevMonth/nextMonth which calls setWorkingParts for us.
529
+ */
530
+ this.setWorkingParts({
531
+ month,
532
+ day,
533
+ year,
534
+ hour,
535
+ minute,
536
+ ampm,
537
+ });
538
+ }
539
+ };
540
+ this.animateToDate = async (targetValue) => {
541
+ const { workingParts } = this;
542
+ /**
543
+ * Tell other render functions that we need to force the
544
+ * target month to appear in place of the actual next/prev month.
545
+ * Because this is a State variable, a rerender will be triggered
546
+ * automatically, updating the rendered months.
547
+ */
548
+ this.forceRenderDate = targetValue;
549
+ /**
550
+ * Flag that we've started scrolling to the forced date.
551
+ * The resolve function will be called by the datetime's
552
+ * scroll listener when it's done updating everything.
553
+ * This is a replacement for making prev/nextMonth async,
554
+ * since the logic we're waiting on is in a listener.
555
+ */
556
+ const forceDateScrollingPromise = new Promise((resolve) => {
557
+ this.resolveForceDateScrolling = resolve;
558
+ });
559
+ /**
560
+ * Animate smoothly to the forced month. This will also update
561
+ * workingParts and correct the surrounding months for us.
562
+ */
563
+ const targetMonthIsBefore = isBefore(targetValue, workingParts);
564
+ targetMonthIsBefore ? this.prevMonth() : this.nextMonth();
565
+ await forceDateScrollingPromise;
566
+ this.resolveForceDateScrolling = undefined;
567
+ this.forceRenderDate = undefined;
504
568
  };
505
569
  this.onFocus = () => {
506
570
  this.ionFocus.emit();
@@ -556,6 +620,7 @@ export class Datetime {
556
620
  ampm: 'pm',
557
621
  };
558
622
  this.isTimePopoverOpen = false;
623
+ this.forceRenderDate = undefined;
559
624
  this.color = 'primary';
560
625
  this.name = this.inputId;
561
626
  this.disabled = false;
@@ -595,6 +660,11 @@ export class Datetime {
595
660
  maxChanged() {
596
661
  this.processMaxParts();
597
662
  }
663
+ get isGridStyle() {
664
+ const { presentation, preferWheel } = this;
665
+ const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
666
+ return hasDatePresentation && !preferWheel;
667
+ }
598
668
  yearValuesChanged() {
599
669
  this.parsedYearValues = convertToArrayOfNumbers(this.yearValues);
600
670
  }
@@ -610,51 +680,13 @@ export class Datetime {
610
680
  minuteValuesChanged() {
611
681
  this.parsedMinuteValues = convertToArrayOfNumbers(this.minuteValues);
612
682
  }
613
- activePartsChanged() {
614
- this.activePartsClone = this.activeParts;
615
- }
616
683
  /**
617
684
  * Update the datetime value when the value changes
618
685
  */
619
- valueChanged() {
620
- const { value, minParts, maxParts, workingParts } = this;
686
+ async valueChanged() {
687
+ const { value } = this;
621
688
  if (this.hasValue()) {
622
- this.warnIfIncorrectValueUsage();
623
- /**
624
- * Clones the value of the `activeParts` to the private clone, to update
625
- * the date display on the current render cycle without causing another render.
626
- *
627
- * This allows us to update the current value's date/time display without
628
- * refocusing or shifting the user's display (leaves the user in place).
629
- */
630
- const valueDateParts = parseDate(value);
631
- if (valueDateParts) {
632
- warnIfValueOutOfBounds(valueDateParts, minParts, maxParts);
633
- if (Array.isArray(valueDateParts)) {
634
- this.activePartsClone = [...valueDateParts];
635
- }
636
- else {
637
- const { month, day, year, hour, minute } = valueDateParts;
638
- const ampm = hour != null ? (hour >= 12 ? 'pm' : 'am') : undefined;
639
- this.activePartsClone = Object.assign(Object.assign({}, this.activeParts), { month,
640
- day,
641
- year,
642
- hour,
643
- minute,
644
- ampm });
645
- /**
646
- * The working parts am/pm value must be updated when the value changes, to
647
- * ensure the time picker hour column values are generated correctly.
648
- *
649
- * Note that we don't need to do this if valueDateParts is an array, since
650
- * multiple="true" does not apply to time pickers.
651
- */
652
- this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { ampm }));
653
- }
654
- }
655
- else {
656
- printIonWarning(`Unable to parse date string: ${value}. Please provide a valid ISO 8601 datetime string.`);
657
- }
689
+ this.processValue(value);
658
690
  }
659
691
  this.emitStyle();
660
692
  this.ionValueChange.emit({ value });
@@ -857,8 +889,6 @@ export class Datetime {
857
889
  printIonWarning('The highlightedDates property is not supported with preferWheel="true".', el);
858
890
  }
859
891
  }
860
- this.processMinParts();
861
- this.processMaxParts();
862
892
  const hourValues = (this.parsedHourValues = convertToArrayOfNumbers(this.hourValues));
863
893
  const minuteValues = (this.parsedMinuteValues = convertToArrayOfNumbers(this.minuteValues));
864
894
  const monthValues = (this.parsedMonthValues = convertToArrayOfNumbers(this.monthValues));
@@ -866,6 +896,8 @@ export class Datetime {
866
896
  const dayValues = (this.parsedDayValues = convertToArrayOfNumbers(this.dayValues));
867
897
  const todayParts = (this.todayParts = parseDate(getToday()));
868
898
  this.defaultParts = getClosestValidDate(todayParts, monthValues, dayValues, yearValues, hourValues, minuteValues);
899
+ this.processMinParts();
900
+ this.processMaxParts();
869
901
  this.processValue(this.value);
870
902
  this.emitStyle();
871
903
  }
@@ -1250,7 +1282,7 @@ export class Datetime {
1250
1282
  const { el, highlightedDates, isDateEnabled, multiple } = this;
1251
1283
  const referenceParts = { month, day, year };
1252
1284
  const isCalendarPadding = day === null;
1253
- const { isActive, isToday, ariaLabel, ariaSelected, disabled, text } = getCalendarDayState(this.locale, referenceParts, this.activePartsClone, this.todayParts, this.minParts, this.maxParts, this.parsedDayValues);
1285
+ const { isActive, isToday, ariaLabel, ariaSelected, disabled, text } = getCalendarDayState(this.locale, referenceParts, this.activeParts, this.todayParts, this.minParts, this.maxParts, this.parsedDayValues);
1254
1286
  const dateIsoString = convertDataToISO(referenceParts);
1255
1287
  let isCalDayDisabled = isCalMonthDisabled || disabled;
1256
1288
  if (!isCalDayDisabled && isDateEnabled !== undefined) {
@@ -1274,14 +1306,30 @@ export class Datetime {
1274
1306
  if (highlightedDates !== undefined && !isActive && day !== null) {
1275
1307
  dateStyle = getHighlightStyles(highlightedDates, dateIsoString, el);
1276
1308
  }
1277
- return (h("button", { tabindex: "-1", "data-day": day, "data-month": month, "data-year": year, "data-index": index, "data-day-of-week": dayOfWeek, disabled: isCalDayDisabled, class: {
1309
+ let dateParts = undefined;
1310
+ // "Filler days" at the beginning of the grid should not get the calendar day
1311
+ // CSS parts added to them
1312
+ if (!isCalendarPadding) {
1313
+ dateParts = `calendar-day${isActive ? ' active' : ''}${isToday ? ' today' : ''}${isCalDayDisabled ? ' disabled' : ''}`;
1314
+ }
1315
+ return (h("div", { class: "calendar-day-wrapper" }, h("button", {
1316
+ // We need to use !important for the inline styles here because
1317
+ // otherwise the CSS shadow parts will override these styles.
1318
+ // See https://github.com/WICG/webcomponents/issues/847
1319
+ // Both the CSS shadow parts and highlightedDates styles are
1320
+ // provided by the developer, but highlightedDates styles should
1321
+ // always take priority.
1322
+ ref: (el) => {
1323
+ if (el) {
1324
+ el.style.setProperty('color', `${dateStyle ? dateStyle.textColor : ''}`, 'important');
1325
+ el.style.setProperty('background-color', `${dateStyle ? dateStyle.backgroundColor : ''}`, 'important');
1326
+ }
1327
+ }, tabindex: "-1", "data-day": day, "data-month": month, "data-year": year, "data-index": index, "data-day-of-week": dayOfWeek, disabled: isCalDayDisabled, class: {
1278
1328
  'calendar-day-padding': isCalendarPadding,
1279
1329
  'calendar-day': true,
1280
1330
  'calendar-day-active': isActive,
1281
1331
  'calendar-day-today': isToday,
1282
- }, style: dateStyle && {
1283
- color: dateStyle.textColor,
1284
- }, "aria-hidden": isCalendarPadding ? 'true' : null, "aria-selected": ariaSelected, "aria-label": ariaLabel, onClick: () => {
1332
+ }, part: dateParts, "aria-hidden": isCalendarPadding ? 'true' : null, "aria-selected": ariaSelected, "aria-label": ariaLabel, onClick: () => {
1285
1333
  if (isCalendarPadding) {
1286
1334
  return;
1287
1335
  }
@@ -1301,13 +1349,12 @@ export class Datetime {
1301
1349
  day,
1302
1350
  year }));
1303
1351
  }
1304
- } }, h("div", { class: "calendar-day-highlight", style: {
1305
- backgroundColor: dateStyle === null || dateStyle === void 0 ? void 0 : dateStyle.backgroundColor,
1306
- } }), text));
1352
+ }
1353
+ }, text)));
1307
1354
  }))));
1308
1355
  }
1309
1356
  renderCalendarBody() {
1310
- return (h("div", { class: "calendar-body ion-focusable", ref: (el) => (this.calendarBodyRef = el), tabindex: "0" }, generateMonths(this.workingParts).map(({ month, year }) => {
1357
+ return (h("div", { class: "calendar-body ion-focusable", ref: (el) => (this.calendarBodyRef = el), tabindex: "0" }, generateMonths(this.workingParts, this.forceRenderDate).map(({ month, year }) => {
1311
1358
  return this.renderMonth(month, year);
1312
1359
  })));
1313
1360
  }
@@ -1462,14 +1509,13 @@ export class Datetime {
1462
1509
  }
1463
1510
  }
1464
1511
  render() {
1465
- const { name, value, disabled, el, color, readonly, showMonthAndYear, preferWheel, presentation, size } = this;
1512
+ const { name, value, disabled, el, color, readonly, showMonthAndYear, preferWheel, presentation, size, isGridStyle, } = this;
1466
1513
  const mode = getIonMode(this);
1467
1514
  const isMonthAndYearPresentation = presentation === 'year' || presentation === 'month' || presentation === 'month-year';
1468
1515
  const shouldShowMonthAndYear = showMonthAndYear || isMonthAndYearPresentation;
1469
1516
  const monthYearPickerOpen = showMonthAndYear && !isMonthAndYearPresentation;
1470
1517
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1471
1518
  const hasWheelVariant = hasDatePresentation && preferWheel;
1472
- const hasGrid = hasDatePresentation && !preferWheel;
1473
1519
  renderHiddenInput(true, el, name, formatValue(value), disabled);
1474
1520
  return (h(Host, { "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1475
1521
  [mode]: true,
@@ -1480,7 +1526,7 @@ export class Datetime {
1480
1526
  [`datetime-presentation-${presentation}`]: true,
1481
1527
  [`datetime-size-${size}`]: true,
1482
1528
  [`datetime-prefer-wheel`]: hasWheelVariant,
1483
- [`datetime-grid`]: hasGrid,
1529
+ [`datetime-grid`]: isGridStyle,
1484
1530
  })) }, this.renderDatetime(mode)));
1485
1531
  }
1486
1532
  static get is() { return "ion-datetime"; }
@@ -2039,7 +2085,8 @@ export class Datetime {
2039
2085
  "showMonthAndYear": {},
2040
2086
  "activeParts": {},
2041
2087
  "workingParts": {},
2042
- "isTimePopoverOpen": {}
2088
+ "isTimePopoverOpen": {},
2089
+ "forceRenderDate": {}
2043
2090
  };
2044
2091
  }
2045
2092
  static get events() {
@@ -2267,9 +2314,6 @@ export class Datetime {
2267
2314
  }, {
2268
2315
  "propName": "minuteValues",
2269
2316
  "methodName": "minuteValuesChanged"
2270
- }, {
2271
- "propName": "activeParts",
2272
- "methodName": "activePartsChanged"
2273
2317
  }, {
2274
2318
  "propName": "value",
2275
2319
  "methodName": "valueChanged"