@ionic/core 7.3.4-dev.11694438635.14743086 → 7.3.4-dev.11694441708.198de185

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 +3 -6
  6. package/components/data.js +7 -31
  7. package/components/index.js +2 -2
  8. package/components/index2.js +429 -203
  9. package/components/index3.js +203 -429
  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 +8 -3
  18. package/components/ion-datetime-button.js +2 -5
  19. package/components/ion-datetime.js +92 -132
  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 +9 -3
  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 +4 -7
  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 +3 -6
  51. package/components/swipe-back.js +1 -1
  52. package/css/core.css +100 -0
  53. package/css/core.css.map +1 -1
  54. package/css/display.css +33 -0
  55. package/css/display.css.map +1 -1
  56. package/css/float-elements.css +33 -0
  57. package/css/float-elements.css.map +1 -1
  58. package/css/global.bundle.css +84 -6
  59. package/css/global.bundle.css.map +1 -1
  60. package/css/ionic-swiper.css +33 -0
  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 +33 -0
  65. package/css/padding.css.map +1 -1
  66. package/css/structure.css +33 -0
  67. package/css/structure.css.map +1 -1
  68. package/css/text-alignment.css +33 -0
  69. package/css/text-alignment.css.map +1 -1
  70. package/css/text-transformation.css +33 -0
  71. package/css/text-transformation.css.map +1 -1
  72. package/css/typography.css +51 -6
  73. package/css/typography.css.map +1 -1
  74. package/css/utils.bundle.css +165 -0
  75. package/css/utils.bundle.css.map +1 -1
  76. package/dist/cjs/{data-db832785.js → data-967b9c15.js} +7 -31
  77. package/dist/cjs/{index-8568bedb.js → index-552c4df4.js} +2 -2
  78. package/dist/cjs/index.cjs.js +11 -12
  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 +3 -5
  87. package/dist/cjs/ion-chip.cjs.entry.js +7 -2
  88. package/dist/cjs/ion-datetime-button.cjs.entry.js +3 -6
  89. package/dist/cjs/ion-datetime_3.cjs.entry.js +93 -132
  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 +3 -5
  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 +9 -3
  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 +3 -5
  104. package/dist/cjs/ionic.cjs.js +2 -2
  105. package/dist/cjs/{ios.transition-f7c78d7c.js → ios.transition-b53fc1d5.js} +5 -5
  106. package/dist/cjs/loader.cjs.js +1 -1
  107. package/dist/cjs/{md.transition-65dc7dce.js → md.transition-d96426d5.js} +1 -1
  108. package/dist/collection/collection-manifest.json +2 -2
  109. package/dist/collection/components/accordion/accordion.ios.css +66 -0
  110. package/dist/collection/components/accordion/accordion.md.css +33 -0
  111. package/dist/collection/components/accordion-group/accordion-group.ios.css +66 -0
  112. package/dist/collection/components/accordion-group/accordion-group.md.css +99 -0
  113. package/dist/collection/components/action-sheet/action-sheet.ios.css +80 -12
  114. package/dist/collection/components/action-sheet/action-sheet.md.css +76 -8
  115. package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +27 -0
  116. package/dist/collection/components/alert/alert.ios.css +99 -0
  117. package/dist/collection/components/alert/alert.md.css +99 -0
  118. package/dist/collection/components/avatar/avatar.ios.css +66 -0
  119. package/dist/collection/components/avatar/avatar.md.css +66 -0
  120. package/dist/collection/components/back-button/back-button.ios.css +83 -1
  121. package/dist/collection/components/back-button/back-button.md.css +75 -3
  122. package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +26 -0
  123. package/dist/collection/components/backdrop/backdrop.ios.css +66 -0
  124. package/dist/collection/components/backdrop/backdrop.md.css +66 -0
  125. package/dist/collection/components/badge/badge.ios.css +75 -1
  126. package/dist/collection/components/badge/badge.md.css +67 -1
  127. package/dist/collection/components/badge/test/a11y/badge.e2e.js +22 -0
  128. package/dist/collection/components/breadcrumb/breadcrumb.ios.css +80 -3
  129. package/dist/collection/components/breadcrumb/breadcrumb.md.css +69 -3
  130. package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +33 -0
  131. package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +33 -0
  132. package/dist/collection/components/breadcrumbs/test/a11y/breadcrumbs.e2e.js +21 -0
  133. package/dist/collection/components/button/button.ios.css +118 -19
  134. package/dist/collection/components/button/button.md.css +69 -3
  135. package/dist/collection/components/button/test/a11y/button.e2e.js +61 -0
  136. package/dist/collection/components/buttons/buttons.ios.css +102 -3
  137. package/dist/collection/components/buttons/buttons.md.css +101 -2
  138. package/dist/collection/components/buttons/test/a11y/buttons.e2e.js +74 -0
  139. package/dist/collection/components/card/card.ios.css +67 -1
  140. package/dist/collection/components/card/card.md.css +67 -1
  141. package/dist/collection/components/card/test/a11y/card.e2e.js +31 -0
  142. package/dist/collection/components/card-content/card-content.ios.css +71 -5
  143. package/dist/collection/components/card-content/card-content.md.css +71 -5
  144. package/dist/collection/components/card-header/card-header.ios.css +66 -0
  145. package/dist/collection/components/card-header/card-header.md.css +66 -0
  146. package/dist/collection/components/card-subtitle/card-subtitle.ios.css +67 -1
  147. package/dist/collection/components/card-subtitle/card-subtitle.md.css +67 -1
  148. package/dist/collection/components/card-title/card-title.ios.css +67 -1
  149. package/dist/collection/components/card-title/card-title.md.css +67 -1
  150. package/dist/collection/components/checkbox/checkbox.ios.css +99 -35
  151. package/dist/collection/components/checkbox/checkbox.js +4 -24
  152. package/dist/collection/components/checkbox/checkbox.md.css +99 -35
  153. package/dist/collection/components/checkbox/test/item/checkbox.e2e.js +0 -13
  154. package/dist/collection/components/checkbox/test/label/checkbox.e2e.js +0 -16
  155. package/dist/collection/components/chip/chip.ios.css +190 -0
  156. package/dist/collection/components/chip/chip.js +4 -2
  157. package/dist/collection/components/chip/{chip.css → chip.md.css} +43 -7
  158. package/dist/collection/components/chip/test/a11y/chip.e2e.js +58 -0
  159. package/dist/collection/components/col/col.css +66 -0
  160. package/dist/collection/components/content/content.css +33 -0
  161. package/dist/collection/components/datetime/datetime.ios.css +95 -32
  162. package/dist/collection/components/datetime/datetime.js +93 -137
  163. package/dist/collection/components/datetime/datetime.md.css +94 -20
  164. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +0 -25
  165. package/dist/collection/components/datetime/test/color/datetime.e2e.js +1 -1
  166. package/dist/collection/components/datetime/test/custom/datetime.e2e.js +1 -27
  167. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +0 -15
  168. package/dist/collection/components/datetime/test/set-value/datetime.e2e.js +12 -9
  169. package/dist/collection/components/datetime/utils/data.js +6 -14
  170. package/dist/collection/components/datetime/utils/parse.js +1 -18
  171. package/dist/collection/components/datetime-button/datetime-button.css +36 -2
  172. package/dist/collection/components/datetime-button/datetime-button.js +0 -3
  173. package/dist/collection/components/datetime-button/test/a11y/datetime-button.e2e.js +38 -0
  174. package/dist/collection/components/fab/fab.css +66 -0
  175. package/dist/collection/components/fab-button/fab-button.ios.css +66 -0
  176. package/dist/collection/components/fab-button/fab-button.md.css +66 -0
  177. package/dist/collection/components/fab-list/fab-list.css +66 -0
  178. package/dist/collection/components/footer/footer.ios.css +66 -0
  179. package/dist/collection/components/footer/footer.md.css +66 -0
  180. package/dist/collection/components/grid/grid.css +66 -0
  181. package/dist/collection/components/header/header.ios.css +71 -2
  182. package/dist/collection/components/header/header.md.css +66 -0
  183. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +66 -0
  184. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +66 -0
  185. package/dist/collection/components/input/input.ios.css +99 -0
  186. package/dist/collection/components/input/input.md.css +198 -0
  187. package/dist/collection/components/item/item.ios.css +70 -4
  188. package/dist/collection/components/item/item.md.css +138 -6
  189. package/dist/collection/components/item/test/a11y/item.e2e.js +116 -1
  190. package/dist/collection/components/item-divider/item-divider.ios.css +101 -9
  191. package/dist/collection/components/item-divider/item-divider.md.css +103 -11
  192. package/dist/collection/components/item-divider/test/a11y/item-divider.e2e.js +44 -0
  193. package/dist/collection/components/item-group/item-group.ios.css +68 -1
  194. package/dist/collection/components/item-group/item-group.md.css +68 -1
  195. package/dist/collection/components/item-option/item-option.ios.css +67 -1
  196. package/dist/collection/components/item-option/item-option.md.css +67 -1
  197. package/dist/collection/components/item-options/item-options.ios.css +99 -1
  198. package/dist/collection/components/item-options/item-options.md.css +99 -1
  199. package/dist/collection/components/item-sliding/item-sliding.css +33 -0
  200. package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +34 -0
  201. package/dist/collection/components/label/label.ios.css +105 -6
  202. package/dist/collection/components/label/label.md.css +104 -5
  203. package/dist/collection/components/label/test/a11y/label.e2e.js +66 -0
  204. package/dist/collection/components/list/list.ios.css +99 -0
  205. package/dist/collection/components/list/list.md.css +99 -0
  206. package/dist/collection/components/list-header/list-header.ios.css +100 -1
  207. package/dist/collection/components/list-header/list-header.md.css +100 -1
  208. package/dist/collection/components/list-header/test/a11y/list-header.e2e.js +24 -0
  209. package/dist/collection/components/loading/loading.ios.css +67 -1
  210. package/dist/collection/components/loading/loading.md.css +67 -1
  211. package/dist/collection/components/loading/test/a11y/loading.e2e.js +19 -0
  212. package/dist/collection/components/menu/menu.ios.css +66 -94
  213. package/dist/collection/components/menu/menu.md.css +66 -94
  214. package/dist/collection/components/menu-button/menu-button.ios.css +70 -2
  215. package/dist/collection/components/menu-button/menu-button.md.css +71 -3
  216. package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +20 -1
  217. package/dist/collection/components/modal/modal.ios.css +66 -0
  218. package/dist/collection/components/modal/modal.md.css +66 -0
  219. package/dist/collection/components/nav/nav.css +33 -0
  220. package/dist/collection/components/note/note.ios.css +67 -0
  221. package/dist/collection/components/note/note.md.css +67 -1
  222. package/dist/collection/components/note/test/a11y/note.e2e.js +52 -0
  223. package/dist/collection/components/picker/picker.ios.css +66 -0
  224. package/dist/collection/components/picker/picker.md.css +66 -0
  225. package/dist/collection/components/picker-column/picker-column.ios.css +66 -0
  226. package/dist/collection/components/picker-column/picker-column.md.css +66 -0
  227. package/dist/collection/components/picker-column-internal/picker-column-internal.ios.css +33 -0
  228. package/dist/collection/components/picker-column-internal/picker-column-internal.md.css +66 -0
  229. package/dist/collection/components/picker-internal/picker-internal.ios.css +66 -0
  230. package/dist/collection/components/picker-internal/picker-internal.md.css +66 -0
  231. package/dist/collection/components/popover/popover.ios.css +66 -0
  232. package/dist/collection/components/popover/popover.md.css +66 -0
  233. package/dist/collection/components/progress-bar/progress-bar.ios.css +33 -0
  234. package/dist/collection/components/progress-bar/progress-bar.md.css +33 -0
  235. package/dist/collection/components/radio/radio.ios.css +97 -33
  236. package/dist/collection/components/radio/radio.js +4 -24
  237. package/dist/collection/components/radio/radio.md.css +97 -33
  238. package/dist/collection/components/radio/test/item/radio.e2e.js +0 -15
  239. package/dist/collection/components/radio/test/label-placement/radio.e2e.js +0 -20
  240. package/dist/collection/components/range/range.ios.css +80 -46
  241. package/dist/collection/components/range/range.js +3 -3
  242. package/dist/collection/components/range/range.md.css +97 -49
  243. package/dist/collection/components/range/test/a11y/range.e2e.js +22 -0
  244. package/dist/collection/components/range/test/label/range.e2e.js +0 -48
  245. package/dist/collection/components/refresher/refresher.ios.css +66 -0
  246. package/dist/collection/components/refresher/refresher.md.css +66 -0
  247. package/dist/collection/components/reorder/reorder.ios.css +75 -2
  248. package/dist/collection/components/reorder/reorder.md.css +75 -2
  249. package/dist/collection/components/reorder-group/reorder-group.css +33 -0
  250. package/dist/collection/components/reorder-group/test/a11y/reorder-group.e2e.js +33 -0
  251. package/dist/collection/components/ripple-effect/ripple-effect.css +33 -0
  252. package/dist/collection/components/router-link/router-link.css +33 -0
  253. package/dist/collection/components/router-outlet/router-outlet.css +33 -0
  254. package/dist/collection/components/router-outlet/router-outlet.js +1 -6
  255. package/dist/collection/components/row/row.css +66 -0
  256. package/dist/collection/components/searchbar/searchbar.ios.css +95 -16
  257. package/dist/collection/components/searchbar/searchbar.js +7 -1
  258. package/dist/collection/components/searchbar/searchbar.md.css +77 -10
  259. package/dist/collection/components/searchbar/test/a11y/searchbar.e2e.js +37 -0
  260. package/dist/collection/components/searchbar/test/basic/searchbar.e2e.js +18 -0
  261. package/dist/collection/components/segment/segment.ios.css +99 -0
  262. package/dist/collection/components/segment/segment.md.css +99 -0
  263. package/dist/collection/components/segment-button/segment-button.ios.css +66 -0
  264. package/dist/collection/components/segment-button/segment-button.md.css +66 -0
  265. package/dist/collection/components/select/select.ios.css +99 -0
  266. package/dist/collection/components/select/select.md.css +165 -0
  267. package/dist/collection/components/select-popover/select-popover.ios.css +101 -1
  268. package/dist/collection/components/select-popover/select-popover.md.css +99 -0
  269. package/dist/collection/components/skeleton-text/skeleton-text.css +33 -0
  270. package/dist/collection/components/spinner/spinner.css +33 -0
  271. package/dist/collection/components/split-pane/split-pane.ios.css +99 -0
  272. package/dist/collection/components/split-pane/split-pane.md.css +99 -0
  273. package/dist/collection/components/tab-bar/tab-bar.ios.css +99 -0
  274. package/dist/collection/components/tab-bar/tab-bar.md.css +99 -0
  275. package/dist/collection/components/tab-button/tab-button.ios.css +66 -0
  276. package/dist/collection/components/tab-button/tab-button.md.css +66 -0
  277. package/dist/collection/components/tabs/tabs.css +33 -0
  278. package/dist/collection/components/text/text.css +33 -0
  279. package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +15 -1
  280. package/dist/collection/components/textarea/textarea.ios.css +133 -1
  281. package/dist/collection/components/textarea/textarea.md.css +199 -1
  282. package/dist/collection/components/thumbnail/thumbnail.css +33 -0
  283. package/dist/collection/components/title/test/a11y/title.e2e.js +61 -0
  284. package/dist/collection/components/title/title.ios.css +43 -10
  285. package/dist/collection/components/title/title.md.css +35 -2
  286. package/dist/collection/components/toast/test/a11y/toast.e2e.js +98 -1
  287. package/dist/collection/components/toast/toast.ios.css +74 -3
  288. package/dist/collection/components/toast/toast.md.css +74 -4
  289. package/dist/collection/components/toggle/test/item/toggle.e2e.js +0 -15
  290. package/dist/collection/components/toggle/test/label/toggle.e2e.js +0 -16
  291. package/dist/collection/components/toggle/toggle.ios.css +100 -35
  292. package/dist/collection/components/toggle/toggle.js +4 -24
  293. package/dist/collection/components/toggle/toggle.md.css +100 -35
  294. package/dist/collection/components/toolbar/toolbar.ios.css +70 -16
  295. package/dist/collection/components/toolbar/toolbar.md.css +70 -2
  296. package/dist/collection/css/test/a11y/typography.e2e.js +32 -0
  297. package/dist/collection/index.js +0 -1
  298. package/dist/collection/utils/transition/ios.transition.js +4 -4
  299. package/dist/docs.json +21 -155
  300. package/dist/esm/{data-009dbf15.js → data-4b448e3a.js} +7 -31
  301. package/dist/esm/{index-6391de89.js → index-2970aafc.js} +2 -2
  302. package/dist/esm/index.js +4 -4
  303. package/dist/esm/ion-action-sheet.entry.js +2 -2
  304. package/dist/esm/ion-app_8.entry.js +8 -8
  305. package/dist/esm/ion-avatar_3.entry.js +2 -2
  306. package/dist/esm/ion-back-button.entry.js +2 -2
  307. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  308. package/dist/esm/ion-button_2.entry.js +2 -2
  309. package/dist/esm/ion-card_5.entry.js +8 -8
  310. package/dist/esm/ion-checkbox.entry.js +3 -5
  311. package/dist/esm/ion-chip.entry.js +7 -2
  312. package/dist/esm/ion-datetime-button.entry.js +3 -6
  313. package/dist/esm/ion-datetime_3.entry.js +93 -132
  314. package/dist/esm/ion-item-option_3.entry.js +4 -4
  315. package/dist/esm/ion-item_8.entry.js +10 -10
  316. package/dist/esm/ion-loading.entry.js +2 -2
  317. package/dist/esm/ion-menu_3.entry.js +4 -4
  318. package/dist/esm/ion-modal.entry.js +1 -1
  319. package/dist/esm/ion-nav_2.entry.js +1 -1
  320. package/dist/esm/ion-popover.entry.js +1 -1
  321. package/dist/esm/ion-radio_2.entry.js +3 -5
  322. package/dist/esm/ion-range.entry.js +2 -2
  323. package/dist/esm/ion-reorder_2.entry.js +2 -2
  324. package/dist/esm/ion-searchbar.entry.js +9 -3
  325. package/dist/esm/ion-textarea.entry.js +2 -2
  326. package/dist/esm/ion-toast.entry.js +2 -2
  327. package/dist/esm/ion-toggle.entry.js +3 -5
  328. package/dist/esm/ionic.js +2 -2
  329. package/dist/esm/{ios.transition-3137d23e.js → ios.transition-4e8d7fb7.js} +5 -5
  330. package/dist/esm/loader.js +1 -1
  331. package/dist/esm/{md.transition-48b3b77c.js → md.transition-2b41d64c.js} +1 -1
  332. package/dist/esm-es5/data-4b448e3a.js +4 -0
  333. package/dist/esm-es5/{index-6391de89.js → index-2970aafc.js} +1 -1
  334. package/dist/esm-es5/index.js +1 -1
  335. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  336. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  337. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  338. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  339. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  340. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  341. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  342. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  343. package/dist/esm-es5/ion-chip.entry.js +1 -1
  344. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  345. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  346. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  347. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  348. package/dist/esm-es5/ion-loading.entry.js +1 -1
  349. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  350. package/dist/esm-es5/ion-modal.entry.js +1 -1
  351. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  352. package/dist/esm-es5/ion-popover.entry.js +1 -1
  353. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  354. package/dist/esm-es5/ion-range.entry.js +1 -1
  355. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  356. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  357. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  358. package/dist/esm-es5/ion-toast.entry.js +1 -1
  359. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  360. package/dist/esm-es5/ionic.js +1 -1
  361. package/dist/esm-es5/ios.transition-4e8d7fb7.js +4 -0
  362. package/dist/esm-es5/loader.js +1 -1
  363. package/dist/esm-es5/{md.transition-48b3b77c.js → md.transition-2b41d64c.js} +1 -1
  364. package/dist/html.html-data.json +4 -52
  365. package/dist/ionic/index.esm.js +1 -1
  366. package/dist/ionic/ionic.esm.js +1 -1
  367. package/dist/ionic/ionic.js +1 -1
  368. package/dist/ionic/p-0053fe81.system.entry.js +4 -0
  369. package/dist/ionic/p-060aa1aa.entry.js +4 -0
  370. package/dist/ionic/p-0e4377e6.system.entry.js +4 -0
  371. package/dist/ionic/{p-a2b25750.js → p-1decbac2.js} +1 -1
  372. package/dist/ionic/p-1e5f9f20.entry.js +4 -0
  373. package/dist/ionic/p-2c012642.entry.js +4 -0
  374. package/dist/ionic/p-2cdcd6f2.entry.js +4 -0
  375. package/dist/ionic/{p-62324608.system.entry.js → p-2e45dce9.system.entry.js} +1 -1
  376. package/dist/ionic/p-2f4e5cd6.system.entry.js +4 -0
  377. package/dist/ionic/p-2f6fbeab.system.entry.js +4 -0
  378. package/dist/ionic/p-39bf6a89.js +4 -0
  379. package/dist/ionic/p-418fc6f2.system.entry.js +4 -0
  380. package/dist/ionic/p-468ac44a.system.entry.js +4 -0
  381. package/dist/ionic/p-5009cb46.entry.js +4 -0
  382. package/dist/ionic/{p-87383d00.system.entry.js → p-586e0a90.system.entry.js} +1 -1
  383. package/dist/ionic/p-5b88f780.entry.js +4 -0
  384. package/dist/ionic/{p-653f2fc6.entry.js → p-5d418c78.entry.js} +1 -1
  385. package/dist/ionic/p-5e8d7def.system.entry.js +4 -0
  386. package/dist/ionic/p-601fd53c.js +4 -0
  387. package/dist/ionic/p-65105512.entry.js +4 -0
  388. package/dist/ionic/p-66d2ef38.entry.js +4 -0
  389. package/dist/ionic/p-721933ff.system.js +4 -0
  390. package/dist/ionic/p-7ea1a467.system.js +4 -0
  391. package/dist/ionic/p-80b152fd.system.entry.js +4 -0
  392. package/dist/ionic/{p-208f640c.entry.js → p-80eed21b.entry.js} +1 -1
  393. package/dist/ionic/p-89d96720.entry.js +4 -0
  394. package/dist/ionic/{p-fac1660b.entry.js → p-8eed522b.entry.js} +1 -1
  395. package/dist/ionic/p-91f9a6aa.system.entry.js +4 -0
  396. package/dist/ionic/p-94f99a8b.entry.js +4 -0
  397. package/dist/ionic/p-985d547d.system.entry.js +4 -0
  398. package/dist/ionic/p-98b618ce.system.entry.js +4 -0
  399. package/dist/ionic/p-9e306450.system.entry.js +4 -0
  400. package/dist/ionic/{p-0b68c41d.system.entry.js → p-a5481fd3.system.entry.js} +1 -1
  401. package/dist/ionic/p-b03dae0c.system.entry.js +4 -0
  402. package/dist/ionic/p-b062bc29.entry.js +4 -0
  403. package/dist/ionic/p-b0b8c0c9.system.entry.js +4 -0
  404. package/dist/ionic/p-b3394798.system.entry.js +4 -0
  405. package/dist/ionic/p-bc8b9c38.system.entry.js +4 -0
  406. package/dist/ionic/p-c4aea998.entry.js +4 -0
  407. package/dist/ionic/{p-728ac2b3.entry.js → p-c569a270.entry.js} +1 -1
  408. package/dist/ionic/p-c64711cc.entry.js +4 -0
  409. package/dist/ionic/p-c9fd7db5.system.entry.js +4 -0
  410. package/dist/ionic/p-caa4c0fa.entry.js +4 -0
  411. package/dist/ionic/p-cc8910e7.system.js +4 -0
  412. package/dist/ionic/p-cd4b6518.system.js +4 -0
  413. package/dist/ionic/p-d1e6b365.entry.js +4 -0
  414. package/dist/ionic/p-d4044209.system.entry.js +4 -0
  415. package/dist/ionic/p-d6de281e.entry.js +4 -0
  416. package/dist/ionic/p-e497d6a5.js +4 -0
  417. package/dist/ionic/p-e53b8af4.system.entry.js +4 -0
  418. package/dist/ionic/{p-98ebc376.entry.js → p-eaede417.entry.js} +1 -1
  419. package/dist/ionic/p-f1e5e368.system.entry.js +4 -0
  420. package/dist/ionic/{p-e3d5608d.system.js → p-f29fe8c3.system.js} +1 -1
  421. package/dist/ionic/p-f2b925a2.system.entry.js +4 -0
  422. package/dist/ionic/p-f78e60a5.entry.js +4 -0
  423. package/dist/ionic/{p-df6743df.system.js → p-f7dcca6a.system.js} +1 -1
  424. package/dist/ionic/p-f902ddc6.entry.js +4 -0
  425. package/dist/ionic/p-f9ec8c18.entry.js +4 -0
  426. package/dist/ionic/p-fade59a2.system.entry.js +4 -0
  427. package/dist/ionic/{p-fabb7294.entry.js → p-fbb2649b.entry.js} +1 -1
  428. package/dist/types/components/checkbox/checkbox.d.ts +1 -8
  429. package/dist/types/components/datetime/datetime.d.ts +10 -23
  430. package/dist/types/components/datetime/utils/data.d.ts +1 -1
  431. package/dist/types/components/datetime/utils/parse.d.ts +3 -3
  432. package/dist/types/components/radio/radio.d.ts +1 -8
  433. package/dist/types/components/range/range.d.ts +1 -2
  434. package/dist/types/components/toast/toast-interface.d.ts +0 -3
  435. package/dist/types/components/toggle/toggle.d.ts +1 -8
  436. package/dist/types/components.d.ts +16 -40
  437. package/dist/types/index.d.ts +0 -1
  438. package/dist/types/interface.d.ts +0 -1
  439. package/hydrate/index.js +264 -345
  440. package/package.json +3 -3
  441. package/dist/esm-es5/data-009dbf15.js +0 -4
  442. package/dist/esm-es5/ios.transition-3137d23e.js +0 -4
  443. package/dist/ionic/p-06902103.system.js +0 -4
  444. package/dist/ionic/p-0cc2bf5a.system.entry.js +0 -4
  445. package/dist/ionic/p-11248f01.js +0 -4
  446. package/dist/ionic/p-1f4adf06.system.entry.js +0 -4
  447. package/dist/ionic/p-2061c86f.system.entry.js +0 -4
  448. package/dist/ionic/p-218b6f33.entry.js +0 -4
  449. package/dist/ionic/p-2da6ba37.system.entry.js +0 -4
  450. package/dist/ionic/p-341d5877.entry.js +0 -4
  451. package/dist/ionic/p-38dd9aec.entry.js +0 -4
  452. package/dist/ionic/p-40138199.entry.js +0 -4
  453. package/dist/ionic/p-430e902d.entry.js +0 -4
  454. package/dist/ionic/p-44ef7224.system.js +0 -4
  455. package/dist/ionic/p-48144921.entry.js +0 -4
  456. package/dist/ionic/p-4ca1ce6b.system.entry.js +0 -4
  457. package/dist/ionic/p-51b165af.system.js +0 -4
  458. package/dist/ionic/p-57f0efcc.entry.js +0 -4
  459. package/dist/ionic/p-5ba27716.system.entry.js +0 -4
  460. package/dist/ionic/p-67b891af.entry.js +0 -4
  461. package/dist/ionic/p-69303bb5.system.js +0 -4
  462. package/dist/ionic/p-6b3afb0f.entry.js +0 -4
  463. package/dist/ionic/p-6bf632d0.system.entry.js +0 -4
  464. package/dist/ionic/p-7cfd253c.js +0 -4
  465. package/dist/ionic/p-82f5c07e.system.entry.js +0 -4
  466. package/dist/ionic/p-82f8ee51.entry.js +0 -4
  467. package/dist/ionic/p-83bcaec9.system.entry.js +0 -4
  468. package/dist/ionic/p-86c5c320.entry.js +0 -4
  469. package/dist/ionic/p-90ec5785.system.entry.js +0 -4
  470. package/dist/ionic/p-9c32000a.entry.js +0 -4
  471. package/dist/ionic/p-a34669bf.system.entry.js +0 -4
  472. package/dist/ionic/p-a3f9d271.entry.js +0 -4
  473. package/dist/ionic/p-a62c0ff4.js +0 -4
  474. package/dist/ionic/p-af0bc751.system.entry.js +0 -4
  475. package/dist/ionic/p-af986299.system.entry.js +0 -4
  476. package/dist/ionic/p-b0e9e0b8.system.entry.js +0 -4
  477. package/dist/ionic/p-b321c999.entry.js +0 -4
  478. package/dist/ionic/p-bbae0ac3.system.entry.js +0 -4
  479. package/dist/ionic/p-bf4b8d8a.system.entry.js +0 -4
  480. package/dist/ionic/p-d5e3bff3.entry.js +0 -4
  481. package/dist/ionic/p-d8a0267b.system.entry.js +0 -4
  482. package/dist/ionic/p-dbb48066.system.entry.js +0 -4
  483. package/dist/ionic/p-dc49c681.system.entry.js +0 -4
  484. package/dist/ionic/p-e112994b.system.entry.js +0 -4
  485. package/dist/ionic/p-e805ff9f.system.entry.js +0 -4
  486. package/dist/ionic/p-ed7b205b.entry.js +0 -4
  487. package/dist/ionic/p-f5c19164.entry.js +0 -4
  488. package/dist/ionic/p-f9567c67.entry.js +0 -4
  489. package/dist/ionic/p-fa3327e8.system.entry.js +0 -4
  490. package/dist/ionic/p-fe83e3e2.entry.js +0 -4
@@ -33,17 +33,16 @@ 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.
42
36
  */
43
37
  export class Datetime {
44
38
  constructor() {
45
39
  this.inputId = `ion-dt-${datetimeIds++}`;
46
40
  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 = [];
47
46
  this.warnIfIncorrectValueUsage = () => {
48
47
  const { multiple, value } = this;
49
48
  if (!multiple && Array.isArray(value)) {
@@ -71,9 +70,9 @@ export class Datetime {
71
70
  * data. This should be used when rendering an
72
71
  * interface in an environment where the `value`
73
72
  * may not be set. This function works
74
- * by returning the first selected date and then
75
- * falling back to defaultParts if no active date
76
- * is selected.
73
+ * by returning the first selected date in
74
+ * "activePartsClone" and then falling back to
75
+ * defaultParts if no active date is selected.
77
76
  */
78
77
  this.getActivePartsWithFallback = () => {
79
78
  var _a;
@@ -81,8 +80,8 @@ export class Datetime {
81
80
  return (_a = this.getActivePart()) !== null && _a !== void 0 ? _a : defaultParts;
82
81
  };
83
82
  this.getActivePart = () => {
84
- const { activeParts } = this;
85
- return Array.isArray(activeParts) ? activeParts[0] : activeParts;
83
+ const { activePartsClone } = this;
84
+ return Array.isArray(activePartsClone) ? activePartsClone[0] : activePartsClone;
86
85
  };
87
86
  this.closeParentOverlay = () => {
88
87
  const popoverOrModal = this.el.closest('ion-modal, ion-popover');
@@ -94,7 +93,7 @@ export class Datetime {
94
93
  this.workingParts = Object.assign({}, parts);
95
94
  };
96
95
  this.setActiveParts = (parts, removeDate = false) => {
97
- const { multiple, minParts, maxParts, activeParts } = this;
96
+ const { multiple, minParts, maxParts, activePartsClone } = this;
98
97
  /**
99
98
  * When setting the active parts, it is possible
100
99
  * to set invalid data. For example,
@@ -108,7 +107,16 @@ export class Datetime {
108
107
  const validatedParts = validateParts(parts, minParts, maxParts);
109
108
  this.setWorkingParts(validatedParts);
110
109
  if (multiple) {
111
- const activePartsArray = Array.isArray(activeParts) ? activeParts : [activeParts];
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];
112
120
  if (removeDate) {
113
121
  this.activeParts = activePartsArray.filter((p) => !isSameDay(p, validatedParts));
114
122
  }
@@ -233,7 +241,7 @@ export class Datetime {
233
241
  /**
234
242
  * Get the number of padding days so
235
243
  * we know how much to offset our next selector by
236
- * to grab the correct calendar-day element.
244
+ * to grab the correct calenday-day element.
237
245
  */
238
246
  const padding = currentMonth.querySelectorAll('.calendar-day-padding');
239
247
  const { day } = this.workingParts;
@@ -244,7 +252,7 @@ export class Datetime {
244
252
  * Get the calendar day element
245
253
  * and focus it.
246
254
  */
247
- const dayEl = currentMonth.querySelector(`.calendar-day-wrapper:nth-of-type(${padding.length + day}) .calendar-day`);
255
+ const dayEl = currentMonth.querySelector(`.calendar-day:nth-of-type(${padding.length + day})`);
248
256
  if (dayEl) {
249
257
  dayEl.focus();
250
258
  }
@@ -325,19 +333,6 @@ export class Datetime {
325
333
  const monthBox = month.getBoundingClientRect();
326
334
  if (Math.abs(monthBox.x - box.x) > 2)
327
335
  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
- }
341
336
  /**
342
337
  * From here, we can determine if the start
343
338
  * month or the end month was scrolled into view.
@@ -392,9 +387,6 @@ export class Datetime {
392
387
  this.setWorkingParts(Object.assign(Object.assign({}, this.workingParts), { month, day: day, year }));
393
388
  calendarBodyRef.scrollLeft = workingMonth.clientWidth * (isRTL(this.el) ? -1 : 1);
394
389
  calendarBodyRef.style.removeProperty('overflow');
395
- if (this.resolveForceDateScrolling) {
396
- this.resolveForceDateScrolling();
397
- }
398
390
  });
399
391
  };
400
392
  /**
@@ -449,17 +441,10 @@ export class Datetime {
449
441
  }
450
442
  };
451
443
  this.processValue = (value) => {
452
- const hasValue = value !== null && value !== undefined && (!Array.isArray(value) || value.length > 0);
444
+ const hasValue = value !== null && value !== undefined;
453
445
  const valueToProcess = hasValue ? parseDate(value) : this.defaultParts;
454
- const { minParts, maxParts, workingParts, el } = this;
446
+ const { minParts, maxParts } = this;
455
447
  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
- }
463
448
  /**
464
449
  * Datetime should only warn of out of bounds values
465
450
  * if set by the user. If the `value` is undefined,
@@ -477,9 +462,16 @@ export class Datetime {
477
462
  * that the values don't necessarily have to be in order.
478
463
  */
479
464
  const singleValue = Array.isArray(valueToProcess) ? valueToProcess[0] : valueToProcess;
480
- const targetValue = clampDate(singleValue, minParts, maxParts);
481
- const { month, day, year, hour, minute } = targetValue;
465
+ const { month, day, year, hour, minute } = clampDate(singleValue, minParts, maxParts);
482
466
  const ampm = parseAmPm(hour);
467
+ this.setWorkingParts({
468
+ month,
469
+ day,
470
+ year,
471
+ hour,
472
+ minute,
473
+ ampm,
474
+ });
483
475
  /**
484
476
  * Since `activeParts` indicates a value that
485
477
  * been explicitly selected either by the
@@ -509,62 +501,6 @@ export class Datetime {
509
501
  */
510
502
  this.activeParts = [];
511
503
  }
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;
568
504
  };
569
505
  this.onFocus = () => {
570
506
  this.ionFocus.emit();
@@ -620,7 +556,6 @@ export class Datetime {
620
556
  ampm: 'pm',
621
557
  };
622
558
  this.isTimePopoverOpen = false;
623
- this.forceRenderDate = undefined;
624
559
  this.color = 'primary';
625
560
  this.name = this.inputId;
626
561
  this.disabled = false;
@@ -660,11 +595,6 @@ export class Datetime {
660
595
  maxChanged() {
661
596
  this.processMaxParts();
662
597
  }
663
- get isGridStyle() {
664
- const { presentation, preferWheel } = this;
665
- const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
666
- return hasDatePresentation && !preferWheel;
667
- }
668
598
  yearValuesChanged() {
669
599
  this.parsedYearValues = convertToArrayOfNumbers(this.yearValues);
670
600
  }
@@ -680,13 +610,51 @@ export class Datetime {
680
610
  minuteValuesChanged() {
681
611
  this.parsedMinuteValues = convertToArrayOfNumbers(this.minuteValues);
682
612
  }
613
+ activePartsChanged() {
614
+ this.activePartsClone = this.activeParts;
615
+ }
683
616
  /**
684
617
  * Update the datetime value when the value changes
685
618
  */
686
- async valueChanged() {
687
- const { value } = this;
619
+ valueChanged() {
620
+ const { value, minParts, maxParts, workingParts } = this;
688
621
  if (this.hasValue()) {
689
- this.processValue(value);
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
+ }
690
658
  }
691
659
  this.emitStyle();
692
660
  this.ionValueChange.emit({ value });
@@ -889,6 +857,8 @@ export class Datetime {
889
857
  printIonWarning('The highlightedDates property is not supported with preferWheel="true".', el);
890
858
  }
891
859
  }
860
+ this.processMinParts();
861
+ this.processMaxParts();
892
862
  const hourValues = (this.parsedHourValues = convertToArrayOfNumbers(this.hourValues));
893
863
  const minuteValues = (this.parsedMinuteValues = convertToArrayOfNumbers(this.minuteValues));
894
864
  const monthValues = (this.parsedMonthValues = convertToArrayOfNumbers(this.monthValues));
@@ -896,8 +866,6 @@ export class Datetime {
896
866
  const dayValues = (this.parsedDayValues = convertToArrayOfNumbers(this.dayValues));
897
867
  const todayParts = (this.todayParts = parseDate(getToday()));
898
868
  this.defaultParts = getClosestValidDate(todayParts, monthValues, dayValues, yearValues, hourValues, minuteValues);
899
- this.processMinParts();
900
- this.processMaxParts();
901
869
  this.processValue(this.value);
902
870
  this.emitStyle();
903
871
  }
@@ -1282,7 +1250,7 @@ export class Datetime {
1282
1250
  const { el, highlightedDates, isDateEnabled, multiple } = this;
1283
1251
  const referenceParts = { month, day, year };
1284
1252
  const isCalendarPadding = day === null;
1285
- const { isActive, isToday, ariaLabel, ariaSelected, disabled, text } = getCalendarDayState(this.locale, referenceParts, this.activeParts, this.todayParts, this.minParts, this.maxParts, this.parsedDayValues);
1253
+ const { isActive, isToday, ariaLabel, ariaSelected, disabled, text } = getCalendarDayState(this.locale, referenceParts, this.activePartsClone, this.todayParts, this.minParts, this.maxParts, this.parsedDayValues);
1286
1254
  const dateIsoString = convertDataToISO(referenceParts);
1287
1255
  let isCalDayDisabled = isCalMonthDisabled || disabled;
1288
1256
  if (!isCalDayDisabled && isDateEnabled !== undefined) {
@@ -1306,30 +1274,14 @@ export class Datetime {
1306
1274
  if (highlightedDates !== undefined && !isActive && day !== null) {
1307
1275
  dateStyle = getHighlightStyles(highlightedDates, dateIsoString, el);
1308
1276
  }
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: {
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: {
1328
1278
  'calendar-day-padding': isCalendarPadding,
1329
1279
  'calendar-day': true,
1330
1280
  'calendar-day-active': isActive,
1331
1281
  'calendar-day-today': isToday,
1332
- }, part: dateParts, "aria-hidden": isCalendarPadding ? 'true' : null, "aria-selected": ariaSelected, "aria-label": ariaLabel, onClick: () => {
1282
+ }, style: dateStyle && {
1283
+ color: dateStyle.textColor,
1284
+ }, "aria-hidden": isCalendarPadding ? 'true' : null, "aria-selected": ariaSelected, "aria-label": ariaLabel, onClick: () => {
1333
1285
  if (isCalendarPadding) {
1334
1286
  return;
1335
1287
  }
@@ -1349,12 +1301,13 @@ export class Datetime {
1349
1301
  day,
1350
1302
  year }));
1351
1303
  }
1352
- }
1353
- }, text)));
1304
+ } }, h("div", { class: "calendar-day-highlight", style: {
1305
+ backgroundColor: dateStyle === null || dateStyle === void 0 ? void 0 : dateStyle.backgroundColor,
1306
+ } }), text));
1354
1307
  }))));
1355
1308
  }
1356
1309
  renderCalendarBody() {
1357
- return (h("div", { class: "calendar-body ion-focusable", ref: (el) => (this.calendarBodyRef = el), tabindex: "0" }, generateMonths(this.workingParts, this.forceRenderDate).map(({ month, year }) => {
1310
+ return (h("div", { class: "calendar-body ion-focusable", ref: (el) => (this.calendarBodyRef = el), tabindex: "0" }, generateMonths(this.workingParts).map(({ month, year }) => {
1358
1311
  return this.renderMonth(month, year);
1359
1312
  })));
1360
1313
  }
@@ -1509,13 +1462,14 @@ export class Datetime {
1509
1462
  }
1510
1463
  }
1511
1464
  render() {
1512
- const { name, value, disabled, el, color, readonly, showMonthAndYear, preferWheel, presentation, size, isGridStyle, } = this;
1465
+ const { name, value, disabled, el, color, readonly, showMonthAndYear, preferWheel, presentation, size } = this;
1513
1466
  const mode = getIonMode(this);
1514
1467
  const isMonthAndYearPresentation = presentation === 'year' || presentation === 'month' || presentation === 'month-year';
1515
1468
  const shouldShowMonthAndYear = showMonthAndYear || isMonthAndYearPresentation;
1516
1469
  const monthYearPickerOpen = showMonthAndYear && !isMonthAndYearPresentation;
1517
1470
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1518
1471
  const hasWheelVariant = hasDatePresentation && preferWheel;
1472
+ const hasGrid = hasDatePresentation && !preferWheel;
1519
1473
  renderHiddenInput(true, el, name, formatValue(value), disabled);
1520
1474
  return (h(Host, { "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1521
1475
  [mode]: true,
@@ -1526,7 +1480,7 @@ export class Datetime {
1526
1480
  [`datetime-presentation-${presentation}`]: true,
1527
1481
  [`datetime-size-${size}`]: true,
1528
1482
  [`datetime-prefer-wheel`]: hasWheelVariant,
1529
- [`datetime-grid`]: isGridStyle,
1483
+ [`datetime-grid`]: hasGrid,
1530
1484
  })) }, this.renderDatetime(mode)));
1531
1485
  }
1532
1486
  static get is() { return "ion-datetime"; }
@@ -2085,8 +2039,7 @@ export class Datetime {
2085
2039
  "showMonthAndYear": {},
2086
2040
  "activeParts": {},
2087
2041
  "workingParts": {},
2088
- "isTimePopoverOpen": {},
2089
- "forceRenderDate": {}
2042
+ "isTimePopoverOpen": {}
2090
2043
  };
2091
2044
  }
2092
2045
  static get events() {
@@ -2314,6 +2267,9 @@ export class Datetime {
2314
2267
  }, {
2315
2268
  "propName": "minuteValues",
2316
2269
  "methodName": "minuteValuesChanged"
2270
+ }, {
2271
+ "propName": "activeParts",
2272
+ "methodName": "activePartsChanged"
2317
2273
  }, {
2318
2274
  "propName": "value",
2319
2275
  "methodName": "valueChanged"
@@ -1,3 +1,36 @@
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
+ */
1
34
  :host {
2
35
  /**
3
36
  * @prop --background: The primary background of the datetime component.
@@ -281,8 +314,6 @@ ion-picker-column-internal {
281
314
  }
282
315
 
283
316
  :host .calendar-body .calendar-month {
284
- display: flex;
285
- flex-flow: column;
286
317
  /**
287
318
  * Swiping should snap to at
288
319
  * most one month at a time.
@@ -316,21 +347,11 @@ ion-picker-column-internal {
316
347
  grid-template-columns: repeat(7, 1fr);
317
348
  }
318
349
 
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
-
328
350
  /**
329
351
  * Center the day text vertically
330
352
  * and horizontally within its grid cell.
331
353
  */
332
354
  :host .calendar-day {
333
- border-radius: 50%;
334
355
  -webkit-padding-start: 0px;
335
356
  padding-inline-start: 0px;
336
357
  -webkit-padding-end: 0px;
@@ -362,9 +383,18 @@ ion-picker-column-internal {
362
383
  opacity: 0.4;
363
384
  }
364
385
 
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);
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;
368
398
  }
369
399
 
370
400
  :host .datetime-time {
@@ -418,6 +448,39 @@ ion-picker-column-internal {
418
448
  --color: var(--ion-color-base);
419
449
  }
420
450
 
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
+ */
421
484
  :host {
422
485
  --background: var(--ion-color-step-100, #ffffff);
423
486
  --title-color: var(--ion-color-contrast);
@@ -483,21 +546,32 @@ ion-picker-column-internal {
483
546
  }
484
547
 
485
548
  :host .calendar-day {
486
- width: 42px;
487
- min-width: 42px;
488
- height: 42px;
549
+ -webkit-padding-start: 0px;
550
+ padding-inline-start: 0px;
551
+ -webkit-padding-end: 0;
552
+ padding-inline-end: 0;
553
+ padding-top: 13px;
554
+ padding-bottom: 13px;
489
555
  font-size: 14px;
490
556
  }
491
557
 
558
+ .calendar-day:focus .calendar-day-highlight {
559
+ background: rgba(var(--ion-color-base-rgb), 0.2);
560
+ box-shadow: 0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2);
561
+ }
562
+
492
563
  /**
493
564
  * Day that today but not selected
494
565
  * should have ion-color for text color.
495
566
  */
496
567
  :host .calendar-day.calendar-day-today {
497
- border: 1px solid var(--ion-color-base);
498
568
  color: var(--ion-color-base);
499
569
  }
500
570
 
571
+ .calendar-day.calendar-day-today .calendar-day-highlight {
572
+ border: 1px solid var(--ion-color-base);
573
+ }
574
+
501
575
  /**
502
576
  * Day that is not today but
503
577
  * is selected should have ion-color for
@@ -507,7 +581,7 @@ ion-picker-column-internal {
507
581
  color: var(--ion-color-contrast);
508
582
  }
509
583
 
510
- .calendar-day.calendar-day-active {
584
+ .calendar-day.calendar-day-active .calendar-day-highlight {
511
585
  border: 1px solid var(--ion-color-base);
512
586
  background: var(--ion-color-base);
513
587
  }
@@ -348,28 +348,3 @@ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, screenshot, co
348
348
  });
349
349
  });
350
350
  });
351
- /**
352
- * This behavior does not differ across
353
- * directions.
354
- */
355
- configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
356
- test.describe(title('datetime: focus'), () => {
357
- test('should focus the selected day and then the day after', async ({ page }) => {
358
- await page.setContent(`
359
- <ion-datetime value="2023-08-01"></ion-datetime>
360
- `, config);
361
- await page.waitForSelector('.datetime-ready');
362
- const datetime = page.locator('ion-datetime');
363
- const day = datetime.locator(`.calendar-day[data-day='1'][data-month='8']`);
364
- await day.focus();
365
- await page.waitForChanges();
366
- await expect(day).toBeFocused();
367
- await expect(datetime).toHaveScreenshot(screenshot(`datetime-focus-selected-calendar-day`));
368
- await page.keyboard.press('ArrowRight');
369
- await page.waitForChanges();
370
- const nextDay = datetime.locator(`.calendar-day[data-day='2'][data-month='8']`);
371
- await expect(nextDay).toBeFocused();
372
- await expect(datetime).toHaveScreenshot(screenshot(`datetime-focus-calendar-day`));
373
- });
374
- });
375
- });
@@ -10,7 +10,7 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
10
10
  test.describe(title('datetime: color'), () => {
11
11
  test('should not have visual regressions', async ({ page }) => {
12
12
  await page.goto('/src/components/datetime/test/color', config);
13
- const datetime = page.locator('#color-datetime');
13
+ const datetime = page.locator('ion-datetime');
14
14
  await expect(datetime).toHaveScreenshot(screenshot(`datetime-color`));
15
15
  await page.evaluate(() => document.body.classList.toggle('dark'));
16
16
  await page.waitForChanges();
@@ -13,7 +13,7 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
13
13
  await expect(datetime).toHaveScreenshot(screenshot(`datetime-custom-wheel`));
14
14
  });
15
15
  test('should allow styling time picker in grid style datetimes', async ({ page }) => {
16
- const timeButton = page.locator('#custom-grid .time-body');
16
+ const timeButton = page.locator('ion-datetime .time-body');
17
17
  const popover = page.locator('.popover-viewport');
18
18
  const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent');
19
19
  await expect(timeButton).toHaveScreenshot(screenshot(`datetime-custom-time-button`));
@@ -22,31 +22,5 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
22
22
  await expect(popover).toHaveScreenshot(screenshot(`datetime-custom-time-picker`));
23
23
  await expect(timeButton).toHaveScreenshot(screenshot(`datetime-custom-time-button-active`));
24
24
  });
25
- test('should allow styling calendar days in grid style datetimes', async ({ page }) => {
26
- const datetime = page.locator('#custom-calendar-days');
27
- await expect(datetime).toHaveScreenshot(screenshot(`datetime-custom-calendar-days`));
28
- });
29
- });
30
- });
31
- /**
32
- * This behavior does not differ across
33
- * directions.
34
- */
35
- configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
36
- test.describe(title('datetime: custom focus'), () => {
37
- test('should focus the selected day and then the day after', async ({ page }) => {
38
- await page.goto(`/src/components/datetime/test/custom`, config);
39
- const datetime = page.locator('#custom-calendar-days');
40
- const day = datetime.locator(`.calendar-day[data-day='15'][data-month='6']`);
41
- await day.focus();
42
- await page.waitForChanges();
43
- await expect(day).toBeFocused();
44
- await expect(datetime).toHaveScreenshot(screenshot(`datetime-custom-focus-selected-calendar-day`));
45
- await page.keyboard.press('ArrowRight');
46
- await page.waitForChanges();
47
- const nextDay = datetime.locator(`.calendar-day[data-day='16'][data-month='6']`);
48
- await expect(nextDay).toBeFocused();
49
- await expect(datetime).toHaveScreenshot(screenshot(`datetime-custom-focus-calendar-day`));
50
- });
51
25
  });
52
26
  });