@ionic/core 7.6.2-dev.11705694334.11b34c62 → 7.6.2-dev.11706202387.1dfcd9b8

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 (404) hide show
  1. package/components/action-sheet.js +4 -4
  2. package/components/alert.js +2 -2
  3. package/components/animation.js +1 -16
  4. package/components/button-active.js +1 -1
  5. package/components/button.js +2 -2
  6. package/components/checkbox.js +2 -2
  7. package/components/ion-back-button.js +1 -1
  8. package/components/ion-badge.js +2 -2
  9. package/components/ion-content.js +2 -3
  10. package/components/ion-datetime-button.js +4 -4
  11. package/components/ion-datetime.js +1 -1
  12. package/components/ion-fab-button.js +2 -2
  13. package/components/ion-input.js +2 -2
  14. package/components/ion-item-option.js +2 -2
  15. package/components/ion-item-sliding.js +7 -128
  16. package/components/ion-loading.js +1 -1
  17. package/components/ion-menu-button.js +1 -1
  18. package/components/ion-menu.js +21 -15
  19. package/components/ion-modal.js +1 -1
  20. package/components/ion-nav.js +7 -3
  21. package/components/ion-picker-legacy.js +2 -2
  22. package/components/ion-progress-bar.js +2 -5
  23. package/components/ion-range.js +2 -2
  24. package/components/ion-refresher-content.js +1 -1
  25. package/components/ion-refresher.js +1 -1
  26. package/components/ion-router-link.js +1 -1
  27. package/components/ion-searchbar.js +1 -1
  28. package/components/ion-segment-button.js +1 -1
  29. package/components/ion-select.js +2 -2
  30. package/components/ion-split-pane.js +26 -15
  31. package/components/ion-tab-bar.js +2 -2
  32. package/components/ion-tab-button.js +1 -1
  33. package/components/ion-textarea.js +2 -2
  34. package/components/ion-toast.js +2 -2
  35. package/components/ion-toggle.js +2 -2
  36. package/components/item.js +2 -2
  37. package/components/label.js +1 -1
  38. package/components/picker-column2.js +1 -1
  39. package/components/radio.js +2 -2
  40. package/components/select-popover.js +1 -1
  41. package/css/core.css +101 -34
  42. package/css/core.css.map +1 -1
  43. package/css/global.bundle.css +1 -1
  44. package/css/ionic.bundle.css +1 -1
  45. package/css/ionic.bundle.css.map +1 -1
  46. package/css/themes/dark.always.css +122 -0
  47. package/css/themes/dark.always.css.map +1 -0
  48. package/css/themes/dark.class.css +122 -0
  49. package/css/themes/dark.class.css.map +1 -0
  50. package/css/themes/dark.css +3 -0
  51. package/css/themes/dark.css.map +1 -0
  52. package/css/themes/dark.system.css +124 -0
  53. package/css/themes/dark.system.css.map +1 -0
  54. package/css/typography.css +1 -1
  55. package/dist/cjs/{animation-8a4f9df4.js → animation-9b401d39.js} +0 -16
  56. package/dist/cjs/{button-active-466dfc8a.js → button-active-5bf1cac0.js} +1 -1
  57. package/dist/cjs/{index-d8b5d5f9.js → index-17ab7794.js} +2 -2
  58. package/dist/cjs/{index-8023641e.js → index-3b012034.js} +1 -1
  59. package/dist/cjs/index.cjs.js +5 -5
  60. package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -6
  61. package/dist/cjs/ion-alert.cjs.entry.js +4 -4
  62. package/dist/cjs/ion-app_8.cjs.entry.js +3 -4
  63. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  64. package/dist/cjs/ion-back-button.cjs.entry.js +1 -1
  65. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  66. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  67. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
  68. package/dist/cjs/ion-datetime_3.cjs.entry.js +5 -5
  69. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-input.cjs.entry.js +2 -2
  71. package/dist/cjs/ion-item-option_3.cjs.entry.js +10 -130
  72. package/dist/cjs/ion-item_8.cjs.entry.js +3 -3
  73. package/dist/cjs/ion-loading.cjs.entry.js +2 -2
  74. package/dist/cjs/ion-menu_3.cjs.entry.js +24 -19
  75. package/dist/cjs/ion-modal.cjs.entry.js +3 -3
  76. package/dist/cjs/ion-nav_2.cjs.entry.js +6 -3
  77. package/dist/cjs/ion-popover.cjs.entry.js +2 -2
  78. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -5
  79. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  80. package/dist/cjs/ion-range.cjs.entry.js +2 -2
  81. package/dist/cjs/ion-refresher_2.cjs.entry.js +3 -3
  82. package/dist/cjs/ion-route_4.cjs.entry.js +1 -1
  83. package/dist/cjs/ion-searchbar.cjs.entry.js +1 -1
  84. package/dist/cjs/ion-segment_2.cjs.entry.js +1 -1
  85. package/dist/cjs/ion-select_3.cjs.entry.js +3 -3
  86. package/dist/cjs/ion-split-pane.cjs.entry.js +24 -14
  87. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +3 -3
  88. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  89. package/dist/cjs/ion-toast.cjs.entry.js +3 -3
  90. package/dist/cjs/ion-toggle.cjs.entry.js +2 -2
  91. package/dist/cjs/ionic.cjs.js +1 -1
  92. package/dist/cjs/{ios.transition-34cad0cb.js → ios.transition-b5353f3e.js} +2 -2
  93. package/dist/cjs/loader.cjs.js +1 -1
  94. package/dist/cjs/{md.transition-5bcc289d.js → md.transition-67157dd9.js} +2 -2
  95. package/dist/collection/components/action-sheet/action-sheet.ios.css +5 -12
  96. package/dist/collection/components/action-sheet/action-sheet.js +2 -2
  97. package/dist/collection/components/action-sheet/action-sheet.md.css +2 -9
  98. package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +23 -14
  99. package/dist/collection/components/action-sheet/test/basic/action-sheet-rendering.e2e.js +0 -19
  100. package/dist/collection/components/action-sheet/test/basic/action-sheet.spec.js +0 -22
  101. package/dist/collection/components/alert/alert.ios.css +27 -28
  102. package/dist/collection/components/alert/alert.md.css +6 -6
  103. package/dist/collection/components/alert/test/a11y/alert.e2e.js +22 -9
  104. package/dist/collection/components/back-button/back-button.ios.css +1 -1
  105. package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +21 -0
  106. package/dist/collection/components/badge/badge.ios.css +1 -1
  107. package/dist/collection/components/badge/badge.md.css +1 -1
  108. package/dist/collection/components/badge/test/a11y/badge.e2e.js +18 -0
  109. package/dist/collection/components/button/button.ios.css +10 -10
  110. package/dist/collection/components/button/button.md.css +8 -8
  111. package/dist/collection/components/button/test/a11y/button.e2e.js +48 -0
  112. package/dist/collection/components/checkbox/checkbox.ios.css +5 -5
  113. package/dist/collection/components/checkbox/checkbox.md.css +3 -2
  114. package/dist/collection/components/checkbox/test/a11y/checkbox.e2e.js +11 -2
  115. package/dist/collection/components/checkbox/test/basic/checkbox.e2e.js +0 -10
  116. package/dist/collection/components/content/content.js +2 -3
  117. package/dist/collection/components/datetime/datetime.ios.css +2 -3
  118. package/dist/collection/components/datetime-button/{datetime-button.md.css → datetime-button.css} +6 -9
  119. package/dist/collection/components/datetime-button/datetime-button.js +4 -4
  120. package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +0 -12
  121. package/dist/collection/components/fab-button/fab-button.ios.css +13 -13
  122. package/dist/collection/components/fab-button/fab-button.md.css +4 -4
  123. package/dist/collection/components/fab-button/test/a11y/fab-button.e2e.js +50 -0
  124. package/dist/collection/components/input/input.ios.css +3 -3
  125. package/dist/collection/components/input/input.md.css +3 -3
  126. package/dist/collection/components/input/test/a11y/input.e2e.js +41 -3
  127. package/dist/collection/components/item/item.ios.css +3 -3
  128. package/dist/collection/components/item/item.md.css +4 -4
  129. package/dist/collection/components/item-option/item-option.ios.css +2 -2
  130. package/dist/collection/components/item-option/item-option.md.css +1 -1
  131. package/dist/collection/components/item-sliding/item-sliding.css +4 -8
  132. package/dist/collection/components/item-sliding/item-sliding.js +6 -89
  133. package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +28 -0
  134. package/dist/collection/components/item-sliding/test/basic/item-sliding.e2e.js +25 -62
  135. package/dist/collection/components/label/label.md.css +1 -1
  136. package/dist/collection/components/label/test/a11y/label.e2e.js +20 -0
  137. package/dist/collection/components/loading/loading.md.css +1 -1
  138. package/dist/collection/components/loading/test/a11y/loading.e2e.js +21 -5
  139. package/dist/collection/components/menu/menu.ios.css +64 -3
  140. package/dist/collection/components/menu/menu.js +19 -13
  141. package/dist/collection/components/menu/menu.md.css +64 -3
  142. package/dist/collection/components/menu-button/menu-button.ios.css +1 -1
  143. package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +14 -0
  144. package/dist/collection/components/modal/gestures/swipe-to-close.js +1 -1
  145. package/dist/collection/components/nav/nav.js +22 -2
  146. package/dist/collection/components/nav/test/nav-controller.spec.js +36 -36
  147. package/dist/collection/components/picker-legacy/picker.ios.css +1 -1
  148. package/dist/collection/components/picker-legacy/picker.md.css +1 -1
  149. package/dist/collection/components/picker-legacy-column/picker-column.md.css +1 -1
  150. package/dist/collection/components/progress-bar/progress-bar.ios.css +11 -17
  151. package/dist/collection/components/progress-bar/progress-bar.js +0 -3
  152. package/dist/collection/components/progress-bar/progress-bar.md.css +10 -8
  153. package/dist/collection/components/progress-bar/test/a11y/progress-bar.e2e.js +24 -0
  154. package/dist/collection/components/radio/radio.ios.css +2 -2
  155. package/dist/collection/components/radio/radio.md.css +2 -2
  156. package/dist/collection/components/radio/test/a11y/radio.e2e.js +101 -68
  157. package/dist/collection/components/range/range.ios.css +1 -1
  158. package/dist/collection/components/range/range.md.css +3 -3
  159. package/dist/collection/components/range/test/a11y/range.e2e.js +18 -8
  160. package/dist/collection/components/refresher/refresher.md.css +2 -2
  161. package/dist/collection/components/refresher/test/a11y/refresher.e2e.js +25 -0
  162. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  163. package/dist/collection/components/router-link/router-link.css +1 -1
  164. package/dist/collection/components/router-link/test/a11y/router-link.e2e.js +23 -0
  165. package/dist/collection/components/searchbar/searchbar.ios.css +4 -4
  166. package/dist/collection/components/segment/test/a11y/segment.e2e.js +23 -0
  167. package/dist/collection/components/segment-button/segment-button.md.css +2 -2
  168. package/dist/collection/components/select/select.ios.css +3 -3
  169. package/dist/collection/components/select/select.md.css +3 -3
  170. package/dist/collection/components/select/test/a11y/select.e2e.js +68 -4
  171. package/dist/collection/components/select-popover/select-popover.md.css +4 -4
  172. package/dist/collection/components/select-popover/test/a11y/select-popover.e2e.js +32 -0
  173. package/dist/collection/components/split-pane/split-pane.ios.css +1 -53
  174. package/dist/collection/components/split-pane/split-pane.js +46 -12
  175. package/dist/collection/components/split-pane/split-pane.md.css +1 -53
  176. package/dist/collection/components/split-pane/test/wrapped-menu/split-pane.e2e.js +41 -0
  177. package/dist/collection/components/tab-bar/tab-bar.ios.css +1 -1
  178. package/dist/collection/components/tab-bar/tab-bar.md.css +1 -1
  179. package/dist/collection/components/tab-button/tab-button.ios.css +1 -6
  180. package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +41 -3
  181. package/dist/collection/components/textarea/textarea.ios.css +3 -3
  182. package/dist/collection/components/textarea/textarea.md.css +3 -3
  183. package/dist/collection/components/toast/test/a11y/toast.e2e.js +56 -24
  184. package/dist/collection/components/toast/toast.ios.css +1 -1
  185. package/dist/collection/components/toast/toast.md.css +2 -2
  186. package/dist/collection/components/toggle/test/a11y/toggle.e2e.js +8 -2
  187. package/dist/collection/components/toggle/toggle.ios.css +8 -8
  188. package/dist/collection/components/toggle/toggle.md.css +2 -2
  189. package/dist/collection/css/test/a11y/typography.e2e.js +18 -0
  190. package/dist/collection/themes/test/colors/theme.e2e.js +114 -0
  191. package/dist/collection/utils/animation/animation.js +0 -15
  192. package/dist/collection/utils/gesture/button-active.js +1 -1
  193. package/dist/collection/utils/test/playwright/generator.js +1 -0
  194. package/dist/collection/utils/test/playwright/page/utils/set-content.js +1 -1
  195. package/dist/docs.json +29 -34
  196. package/dist/esm/{animation-ccab0993.js → animation-dde8cc0d.js} +1 -16
  197. package/dist/esm/{button-active-2758ff14.js → button-active-48379dd2.js} +1 -1
  198. package/dist/esm/{index-b7e9478d.js → index-1193f005.js} +1 -1
  199. package/dist/esm/{index-9dbb78a4.js → index-4743453d.js} +2 -2
  200. package/dist/esm/index.js +5 -5
  201. package/dist/esm/ion-action-sheet.entry.js +6 -6
  202. package/dist/esm/ion-alert.entry.js +4 -4
  203. package/dist/esm/ion-app_8.entry.js +3 -4
  204. package/dist/esm/ion-avatar_3.entry.js +2 -2
  205. package/dist/esm/ion-back-button.entry.js +1 -1
  206. package/dist/esm/ion-button_2.entry.js +2 -2
  207. package/dist/esm/ion-checkbox.entry.js +2 -2
  208. package/dist/esm/ion-datetime-button.entry.js +4 -4
  209. package/dist/esm/ion-datetime_3.entry.js +5 -5
  210. package/dist/esm/ion-fab_3.entry.js +2 -2
  211. package/dist/esm/ion-input.entry.js +2 -2
  212. package/dist/esm/ion-item-option_3.entry.js +10 -130
  213. package/dist/esm/ion-item_8.entry.js +3 -3
  214. package/dist/esm/ion-loading.entry.js +2 -2
  215. package/dist/esm/ion-menu_3.entry.js +24 -19
  216. package/dist/esm/ion-modal.entry.js +3 -3
  217. package/dist/esm/ion-nav_2.entry.js +6 -3
  218. package/dist/esm/ion-popover.entry.js +2 -2
  219. package/dist/esm/ion-progress-bar.entry.js +2 -5
  220. package/dist/esm/ion-radio_2.entry.js +2 -2
  221. package/dist/esm/ion-range.entry.js +2 -2
  222. package/dist/esm/ion-refresher_2.entry.js +3 -3
  223. package/dist/esm/ion-route_4.entry.js +1 -1
  224. package/dist/esm/ion-searchbar.entry.js +1 -1
  225. package/dist/esm/ion-segment_2.entry.js +1 -1
  226. package/dist/esm/ion-select_3.entry.js +3 -3
  227. package/dist/esm/ion-split-pane.entry.js +24 -14
  228. package/dist/esm/ion-tab-bar_2.entry.js +3 -3
  229. package/dist/esm/ion-textarea.entry.js +2 -2
  230. package/dist/esm/ion-toast.entry.js +3 -3
  231. package/dist/esm/ion-toggle.entry.js +2 -2
  232. package/dist/esm/ionic.js +1 -1
  233. package/dist/esm/{ios.transition-01176d76.js → ios.transition-3376ccb2.js} +2 -2
  234. package/dist/esm/loader.js +1 -1
  235. package/dist/esm/{md.transition-558655c7.js → md.transition-f992779f.js} +2 -2
  236. package/dist/esm-es5/animation-dde8cc0d.js +4 -0
  237. package/dist/esm-es5/button-active-48379dd2.js +4 -0
  238. package/dist/esm-es5/{index-b7e9478d.js → index-1193f005.js} +1 -1
  239. package/dist/esm-es5/{index-9dbb78a4.js → index-4743453d.js} +1 -1
  240. package/dist/esm-es5/index.js +1 -1
  241. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  242. package/dist/esm-es5/ion-alert.entry.js +1 -1
  243. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  244. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  245. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  246. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  247. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  248. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  249. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  250. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  251. package/dist/esm-es5/ion-input.entry.js +1 -1
  252. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  253. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  254. package/dist/esm-es5/ion-loading.entry.js +1 -1
  255. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  256. package/dist/esm-es5/ion-modal.entry.js +1 -1
  257. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  258. package/dist/esm-es5/ion-popover.entry.js +1 -1
  259. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  260. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  261. package/dist/esm-es5/ion-range.entry.js +1 -1
  262. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  263. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  264. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  265. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  266. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  267. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  268. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  269. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  270. package/dist/esm-es5/ion-toast.entry.js +1 -1
  271. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  272. package/dist/esm-es5/ionic.js +1 -1
  273. package/dist/esm-es5/{ios.transition-01176d76.js → ios.transition-3376ccb2.js} +1 -1
  274. package/dist/esm-es5/loader.js +1 -1
  275. package/dist/esm-es5/md.transition-f992779f.js +4 -0
  276. package/dist/html.html-data.json +0 -12
  277. package/dist/ionic/index.esm.js +1 -1
  278. package/dist/ionic/ionic.esm.js +1 -1
  279. package/dist/ionic/{p-7b4649d7.js → p-04377cfa.js} +1 -1
  280. package/dist/ionic/p-04d84d5d.entry.js +4 -0
  281. package/dist/ionic/p-068950da.entry.js +4 -0
  282. package/dist/ionic/p-0832dedf.entry.js +4 -0
  283. package/dist/ionic/{p-e755af39.system.js → p-0aa78a8d.system.js} +1 -1
  284. package/dist/ionic/p-11c55ac8.system.js +4 -0
  285. package/dist/ionic/p-124b6e41.system.entry.js +4 -0
  286. package/dist/ionic/p-19d9ceb8.system.js +1 -1
  287. package/dist/ionic/{p-c8f7e8c8.system.js → p-1ab2642a.system.js} +1 -1
  288. package/dist/ionic/p-1b60cc53.js +4 -0
  289. package/dist/ionic/{p-a1bd098f.system.entry.js → p-1c453add.system.entry.js} +1 -1
  290. package/dist/ionic/{p-11bf2ad0.system.entry.js → p-1d5b03e3.system.entry.js} +1 -1
  291. package/dist/ionic/p-24c3f2cd.system.entry.js +4 -0
  292. package/dist/ionic/{p-b68d435f.entry.js → p-2716d76c.entry.js} +1 -1
  293. package/dist/ionic/p-2724403e.entry.js +4 -0
  294. package/dist/ionic/p-283bc1a1.system.entry.js +4 -0
  295. package/dist/ionic/p-29d03b3a.js +4 -0
  296. package/dist/ionic/{p-abd5d0d5.system.entry.js → p-354682e8.system.entry.js} +1 -1
  297. package/dist/ionic/{p-19c379da.system.entry.js → p-3796194b.system.entry.js} +1 -1
  298. package/dist/ionic/{p-cf53213c.entry.js → p-385bb983.entry.js} +1 -1
  299. package/dist/ionic/p-38f2c6bb.system.js +4 -0
  300. package/dist/ionic/p-3af5faf8.system.entry.js +4 -0
  301. package/dist/ionic/{p-c75dc92f.js → p-44a56556.js} +1 -1
  302. package/dist/ionic/{p-7c7bc0cc.entry.js → p-4abb1251.entry.js} +1 -1
  303. package/dist/ionic/p-4eae8c91.entry.js +4 -0
  304. package/dist/ionic/{p-2316de85.system.entry.js → p-530bb2af.system.entry.js} +1 -1
  305. package/dist/ionic/p-56944895.entry.js +4 -0
  306. package/dist/ionic/{p-0e908476.system.entry.js → p-590447a5.system.entry.js} +1 -1
  307. package/dist/ionic/{p-f0eafd38.entry.js → p-5aec2208.entry.js} +1 -1
  308. package/dist/ionic/{p-26ff1180.entry.js → p-5cbfce20.entry.js} +1 -1
  309. package/dist/ionic/{p-3b043115.entry.js → p-5f1b0512.entry.js} +1 -1
  310. package/dist/ionic/{p-0dfa4ab4.system.entry.js → p-662a9a47.system.entry.js} +1 -1
  311. package/dist/ionic/p-713af1fe.entry.js +4 -0
  312. package/dist/ionic/{p-69ce8bba.system.entry.js → p-7dade589.system.entry.js} +1 -1
  313. package/dist/ionic/p-8a25bf30.system.entry.js +4 -0
  314. package/dist/ionic/{p-67e52d31.entry.js → p-8b160fba.entry.js} +1 -1
  315. package/dist/ionic/{p-799da666.entry.js → p-8e961825.entry.js} +1 -1
  316. package/dist/ionic/{p-20a4ee02.entry.js → p-92bfb607.entry.js} +1 -1
  317. package/dist/ionic/p-97aaf697.system.entry.js +4 -0
  318. package/dist/ionic/p-98f35d98.js +4 -0
  319. package/dist/ionic/p-9a68d8ef.system.js +4 -0
  320. package/dist/ionic/p-9a8bc8f3.system.entry.js +4 -0
  321. package/dist/ionic/{p-bb3fd397.entry.js → p-9c48f42f.entry.js} +1 -1
  322. package/dist/ionic/{p-614e63a9.system.entry.js → p-9f94e34a.system.entry.js} +1 -1
  323. package/dist/ionic/{p-7de7a5fd.system.js → p-a074be82.system.js} +1 -1
  324. package/dist/ionic/{p-7dcf795f.entry.js → p-a29db3a0.entry.js} +1 -1
  325. package/dist/ionic/{p-56b1a872.system.entry.js → p-a41eaff2.system.entry.js} +1 -1
  326. package/dist/ionic/{p-9093afb1.system.js → p-a49931aa.system.js} +1 -1
  327. package/dist/ionic/p-a6e5f54e.system.entry.js +4 -0
  328. package/dist/ionic/{p-6855f26a.entry.js → p-aa975ff8.entry.js} +1 -1
  329. package/dist/ionic/p-b231b7cf.system.entry.js +4 -0
  330. package/dist/ionic/p-b59fe3bd.system.entry.js +4 -0
  331. package/dist/ionic/p-b7e03ff0.system.entry.js +4 -0
  332. package/dist/ionic/{p-ba5d9e27.entry.js → p-bc01c384.entry.js} +1 -1
  333. package/dist/ionic/p-bec6ae40.entry.js +4 -0
  334. package/dist/ionic/{p-5dc16594.entry.js → p-c001b24f.entry.js} +1 -1
  335. package/dist/ionic/p-c16fbc5f.system.entry.js +4 -0
  336. package/dist/ionic/{p-0cc80201.entry.js → p-c6e9ef77.entry.js} +1 -1
  337. package/dist/ionic/p-cb3ef9c1.system.entry.js +4 -0
  338. package/dist/ionic/p-cb6a1fa0.system.entry.js +4 -0
  339. package/dist/ionic/p-cc1c26cc.entry.js +4 -0
  340. package/dist/ionic/{p-db05ecb6.system.entry.js → p-cc700688.system.entry.js} +1 -1
  341. package/dist/ionic/p-cd3e1a06.entry.js +4 -0
  342. package/dist/ionic/p-cd574dfa.js +4 -0
  343. package/dist/ionic/{p-da666998.system.entry.js → p-d01449a3.system.entry.js} +1 -1
  344. package/dist/ionic/{p-84b567a6.entry.js → p-d08e0136.entry.js} +1 -1
  345. package/dist/ionic/p-d1ad57d5.system.entry.js +4 -0
  346. package/dist/ionic/p-d2634efe.system.entry.js +4 -0
  347. package/dist/ionic/{p-41208f54.system.entry.js → p-d88ed181.system.entry.js} +1 -1
  348. package/dist/ionic/{p-10339dcc.entry.js → p-df6f50ef.entry.js} +1 -1
  349. package/dist/ionic/{p-d1ab26de.entry.js → p-e403ff07.entry.js} +1 -1
  350. package/dist/ionic/{p-ae4b7df8.entry.js → p-e9431a58.entry.js} +1 -1
  351. package/dist/ionic/{p-019e0d80.system.entry.js → p-ec0a9b2c.system.entry.js} +1 -1
  352. package/dist/ionic/{p-42925096.system.entry.js → p-f0dbd73e.system.entry.js} +1 -1
  353. package/dist/ionic/{p-806a9810.entry.js → p-f38c1f8d.entry.js} +1 -1
  354. package/dist/ionic/p-fc17f198.entry.js +4 -0
  355. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +0 -8
  356. package/dist/types/components/item-sliding/item-sliding.d.ts +0 -19
  357. package/dist/types/components/menu/menu.d.ts +11 -1
  358. package/dist/types/components/nav/nav.d.ts +4 -1
  359. package/dist/types/components/split-pane/split-pane.d.ts +14 -2
  360. package/dist/types/components.d.ts +5 -8
  361. package/dist/types/utils/animation/animation-interface.d.ts +0 -6
  362. package/dist/types/utils/animation/animation.d.ts +0 -2
  363. package/hydrate/index.js +115 -235
  364. package/package.json +1 -1
  365. package/dist/collection/components/datetime-button/datetime-button.ios.css +0 -107
  366. package/dist/collection/components/item-sliding/animations/item-sliding-options.js +0 -59
  367. package/dist/esm-es5/animation-ccab0993.js +0 -4
  368. package/dist/esm-es5/button-active-2758ff14.js +0 -4
  369. package/dist/esm-es5/md.transition-558655c7.js +0 -4
  370. package/dist/ionic/p-02dc8c5b.entry.js +0 -4
  371. package/dist/ionic/p-1a22895e.system.entry.js +0 -4
  372. package/dist/ionic/p-1c69a4ca.system.entry.js +0 -4
  373. package/dist/ionic/p-289f354c.entry.js +0 -4
  374. package/dist/ionic/p-2a3b87cd.entry.js +0 -4
  375. package/dist/ionic/p-2e01f1c5.system.entry.js +0 -4
  376. package/dist/ionic/p-38531958.system.entry.js +0 -4
  377. package/dist/ionic/p-3b434dee.system.entry.js +0 -4
  378. package/dist/ionic/p-44791cff.entry.js +0 -4
  379. package/dist/ionic/p-4981ea0a.system.entry.js +0 -4
  380. package/dist/ionic/p-5074a526.entry.js +0 -4
  381. package/dist/ionic/p-57785713.system.entry.js +0 -4
  382. package/dist/ionic/p-57e9de81.system.js +0 -4
  383. package/dist/ionic/p-6fb2b5e3.js +0 -4
  384. package/dist/ionic/p-80ad9792.system.js +0 -4
  385. package/dist/ionic/p-922c234e.js +0 -4
  386. package/dist/ionic/p-950c05ad.entry.js +0 -4
  387. package/dist/ionic/p-97a9d526.system.entry.js +0 -4
  388. package/dist/ionic/p-99d448ba.system.entry.js +0 -4
  389. package/dist/ionic/p-9c5e3a2c.system.entry.js +0 -4
  390. package/dist/ionic/p-a619ecad.entry.js +0 -4
  391. package/dist/ionic/p-b20717fc.system.entry.js +0 -4
  392. package/dist/ionic/p-b61d7624.entry.js +0 -4
  393. package/dist/ionic/p-b660ba8a.system.js +0 -4
  394. package/dist/ionic/p-ba2b1ef5.entry.js +0 -4
  395. package/dist/ionic/p-cd729946.js +0 -4
  396. package/dist/ionic/p-d2a73201.system.entry.js +0 -4
  397. package/dist/ionic/p-d3525765.js +0 -4
  398. package/dist/ionic/p-dc43a79e.entry.js +0 -4
  399. package/dist/ionic/p-ee71caaa.system.entry.js +0 -4
  400. package/dist/ionic/p-f25b4396.system.entry.js +0 -4
  401. package/dist/ionic/p-f65f4d3e.system.entry.js +0 -4
  402. package/dist/ionic/p-fd98debb.entry.js +0 -4
  403. package/dist/ionic/p-fe458994.system.entry.js +0 -4
  404. package/dist/types/components/item-sliding/animations/item-sliding-options.d.ts +0 -10
@@ -0,0 +1,32 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import AxeBuilder from "@axe-core/playwright";
5
+ import { expect } from "@playwright/test";
6
+ import { configs, test } from "../../../../utils/test/playwright/index";
7
+ configs({ directions: ['ltr'], themes: ['dark', 'light'] }).forEach(({ config, title }) => {
8
+ test.describe(title('select-popover: a11y'), () => {
9
+ test('should not have accessibility violations when header is defined', async ({ page }) => {
10
+ await page.setContent(`
11
+ <ion-popover is-open="true">
12
+ <ion-select-popover multiple="false"></ion-select-popover>
13
+ </ion-popover>
14
+
15
+ <script>
16
+ const selectPopover = document.querySelector('ion-select-popover');
17
+ selectPopover.options = [
18
+ { value: 'apple', text: 'Apple', disabled: false, checked: true },
19
+ { value: 'banana', text: 'Banana', disabled: false, checked: false },
20
+ ];
21
+ </script>
22
+ `, config);
23
+ const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent');
24
+ const popover = page.locator('ion-popover');
25
+ await popover.evaluate((el) => el.present());
26
+ await ionPopoverDidPresent.next();
27
+ // TODO(FW-5698): remove withRules() call and resolve Axe errors
28
+ const results = await new AxeBuilder({ page }).withRules('color-contrast').analyze();
29
+ expect(results.violations).toEqual([]);
30
+ });
31
+ });
32
+ });
@@ -127,51 +127,21 @@
127
127
  contain: strict;
128
128
  }
129
129
 
130
- /**
131
- * Do not pass CSS Variables down on larger
132
- * screens as we want them to affect the outer
133
- * `ion-menu` rather than the inner content
134
- */
135
- ::slotted(ion-menu.menu-pane-visible) {
136
- flex: 0 1 auto;
137
- width: var(--side-width);
138
- min-width: var(--side-min-width);
139
- max-width: var(--side-max-width);
140
- }
141
-
142
- :host(.split-pane-visible) ::slotted(.split-pane-side),
143
130
  :host(.split-pane-visible) ::slotted(.split-pane-main) {
144
131
  left: 0;
145
132
  right: 0;
146
133
  top: 0;
147
134
  bottom: 0;
148
135
  position: relative;
136
+ flex: 1;
149
137
  box-shadow: none;
150
138
  z-index: 0;
151
139
  }
152
140
 
153
- :host(.split-pane-visible) ::slotted(.split-pane-main) {
154
- flex: 1;
155
- }
156
-
157
- :host(.split-pane-visible) ::slotted(.split-pane-side:not(ion-menu)),
158
- :host(.split-pane-visible) ::slotted(ion-menu.split-pane-side.menu-enabled) {
159
- display: flex;
160
- flex-shrink: 0;
161
- }
162
-
163
141
  ::slotted(.split-pane-side:not(ion-menu)) {
164
142
  display: none;
165
143
  }
166
144
 
167
- :host(.split-pane-visible) ::slotted(.split-pane-side) {
168
- order: -1;
169
- }
170
-
171
- :host(.split-pane-visible) ::slotted(.split-pane-side[side=end]) {
172
- order: 1;
173
- }
174
-
175
145
  /**
176
146
  * Convert a font size to a dynamic font size.
177
147
  * Fonts that participate in Dynamic Type should use
@@ -231,26 +201,4 @@
231
201
  --border: 0.55px solid var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-250, #c8c7cc)));
232
202
  --side-min-width: 270px;
233
203
  --side-max-width: 28%;
234
- }
235
-
236
- :host(.split-pane-visible) ::slotted(.split-pane-side) {
237
- -webkit-border-start: 0;
238
- border-inline-start: 0;
239
- -webkit-border-end: var(--border);
240
- border-inline-end: var(--border);
241
- border-top: 0;
242
- border-bottom: 0;
243
- min-width: var(--side-min-width);
244
- max-width: var(--side-max-width);
245
- }
246
-
247
- :host(.split-pane-visible) ::slotted(.split-pane-side[side=end]) {
248
- -webkit-border-start: var(--border);
249
- border-inline-start: var(--border);
250
- -webkit-border-end: 0;
251
- border-inline-end: 0;
252
- border-top: 0;
253
- border-bottom: 0;
254
- min-width: var(--side-min-width);
255
- max-width: var(--side-max-width);
256
204
  }
@@ -22,8 +22,13 @@ export class SplitPane {
22
22
  this.when = QUERY['lg'];
23
23
  }
24
24
  visibleChanged(visible) {
25
- const detail = { visible, isPane: this.isPane.bind(this) };
26
- this.ionSplitPaneVisible.emit(detail);
25
+ this.ionSplitPaneVisible.emit({ visible });
26
+ }
27
+ /**
28
+ * @internal
29
+ */
30
+ async isVisible() {
31
+ return Promise.resolve(this.visible);
27
32
  }
28
33
  async connectedCallback() {
29
34
  // TODO: connectedCallback is fired in CE build
@@ -31,7 +36,7 @@ export class SplitPane {
31
36
  if (typeof customElements !== 'undefined' && customElements != null) {
32
37
  await customElements.whenDefined('ion-split-pane');
33
38
  }
34
- this.styleChildren();
39
+ this.styleMainElement();
35
40
  this.updateState();
36
41
  }
37
42
  disconnectedCallback() {
@@ -77,13 +82,16 @@ export class SplitPane {
77
82
  this.visible = mediaList.matches;
78
83
  }
79
84
  }
80
- isPane(element) {
81
- if (!this.visible) {
82
- return false;
83
- }
84
- return element.parentElement === this.el && element.classList.contains(SPLIT_PANE_SIDE);
85
- }
86
- styleChildren() {
85
+ /**
86
+ * Attempt to find the main content
87
+ * element inside of the split pane.
88
+ * If found, set it as the main node.
89
+ *
90
+ * We assume that the main node
91
+ * is available in the DOM on split
92
+ * pane load.
93
+ */
94
+ styleMainElement() {
87
95
  if (!Build.isBrowser) {
88
96
  return;
89
97
  }
@@ -99,9 +107,11 @@ export class SplitPane {
99
107
  console.warn('split pane cannot have more than one main node');
100
108
  return;
101
109
  }
102
- foundMain = true;
110
+ else {
111
+ setPaneClass(child, isMain);
112
+ foundMain = true;
113
+ }
103
114
  }
104
- setPaneClass(child, isMain);
105
115
  }
106
116
  if (!foundMain) {
107
117
  console.warn('split pane does not have a specified main node');
@@ -210,6 +220,30 @@ export class SplitPane {
210
220
  }
211
221
  }];
212
222
  }
223
+ static get methods() {
224
+ return {
225
+ "isVisible": {
226
+ "complexType": {
227
+ "signature": "() => Promise<boolean>",
228
+ "parameters": [],
229
+ "references": {
230
+ "Promise": {
231
+ "location": "global",
232
+ "id": "global::Promise"
233
+ }
234
+ },
235
+ "return": "Promise<boolean>"
236
+ },
237
+ "docs": {
238
+ "text": "",
239
+ "tags": [{
240
+ "name": "internal",
241
+ "text": undefined
242
+ }]
243
+ }
244
+ }
245
+ };
246
+ }
213
247
  static get elementRef() { return "el"; }
214
248
  static get watchers() {
215
249
  return [{
@@ -127,51 +127,21 @@
127
127
  contain: strict;
128
128
  }
129
129
 
130
- /**
131
- * Do not pass CSS Variables down on larger
132
- * screens as we want them to affect the outer
133
- * `ion-menu` rather than the inner content
134
- */
135
- ::slotted(ion-menu.menu-pane-visible) {
136
- flex: 0 1 auto;
137
- width: var(--side-width);
138
- min-width: var(--side-min-width);
139
- max-width: var(--side-max-width);
140
- }
141
-
142
- :host(.split-pane-visible) ::slotted(.split-pane-side),
143
130
  :host(.split-pane-visible) ::slotted(.split-pane-main) {
144
131
  left: 0;
145
132
  right: 0;
146
133
  top: 0;
147
134
  bottom: 0;
148
135
  position: relative;
136
+ flex: 1;
149
137
  box-shadow: none;
150
138
  z-index: 0;
151
139
  }
152
140
 
153
- :host(.split-pane-visible) ::slotted(.split-pane-main) {
154
- flex: 1;
155
- }
156
-
157
- :host(.split-pane-visible) ::slotted(.split-pane-side:not(ion-menu)),
158
- :host(.split-pane-visible) ::slotted(ion-menu.split-pane-side.menu-enabled) {
159
- display: flex;
160
- flex-shrink: 0;
161
- }
162
-
163
141
  ::slotted(.split-pane-side:not(ion-menu)) {
164
142
  display: none;
165
143
  }
166
144
 
167
- :host(.split-pane-visible) ::slotted(.split-pane-side) {
168
- order: -1;
169
- }
170
-
171
- :host(.split-pane-visible) ::slotted(.split-pane-side[side=end]) {
172
- order: 1;
173
- }
174
-
175
145
  /**
176
146
  * Convert a font size to a dynamic font size.
177
147
  * Fonts that participate in Dynamic Type should use
@@ -231,26 +201,4 @@
231
201
  --border: 1px solid var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.13))));
232
202
  --side-min-width: 270px;
233
203
  --side-max-width: 28%;
234
- }
235
-
236
- :host(.split-pane-visible) ::slotted(.split-pane-side) {
237
- -webkit-border-start: 0;
238
- border-inline-start: 0;
239
- -webkit-border-end: var(--border);
240
- border-inline-end: var(--border);
241
- border-top: 0;
242
- border-bottom: 0;
243
- min-width: var(--side-min-width);
244
- max-width: var(--side-max-width);
245
- }
246
-
247
- :host(.split-pane-visible) ::slotted(.split-pane-side[side=end]) {
248
- -webkit-border-start: var(--border);
249
- border-inline-start: var(--border);
250
- -webkit-border-end: 0;
251
- border-inline-end: 0;
252
- border-top: 0;
253
- border-bottom: 0;
254
- min-width: var(--side-min-width);
255
- max-width: var(--side-max-width);
256
204
  }
@@ -0,0 +1,41 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { expect } from "@playwright/test";
5
+ import { configs, test, Viewports } from "../../../../utils/test/playwright/index";
6
+ configs({ directions: ['ltr'], modes: ['ios'] }).forEach(({ title, config }) => {
7
+ test.describe(title('split-pane: functionality'), () => {
8
+ test('should be visible on larger viewports', async ({ page }) => {
9
+ test.info().annotations.push({
10
+ type: 'issue',
11
+ description: 'https://github.com/ionic-team/ionic-framework/issues/16304',
12
+ });
13
+ await page.setViewportSize(Viewports.large);
14
+ await page.goto(`/src/components/split-pane/test/wrapped-menu`, config);
15
+ const menu = page.locator('ion-menu');
16
+ await expect(menu).toBeVisible();
17
+ });
18
+ test('should be visible on larger viewports when added async', async ({ page }) => {
19
+ test.info().annotations.push({
20
+ type: 'issue',
21
+ description: 'https://github.com/ionic-team/ionic-framework/issues/16304',
22
+ });
23
+ await page.setViewportSize(Viewports.large);
24
+ await page.goto(`/src/components/split-pane/test/wrapped-menu`, config);
25
+ // Asynchronously add a second menu
26
+ await page.evaluate(() => {
27
+ const menu = document.createElement('app-menu');
28
+ menu.setAttribute('side', 'end');
29
+ const splitPane = document.querySelector('ion-split-pane');
30
+ splitPane.appendChild(menu);
31
+ });
32
+ const menus = page.locator('ion-menu');
33
+ const menuButton = page.locator('ion-menu-button');
34
+ await expect(menus).toHaveCount(2);
35
+ await expect(menus.nth(0)).toBeVisible();
36
+ await expect(menus.nth(1)).toBeVisible();
37
+ // Menu button should be hidden because menus are visible
38
+ await expect(menuButton).toBeHidden();
39
+ });
40
+ });
41
+ });
@@ -234,7 +234,7 @@
234
234
  --background-focused: var(--ion-tab-bar-background-focused, #e0e0e0);
235
235
  --border: 0.55px solid var(--ion-tab-bar-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.2))));
236
236
  --color: var(--ion-tab-bar-color, var(--ion-color-step-600, #666666));
237
- --color-selected: var(--ion-tab-bar-color-selected, var(--ion-color-primary, #3880ff));
237
+ --color-selected: var(--ion-tab-bar-color-selected, var(--ion-color-primary, #0054e9));
238
238
  height: 50px;
239
239
  }
240
240
 
@@ -234,6 +234,6 @@
234
234
  --background-focused: var(--ion-tab-bar-background-focused, #e0e0e0);
235
235
  --border: 1px solid var(--ion-tab-bar-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.07))));
236
236
  --color: var(--ion-tab-bar-color, var(--ion-color-step-650, #595959));
237
- --color-selected: var(--ion-tab-bar-color-selected, var(--ion-color-primary, #3880ff));
237
+ --color-selected: var(--ion-tab-bar-color-selected, var(--ion-color-primary, #0054e9));
238
238
  height: 56px;
239
239
  }
@@ -332,7 +332,7 @@ ion-ripple-effect {
332
332
  ::slotted(ion-icon) {
333
333
  margin-top: 2px;
334
334
  margin-bottom: 2px;
335
- font-size: 24px;
335
+ font-size: 30px;
336
336
  }
337
337
 
338
338
  ::slotted(ion-icon::before) {
@@ -474,9 +474,4 @@ ion-ripple-effect {
474
474
  margin-right: 0;
475
475
  margin-top: 0;
476
476
  margin-bottom: 0;
477
- }
478
-
479
- :host(.tab-layout-label-hide) ::slotted(ion-icon),
480
- :host(.tab-has-icon-only) ::slotted(ion-icon) {
481
- font-size: 30px;
482
477
  }
@@ -4,14 +4,52 @@
4
4
  import AxeBuilder from "@axe-core/playwright";
5
5
  import { expect } from "@playwright/test";
6
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
- configs({ directions: ['ltr'] }).forEach(({ title, config, screenshot }) => {
7
+ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
8
  test.describe(title('textarea: a11y'), () => {
9
- test('should not have accessibility violations', async ({ page }) => {
10
- await page.goto(`/src/components/textarea/test/a11y`, config);
9
+ test('default layout should not have accessibility violations', async ({ page }) => {
10
+ await page.setContent(`
11
+ <main>
12
+ <ion-textarea label="Label" placeholder="Placeholder"></ion-textarea>
13
+ <ion-textarea placeholder="Placeholder">
14
+ <div slot="label">Label"></div>
15
+ </ion-textarea>
16
+ <ion-textarea label="Label" value="My Text"></ion-textarea>
17
+ <ion-textarea aria-label="Label"></ion-textarea>
18
+ <ion-textarea label="Email" label-placement="floating" fill="solid" value="hi@ionic.io">
19
+ <ion-icon slot="start" name="lock-closed" aria-hidden="true"></ion-icon>
20
+ <ion-button slot="end" aria-label="button">
21
+ <ion-icon slot="icon-only" name="lock-closed" aria-hidden="true"></ion-icon>
22
+ </ion-button>
23
+ </ion-textarea>
24
+ </main>
25
+ `, config);
26
+ const results = await new AxeBuilder({ page }).analyze();
27
+ expect(results.violations).toEqual([]);
28
+ });
29
+ test('focused state should not have accessibility violations', async ({ page }) => {
30
+ /**
31
+ * The primary color against the focus background
32
+ * when using fill="solid" does not meet AA
33
+ * contrast guidelines so it excluded from the test.
34
+ * The contrast here is a significant improvement
35
+ * over what Ionic has had in the past, so the team
36
+ * has decided that this tradeoff is acceptable since
37
+ * the scope of the problem is limited to the focus
38
+ * state with the primary color when fill="solid".
39
+ */
40
+ await page.setContent(`
41
+ <main>
42
+ <ion-textarea class="has-focus" label="Label" value="My Text"></ion-textarea>
43
+ <ion-textarea class="has-focus" label-placement="floating" label="Label" value="My Text"></ion-textarea>
44
+ <ion-textarea class="has-focus" fill="outline" label-placement="floating" label="Label" value="My Text"></ion-textarea>
45
+ </main>
46
+ `, config);
11
47
  const results = await new AxeBuilder({ page }).analyze();
12
48
  expect(results.violations).toEqual([]);
13
49
  });
14
50
  });
51
+ });
52
+ configs({ directions: ['ltr'] }).forEach(({ title, config, screenshot }) => {
15
53
  test.describe(title('textarea: font scaling'), () => {
16
54
  test('should scale text on larger font sizes', async ({ page }) => {
17
55
  await page.setContent(`
@@ -91,9 +91,9 @@
91
91
  --padding-start: 0;
92
92
  --border-radius: 0;
93
93
  --border-style: solid;
94
- --highlight-color-focused: var(--ion-color-primary, #3880ff);
95
- --highlight-color-valid: var(--ion-color-success, #2dd36f);
96
- --highlight-color-invalid: var(--ion-color-danger, #eb445a);
94
+ --highlight-color-focused: var(--ion-color-primary, #0054e9);
95
+ --highlight-color-valid: var(--ion-color-success, #2dd55b);
96
+ --highlight-color-invalid: var(--ion-color-danger, #c5000f);
97
97
  /**
98
98
  * This is a private API that is used to switch
99
99
  * out the highlight color based on the state
@@ -91,9 +91,9 @@
91
91
  --padding-start: 0;
92
92
  --border-radius: 0;
93
93
  --border-style: solid;
94
- --highlight-color-focused: var(--ion-color-primary, #3880ff);
95
- --highlight-color-valid: var(--ion-color-success, #2dd36f);
96
- --highlight-color-invalid: var(--ion-color-danger, #eb445a);
94
+ --highlight-color-focused: var(--ion-color-primary, #0054e9);
95
+ --highlight-color-valid: var(--ion-color-success, #2dd55b);
96
+ --highlight-color-invalid: var(--ion-color-danger, #c5000f);
97
97
  /**
98
98
  * This is a private API that is used to switch
99
99
  * out the highlight color based on the state
@@ -4,6 +4,62 @@
4
4
  import AxeBuilder from "@axe-core/playwright";
5
5
  import { expect } from "@playwright/test";
6
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
+ configs({ directions: ['ltr'], themes: ['dark', 'light'] }).forEach(({ title, config }) => {
8
+ test.describe(title('toast: Axe testing'), () => {
9
+ test('should not have any axe violations with inline toasts', async ({ page }) => {
10
+ await page.setContent(`
11
+ <ion-toast></ion-toast>
12
+
13
+ <script>
14
+ const toast = document.querySelector('ion-toast');
15
+ toast.icon = 'person';
16
+ toast.header = 'Inline Toast Header';
17
+ toast.message = 'Inline Toast Message';
18
+ toast.buttons = ['OK'];
19
+ </script>
20
+ `, config);
21
+ const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
22
+ const toast = page.locator('ion-toast');
23
+ await toast.evaluate((el) => el.present());
24
+ await ionToastDidPresent.next();
25
+ const results = await new AxeBuilder({ page }).analyze();
26
+ expect(results.violations).toEqual([]);
27
+ });
28
+ test('should not have any axe violations with controller toasts', async ({ page }) => {
29
+ await page.setContent(`
30
+ <script type="module">
31
+ import { toastController } from '../../../../dist/ionic/index.esm.js';
32
+ window.toastController = toastController;
33
+ </script>
34
+
35
+ <ion-button onclick="presentToast()">Present</ion-button>
36
+
37
+ <script>
38
+ const presentToast = async () => {
39
+ // we only want to test color contrast on the toast itself
40
+ const button = document.querySelector('ion-button');
41
+ button.style.display = 'none';
42
+
43
+ const toast = await toastController.create({
44
+ icon: 'person',
45
+ header: 'Controller Toast Header',
46
+ message: 'Controller Toast Message',
47
+ buttons: ['OK']
48
+ });
49
+
50
+ await toast.present();
51
+ };
52
+ </script>
53
+ `, config);
54
+ const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
55
+ const button = page.locator('ion-button');
56
+ await button.click();
57
+ await ionToastDidPresent.next();
58
+ const results = await new AxeBuilder({ page }).analyze();
59
+ expect(results.violations).toEqual([]);
60
+ });
61
+ });
62
+ });
7
63
  /**
8
64
  * This test does not check LTR vs RTL layouts
9
65
  */
@@ -12,30 +68,6 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
12
68
  test.beforeEach(async ({ page }) => {
13
69
  await page.goto(`/src/components/toast/test/a11y`, config);
14
70
  });
15
- test('should not have any axe violations with inline toasts', async ({ page }) => {
16
- const didPresent = await page.spyOnEvent('ionToastDidPresent');
17
- await page.click('#inline-toast-trigger');
18
- await didPresent.next();
19
- /**
20
- * IonToast overlays the entire screen, so
21
- * Axe will be unable to verify color contrast
22
- * on elements under the toast.
23
- */
24
- const results = await new AxeBuilder({ page }).disableRules('color-contrast').analyze();
25
- expect(results.violations).toEqual([]);
26
- });
27
- test('should not have any axe violations with controller toasts', async ({ page }) => {
28
- const didPresent = await page.spyOnEvent('ionToastDidPresent');
29
- await page.click('#controller-toast-trigger');
30
- await didPresent.next();
31
- /**
32
- * IonToast overlays the entire screen, so
33
- * Axe will be unable to verify color contrast
34
- * on elements under the toast.
35
- */
36
- const results = await new AxeBuilder({ page }).disableRules('color-contrast').analyze();
37
- expect(results.violations).toEqual([]);
38
- });
39
71
  test('should have aria-labelledby and aria-label added to the button when htmlAttributes is set', async ({ page, }) => {
40
72
  const didPresent = await page.spyOnEvent('ionToastDidPresent');
41
73
  await page.click('#aria-label-toast-trigger');
@@ -323,7 +323,7 @@
323
323
  :host {
324
324
  --background: var(--ion-color-step-50, #f2f2f2);
325
325
  --border-radius: 14px;
326
- --button-color: var(--ion-color-primary, #3880ff);
326
+ --button-color: var(--ion-color-primary, #0054e9);
327
327
  --color: var(--ion-color-step-850, #262626);
328
328
  --max-width: 700px;
329
329
  --max-height: 478px;
@@ -324,7 +324,7 @@
324
324
  --background: var(--ion-color-step-800, #333333);
325
325
  --border-radius: 4px;
326
326
  --box-shadow: 0 3px 5px -1px rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12);
327
- --button-color: var(--ion-color-primary, #3880ff);
327
+ --button-color: var(--ion-color-primary, #0054e9);
328
328
  --color: var(--ion-color-step-50, #f2f2f2);
329
329
  --max-width: 700px;
330
330
  --start: 8px;
@@ -421,7 +421,7 @@
421
421
 
422
422
  @media (any-hover: hover) {
423
423
  .toast-button:hover {
424
- background-color: rgba(var(--ion-color-primary-rgb, 56, 128, 255), 0.08);
424
+ background-color: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.08);
425
425
  }
426
426
  .toast-button-cancel:hover {
427
427
  background-color: rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.08);
@@ -4,10 +4,16 @@
4
4
  import AxeBuilder from "@axe-core/playwright";
5
5
  import { expect } from "@playwright/test";
6
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
- configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
7
+ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
8
  test.describe(title('toggle: a11y'), () => {
9
9
  test('should not have accessibility violations', async ({ page }) => {
10
- await page.goto(`/src/components/toggle/test/a11y`, config);
10
+ await page.setContent(`
11
+ <main>
12
+ <ion-toggle>my label</ion-toggle>
13
+ <ion-toggle aria-label="my aria label"></ion-toggle>
14
+ <ion-toggle checked="true">Checked</ion-toggle>
15
+ </main>
16
+ `, config);
11
17
  const results = await new AxeBuilder({ page }).analyze();
12
18
  expect(results.violations).toEqual([]);
13
19
  });
@@ -532,29 +532,29 @@ input {
532
532
  */
533
533
  :host {
534
534
  --track-background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.088);
535
- --track-background-checked: var(--ion-color-primary, #3880ff);
536
- --border-radius: 15.5px;
535
+ --track-background-checked: var(--ion-color-primary, #0054e9);
536
+ --border-radius: 16px;
537
537
  --handle-background: #ffffff;
538
538
  --handle-background-checked: #ffffff;
539
539
  --handle-border-radius: 25.5px;
540
- --handle-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.06), 0 3px 8px rgba(0, 0, 0, 0.06);
541
- --handle-height: calc(31px - (2px * 2));
540
+ --handle-box-shadow: 0 3px 12px rgba(0, 0, 0, 0.16), 0 3px 1px rgba(0, 0, 0, 0.1);
541
+ --handle-height: calc(32px - (2px * 2));
542
542
  --handle-max-height: calc(100% - var(--handle-spacing) * 2);
543
- --handle-width: calc(31px - (2px * 2));
543
+ --handle-width: calc(32px - (2px * 2));
544
544
  --handle-spacing: 2px;
545
545
  --handle-transition: transform 300ms, width 120ms ease-in-out 80ms, left 110ms ease-in-out 80ms, right 110ms ease-in-out 80ms;
546
546
  }
547
547
 
548
548
  :host(.legacy-toggle) {
549
549
  width: 51px;
550
- height: 31px;
550
+ height: 32px;
551
551
  contain: strict;
552
552
  overflow: hidden;
553
553
  }
554
554
 
555
555
  .native-wrapper .toggle-icon {
556
556
  width: 51px;
557
- height: 31px;
557
+ height: 32px;
558
558
  /**
559
559
  * The handle box shadow should not
560
560
  * overflow outside of the track container.
@@ -590,7 +590,7 @@ input {
590
590
 
591
591
  .toggle-switch-icon {
592
592
  position: absolute;
593
- color: var(--ion-color-dark);
593
+ color: var(--ion-color-dark, #2f2f2f);
594
594
  }
595
595
 
596
596
  :host(.toggle-ltr) .toggle-switch-icon {
@@ -532,10 +532,10 @@ input {
532
532
  */
533
533
  :host {
534
534
  --track-background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.39);
535
- --track-background-checked: rgba(var(--ion-color-primary-rgb, 56, 128, 255), 0.5);
535
+ --track-background-checked: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.5);
536
536
  --border-radius: 14px;
537
537
  --handle-background: #ffffff;
538
- --handle-background-checked: var(--ion-color-primary, #3880ff);
538
+ --handle-background-checked: var(--ion-color-primary, #0054e9);
539
539
  --handle-border-radius: 50%;
540
540
  --handle-box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
541
541
  --handle-width: 20px;