voyager-ionic-core 8.0.0-beta.1 → 8.0.0-beta.3

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 (715) hide show
  1. package/components/action-sheet.js +3 -3
  2. package/components/alert.js +2 -2
  3. package/components/backdrop.js +1 -1
  4. package/components/button.js +2 -2
  5. package/components/buttons.js +3 -3
  6. package/components/checkbox.js +3 -3
  7. package/components/data.js +23 -38
  8. package/components/hardware-back-button.js +3 -3
  9. package/components/helpers.js +1 -54
  10. package/components/index9.js +1 -1
  11. package/components/input.utils.js +12 -0
  12. package/components/ion-app.js +4 -4
  13. package/components/ion-avatar.js +1 -1
  14. package/components/ion-back-button.js +2 -2
  15. package/components/ion-badge.js +2 -2
  16. package/components/ion-breadcrumb.js +2 -2
  17. package/components/ion-breadcrumbs.js +2 -2
  18. package/components/ion-card-content.js +1 -1
  19. package/components/ion-card-header.js +2 -2
  20. package/components/ion-card-subtitle.js +2 -2
  21. package/components/ion-card-title.js +2 -2
  22. package/components/ion-card.js +1 -1
  23. package/components/ion-chip.js +2 -2
  24. package/components/ion-col.js +2 -2
  25. package/components/ion-content.js +3 -3
  26. package/components/ion-datetime-button.js +11 -10
  27. package/components/ion-datetime.js +75 -12
  28. package/components/ion-fab-button.js +2 -2
  29. package/components/ion-fab-list.js +2 -2
  30. package/components/ion-fab.js +2 -2
  31. package/components/ion-footer.js +2 -2
  32. package/components/ion-grid.js +2 -2
  33. package/components/ion-header.js +3 -3
  34. package/components/ion-img.js +1 -1
  35. package/components/ion-infinite-scroll-content.js +2 -2
  36. package/components/ion-infinite-scroll.js +1 -1
  37. package/components/ion-input.js +6 -6
  38. package/components/ion-item-divider.js +2 -2
  39. package/components/ion-item-group.js +1 -1
  40. package/components/ion-item-option.js +2 -2
  41. package/components/ion-item-options.js +1 -1
  42. package/components/ion-item-sliding.js +1 -1
  43. package/components/ion-loading.js +2 -2
  44. package/components/ion-menu-button.js +2 -2
  45. package/components/ion-menu-toggle.js +2 -2
  46. package/components/ion-menu.js +3 -3
  47. package/components/ion-modal.js +3 -3
  48. package/components/ion-nav-link.js +1 -1
  49. package/components/ion-nav.js +1 -1
  50. package/components/ion-note.js +43 -1
  51. package/components/ion-picker-legacy.js +2 -2
  52. package/components/ion-progress-bar.js +1 -1
  53. package/components/ion-range.js +137 -45
  54. package/components/ion-refresher-content.js +1 -1
  55. package/components/ion-refresher.js +1 -1
  56. package/components/ion-reorder-group.js +1 -1
  57. package/components/ion-reorder.js +1 -1
  58. package/components/ion-router-link.js +2 -2
  59. package/components/ion-router-outlet.js +1 -1
  60. package/components/ion-router.js +1 -1
  61. package/components/ion-row.js +1 -1
  62. package/components/ion-searchbar.js +34 -5
  63. package/components/ion-segment-button.js +3 -3
  64. package/components/ion-segment.js +2 -2
  65. package/components/ion-select-option.js +1 -1
  66. package/components/ion-select.js +27 -33
  67. package/components/ion-skeleton-text.js +2 -2
  68. package/components/ion-split-pane.js +2 -2
  69. package/components/ion-tab-bar.js +2 -2
  70. package/components/ion-tab-button.js +2 -2
  71. package/components/ion-tab.js +2 -2
  72. package/components/ion-tabs.js +1 -1
  73. package/components/ion-text.js +2 -2
  74. package/components/ion-textarea.js +5 -5
  75. package/components/ion-thumbnail.js +1 -1
  76. package/components/ion-title.js +2 -2
  77. package/components/ion-toast.js +2 -2
  78. package/components/ion-toggle.js +3 -3
  79. package/components/ion-toolbar.js +2 -2
  80. package/components/item.js +11 -92
  81. package/components/label.js +5 -5
  82. package/components/list-header.js +2 -2
  83. package/components/list.js +1 -1
  84. package/components/overlays.js +61 -19
  85. package/components/picker-column-option.js +2 -2
  86. package/components/picker-column.js +8 -4
  87. package/components/picker-column2.js +2 -2
  88. package/components/picker.js +2 -2
  89. package/components/popover.js +2 -2
  90. package/components/radio-group.js +1 -1
  91. package/components/radio.js +3 -3
  92. package/components/ripple-effect.js +1 -1
  93. package/components/select-popover.js +13 -19
  94. package/components/spinner.js +1 -1
  95. package/css/palettes/dark.always.css.map +1 -0
  96. package/css/{themes → palettes}/dark.class.css +4 -4
  97. package/css/palettes/dark.class.css.map +1 -0
  98. package/css/palettes/dark.system.css.map +1 -0
  99. package/css/palettes/high-contrast-dark.always.css.map +1 -0
  100. package/css/{themes → palettes}/high-contrast-dark.class.css +10 -10
  101. package/css/palettes/high-contrast-dark.class.css.map +1 -0
  102. package/css/palettes/high-contrast-dark.system.css.map +1 -0
  103. package/css/palettes/high-contrast.always.css.map +1 -0
  104. package/css/{themes → palettes}/high-contrast.class.css +31 -31
  105. package/css/palettes/high-contrast.class.css.map +1 -0
  106. package/css/palettes/high-contrast.system.css.map +1 -0
  107. package/dist/cjs/{animation-4ad55058.js → animation-58ecfe20.js} +1 -1
  108. package/dist/cjs/{app-globals-4d26cb5a.js → app-globals-e132c781.js} +1 -1
  109. package/dist/cjs/{button-active-e447f58b.js → button-active-60ecf64d.js} +1 -1
  110. package/dist/cjs/{data-e2bf21de.js → data-21dc0f81.js} +22 -39
  111. package/dist/cjs/{framework-delegate-53817ef1.js → framework-delegate-df3a2b04.js} +1 -1
  112. package/dist/cjs/{hardware-back-button-4cb049f1.js → hardware-back-button-1c67a5a2.js} +5 -5
  113. package/dist/cjs/{helpers-b71ca811.js → helpers-71097d9c.js} +0 -54
  114. package/dist/cjs/{index-92bb95d6.js → index-14ae0c27.js} +4 -4
  115. package/dist/cjs/{index-bbc5b1f7.js → index-289297dc.js} +4 -4
  116. package/dist/cjs/{index-ea266398.js → index-2d21d526.js} +441 -12
  117. package/dist/cjs/{index-347883f6.js → index-7479ea5a.js} +1 -1
  118. package/dist/cjs/{index-7574e3d2.js → index-a91a3e24.js} +1 -1
  119. package/dist/cjs/index.cjs.js +11 -11
  120. package/dist/cjs/{input-shims-679d87bc.js → input-shims-77b14f24.js} +2 -2
  121. package/dist/cjs/{input.utils-5175aea1.js → input.utils-ca74d73a.js} +13 -1
  122. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  123. package/dist/cjs/ion-action-sheet.cjs.entry.js +11 -11
  124. package/dist/cjs/ion-alert.cjs.entry.js +10 -10
  125. package/dist/cjs/ion-app_8.cjs.entry.js +30 -30
  126. package/dist/cjs/ion-avatar_3.cjs.entry.js +6 -6
  127. package/dist/cjs/ion-back-button.cjs.entry.js +5 -5
  128. package/dist/cjs/ion-backdrop.cjs.entry.js +3 -3
  129. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +7 -7
  130. package/dist/cjs/ion-button_2.cjs.entry.js +5 -5
  131. package/dist/cjs/ion-card_5.cjs.entry.js +11 -11
  132. package/dist/cjs/ion-checkbox.cjs.entry.js +6 -6
  133. package/dist/cjs/ion-chip.cjs.entry.js +4 -4
  134. package/dist/cjs/ion-col_3.cjs.entry.js +7 -7
  135. package/dist/cjs/ion-datetime-button.cjs.entry.js +14 -13
  136. package/dist/cjs/ion-datetime_3.cjs.entry.js +83 -23
  137. package/dist/cjs/ion-fab_3.cjs.entry.js +9 -9
  138. package/dist/cjs/ion-img.cjs.entry.js +4 -4
  139. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +7 -7
  140. package/dist/cjs/ion-input.cjs.entry.js +10 -10
  141. package/dist/cjs/ion-item-option_3.cjs.entry.js +8 -8
  142. package/dist/cjs/ion-item_8.cjs.entry.js +23 -92
  143. package/dist/cjs/ion-loading.cjs.entry.js +9 -9
  144. package/dist/cjs/ion-menu_3.cjs.entry.js +14 -14
  145. package/dist/cjs/ion-modal.cjs.entry.js +12 -12
  146. package/dist/cjs/ion-nav_2.cjs.entry.js +8 -8
  147. package/dist/cjs/ion-picker-column-option.cjs.entry.js +5 -5
  148. package/dist/cjs/ion-picker-column.cjs.entry.js +11 -7
  149. package/dist/cjs/ion-picker.cjs.entry.js +4 -4
  150. package/dist/cjs/ion-popover.cjs.entry.js +10 -10
  151. package/dist/cjs/ion-progress-bar.cjs.entry.js +4 -4
  152. package/dist/cjs/ion-radio_2.cjs.entry.js +7 -7
  153. package/dist/cjs/ion-range.cjs.entry.js +140 -48
  154. package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -7
  155. package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -6
  156. package/dist/cjs/ion-ripple-effect.cjs.entry.js +3 -3
  157. package/dist/cjs/ion-route_4.cjs.entry.js +5 -5
  158. package/dist/cjs/ion-searchbar.cjs.entry.js +31 -7
  159. package/dist/cjs/ion-segment_2.cjs.entry.js +8 -8
  160. package/dist/cjs/ion-select_3.cjs.entry.js +17 -17
  161. package/dist/cjs/ion-spinner.cjs.entry.js +3 -3
  162. package/dist/cjs/ion-split-pane.cjs.entry.js +4 -4
  163. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +7 -7
  164. package/dist/cjs/ion-tab_2.cjs.entry.js +6 -6
  165. package/dist/cjs/ion-text.cjs.entry.js +4 -4
  166. package/dist/cjs/ion-textarea.cjs.entry.js +9 -9
  167. package/dist/cjs/ion-toast.cjs.entry.js +9 -9
  168. package/dist/cjs/ion-toggle.cjs.entry.js +6 -6
  169. package/dist/cjs/{ionic-global-59aa7eb7.js → ionic-global-5762eca9.js} +1 -1
  170. package/dist/cjs/ionic.cjs.js +28 -5
  171. package/dist/cjs/{ios.transition-997fe325.js → ios.transition-8e0ca8ed.js} +4 -4
  172. package/dist/cjs/loader.cjs.js +4 -4
  173. package/dist/cjs/{md.transition-2b76c2c6.js → md.transition-5d0f134b.js} +4 -4
  174. package/dist/cjs/{notch-controller-8e0ae870.js → notch-controller-0042ad49.js} +1 -1
  175. package/dist/cjs/{overlays-3d02b54f.js → overlays-30b83581.js} +64 -22
  176. package/dist/cjs/{status-tap-3761c2d4.js → status-tap-dc3b8fda.js} +3 -3
  177. package/dist/cjs/{swipe-back-5b71fc62.js → swipe-back-49825f1f.js} +1 -1
  178. package/dist/collection/collection-manifest.json +1 -1
  179. package/dist/collection/components/action-sheet/action-sheet.js +3 -3
  180. package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +1 -1
  181. package/dist/collection/components/alert/alert.js +2 -2
  182. package/dist/collection/components/alert/test/a11y/alert.e2e.js +5 -1
  183. package/dist/collection/components/alert/test/basic/alert.e2e.js +1 -1
  184. package/dist/collection/components/app/app.js +4 -4
  185. package/dist/collection/components/avatar/avatar.js +1 -1
  186. package/dist/collection/components/back-button/back-button.js +2 -2
  187. package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +1 -1
  188. package/dist/collection/components/backdrop/backdrop.js +1 -1
  189. package/dist/collection/components/badge/badge.js +2 -2
  190. package/dist/collection/components/badge/test/a11y/badge.e2e.js +1 -1
  191. package/dist/collection/components/breadcrumb/breadcrumb.js +2 -2
  192. package/dist/collection/components/breadcrumbs/breadcrumbs.js +2 -2
  193. package/dist/collection/components/button/button.js +2 -2
  194. package/dist/collection/components/button/test/a11y/button.e2e.js +2 -2
  195. package/dist/collection/components/buttons/buttons.js +2 -2
  196. package/dist/collection/components/card/card.js +1 -1
  197. package/dist/collection/components/card-content/card-content.js +1 -1
  198. package/dist/collection/components/card-header/card-header.js +2 -2
  199. package/dist/collection/components/card-subtitle/card-subtitle.js +2 -2
  200. package/dist/collection/components/card-title/card-title.js +2 -2
  201. package/dist/collection/components/checkbox/checkbox.js +3 -3
  202. package/dist/collection/components/checkbox/test/a11y/checkbox.e2e.js +1 -1
  203. package/dist/collection/components/checkbox/test/checkbox.spec.js +12 -0
  204. package/dist/collection/components/chip/chip.js +2 -2
  205. package/dist/collection/components/col/col.js +2 -2
  206. package/dist/collection/components/content/content.js +3 -3
  207. package/dist/collection/components/datetime/datetime.js +56 -12
  208. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +77 -0
  209. package/dist/collection/components/datetime/test/format.spec.js +65 -15
  210. package/dist/collection/components/datetime/utils/format.js +24 -37
  211. package/dist/collection/components/datetime/utils/validate.js +45 -0
  212. package/dist/collection/components/datetime-button/datetime-button.js +11 -10
  213. package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +65 -0
  214. package/dist/collection/components/fab/fab.js +2 -2
  215. package/dist/collection/components/fab-button/fab-button.js +2 -2
  216. package/dist/collection/components/fab-button/test/a11y/fab-button.e2e.js +1 -1
  217. package/dist/collection/components/fab-list/fab-list.js +2 -2
  218. package/dist/collection/components/footer/footer.js +2 -2
  219. package/dist/collection/components/grid/grid.js +2 -2
  220. package/dist/collection/components/header/header.ios.css +5 -2
  221. package/dist/collection/components/header/header.js +2 -2
  222. package/dist/collection/components/header/test/basic/header.e2e.js +77 -0
  223. package/dist/collection/components/img/img.js +1 -1
  224. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  225. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  226. package/dist/collection/components/input/input.ios.css +4 -2
  227. package/dist/collection/components/input/input.js +3 -3
  228. package/dist/collection/components/input/input.md.css +6 -4
  229. package/dist/collection/components/input/test/a11y/input.e2e.js +1 -1
  230. package/dist/collection/components/input/test/highlight/input.e2e.js +144 -0
  231. package/dist/collection/components/input/test/slot/input.e2e.js +8 -0
  232. package/dist/collection/components/item/item.ios.css +5 -197
  233. package/dist/collection/components/item/item.js +4 -166
  234. package/dist/collection/components/item/item.md.css +7 -360
  235. package/dist/collection/components/item/test/basic/item.e2e.js +0 -5
  236. package/dist/collection/components/item/test/buttons/item.e2e.js +20 -4
  237. package/dist/collection/components/item/test/item.spec.js +1 -1
  238. package/dist/collection/components/item-divider/item-divider.js +2 -2
  239. package/dist/collection/components/item-group/item-group.js +1 -1
  240. package/dist/collection/components/item-option/item-option.js +2 -2
  241. package/dist/collection/components/item-options/item-options.js +1 -1
  242. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  243. package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +1 -1
  244. package/dist/collection/components/label/label.ios.css +0 -5
  245. package/dist/collection/components/label/label.js +2 -2
  246. package/dist/collection/components/label/label.md.css +0 -75
  247. package/dist/collection/components/label/test/a11y/label.e2e.js +1 -1
  248. package/dist/collection/components/list/list.js +1 -1
  249. package/dist/collection/components/list-header/list-header.js +2 -2
  250. package/dist/collection/components/loading/loading.js +2 -2
  251. package/dist/collection/components/loading/test/a11y/loading.e2e.js +1 -1
  252. package/dist/collection/components/menu/menu.js +12 -6
  253. package/dist/collection/components/menu-button/menu-button.js +2 -2
  254. package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +1 -1
  255. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  256. package/dist/collection/components/modal/modal.js +3 -3
  257. package/dist/collection/components/nav/nav.js +1 -1
  258. package/dist/collection/components/nav-link/nav-link.js +1 -1
  259. package/dist/collection/components/note/note.js +2 -2
  260. package/dist/collection/components/picker/picker.js +2 -2
  261. package/dist/collection/components/picker-column/picker-column.js +8 -4
  262. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  263. package/dist/collection/components/picker-legacy/picker.js +2 -2
  264. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  265. package/dist/collection/components/popover/popover.js +2 -2
  266. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  267. package/dist/collection/components/progress-bar/test/a11y/progress-bar.e2e.js +1 -1
  268. package/dist/collection/components/radio/radio.js +3 -3
  269. package/dist/collection/components/radio/test/a11y/radio.e2e.js +1 -1
  270. package/dist/collection/components/radio-group/radio-group.js +1 -1
  271. package/dist/collection/components/range/range.js +137 -45
  272. package/dist/collection/components/range/test/a11y/range.e2e.js +1 -1
  273. package/dist/collection/components/range/test/label/range.spec.js +24 -0
  274. package/dist/collection/components/range/test/range-events.e2e.js +27 -0
  275. package/dist/collection/components/refresher/refresher.js +1 -1
  276. package/dist/collection/components/refresher/test/a11y/refresher.e2e.js +1 -1
  277. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  278. package/dist/collection/components/reorder/reorder.js +1 -1
  279. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  280. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  281. package/dist/collection/components/router-link/router-link.js +2 -2
  282. package/dist/collection/components/router-link/test/a11y/router-link.e2e.js +1 -1
  283. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  284. package/dist/collection/components/row/row.js +1 -1
  285. package/dist/collection/components/searchbar/searchbar.js +84 -5
  286. package/dist/collection/components/searchbar/test/searchbar.spec.js +20 -2
  287. package/dist/collection/components/segment/segment.js +2 -2
  288. package/dist/collection/components/segment/test/a11y/segment.e2e.js +1 -1
  289. package/dist/collection/components/segment-button/segment-button.js +3 -3
  290. package/dist/collection/components/select/select.ios.css +7 -2
  291. package/dist/collection/components/select/select.js +7 -7
  292. package/dist/collection/components/select/select.md.css +6 -29
  293. package/dist/collection/components/select/test/a11y/select.e2e.js +1 -1
  294. package/dist/collection/components/select/test/highlight/select.e2e.js +88 -4
  295. package/dist/collection/components/select/test/select.spec.js +22 -0
  296. package/dist/collection/components/select/test/slot/select.e2e.js +8 -0
  297. package/dist/collection/components/select-option/select-option.js +1 -1
  298. package/dist/collection/components/select-popover/select-popover.js +1 -1
  299. package/dist/collection/components/select-popover/test/a11y/select-popover.e2e.js +1 -1
  300. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  301. package/dist/collection/components/spinner/spinner.js +1 -1
  302. package/dist/collection/components/split-pane/split-pane.js +2 -2
  303. package/dist/collection/components/tab/tab.js +2 -2
  304. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  305. package/dist/collection/components/tab-button/tab-button.js +2 -2
  306. package/dist/collection/components/tabs/tabs.js +1 -1
  307. package/dist/collection/components/text/text.js +2 -2
  308. package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +1 -1
  309. package/dist/collection/components/textarea/test/highlight/textarea.e2e.js +144 -0
  310. package/dist/collection/components/textarea/test/slot/textarea.e2e.js +8 -0
  311. package/dist/collection/components/textarea/textarea.ios.css +4 -22
  312. package/dist/collection/components/textarea/textarea.js +2 -2
  313. package/dist/collection/components/textarea/textarea.md.css +6 -17
  314. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  315. package/dist/collection/components/title/title.js +2 -2
  316. package/dist/collection/components/toast/test/a11y/toast.e2e.js +2 -2
  317. package/dist/collection/components/toast/toast.js +2 -2
  318. package/dist/collection/components/toggle/test/a11y/toggle.e2e.js +1 -1
  319. package/dist/collection/components/toggle/toggle.js +4 -4
  320. package/dist/collection/components/toolbar/toolbar.js +2 -2
  321. package/dist/collection/css/test/a11y/typography.e2e.js +1 -1
  322. package/dist/collection/themes/test/colors/theme.e2e.js +2 -2
  323. package/dist/collection/utils/forms/index.js +0 -1
  324. package/dist/collection/utils/hardware-back-button.js +2 -2
  325. package/dist/collection/utils/helpers.js +0 -53
  326. package/dist/collection/utils/overlays.js +61 -19
  327. package/dist/collection/utils/slot-mutation-controller.js +12 -0
  328. package/dist/collection/utils/test/overlays/overlays.spec.js +53 -0
  329. package/dist/collection/utils/test/playwright/generator.js +17 -17
  330. package/dist/collection/utils/test/playwright/page/utils/set-content.js +6 -6
  331. package/dist/docs.json +159 -190
  332. package/dist/esm/{animation-a4acf150.js → animation-6a3c0abb.js} +1 -1
  333. package/dist/esm/{app-globals-cfb6787b.js → app-globals-80842d68.js} +1 -1
  334. package/dist/esm/{button-active-454e5c57.js → button-active-c6e18fac.js} +1 -1
  335. package/dist/esm/{data-691286f1.js → data-ae11fd43.js} +23 -38
  336. package/dist/esm/{framework-delegate-1eb3236c.js → framework-delegate-3dede018.js} +1 -1
  337. package/dist/esm/{hardware-back-button-3a14f99e.js → hardware-back-button-fb295e3a.js} +5 -5
  338. package/dist/esm/{helpers-ae74b3c9.js → helpers-eab4f597.js} +1 -54
  339. package/dist/esm/{index-66871a1d.js → index-044b5a86.js} +1 -1
  340. package/dist/esm/{index-5847f4a9.js → index-136e99c8.js} +4 -4
  341. package/dist/esm/{index-9b6d6df3.js → index-5d6a0317.js} +441 -13
  342. package/dist/esm/{index-03086279.js → index-95a691d4.js} +4 -4
  343. package/dist/esm/{index-1f563746.js → index-fa221975.js} +1 -1
  344. package/dist/esm/index.js +11 -11
  345. package/dist/esm/{input-shims-56c1f603.js → input-shims-196afa11.js} +2 -2
  346. package/dist/esm/{input.utils-482fc893.js → input.utils-426cc674.js} +13 -1
  347. package/dist/esm/ion-accordion_2.entry.js +3 -3
  348. package/dist/esm/ion-action-sheet.entry.js +11 -11
  349. package/dist/esm/ion-alert.entry.js +10 -10
  350. package/dist/esm/ion-app_8.entry.js +30 -30
  351. package/dist/esm/ion-avatar_3.entry.js +6 -6
  352. package/dist/esm/ion-back-button.entry.js +5 -5
  353. package/dist/esm/ion-backdrop.entry.js +3 -3
  354. package/dist/esm/ion-breadcrumb_2.entry.js +7 -7
  355. package/dist/esm/ion-button_2.entry.js +5 -5
  356. package/dist/esm/ion-card_5.entry.js +11 -11
  357. package/dist/esm/ion-checkbox.entry.js +6 -6
  358. package/dist/esm/ion-chip.entry.js +4 -4
  359. package/dist/esm/ion-col_3.entry.js +7 -7
  360. package/dist/esm/ion-datetime-button.entry.js +14 -13
  361. package/dist/esm/ion-datetime_3.entry.js +83 -23
  362. package/dist/esm/ion-fab_3.entry.js +9 -9
  363. package/dist/esm/ion-img.entry.js +4 -4
  364. package/dist/esm/ion-infinite-scroll_2.entry.js +7 -7
  365. package/dist/esm/ion-input.entry.js +10 -10
  366. package/dist/esm/ion-item-option_3.entry.js +8 -8
  367. package/dist/esm/ion-item_8.entry.js +23 -92
  368. package/dist/esm/ion-loading.entry.js +9 -9
  369. package/dist/esm/ion-menu_3.entry.js +14 -14
  370. package/dist/esm/ion-modal.entry.js +12 -12
  371. package/dist/esm/ion-nav_2.entry.js +8 -8
  372. package/dist/esm/ion-picker-column-option.entry.js +5 -5
  373. package/dist/esm/ion-picker-column.entry.js +11 -7
  374. package/dist/esm/ion-picker.entry.js +4 -4
  375. package/dist/esm/ion-popover.entry.js +10 -10
  376. package/dist/esm/ion-progress-bar.entry.js +4 -4
  377. package/dist/esm/ion-radio_2.entry.js +7 -7
  378. package/dist/esm/ion-range.entry.js +140 -48
  379. package/dist/esm/ion-refresher_2.entry.js +7 -7
  380. package/dist/esm/ion-reorder_2.entry.js +6 -6
  381. package/dist/esm/ion-ripple-effect.entry.js +3 -3
  382. package/dist/esm/ion-route_4.entry.js +5 -5
  383. package/dist/esm/ion-searchbar.entry.js +31 -7
  384. package/dist/esm/ion-segment_2.entry.js +8 -8
  385. package/dist/esm/ion-select_3.entry.js +17 -17
  386. package/dist/esm/ion-spinner.entry.js +3 -3
  387. package/dist/esm/ion-split-pane.entry.js +4 -4
  388. package/dist/esm/ion-tab-bar_2.entry.js +7 -7
  389. package/dist/esm/ion-tab_2.entry.js +6 -6
  390. package/dist/esm/ion-text.entry.js +4 -4
  391. package/dist/esm/ion-textarea.entry.js +9 -9
  392. package/dist/esm/ion-toast.entry.js +9 -9
  393. package/dist/esm/ion-toggle.entry.js +6 -6
  394. package/dist/esm/{ionic-global-c976d684.js → ionic-global-a589c12c.js} +1 -1
  395. package/dist/esm/ionic.js +29 -6
  396. package/dist/esm/{ios.transition-a097dbf5.js → ios.transition-d1c8eea2.js} +4 -4
  397. package/dist/esm/loader.js +5 -5
  398. package/dist/esm/{md.transition-b4170ef7.js → md.transition-0d2de76d.js} +4 -4
  399. package/dist/esm/{notch-controller-18bf9f76.js → notch-controller-cff691e5.js} +1 -1
  400. package/dist/esm/{overlays-4ba3b255.js → overlays-d41f74ac.js} +64 -22
  401. package/dist/esm/{status-tap-7a12f017.js → status-tap-45595148.js} +3 -3
  402. package/dist/esm/{swipe-back-ae14449a.js → swipe-back-5aa5feeb.js} +1 -1
  403. package/dist/esm-es5/{animation-a4acf150.js → animation-6a3c0abb.js} +1 -1
  404. package/dist/esm-es5/app-globals-80842d68.js +4 -0
  405. package/dist/esm-es5/{button-active-454e5c57.js → button-active-c6e18fac.js} +1 -1
  406. package/dist/esm-es5/data-ae11fd43.js +4 -0
  407. package/dist/esm-es5/{framework-delegate-1eb3236c.js → framework-delegate-3dede018.js} +1 -1
  408. package/dist/esm-es5/hardware-back-button-fb295e3a.js +4 -0
  409. package/dist/esm-es5/helpers-eab4f597.js +4 -0
  410. package/dist/esm-es5/{index-66871a1d.js → index-044b5a86.js} +1 -1
  411. package/dist/esm-es5/{index-5847f4a9.js → index-136e99c8.js} +1 -1
  412. package/dist/esm-es5/index-5d6a0317.js +5 -0
  413. package/dist/esm-es5/{index-03086279.js → index-95a691d4.js} +1 -1
  414. package/dist/esm-es5/{index-1f563746.js → index-fa221975.js} +1 -1
  415. package/dist/esm-es5/index.js +1 -1
  416. package/dist/esm-es5/{input-shims-56c1f603.js → input-shims-196afa11.js} +1 -1
  417. package/dist/esm-es5/input.utils-426cc674.js +4 -0
  418. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  419. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  420. package/dist/esm-es5/ion-alert.entry.js +1 -1
  421. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  422. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  423. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  424. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  425. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  426. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  427. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  428. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  429. package/dist/esm-es5/ion-chip.entry.js +1 -1
  430. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  431. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  432. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  433. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  434. package/dist/esm-es5/ion-img.entry.js +1 -1
  435. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  436. package/dist/esm-es5/ion-input.entry.js +1 -1
  437. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  438. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  439. package/dist/esm-es5/ion-loading.entry.js +1 -1
  440. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  441. package/dist/esm-es5/ion-modal.entry.js +1 -1
  442. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  443. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  444. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  445. package/dist/esm-es5/ion-picker.entry.js +1 -1
  446. package/dist/esm-es5/ion-popover.entry.js +1 -1
  447. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  448. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  449. package/dist/esm-es5/ion-range.entry.js +1 -1
  450. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  451. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  452. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  453. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  454. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  455. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  456. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  457. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  458. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  459. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  460. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  461. package/dist/esm-es5/ion-text.entry.js +1 -1
  462. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  463. package/dist/esm-es5/ion-toast.entry.js +1 -1
  464. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  465. package/dist/esm-es5/{ionic-global-c976d684.js → ionic-global-a589c12c.js} +1 -1
  466. package/dist/esm-es5/ionic.js +1 -1
  467. package/dist/esm-es5/{ios.transition-a097dbf5.js → ios.transition-d1c8eea2.js} +1 -1
  468. package/dist/esm-es5/loader.js +1 -1
  469. package/dist/esm-es5/md.transition-0d2de76d.js +4 -0
  470. package/dist/esm-es5/{notch-controller-18bf9f76.js → notch-controller-cff691e5.js} +1 -1
  471. package/dist/esm-es5/overlays-d41f74ac.js +4 -0
  472. package/dist/esm-es5/{status-tap-7a12f017.js → status-tap-45595148.js} +1 -1
  473. package/dist/esm-es5/{swipe-back-ae14449a.js → swipe-back-5aa5feeb.js} +1 -1
  474. package/dist/html.html-data.json +25 -27
  475. package/dist/ionic/index.esm.js +1 -1
  476. package/dist/ionic/ionic.esm.js +1 -1
  477. package/dist/ionic/ionic.js +1 -1
  478. package/dist/ionic/{p-97135baa.entry.js → p-0051ceb9.entry.js} +1 -1
  479. package/dist/ionic/p-00a6f38d.entry.js +4 -0
  480. package/dist/ionic/p-02a803dc.entry.js +4 -0
  481. package/dist/ionic/{p-5aa60929.js → p-031c5621.js} +1 -1
  482. package/dist/ionic/p-07759435.system.js +4 -0
  483. package/dist/ionic/{p-a06af32c.system.js → p-08a8971e.system.js} +1 -1
  484. package/dist/ionic/p-0e4c9e45.system.js +4 -0
  485. package/dist/ionic/{p-f7ed6a44.system.entry.js → p-103ec049.system.entry.js} +1 -1
  486. package/dist/ionic/p-1685d81c.system.entry.js +4 -0
  487. package/dist/ionic/{p-cb944b1a.system.js → p-17043350.system.js} +1 -1
  488. package/dist/ionic/{p-1bca443b.system.entry.js → p-17ee2784.system.entry.js} +1 -1
  489. package/dist/ionic/p-1807190c.entry.js +4 -0
  490. package/dist/ionic/{p-cb0e4100.system.entry.js → p-185db19b.system.entry.js} +2 -2
  491. package/dist/ionic/{p-602494c6.entry.js → p-1a8bbd2e.entry.js} +1 -1
  492. package/dist/ionic/{p-8aeed464.system.entry.js → p-1bb1ef31.system.entry.js} +1 -1
  493. package/dist/ionic/p-1c801dd4.entry.js +4 -0
  494. package/dist/ionic/{p-466bdeae.entry.js → p-2130b526.entry.js} +1 -1
  495. package/dist/ionic/{p-1c436e95.system.entry.js → p-219c17cf.system.entry.js} +1 -1
  496. package/dist/ionic/p-22b5c888.system.entry.js +4 -0
  497. package/dist/ionic/{p-1a5ed3fe.system.entry.js → p-23838a94.system.entry.js} +1 -1
  498. package/dist/ionic/{p-27594fc2.js → p-239906f1.js} +1 -1
  499. package/dist/ionic/{p-8d50220b.system.js → p-23cff6c1.system.js} +1 -1
  500. package/dist/ionic/p-23efc001.entry.js +4 -0
  501. package/dist/ionic/{p-a6cc38d4.js → p-244f56fd.js} +1 -1
  502. package/dist/ionic/p-27c668a0.entry.js +4 -0
  503. package/dist/ionic/{p-09872ec8.system.entry.js → p-282bd5f9.system.entry.js} +1 -1
  504. package/dist/ionic/{p-dcfc297d.system.entry.js → p-2852c537.system.entry.js} +1 -1
  505. package/dist/ionic/{p-85464e28.system.entry.js → p-294c47cd.system.entry.js} +2 -2
  506. package/dist/ionic/p-29ef3b9b.entry.js +4 -0
  507. package/dist/ionic/p-2bb65deb.entry.js +4 -0
  508. package/dist/ionic/{p-8a50f8d6.system.js → p-2cc2c631.system.js} +1 -1
  509. package/dist/ionic/p-2f53c3eb.js +4 -0
  510. package/dist/ionic/{p-7b795aee.system.entry.js → p-2f6bc4a9.system.entry.js} +1 -1
  511. package/dist/ionic/{p-6d95943d.system.js → p-30dfa360.system.js} +1 -1
  512. package/dist/ionic/{p-c880c809.js → p-325c61a4.js} +1 -1
  513. package/dist/ionic/p-34c50a42.system.entry.js +4 -0
  514. package/dist/ionic/p-364044f0.js +4 -0
  515. package/dist/ionic/{p-e38b3c29.entry.js → p-3785c067.entry.js} +1 -1
  516. package/dist/ionic/p-3ae4a2a2.entry.js +4 -0
  517. package/dist/ionic/p-3cd3214e.entry.js +4 -0
  518. package/dist/ionic/{p-874510e9.system.entry.js → p-3e6e53fe.system.entry.js} +1 -1
  519. package/dist/ionic/{p-d4d0538c.system.entry.js → p-40976b1c.system.entry.js} +1 -1
  520. package/dist/ionic/{p-fd94dd20.system.entry.js → p-42fecf9c.system.entry.js} +1 -1
  521. package/dist/ionic/{p-7541ca9f.system.entry.js → p-43c751c6.system.entry.js} +1 -1
  522. package/dist/ionic/p-4a3055ef.system.js +4 -0
  523. package/dist/ionic/{p-f6a6b7ef.system.entry.js → p-4d325220.system.entry.js} +1 -1
  524. package/dist/ionic/p-4d361c89.entry.js +4 -0
  525. package/dist/ionic/p-54c31b4f.entry.js +4 -0
  526. package/dist/ionic/{p-7665bbbc.system.entry.js → p-5a277399.system.entry.js} +1 -1
  527. package/dist/ionic/{p-1600d68c.system.entry.js → p-5ac63b19.system.entry.js} +1 -1
  528. package/dist/ionic/{p-ad2b216a.system.entry.js → p-5b2951c1.system.entry.js} +1 -1
  529. package/dist/ionic/p-5b52897c.js +4 -0
  530. package/dist/ionic/{p-e64277c4.entry.js → p-5e39b9d8.entry.js} +1 -1
  531. package/dist/ionic/{p-a5b7a286.entry.js → p-610f0e12.entry.js} +1 -1
  532. package/dist/ionic/p-668607c2.system.js +4 -0
  533. package/dist/ionic/{p-c3a2e5cc.entry.js → p-66e50777.entry.js} +1 -1
  534. package/dist/ionic/{p-4825e380.entry.js → p-6a448415.entry.js} +1 -1
  535. package/dist/ionic/{p-95e14c7b.system.js → p-6a62da36.system.js} +1 -1
  536. package/dist/ionic/p-6a888b39.system.entry.js +4 -0
  537. package/dist/ionic/{p-3410a9cb.system.js → p-6d9f8fac.system.js} +1 -1
  538. package/dist/ionic/{p-4c2cac66.entry.js → p-7002bc75.entry.js} +1 -1
  539. package/dist/ionic/{p-454b36f7.system.entry.js → p-70c278c4.system.entry.js} +1 -1
  540. package/dist/ionic/{p-7b44b443.entry.js → p-7680d0ec.entry.js} +1 -1
  541. package/dist/ionic/{p-1fa738c4.js → p-78b3da77.js} +1 -1
  542. package/dist/ionic/{p-cd366840.system.entry.js → p-7adde43c.system.entry.js} +1 -1
  543. package/dist/ionic/{p-03f63663.system.js → p-7c7e495d.system.js} +1 -1
  544. package/dist/ionic/p-7d29dff0.system.entry.js +4 -0
  545. package/dist/ionic/p-7d4d9c40.system.entry.js +4 -0
  546. package/dist/ionic/p-7e7d534c.js +4 -0
  547. package/dist/ionic/{p-a8cc0027.system.js → p-853bd866.system.js} +1 -1
  548. package/dist/ionic/{p-91a72ad6.system.entry.js → p-85f43165.system.entry.js} +2 -2
  549. package/dist/ionic/p-86c17a09.entry.js +4 -0
  550. package/dist/ionic/p-8a881b39.entry.js +4 -0
  551. package/dist/ionic/p-8dd3d9c3.system.entry.js +4 -0
  552. package/dist/ionic/{p-77982637.entry.js → p-8ed900e4.entry.js} +1 -1
  553. package/dist/ionic/{p-da83d833.system.entry.js → p-91567c90.system.entry.js} +1 -1
  554. package/dist/ionic/{p-aaca8dd4.system.entry.js → p-92b05b70.system.entry.js} +1 -1
  555. package/dist/ionic/{p-6fd26009.js → p-976c7c54.js} +1 -1
  556. package/dist/ionic/p-978f4710.js +4 -0
  557. package/dist/ionic/{p-65d3f0e9.js → p-98c86cdd.js} +1 -1
  558. package/dist/ionic/p-9b5d033a.system.entry.js +4 -0
  559. package/dist/ionic/{p-30892e0c.system.js → p-9e3177a5.system.js} +1 -1
  560. package/dist/ionic/{p-3bac30bf.system.entry.js → p-9e6a5e3d.system.entry.js} +1 -1
  561. package/dist/ionic/{p-ddc4e717.entry.js → p-a0e8f913.entry.js} +1 -1
  562. package/dist/ionic/p-a3dae2ce.js +4 -0
  563. package/dist/ionic/{p-1a68de09.entry.js → p-a4c287f9.entry.js} +1 -1
  564. package/dist/ionic/{p-8d4d902b.js → p-a600a3e3.js} +1 -1
  565. package/dist/ionic/{p-2b3e0d99.system.entry.js → p-a6b8342e.system.entry.js} +1 -1
  566. package/dist/ionic/p-a88b41d1.system.entry.js +4 -0
  567. package/dist/ionic/{p-f71082f7.entry.js → p-a94092b9.entry.js} +1 -1
  568. package/dist/ionic/p-ac6db4c2.js +4 -0
  569. package/dist/ionic/{p-c5b77291.system.entry.js → p-af2e3481.system.entry.js} +1 -1
  570. package/dist/ionic/{p-eec92f77.system.js → p-af9256a0.system.js} +1 -1
  571. package/dist/ionic/{p-780ff3b5.system.entry.js → p-b0aaa59a.system.entry.js} +1 -1
  572. package/dist/ionic/{p-f16bfd53.entry.js → p-b141e253.entry.js} +1 -1
  573. package/dist/ionic/{p-ded27993.entry.js → p-b1d9b078.entry.js} +1 -1
  574. package/dist/ionic/{p-feb66f6f.entry.js → p-ba0290d1.entry.js} +1 -1
  575. package/dist/ionic/{p-add93c7a.entry.js → p-bb5eba12.entry.js} +1 -1
  576. package/dist/ionic/{p-82f5375e.system.entry.js → p-bb608006.system.entry.js} +1 -1
  577. package/dist/ionic/p-c385e49d.entry.js +4 -0
  578. package/dist/ionic/p-c3f5d0e7.js +4 -0
  579. package/dist/ionic/{p-81869a97.system.entry.js → p-c41e0b5f.system.entry.js} +1 -1
  580. package/dist/ionic/p-c629d22b.system.js +5 -0
  581. package/dist/ionic/{p-15708968.js → p-c6f9f3eb.js} +1 -1
  582. package/dist/ionic/{p-d504bc71.entry.js → p-c8383c20.entry.js} +1 -1
  583. package/dist/ionic/{p-1e0a18a1.system.entry.js → p-cbf0a046.system.entry.js} +1 -1
  584. package/dist/ionic/{p-ebe0be94.system.entry.js → p-d0496c22.system.entry.js} +1 -1
  585. package/dist/ionic/{p-1ed99eba.system.entry.js → p-d286cfbe.system.entry.js} +1 -1
  586. package/dist/ionic/{p-b4bb9cd0.system.entry.js → p-d372938e.system.entry.js} +1 -1
  587. package/dist/ionic/{p-afcd4f49.entry.js → p-d4d17d47.entry.js} +1 -1
  588. package/dist/ionic/{p-6ef5f4da.entry.js → p-d5ab02f5.entry.js} +1 -1
  589. package/dist/ionic/p-d60342e3.js +4 -0
  590. package/dist/ionic/{p-816476b0.system.js → p-d704f798.system.js} +1 -1
  591. package/dist/ionic/{p-942c19cb.entry.js → p-d8090ce4.entry.js} +1 -1
  592. package/dist/ionic/p-d80b7e31.system.js +4 -0
  593. package/dist/ionic/{p-62f15daf.system.entry.js → p-d8ffe61c.system.entry.js} +2 -2
  594. package/dist/ionic/{p-25850474.entry.js → p-da5bbd4f.entry.js} +1 -1
  595. package/dist/ionic/{p-7cc01684.js → p-dad515dc.js} +1 -1
  596. package/dist/ionic/{p-5c3991e3.system.entry.js → p-db7fcadb.system.entry.js} +1 -1
  597. package/dist/ionic/{p-5a055df4.entry.js → p-dd9168f3.entry.js} +1 -1
  598. package/dist/ionic/{p-1ea88de9.system.js → p-e0d52ee3.system.js} +2 -2
  599. package/dist/ionic/p-e3611c25.entry.js +4 -0
  600. package/dist/ionic/p-e4ca94bd.js +4 -0
  601. package/dist/ionic/p-e7b0b64d.system.js +4 -0
  602. package/dist/ionic/{p-7a3fa32c.entry.js → p-ebc5b98f.entry.js} +1 -1
  603. package/dist/ionic/p-ec34194e.system.entry.js +4 -0
  604. package/dist/ionic/p-ec613387.entry.js +4 -0
  605. package/dist/ionic/{p-85cb4733.entry.js → p-ed3463be.entry.js} +1 -1
  606. package/dist/ionic/p-f1d1524c.entry.js +4 -0
  607. package/dist/ionic/p-f687573e.system.js +4 -0
  608. package/dist/ionic/p-f7a1318d.system.entry.js +4 -0
  609. package/dist/ionic/{p-8e83b7f1.system.entry.js → p-f7af3144.system.entry.js} +2 -2
  610. package/dist/ionic/p-f8502e85.js +5 -0
  611. package/dist/ionic/{p-a71dc777.system.js → p-f85a4df5.system.js} +1 -1
  612. package/dist/ionic/{p-f3d6085c.entry.js → p-fa8ee4c3.entry.js} +1 -1
  613. package/dist/ionic/{p-1ce172db.entry.js → p-fb870c48.entry.js} +1 -1
  614. package/dist/ionic/{p-c38c5dfc.system.js → p-fe1fd531.system.js} +1 -1
  615. package/dist/ionic/p-fe35b5c0.entry.js +4 -0
  616. package/dist/types/components/datetime/datetime-interface.d.ts +10 -0
  617. package/dist/types/components/datetime/datetime.d.ts +10 -1
  618. package/dist/types/components/datetime/utils/format.d.ts +7 -13
  619. package/dist/types/components/datetime/utils/validate.d.ts +8 -0
  620. package/dist/types/components/item/item.d.ts +0 -32
  621. package/dist/types/components/menu/menu-interface.d.ts +1 -0
  622. package/dist/types/components/menu/menu.d.ts +2 -2
  623. package/dist/types/components/range/range.d.ts +29 -0
  624. package/dist/types/components/searchbar/searchbar.d.ts +38 -0
  625. package/dist/types/components/toggle/toggle.d.ts +1 -1
  626. package/dist/types/components.d.ts +40 -48
  627. package/dist/types/utils/forms/index.d.ts +0 -1
  628. package/dist/types/utils/hardware-back-button.d.ts +1 -1
  629. package/dist/types/utils/helpers.d.ts +0 -19
  630. package/dist/types/utils/test/playwright/generator.d.ts +3 -3
  631. package/hydrate/index.js +524 -428
  632. package/package.json +7 -2
  633. package/components/note.js +0 -48
  634. package/css/themes/dark.always.css.map +0 -1
  635. package/css/themes/dark.class.css.map +0 -1
  636. package/css/themes/dark.system.css.map +0 -1
  637. package/css/themes/high-contrast-dark.always.css.map +0 -1
  638. package/css/themes/high-contrast-dark.class.css.map +0 -1
  639. package/css/themes/high-contrast-dark.system.css.map +0 -1
  640. package/css/themes/high-contrast.always.css.map +0 -1
  641. package/css/themes/high-contrast.class.css.map +0 -1
  642. package/css/themes/high-contrast.system.css.map +0 -1
  643. package/dist/collection/components/item/test/legacy/disabled/item.e2e.js +0 -14
  644. package/dist/collection/utils/forms/form-controller.js +0 -61
  645. package/dist/collection/utils/test/aria.spec.js +0 -80
  646. package/dist/esm-es5/app-globals-cfb6787b.js +0 -4
  647. package/dist/esm-es5/data-691286f1.js +0 -4
  648. package/dist/esm-es5/hardware-back-button-3a14f99e.js +0 -4
  649. package/dist/esm-es5/helpers-ae74b3c9.js +0 -4
  650. package/dist/esm-es5/index-9b6d6df3.js +0 -5
  651. package/dist/esm-es5/input.utils-482fc893.js +0 -4
  652. package/dist/esm-es5/md.transition-b4170ef7.js +0 -4
  653. package/dist/esm-es5/overlays-4ba3b255.js +0 -4
  654. package/dist/ionic/p-060fdc03.entry.js +0 -4
  655. package/dist/ionic/p-069388dd.system.js +0 -4
  656. package/dist/ionic/p-06fccad7.entry.js +0 -4
  657. package/dist/ionic/p-0ca35c1d.system.entry.js +0 -4
  658. package/dist/ionic/p-134d4936.system.js +0 -4
  659. package/dist/ionic/p-19e79fe8.entry.js +0 -4
  660. package/dist/ionic/p-19f6ac6c.system.js +0 -4
  661. package/dist/ionic/p-22d2a891.js +0 -4
  662. package/dist/ionic/p-239262e4.system.entry.js +0 -4
  663. package/dist/ionic/p-300b2cf1.entry.js +0 -4
  664. package/dist/ionic/p-32bd7ed7.entry.js +0 -4
  665. package/dist/ionic/p-41970e75.entry.js +0 -4
  666. package/dist/ionic/p-43322b14.js +0 -4
  667. package/dist/ionic/p-4523be60.entry.js +0 -4
  668. package/dist/ionic/p-4a8f173c.system.js +0 -4
  669. package/dist/ionic/p-4ad02639.entry.js +0 -4
  670. package/dist/ionic/p-5289aade.js +0 -4
  671. package/dist/ionic/p-5afb6e48.entry.js +0 -4
  672. package/dist/ionic/p-60efe117.js +0 -5
  673. package/dist/ionic/p-6657681b.system.entry.js +0 -4
  674. package/dist/ionic/p-66e6860f.system.js +0 -4
  675. package/dist/ionic/p-6e1fa025.js +0 -4
  676. package/dist/ionic/p-6e5eeb35.entry.js +0 -4
  677. package/dist/ionic/p-6f6d56f1.entry.js +0 -4
  678. package/dist/ionic/p-70218e28.system.entry.js +0 -4
  679. package/dist/ionic/p-72bc2484.system.entry.js +0 -4
  680. package/dist/ionic/p-760dbd5e.js +0 -4
  681. package/dist/ionic/p-82d459c1.js +0 -4
  682. package/dist/ionic/p-842777af.js +0 -4
  683. package/dist/ionic/p-8ab308e9.js +0 -4
  684. package/dist/ionic/p-8ba5912c.entry.js +0 -4
  685. package/dist/ionic/p-8d602214.system.js +0 -5
  686. package/dist/ionic/p-8e3ee444.system.entry.js +0 -4
  687. package/dist/ionic/p-9382ebab.entry.js +0 -4
  688. package/dist/ionic/p-96391c0e.entry.js +0 -4
  689. package/dist/ionic/p-9d6f351e.js +0 -4
  690. package/dist/ionic/p-9e3b3f15.system.js +0 -4
  691. package/dist/ionic/p-a375c9f6.system.entry.js +0 -4
  692. package/dist/ionic/p-a58ec401.js +0 -4
  693. package/dist/ionic/p-b1a9e85a.system.entry.js +0 -4
  694. package/dist/ionic/p-baa409f1.system.entry.js +0 -4
  695. package/dist/ionic/p-bcb58446.entry.js +0 -4
  696. package/dist/ionic/p-c2336a9e.system.entry.js +0 -4
  697. package/dist/ionic/p-cbc3840e.entry.js +0 -4
  698. package/dist/ionic/p-cf852615.system.entry.js +0 -4
  699. package/dist/ionic/p-e15eda82.system.js +0 -4
  700. package/dist/ionic/p-e470466e.entry.js +0 -4
  701. package/dist/ionic/p-ef99a759.entry.js +0 -4
  702. package/dist/ionic/p-fc5ddbf6.entry.js +0 -4
  703. package/dist/types/utils/forms/form-controller.d.ts +0 -15
  704. package/css/{themes → palettes}/dark.always.css +0 -0
  705. package/css/{themes → palettes}/dark.css +0 -0
  706. package/css/{themes → palettes}/dark.css.map +0 -0
  707. package/css/{themes → palettes}/dark.system.css +0 -0
  708. package/css/{themes → palettes}/high-contrast-dark.always.css +1 -1
  709. package/css/{themes → palettes}/high-contrast-dark.css +0 -0
  710. package/css/{themes → palettes}/high-contrast-dark.css.map +0 -0
  711. package/css/{themes → palettes}/high-contrast-dark.system.css +1 -1
  712. package/css/{themes → palettes}/high-contrast.always.css +25 -25
  713. package/css/{themes → palettes}/high-contrast.css +0 -0
  714. package/css/{themes → palettes}/high-contrast.css.map +0 -0
  715. package/css/{themes → palettes}/high-contrast.system.css +25 -25
@@ -335,7 +335,7 @@ export class Content {
335
335
  const forceOverscroll = this.shouldForceOverscroll();
336
336
  const transitionShadow = mode === 'ios';
337
337
  this.resize();
338
- return (h(Host, { key: '5b6d5c2b8b91ac84dcdf6cf6178a8f7fb970ca00', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
338
+ return (h(Host, { key: '133795359748c29c2f26f2c4b05315c1ee2ebf14', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
339
339
  [mode]: true,
340
340
  'content-sizing': hostContext('ion-popover', this.el),
341
341
  overscroll: forceOverscroll,
@@ -343,12 +343,12 @@ export class Content {
343
343
  }), style: {
344
344
  '--offset-top': `${this.cTop}px`,
345
345
  '--offset-bottom': `${this.cBottom}px`,
346
- } }, h("div", { key: '4fa58c187e2c2f7f3bc365f485dd80dc0c059d8b', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), h("div", { key: 'f595d0d59e0957acdebd0b16ae79e88da8ed973d', class: {
346
+ } }, h("div", { key: 'cec324eeb397b9947b48706a726a71c0a338c47b', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), h("div", { key: 'da55ddf94fe7fba83e3625f08ce0561136911828', class: {
347
347
  'inner-scroll': true,
348
348
  'scroll-x': scrollX,
349
349
  'scroll-y': scrollY,
350
350
  overscroll: (scrollX || scrollY) && forceOverscroll,
351
- }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '1aceb64f45d13574ea1e20c0885191ced5a0b961' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, h("slot", { key: 'd6c4f4d9001da024ec652358f7ae880db75d3a4e', name: "fixed" })));
351
+ }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '5277456fa0cca2680fbb3ae48f90100ba16bf90d' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, h("slot", { key: 'e3dfb4aa64d29e5cc24e8b0cd75a7eb1e0d6954c', name: "fixed" })));
352
352
  }
353
353
  static get is() { return "ion-content"; }
354
354
  static get encapsulation() { return "shadow"; }
@@ -11,11 +11,12 @@ import { caretDownSharp, caretUpSharp, chevronBack, chevronDown, chevronForward
11
11
  import { getIonMode } from "../../global/ionic-global";
12
12
  import { isSameDay, warnIfValueOutOfBounds, isBefore, isAfter } from "./utils/comparison";
13
13
  import { generateMonths, getDaysOfMonth, getDaysOfWeek, getToday, getMonthColumnData, getDayColumnData, getYearColumnData, getTimeColumnsData, getCombinedDateColumnData, } from "./utils/data";
14
- import { formatValue, getLocalizedTime, getMonthAndDay, getMonthAndYear } from "./utils/format";
14
+ import { formatValue, getLocalizedDateTime, getLocalizedTime, getMonthAndYear } from "./utils/format";
15
15
  import { isLocaleDayPeriodRTL, isMonthFirstLocale, getNumDaysInMonth, getHourCycle } from "./utils/helpers";
16
16
  import { calculateHourFromAMPM, convertDataToISO, getClosestValidDate, getEndOfWeek, getNextDay, getNextMonth, getNextWeek, getNextYear, getPreviousDay, getPreviousMonth, getPreviousWeek, getPreviousYear, getStartOfWeek, validateParts, } from "./utils/manipulation";
17
17
  import { clampDate, convertToArrayOfNumbers, getPartsFromCalendarDay, parseAmPm, parseDate, parseMaxParts, parseMinParts, } from "./utils/parse";
18
18
  import { getCalendarDayState, getHighlightStyles, isDayDisabled, isMonthDisabled, isNextMonthDisabled, isPrevMonthDisabled, } from "./utils/state";
19
+ import { checkForPresentationFormatMismatch, warnIfTimeZoneProvided } from "./utils/validate";
19
20
  /**
20
21
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
21
22
  *
@@ -650,6 +651,7 @@ export class Datetime {
650
651
  this.color = 'primary';
651
652
  this.name = this.inputId;
652
653
  this.disabled = false;
654
+ this.formatOptions = undefined;
653
655
  this.readonly = false;
654
656
  this.isDateEnabled = undefined;
655
657
  this.min = undefined;
@@ -677,6 +679,11 @@ export class Datetime {
677
679
  this.size = 'fixed';
678
680
  this.preferWheel = false;
679
681
  }
682
+ formatOptionsChanged() {
683
+ const { el, formatOptions, presentation } = this;
684
+ checkForPresentationFormatMismatch(el, presentation, formatOptions);
685
+ warnIfTimeZoneProvided(el, formatOptions);
686
+ }
680
687
  disabledChanged() {
681
688
  this.emitStyle();
682
689
  }
@@ -686,6 +693,10 @@ export class Datetime {
686
693
  maxChanged() {
687
694
  this.processMaxParts();
688
695
  }
696
+ presentationChanged() {
697
+ const { el, formatOptions, presentation } = this;
698
+ checkForPresentationFormatMismatch(el, presentation, formatOptions);
699
+ }
689
700
  get isGridStyle() {
690
701
  const { presentation, preferWheel } = this;
691
702
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
@@ -788,6 +799,7 @@ export class Datetime {
788
799
  this.initializeKeyboardListeners();
789
800
  }
790
801
  componentDidLoad() {
802
+ const { el, intersectionTrackerRef } = this;
791
803
  /**
792
804
  * If a scrollable element is hidden using `display: none`,
793
805
  * it will not have a scroll height meaning we cannot scroll elements
@@ -813,14 +825,14 @@ export class Datetime {
813
825
  this.el.classList.add('datetime-ready');
814
826
  });
815
827
  };
816
- const visibleIO = new IntersectionObserver(visibleCallback, { threshold: 0.01 });
828
+ const visibleIO = new IntersectionObserver(visibleCallback, { threshold: 0.01, root: el });
817
829
  /**
818
830
  * Use raf to avoid a race condition between the component loading and
819
831
  * its display animation starting (such as when shown in a modal). This
820
832
  * could cause the datetime to start at a visibility of 0, erroneously
821
833
  * triggering the `hiddenIO` observer below.
822
834
  */
823
- raf(() => visibleIO === null || visibleIO === void 0 ? void 0 : visibleIO.observe(this.el));
835
+ raf(() => visibleIO === null || visibleIO === void 0 ? void 0 : visibleIO.observe(intersectionTrackerRef));
824
836
  /**
825
837
  * We need to clean up listeners when the datetime is hidden
826
838
  * in a popover/modal so that we can properly scroll containers
@@ -846,8 +858,8 @@ export class Datetime {
846
858
  this.el.classList.remove('datetime-ready');
847
859
  });
848
860
  };
849
- const hiddenIO = new IntersectionObserver(hiddenCallback, { threshold: 0 });
850
- raf(() => hiddenIO === null || hiddenIO === void 0 ? void 0 : hiddenIO.observe(this.el));
861
+ const hiddenIO = new IntersectionObserver(hiddenCallback, { threshold: 0, root: el });
862
+ raf(() => hiddenIO === null || hiddenIO === void 0 ? void 0 : hiddenIO.observe(intersectionTrackerRef));
851
863
  /**
852
864
  * Datetime uses Ionic components that emit
853
865
  * ionFocus and ionBlur. These events are
@@ -921,7 +933,7 @@ export class Datetime {
921
933
  });
922
934
  }
923
935
  componentWillLoad() {
924
- const { el, highlightedDates, multiple, presentation, preferWheel } = this;
936
+ const { el, formatOptions, highlightedDates, multiple, presentation, preferWheel } = this;
925
937
  if (multiple) {
926
938
  if (presentation !== 'date') {
927
939
  printIonWarning('Multiple date selection is only supported for presentation="date".', el);
@@ -938,6 +950,10 @@ export class Datetime {
938
950
  printIonWarning('The highlightedDates property is not supported with preferWheel="true".', el);
939
951
  }
940
952
  }
953
+ if (formatOptions) {
954
+ checkForPresentationFormatMismatch(el, presentation, formatOptions);
955
+ warnIfTimeZoneProvided(el, formatOptions);
956
+ }
941
957
  const hourValues = (this.parsedHourValues = convertToArrayOfNumbers(this.hourValues));
942
958
  const minuteValues = (this.parsedMinuteValues = convertToArrayOfNumbers(this.minuteValues));
943
959
  const monthValues = (this.parsedMonthValues = convertToArrayOfNumbers(this.monthValues));
@@ -1391,7 +1407,7 @@ export class Datetime {
1391
1407
  return h("slot", { name: "time-label" }, "Time");
1392
1408
  }
1393
1409
  renderTimeOverlay() {
1394
- const { disabled, hourCycle, isTimePopoverOpen, locale } = this;
1410
+ const { disabled, hourCycle, isTimePopoverOpen, locale, formatOptions } = this;
1395
1411
  const computedHourCycle = getHourCycle(locale, hourCycle);
1396
1412
  const activePart = this.getActivePartsWithFallback();
1397
1413
  return [
@@ -1411,7 +1427,7 @@ export class Datetime {
1411
1427
  await popoverRef.onWillDismiss();
1412
1428
  this.isTimePopoverOpen = false;
1413
1429
  }
1414
- } }, getLocalizedTime(locale, activePart, computedHourCycle)),
1430
+ } }, getLocalizedTime(locale, activePart, computedHourCycle, formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.time)),
1415
1431
  h("ion-popover", { alignment: "center", translucent: true, overlayIndex: 1, arrow: false, onWillPresent: (ev) => {
1416
1432
  /**
1417
1433
  * Intersection Observers do not consistently fire between Blink and Webkit
@@ -1434,7 +1450,8 @@ export class Datetime {
1434
1450
  ];
1435
1451
  }
1436
1452
  getHeaderSelectedDateText() {
1437
- const { activeParts, multiple, titleSelectedDatesFormatter } = this;
1453
+ var _a;
1454
+ const { activeParts, formatOptions, multiple, titleSelectedDatesFormatter } = this;
1438
1455
  const isArray = Array.isArray(activeParts);
1439
1456
  let headerText;
1440
1457
  if (multiple && isArray && activeParts.length !== 1) {
@@ -1450,7 +1467,7 @@ export class Datetime {
1450
1467
  }
1451
1468
  else {
1452
1469
  // for exactly 1 day selected (multiple set or not), show a formatted version of that
1453
- headerText = getMonthAndDay(this.locale, this.getActivePartsWithFallback());
1470
+ headerText = getLocalizedDateTime(this.locale, this.getActivePartsWithFallback(), (_a = formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.date) !== null && _a !== void 0 ? _a : { weekday: 'short', month: 'short', day: 'numeric' });
1454
1471
  }
1455
1472
  return headerText;
1456
1473
  }
@@ -1539,7 +1556,7 @@ export class Datetime {
1539
1556
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1540
1557
  const hasWheelVariant = hasDatePresentation && preferWheel;
1541
1558
  renderHiddenInput(true, el, name, formatValue(value), disabled);
1542
- return (h(Host, { key: '2e5ff577327018558a145cff23f03661c2d19c41', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1559
+ return (h(Host, { key: '79357d753d003539aaadbc30aa0ca7e2ab97415d', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1543
1560
  [mode]: true,
1544
1561
  ['datetime-readonly']: readonly,
1545
1562
  ['datetime-disabled']: disabled,
@@ -1549,7 +1566,7 @@ export class Datetime {
1549
1566
  [`datetime-size-${size}`]: true,
1550
1567
  [`datetime-prefer-wheel`]: hasWheelVariant,
1551
1568
  [`datetime-grid`]: isGridStyle,
1552
- })) }, this.renderDatetime(mode)));
1569
+ })) }, h("div", { key: '18b6631ffcf028c5062659e75be5d6712ac30402', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1553
1570
  }
1554
1571
  static get is() { return "ion-datetime"; }
1555
1572
  static get encapsulation() { return "shadow"; }
@@ -1627,6 +1644,27 @@ export class Datetime {
1627
1644
  "reflect": false,
1628
1645
  "defaultValue": "false"
1629
1646
  },
1647
+ "formatOptions": {
1648
+ "type": "unknown",
1649
+ "mutable": false,
1650
+ "complexType": {
1651
+ "original": "FormatOptions",
1652
+ "resolved": "undefined | { date: DateTimeFormatOptions; time?: DateTimeFormatOptions | undefined; } | { date?: DateTimeFormatOptions | undefined; time: DateTimeFormatOptions; }",
1653
+ "references": {
1654
+ "FormatOptions": {
1655
+ "location": "import",
1656
+ "path": "./datetime-interface",
1657
+ "id": "src/components/datetime/datetime-interface.ts::FormatOptions"
1658
+ }
1659
+ }
1660
+ },
1661
+ "required": false,
1662
+ "optional": true,
1663
+ "docs": {
1664
+ "tags": [],
1665
+ "text": "Formatting options for dates and times.\nShould include a 'date' and/or 'time' object, each of which is of type [Intl.DateTimeFormatOptions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options)."
1666
+ }
1667
+ },
1630
1668
  "readonly": {
1631
1669
  "type": "boolean",
1632
1670
  "mutable": false,
@@ -2322,6 +2360,9 @@ export class Datetime {
2322
2360
  static get elementRef() { return "el"; }
2323
2361
  static get watchers() {
2324
2362
  return [{
2363
+ "propName": "formatOptions",
2364
+ "methodName": "formatOptionsChanged"
2365
+ }, {
2325
2366
  "propName": "disabled",
2326
2367
  "methodName": "disabledChanged"
2327
2368
  }, {
@@ -2330,6 +2371,9 @@ export class Datetime {
2330
2371
  }, {
2331
2372
  "propName": "max",
2332
2373
  "methodName": "maxChanged"
2374
+ }, {
2375
+ "propName": "presentation",
2376
+ "methodName": "presentationChanged"
2333
2377
  }, {
2334
2378
  "propName": "yearValues",
2335
2379
  "methodName": "yearValuesChanged"
@@ -414,3 +414,80 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
414
414
  });
415
415
  });
416
416
  });
417
+ /**
418
+ * This behavior does not differ across
419
+ * directions.
420
+ */
421
+ configs({ directions: ['ltr'] }).forEach(({ title, config }) => {
422
+ test.describe(title('datetime: formatOptions'), () => {
423
+ test('should format header and time button', async ({ page }) => {
424
+ await page.setContent(`
425
+ <ion-datetime value="2022-02-01T16:30:00">
426
+ <span slot="title">Select Date</span>
427
+ </ion-datetime>
428
+ <script>
429
+ const datetime = document.querySelector('ion-datetime');
430
+ datetime.formatOptions = {
431
+ time: { hour: '2-digit', minute: '2-digit' },
432
+ date: { day: '2-digit', month: 'long', era: 'short' },
433
+ }
434
+ </script>
435
+ `, config);
436
+ await page.locator('.datetime-ready').waitFor();
437
+ const headerDate = page.locator('ion-datetime .datetime-selected-date');
438
+ await expect(headerDate).toHaveText('February 01 AD');
439
+ const timeBody = page.locator('ion-datetime .time-body');
440
+ await expect(timeBody).toHaveText('04:30 PM');
441
+ });
442
+ });
443
+ });
444
+ /**
445
+ * This behavior does not differ across
446
+ * modes/directions.
447
+ */
448
+ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => {
449
+ test.describe(title('datetime: formatOptions misconfiguration errors'), () => {
450
+ test('should log a warning if time zone is provided', async ({ page }) => {
451
+ const logs = [];
452
+ page.on('console', (msg) => {
453
+ if (msg.type() === 'warning') {
454
+ logs.push(msg.text());
455
+ }
456
+ });
457
+ await page.setContent(`
458
+ <ion-datetime value="2022-02-01T16:30:00" presentation="date">
459
+ <span slot="title">Select Date</span>
460
+ </ion-datetime>
461
+ <script>
462
+ const datetime = document.querySelector('ion-datetime');
463
+ datetime.formatOptions = {
464
+ date: { timeZone: 'UTC' },
465
+ }
466
+ </script>
467
+ `, config);
468
+ await page.locator('.datetime-ready').waitFor();
469
+ expect(logs.length).toBe(1);
470
+ expect(logs[0]).toContain('[Ionic Warning]: Datetime: "timeZone" and "timeZoneName" are not supported in "formatOptions".');
471
+ });
472
+ test('should log a warning if the required formatOptions are not provided for a presentation', async ({ page }) => {
473
+ const logs = [];
474
+ page.on('console', (msg) => {
475
+ if (msg.type() === 'warning') {
476
+ logs.push(msg.text());
477
+ }
478
+ });
479
+ await page.setContent(`
480
+ <ion-datetime value="2022-02-01T16:30:00">
481
+ <span slot="title">Select Date</span>
482
+ </ion-datetime>
483
+ <script>
484
+ const datetime = document.querySelector('ion-datetime');
485
+ datetime.formatOptions = {}
486
+ </script>
487
+ `, config);
488
+ await page.locator('.datetime-ready').waitFor();
489
+ expect(logs.length).toBe(1);
490
+ expect(logs[0]).toContain("[Ionic Warning]: Datetime: The 'date-time' presentation requires either a date or time object (or both) in formatOptions.");
491
+ });
492
+ });
493
+ });
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { generateDayAriaLabel, getMonthAndDay, getFormattedHour, addTimePadding, getMonthAndYear, getLocalizedDayPeriod, getLocalizedTime, } from "../utils/format";
4
+ import { generateDayAriaLabel, getFormattedHour, addTimePadding, getMonthAndYear, getLocalizedDayPeriod, getLocalizedTime, stripTimeZone, } from "../utils/format";
5
5
  describe('generateDayAriaLabel()', () => {
6
6
  it('should return Wednesday, May 12', () => {
7
7
  const reference = { month: 5, day: 12, year: 2021 };
@@ -24,20 +24,6 @@ describe('generateDayAriaLabel()', () => {
24
24
  expect(generateDayAriaLabel('en-US', false, reference)).toEqual('Saturday, April 1');
25
25
  });
26
26
  });
27
- describe('getMonthAndDay()', () => {
28
- it('should return Tue, May 11', () => {
29
- expect(getMonthAndDay('en-US', { month: 5, day: 11, year: 2021 })).toEqual('Tue, May 11');
30
- });
31
- it('should return mar, 11 may', () => {
32
- expect(getMonthAndDay('es-ES', { month: 5, day: 11, year: 2021 })).toEqual('mar, 11 may');
33
- });
34
- it('should return Sat, Apr 1', () => {
35
- expect(getMonthAndDay('en-US', { month: 4, day: 1, year: 2006 })).toEqual('Sat, Apr 1');
36
- });
37
- it('should return sáb, 1 abr', () => {
38
- expect(getMonthAndDay('es-ES', { month: 4, day: 1, year: 2006 })).toEqual('sáb, 1 abr');
39
- });
40
- });
41
27
  describe('getFormattedHour()', () => {
42
28
  it('should only add padding if using 24 hour time', () => {
43
29
  expect(getFormattedHour(1, 'h11')).toEqual('1');
@@ -121,4 +107,68 @@ describe('getLocalizedTime', () => {
121
107
  expect(getLocalizedTime('en-US', datetimeParts, 'h12')).toEqual('10:40 PM');
122
108
  expect(getLocalizedTime('en-US', datetimeParts, 'h23')).toEqual('22:40');
123
109
  });
110
+ it('should use formatOptions', () => {
111
+ const datetimeParts = {
112
+ day: 1,
113
+ month: 1,
114
+ year: 2022,
115
+ hour: 9,
116
+ minute: 40,
117
+ };
118
+ const formatOptions = {
119
+ hour: '2-digit',
120
+ minute: '2-digit',
121
+ dayPeriod: 'short',
122
+ day: '2-digit',
123
+ };
124
+ // Even though this method is intended to be used for time, the date may be displayed as well when passing formatOptions
125
+ expect(getLocalizedTime('en-US', datetimeParts, 'h12', formatOptions)).toEqual('01, 09:40 in the morning');
126
+ });
127
+ it('should override provided time zone with UTC', () => {
128
+ const datetimeParts = {
129
+ day: 1,
130
+ month: 1,
131
+ year: 2022,
132
+ hour: 9,
133
+ minute: 40,
134
+ };
135
+ const formatOptions = {
136
+ timeZone: 'Australia/Sydney',
137
+ timeZoneName: 'long',
138
+ hour: 'numeric',
139
+ minute: 'numeric',
140
+ };
141
+ expect(getLocalizedTime('en-US', datetimeParts, 'h12', formatOptions)).toEqual('9:40 AM');
142
+ });
143
+ it('should not include time zone name', () => {
144
+ const datetimeParts = {
145
+ day: 1,
146
+ month: 1,
147
+ year: 2022,
148
+ hour: 9,
149
+ minute: 40,
150
+ };
151
+ const formatOptions = {
152
+ timeZone: 'America/Los_Angeles',
153
+ timeZoneName: 'long',
154
+ hour: 'numeric',
155
+ minute: 'numeric',
156
+ };
157
+ expect(getLocalizedTime('en-US', datetimeParts, 'h12', formatOptions)).toEqual('9:40 AM');
158
+ });
159
+ });
160
+ describe('stripTimeZone', () => {
161
+ it('should remove the time zone name from the options and set the time zone to UTC', () => {
162
+ const formatOptions = {
163
+ timeZone: 'America/Los_Angeles',
164
+ timeZoneName: 'long',
165
+ hour: 'numeric',
166
+ minute: 'numeric',
167
+ };
168
+ expect(stripTimeZone(formatOptions)).toEqual({
169
+ timeZone: 'UTC',
170
+ hour: 'numeric',
171
+ minute: 'numeric',
172
+ });
173
+ });
124
174
  });
@@ -9,7 +9,26 @@ const getFormattedDayPeriod = (dayPeriod) => {
9
9
  }
10
10
  return dayPeriod.toUpperCase();
11
11
  };
12
- export const getLocalizedTime = (locale, refParts, hourCycle) => {
12
+ /**
13
+ * Including time zone options may lead to the rendered text showing a
14
+ * different time from what was selected in the Datetime, which could cause
15
+ * confusion.
16
+ */
17
+ export const stripTimeZone = (formatOptions) => {
18
+ return Object.assign(Object.assign({}, formatOptions), {
19
+ /**
20
+ * Setting the time zone to UTC ensures that the value shown is always the
21
+ * same as what was selected and safeguards against older Safari bugs with
22
+ * Intl.DateTimeFormat.
23
+ */
24
+ timeZone: 'UTC',
25
+ /**
26
+ * We do not want to display the time zone name
27
+ */
28
+ timeZoneName: undefined
29
+ });
30
+ };
31
+ export const getLocalizedTime = (locale, refParts, hourCycle, formatOptions = { hour: 'numeric', minute: 'numeric' }) => {
13
32
  const timeParts = {
14
33
  hour: refParts.hour,
15
34
  minute: refParts.minute,
@@ -17,28 +36,13 @@ export const getLocalizedTime = (locale, refParts, hourCycle) => {
17
36
  if (timeParts.hour === undefined || timeParts.minute === undefined) {
18
37
  return 'Invalid Time';
19
38
  }
20
- return new Intl.DateTimeFormat(locale, {
21
- hour: 'numeric',
22
- minute: 'numeric',
23
- /**
24
- * Setting the timeZone to UTC prevents
25
- * new Intl.DatetimeFormat from subtracting
26
- * the user's current timezone offset
27
- * when formatting the time.
28
- */
29
- timeZone: 'UTC',
39
+ return new Intl.DateTimeFormat(locale, Object.assign(Object.assign({}, stripTimeZone(formatOptions)), {
30
40
  /**
31
41
  * We use hourCycle here instead of hour12 due to:
32
42
  * https://bugs.chromium.org/p/chromium/issues/detail?id=1347316&q=hour12&can=2
33
43
  */
34
- hourCycle,
35
- /**
36
- * Setting Z at the end indicates that this
37
- * date string is in the UTC time zone. This
38
- * prevents new Date from adding the time zone
39
- * offset when getting the ISO string.
40
- */
41
- }).format(new Date(convertDataToISO(Object.assign({
44
+ hourCycle
45
+ })).format(new Date(convertDataToISO(Object.assign({
42
46
  /**
43
47
  * JS uses a simplified ISO 8601 format which allows for
44
48
  * date-only formats and date-time formats, but not
@@ -125,14 +129,6 @@ export const generateDayAriaLabel = (locale, today, refParts) => {
125
129
  */
126
130
  return today ? `Today, ${labelString}` : labelString;
127
131
  };
128
- /**
129
- * Gets the day of the week, month, and day
130
- * Used for the header in MD mode.
131
- */
132
- export const getMonthAndDay = (locale, refParts) => {
133
- const date = getNormalizedDate(refParts);
134
- return new Intl.DateTimeFormat(locale, { weekday: 'short', month: 'short', day: 'numeric', timeZone: 'UTC' }).format(date);
135
- };
136
132
  /**
137
133
  * Given a locale and a date object,
138
134
  * return a formatted string that includes
@@ -143,15 +139,6 @@ export const getMonthAndYear = (locale, refParts) => {
143
139
  const date = getNormalizedDate(refParts);
144
140
  return new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric', timeZone: 'UTC' }).format(date);
145
141
  };
146
- /**
147
- * Given a locale and a date object,
148
- * return a formatted string that includes
149
- * the short month, numeric day, and full year.
150
- * Example: Apr 22, 2021
151
- */
152
- export const getMonthDayAndYear = (locale, refParts) => {
153
- return getLocalizedDateTime(locale, refParts, { month: 'short', day: 'numeric', year: 'numeric' });
154
- };
155
142
  /**
156
143
  * Given a locale and a date object,
157
144
  * return a formatted string that includes
@@ -201,7 +188,7 @@ export const getNormalizedDate = (refParts) => {
201
188
  */
202
189
  export const getLocalizedDateTime = (locale, refParts, options) => {
203
190
  const date = getNormalizedDate(refParts);
204
- return getDateTimeFormat(locale, options).format(date);
191
+ return getDateTimeFormat(locale, stripTimeZone(options)).format(date);
205
192
  };
206
193
  /**
207
194
  * Given a locale, DatetimeParts, and options
@@ -0,0 +1,45 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { printIonWarning } from "../../../utils/logging/index";
5
+ /**
6
+ * If a time zone is provided in the format options, the rendered text could
7
+ * differ from what was selected in the Datetime, which could cause
8
+ * confusion.
9
+ */
10
+ export const warnIfTimeZoneProvided = (el, formatOptions) => {
11
+ var _a, _b, _c, _d;
12
+ if (((_a = formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.date) === null || _a === void 0 ? void 0 : _a.timeZone) ||
13
+ ((_b = formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.date) === null || _b === void 0 ? void 0 : _b.timeZoneName) ||
14
+ ((_c = formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.time) === null || _c === void 0 ? void 0 : _c.timeZone) ||
15
+ ((_d = formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.time) === null || _d === void 0 ? void 0 : _d.timeZoneName)) {
16
+ printIonWarning('Datetime: "timeZone" and "timeZoneName" are not supported in "formatOptions".', el);
17
+ }
18
+ };
19
+ export const checkForPresentationFormatMismatch = (el, presentation, formatOptions) => {
20
+ // formatOptions is not required
21
+ if (!formatOptions)
22
+ return;
23
+ // If formatOptions is provided, the date and/or time objects are required, depending on the presentation
24
+ switch (presentation) {
25
+ case 'date':
26
+ case 'month-year':
27
+ case 'month':
28
+ case 'year':
29
+ if (formatOptions.date === undefined) {
30
+ printIonWarning(`Datetime: The '${presentation}' presentation requires a date object in formatOptions.`, el);
31
+ }
32
+ break;
33
+ case 'time':
34
+ if (formatOptions.time === undefined) {
35
+ printIonWarning(`Datetime: The 'time' presentation requires a time object in formatOptions.`, el);
36
+ }
37
+ break;
38
+ case 'date-time':
39
+ case 'time-date':
40
+ if (formatOptions.date === undefined && formatOptions.time === undefined) {
41
+ printIonWarning(`Datetime: The '${presentation}' presentation requires either a date or time object (or both) in formatOptions.`, el);
42
+ }
43
+ break;
44
+ }
45
+ };
@@ -7,7 +7,7 @@ import { printIonError } from "../../utils/logging/index";
7
7
  import { createColorClasses } from "../../utils/theme";
8
8
  import { getIonMode } from "../../global/ionic-global";
9
9
  import { getToday } from "../datetime/utils/data";
10
- import { getMonthAndYear, getMonthDayAndYear, getLocalizedDateTime, getLocalizedTime } from "../datetime/utils/format";
10
+ import { getLocalizedDateTime, getLocalizedTime } from "../datetime/utils/format";
11
11
  import { getHourCycle } from "../datetime/utils/helpers";
12
12
  import { parseDate } from "../datetime/utils/parse";
13
13
  /**
@@ -43,11 +43,12 @@ export class DatetimeButton {
43
43
  * to the locale specified on ion-datetime.
44
44
  */
45
45
  this.setDateTimeText = () => {
46
+ var _a, _b, _c, _d, _e;
46
47
  const { datetimeEl, datetimePresentation } = this;
47
48
  if (!datetimeEl) {
48
49
  return;
49
50
  }
50
- const { value, locale, hourCycle, preferWheel, multiple, titleSelectedDatesFormatter } = datetimeEl;
51
+ const { value, locale, formatOptions, hourCycle, preferWheel, multiple, titleSelectedDatesFormatter } = datetimeEl;
51
52
  const parsedValues = this.getParsedDateValues(value);
52
53
  /**
53
54
  * Both ion-datetime and ion-datetime-button default
@@ -70,8 +71,8 @@ export class DatetimeButton {
70
71
  switch (datetimePresentation) {
71
72
  case 'date-time':
72
73
  case 'time-date':
73
- const dateText = getMonthDayAndYear(locale, firstParsedDatetime);
74
- const timeText = getLocalizedTime(locale, firstParsedDatetime, computedHourCycle);
74
+ const dateText = getLocalizedDateTime(locale, firstParsedDatetime, (_a = formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.date) !== null && _a !== void 0 ? _a : { month: 'short', day: 'numeric', year: 'numeric' });
75
+ const timeText = getLocalizedTime(locale, firstParsedDatetime, computedHourCycle, formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.time);
75
76
  if (preferWheel) {
76
77
  this.dateText = `${dateText} ${timeText}`;
77
78
  }
@@ -94,20 +95,20 @@ export class DatetimeButton {
94
95
  this.dateText = headerText;
95
96
  }
96
97
  else {
97
- this.dateText = getMonthDayAndYear(locale, firstParsedDatetime);
98
+ this.dateText = getLocalizedDateTime(locale, firstParsedDatetime, (_b = formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.date) !== null && _b !== void 0 ? _b : { month: 'short', day: 'numeric', year: 'numeric' });
98
99
  }
99
100
  break;
100
101
  case 'time':
101
- this.timeText = getLocalizedTime(locale, firstParsedDatetime, computedHourCycle);
102
+ this.timeText = getLocalizedTime(locale, firstParsedDatetime, computedHourCycle, formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.time);
102
103
  break;
103
104
  case 'month-year':
104
- this.dateText = getMonthAndYear(locale, firstParsedDatetime);
105
+ this.dateText = getLocalizedDateTime(locale, firstParsedDatetime, (_c = formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.date) !== null && _c !== void 0 ? _c : { month: 'long', year: 'numeric' });
105
106
  break;
106
107
  case 'month':
107
- this.dateText = getLocalizedDateTime(locale, firstParsedDatetime, { month: 'long' });
108
+ this.dateText = getLocalizedDateTime(locale, firstParsedDatetime, (_d = formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.time) !== null && _d !== void 0 ? _d : { month: 'long' });
108
109
  break;
109
110
  case 'year':
110
- this.dateText = getLocalizedDateTime(locale, firstParsedDatetime, { year: 'numeric' });
111
+ this.dateText = getLocalizedDateTime(locale, firstParsedDatetime, (_e = formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.time) !== null && _e !== void 0 ? _e : { year: 'numeric' });
111
112
  break;
112
113
  }
113
114
  };
@@ -336,7 +337,7 @@ export class DatetimeButton {
336
337
  render() {
337
338
  const { color, dateText, timeText, selectedButton, datetimeActive, disabled } = this;
338
339
  const mode = getIonMode(this);
339
- return (h(Host, { key: 'cff9c4cbabf76a415b3785e9fa6cc682fddcec54', class: createColorClasses(color, {
340
+ return (h(Host, { key: 'f0ee6b859ad193be78cfc49d4d66373adfdbd618', class: createColorClasses(color, {
340
341
  [mode]: true,
341
342
  [`${selectedButton}-active`]: datetimeActive,
342
343
  ['datetime-button-disabled']: disabled,