@ionic/core 7.5.8-dev.11702664817.19cab605 → 7.5.8-dev.11704294569.1abc989d

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 (418) 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/data.js +1 -1
  6. package/components/ion-back-button.js +1 -1
  7. package/components/ion-badge.js +2 -2
  8. package/components/ion-content.js +2 -3
  9. package/components/ion-datetime.js +30 -39
  10. package/components/ion-fab-button.js +2 -2
  11. package/components/ion-input.js +2 -2
  12. package/components/ion-item-option.js +2 -2
  13. package/components/ion-loading.js +1 -1
  14. package/components/ion-menu-button.js +1 -1
  15. package/components/ion-picker-column-internal.d.ts +11 -0
  16. package/components/ion-picker-column-internal.js +9 -0
  17. package/components/ion-picker-column.js +2 -2
  18. package/components/{ion-picker-legacy.d.ts → ion-picker-internal.d.ts} +4 -4
  19. package/components/ion-picker-internal.js +9 -0
  20. package/components/ion-picker.js +309 -1
  21. package/components/ion-progress-bar.js +2 -2
  22. package/components/ion-range.js +2 -2
  23. package/components/ion-refresher-content.js +1 -1
  24. package/components/ion-refresher.js +1 -1
  25. package/components/ion-router-link.js +1 -1
  26. package/components/ion-searchbar.js +1 -1
  27. package/components/ion-segment-button.js +1 -1
  28. package/components/ion-select.js +2 -2
  29. package/components/ion-tab-bar.js +2 -2
  30. package/components/ion-textarea.js +2 -2
  31. package/components/ion-title.js +1 -22
  32. package/components/ion-toast.js +2 -2
  33. package/components/ion-toggle.js +2 -2
  34. package/components/item.js +2 -2
  35. package/components/label.js +1 -1
  36. package/components/overlays.js +3 -6
  37. package/components/picker-column-internal.js +390 -0
  38. package/components/picker-column.js +322 -351
  39. package/components/{picker.js → picker-internal.js} +22 -29
  40. package/components/radio.js +2 -2
  41. package/components/select-popover.js +1 -1
  42. package/css/core.css +35 -34
  43. package/css/core.css.map +1 -1
  44. package/css/global.bundle.css +1 -1
  45. package/css/ionic.bundle.css +1 -1
  46. package/css/ionic.bundle.css.map +1 -1
  47. package/css/themes/dark.always.css +122 -0
  48. package/css/themes/dark.always.css.map +1 -0
  49. package/css/themes/dark.class.css +122 -0
  50. package/css/themes/dark.class.css.map +1 -0
  51. package/css/themes/dark.css +3 -0
  52. package/css/themes/dark.css.map +1 -0
  53. package/css/themes/dark.system.css +124 -0
  54. package/css/themes/dark.system.css.map +1 -0
  55. package/css/typography.css +1 -1
  56. package/dist/cjs/{data-e7526b58.js → data-36b9094e.js} +1 -1
  57. package/dist/cjs/index.cjs.js +1 -1
  58. package/dist/cjs/ion-action-sheet.cjs.entry.js +2 -2
  59. package/dist/cjs/ion-alert.cjs.entry.js +3 -3
  60. package/dist/cjs/ion-app_8.cjs.entry.js +4 -25
  61. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  62. package/dist/cjs/ion-back-button.cjs.entry.js +1 -1
  63. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  64. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  65. package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
  66. package/dist/cjs/ion-datetime_3.cjs.entry.js +36 -30
  67. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  68. package/dist/cjs/ion-input.cjs.entry.js +2 -2
  69. package/dist/cjs/ion-item-option_3.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-item_8.cjs.entry.js +3 -3
  71. package/dist/cjs/ion-loading.cjs.entry.js +2 -2
  72. package/dist/cjs/ion-menu_3.cjs.entry.js +2 -2
  73. package/dist/cjs/ion-modal.cjs.entry.js +1 -1
  74. package/dist/cjs/{ion-picker-column.cjs.entry.js → ion-picker-column-internal.cjs.entry.js} +87 -104
  75. package/dist/cjs/{ion-picker.cjs.entry.js → ion-picker-internal.cjs.entry.js} +19 -26
  76. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  77. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  78. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  79. package/dist/cjs/ion-range.cjs.entry.js +2 -2
  80. package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
  81. package/dist/cjs/ion-route_4.cjs.entry.js +1 -1
  82. package/dist/cjs/ion-searchbar.cjs.entry.js +1 -1
  83. package/dist/cjs/ion-segment_2.cjs.entry.js +1 -1
  84. package/dist/cjs/ion-select_3.cjs.entry.js +4 -4
  85. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  86. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  87. package/dist/cjs/ion-toast.cjs.entry.js +3 -3
  88. package/dist/cjs/ion-toggle.cjs.entry.js +2 -2
  89. package/dist/cjs/ionic.cjs.js +1 -1
  90. package/dist/cjs/loader.cjs.js +1 -1
  91. package/dist/cjs/{overlays-e8e05b0e.js → overlays-2c6b1072.js} +3 -6
  92. package/dist/collection/collection-manifest.json +8 -9
  93. package/dist/collection/components/action-sheet/action-sheet.ios.css +3 -3
  94. package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +23 -14
  95. package/dist/collection/components/alert/alert.ios.css +6 -6
  96. package/dist/collection/components/alert/alert.md.css +6 -6
  97. package/dist/collection/components/alert/test/a11y/alert.e2e.js +22 -9
  98. package/dist/collection/components/back-button/back-button.ios.css +1 -1
  99. package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +21 -0
  100. package/dist/collection/components/badge/badge.ios.css +1 -1
  101. package/dist/collection/components/badge/badge.md.css +1 -1
  102. package/dist/collection/components/badge/test/a11y/badge.e2e.js +18 -0
  103. package/dist/collection/components/button/button.ios.css +11 -11
  104. package/dist/collection/components/button/button.md.css +9 -9
  105. package/dist/collection/components/button/test/a11y/button.e2e.js +48 -0
  106. package/dist/collection/components/button/test/wrap/button.e2e.js +24 -12
  107. package/dist/collection/components/checkbox/checkbox.ios.css +2 -2
  108. package/dist/collection/components/checkbox/checkbox.md.css +2 -2
  109. package/dist/collection/components/checkbox/test/a11y/checkbox.e2e.js +11 -2
  110. package/dist/collection/components/content/content.js +2 -3
  111. package/dist/collection/components/datetime/datetime.ios.css +13 -8
  112. package/dist/collection/components/datetime/datetime.js +16 -19
  113. package/dist/collection/components/datetime/datetime.md.css +13 -8
  114. package/dist/collection/components/datetime/test/datetime.e2e.js +2 -2
  115. package/dist/collection/components/datetime/test/disabled/datetime.spec.js +4 -4
  116. package/dist/collection/components/datetime/test/locale/datetime.e2e.js +2 -2
  117. package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +6 -6
  118. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +41 -43
  119. package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +1 -1
  120. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +2 -2
  121. package/dist/collection/components/datetime/test/values/datetime.e2e.js +12 -15
  122. package/dist/collection/components/datetime/utils/data.js +1 -1
  123. package/dist/collection/components/fab-button/fab-button.ios.css +13 -13
  124. package/dist/collection/components/fab-button/fab-button.md.css +4 -4
  125. package/dist/collection/components/fab-button/test/a11y/fab-button.e2e.js +50 -0
  126. package/dist/collection/components/input/input.ios.css +3 -3
  127. package/dist/collection/components/input/input.md.css +3 -3
  128. package/dist/collection/components/input/test/a11y/input.e2e.js +35 -3
  129. package/dist/collection/components/item/item.ios.css +3 -3
  130. package/dist/collection/components/item/item.md.css +4 -4
  131. package/dist/collection/components/item-option/item-option.ios.css +2 -2
  132. package/dist/collection/components/item-option/item-option.md.css +1 -1
  133. package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +28 -0
  134. package/dist/collection/components/label/label.md.css +1 -1
  135. package/dist/collection/components/label/test/a11y/label.e2e.js +20 -0
  136. package/dist/collection/components/loading/loading.md.css +1 -1
  137. package/dist/collection/components/loading/test/a11y/loading.e2e.js +21 -5
  138. package/dist/collection/components/menu-button/menu-button.ios.css +1 -1
  139. package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +14 -0
  140. package/dist/collection/components/picker/picker.ios.css +211 -112
  141. package/dist/collection/components/picker/picker.js +744 -472
  142. package/dist/collection/components/picker/picker.md.css +198 -108
  143. package/dist/collection/components/picker/test/basic/picker.e2e.js +13 -99
  144. package/dist/collection/components/{picker-legacy → picker}/test/is-open/picker.e2e.js +4 -4
  145. package/dist/collection/components/{picker-legacy → picker}/test/picker-id.spec.js +5 -5
  146. package/dist/collection/components/{picker-legacy → picker}/test/trigger/picker.e2e.js +1 -1
  147. package/dist/collection/components/picker-column/picker-column.js +335 -497
  148. package/dist/collection/components/{picker-legacy-column → picker-column}/picker-column.md.css +1 -1
  149. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-aria.spec.js +3 -3
  150. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-dynamic.spec.js +2 -2
  151. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column.spec.js +2 -2
  152. package/dist/collection/components/{picker-legacy-column → picker-column}/test/standalone/picker-column.e2e.js +3 -3
  153. package/dist/collection/components/{picker-column-option/picker-column-option.md.css → picker-column-internal/picker-column-internal.ios.css} +53 -6
  154. package/dist/collection/components/picker-column-internal/picker-column-internal.js +565 -0
  155. package/dist/collection/components/{picker-column/picker-column.css → picker-column-internal/picker-column-internal.md.css} +83 -96
  156. package/dist/collection/components/{picker-column/test/basic/picker-column.e2e.js → picker-column-internal/test/basic/picker-column-internal.e2e.js} +8 -8
  157. package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +162 -0
  158. package/dist/collection/components/{picker-legacy/picker.md.css → picker-internal/picker-internal.ios.css} +100 -192
  159. package/dist/collection/components/picker-internal/picker-internal.js +544 -0
  160. package/dist/collection/components/{picker-legacy/picker.ios.css → picker-internal/picker-internal.md.css} +98 -207
  161. package/dist/collection/components/picker-internal/test/a11y/picker-internal.e2e.js +31 -0
  162. package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +118 -0
  163. package/dist/collection/components/{picker/test/keyboard-entry/picker.e2e.js → picker-internal/test/keyboard-entry/picker-internal.e2e.js} +32 -63
  164. package/dist/collection/components/progress-bar/progress-bar.ios.css +2 -2
  165. package/dist/collection/components/progress-bar/progress-bar.md.css +2 -2
  166. package/dist/collection/components/progress-bar/test/a11y/progress-bar.e2e.js +24 -0
  167. package/dist/collection/components/radio/radio.ios.css +2 -2
  168. package/dist/collection/components/radio/radio.md.css +2 -2
  169. package/dist/collection/components/radio/test/a11y/radio.e2e.js +44 -6
  170. package/dist/collection/components/range/range.ios.css +1 -1
  171. package/dist/collection/components/range/range.md.css +3 -3
  172. package/dist/collection/components/range/test/a11y/range.e2e.js +18 -8
  173. package/dist/collection/components/refresher/refresher.md.css +2 -2
  174. package/dist/collection/components/refresher/test/a11y/refresher.e2e.js +25 -0
  175. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  176. package/dist/collection/components/router-link/router-link.css +1 -1
  177. package/dist/collection/components/router-link/test/a11y/router-link.e2e.js +23 -0
  178. package/dist/collection/components/searchbar/searchbar.ios.css +1 -1
  179. package/dist/collection/components/segment/test/a11y/segment.e2e.js +23 -0
  180. package/dist/collection/components/segment-button/segment-button.md.css +2 -2
  181. package/dist/collection/components/select/select.ios.css +3 -3
  182. package/dist/collection/components/select/select.md.css +3 -3
  183. package/dist/collection/components/select/test/a11y/select.e2e.js +59 -4
  184. package/dist/collection/components/select-popover/select-popover.md.css +4 -4
  185. package/dist/collection/components/select-popover/test/a11y/select-popover.e2e.js +32 -0
  186. package/dist/collection/components/tab-bar/tab-bar.ios.css +1 -1
  187. package/dist/collection/components/tab-bar/tab-bar.md.css +1 -1
  188. package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +35 -3
  189. package/dist/collection/components/textarea/textarea.ios.css +3 -3
  190. package/dist/collection/components/textarea/textarea.md.css +3 -3
  191. package/dist/collection/components/title/test/a11y/title.e2e.js +0 -39
  192. package/dist/collection/components/title/title.js +1 -22
  193. package/dist/collection/components/toast/test/a11y/toast.e2e.js +56 -24
  194. package/dist/collection/components/toast/toast.ios.css +1 -1
  195. package/dist/collection/components/toast/toast.md.css +2 -2
  196. package/dist/collection/components/toggle/test/a11y/toggle.e2e.js +8 -2
  197. package/dist/collection/components/toggle/toggle.ios.css +1 -1
  198. package/dist/collection/components/toggle/toggle.md.css +2 -2
  199. package/dist/collection/css/test/a11y/typography.e2e.js +18 -0
  200. package/dist/collection/themes/test/colors/theme.e2e.js +114 -0
  201. package/dist/collection/utils/overlays.js +3 -6
  202. package/dist/collection/utils/test/playwright/generator.js +1 -0
  203. package/dist/collection/utils/test/playwright/page/utils/set-content.js +1 -1
  204. package/dist/docs.json +24 -472
  205. package/dist/esm/{data-4b9508c9.js → data-f5c75b4e.js} +1 -1
  206. package/dist/esm/index.js +1 -1
  207. package/dist/esm/ion-action-sheet.entry.js +2 -2
  208. package/dist/esm/ion-alert.entry.js +3 -3
  209. package/dist/esm/ion-app_8.entry.js +4 -25
  210. package/dist/esm/ion-avatar_3.entry.js +2 -2
  211. package/dist/esm/ion-back-button.entry.js +1 -1
  212. package/dist/esm/ion-button_2.entry.js +2 -2
  213. package/dist/esm/ion-checkbox.entry.js +2 -2
  214. package/dist/esm/ion-datetime-button.entry.js +1 -1
  215. package/dist/esm/ion-datetime_3.entry.js +35 -29
  216. package/dist/esm/ion-fab_3.entry.js +2 -2
  217. package/dist/esm/ion-input.entry.js +2 -2
  218. package/dist/esm/ion-item-option_3.entry.js +2 -2
  219. package/dist/esm/ion-item_8.entry.js +3 -3
  220. package/dist/esm/ion-loading.entry.js +2 -2
  221. package/dist/esm/ion-menu_3.entry.js +2 -2
  222. package/dist/esm/ion-modal.entry.js +1 -1
  223. package/dist/esm/{ion-picker-column.entry.js → ion-picker-column-internal.entry.js} +87 -104
  224. package/dist/esm/{ion-picker.entry.js → ion-picker-internal.entry.js} +19 -26
  225. package/dist/esm/ion-popover.entry.js +1 -1
  226. package/dist/esm/ion-progress-bar.entry.js +2 -2
  227. package/dist/esm/ion-radio_2.entry.js +2 -2
  228. package/dist/esm/ion-range.entry.js +2 -2
  229. package/dist/esm/ion-refresher_2.entry.js +2 -2
  230. package/dist/esm/ion-route_4.entry.js +1 -1
  231. package/dist/esm/ion-searchbar.entry.js +1 -1
  232. package/dist/esm/ion-segment_2.entry.js +1 -1
  233. package/dist/esm/ion-select_3.entry.js +4 -4
  234. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  235. package/dist/esm/ion-textarea.entry.js +2 -2
  236. package/dist/esm/ion-toast.entry.js +3 -3
  237. package/dist/esm/ion-toggle.entry.js +2 -2
  238. package/dist/esm/ionic.js +1 -1
  239. package/dist/esm/loader.js +1 -1
  240. package/dist/esm/{overlays-fbc5cab5.js → overlays-d23ea6e1.js} +3 -6
  241. package/dist/esm-es5/index.js +1 -1
  242. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  243. package/dist/esm-es5/ion-alert.entry.js +1 -1
  244. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  245. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  246. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  247. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  248. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  249. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  250. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  251. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  252. package/dist/esm-es5/ion-input.entry.js +1 -1
  253. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  254. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  255. package/dist/esm-es5/ion-loading.entry.js +1 -1
  256. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  257. package/dist/esm-es5/ion-modal.entry.js +1 -1
  258. package/dist/esm-es5/ion-picker-column-internal.entry.js +4 -0
  259. package/dist/esm-es5/ion-picker-internal.entry.js +4 -0
  260. package/dist/esm-es5/ion-popover.entry.js +1 -1
  261. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  262. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  263. package/dist/esm-es5/ion-range.entry.js +1 -1
  264. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  265. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  266. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  267. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  268. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  269. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  270. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  271. package/dist/esm-es5/ion-toast.entry.js +1 -1
  272. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  273. package/dist/esm-es5/ionic.js +1 -1
  274. package/dist/esm-es5/loader.js +1 -1
  275. package/dist/esm-es5/overlays-d23ea6e1.js +4 -0
  276. package/dist/html.html-data.json +1 -152
  277. package/dist/ionic/index.esm.js +1 -1
  278. package/dist/ionic/ionic.esm.js +1 -1
  279. package/dist/ionic/{p-4911a5d6.entry.js → p-023b1cf4.entry.js} +1 -1
  280. package/dist/ionic/{p-232d1f22.entry.js → p-02e066a0.entry.js} +1 -1
  281. package/dist/ionic/{p-3fd26bd6.system.entry.js → p-0339b688.system.entry.js} +1 -1
  282. package/dist/ionic/{p-6d72fb44.entry.js → p-0941a5d7.entry.js} +1 -1
  283. package/dist/ionic/{p-ab9456e9.system.entry.js → p-098f4d12.system.entry.js} +1 -1
  284. package/dist/ionic/{p-73190c5f.entry.js → p-0afef6b9.entry.js} +1 -1
  285. package/dist/ionic/{p-51a087d6.entry.js → p-0ebcff25.entry.js} +1 -1
  286. package/dist/ionic/{p-34c39c48.entry.js → p-1286049a.entry.js} +1 -1
  287. package/dist/ionic/{p-5bebc7b3.system.entry.js → p-12869199.system.entry.js} +1 -1
  288. package/dist/ionic/{p-fbf3a689.system.entry.js → p-193ff029.system.entry.js} +1 -1
  289. package/dist/ionic/{p-22e5af95.entry.js → p-1de103b7.entry.js} +1 -1
  290. package/dist/ionic/{p-846ee227.entry.js → p-1e57bd24.entry.js} +1 -1
  291. package/dist/ionic/{p-21c3515a.entry.js → p-29bf41bd.entry.js} +1 -1
  292. package/dist/ionic/p-2dd0355d.system.entry.js +4 -0
  293. package/dist/ionic/{p-4a36430f.system.entry.js → p-2f2293da.system.entry.js} +1 -1
  294. package/dist/ionic/{p-ea69616e.entry.js → p-31cf9613.entry.js} +1 -1
  295. package/dist/ionic/{p-4a081ea9.entry.js → p-3b568d18.entry.js} +1 -1
  296. package/dist/ionic/p-3e13501a.system.entry.js +4 -0
  297. package/dist/ionic/{p-93000a81.system.entry.js → p-3e625023.system.entry.js} +1 -1
  298. package/dist/ionic/{p-3f6270b3.entry.js → p-55a0cd33.entry.js} +1 -1
  299. package/dist/ionic/{p-a8baa23e.entry.js → p-57798ba6.entry.js} +1 -1
  300. package/dist/ionic/{p-7b725280.entry.js → p-5b20db28.entry.js} +1 -1
  301. package/dist/ionic/{p-5d42b6b4.entry.js → p-5b834053.entry.js} +1 -1
  302. package/dist/ionic/{p-8f5d30f5.entry.js → p-5fbfa8c9.entry.js} +1 -1
  303. package/dist/ionic/p-5ff60387.system.entry.js +4 -0
  304. package/dist/ionic/{p-563c41f0.system.entry.js → p-60b386c9.system.entry.js} +1 -1
  305. package/dist/ionic/p-67da080d.entry.js +4 -0
  306. package/dist/ionic/{p-2ab4e925.system.entry.js → p-6f96f7b1.system.entry.js} +1 -1
  307. package/dist/ionic/p-73ea8f82.system.entry.js +4 -0
  308. package/dist/ionic/{p-c9a21dfd.system.entry.js → p-76c94634.system.entry.js} +1 -1
  309. package/dist/ionic/{p-b752714f.system.entry.js → p-7828a27f.system.entry.js} +1 -1
  310. package/dist/ionic/{p-4bee86bd.entry.js → p-7a63e024.entry.js} +1 -1
  311. package/dist/ionic/{p-4a31c99f.entry.js → p-7c7e21a7.entry.js} +1 -1
  312. package/dist/ionic/p-80fa068e.entry.js +4 -0
  313. package/dist/ionic/{p-26798a7b.system.entry.js → p-8e086176.system.entry.js} +1 -1
  314. package/dist/ionic/{p-96dbbac1.system.entry.js → p-90483001.system.entry.js} +1 -1
  315. package/dist/ionic/{p-e8e86f69.system.entry.js → p-93f25d0d.system.entry.js} +1 -1
  316. package/dist/ionic/{p-a9a80f5b.entry.js → p-9588396d.entry.js} +1 -1
  317. package/dist/ionic/{p-32303650.system.entry.js → p-98c798de.system.entry.js} +1 -1
  318. package/dist/ionic/p-9eae578e.system.entry.js +4 -0
  319. package/dist/ionic/{p-f910cc73.system.entry.js → p-9eec42cc.system.entry.js} +1 -1
  320. package/dist/ionic/{p-a225bf0f.system.entry.js → p-a8e90d15.system.entry.js} +1 -1
  321. package/dist/ionic/p-ab11130c.system.js +4 -0
  322. package/dist/ionic/{p-6fd64e7c.system.entry.js → p-ad8bed54.system.entry.js} +1 -1
  323. package/dist/ionic/{p-27bcbbc7.system.entry.js → p-b1a2a195.system.entry.js} +1 -1
  324. package/dist/ionic/{p-a98dc0c1.entry.js → p-bcd073dd.entry.js} +1 -1
  325. package/dist/ionic/{p-18ba8221.entry.js → p-be6344dd.entry.js} +1 -1
  326. package/dist/ionic/p-c14f8ac8.js +4 -0
  327. package/dist/ionic/{p-73aa7604.entry.js → p-c7c7c110.entry.js} +1 -1
  328. package/dist/ionic/p-c9e07b2f.entry.js +4 -0
  329. package/dist/ionic/p-ccc2fb62.system.entry.js +4 -0
  330. package/dist/ionic/p-cce9f61a.system.entry.js +4 -0
  331. package/dist/ionic/{p-6b7c55cd.entry.js → p-cef8c5c2.entry.js} +1 -1
  332. package/dist/ionic/{p-6fbecbda.entry.js → p-d1025b3d.entry.js} +1 -1
  333. package/dist/ionic/{p-b4d31b30.system.entry.js → p-d32188f3.system.entry.js} +1 -1
  334. package/dist/ionic/{p-ef126ae8.system.entry.js → p-d39db09e.system.entry.js} +1 -1
  335. package/dist/ionic/{p-42ba3902.entry.js → p-d51019a8.entry.js} +1 -1
  336. package/dist/ionic/p-d7e9a0ac.entry.js +4 -0
  337. package/dist/ionic/{p-b133e9b4.entry.js → p-ddb30596.entry.js} +1 -1
  338. package/dist/ionic/{p-8017aad2.system.entry.js → p-de74582b.system.entry.js} +1 -1
  339. package/dist/ionic/p-e3584231.system.js +1 -1
  340. package/dist/ionic/p-ebcf6eca.entry.js +4 -0
  341. package/dist/ionic/{p-c18de88a.system.entry.js → p-ec040c06.system.entry.js} +1 -1
  342. package/dist/ionic/{p-464975c5.system.entry.js → p-ed25b7cc.system.entry.js} +1 -1
  343. package/dist/ionic/{p-e7ea9815.system.entry.js → p-f957d584.system.entry.js} +1 -1
  344. package/dist/ionic/{p-54dfc9b5.system.js → p-fff7a57e.system.js} +1 -1
  345. package/dist/types/components/datetime/utils/data.d.ts +7 -11
  346. package/dist/types/components/picker/picker.d.ts +129 -75
  347. package/dist/types/components/picker-column/picker-column.d.ts +39 -99
  348. package/dist/types/components/picker-column-internal/picker-column-internal-interfaces.d.ts +5 -0
  349. package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +102 -0
  350. package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +8 -0
  351. package/dist/types/components/picker-internal/picker-internal.d.ts +102 -0
  352. package/dist/types/components.d.ts +122 -154
  353. package/dist/types/interface.d.ts +1 -1
  354. package/dist/types/utils/config.d.ts +2 -2
  355. package/dist/types/utils/overlays.d.ts +2 -5
  356. package/hydrate/index.js +1205 -1350
  357. package/package.json +1 -1
  358. package/components/ion-picker-column-option.d.ts +0 -11
  359. package/components/ion-picker-column-option.js +0 -9
  360. package/components/ion-picker-legacy-column.d.ts +0 -11
  361. package/components/ion-picker-legacy-column.js +0 -9
  362. package/components/ion-picker-legacy.js +0 -309
  363. package/components/picker-column-option.js +0 -122
  364. package/components/picker-column2.js +0 -379
  365. package/dist/cjs/ion-picker-column-option.cjs.entry.js +0 -104
  366. package/dist/collection/components/picker/test/a11y/picker.e2e.js +0 -15
  367. package/dist/collection/components/picker/test/custom/picker.e2e.js +0 -85
  368. package/dist/collection/components/picker-column/test/disabled/picker-column.e2e.js +0 -91
  369. package/dist/collection/components/picker-column/test/slots/picker-column.e2e.js +0 -39
  370. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +0 -87
  371. package/dist/collection/components/picker-column-option/picker-column-option.js +0 -173
  372. package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +0 -18
  373. package/dist/collection/components/picker-column-option/test/basic/picker-column-option.e2e.js +0 -37
  374. package/dist/collection/components/picker-column-option/test/picker-column-option.spec.js +0 -29
  375. package/dist/collection/components/picker-legacy/picker.js +0 -817
  376. package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +0 -25
  377. package/dist/collection/components/picker-legacy-column/picker-column.js +0 -419
  378. package/dist/collection/components/title/test/title.spec.js +0 -132
  379. package/dist/esm/ion-picker-column-option.entry.js +0 -100
  380. package/dist/esm-es5/ion-picker-column-option.entry.js +0 -4
  381. package/dist/esm-es5/ion-picker-column.entry.js +0 -4
  382. package/dist/esm-es5/ion-picker.entry.js +0 -4
  383. package/dist/esm-es5/overlays-fbc5cab5.js +0 -4
  384. package/dist/ionic/p-17da5ed1.entry.js +0 -4
  385. package/dist/ionic/p-36d194c5.entry.js +0 -4
  386. package/dist/ionic/p-3993ae66.entry.js +0 -4
  387. package/dist/ionic/p-5a1aac13.system.entry.js +0 -4
  388. package/dist/ionic/p-6e70dd1a.system.entry.js +0 -4
  389. package/dist/ionic/p-8e42850f.entry.js +0 -4
  390. package/dist/ionic/p-8fa6583d.system.js +0 -4
  391. package/dist/ionic/p-91af3c52.system.entry.js +0 -4
  392. package/dist/ionic/p-afcf4620.entry.js +0 -4
  393. package/dist/ionic/p-b3d0a3d6.system.entry.js +0 -4
  394. package/dist/ionic/p-b7010c69.system.entry.js +0 -4
  395. package/dist/ionic/p-c41bff4e.system.entry.js +0 -4
  396. package/dist/ionic/p-ca8938f4.js +0 -4
  397. package/dist/ionic/p-cde52378.system.entry.js +0 -4
  398. package/dist/ionic/p-ea74e0c6.entry.js +0 -4
  399. package/dist/ionic/p-ffd5dba4.system.entry.js +0 -4
  400. package/dist/types/components/picker/picker-interfaces.d.ts +0 -8
  401. package/dist/types/components/picker-column/picker-column-interfaces.d.ts +0 -4
  402. package/dist/types/components/picker-column-option/picker-column-option.d.ts +0 -66
  403. package/dist/types/components/picker-legacy/picker.d.ts +0 -158
  404. package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
  405. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.enter.js +0 -0
  406. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.leave.js +0 -0
  407. /package/dist/collection/components/picker/{picker-interfaces.js → picker-interface.js} +0 -0
  408. /package/dist/collection/components/{picker-legacy-column → picker-column}/picker-column.ios.css +0 -0
  409. /package/dist/collection/components/{picker-legacy-column → picker-column}/test/test.utils.js +0 -0
  410. /package/dist/collection/components/{picker-column/picker-column-interfaces.js → picker-column-internal/picker-column-internal-interfaces.js} +0 -0
  411. /package/dist/collection/components/{picker-legacy/picker-interface.js → picker-internal/picker-internal-interfaces.js} +0 -0
  412. /package/dist/esm-es5/{data-4b9508c9.js → data-f5c75b4e.js} +0 -0
  413. /package/dist/ionic/{p-368f5215.js → p-2aea8b1e.js} +0 -0
  414. /package/dist/ionic/{p-f58981c2.system.js → p-82e3d633.system.js} +0 -0
  415. /package/dist/types/components/{picker-legacy → picker}/animations/ios.enter.d.ts +0 -0
  416. /package/dist/types/components/{picker-legacy → picker}/animations/ios.leave.d.ts +0 -0
  417. /package/dist/types/components/{picker-legacy → picker}/picker-interface.d.ts +0 -0
  418. /package/dist/types/components/{picker-legacy-column → picker-column}/test/test.utils.d.ts +0 -0
@@ -59,8 +59,8 @@
59
59
  * @prop --progress-background: Background of the progress bar representing the current value
60
60
  * @prop --buffer-background: DEPRECATED, use `--background` instead
61
61
  */
62
- --background: rgba(var(--ion-color-primary-rgb, 56, 128, 255), 0.3);
63
- --progress-background: var(--ion-color-primary, #3880ff);
62
+ --background: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.3);
63
+ --progress-background: var(--ion-color-primary, #0054e9);
64
64
  --buffer-background: var(--background);
65
65
  display: block;
66
66
  position: relative;
@@ -59,8 +59,8 @@
59
59
  * @prop --progress-background: Background of the progress bar representing the current value
60
60
  * @prop --buffer-background: DEPRECATED, use `--background` instead
61
61
  */
62
- --background: rgba(var(--ion-color-primary-rgb, 56, 128, 255), 0.3);
63
- --progress-background: var(--ion-color-primary, #3880ff);
62
+ --background: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.3);
63
+ --progress-background: var(--ion-color-primary, #0054e9);
64
64
  --buffer-background: var(--background);
65
65
  display: block;
66
66
  position: relative;
@@ -0,0 +1,24 @@
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: ['light', 'dark'] }).forEach(({ title, config }) => {
8
+ test.describe(title('progress-bar: a11y'), () => {
9
+ test('should not have accessibility violations', async ({ page }) => {
10
+ /**
11
+ * All page content should be contained by landmarks (main, nav, etc.)
12
+ * By containing the badge in a main element, we can avoid this violation.
13
+ */
14
+ await page.setContent(`
15
+ <main>
16
+ <ion-progress-bar type="indeterminate" aria-label="default"></ion-progress-bar>
17
+ <ion-progress-bar buffer="0.10" value="0.02" aria-label="buffer"></ion-progress-bar>
18
+ </main>
19
+ `, config);
20
+ const results = await new AxeBuilder({ page }).analyze();
21
+ expect(results.violations).toEqual([]);
22
+ });
23
+ });
24
+ });
@@ -468,7 +468,7 @@ input {
468
468
  * }
469
469
  */
470
470
  :host {
471
- --color-checked: var(--ion-color-primary, #3880ff);
471
+ --color-checked: var(--ion-color-primary, #0054e9);
472
472
  }
473
473
 
474
474
  :host(.legacy-radio) {
@@ -510,7 +510,7 @@ input {
510
510
  position: absolute;
511
511
  width: 36px;
512
512
  height: 36px;
513
- background: var(--ion-color-primary-tint, #4c8dff);
513
+ background: var(--ion-color-primary-tint, #1a65eb);
514
514
  content: "";
515
515
  opacity: 0.2;
516
516
  }
@@ -469,7 +469,7 @@ input {
469
469
  */
470
470
  :host {
471
471
  --color: rgb(var(--ion-text-color-rgb, 0, 0, 0), 0.6);
472
- --color-checked: var(--ion-color-primary, #3880ff);
472
+ --color-checked: var(--ion-color-primary, #0054e9);
473
473
  --border-width: 0.125rem;
474
474
  --border-style: solid;
475
475
  --border-radius: 50%;
@@ -557,7 +557,7 @@ input {
557
557
  position: absolute;
558
558
  width: 36px;
559
559
  height: 36px;
560
- background: var(--ion-color-primary-tint, #4c8dff);
560
+ background: var(--ion-color-primary-tint, #1a65eb);
561
561
  content: "";
562
562
  opacity: 0.2;
563
563
  }
@@ -4,17 +4,55 @@
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
- /**
8
- * This behavior does not vary across modes/directions.
9
- */
10
- configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
7
+ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
11
8
  test.describe(title('radio: a11y'), () => {
12
- test('should not have accessibility violations', async ({ page }) => {
13
- await page.goto(`/src/components/radio/test/a11y`, config);
9
+ test('default layout should not have accessibility violations', async ({ page }) => {
10
+ await page.setContent(`
11
+ <main>
12
+ <ion-radio>my label</ion-radio>
13
+ <ion-radio aria-label="my aria label"></ion-radio>
14
+ <ion-radio-group>
15
+ <ion-radio>my label in a group</ion-radio>
16
+ </ion-radio-group>
17
+ <ion-radio-group>
18
+ <ion-radio aria-label="my aria label in a group"></ion-radio>
19
+ </ion-radio-group>
20
+ <ion-list>
21
+ <ion-item>
22
+ <ion-radio-group>
23
+ <ion-radio>my label in a group in a list</ion-radio>
24
+ </ion-radio-group>
25
+ </ion-item>
26
+ </ion-list>
27
+ <ion-list>
28
+ <ion-item>
29
+ <ion-radio-group>
30
+ <ion-radio aria-label="my aria label in a group in a list"></ion-radio>
31
+ </ion-radio-group>
32
+ </ion-item>
33
+ </ion-list>
34
+ </main>
35
+ `, config);
36
+ const results = await new AxeBuilder({ page }).analyze();
37
+ expect(results.violations).toEqual([]);
38
+ });
39
+ test('selected state should not have accessibility violations', async ({ page }) => {
40
+ await page.setContent(`
41
+ <main>
42
+ <ion-radio-group value="a">
43
+ <ion-radio value="a">Selected radio</ion-radio>
44
+ </ion-radio-group>
45
+ </main>
46
+ `, config);
14
47
  const results = await new AxeBuilder({ page }).analyze();
15
48
  expect(results.violations).toEqual([]);
16
49
  });
17
50
  });
51
+ });
52
+ /**
53
+ * This behavior does not vary across modes/directions.
54
+ */
55
+ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
18
56
  test.describe(title('radio: keyboard navigation'), () => {
19
57
  test.beforeEach(async ({ page }) => {
20
58
  await page.setContent(`
@@ -530,7 +530,7 @@
530
530
  --knob-size: 26px;
531
531
  --bar-height: 4px;
532
532
  --bar-background: var(--ion-color-step-900, #e6e6e6);
533
- --bar-background-active: var(--ion-color-primary, #3880ff);
533
+ --bar-background-active: var(--ion-color-primary, #0054e9);
534
534
  --bar-border-radius: 2px;
535
535
  --height: 42px;
536
536
  }
@@ -529,11 +529,11 @@
529
529
  --knob-box-shadow: none;
530
530
  --knob-size: 18px;
531
531
  --bar-height: 2px;
532
- --bar-background: rgba(var(--ion-color-primary-rgb, 56, 128, 255), 0.26);
533
- --bar-background-active: var(--ion-color-primary, #3880ff);
532
+ --bar-background: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.26);
533
+ --bar-background-active: var(--ion-color-primary, #0054e9);
534
534
  --bar-border-radius: 0;
535
535
  --height: 42px;
536
- --pin-background: var(--ion-color-primary, #3880ff);
536
+ --pin-background: var(--ion-color-primary, #0054e9);
537
537
  --pin-color: var(--ion-color-primary-contrast, #fff);
538
538
  }
539
539
 
@@ -4,18 +4,28 @@
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: ['md'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
7
+ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
8
  test.describe(title('range: a11y'), () => {
9
9
  test('should not have accessibility violations', async ({ page }) => {
10
- await page.goto(`/src/components/range/test/a11y`, config);
11
- /**
12
- * Axe does not take <slot> elements into account
13
- * when checking color-contrast. As a result, it will
14
- * incorrectly report color-contrast issues: https://github.com/dequelabs/axe-core/issues/3329
15
- */
16
- const results = await new AxeBuilder({ page }).disableRules('color-contrast').analyze();
10
+ await page.setContent(`
11
+ <main>
12
+ <ion-range value="50"><span slot="label">my label</span></ion-range>
13
+ <ion-range label="my label"></ion-range>
14
+ <ion-range aria-label="my aria label"></ion-range>
15
+ <ion-range>
16
+ <span slot="label">temperature</span>
17
+ <ion-icon name="snow" slot="start" aria-hidden="true"></ion-icon>
18
+ <ion-icon name="flame" slot="end" aria-hidden="true"></ion-icon>
19
+ </ion-range>
20
+ </main>
21
+ `, config);
22
+ const results = await new AxeBuilder({ page }).analyze();
17
23
  expect(results.violations).toEqual([]);
18
24
  });
25
+ });
26
+ });
27
+ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
28
+ test.describe(title('range: a11y'), () => {
19
29
  test('should not have visual regressions', async ({ page }) => {
20
30
  await page.setContent(`<ion-app>
21
31
  <ion-content>
@@ -260,7 +260,7 @@ ion-refresher.refresher-native ion-spinner {
260
260
  margin-bottom: 0;
261
261
  width: 24px;
262
262
  height: 24px;
263
- color: var(--ion-color-primary, #3880ff);
263
+ color: var(--ion-color-primary, #0054e9);
264
264
  }
265
265
  ion-refresher.refresher-native .spinner-arrow-container {
266
266
  display: inherit;
@@ -282,7 +282,7 @@ ion-refresher.refresher-native .arrow-container ion-icon {
282
282
  right: 0;
283
283
  bottom: -4px;
284
284
  position: absolute;
285
- color: var(--ion-color-primary, #3880ff);
285
+ color: var(--ion-color-primary, #0054e9);
286
286
  font-size: 12px;
287
287
  }
288
288
  ion-refresher.refresher-native.refresher-pulling ion-refresher-content .refresher-pulling, ion-refresher.refresher-native.refresher-ready ion-refresher-content .refresher-pulling {
@@ -0,0 +1,25 @@
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, dragElementBy } from "../../../../utils/test/playwright/index";
7
+ configs({ directions: ['ltr'], modes: ['md'], themes: ['light', 'dark'] }).forEach(({ config, title }) => {
8
+ test.describe(title('refresher: a11y for ion-color()'), () => {
9
+ test('should not have accessibility violations', async ({ page }) => {
10
+ await page.setContent(`
11
+ <ion-content>
12
+ <ion-refresher class="refresher-native" slot="fixed">
13
+ <ion-refresher-content></ion-refresher-content>
14
+ </ion-refresher>
15
+ </ion-content>
16
+ `, config);
17
+ const target = page.locator('body');
18
+ const refresher = await page.locator('ion-refresher');
19
+ await dragElementBy(target, page, 0, 320, undefined, undefined, false);
20
+ await expect(refresher).toHaveClass(/refresher-pulling/);
21
+ const results = await new AxeBuilder({ page }).analyze();
22
+ expect(results.violations).toEqual([]);
23
+ });
24
+ });
25
+ });
@@ -46,7 +46,7 @@ export class RefresherContent {
46
46
  const pullingIcon = this.pullingIcon;
47
47
  const hasSpinner = pullingIcon != null && SPINNERS[pullingIcon] !== undefined;
48
48
  const mode = getIonMode(this);
49
- return (h(Host, { class: mode }, h("div", { class: "refresher-pulling" }, this.pullingIcon && hasSpinner && (h("div", { class: "refresher-pulling-icon" }, h("div", { class: "spinner-arrow-container" }, h("ion-spinner", { name: this.pullingIcon, paused: true }), mode === 'md' && this.pullingIcon === 'circular' && (h("div", { class: "arrow-container" }, h("ion-icon", { icon: caretBackSharp, "aria-hidden": "true" })))))), this.pullingIcon && !hasSpinner && (h("div", { class: "refresher-pulling-icon" }, h("ion-icon", { icon: this.pullingIcon, lazy: false, "aria-hidden": "true" }))), this.pullingText !== undefined && this.renderPullingText()), h("div", { class: "refresher-refreshing" }, this.refreshingSpinner && (h("div", { class: "refresher-refreshing-icon" }, h("ion-spinner", { name: this.refreshingSpinner }))), this.refreshingText !== undefined && this.renderRefreshingText())));
49
+ return (h(Host, { class: mode }, h("div", { class: "refresher-pulling" }, this.pullingIcon && hasSpinner && (h("div", { class: "refresher-pulling-icon" }, h("div", { class: "spinner-arrow-container" }, h("ion-spinner", { name: this.pullingIcon, "aria-label": "pulling icon", paused: true }), mode === 'md' && this.pullingIcon === 'circular' && (h("div", { class: "arrow-container" }, h("ion-icon", { icon: caretBackSharp, "aria-hidden": "true" })))))), this.pullingIcon && !hasSpinner && (h("div", { class: "refresher-pulling-icon" }, h("ion-icon", { icon: this.pullingIcon, lazy: false, "aria-hidden": "true" }))), this.pullingText !== undefined && this.renderPullingText()), h("div", { class: "refresher-refreshing" }, this.refreshingSpinner && (h("div", { class: "refresher-refreshing-icon" }, h("ion-spinner", { name: this.refreshingSpinner, "aria-label": "refreshing icon" }))), this.refreshingText !== undefined && this.renderRefreshingText())));
50
50
  }
51
51
  static get is() { return "ion-refresher-content"; }
52
52
  static get properties() {
@@ -59,7 +59,7 @@
59
59
  * @prop --color: Text color of the router link
60
60
  */
61
61
  --background: transparent;
62
- --color: var(--ion-color-primary, #3880ff);
62
+ --color: var(--ion-color-primary, #0054e9);
63
63
  background: var(--background);
64
64
  color: var(--color);
65
65
  }
@@ -0,0 +1,23 @@
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: ['light', 'dark'] }).forEach(({ title, config }) => {
8
+ test.describe(title('router-link: a11y'), () => {
9
+ test('should not have accessibility violations', async ({ page }) => {
10
+ /**
11
+ * All page content should be contained by landmarks (main, nav, etc.)
12
+ * By containing the badge in a main element, we can avoid this violation.
13
+ */
14
+ await page.setContent(`
15
+ <main>
16
+ <ion-router-link href="#">Router Link</ion-router-link>
17
+ </main>
18
+ `, config);
19
+ const results = await new AxeBuilder({ page }).analyze();
20
+ expect(results.violations).toEqual([]);
21
+ });
22
+ });
23
+ });
@@ -262,7 +262,7 @@
262
262
  --background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.07);
263
263
  --border-radius: 10px;
264
264
  --box-shadow: none;
265
- --cancel-button-color: var(--ion-color-primary, #3880ff);
265
+ --cancel-button-color: var(--ion-color-primary, #0054e9);
266
266
  --clear-button-color: var(--ion-color-step-600, #666666);
267
267
  --color: var(--ion-text-color, #000);
268
268
  --icon-color: var(--ion-color-step-600, #666666);
@@ -4,6 +4,29 @@
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
+ /**
8
+ * Only md mode uses ion-color() for the segment button
9
+ */
10
+ configs({ directions: ['ltr'], modes: ['md'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
11
+ test.describe(title('segment: a11y for ion-color()'), () => {
12
+ test('should not have accessibility violations', async ({ page }) => {
13
+ await page.setContent(`
14
+ <main>
15
+ <ion-segment aria-label="Tab Options" value="bookmarks">
16
+ <ion-segment-button value="bookmarks">
17
+ <ion-label>Bookmarks</ion-label>
18
+ </ion-segment-button>
19
+ <ion-segment-button value="reading-list">
20
+ <ion-label>Reading List</ion-label>
21
+ </ion-segment-button>
22
+ </ion-segment>
23
+ </main>
24
+ `, config);
25
+ const results = await new AxeBuilder({ page }).analyze();
26
+ expect(results.violations).toEqual([]);
27
+ });
28
+ });
29
+ });
7
30
  configs().forEach(({ title, config }) => {
8
31
  test.describe(title('segment: a11y'), () => {
9
32
  test('should not have any axe violations', async ({ page }) => {
@@ -362,7 +362,7 @@ ion-ripple-effect {
362
362
  --background-focused-opacity: .12;
363
363
  --background-hover-opacity: .04;
364
364
  --color: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.6);
365
- --color-checked: var(--ion-color-primary, #3880ff);
365
+ --color-checked: var(--ion-color-primary, #0054e9);
366
366
  --indicator-box-shadow: none;
367
367
  --indicator-color: var(--color-checked);
368
368
  --indicator-height: 2px;
@@ -425,7 +425,7 @@ ion-ripple-effect {
425
425
  --background: var(--ion-toolbar-segment-background, none);
426
426
  --background-checked: var(--ion-toolbar-segment-background-checked, none);
427
427
  --color: var(--ion-toolbar-segment-color, rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.6));
428
- --color-checked: var(--ion-toolbar-segment-color-checked, var(--ion-color-primary, #3880ff));
428
+ --color-checked: var(--ion-toolbar-segment-color-checked, var(--ion-color-primary, #0054e9));
429
429
  --indicator-color: var(--ion-toolbar-segment-color-checked, var(--color-checked));
430
430
  }
431
431
 
@@ -83,9 +83,9 @@
83
83
  --placeholder-opacity: 0.6;
84
84
  --background: transparent;
85
85
  --border-style: solid;
86
- --highlight-color-focused: var(--ion-color-primary, #3880ff);
87
- --highlight-color-valid: var(--ion-color-success, #2dd36f);
88
- --highlight-color-invalid: var(--ion-color-danger, #eb445a);
86
+ --highlight-color-focused: var(--ion-color-primary, #0054e9);
87
+ --highlight-color-valid: var(--ion-color-success, #2dd55b);
88
+ --highlight-color-invalid: var(--ion-color-danger, #c5000f);
89
89
  /**
90
90
  * This is a private API that is used to switch
91
91
  * out the highlight color based on the state
@@ -83,9 +83,9 @@
83
83
  --placeholder-opacity: 0.6;
84
84
  --background: transparent;
85
85
  --border-style: solid;
86
- --highlight-color-focused: var(--ion-color-primary, #3880ff);
87
- --highlight-color-valid: var(--ion-color-success, #2dd36f);
88
- --highlight-color-invalid: var(--ion-color-danger, #eb445a);
86
+ --highlight-color-focused: var(--ion-color-primary, #0054e9);
87
+ --highlight-color-valid: var(--ion-color-success, #2dd55b);
88
+ --highlight-color-invalid: var(--ion-color-danger, #c5000f);
89
89
  /**
90
90
  * This is a private API that is used to switch
91
91
  * out the highlight color based on the state
@@ -4,10 +4,65 @@
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 }) => {
8
- test.describe(title('select: a11y'), () => {
9
- test('should not have accessibility violations', async ({ page }) => {
10
- await page.goto(`/src/components/select/test/a11y`, config);
7
+ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
+ test.describe(title('textarea: a11y'), () => {
9
+ test('default layout should not have accessibility violations', async ({ page }) => {
10
+ await page.setContent(`
11
+ <main>
12
+ <ion-select label="Label" placeholder="Placeholder"></ion-select>
13
+ <ion-select placeholder="Placeholder">
14
+ <div slot="label">Label</div>
15
+ </ion-select>
16
+ <ion-select label="Label" value="a">
17
+ <ion-select-option value="a">Apple</ion-select-option>
18
+ </ion-select>
19
+ <ion-select aria-label="Label"></ion-select>
20
+ <ion-item>
21
+ <ion-select label="My Label" value="apples">
22
+ <ion-select-option value="apples">Apples</ion-select-option>
23
+ <ion-select-option value="bananas">Bananas</ion-select-option>
24
+ <ion-select-option value="oranges">Oranges</ion-select-option>
25
+ </ion-select>
26
+ </ion-item>
27
+ <ion-select id="multiple" multiple="true" label="My Label">
28
+ <ion-select-option value="apples">Apples</ion-select-option>
29
+ <ion-select-option value="bananas">Bananas</ion-select-option>
30
+ <ion-select-option value="oranges">Oranges</ion-select-option>
31
+ </ion-select>
32
+
33
+ <script>
34
+ const multiple = document.querySelector('#multiple');
35
+ multiple.value = ['apples', 'bananas'];
36
+ </script>
37
+ </main>
38
+ `, config);
39
+ const results = await new AxeBuilder({ page }).analyze();
40
+ expect(results.violations).toEqual([]);
41
+ });
42
+ test('focused state should not have accessibility violations', async ({ page }) => {
43
+ /**
44
+ * The primary color against the focus background
45
+ * when using fill="solid" does not meet AA
46
+ * contrast guidelines so it excluded from the test.
47
+ * The contrast here is a significant improvement
48
+ * over what Ionic has had in the past, so the team
49
+ * has decided that this tradeoff is acceptable since
50
+ * the scope of the problem is limited to the focus
51
+ * state with the primary color when fill="solid".
52
+ */
53
+ await page.setContent(`
54
+ <main>
55
+ <ion-select class="has-focus" label="Label" value="a">
56
+ <ion-select-option value="a">Apple</ion-select-option>
57
+ </ion-select>
58
+ <ion-select class="has-focus" label-placement="floating" label="Label" value="a">
59
+ <ion-select-option value="a">Apple</ion-select-option>
60
+ </ion-select>
61
+ <ion-select class="has-focus" fill="outline" label-placement="floating" label="Label" value="a">
62
+ <ion-select-option value="a">Apple</ion-select-option>
63
+ </ion-select>
64
+ </main>
65
+ `, config);
11
66
  const results = await new AxeBuilder({ page }).analyze();
12
67
  expect(results.violations).toEqual([]);
13
68
  });
@@ -187,10 +187,10 @@ ion-item {
187
187
  }
188
188
 
189
189
  .item-radio-checked {
190
- --background: rgba(var(--ion-color-primary-rgb, 56, 128, 255), 0.08);
191
- --background-focused: var(--ion-color-primary, #3880ff);
190
+ --background: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.08);
191
+ --background-focused: var(--ion-color-primary, #0054e9);
192
192
  --background-focused-opacity: 0.2;
193
- --background-hover: var(--ion-color-primary, #3880ff);
193
+ --background-hover: var(--ion-color-primary, #0054e9);
194
194
  --background-hover-opacity: 0.12;
195
195
  }
196
196
 
@@ -198,5 +198,5 @@ ion-item {
198
198
  --background-activated: var(--ion-item-color, var(--ion-text-color, #000));
199
199
  --background-focused: var(--ion-item-color, var(--ion-text-color, #000));
200
200
  --background-hover: var(--ion-item-color, var(--ion-text-color, #000));
201
- --color: var(--ion-color-primary, #3880ff);
201
+ --color: var(--ion-color-primary, #0054e9);
202
202
  }
@@ -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
+ });
@@ -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
  }
@@ -4,14 +4,46 @@
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
+ </main>
19
+ `, config);
20
+ const results = await new AxeBuilder({ page }).analyze();
21
+ expect(results.violations).toEqual([]);
22
+ });
23
+ test('focused state should not have accessibility violations', async ({ page }) => {
24
+ /**
25
+ * The primary color against the focus background
26
+ * when using fill="solid" does not meet AA
27
+ * contrast guidelines so it excluded from the test.
28
+ * The contrast here is a significant improvement
29
+ * over what Ionic has had in the past, so the team
30
+ * has decided that this tradeoff is acceptable since
31
+ * the scope of the problem is limited to the focus
32
+ * state with the primary color when fill="solid".
33
+ */
34
+ await page.setContent(`
35
+ <main>
36
+ <ion-textarea class="has-focus" label="Label" value="My Text"></ion-textarea>
37
+ <ion-textarea class="has-focus" label-placement="floating" label="Label" value="My Text"></ion-textarea>
38
+ <ion-textarea class="has-focus" fill="outline" label-placement="floating" label="Label" value="My Text"></ion-textarea>
39
+ </main>
40
+ `, config);
11
41
  const results = await new AxeBuilder({ page }).analyze();
12
42
  expect(results.violations).toEqual([]);
13
43
  });
14
44
  });
45
+ });
46
+ configs({ directions: ['ltr'] }).forEach(({ title, config, screenshot }) => {
15
47
  test.describe(title('textarea: font scaling'), () => {
16
48
  test('should scale text on larger font sizes', async ({ page }) => {
17
49
  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