voyager-ionic-core 7.5.0 → 7.5.5

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 (594) hide show
  1. package/components/action-sheet.js +2 -2
  2. package/components/alert.js +2 -2
  3. package/components/animation.js +18 -3
  4. package/components/checkbox.js +2 -2
  5. package/components/form-controller.js +1 -5
  6. package/components/index8.js +0 -1
  7. package/components/input-shims.js +9 -1
  8. package/components/ion-accordion-group.js +11 -1
  9. package/components/ion-datetime.js +48 -23
  10. package/components/ion-fab-list.js +1 -1
  11. package/components/ion-fab.js +1 -1
  12. package/components/ion-header.js +1 -1
  13. package/components/ion-input.js +11 -4
  14. package/components/ion-item-divider.js +2 -2
  15. package/components/ion-item-option.js +2 -2
  16. package/components/ion-menu.js +17 -5
  17. package/components/ion-modal.js +8 -8
  18. package/components/ion-range.js +2 -2
  19. package/components/ion-refresher.js +8 -1
  20. package/components/ion-reorder.js +2 -2
  21. package/components/ion-searchbar.js +10 -3
  22. package/components/ion-segment.js +43 -17
  23. package/components/ion-select.js +2 -2
  24. package/components/ion-tab-bar.js +2 -2
  25. package/components/ion-tab-button.js +2 -2
  26. package/components/ion-textarea.js +11 -4
  27. package/components/ion-title.js +1 -1
  28. package/components/ion-toast.js +2 -2
  29. package/components/ion-toggle.js +2 -2
  30. package/components/ios.transition.js +209 -41
  31. package/components/item.js +2 -2
  32. package/components/list-header.js +2 -2
  33. package/components/list.js +2 -2
  34. package/components/picker-internal.js +2 -2
  35. package/components/popover.js +2 -2
  36. package/components/radio-group.js +10 -1
  37. package/components/radio.js +2 -3
  38. package/components/watch-options.js +14 -3
  39. package/css/core.css.map +1 -1
  40. package/css/display.css.map +1 -1
  41. package/css/float-elements.css.map +1 -1
  42. package/css/global.bundle.css.map +1 -1
  43. package/css/ionic.bundle.css.map +1 -1
  44. package/css/padding.css.map +1 -1
  45. package/css/structure.css.map +1 -1
  46. package/css/text-alignment.css.map +1 -1
  47. package/css/text-transformation.css.map +1 -1
  48. package/css/typography.css.map +1 -1
  49. package/css/utils.bundle.css.map +1 -1
  50. package/dist/cjs/{animation-c8bdd3c7.js → animation-1083855c.js} +18 -3
  51. package/dist/cjs/{app-globals-fe1ad535.js → app-globals-1d4c1dbf.js} +1 -1
  52. package/dist/cjs/{button-active-c0ff1915.js → button-active-af897e0e.js} +1 -1
  53. package/dist/cjs/{form-controller-5e223b54.js → form-controller-9343050c.js} +1 -5
  54. package/dist/cjs/{index-d93fb71d.js → index-573877f3.js} +3 -3
  55. package/dist/cjs/{index-305a23dc.js → index-c2940dc1.js} +127 -57
  56. package/dist/cjs/{index-5e7529f6.js → index-d7561763.js} +2 -2
  57. package/dist/cjs/{index-10873539.js → index-da2c7a37.js} +0 -1
  58. package/dist/cjs/index.cjs.js +8 -8
  59. package/dist/cjs/{input-shims-da7dc0de.js → input-shims-b0a75a01.js} +10 -2
  60. package/dist/cjs/ion-accordion_2.cjs.entry.js +13 -3
  61. package/dist/cjs/ion-action-sheet.cjs.entry.js +7 -7
  62. package/dist/cjs/ion-alert.cjs.entry.js +7 -7
  63. package/dist/cjs/ion-app_8.cjs.entry.js +8 -8
  64. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  65. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  66. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  67. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  68. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  69. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-checkbox.cjs.entry.js +5 -5
  71. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  72. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  73. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  74. package/dist/cjs/ion-datetime_3.cjs.entry.js +52 -27
  75. package/dist/cjs/ion-fab_3.cjs.entry.js +4 -4
  76. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  77. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
  78. package/dist/cjs/ion-input.cjs.entry.js +13 -6
  79. package/dist/cjs/ion-item-option_3.cjs.entry.js +6 -6
  80. package/dist/cjs/ion-item_8.cjs.entry.js +10 -10
  81. package/dist/cjs/ion-loading.cjs.entry.js +4 -4
  82. package/dist/cjs/ion-menu_3.cjs.entry.js +22 -10
  83. package/dist/cjs/ion-modal.cjs.entry.js +14 -14
  84. package/dist/cjs/ion-nav_2.cjs.entry.js +3 -3
  85. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +2 -2
  86. package/dist/cjs/ion-picker-internal.cjs.entry.js +3 -3
  87. package/dist/cjs/ion-popover.cjs.entry.js +7 -7
  88. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  89. package/dist/cjs/ion-radio_2.cjs.entry.js +15 -7
  90. package/dist/cjs/ion-range.cjs.entry.js +6 -6
  91. package/dist/cjs/ion-refresher_2.cjs.entry.js +12 -5
  92. package/dist/cjs/ion-reorder_2.cjs.entry.js +5 -5
  93. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  94. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  95. package/dist/cjs/ion-searchbar.cjs.entry.js +11 -4
  96. package/dist/cjs/ion-segment_2.cjs.entry.js +45 -19
  97. package/dist/cjs/ion-select_3.cjs.entry.js +7 -7
  98. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  99. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  100. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +6 -6
  101. package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
  102. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  103. package/dist/cjs/ion-textarea.cjs.entry.js +13 -6
  104. package/dist/cjs/ion-toast.cjs.entry.js +6 -6
  105. package/dist/cjs/ion-toggle.cjs.entry.js +5 -5
  106. package/dist/cjs/{ionic-global-fb752503.js → ionic-global-ea2901a3.js} +1 -1
  107. package/dist/cjs/ionic.cjs.js +4 -4
  108. package/dist/cjs/{ios.transition-a4d545dd.js → ios.transition-ac909bc8.js} +212 -44
  109. package/dist/cjs/loader.cjs.js +3 -3
  110. package/dist/cjs/{md.transition-80bb961b.js → md.transition-907af519.js} +3 -3
  111. package/dist/cjs/{overlays-1a734051.js → overlays-2ffc5f27.js} +1 -1
  112. package/dist/cjs/{status-tap-778e8054.js → status-tap-3fb2391a.js} +2 -2
  113. package/dist/cjs/{watch-options-f3f77e54.js → watch-options-53bbb124.js} +14 -3
  114. package/dist/collection/collection-manifest.json +1 -1
  115. package/dist/collection/components/accordion-group/accordion-group.js +10 -0
  116. package/dist/collection/components/accordion-group/accordion-group.md.css +2 -2
  117. package/dist/collection/components/action-sheet/action-sheet.ios.css +18 -5
  118. package/dist/collection/components/action-sheet/action-sheet.md.css +18 -5
  119. package/dist/collection/components/action-sheet/test/basic/action-sheet.e2e.js +59 -0
  120. package/dist/collection/components/alert/alert.ios.css +37 -4
  121. package/dist/collection/components/alert/alert.md.css +37 -4
  122. package/dist/collection/components/alert/test/a11y/alert.e2e.js +48 -0
  123. package/dist/collection/components/checkbox/checkbox.ios.css +3 -3
  124. package/dist/collection/components/checkbox/checkbox.md.css +3 -3
  125. package/dist/collection/components/datetime/datetime.ios.css +24 -4
  126. package/dist/collection/components/datetime/datetime.js +47 -22
  127. package/dist/collection/components/datetime/datetime.md.css +24 -8
  128. package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +66 -0
  129. package/dist/collection/components/datetime/test/disabled/datetime.e2e.js +68 -0
  130. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +113 -0
  131. package/dist/collection/components/fab/fab.css +24 -36
  132. package/dist/collection/components/fab/test/safe-area/fab.e2e.js +63 -0
  133. package/dist/collection/components/fab-list/fab-list.css +2 -2
  134. package/dist/collection/components/header/header.ios.css +4 -1
  135. package/dist/collection/components/input/input.ios.css +15 -15
  136. package/dist/collection/components/input/input.js +9 -2
  137. package/dist/collection/components/input/input.md.css +22 -10
  138. package/dist/collection/components/item/item.ios.css +60 -12
  139. package/dist/collection/components/item/item.md.css +63 -15
  140. package/dist/collection/components/item/test/basic/item.e2e.js +26 -0
  141. package/dist/collection/components/item-divider/item-divider.ios.css +35 -8
  142. package/dist/collection/components/item-divider/item-divider.md.css +35 -8
  143. package/dist/collection/components/item-divider/test/basic/item-divider.e2e.js +22 -0
  144. package/dist/collection/components/item-option/item-option.ios.css +0 -10
  145. package/dist/collection/components/item-option/item-option.md.css +0 -10
  146. package/dist/collection/components/item-sliding/test/basic/item-sliding.e2e.js +77 -0
  147. package/dist/collection/components/label/label.ios.css +1 -1
  148. package/dist/collection/components/list/list.ios.css +15 -1
  149. package/dist/collection/components/list/list.md.css +41 -3
  150. package/dist/collection/components/list/test/lines/list.e2e.js +143 -0
  151. package/dist/collection/components/list-header/list-header.ios.css +15 -2
  152. package/dist/collection/components/list-header/list-header.md.css +15 -2
  153. package/dist/collection/components/list-header/test/basic/list-header.e2e.js +28 -0
  154. package/dist/collection/components/menu/menu.ios.css +4 -4
  155. package/dist/collection/components/menu/menu.js +15 -3
  156. package/dist/collection/components/menu/menu.md.css +4 -4
  157. package/dist/collection/components/modal/animations/ios.enter.js +3 -3
  158. package/dist/collection/components/modal/animations/ios.leave.js +4 -4
  159. package/dist/collection/components/modal/modal.ios.css +2 -2
  160. package/dist/collection/components/picker/picker.ios.css +1 -1
  161. package/dist/collection/components/picker/picker.md.css +1 -1
  162. package/dist/collection/components/picker-internal/picker-internal.ios.css +2 -2
  163. package/dist/collection/components/picker-internal/picker-internal.md.css +2 -2
  164. package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +5 -0
  165. package/dist/collection/components/popover/popover.ios.css +4 -4
  166. package/dist/collection/components/popover/popover.md.css +2 -2
  167. package/dist/collection/components/radio/radio.ios.css +4 -4
  168. package/dist/collection/components/radio/radio.js +5 -2
  169. package/dist/collection/components/radio/radio.md.css +4 -4
  170. package/dist/collection/components/radio/test/legacy/a11y/radio.e2e.js +5 -5
  171. package/dist/collection/components/radio-group/radio-group.js +10 -1
  172. package/dist/collection/components/range/range.ios.css +1 -1
  173. package/dist/collection/components/range/range.md.css +1 -1
  174. package/dist/collection/components/refresher/refresher.utils.js +8 -1
  175. package/dist/collection/components/reorder/reorder.ios.css +1 -34
  176. package/dist/collection/components/reorder/reorder.md.css +1 -34
  177. package/dist/collection/components/searchbar/searchbar.js +9 -2
  178. package/dist/collection/components/searchbar/searchbar.md.css +12 -6
  179. package/dist/collection/components/searchbar/test/basic/searchbar.e2e.js +25 -0
  180. package/dist/collection/components/segment/segment.js +43 -17
  181. package/dist/collection/components/select/select.ios.css +12 -15
  182. package/dist/collection/components/select/select.md.css +16 -7
  183. package/dist/collection/components/split-pane/test/multiple/split-pane.e2e.js +31 -0
  184. package/dist/collection/components/tab-bar/tab-bar.ios.css +4 -4
  185. package/dist/collection/components/tab-bar/tab-bar.md.css +4 -4
  186. package/dist/collection/components/tab-bar/test/basic/tab-bar.e2e.js +43 -0
  187. package/dist/collection/components/tab-button/tab-button.ios.css +3 -3
  188. package/dist/collection/components/tab-button/tab-button.md.css +3 -3
  189. package/dist/collection/components/textarea/textarea.ios.css +19 -19
  190. package/dist/collection/components/textarea/textarea.js +9 -2
  191. package/dist/collection/components/textarea/textarea.md.css +26 -20
  192. package/dist/collection/components/title/title.ios.css +11 -2
  193. package/dist/collection/components/toast/toast.ios.css +1 -1
  194. package/dist/collection/components/toast/toast.md.css +1 -1
  195. package/dist/collection/components/toggle/toggle.ios.css +3 -3
  196. package/dist/collection/components/toggle/toggle.md.css +3 -3
  197. package/dist/collection/utils/animation/animation.js +18 -3
  198. package/dist/collection/utils/content/index.js +0 -1
  199. package/dist/collection/utils/forms/form-controller.js +1 -5
  200. package/dist/collection/utils/input-shims/hacks/common.js +9 -1
  201. package/dist/collection/utils/transition/ios.transition.js +209 -41
  202. package/dist/collection/utils/watch-options.js +14 -3
  203. package/dist/docs.json +3 -3
  204. package/dist/esm/{animation-92066c62.js → animation-8aa13916.js} +18 -3
  205. package/dist/esm/{app-globals-ec816a70.js → app-globals-2398e405.js} +1 -1
  206. package/dist/esm/{button-active-d926d4f4.js → button-active-ce5cba4c.js} +1 -1
  207. package/dist/esm/{form-controller-ed77647a.js → form-controller-64edeaad.js} +1 -5
  208. package/dist/esm/{index-df55802d.js → index-0aa6e61f.js} +2 -2
  209. package/dist/esm/{index-746a238e.js → index-4392efa5.js} +0 -1
  210. package/dist/esm/{index-7d2b2808.js → index-6a0ccabb.js} +3 -3
  211. package/dist/esm/{index-b49b173c.js → index-7c9b1bca.js} +127 -57
  212. package/dist/esm/index.js +8 -8
  213. package/dist/esm/{input-shims-d78a3c77.js → input-shims-d0c93e5d.js} +10 -2
  214. package/dist/esm/ion-accordion_2.entry.js +13 -3
  215. package/dist/esm/ion-action-sheet.entry.js +7 -7
  216. package/dist/esm/ion-alert.entry.js +7 -7
  217. package/dist/esm/ion-app_8.entry.js +8 -8
  218. package/dist/esm/ion-avatar_3.entry.js +2 -2
  219. package/dist/esm/ion-back-button.entry.js +2 -2
  220. package/dist/esm/ion-backdrop.entry.js +2 -2
  221. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  222. package/dist/esm/ion-button_2.entry.js +2 -2
  223. package/dist/esm/ion-card_5.entry.js +2 -2
  224. package/dist/esm/ion-checkbox.entry.js +5 -5
  225. package/dist/esm/ion-chip.entry.js +2 -2
  226. package/dist/esm/ion-col_3.entry.js +2 -2
  227. package/dist/esm/ion-datetime-button.entry.js +2 -2
  228. package/dist/esm/ion-datetime_3.entry.js +52 -27
  229. package/dist/esm/ion-fab_3.entry.js +4 -4
  230. package/dist/esm/ion-img.entry.js +2 -2
  231. package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
  232. package/dist/esm/ion-input.entry.js +14 -7
  233. package/dist/esm/ion-item-option_3.entry.js +6 -6
  234. package/dist/esm/ion-item_8.entry.js +10 -10
  235. package/dist/esm/ion-loading.entry.js +4 -4
  236. package/dist/esm/ion-menu_3.entry.js +22 -10
  237. package/dist/esm/ion-modal.entry.js +14 -14
  238. package/dist/esm/ion-nav_2.entry.js +3 -3
  239. package/dist/esm/ion-picker-column-internal.entry.js +2 -2
  240. package/dist/esm/ion-picker-internal.entry.js +3 -3
  241. package/dist/esm/ion-popover.entry.js +7 -7
  242. package/dist/esm/ion-progress-bar.entry.js +2 -2
  243. package/dist/esm/ion-radio_2.entry.js +15 -7
  244. package/dist/esm/ion-range.entry.js +6 -6
  245. package/dist/esm/ion-refresher_2.entry.js +12 -5
  246. package/dist/esm/ion-reorder_2.entry.js +5 -5
  247. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  248. package/dist/esm/ion-route_4.entry.js +2 -2
  249. package/dist/esm/ion-searchbar.entry.js +12 -5
  250. package/dist/esm/ion-segment_2.entry.js +45 -19
  251. package/dist/esm/ion-select_3.entry.js +7 -7
  252. package/dist/esm/ion-spinner.entry.js +2 -2
  253. package/dist/esm/ion-split-pane.entry.js +2 -2
  254. package/dist/esm/ion-tab-bar_2.entry.js +6 -6
  255. package/dist/esm/ion-tab_2.entry.js +1 -1
  256. package/dist/esm/ion-text.entry.js +2 -2
  257. package/dist/esm/ion-textarea.entry.js +14 -7
  258. package/dist/esm/ion-toast.entry.js +6 -6
  259. package/dist/esm/ion-toggle.entry.js +5 -5
  260. package/dist/esm/{ionic-global-246ca78f.js → ionic-global-40e42e7f.js} +1 -1
  261. package/dist/esm/ionic.js +5 -5
  262. package/dist/esm/{ios.transition-a86d7bbe.js → ios.transition-1651c430.js} +212 -44
  263. package/dist/esm/loader.js +4 -4
  264. package/dist/esm/{md.transition-365ef6b6.js → md.transition-66f18369.js} +3 -3
  265. package/dist/esm/{overlays-cec6bac8.js → overlays-6c9feb7e.js} +1 -1
  266. package/dist/esm/{status-tap-9aeeaca5.js → status-tap-9ce68758.js} +2 -2
  267. package/dist/esm/{watch-options-355a920a.js → watch-options-02d8498b.js} +14 -3
  268. package/dist/esm-es5/animation-8aa13916.js +4 -0
  269. package/dist/esm-es5/app-globals-2398e405.js +4 -0
  270. package/dist/esm-es5/{button-active-d926d4f4.js → button-active-ce5cba4c.js} +1 -1
  271. package/dist/esm-es5/config-96c9ace3.js +1 -1
  272. package/dist/esm-es5/cubic-bezier-66542bc5.js +1 -1
  273. package/dist/esm-es5/data-44d9e816.js +1 -1
  274. package/dist/esm-es5/dir-912e3e13.js +1 -1
  275. package/dist/esm-es5/focus-visible-85493433.js +1 -1
  276. package/dist/esm-es5/form-controller-64edeaad.js +4 -0
  277. package/dist/esm-es5/framework-delegate-aa433dea.js +1 -1
  278. package/dist/esm-es5/gesture-controller-0fa396c4.js +1 -1
  279. package/dist/esm-es5/haptic-1243b917.js +1 -1
  280. package/dist/esm-es5/hardware-back-button-39299f84.js +1 -1
  281. package/dist/esm-es5/helpers-3379ba19.js +1 -1
  282. package/dist/esm-es5/index-0aa6e61f.js +4 -0
  283. package/dist/esm-es5/index-4392efa5.js +4 -0
  284. package/dist/esm-es5/index-6a0ccabb.js +4 -0
  285. package/dist/esm-es5/index-7c9b1bca.js +5 -0
  286. package/dist/esm-es5/index-f0cc4e14.js +1 -1
  287. package/dist/esm-es5/index-ff313b19.js +1 -1
  288. package/dist/esm-es5/index.js +1 -1
  289. package/dist/esm-es5/input-shims-d0c93e5d.js +4 -0
  290. package/dist/esm-es5/input.utils-ec063df4.js +1 -1
  291. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  292. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  293. package/dist/esm-es5/ion-alert.entry.js +1 -1
  294. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  295. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  296. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  297. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  298. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  299. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  300. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  301. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  302. package/dist/esm-es5/ion-chip.entry.js +1 -1
  303. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  304. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  305. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  306. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  307. package/dist/esm-es5/ion-img.entry.js +1 -1
  308. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  309. package/dist/esm-es5/ion-input.entry.js +1 -1
  310. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  311. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  312. package/dist/esm-es5/ion-loading.entry.js +1 -1
  313. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  314. package/dist/esm-es5/ion-modal.entry.js +1 -1
  315. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  316. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  317. package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
  318. package/dist/esm-es5/ion-popover.entry.js +1 -1
  319. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  320. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  321. package/dist/esm-es5/ion-range.entry.js +1 -1
  322. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  323. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  324. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  325. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  326. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  327. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  328. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  329. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  330. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  331. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  332. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  333. package/dist/esm-es5/ion-text.entry.js +1 -1
  334. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  335. package/dist/esm-es5/ion-toast.entry.js +1 -1
  336. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  337. package/dist/esm-es5/ionic-global-40e42e7f.js +4 -0
  338. package/dist/esm-es5/ionic.js +1 -1
  339. package/dist/esm-es5/ios.transition-1651c430.js +4 -0
  340. package/dist/esm-es5/keyboard-b551279d.js +1 -1
  341. package/dist/esm-es5/keyboard-controller-0c2dce71.js +1 -1
  342. package/dist/esm-es5/loader.js +1 -1
  343. package/dist/esm-es5/md.transition-66f18369.js +4 -0
  344. package/dist/esm-es5/notch-controller-8c9c0e54.js +1 -1
  345. package/dist/esm-es5/overlays-6c9feb7e.js +4 -0
  346. package/dist/esm-es5/spinner-configs-d09fbbbb.js +1 -1
  347. package/dist/esm-es5/status-tap-9ce68758.js +4 -0
  348. package/dist/esm-es5/swipe-back-cd4295f3.js +1 -1
  349. package/dist/esm-es5/watch-options-02d8498b.js +4 -0
  350. package/dist/html.html-data.json +1 -1
  351. package/dist/ionic/index.esm.js +1 -1
  352. package/dist/ionic/ionic.esm.js +1 -1
  353. package/dist/ionic/ionic.js +1 -1
  354. package/dist/ionic/p-0330f0a3.system.entry.js +4 -0
  355. package/dist/ionic/{p-a7f8dc42.entry.js → p-0492946a.entry.js} +1 -1
  356. package/dist/ionic/{p-78030c1f.system.entry.js → p-07d9e9cd.system.entry.js} +1 -1
  357. package/dist/ionic/{p-ced41304.system.js → p-09d142b3.system.js} +1 -1
  358. package/dist/ionic/{p-fcf47f80.entry.js → p-0a794e83.entry.js} +1 -1
  359. package/dist/ionic/p-0d8e9393.entry.js +4 -0
  360. package/dist/ionic/p-0dc0d9b5.entry.js +4 -0
  361. package/dist/ionic/p-0e23256e.system.entry.js +4 -0
  362. package/dist/ionic/p-14aca3fb.entry.js +4 -0
  363. package/dist/ionic/p-14b4348c.system.js +4 -0
  364. package/dist/ionic/{p-108f9d49.entry.js → p-174f3446.entry.js} +1 -1
  365. package/dist/ionic/p-18e01b30.system.entry.js +4 -0
  366. package/dist/ionic/p-1a8ae7a7.system.entry.js +4 -0
  367. package/dist/ionic/p-1cb5f2f8.system.entry.js +4 -0
  368. package/dist/ionic/{p-c42c86c0.system.entry.js → p-1d269117.system.entry.js} +1 -1
  369. package/dist/ionic/{p-0ac3fb2c.entry.js → p-1dc91702.entry.js} +1 -1
  370. package/dist/ionic/p-1e5165db.system.entry.js +4 -0
  371. package/dist/ionic/{p-0b00b937.entry.js → p-1e86a71b.entry.js} +1 -1
  372. package/dist/ionic/p-1f4f0d59.system.entry.js +4 -0
  373. package/dist/ionic/p-20cf4994.js +4 -0
  374. package/dist/ionic/p-236063ec.system.entry.js +4 -0
  375. package/dist/ionic/p-2b89ea1b.system.js +1 -1
  376. package/dist/ionic/p-2e8e0045.js +4 -0
  377. package/dist/ionic/{p-ce7d67a7.system.entry.js → p-34d2de14.system.entry.js} +2 -2
  378. package/dist/ionic/{p-303bf1e8.system.entry.js → p-352c0232.system.entry.js} +2 -2
  379. package/dist/ionic/p-3602001b.system.js +4 -0
  380. package/dist/ionic/p-3632220b.system.js +1 -1
  381. package/dist/ionic/p-377c636c.system.entry.js +4 -0
  382. package/dist/ionic/{p-f9fa802c.system.entry.js → p-39044fe6.system.entry.js} +2 -2
  383. package/dist/ionic/{p-38089641.entry.js → p-3ce8c3e3.entry.js} +1 -1
  384. package/dist/ionic/p-3d7fea9b.system.entry.js +4 -0
  385. package/dist/ionic/p-3de79805.entry.js +4 -0
  386. package/dist/ionic/{p-0bbede6a.system.entry.js → p-3fb57e1b.system.entry.js} +1 -1
  387. package/dist/ionic/{p-5c3e72a8.system.js → p-40903d34.system.js} +1 -1
  388. package/dist/ionic/p-41122cd6.system.js +4 -0
  389. package/dist/ionic/p-41477ad9.system.js +1 -1
  390. package/dist/ionic/p-44bc8b45.system.js +2 -2
  391. package/dist/ionic/p-4518e4c0.system.entry.js +4 -0
  392. package/dist/ionic/{p-eab10949.system.entry.js → p-45da1e68.system.entry.js} +1 -1
  393. package/dist/ionic/p-4794e0ac.system.entry.js +4 -0
  394. package/dist/ionic/p-479cdbf8.system.js +2 -2
  395. package/dist/ionic/{p-4e50b8d1.entry.js → p-48d9faa7.entry.js} +1 -1
  396. package/dist/ionic/{p-8d6728a1.system.entry.js → p-4a142496.system.entry.js} +1 -1
  397. package/dist/ionic/p-4c80afe1.system.entry.js +4 -0
  398. package/dist/ionic/p-4cd588b3.system.entry.js +4 -0
  399. package/dist/ionic/{p-afb6658f.entry.js → p-4dbac22d.entry.js} +1 -1
  400. package/dist/ionic/p-4e6a1efb.system.entry.js +4 -0
  401. package/dist/ionic/p-4ecb5692.entry.js +4 -0
  402. package/dist/ionic/p-5370e786.js +4 -0
  403. package/dist/ionic/p-55ed230e.system.js +4 -0
  404. package/dist/ionic/p-56dc022e.system.js +1 -1
  405. package/dist/ionic/p-5aac9314.system.js +4 -0
  406. package/dist/ionic/p-5bd4e009.entry.js +4 -0
  407. package/dist/ionic/{p-6f8a95a3.system.entry.js → p-5cfb3feb.system.entry.js} +2 -2
  408. package/dist/ionic/{p-181b7c2a.js → p-5d711127.js} +1 -1
  409. package/dist/ionic/p-5da0eb3e.system.entry.js +4 -0
  410. package/dist/ionic/p-5deff017.entry.js +4 -0
  411. package/dist/ionic/p-613d4042.system.js +2 -2
  412. package/dist/ionic/p-63d519fb.entry.js +4 -0
  413. package/dist/ionic/{p-8083aadb.entry.js → p-63f08fe3.entry.js} +1 -1
  414. package/dist/ionic/{p-35b26732.entry.js → p-64296b15.entry.js} +1 -1
  415. package/dist/ionic/p-64ed03a3.entry.js +4 -0
  416. package/dist/ionic/p-664d2b07.system.entry.js +4 -0
  417. package/dist/ionic/p-67aab78f.js +4 -0
  418. package/dist/ionic/{p-e0f52215.system.entry.js → p-67e18f02.system.entry.js} +1 -1
  419. package/dist/ionic/{p-572cce26.system.entry.js → p-67ed452a.system.entry.js} +2 -2
  420. package/dist/ionic/p-67eecef4.system.js +4 -0
  421. package/dist/ionic/{p-76378400.js → p-6c3d5383.js} +1 -1
  422. package/dist/ionic/{p-1289b3b5.system.entry.js → p-6e23777e.system.entry.js} +2 -2
  423. package/dist/ionic/p-702d85d8.system.js +4 -0
  424. package/dist/ionic/{p-1edb53a1.entry.js → p-7176cea3.entry.js} +1 -1
  425. package/dist/ionic/p-73411c1b.entry.js +4 -0
  426. package/dist/ionic/p-73420380.js +4 -0
  427. package/dist/ionic/{p-6ea2e653.entry.js → p-744973f3.entry.js} +1 -1
  428. package/dist/ionic/p-772f6c84.system.js +2 -2
  429. package/dist/ionic/p-77e7a9c8.entry.js +4 -0
  430. package/dist/ionic/p-7ab6fc5a.system.entry.js +4 -0
  431. package/dist/ionic/{p-31119a15.entry.js → p-7cee75c0.entry.js} +1 -1
  432. package/dist/ionic/{p-cf62e1c8.js → p-800ef057.js} +1 -1
  433. package/dist/ionic/p-815c2fba.system.js +2 -2
  434. package/dist/ionic/p-819ff3b9.system.js +1 -1
  435. package/dist/ionic/p-87411e39.system.js +1 -1
  436. package/dist/ionic/p-8a308596.system.js +4 -0
  437. package/dist/ionic/{p-3818f63f.entry.js → p-8ad82eb3.entry.js} +1 -1
  438. package/dist/ionic/{p-c4a5de01.entry.js → p-8b29691f.entry.js} +1 -1
  439. package/dist/ionic/p-8c15eda7.system.js +2 -2
  440. package/dist/ionic/p-8e1bded3.entry.js +4 -0
  441. package/dist/ionic/{p-15decbec.entry.js → p-9209d90c.entry.js} +1 -1
  442. package/dist/ionic/{p-96ba8eac.entry.js → p-92800752.entry.js} +1 -1
  443. package/dist/ionic/p-965677f1.entry.js +4 -0
  444. package/dist/ionic/{p-446230d7.js → p-97c65aa5.js} +1 -1
  445. package/dist/ionic/p-97e31c0a.system.js +4 -0
  446. package/dist/ionic/p-9ab6f3e6.system.js +1 -1
  447. package/dist/ionic/{p-62e7d4fa.js → p-9b89cbde.js} +1 -1
  448. package/dist/ionic/p-9e852ff1.system.js +1 -1
  449. package/dist/ionic/p-a0b6d438.js +4 -0
  450. package/dist/ionic/p-a545b4f1.system.js +4 -0
  451. package/dist/ionic/p-a5c1e6ce.entry.js +4 -0
  452. package/dist/ionic/p-a6d83a03.system.entry.js +4 -0
  453. package/dist/ionic/p-a8e68fd9.entry.js +4 -0
  454. package/dist/ionic/{p-aa377971.system.js → p-a936d224.system.js} +1 -1
  455. package/dist/ionic/{p-beb864e4.system.entry.js → p-a9c3699b.system.entry.js} +1 -1
  456. package/dist/ionic/p-ab4cff27.system.js +1 -1
  457. package/dist/ionic/{p-012952cd.system.entry.js → p-abacb44b.system.entry.js} +2 -2
  458. package/dist/ionic/{p-1f81b5be.entry.js → p-af016cd3.entry.js} +1 -1
  459. package/dist/ionic/{p-a9c32660.entry.js → p-b0cee324.entry.js} +1 -1
  460. package/dist/ionic/{p-f4309ac7.entry.js → p-b1142133.entry.js} +1 -1
  461. package/dist/ionic/p-b17b7c3c.system.entry.js +4 -0
  462. package/dist/ionic/p-b203659a.system.entry.js +4 -0
  463. package/dist/ionic/{p-c679fcb5.entry.js → p-b2a74a72.entry.js} +1 -1
  464. package/dist/ionic/p-b4b4bb29.system.js +1 -1
  465. package/dist/ionic/p-b6f8ee31.entry.js +4 -0
  466. package/dist/ionic/p-b8c3f071.system.js +1 -1
  467. package/dist/ionic/p-b906c5ca.entry.js +4 -0
  468. package/dist/ionic/p-b912e055.system.js +1 -1
  469. package/dist/ionic/{p-e42aaa8b.entry.js → p-b91fe549.entry.js} +1 -1
  470. package/dist/ionic/p-bba2ce59.system.js +1 -1
  471. package/dist/ionic/p-beb64be7.system.entry.js +4 -0
  472. package/dist/ionic/p-bed722c4.system.entry.js +4 -0
  473. package/dist/ionic/p-c0c81820.system.js +4 -0
  474. package/dist/ionic/p-c224b9a9.js +5 -0
  475. package/dist/ionic/p-c4042875.system.js +4 -0
  476. package/dist/ionic/p-c4f2dce7.system.js +1 -1
  477. package/dist/ionic/{p-6f6646bf.system.entry.js → p-c7b8c2ef.system.entry.js} +1 -1
  478. package/dist/ionic/{p-1ecba429.entry.js → p-c7d30db9.entry.js} +1 -1
  479. package/dist/ionic/{p-db1a1e00.entry.js → p-c919498d.entry.js} +1 -1
  480. package/dist/ionic/{p-54200074.entry.js → p-ca5219df.entry.js} +1 -1
  481. package/dist/ionic/p-ccdcb022.system.js +1 -1
  482. package/dist/ionic/p-cf425ec5.system.entry.js +4 -0
  483. package/dist/ionic/p-d2597b3e.system.js +5 -0
  484. package/dist/ionic/p-d3952bd5.system.entry.js +4 -0
  485. package/dist/ionic/{p-8c1805f4.system.entry.js → p-d7ea6a0d.system.entry.js} +1 -1
  486. package/dist/ionic/p-db5043df.system.entry.js +4 -0
  487. package/dist/ionic/p-dfa756ed.system.js +4 -0
  488. package/dist/ionic/{p-28ea45b9.js → p-e6b240a0.js} +1 -1
  489. package/dist/ionic/{p-cabd2c6d.entry.js → p-e76a4bc8.entry.js} +1 -1
  490. package/dist/ionic/{p-cf0c93e3.system.entry.js → p-e8400078.system.entry.js} +2 -2
  491. package/dist/ionic/{p-4e6e43c1.entry.js → p-ed636a74.entry.js} +1 -1
  492. package/dist/ionic/p-f10de93b.js +4 -0
  493. package/dist/ionic/{p-f919c026.entry.js → p-f4cc91f6.entry.js} +1 -1
  494. package/dist/ionic/p-f5a750e4.system.entry.js +4 -0
  495. package/dist/ionic/p-f8e620f1.entry.js +4 -0
  496. package/dist/ionic/p-fa8d4788.system.js +1 -1
  497. package/dist/ionic/{p-8a2801f1.system.entry.js → p-ff5144f3.system.entry.js} +1 -1
  498. package/dist/ionic/p-ff5a10f9.system.js +2 -2
  499. package/dist/ionic/{p-6129af0a.system.entry.js → p-ffb876b0.system.entry.js} +1 -1
  500. package/dist/types/components/datetime/datetime.d.ts +1 -1
  501. package/dist/types/components/menu/menu-interface.d.ts +15 -4
  502. package/dist/types/components/radio/radio.d.ts +1 -1
  503. package/dist/types/components.d.ts +627 -3
  504. package/dist/types/stencil-public-runtime.d.ts +21 -0
  505. package/dist/types/utils/content/index.d.ts +1 -1
  506. package/dist/types/utils/focus-visible.d.ts +3 -2
  507. package/dist/types/utils/menu-controller/index.d.ts +2 -21
  508. package/dist/types/utils/test/platform.utils.d.ts +9 -9
  509. package/dist/types/utils/watch-options.d.ts +9 -1
  510. package/hydrate/index.d.ts +1 -1
  511. package/hydrate/index.js +567 -238
  512. package/package.json +11 -14
  513. package/dist/esm-es5/animation-92066c62.js +0 -4
  514. package/dist/esm-es5/app-globals-ec816a70.js +0 -4
  515. package/dist/esm-es5/form-controller-ed77647a.js +0 -4
  516. package/dist/esm-es5/index-746a238e.js +0 -4
  517. package/dist/esm-es5/index-7d2b2808.js +0 -4
  518. package/dist/esm-es5/index-b49b173c.js +0 -5
  519. package/dist/esm-es5/index-df55802d.js +0 -4
  520. package/dist/esm-es5/input-shims-d78a3c77.js +0 -4
  521. package/dist/esm-es5/ionic-global-246ca78f.js +0 -4
  522. package/dist/esm-es5/ios.transition-a86d7bbe.js +0 -4
  523. package/dist/esm-es5/md.transition-365ef6b6.js +0 -4
  524. package/dist/esm-es5/overlays-cec6bac8.js +0 -4
  525. package/dist/esm-es5/status-tap-9aeeaca5.js +0 -4
  526. package/dist/esm-es5/watch-options-355a920a.js +0 -4
  527. package/dist/ionic/p-015187e5.system.js +0 -4
  528. package/dist/ionic/p-06ac429a.js +0 -5
  529. package/dist/ionic/p-0b7c25ee.system.entry.js +0 -4
  530. package/dist/ionic/p-0f1f59da.system.entry.js +0 -4
  531. package/dist/ionic/p-128a98e8.system.js +0 -4
  532. package/dist/ionic/p-16e44585.js +0 -4
  533. package/dist/ionic/p-19fba51c.entry.js +0 -4
  534. package/dist/ionic/p-1a463b1e.system.entry.js +0 -4
  535. package/dist/ionic/p-1f260a7b.entry.js +0 -4
  536. package/dist/ionic/p-29073efe.system.entry.js +0 -4
  537. package/dist/ionic/p-2bbf3ac4.system.entry.js +0 -4
  538. package/dist/ionic/p-33a8349a.system.entry.js +0 -4
  539. package/dist/ionic/p-34259245.system.entry.js +0 -4
  540. package/dist/ionic/p-35e399bd.entry.js +0 -4
  541. package/dist/ionic/p-38c5fe2b.system.entry.js +0 -4
  542. package/dist/ionic/p-3a58e3a4.system.entry.js +0 -4
  543. package/dist/ionic/p-3d726a67.system.js +0 -4
  544. package/dist/ionic/p-3f3da911.system.entry.js +0 -4
  545. package/dist/ionic/p-4215652f.system.entry.js +0 -4
  546. package/dist/ionic/p-4f97c112.entry.js +0 -4
  547. package/dist/ionic/p-54f6cd27.system.entry.js +0 -4
  548. package/dist/ionic/p-5b976d70.entry.js +0 -4
  549. package/dist/ionic/p-5bf16a18.js +0 -4
  550. package/dist/ionic/p-629aa3fd.system.js +0 -5
  551. package/dist/ionic/p-64475ab5.system.js +0 -4
  552. package/dist/ionic/p-673846f6.entry.js +0 -4
  553. package/dist/ionic/p-6ce0a709.system.entry.js +0 -4
  554. package/dist/ionic/p-818b2e75.entry.js +0 -4
  555. package/dist/ionic/p-81ef7437.system.entry.js +0 -4
  556. package/dist/ionic/p-8e24ebbc.js +0 -4
  557. package/dist/ionic/p-8f01a9a2.system.js +0 -4
  558. package/dist/ionic/p-939e0fa1.system.js +0 -4
  559. package/dist/ionic/p-95817276.system.entry.js +0 -4
  560. package/dist/ionic/p-9b9dcc3e.system.entry.js +0 -4
  561. package/dist/ionic/p-9dc85536.system.entry.js +0 -4
  562. package/dist/ionic/p-9f2e0db9.js +0 -4
  563. package/dist/ionic/p-a04bfada.entry.js +0 -4
  564. package/dist/ionic/p-a164e3ab.system.entry.js +0 -4
  565. package/dist/ionic/p-a200a7fc.entry.js +0 -4
  566. package/dist/ionic/p-a34fc12e.system.entry.js +0 -4
  567. package/dist/ionic/p-ad48dd13.system.js +0 -4
  568. package/dist/ionic/p-b132c2c0.system.js +0 -4
  569. package/dist/ionic/p-b3c68723.system.js +0 -4
  570. package/dist/ionic/p-b61a2fa0.system.entry.js +0 -4
  571. package/dist/ionic/p-b753ec0d.system.entry.js +0 -4
  572. package/dist/ionic/p-b9047b05.system.js +0 -4
  573. package/dist/ionic/p-c05315f5.system.entry.js +0 -4
  574. package/dist/ionic/p-c105bd36.entry.js +0 -4
  575. package/dist/ionic/p-c49672d8.system.js +0 -4
  576. package/dist/ionic/p-c87827ca.system.js +0 -4
  577. package/dist/ionic/p-c8c9d699.system.entry.js +0 -4
  578. package/dist/ionic/p-c92f0a6d.system.entry.js +0 -4
  579. package/dist/ionic/p-c956e82c.system.entry.js +0 -4
  580. package/dist/ionic/p-c994fff0.system.js +0 -4
  581. package/dist/ionic/p-ca5cf574.js +0 -4
  582. package/dist/ionic/p-cd2d17c3.system.entry.js +0 -4
  583. package/dist/ionic/p-d35217be.entry.js +0 -4
  584. package/dist/ionic/p-d6e53e66.entry.js +0 -4
  585. package/dist/ionic/p-e1d5752d.system.entry.js +0 -4
  586. package/dist/ionic/p-e2bb634f.js +0 -4
  587. package/dist/ionic/p-e38a5f77.js +0 -4
  588. package/dist/ionic/p-e65ebe96.entry.js +0 -4
  589. package/dist/ionic/p-e74faf2a.entry.js +0 -4
  590. package/dist/ionic/p-eac263dd.entry.js +0 -4
  591. package/dist/ionic/p-f34f001c.entry.js +0 -4
  592. package/dist/ionic/p-f5bf698b.entry.js +0 -4
  593. package/dist/ionic/p-f7566bad.entry.js +0 -4
  594. /package/dist/ionic/{p-b24aa895.js → p-114a36ed.js} +0 -0
@@ -0,0 +1,113 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { expect } from "@playwright/test";
5
+ import { configs, test } from "../../../../utils/test/playwright/index";
6
+ /**
7
+ * This behavior does not differ across
8
+ * modes/directions.
9
+ */
10
+ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config, screenshot }) => {
11
+ test.describe(title('datetime: readonly'), () => {
12
+ test('should not have visual regressions', async ({ page }) => {
13
+ await page.setContent(`
14
+ <ion-datetime value="2022-02-05T00:00:00" min="2022-01-01T00:00:00" max="2022-02-20T23:59:59" day-values="5,6,10,11,15,16,20" show-default-buttons readonly></ion-datetime>
15
+ `, config);
16
+ const datetime = page.locator('ion-datetime');
17
+ await expect(datetime).toHaveScreenshot(screenshot(`datetime-readonly`));
18
+ });
19
+ test('date should be disabled', async ({ page }) => {
20
+ await page.setContent(`
21
+ <ion-datetime value="2022-02-28" readonly></ion-datetime>
22
+ `, config);
23
+ await page.waitForSelector('.datetime-ready');
24
+ const febFirstButton = page.locator(`.calendar-day[data-day='1'][data-month='2']`);
25
+ await expect(febFirstButton).toBeDisabled();
26
+ });
27
+ test('should navigate months via month-year button', async ({ page }) => {
28
+ await page.setContent(`
29
+ <ion-datetime value="2022-02-22T16:30:00" readonly></ion-datetime>
30
+ `, config);
31
+ const ionChange = await page.spyOnEvent('ionChange');
32
+ await page.waitForSelector('.datetime-ready');
33
+ const calendarMonthYear = page.locator('ion-datetime .calendar-month-year');
34
+ await expect(calendarMonthYear).toHaveText('February 2022');
35
+ await calendarMonthYear.click();
36
+ await page.waitForChanges();
37
+ await page.locator('.month-column .picker-item[data-value="3"]').click();
38
+ await page.waitForChanges();
39
+ await expect(calendarMonthYear).toHaveText('March 2022');
40
+ await expect(ionChange).not.toHaveReceivedEvent();
41
+ });
42
+ test('should open picker using keyboard navigation', async ({ page, browserName }) => {
43
+ await page.setContent(`
44
+ <ion-datetime value="2022-02-22T16:30:00" readonly></ion-datetime>
45
+ `, config);
46
+ const tabKey = browserName === 'webkit' ? 'Alt+Tab' : 'Tab';
47
+ await page.waitForSelector('.datetime-ready');
48
+ const calendarMonthYear = page.locator('ion-datetime .calendar-month-year');
49
+ const monthYearButton = page.locator('.calendar-month-year ion-item');
50
+ await expect(calendarMonthYear).toHaveText('February 2022');
51
+ await page.keyboard.press(tabKey);
52
+ await expect(monthYearButton).toBeFocused();
53
+ await page.waitForChanges();
54
+ await page.keyboard.press('Enter');
55
+ await page.waitForChanges();
56
+ const marchPickerItem = page.locator('.month-column .picker-item[data-value="3"]');
57
+ await expect(marchPickerItem).toBeVisible();
58
+ });
59
+ test('should view next month via next button', async ({ page }) => {
60
+ await page.setContent(`
61
+ <ion-datetime value="2022-02-22T16:30:00" readonly></ion-datetime>
62
+ `, config);
63
+ const ionChange = await page.spyOnEvent('ionChange');
64
+ const calendarMonthYear = page.locator('ion-datetime .calendar-month-year');
65
+ await expect(calendarMonthYear).toHaveText('February 2022');
66
+ const nextMonthButton = page.locator('ion-datetime .calendar-next-prev ion-button + ion-button');
67
+ await nextMonthButton.click();
68
+ await page.waitForChanges();
69
+ await expect(calendarMonthYear).toHaveText('March 2022');
70
+ await expect(ionChange).not.toHaveReceivedEvent();
71
+ });
72
+ test('should not change value when the month is changed via keyboard navigation', async ({ page, browserName }) => {
73
+ await page.setContent(`
74
+ <ion-datetime value="2022-02-22T16:30:00" readonly></ion-datetime>
75
+ `, config);
76
+ const tabKey = browserName === 'webkit' ? 'Alt+Tab' : 'Tab';
77
+ const datetime = page.locator('ion-datetime');
78
+ const monthYearButton = page.locator('.calendar-month-year ion-item');
79
+ const prevButton = page.locator('.calendar-next-prev ion-button:nth-child(1)');
80
+ const nextButton = page.locator('.calendar-next-prev ion-button:nth-child(2)');
81
+ const calendarMonthYear = page.locator('ion-datetime .calendar-month-year');
82
+ await page.keyboard.press(tabKey);
83
+ await expect(monthYearButton).toBeFocused();
84
+ await page.keyboard.press(tabKey);
85
+ await expect(prevButton).toBeFocused();
86
+ await page.keyboard.press(tabKey);
87
+ await expect(nextButton).toBeFocused();
88
+ // check value before & after selecting via keyboard
89
+ const initialValue = await datetime.evaluate((el) => el.value);
90
+ expect(initialValue).toBe('2022-02-22T16:30:00');
91
+ await expect(calendarMonthYear).toHaveText('February 2022');
92
+ await page.keyboard.press(tabKey);
93
+ await page.waitForChanges();
94
+ await page.keyboard.press('ArrowLeft');
95
+ await page.waitForChanges();
96
+ await expect(calendarMonthYear).toHaveText('January 2022');
97
+ await page.keyboard.press('Enter');
98
+ await page.waitForChanges();
99
+ const newValue = await datetime.evaluate((el) => el.value);
100
+ // should not have changed
101
+ expect(newValue).toBe('2022-02-22T16:30:00');
102
+ });
103
+ test('clear button should be disabled', async ({ page }) => {
104
+ await page.setContent(`
105
+
106
+ <ion-datetime value="2022-02-22T16:30:00" show-default-buttons="true" show-clear-button="true" readonly></ion-datetime>
107
+ `, config);
108
+ await page.waitForSelector('.datetime-ready');
109
+ const clearButton = page.locator('#clear-button button');
110
+ await expect(clearButton).toBeDisabled();
111
+ });
112
+ });
113
+ });
@@ -146,49 +146,37 @@
146
146
  margin-inline-end: auto;
147
147
  }
148
148
 
149
- @supports (inset-inline-start: 0) {
150
- :host(.fab-horizontal-start) {
151
- inset-inline-start: calc(10px + var(--ion-safe-area-left, 0px));
152
- }
149
+ :host(.fab-horizontal-start) {
150
+ /* stylelint-disable */
151
+ left: calc(10px + var(--ion-safe-area-left, 0px));
152
+ /* stylelint-enable */
153
153
  }
154
- @supports not (inset-inline-start: 0) {
155
- :host(.fab-horizontal-start) {
156
- left: calc(10px + var(--ion-safe-area-left, 0px));
157
- }
158
- :host-context([dir=rtl]):host(.fab-horizontal-start), :host-context([dir=rtl]).fab-horizontal-start {
154
+ :host-context([dir=rtl]):host(.fab-horizontal-start), :host-context([dir=rtl]).fab-horizontal-start {
155
+ right: calc(10px + var(--ion-safe-area-right, 0px));
156
+ left: unset;
157
+ }
158
+
159
+ @supports selector(:dir(rtl)) {
160
+ :host(.fab-horizontal-start:dir(rtl)) {
161
+ right: calc(10px + var(--ion-safe-area-right, 0px));
159
162
  left: unset;
160
- right: unset;
161
- right: calc(10px + var(--ion-safe-area-left, 0px));
162
- }
163
- @supports selector(:dir(rtl)) {
164
- :host(.fab-horizontal-start):dir(rtl) {
165
- left: unset;
166
- right: unset;
167
- right: calc(10px + var(--ion-safe-area-left, 0px));
168
- }
169
163
  }
170
164
  }
171
165
 
172
- @supports (inset-inline-start: 0) {
173
- :host(.fab-horizontal-end) {
174
- inset-inline-end: calc(10px + var(--ion-safe-area-right, 0px));
175
- }
166
+ :host(.fab-horizontal-end) {
167
+ /* stylelint-disable */
168
+ right: calc(10px + var(--ion-safe-area-right, 0px));
169
+ /* stylelint-enable */
176
170
  }
177
- @supports not (inset-inline-start: 0) {
178
- :host(.fab-horizontal-end) {
179
- right: calc(10px + var(--ion-safe-area-right, 0px));
180
- }
181
- :host-context([dir=rtl]):host(.fab-horizontal-end), :host-context([dir=rtl]).fab-horizontal-end {
182
- left: unset;
171
+ :host-context([dir=rtl]):host(.fab-horizontal-end), :host-context([dir=rtl]).fab-horizontal-end {
172
+ left: calc(10px + var(--ion-safe-area-left, 0px));
173
+ right: unset;
174
+ }
175
+
176
+ @supports selector(:dir(rtl)) {
177
+ :host(.fab-horizontal-end:dir(rtl)) {
178
+ left: calc(10px + var(--ion-safe-area-left, 0px));
183
179
  right: unset;
184
- left: calc(10px + var(--ion-safe-area-right, 0px));
185
- }
186
- @supports selector(:dir(rtl)) {
187
- :host(.fab-horizontal-end):dir(rtl) {
188
- left: unset;
189
- right: unset;
190
- left: calc(10px + var(--ion-safe-area-right, 0px));
191
- }
192
180
  }
193
181
  }
194
182
 
@@ -0,0 +1,63 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { expect } from "@playwright/test";
5
+ import { configs, test } from "../../../../utils/test/playwright/index";
6
+ configs({ modes: ['md'] }).forEach(({ title, screenshot, config }) => {
7
+ test.describe(title('fab: safe area'), () => {
8
+ test('should ignore document direction in safe area positioning for start-positioned fab', async ({ page }) => {
9
+ await page.setContent(`
10
+ <style>
11
+ :root {
12
+ --ion-safe-area-left: 40px;
13
+ --ion-safe-area-right: 20px;
14
+ }
15
+ </style>
16
+
17
+ <ion-content>
18
+ <ion-fab vertical="center" horizontal="start">
19
+ <ion-fab-button>
20
+ <ion-icon name="add"></ion-icon>
21
+ </ion-fab-button>
22
+ </ion-fab>
23
+ </ion-content>
24
+ `, config);
25
+ /**
26
+ * We need to capture the entire page to check the fab's position,
27
+ * but we don't need much extra white space.
28
+ */
29
+ await page.setViewportSize({
30
+ width: 200,
31
+ height: 200,
32
+ });
33
+ await expect(page).toHaveScreenshot(screenshot('fab-safe-area-horizontal-start'));
34
+ });
35
+ test('should ignore document direction in safe area positioning for end-positioned fab', async ({ page }) => {
36
+ await page.setContent(`
37
+ <style>
38
+ :root {
39
+ --ion-safe-area-left: 40px;
40
+ --ion-safe-area-right: 20px;
41
+ }
42
+ </style>
43
+
44
+ <ion-content>
45
+ <ion-fab vertical="center" horizontal="end">
46
+ <ion-fab-button>
47
+ <ion-icon name="add"></ion-icon>
48
+ </ion-fab-button>
49
+ </ion-fab>
50
+ </ion-content>
51
+ `, config);
52
+ /**
53
+ * We need to capture the entire page to check the fab's position,
54
+ * but we don't need much extra white space.
55
+ */
56
+ await page.setViewportSize({
57
+ width: 200,
58
+ height: 200,
59
+ });
60
+ await expect(page).toHaveScreenshot(screenshot('fab-safe-area-horizontal-end'));
61
+ });
62
+ });
63
+ });
@@ -155,7 +155,7 @@
155
155
  left: 0;
156
156
  }
157
157
  @supports selector(:dir(rtl)) {
158
- :host(.fab-list-side-start):dir(rtl) {
158
+ :host(.fab-list-side-start:dir(rtl)) {
159
159
  left: unset;
160
160
  right: unset;
161
161
  left: 0;
@@ -187,7 +187,7 @@
187
187
  right: 0;
188
188
  }
189
189
  @supports selector(:dir(rtl)) {
190
- :host(.fab-list-side-end):dir(rtl) {
190
+ :host(.fab-list-side-end:dir(rtl)) {
191
191
  left: unset;
192
192
  right: unset;
193
193
  right: 0;
@@ -194,7 +194,10 @@ ion-header ion-toolbar:first-of-type {
194
194
  * 2. This will only apply when that content has a collapse header (ion-header[collapse="condense"])
195
195
  *
196
196
  * We use opacity: 0 to avoid a layout shift.
197
+ * We target both the attribute and the class in the event that the attribute
198
+ * is not reflected on the host in some frameworks.
197
199
  */
198
- ion-header:not(.header-collapse-main):has(~ ion-content ion-header[collapse=condense]) {
200
+ ion-header:not(.header-collapse-main):has(~ ion-content ion-header[collapse=condense],
201
+ ~ ion-content ion-header.header-collapse-condense) {
199
202
  opacity: 0;
200
203
  }
@@ -121,6 +121,20 @@
121
121
  --highlight-color-focused: var(--ion-color-base);
122
122
  }
123
123
 
124
+ :host(:not(.legacy-input)) {
125
+ min-height: 44px;
126
+ }
127
+
128
+ /**
129
+ * Since the label sits on top of the element,
130
+ * the component needs to be taller otherwise the
131
+ * label will appear too close to the input text.
132
+ */
133
+ :host(.input-label-placement-floating),
134
+ :host(.input-label-placement-stacked) {
135
+ min-height: 56px;
136
+ }
137
+
124
138
  .native-input {
125
139
  padding-left: 0;
126
140
  padding-right: 0;
@@ -576,7 +590,7 @@
576
590
  }
577
591
 
578
592
  @supports selector(:dir(rtl)) {
579
- :host(.input-label-placement-stacked) .label-text-wrapper:dir(rtl), :host(.input-label-placement-floating) .label-text-wrapper:dir(rtl) {
593
+ :host(.input-label-placement-stacked:dir(rtl)) .label-text-wrapper, :host(.input-label-placement-floating:dir(rtl)) .label-text-wrapper {
580
594
  transform-origin: right top;
581
595
  }
582
596
  }
@@ -720,20 +734,6 @@
720
734
  height: 18px;
721
735
  }
722
736
 
723
- :host(:not(.legacy-input)) {
724
- min-height: 44px;
725
- }
726
-
727
- /**
728
- * Since the label sits on top of the element,
729
- * the component needs to be taller otherwise the
730
- * label will appear too close to the input text.
731
- */
732
- :host(.input-label-placement-floating),
733
- :host(.input-label-placement-stacked) {
734
- min-height: 56px;
735
- }
736
-
737
737
  :host(.legacy-input) .native-input[disabled],
738
738
  :host(.input-disabled) {
739
739
  opacity: 0.3;
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { Build, Host, forceUpdate, h } from "@stencil/core";
5
5
  import { createLegacyFormController, createNotchController } from "../../utils/forms/index";
6
- import { inheritAriaAttributes, debounceEvent, findItemLabel, inheritAttributes } from "../../utils/helpers";
6
+ import { inheritAriaAttributes, debounceEvent, findItemLabel, inheritAttributes, componentOnReady, } from "../../utils/helpers";
7
7
  import { printIonWarning } from "../../utils/logging/index";
8
8
  import { createSlotMutationController } from "../../utils/slot-mutation-controller";
9
9
  import { createColorClasses, hostContext } from "../../utils/theme";
@@ -207,7 +207,14 @@ export class Input {
207
207
  /**
208
208
  * Returns the native `<input>` element used under the hood.
209
209
  */
210
- getInputElement() {
210
+ async getInputElement() {
211
+ /**
212
+ * If this gets called in certain early lifecycle hooks (ex: Vue onMounted),
213
+ * nativeInput won't be defined yet with the custom elements build, so wait for it to load in.
214
+ */
215
+ if (!this.nativeInput) {
216
+ await new Promise((resolve) => componentOnReady(this.el, resolve));
217
+ }
211
218
  return Promise.resolve(this.nativeInput);
212
219
  }
213
220
  /**
@@ -121,6 +121,20 @@
121
121
  --highlight-color-focused: var(--ion-color-base);
122
122
  }
123
123
 
124
+ :host(:not(.legacy-input)) {
125
+ min-height: 44px;
126
+ }
127
+
128
+ /**
129
+ * Since the label sits on top of the element,
130
+ * the component needs to be taller otherwise the
131
+ * label will appear too close to the input text.
132
+ */
133
+ :host(.input-label-placement-floating),
134
+ :host(.input-label-placement-stacked) {
135
+ min-height: 56px;
136
+ }
137
+
124
138
  .native-input {
125
139
  padding-left: 0;
126
140
  padding-right: 0;
@@ -576,7 +590,7 @@
576
590
  }
577
591
 
578
592
  @supports selector(:dir(rtl)) {
579
- :host(.input-label-placement-stacked) .label-text-wrapper:dir(rtl), :host(.input-label-placement-floating) .label-text-wrapper:dir(rtl) {
593
+ :host(.input-label-placement-stacked:dir(rtl)) .label-text-wrapper, :host(.input-label-placement-floating:dir(rtl)) .label-text-wrapper {
580
594
  transform-origin: right top;
581
595
  }
582
596
  }
@@ -734,6 +748,7 @@
734
748
  --border-radius: 4px;
735
749
  --padding-start: 16px;
736
750
  --padding-end: 16px;
751
+ min-height: 56px;
737
752
  }
738
753
 
739
754
  /**
@@ -796,7 +811,7 @@
796
811
  }
797
812
 
798
813
  @supports selector(:dir(rtl)) {
799
- :host(.input-fill-solid) .input-wrapper:dir(rtl) {
814
+ :host(.input-fill-solid:dir(rtl)) .input-wrapper {
800
815
  border-top-left-radius: var(--border-radius);
801
816
  border-top-right-radius: var(--border-radius);
802
817
  border-bottom-right-radius: 0px;
@@ -852,6 +867,7 @@
852
867
  --border-radius: 4px;
853
868
  --padding-start: 16px;
854
869
  --padding-end: 16px;
870
+ min-height: 56px;
855
871
  }
856
872
 
857
873
  :host(.input-fill-outline.input-shape-round) {
@@ -920,7 +936,7 @@
920
936
  }
921
937
 
922
938
  @supports selector(:dir(rtl)) {
923
- :host(.input-fill-outline.input-label-placement-stacked) .label-text-wrapper:dir(rtl), :host(.input-fill-outline.input-label-placement-floating) .label-text-wrapper:dir(rtl) {
939
+ :host(.input-fill-outline.input-label-placement-stacked:dir(rtl)) .label-text-wrapper, :host(.input-fill-outline.input-label-placement-floating:dir(rtl)) .label-text-wrapper {
924
940
  transform-origin: right top;
925
941
  }
926
942
  }
@@ -1057,7 +1073,7 @@
1057
1073
  }
1058
1074
 
1059
1075
  @supports selector(:dir(rtl)) {
1060
- :host(.input-fill-outline) .input-outline-start:dir(rtl) {
1076
+ :host(.input-fill-outline:dir(rtl)) .input-outline-start {
1061
1077
  border-top-left-radius: 0px;
1062
1078
  border-top-right-radius: var(--border-radius);
1063
1079
  border-bottom-right-radius: var(--border-radius);
@@ -1086,7 +1102,7 @@
1086
1102
  }
1087
1103
 
1088
1104
  @supports selector(:dir(rtl)) {
1089
- :host(.input-fill-outline) .input-outline-end:dir(rtl) {
1105
+ :host(.input-fill-outline:dir(rtl)) .input-outline-end {
1090
1106
  border-top-left-radius: var(--border-radius);
1091
1107
  border-top-right-radius: 0px;
1092
1108
  border-bottom-right-radius: 0px;
@@ -1182,10 +1198,6 @@
1182
1198
  letter-spacing: 0.0333333333em;
1183
1199
  }
1184
1200
 
1185
- :host(:not(.legacy-input)) {
1186
- min-height: 56px;
1187
- }
1188
-
1189
1201
  /**
1190
1202
  * When the input is focused the label should
1191
1203
  * take on the highlight color. This should
@@ -1267,7 +1279,7 @@
1267
1279
  right: 0;
1268
1280
  }
1269
1281
  @supports selector(:dir(rtl)) {
1270
- :host(.in-item) .input-highlight:dir(rtl) {
1282
+ :host(.in-item:dir(rtl)) .input-highlight {
1271
1283
  left: unset;
1272
1284
  right: unset;
1273
1285
  right: 0;
@@ -188,10 +188,6 @@
188
188
  margin-right: 0;
189
189
  margin-top: 0;
190
190
  margin-bottom: 0;
191
- -webkit-padding-start: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
192
- padding-inline-start: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
193
- -webkit-padding-end: var(--padding-end);
194
- padding-inline-end: var(--padding-end);
195
191
  padding-top: var(--padding-top);
196
192
  padding-bottom: var(--padding-bottom);
197
193
  font-family: inherit;
@@ -206,6 +202,10 @@
206
202
  text-align: inherit;
207
203
  white-space: inherit;
208
204
  color: inherit;
205
+ /* stylelint-disable */
206
+ padding-right: var(--padding-end);
207
+ padding-left: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
208
+ /* stylelint-enable */
209
209
  display: flex;
210
210
  position: relative;
211
211
  align-items: inherit;
@@ -222,6 +222,22 @@
222
222
  box-sizing: border-box;
223
223
  z-index: 1;
224
224
  }
225
+ :host-context([dir=rtl]) .item-native {
226
+ padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
227
+ padding-left: var(--padding-end);
228
+ }
229
+
230
+ [dir=rtl] .item-native {
231
+ padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
232
+ padding-left: var(--padding-end);
233
+ }
234
+
235
+ @supports selector(:dir(rtl)) {
236
+ .item-native:dir(rtl) {
237
+ padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
238
+ padding-left: var(--padding-end);
239
+ }
240
+ }
225
241
 
226
242
  .item-native::-moz-focus-inner {
227
243
  border: 0;
@@ -250,12 +266,12 @@ button, a {
250
266
  margin-right: 0;
251
267
  margin-top: 0;
252
268
  margin-bottom: 0;
253
- -webkit-padding-start: var(--inner-padding-start);
254
- padding-inline-start: var(--inner-padding-start);
255
- -webkit-padding-end: calc(var(--ion-safe-area-right, 0px) + var(--inner-padding-end));
256
- padding-inline-end: calc(var(--ion-safe-area-right, 0px) + var(--inner-padding-end));
257
269
  padding-top: var(--inner-padding-top);
258
270
  padding-bottom: var(--inner-padding-bottom);
271
+ /* stylelint-disable */
272
+ padding-right: calc(var(--ion-safe-area-right, 0px) + var(--inner-padding-end));
273
+ padding-left: var(--inner-padding-start);
274
+ /* stylelint-enable */
259
275
  display: flex;
260
276
  position: relative;
261
277
  flex: 1;
@@ -270,21 +286,53 @@ button, a {
270
286
  overflow: inherit;
271
287
  box-sizing: border-box;
272
288
  }
289
+ :host-context([dir=rtl]) .item-inner {
290
+ padding-right: var(--inner-padding-start);
291
+ padding-left: calc(var(--ion-safe-area-left, 0px) + var(--inner-padding-end));
292
+ }
293
+
294
+ [dir=rtl] .item-inner {
295
+ padding-right: var(--inner-padding-start);
296
+ padding-left: calc(var(--ion-safe-area-left, 0px) + var(--inner-padding-end));
297
+ }
298
+
299
+ @supports selector(:dir(rtl)) {
300
+ .item-inner:dir(rtl) {
301
+ padding-right: var(--inner-padding-start);
302
+ padding-left: calc(var(--ion-safe-area-left, 0px) + var(--inner-padding-end));
303
+ }
304
+ }
273
305
 
274
306
  .item-bottom {
275
307
  margin-left: 0;
276
308
  margin-right: 0;
277
309
  margin-top: 0;
278
310
  margin-bottom: 0;
279
- -webkit-padding-start: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
280
- padding-inline-start: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
281
- -webkit-padding-end: var(--inner-padding-end);
282
- padding-inline-end: var(--inner-padding-end);
283
311
  padding-top: 0;
284
312
  padding-bottom: 0;
313
+ /* stylelint-disable */
314
+ padding-left: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
315
+ padding-right: calc(var(--inner-padding-end) + var(--ion-safe-area-right, 0px));
316
+ /* stylelint-enable */
285
317
  display: flex;
286
318
  justify-content: space-between;
287
319
  }
320
+ :host-context([dir=rtl]) .item-bottom {
321
+ padding-left: calc(var(--inner-padding-end) + var(--ion-safe-area-left, 0px));
322
+ padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
323
+ }
324
+
325
+ [dir=rtl] .item-bottom {
326
+ padding-left: calc(var(--inner-padding-end) + var(--ion-safe-area-left, 0px));
327
+ padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
328
+ }
329
+
330
+ @supports selector(:dir(rtl)) {
331
+ .item-bottom:dir(rtl) {
332
+ padding-left: calc(var(--inner-padding-end) + var(--ion-safe-area-left, 0px));
333
+ padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
334
+ }
335
+ }
288
336
 
289
337
  .item-detail-icon {
290
338
  /**