@ionic/core 7.6.2-dev.11704390532.1202188d → 7.6.2-dev.11704729332.13b412c8

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 (259) hide show
  1. package/components/action-sheet.js +1 -1
  2. package/components/alert.js +2 -2
  3. package/components/button.js +2 -2
  4. package/components/checkbox.js +2 -2
  5. package/components/ion-back-button.js +1 -1
  6. package/components/ion-badge.js +2 -2
  7. package/components/ion-content.js +2 -3
  8. package/components/ion-fab-button.js +2 -2
  9. package/components/ion-input.js +2 -2
  10. package/components/ion-item-option.js +2 -2
  11. package/components/ion-loading.js +1 -1
  12. package/components/ion-menu-button.js +1 -1
  13. package/components/ion-picker-legacy.js +2 -2
  14. package/components/ion-progress-bar.js +2 -2
  15. package/components/ion-range.js +2 -2
  16. package/components/ion-refresher-content.js +1 -1
  17. package/components/ion-refresher.js +1 -1
  18. package/components/ion-router-link.js +1 -1
  19. package/components/ion-searchbar.js +1 -1
  20. package/components/ion-segment-button.js +1 -1
  21. package/components/ion-select.js +2 -2
  22. package/components/ion-tab-bar.js +2 -2
  23. package/components/ion-textarea.js +2 -2
  24. package/components/ion-toast.js +2 -2
  25. package/components/ion-toggle.js +2 -2
  26. package/components/item.js +2 -2
  27. package/components/label.js +1 -1
  28. package/components/picker-column2.js +1 -1
  29. package/components/radio.js +2 -2
  30. package/components/select-popover.js +1 -1
  31. package/css/core.css +35 -34
  32. package/css/core.css.map +1 -1
  33. package/css/global.bundle.css +1 -1
  34. package/css/ionic.bundle.css +1 -1
  35. package/css/ionic.bundle.css.map +1 -1
  36. package/css/themes/dark.always.css +122 -0
  37. package/css/themes/dark.always.css.map +1 -0
  38. package/css/themes/dark.class.css +122 -0
  39. package/css/themes/dark.class.css.map +1 -0
  40. package/css/themes/dark.css +3 -0
  41. package/css/themes/dark.css.map +1 -0
  42. package/css/themes/dark.system.css +124 -0
  43. package/css/themes/dark.system.css.map +1 -0
  44. package/css/typography.css +1 -1
  45. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  46. package/dist/cjs/ion-alert.cjs.entry.js +2 -2
  47. package/dist/cjs/ion-app_8.cjs.entry.js +2 -3
  48. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  49. package/dist/cjs/ion-back-button.cjs.entry.js +1 -1
  50. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  51. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  52. package/dist/cjs/ion-datetime_3.cjs.entry.js +3 -3
  53. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  54. package/dist/cjs/ion-input.cjs.entry.js +2 -2
  55. package/dist/cjs/ion-item-option_3.cjs.entry.js +2 -2
  56. package/dist/cjs/ion-item_8.cjs.entry.js +3 -3
  57. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  58. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  59. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  60. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  61. package/dist/cjs/ion-range.cjs.entry.js +2 -2
  62. package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
  63. package/dist/cjs/ion-route_4.cjs.entry.js +1 -1
  64. package/dist/cjs/ion-searchbar.cjs.entry.js +1 -1
  65. package/dist/cjs/ion-segment_2.cjs.entry.js +1 -1
  66. package/dist/cjs/ion-select_3.cjs.entry.js +3 -3
  67. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  68. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  69. package/dist/cjs/ion-toast.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-toggle.cjs.entry.js +2 -2
  71. package/dist/collection/components/action-sheet/action-sheet.ios.css +3 -3
  72. package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +23 -14
  73. package/dist/collection/components/alert/alert.ios.css +6 -6
  74. package/dist/collection/components/alert/alert.md.css +6 -6
  75. package/dist/collection/components/alert/test/a11y/alert.e2e.js +22 -9
  76. package/dist/collection/components/back-button/back-button.ios.css +1 -1
  77. package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +21 -0
  78. package/dist/collection/components/badge/badge.ios.css +1 -1
  79. package/dist/collection/components/badge/badge.md.css +1 -1
  80. package/dist/collection/components/badge/test/a11y/badge.e2e.js +18 -0
  81. package/dist/collection/components/button/button.ios.css +10 -10
  82. package/dist/collection/components/button/button.md.css +8 -8
  83. package/dist/collection/components/button/test/a11y/button.e2e.js +48 -0
  84. package/dist/collection/components/checkbox/checkbox.ios.css +2 -2
  85. package/dist/collection/components/checkbox/checkbox.md.css +2 -2
  86. package/dist/collection/components/checkbox/test/a11y/checkbox.e2e.js +11 -2
  87. package/dist/collection/components/content/content.js +2 -3
  88. package/dist/collection/components/fab-button/fab-button.ios.css +13 -13
  89. package/dist/collection/components/fab-button/fab-button.md.css +4 -4
  90. package/dist/collection/components/fab-button/test/a11y/fab-button.e2e.js +50 -0
  91. package/dist/collection/components/input/input.ios.css +3 -3
  92. package/dist/collection/components/input/input.md.css +3 -3
  93. package/dist/collection/components/input/test/a11y/input.e2e.js +41 -3
  94. package/dist/collection/components/item/item.ios.css +3 -3
  95. package/dist/collection/components/item/item.md.css +4 -4
  96. package/dist/collection/components/item-option/item-option.ios.css +2 -2
  97. package/dist/collection/components/item-option/item-option.md.css +1 -1
  98. package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +28 -0
  99. package/dist/collection/components/label/label.md.css +1 -1
  100. package/dist/collection/components/label/test/a11y/label.e2e.js +20 -0
  101. package/dist/collection/components/loading/loading.md.css +1 -1
  102. package/dist/collection/components/loading/test/a11y/loading.e2e.js +21 -5
  103. package/dist/collection/components/menu-button/menu-button.ios.css +1 -1
  104. package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +14 -0
  105. package/dist/collection/components/picker-legacy/picker.ios.css +1 -1
  106. package/dist/collection/components/picker-legacy/picker.md.css +1 -1
  107. package/dist/collection/components/picker-legacy-column/picker-column.md.css +1 -1
  108. package/dist/collection/components/progress-bar/progress-bar.ios.css +2 -2
  109. package/dist/collection/components/progress-bar/progress-bar.md.css +2 -2
  110. package/dist/collection/components/progress-bar/test/a11y/progress-bar.e2e.js +24 -0
  111. package/dist/collection/components/radio/radio.ios.css +2 -2
  112. package/dist/collection/components/radio/radio.md.css +2 -2
  113. package/dist/collection/components/radio/test/a11y/radio.e2e.js +101 -68
  114. package/dist/collection/components/range/range.ios.css +1 -1
  115. package/dist/collection/components/range/range.md.css +3 -3
  116. package/dist/collection/components/range/test/a11y/range.e2e.js +18 -8
  117. package/dist/collection/components/refresher/refresher.md.css +2 -2
  118. package/dist/collection/components/refresher/test/a11y/refresher.e2e.js +25 -0
  119. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  120. package/dist/collection/components/router-link/router-link.css +1 -1
  121. package/dist/collection/components/router-link/test/a11y/router-link.e2e.js +23 -0
  122. package/dist/collection/components/searchbar/searchbar.ios.css +1 -1
  123. package/dist/collection/components/segment/test/a11y/segment.e2e.js +23 -0
  124. package/dist/collection/components/segment-button/segment-button.md.css +2 -2
  125. package/dist/collection/components/select/select.ios.css +3 -3
  126. package/dist/collection/components/select/select.md.css +3 -3
  127. package/dist/collection/components/select/test/a11y/select.e2e.js +68 -4
  128. package/dist/collection/components/select-popover/select-popover.md.css +4 -4
  129. package/dist/collection/components/select-popover/test/a11y/select-popover.e2e.js +32 -0
  130. package/dist/collection/components/tab-bar/tab-bar.ios.css +1 -1
  131. package/dist/collection/components/tab-bar/tab-bar.md.css +1 -1
  132. package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +41 -3
  133. package/dist/collection/components/textarea/textarea.ios.css +3 -3
  134. package/dist/collection/components/textarea/textarea.md.css +3 -3
  135. package/dist/collection/components/toast/test/a11y/toast.e2e.js +56 -24
  136. package/dist/collection/components/toast/toast.ios.css +1 -1
  137. package/dist/collection/components/toast/toast.md.css +2 -2
  138. package/dist/collection/components/toggle/test/a11y/toggle.e2e.js +8 -2
  139. package/dist/collection/components/toggle/toggle.ios.css +1 -1
  140. package/dist/collection/components/toggle/toggle.md.css +2 -2
  141. package/dist/collection/css/test/a11y/typography.e2e.js +18 -0
  142. package/dist/collection/themes/test/colors/theme.e2e.js +114 -0
  143. package/dist/collection/utils/test/playwright/generator.js +1 -0
  144. package/dist/collection/utils/test/playwright/page/utils/set-content.js +1 -1
  145. package/dist/docs.json +1 -1
  146. package/dist/esm/ion-action-sheet.entry.js +1 -1
  147. package/dist/esm/ion-alert.entry.js +2 -2
  148. package/dist/esm/ion-app_8.entry.js +2 -3
  149. package/dist/esm/ion-avatar_3.entry.js +2 -2
  150. package/dist/esm/ion-back-button.entry.js +1 -1
  151. package/dist/esm/ion-button_2.entry.js +2 -2
  152. package/dist/esm/ion-checkbox.entry.js +2 -2
  153. package/dist/esm/ion-datetime_3.entry.js +3 -3
  154. package/dist/esm/ion-fab_3.entry.js +2 -2
  155. package/dist/esm/ion-input.entry.js +2 -2
  156. package/dist/esm/ion-item-option_3.entry.js +2 -2
  157. package/dist/esm/ion-item_8.entry.js +3 -3
  158. package/dist/esm/ion-loading.entry.js +1 -1
  159. package/dist/esm/ion-menu_3.entry.js +1 -1
  160. package/dist/esm/ion-progress-bar.entry.js +2 -2
  161. package/dist/esm/ion-radio_2.entry.js +2 -2
  162. package/dist/esm/ion-range.entry.js +2 -2
  163. package/dist/esm/ion-refresher_2.entry.js +2 -2
  164. package/dist/esm/ion-route_4.entry.js +1 -1
  165. package/dist/esm/ion-searchbar.entry.js +1 -1
  166. package/dist/esm/ion-segment_2.entry.js +1 -1
  167. package/dist/esm/ion-select_3.entry.js +3 -3
  168. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  169. package/dist/esm/ion-textarea.entry.js +2 -2
  170. package/dist/esm/ion-toast.entry.js +2 -2
  171. package/dist/esm/ion-toggle.entry.js +2 -2
  172. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  173. package/dist/esm-es5/ion-alert.entry.js +1 -1
  174. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  175. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  176. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  177. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  178. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  179. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  180. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  181. package/dist/esm-es5/ion-input.entry.js +1 -1
  182. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  183. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  184. package/dist/esm-es5/ion-loading.entry.js +1 -1
  185. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  186. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  187. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  188. package/dist/esm-es5/ion-range.entry.js +1 -1
  189. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  190. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  191. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  192. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  193. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  194. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  195. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  196. package/dist/esm-es5/ion-toast.entry.js +1 -1
  197. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  198. package/dist/ionic/ionic.esm.js +1 -1
  199. package/dist/ionic/{p-61e4d3ec.entry.js → p-068950da.entry.js} +1 -1
  200. package/dist/ionic/{p-80c6c078.entry.js → p-0832dedf.entry.js} +1 -1
  201. package/dist/ionic/p-19d9ceb8.system.js +1 -1
  202. package/dist/ionic/{p-a1bd098f.system.entry.js → p-1c453add.system.entry.js} +1 -1
  203. package/dist/ionic/{p-11bf2ad0.system.entry.js → p-1d5b03e3.system.entry.js} +1 -1
  204. package/dist/ionic/{p-92d35b6a.entry.js → p-2724403e.entry.js} +1 -1
  205. package/dist/ionic/p-283bc1a1.system.entry.js +4 -0
  206. package/dist/ionic/{p-beed2450.system.entry.js → p-308b6cf2.system.entry.js} +1 -1
  207. package/dist/ionic/{p-abd5d0d5.system.entry.js → p-354682e8.system.entry.js} +1 -1
  208. package/dist/ionic/{p-19c379da.system.entry.js → p-3796194b.system.entry.js} +1 -1
  209. package/dist/ionic/{p-cf53213c.entry.js → p-385bb983.entry.js} +1 -1
  210. package/dist/ionic/{p-4793c14c.system.entry.js → p-456e19bb.system.entry.js} +1 -1
  211. package/dist/ionic/{p-77d78f68.system.entry.js → p-47e42aa3.system.entry.js} +1 -1
  212. package/dist/ionic/{p-529b24fb.entry.js → p-4abb1251.entry.js} +1 -1
  213. package/dist/ionic/{p-e2737fef.system.entry.js → p-530bb2af.system.entry.js} +1 -1
  214. package/dist/ionic/{p-0e908476.system.entry.js → p-590447a5.system.entry.js} +1 -1
  215. package/dist/ionic/{p-642ac927.entry.js → p-5aec2208.entry.js} +1 -1
  216. package/dist/ionic/{p-26ff1180.entry.js → p-5cbfce20.entry.js} +1 -1
  217. package/dist/ionic/{p-26c4bf85.entry.js → p-5f1b0512.entry.js} +1 -1
  218. package/dist/ionic/{p-0dfa4ab4.system.entry.js → p-662a9a47.system.entry.js} +1 -1
  219. package/dist/ionic/{p-c01803db.entry.js → p-713af1fe.entry.js} +1 -1
  220. package/dist/ionic/{p-6e0539ea.system.entry.js → p-7dade589.system.entry.js} +1 -1
  221. package/dist/ionic/{p-6e4c7340.system.entry.js → p-8a25bf30.system.entry.js} +1 -1
  222. package/dist/ionic/{p-71483cbb.entry.js → p-8b160fba.entry.js} +1 -1
  223. package/dist/ionic/{p-799da666.entry.js → p-8e961825.entry.js} +1 -1
  224. package/dist/ionic/p-97aaf697.system.entry.js +4 -0
  225. package/dist/ionic/{p-4685218a.system.entry.js → p-9a8bc8f3.system.entry.js} +1 -1
  226. package/dist/ionic/{p-bb3fd397.entry.js → p-9c48f42f.entry.js} +1 -1
  227. package/dist/ionic/{p-964dcdb2.system.entry.js → p-9f94e34a.system.entry.js} +1 -1
  228. package/dist/ionic/{p-75a3e35b.entry.js → p-a17a9130.entry.js} +1 -1
  229. package/dist/ionic/{p-7dcf795f.entry.js → p-a29db3a0.entry.js} +1 -1
  230. package/dist/ionic/{p-8ce4e506.system.entry.js → p-a6e5f54e.system.entry.js} +1 -1
  231. package/dist/ionic/{p-ed8402d6.entry.js → p-aa8b021d.entry.js} +1 -1
  232. package/dist/ionic/{p-6855f26a.entry.js → p-aa975ff8.entry.js} +1 -1
  233. package/dist/ionic/{p-043aa6cc.system.entry.js → p-b59fe3bd.system.entry.js} +1 -1
  234. package/dist/ionic/p-b7e03ff0.system.entry.js +4 -0
  235. package/dist/ionic/{p-ba5d9e27.entry.js → p-bc01c384.entry.js} +1 -1
  236. package/dist/ionic/{p-7be412e8.system.entry.js → p-c16fbc5f.system.entry.js} +1 -1
  237. package/dist/ionic/{p-0cc80201.entry.js → p-c6e9ef77.entry.js} +1 -1
  238. package/dist/ionic/{p-db05ecb6.system.entry.js → p-cc700688.system.entry.js} +1 -1
  239. package/dist/ionic/p-cd3e1a06.entry.js +4 -0
  240. package/dist/ionic/{p-da666998.system.entry.js → p-d01449a3.system.entry.js} +1 -1
  241. package/dist/ionic/{p-84b567a6.entry.js → p-d08e0136.entry.js} +1 -1
  242. package/dist/ionic/p-d1ad57d5.system.entry.js +4 -0
  243. package/dist/ionic/{p-41208f54.system.entry.js → p-d88ed181.system.entry.js} +1 -1
  244. package/dist/ionic/{p-10339dcc.entry.js → p-df6f50ef.entry.js} +1 -1
  245. package/dist/ionic/{p-20755eb0.entry.js → p-e403ff07.entry.js} +1 -1
  246. package/dist/ionic/{p-ae4b7df8.entry.js → p-e9431a58.entry.js} +1 -1
  247. package/dist/ionic/{p-f0dea903.system.entry.js → p-ec0a9b2c.system.entry.js} +1 -1
  248. package/dist/ionic/{p-b2b5d761.entry.js → p-ee8b825e.entry.js} +1 -1
  249. package/dist/ionic/{p-42925096.system.entry.js → p-f0dbd73e.system.entry.js} +1 -1
  250. package/dist/ionic/{p-806a9810.entry.js → p-f38c1f8d.entry.js} +1 -1
  251. package/dist/ionic/p-fc17f198.entry.js +4 -0
  252. package/hydrate/index.js +48 -49
  253. package/package.json +1 -1
  254. package/dist/ionic/p-2f449cdf.system.entry.js +0 -4
  255. package/dist/ionic/p-3b434dee.system.entry.js +0 -4
  256. package/dist/ionic/p-4981ea0a.system.entry.js +0 -4
  257. package/dist/ionic/p-a3013394.entry.js +0 -4
  258. package/dist/ionic/p-beeed22c.system.entry.js +0 -4
  259. package/dist/ionic/p-f8c5008f.entry.js +0 -4
@@ -1,8 +1,29 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import AxeBuilder from "@axe-core/playwright";
4
5
  import { expect } from "@playwright/test";
5
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
+ /**
8
+ * Only ios mode uses ion-color() for the back button
9
+ */
10
+ configs({ directions: ['ltr'], modes: ['ios'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
11
+ test.describe(title('back-button: a11y for ion-color()'), () => {
12
+ test('should not have accessibility violations', async ({ page }) => {
13
+ await page.setContent(`
14
+ <style>
15
+ ion-back-button {
16
+ display: inline-block !important;
17
+ vertical-align: middle;
18
+ }
19
+ </style>
20
+ <ion-back-button text="Back" aria-label="back button"></ion-back-button>
21
+ `, config);
22
+ const results = await new AxeBuilder({ page }).analyze();
23
+ expect(results.violations).toEqual([]);
24
+ });
25
+ });
26
+ });
6
27
  configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
7
28
  test.describe(title('back-button: font scaling'), () => {
8
29
  test('should scale text on larger font sizes', async ({ page }) => {
@@ -63,7 +63,7 @@
63
63
  * @prop --padding-bottom: Bottom padding of the badge
64
64
  * @prop --padding-start: Left padding if direction is left-to-right, and right padding if direction is right-to-left of the badge
65
65
  */
66
- --background: var(--ion-color-primary, #3880ff);
66
+ --background: var(--ion-color-primary, #0054e9);
67
67
  --color: var(--ion-color-primary-contrast, #fff);
68
68
  --padding-top: 3px;
69
69
  --padding-end: 8px;
@@ -63,7 +63,7 @@
63
63
  * @prop --padding-bottom: Bottom padding of the badge
64
64
  * @prop --padding-start: Left padding if direction is left-to-right, and right padding if direction is right-to-left of the badge
65
65
  */
66
- --background: var(--ion-color-primary, #3880ff);
66
+ --background: var(--ion-color-primary, #0054e9);
67
67
  --color: var(--ion-color-primary-contrast, #fff);
68
68
  --padding-top: 3px;
69
69
  --padding-end: 8px;
@@ -1,6 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import AxeBuilder from "@axe-core/playwright";
4
5
  import { expect } from "@playwright/test";
5
6
  import { configs, test } from "../../../../utils/test/playwright/index";
6
7
  configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
@@ -20,3 +21,20 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
20
21
  });
21
22
  });
22
23
  });
24
+ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ config, title }) => {
25
+ test.describe(title('badge: a11y'), () => {
26
+ test('should not have accessibility violations', async ({ page }) => {
27
+ /**
28
+ * All page content should be contained by landmarks (main, nav, etc.)
29
+ * By containing the badge in a main element, we can avoid this violation.
30
+ */
31
+ await page.setContent(`
32
+ <main>
33
+ <ion-badge>123</ion-badge>
34
+ </main>
35
+ `, config);
36
+ const results = await new AxeBuilder({ page }).analyze();
37
+ expect(results.violations).toEqual([]);
38
+ });
39
+ });
40
+ });
@@ -114,20 +114,20 @@
114
114
  }
115
115
 
116
116
  :host(.button-solid) {
117
- --background: var(--ion-color-primary, #3880ff);
117
+ --background: var(--ion-color-primary, #0054e9);
118
118
  --color: var(--ion-color-primary-contrast, #fff);
119
119
  }
120
120
 
121
121
  :host(.button-outline) {
122
- --border-color: var(--ion-color-primary, #3880ff);
122
+ --border-color: var(--ion-color-primary, #0054e9);
123
123
  --background: transparent;
124
- --color: var(--ion-color-primary, #3880ff);
124
+ --color: var(--ion-color-primary, #0054e9);
125
125
  }
126
126
 
127
127
  :host(.button-clear) {
128
128
  --border-width: 0;
129
129
  --background: transparent;
130
- --color: var(--ion-color-primary, #3880ff);
130
+ --color: var(--ion-color-primary, #0054e9);
131
131
  }
132
132
 
133
133
  :host(.button-block) {
@@ -465,9 +465,9 @@ ion-ripple-effect {
465
465
  }
466
466
 
467
467
  :host(.button-solid) {
468
- --background-activated: var(--ion-color-primary-shade, #3171e0);
469
- --background-focused: var(--ion-color-primary-shade, #3171e0);
470
- --background-hover: var(--ion-color-primary-tint, #4c8dff);
468
+ --background-activated: var(--ion-color-primary-shade, #004acd);
469
+ --background-focused: var(--ion-color-primary-shade, #004acd);
470
+ --background-hover: var(--ion-color-primary-tint, #1a65eb);
471
471
  --background-activated-opacity: 1;
472
472
  --background-focused-opacity: 1;
473
473
  --background-hover-opacity: 1;
@@ -477,8 +477,8 @@ ion-ripple-effect {
477
477
  --border-radius: 14px;
478
478
  --border-width: 1px;
479
479
  --border-style: solid;
480
- --background-activated: var(--ion-color-primary, #3880ff);
481
- --background-focused: var(--ion-color-primary, #3880ff);
480
+ --background-activated: var(--ion-color-primary, #0054e9);
481
+ --background-focused: var(--ion-color-primary, #0054e9);
482
482
  --background-hover: transparent;
483
483
  --background-focused-opacity: .1;
484
484
  --color-activated: var(--ion-color-primary-contrast, #fff);
@@ -487,7 +487,7 @@ ion-ripple-effect {
487
487
  :host(.button-clear) {
488
488
  --background-activated: transparent;
489
489
  --background-activated-opacity: 0;
490
- --background-focused: var(--ion-color-primary, #3880ff);
490
+ --background-focused: var(--ion-color-primary, #0054e9);
491
491
  --background-hover: transparent;
492
492
  --background-focused-opacity: .1;
493
493
  font-size: min(1.0625rem, 51px);
@@ -114,20 +114,20 @@
114
114
  }
115
115
 
116
116
  :host(.button-solid) {
117
- --background: var(--ion-color-primary, #3880ff);
117
+ --background: var(--ion-color-primary, #0054e9);
118
118
  --color: var(--ion-color-primary-contrast, #fff);
119
119
  }
120
120
 
121
121
  :host(.button-outline) {
122
- --border-color: var(--ion-color-primary, #3880ff);
122
+ --border-color: var(--ion-color-primary, #0054e9);
123
123
  --background: transparent;
124
- --color: var(--ion-color-primary, #3880ff);
124
+ --color: var(--ion-color-primary, #0054e9);
125
125
  }
126
126
 
127
127
  :host(.button-clear) {
128
128
  --border-width: 0;
129
129
  --background: transparent;
130
- --color: var(--ion-color-primary, #3880ff);
130
+ --color: var(--ion-color-primary, #0054e9);
131
131
  }
132
132
 
133
133
  :host(.button-block) {
@@ -431,8 +431,8 @@ ion-ripple-effect {
431
431
  --border-style: solid;
432
432
  --box-shadow: none;
433
433
  --background-activated: transparent;
434
- --background-focused: var(--ion-color-primary, #3880ff);
435
- --background-hover: var(--ion-color-primary, #3880ff);
434
+ --background-focused: var(--ion-color-primary, #0054e9);
435
+ --background-hover: var(--ion-color-primary, #0054e9);
436
436
  --background-activated-opacity: 0;
437
437
  --background-focused-opacity: .12;
438
438
  --background-hover-opacity: .04;
@@ -444,8 +444,8 @@ ion-ripple-effect {
444
444
 
445
445
  :host(.button-clear) {
446
446
  --background-activated: transparent;
447
- --background-focused: var(--ion-color-primary, #3880ff);
448
- --background-hover: var(--ion-color-primary, #3880ff);
447
+ --background-focused: var(--ion-color-primary, #0054e9);
448
+ --background-hover: var(--ion-color-primary, #0054e9);
449
449
  --background-activated-opacity: 0;
450
450
  --background-focused-opacity: .12;
451
451
  --background-hover-opacity: .04;
@@ -1,8 +1,56 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import AxeBuilder from "@axe-core/playwright";
4
5
  import { expect } from "@playwright/test";
5
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
+ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
+ test.describe(title('button: a11y for ion-color()'), () => {
9
+ test('should not have accessibility violations', async ({ page }) => {
10
+ await page.setContent(`
11
+ <ion-button>Default</ion-button>
12
+ <ion-button fill="solid">Solid</ion-button>
13
+ <ion-button fill="outline">Outline</ion-button>
14
+ <ion-button fill="clear">Clear</ion-button>
15
+ `, config);
16
+ const results = await new AxeBuilder({ page }).analyze();
17
+ expect(results.violations).toEqual([]);
18
+ });
19
+ test('focused state should not have accessibility violations', async ({ page }) => {
20
+ await page.setContent(`
21
+ <ion-button class="ion-focused" fill="solid">Solid</ion-button>
22
+ <ion-button class="ion-focused" fill="outline">Outline</ion-button>
23
+ <ion-button class="ion-focused" fill="clear">Clear</ion-button>
24
+ `, config);
25
+ const results = await new AxeBuilder({ page }).analyze();
26
+ expect(results.violations).toEqual([]);
27
+ });
28
+ test('button in toolbar should not have accessibility violations', async ({ page }) => {
29
+ await page.setContent(`
30
+ <ion-toolbar>
31
+ <ion-button fill="outline" class="ion-activated">Start</ion-button>
32
+ </ion-toolbar>
33
+ `, config);
34
+ const results = await new AxeBuilder({ page }).analyze();
35
+ expect(results.violations).toEqual([]);
36
+ });
37
+ });
38
+ });
39
+ /**
40
+ * Only ios mode uses ion-color() for the activated button state
41
+ */
42
+ configs({ directions: ['ltr'], modes: ['ios'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
43
+ test.describe(title('button: ios contrast'), () => {
44
+ test('activated state should not have accessibility violations', async ({ page }) => {
45
+ await page.setContent(`
46
+ <ion-button class="ion-activated" fill="solid">Solid</ion-button>
47
+ <ion-button class="ion-activated" fill="outline">Outline</ion-button>
48
+ `, config);
49
+ const results = await new AxeBuilder({ page }).analyze();
50
+ expect(results.violations).toEqual([]);
51
+ });
52
+ });
53
+ });
6
54
  configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
7
55
  test.describe(title('button: font scaling'), () => {
8
56
  test('should scale default button text on larger font sizes', async ({ page }) => {
@@ -71,8 +71,8 @@
71
71
  * @prop --checkmark-color: Color of the checkbox checkmark when checked
72
72
  * @prop --checkmark-width: Stroke width of the checkbox checkmark
73
73
  */
74
- --checkbox-background-checked: var(--ion-color-primary, #3880ff);
75
- --border-color-checked: var(--ion-color-primary, #3880ff);
74
+ --checkbox-background-checked: var(--ion-color-primary, #0054e9);
75
+ --border-color-checked: var(--ion-color-primary, #0054e9);
76
76
  --checkmark-color: var(--ion-color-primary-contrast, #fff);
77
77
  --checkmark-width: 1;
78
78
  --transition: none;
@@ -71,8 +71,8 @@
71
71
  * @prop --checkmark-color: Color of the checkbox checkmark when checked
72
72
  * @prop --checkmark-width: Stroke width of the checkbox checkmark
73
73
  */
74
- --checkbox-background-checked: var(--ion-color-primary, #3880ff);
75
- --border-color-checked: var(--ion-color-primary, #3880ff);
74
+ --checkbox-background-checked: var(--ion-color-primary, #0054e9);
75
+ --border-color-checked: var(--ion-color-primary, #0054e9);
76
76
  --checkmark-color: var(--ion-color-primary-contrast, #fff);
77
77
  --checkmark-width: 1;
78
78
  --transition: none;
@@ -4,10 +4,19 @@
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('checkbox: a11y'), () => {
9
9
  test('should not have accessibility violations', async ({ page }) => {
10
- await page.goto(`/src/components/checkbox/test/a11y`, config);
10
+ await page.setContent(`
11
+ <main>
12
+ <ion-checkbox>Label</ion-checkbox>
13
+ <ion-checkbox aria-label="my aria label"></ion-checkbox>
14
+ <ion-checkbox checked="true">Checked</ion-checkbox>
15
+ <ion-item>
16
+ <ion-checkbox>Checkbox in item</ion-checkbox>
17
+ </ion-item>
18
+ </main>
19
+ `, config);
11
20
  const results = await new AxeBuilder({ page }).analyze();
12
21
  expect(results.violations).toEqual([]);
13
22
  });
@@ -334,9 +334,8 @@ export class Content {
334
334
  const mode = getIonMode(this);
335
335
  const forceOverscroll = this.shouldForceOverscroll();
336
336
  const transitionShadow = mode === 'ios';
337
- const TagType = isMainContent ? 'main' : 'div';
338
337
  this.resize();
339
- return (h(Host, { class: createColorClasses(this.color, {
338
+ return (h(Host, { role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
340
339
  [mode]: true,
341
340
  'content-sizing': hostContext('ion-popover', this.el),
342
341
  overscroll: forceOverscroll,
@@ -344,7 +343,7 @@ export class Content {
344
343
  }), style: {
345
344
  '--offset-top': `${this.cTop}px`,
346
345
  '--offset-bottom': `${this.cBottom}px`,
347
- } }, h("div", { ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), h(TagType, { class: {
346
+ } }, h("div", { ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), h("div", { class: {
348
347
  'inner-scroll': true,
349
348
  'scroll-x': scrollX,
350
349
  'scroll-y': scrollY,
@@ -334,10 +334,10 @@ ion-ripple-effect {
334
334
  * }
335
335
  */
336
336
  :host {
337
- --background: var(--ion-color-primary, #3880ff);
338
- --background-activated: var(--ion-color-primary-shade, #3171e0);
339
- --background-focused: var(--ion-color-primary-shade, #3171e0);
340
- --background-hover: var(--ion-color-primary-tint, #4c8dff);
337
+ --background: var(--ion-color-primary, #0054e9);
338
+ --background-activated: var(--ion-color-primary-shade, #004acd);
339
+ --background-focused: var(--ion-color-primary-shade, #004acd);
340
+ --background-hover: var(--ion-color-primary-tint, #1a65eb);
341
341
  --background-activated-opacity: 1;
342
342
  --background-focused-opacity: 1;
343
343
  --background-hover-opacity: 1;
@@ -358,10 +358,10 @@ ion-ripple-effect {
358
358
  }
359
359
 
360
360
  :host(.fab-button-in-list) {
361
- --background: var(--ion-color-light, #f4f5f8);
362
- --background-activated: var(--ion-color-light-shade, #d7d8da);
361
+ --background: var(--ion-color-light, #f6f8fc);
362
+ --background-activated: var(--ion-color-light-shade, #d8dade);
363
363
  --background-focused: var(--background-activated);
364
- --background-hover: var(--ion-color-light-tint, #f5f6f9);
364
+ --background-hover: var(--ion-color-light-tint, #f7f9fc);
365
365
  --color: var(--ion-color-light-contrast, #000);
366
366
  --color-activated: var(--ion-color-light-contrast, #000);
367
367
  --color-focused: var(--color-activated);
@@ -395,15 +395,15 @@ ion-ripple-effect {
395
395
  }
396
396
  @supports (backdrop-filter: blur(0)) {
397
397
  :host(.fab-button-translucent) {
398
- --background: rgba(var(--ion-color-primary-rgb, 56, 128, 255), 0.9);
399
- --background-hover: rgba(var(--ion-color-primary-rgb, 56, 128, 255), 0.8);
400
- --background-focused: rgba(var(--ion-color-primary-rgb, 56, 128, 255), 0.82);
398
+ --background: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.9);
399
+ --background-hover: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.8);
400
+ --background-focused: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.82);
401
401
  --backdrop-filter: saturate(180%) blur(20px);
402
402
  }
403
403
  :host(.fab-button-translucent-in-list) {
404
- --background: rgba(var(--ion-color-light-rgb, 244, 245, 248), 0.9);
405
- --background-hover: rgba(var(--ion-color-light-rgb, 244, 245, 248), 0.8);
406
- --background-focused: rgba(var(--ion-color-light-rgb, 244, 245, 248), 0.82);
404
+ --background: rgba(var(--ion-color-light-rgb, 246, 248, 252), 0.9);
405
+ --background-hover: rgba(var(--ion-color-light-rgb, 246, 248, 252), 0.8);
406
+ --background-focused: rgba(var(--ion-color-light-rgb, 246, 248, 252), 0.82);
407
407
  }
408
408
  }
409
409
  @supports (backdrop-filter: blur(0)) {
@@ -334,7 +334,7 @@ ion-ripple-effect {
334
334
  * }
335
335
  */
336
336
  :host {
337
- --background: var(--ion-color-primary, #3880ff);
337
+ --background: var(--ion-color-primary, #0054e9);
338
338
  --background-activated: transparent;
339
339
  --background-focused: currentColor;
340
340
  --background-hover: currentColor;
@@ -359,10 +359,10 @@ ion-ripple-effect {
359
359
  --color: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.54);
360
360
  --color-activated: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.54);
361
361
  --color-focused: var(--color-activated);
362
- --background: var(--ion-color-light, #f4f5f8);
362
+ --background: var(--ion-color-light, #f6f8fc);
363
363
  --background-activated: transparent;
364
- --background-focused: var(--ion-color-light-shade, #d7d8da);
365
- --background-hover: var(--ion-color-light-tint, #f5f6f9);
364
+ --background-focused: var(--ion-color-light-shade, #d8dade);
365
+ --background-hover: var(--ion-color-light-tint, #f7f9fc);
366
366
  }
367
367
 
368
368
  :host(.fab-button-in-list) ::slotted(ion-icon) {
@@ -1,8 +1,58 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import AxeBuilder from "@axe-core/playwright";
4
5
  import { expect } from "@playwright/test";
5
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
+ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
+ test.describe(title('fab-button: a11y'), () => {
9
+ test('should not have accessibility violations', async ({ page }) => {
10
+ await page.setContent(`
11
+ <ion-fab-button>FAB</ion-fab-button>
12
+ <ion-fab-button class="ion-activated">FAB</ion-fab-button>
13
+ `, config);
14
+ const results = await new AxeBuilder({ page }).analyze();
15
+ expect(results.violations).toEqual([]);
16
+ });
17
+ });
18
+ test.describe(title('fab-list: contrast'), () => {
19
+ test('should not have accessibility violations', async ({ page }) => {
20
+ await page.setContent(`
21
+ <ion-fab activated="true">
22
+ <ion-fab-button>
23
+ Open
24
+ </ion-fab-button>
25
+ <ion-fab-list side="bottom">
26
+ <ion-fab-button>Down</ion-fab-button>
27
+ <ion-fab-button class="ion-activated">Down</ion-fab-button>
28
+ <ion-fab-button class="ion-focused">Down</ion-fab-button>
29
+ </ion-fab-list>
30
+ </ion-fab>
31
+ `, config);
32
+ const results = await new AxeBuilder({ page }).analyze();
33
+ expect(results.violations).toEqual([]);
34
+ });
35
+ });
36
+ test.describe(title('fab: translucent contrast'), () => {
37
+ test('should not have accessibility violations', async ({ page }) => {
38
+ await page.setContent(`
39
+ <ion-fab-button translucent="true">FAB</ion-fab-button>
40
+ <ion-fab-button class="ion-focused" translucent="true">FAB</ion-fab-button>
41
+ <ion-fab activated="true">
42
+ <ion-fab-button>
43
+ Open
44
+ </ion-fab-button>
45
+ <ion-fab-list side="bottom">
46
+ <ion-fab-button translucent="true">Down</ion-fab-button>
47
+ <ion-fab-button class="ion-focused" translucent="true">Down</ion-fab-button>
48
+ </ion-fab-list>
49
+ </ion-fab>
50
+ `, config);
51
+ const results = await new AxeBuilder({ page }).analyze();
52
+ expect(results.violations).toEqual([]);
53
+ });
54
+ });
55
+ });
6
56
  configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => {
7
57
  test.describe(title('fab-button: aria attributes'), () => {
8
58
  test('should inherit aria attributes to inner button', async ({ page }) => {
@@ -89,9 +89,9 @@
89
89
  --background: transparent;
90
90
  --color: initial;
91
91
  --border-style: solid;
92
- --highlight-color-focused: var(--ion-color-primary, #3880ff);
93
- --highlight-color-valid: var(--ion-color-success, #2dd36f);
94
- --highlight-color-invalid: var(--ion-color-danger, #eb445a);
92
+ --highlight-color-focused: var(--ion-color-primary, #0054e9);
93
+ --highlight-color-valid: var(--ion-color-success, #2dd55b);
94
+ --highlight-color-invalid: var(--ion-color-danger, #c5000f);
95
95
  /**
96
96
  * This is a private API that is used to switch
97
97
  * out the highlight color based on the state
@@ -89,9 +89,9 @@
89
89
  --background: transparent;
90
90
  --color: initial;
91
91
  --border-style: solid;
92
- --highlight-color-focused: var(--ion-color-primary, #3880ff);
93
- --highlight-color-valid: var(--ion-color-success, #2dd36f);
94
- --highlight-color-invalid: var(--ion-color-danger, #eb445a);
92
+ --highlight-color-focused: var(--ion-color-primary, #0054e9);
93
+ --highlight-color-valid: var(--ion-color-success, #2dd55b);
94
+ --highlight-color-invalid: var(--ion-color-danger, #c5000f);
95
95
  /**
96
96
  * This is a private API that is used to switch
97
97
  * out the highlight color based on the state
@@ -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('input: a11y'), () => {
9
- test('should not have accessibility violations', async ({ page }) => {
10
- await page.goto(`/src/components/input/test/a11y`, config);
9
+ test('default layout should not have accessibility violations', async ({ page }) => {
10
+ await page.setContent(`
11
+ <main>
12
+ <ion-input label="Label" placeholder="Placeholder"></ion-input>
13
+ <ion-input placeholder="Placeholder">
14
+ <div slot="label">Label"></div>
15
+ </ion-input>
16
+ <ion-input label="Label" value="My Text"></ion-input>
17
+ <ion-input aria-label="Label"></ion-input>
18
+ <ion-input label="Email" 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-input>
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-input class="has-focus" label="Label" value="My Text"></ion-input>
43
+ <ion-input class="has-focus" label-placement="floating" label="Label" value="My Text"></ion-input>
44
+ <ion-input class="has-focus" fill="outline" label-placement="floating" label="Label" value="My Text"></ion-input>
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('input: font scaling'), () => {
16
54
  test('should scale text on larger font sizes', async ({ page }) => {
17
55
  await page.setContent(`
@@ -700,9 +700,9 @@ ion-ripple-effect {
700
700
  --border-color: var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-250, #c8c7cc)));
701
701
  --color: var(--ion-item-color, var(--ion-text-color, #000));
702
702
  --highlight-height: 0px;
703
- --highlight-color-focused: var(--ion-color-primary, #3880ff);
704
- --highlight-color-valid: var(--ion-color-success, #2dd36f);
705
- --highlight-color-invalid: var(--ion-color-danger, #eb445a);
703
+ --highlight-color-focused: var(--ion-color-primary, #0054e9);
704
+ --highlight-color-valid: var(--ion-color-success, #2dd55b);
705
+ --highlight-color-invalid: var(--ion-color-danger, #c5000f);
706
706
  --bottom-padding-start: 0px;
707
707
  font-size: 1rem;
708
708
  }
@@ -800,9 +800,9 @@ ion-ripple-effect {
800
800
  --inner-padding-end: 16px;
801
801
  --inner-border-width: 0 0 1px 0;
802
802
  --highlight-height: 1px;
803
- --highlight-color-focused: var(--ion-color-primary, #3880ff);
804
- --highlight-color-valid: var(--ion-color-success, #2dd36f);
805
- --highlight-color-invalid: var(--ion-color-danger, #eb445a);
803
+ --highlight-color-focused: var(--ion-color-primary, #0054e9);
804
+ --highlight-color-valid: var(--ion-color-success, #2dd55b);
805
+ --highlight-color-invalid: var(--ion-color-danger, #c5000f);
806
806
  font-size: 1rem;
807
807
  font-weight: normal;
808
808
  text-transform: none;
@@ -1100,7 +1100,7 @@ ion-ripple-effect {
1100
1100
  :host(.ion-focused:not(.ion-color)) ::slotted(.label-floating),
1101
1101
  :host(.item-has-focus:not(.ion-color)) ::slotted(.label-stacked),
1102
1102
  :host(.item-has-focus:not(.ion-color)) ::slotted(.label-floating) {
1103
- color: var(--ion-color-primary, #3880ff);
1103
+ color: var(--ion-color-primary, #0054e9);
1104
1104
  }
1105
1105
 
1106
1106
  :host(.ion-color) {
@@ -58,7 +58,7 @@
58
58
  * @prop --background: Background of the item option
59
59
  * @prop --color: Color of the item option
60
60
  */
61
- --background: var(--ion-color-primary, #3880ff);
61
+ --background: var(--ion-color-primary, #0054e9);
62
62
  --color: var(--ion-color-primary-contrast, #fff);
63
63
  background: var(--background);
64
64
  color: var(--color);
@@ -234,7 +234,7 @@
234
234
  }
235
235
 
236
236
  :host(.ion-activated) {
237
- background: var(--ion-color-primary-shade, #3171e0);
237
+ background: var(--ion-color-primary-shade, #004acd);
238
238
  }
239
239
 
240
240
  :host(.ion-color.ion-activated) {
@@ -58,7 +58,7 @@
58
58
  * @prop --background: Background of the item option
59
59
  * @prop --color: Color of the item option
60
60
  */
61
- --background: var(--ion-color-primary, #3880ff);
61
+ --background: var(--ion-color-primary, #0054e9);
62
62
  --color: var(--ion-color-primary-contrast, #fff);
63
63
  background: var(--background);
64
64
  color: var(--color);
@@ -1,8 +1,36 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import AxeBuilder from "@axe-core/playwright";
5
+ import { expect } from "@playwright/test";
4
6
  import { configs, test } from "../../../../utils/test/playwright/index";
5
7
  import { testSlidingItem } from "../test.utils";
8
+ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
9
+ test.describe(title('item-sliding: a11y for ion-color()'), () => {
10
+ test('should not have accessibility violations', async ({ page }) => {
11
+ await page.setContent(`
12
+ <main>
13
+ <ion-item-sliding id="axe">
14
+ <ion-item>
15
+ <ion-label>Sliding Item with End Options</ion-label>
16
+ </ion-item>
17
+
18
+ <ion-item-options>
19
+ <ion-item-option>Favorite</ion-item-option>
20
+ <ion-item-option class="ion-activated">Activated</ion-item-option>
21
+ </ion-item-options>
22
+ </ion-item-sliding>
23
+ </main>
24
+ `, config);
25
+ await page.locator(`#axe`).evaluate(async (el) => {
26
+ await el.open('end');
27
+ });
28
+ await page.waitForChanges();
29
+ const results = await new AxeBuilder({ page }).analyze();
30
+ expect(results.violations).toEqual([]);
31
+ });
32
+ });
33
+ });
6
34
  /**
7
35
  * This behavior does not vary across directions
8
36
  */
@@ -348,7 +348,7 @@
348
348
  :host-context(.ion-focused).label-floating:not(.ion-color),
349
349
  :host-context(.item-has-focus).label-stacked:not(.ion-color),
350
350
  :host-context(.item-has-focus).label-floating:not(.ion-color) {
351
- color: var(--ion-color-primary, #3880ff);
351
+ color: var(--ion-color-primary, #0054e9);
352
352
  }
353
353
 
354
354
  :host-context(.ion-focused.ion-color).label-stacked:not(.ion-color),