@ionic/core 7.5.8-dev.11703088210.14a72b83 → 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 (500) hide show
  1. package/components/action-sheet.js +1 -1
  2. package/components/alert.js +2 -2
  3. package/components/backdrop.js +0 -12
  4. package/components/button.js +2 -2
  5. package/components/checkbox.js +2 -2
  6. package/components/gesture-controller.js +1 -1
  7. package/components/ion-back-button.js +1 -1
  8. package/components/ion-badge.js +2 -2
  9. package/components/ion-content.js +3 -4
  10. package/components/ion-datetime.js +15 -48
  11. package/components/ion-fab-button.js +2 -2
  12. package/components/ion-input.js +4 -2
  13. package/components/ion-item-option.js +2 -2
  14. package/components/ion-loading.js +1 -1
  15. package/components/ion-menu-button.js +1 -1
  16. package/components/ion-picker.js +2 -2
  17. package/components/ion-progress-bar.js +2 -2
  18. package/components/ion-range.js +2 -2
  19. package/components/ion-refresher-content.js +4 -11
  20. package/components/ion-refresher.js +184 -5
  21. package/components/ion-router-link.js +1 -1
  22. package/components/ion-searchbar.js +3 -1
  23. package/components/ion-segment-button.js +1 -1
  24. package/components/ion-select.js +2 -2
  25. package/components/ion-tab-bar.js +2 -2
  26. package/components/ion-textarea.js +4 -2
  27. package/components/ion-toast.js +2 -2
  28. package/components/ion-toggle.js +2 -2
  29. package/components/item.js +2 -2
  30. package/components/label.js +1 -1
  31. package/components/overlays.js +5 -1
  32. package/components/picker-column.js +1 -1
  33. package/components/radio.js +2 -2
  34. package/components/select-popover.js +1 -1
  35. package/css/core.css +35 -34
  36. package/css/core.css.map +1 -1
  37. package/css/global.bundle.css +1 -1
  38. package/css/ionic.bundle.css +1 -1
  39. package/css/ionic.bundle.css.map +1 -1
  40. package/css/themes/dark.always.css +122 -0
  41. package/css/themes/dark.always.css.map +1 -0
  42. package/css/themes/dark.class.css +122 -0
  43. package/css/themes/dark.class.css.map +1 -0
  44. package/css/themes/dark.css +3 -0
  45. package/css/themes/dark.css.map +1 -0
  46. package/css/themes/dark.system.css +124 -0
  47. package/css/themes/dark.system.css.map +1 -0
  48. package/css/typography.css +1 -1
  49. package/dist/cjs/{app-globals-28656db1.js → app-globals-0af482c7.js} +1 -1
  50. package/dist/cjs/{button-active-75b38d77.js → button-active-9d7e0640.js} +2 -2
  51. package/dist/cjs/{gesture-controller-c40c045a.js → gesture-controller-9436f482.js} +1 -0
  52. package/dist/cjs/{index-097270a3.js → index-5cbb20f9.js} +1 -1
  53. package/dist/cjs/{index-b0102f48.js → index-bbb4336c.js} +39 -1
  54. package/dist/cjs/{index-cb3e0ab7.js → index-d4c2e02c.js} +3 -3
  55. package/dist/cjs/{index-d1b59ffa.js → index-ee07ed59.js} +1 -1
  56. package/dist/cjs/index.cjs.js +9 -9
  57. package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
  58. package/dist/cjs/ion-action-sheet.cjs.entry.js +7 -7
  59. package/dist/cjs/ion-alert.cjs.entry.js +8 -8
  60. package/dist/cjs/ion-app_8.cjs.entry.js +8 -9
  61. package/dist/cjs/ion-avatar_3.cjs.entry.js +4 -4
  62. package/dist/cjs/ion-back-button.cjs.entry.js +3 -3
  63. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -14
  64. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  65. package/dist/cjs/ion-button_2.cjs.entry.js +4 -4
  66. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  67. package/dist/cjs/ion-checkbox.cjs.entry.js +4 -4
  68. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  69. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  71. package/dist/cjs/ion-datetime_3.cjs.entry.js +15 -29
  72. package/dist/cjs/ion-fab_3.cjs.entry.js +4 -4
  73. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  74. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +2 -2
  75. package/dist/cjs/ion-input.cjs.entry.js +6 -4
  76. package/dist/cjs/ion-item-option_3.cjs.entry.js +5 -5
  77. package/dist/cjs/ion-item_8.cjs.entry.js +5 -5
  78. package/dist/cjs/ion-loading.cjs.entry.js +5 -4
  79. package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
  80. package/dist/cjs/ion-modal.cjs.entry.js +6 -6
  81. package/dist/cjs/ion-nav_2.cjs.entry.js +4 -4
  82. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +2 -2
  83. package/dist/cjs/ion-picker-internal.cjs.entry.js +1 -1
  84. package/dist/cjs/ion-popover.cjs.entry.js +5 -4
  85. package/dist/cjs/ion-progress-bar.cjs.entry.js +4 -4
  86. package/dist/cjs/ion-radio_2.cjs.entry.js +4 -4
  87. package/dist/cjs/ion-range.cjs.entry.js +5 -5
  88. package/dist/cjs/ion-refresher_2.cjs.entry.js +19 -34
  89. package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
  90. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  91. package/dist/cjs/ion-route_4.cjs.entry.js +3 -3
  92. package/dist/cjs/ion-searchbar.cjs.entry.js +5 -3
  93. package/dist/cjs/ion-segment_2.cjs.entry.js +4 -4
  94. package/dist/cjs/ion-select_3.cjs.entry.js +7 -6
  95. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  96. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  97. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
  98. package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
  99. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  100. package/dist/cjs/ion-textarea.cjs.entry.js +6 -4
  101. package/dist/cjs/ion-toast.cjs.entry.js +6 -5
  102. package/dist/cjs/ion-toggle.cjs.entry.js +5 -5
  103. package/dist/cjs/{ionic-global-62510d64.js → ionic-global-f4a2093b.js} +1 -1
  104. package/dist/cjs/ionic.cjs.js +5 -5
  105. package/dist/cjs/{ios.transition-d9c0e4fb.js → ios.transition-a4ffb5a2.js} +2 -2
  106. package/dist/cjs/loader.cjs.js +4 -4
  107. package/dist/cjs/{md.transition-4fac8a87.js → md.transition-292abe1c.js} +2 -2
  108. package/dist/cjs/{overlays-b1471172.js → overlays-2c6b1072.js} +6 -2
  109. package/dist/cjs/{status-tap-0aa8e1f2.js → status-tap-415acac6.js} +1 -1
  110. package/dist/cjs/{swipe-back-2a858bbd.js → swipe-back-b8f2330b.js} +2 -2
  111. package/dist/collection/collection-manifest.json +1 -1
  112. package/dist/collection/components/action-sheet/action-sheet.ios.css +3 -3
  113. package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +23 -14
  114. package/dist/collection/components/alert/alert.ios.css +6 -6
  115. package/dist/collection/components/alert/alert.md.css +6 -6
  116. package/dist/collection/components/alert/test/a11y/alert.e2e.js +22 -9
  117. package/dist/collection/components/back-button/back-button.ios.css +1 -1
  118. package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +21 -0
  119. package/dist/collection/components/backdrop/backdrop.js +0 -12
  120. package/dist/collection/components/badge/badge.ios.css +1 -1
  121. package/dist/collection/components/badge/badge.md.css +1 -1
  122. package/dist/collection/components/badge/test/a11y/badge.e2e.js +18 -0
  123. package/dist/collection/components/button/button.ios.css +10 -10
  124. package/dist/collection/components/button/button.md.css +8 -8
  125. package/dist/collection/components/button/test/a11y/button.e2e.js +48 -0
  126. package/dist/collection/components/checkbox/checkbox.ios.css +2 -2
  127. package/dist/collection/components/checkbox/checkbox.md.css +2 -2
  128. package/dist/collection/components/checkbox/test/a11y/checkbox.e2e.js +11 -2
  129. package/dist/collection/components/content/content.css +0 -4
  130. package/dist/collection/components/content/content.js +2 -3
  131. package/dist/collection/components/datetime/datetime.ios.css +83 -24
  132. package/dist/collection/components/datetime/datetime.js +5 -20
  133. package/dist/collection/components/datetime/datetime.md.css +88 -24
  134. package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +1 -1
  135. package/dist/collection/components/datetime/test/a11y/datetime.spec.js +6 -9
  136. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +10 -0
  137. package/dist/collection/components/datetime/test/month-year-picker/datetime.e2e.js +1 -1
  138. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +2 -2
  139. package/dist/collection/components/fab-button/fab-button.ios.css +13 -13
  140. package/dist/collection/components/fab-button/fab-button.md.css +4 -4
  141. package/dist/collection/components/fab-button/test/a11y/fab-button.e2e.js +50 -0
  142. package/dist/collection/components/input/input.ios.css +3 -3
  143. package/dist/collection/components/input/input.js +4 -2
  144. package/dist/collection/components/input/input.md.css +3 -3
  145. package/dist/collection/components/input/test/a11y/input.e2e.js +35 -3
  146. package/dist/collection/components/item/item.ios.css +3 -3
  147. package/dist/collection/components/item/item.md.css +4 -4
  148. package/dist/collection/components/item-option/item-option.ios.css +2 -2
  149. package/dist/collection/components/item-option/item-option.md.css +1 -1
  150. package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +28 -0
  151. package/dist/collection/components/label/label.md.css +1 -1
  152. package/dist/collection/components/label/test/a11y/label.e2e.js +20 -0
  153. package/dist/collection/components/loading/loading.md.css +1 -1
  154. package/dist/collection/components/loading/test/a11y/loading.e2e.js +21 -5
  155. package/dist/collection/components/menu-button/menu-button.ios.css +1 -1
  156. package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +14 -0
  157. package/dist/collection/components/picker/picker.ios.css +1 -1
  158. package/dist/collection/components/picker/picker.md.css +1 -1
  159. package/dist/collection/components/picker-column/picker-column.md.css +1 -1
  160. package/dist/collection/components/picker-internal/test/a11y/picker-internal.e2e.js +18 -2
  161. package/dist/collection/components/progress-bar/progress-bar.ios.css +2 -2
  162. package/dist/collection/components/progress-bar/progress-bar.md.css +2 -2
  163. package/dist/collection/components/progress-bar/test/a11y/progress-bar.e2e.js +24 -0
  164. package/dist/collection/components/radio/radio.ios.css +2 -2
  165. package/dist/collection/components/radio/radio.md.css +2 -2
  166. package/dist/collection/components/radio/test/a11y/radio.e2e.js +44 -6
  167. package/dist/collection/components/range/range.ios.css +1 -1
  168. package/dist/collection/components/range/range.md.css +3 -3
  169. package/dist/collection/components/range/test/a11y/range.e2e.js +18 -8
  170. package/dist/collection/components/refresher/refresher.md.css +2 -2
  171. package/dist/collection/components/refresher/refresher.utils.js +11 -19
  172. package/dist/collection/components/refresher/test/a11y/refresher.e2e.js +25 -0
  173. package/dist/collection/components/refresher-content/refresher-content.js +4 -10
  174. package/dist/collection/components/router-link/router-link.css +1 -1
  175. package/dist/collection/components/router-link/test/a11y/router-link.e2e.js +23 -0
  176. package/dist/collection/components/searchbar/searchbar.ios.css +1 -1
  177. package/dist/collection/components/searchbar/searchbar.js +3 -1
  178. package/dist/collection/components/segment/test/a11y/segment.e2e.js +23 -0
  179. package/dist/collection/components/segment-button/segment-button.md.css +2 -2
  180. package/dist/collection/components/select/select.ios.css +3 -3
  181. package/dist/collection/components/select/select.md.css +3 -3
  182. package/dist/collection/components/select/test/a11y/select.e2e.js +59 -4
  183. package/dist/collection/components/select-popover/select-popover.md.css +4 -4
  184. package/dist/collection/components/select-popover/test/a11y/select-popover.e2e.js +32 -0
  185. package/dist/collection/components/tab-bar/tab-bar.ios.css +1 -1
  186. package/dist/collection/components/tab-bar/tab-bar.md.css +1 -1
  187. package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +35 -3
  188. package/dist/collection/components/textarea/textarea.ios.css +3 -3
  189. package/dist/collection/components/textarea/textarea.js +4 -2
  190. package/dist/collection/components/textarea/textarea.md.css +3 -3
  191. package/dist/collection/components/toast/test/a11y/toast.e2e.js +56 -24
  192. package/dist/collection/components/toast/toast.ios.css +1 -1
  193. package/dist/collection/components/toast/toast.md.css +2 -2
  194. package/dist/collection/components/toggle/test/a11y/toggle.e2e.js +8 -2
  195. package/dist/collection/components/toggle/toggle.ios.css +1 -1
  196. package/dist/collection/components/toggle/toggle.md.css +2 -2
  197. package/dist/collection/css/test/a11y/typography.e2e.js +18 -0
  198. package/dist/collection/themes/test/colors/theme.e2e.js +114 -0
  199. package/dist/collection/utils/gesture/gesture-controller.js +1 -1
  200. package/dist/collection/utils/overlays.js +5 -1
  201. package/dist/collection/utils/test/overlays/overlays-scroll-blocking.spec.js +65 -0
  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 +13 -24
  205. package/dist/esm/{app-globals-c23144fc.js → app-globals-722340c4.js} +1 -1
  206. package/dist/esm/{button-active-7013b5a1.js → button-active-ed9d848c.js} +2 -2
  207. package/dist/esm/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
  208. package/dist/esm/{index-39329c6f.js → index-08d686eb.js} +39 -1
  209. package/dist/esm/{index-2cf77112.js → index-39782642.js} +2 -2
  210. package/dist/esm/{index-7a818ed3.js → index-80492ed3.js} +1 -1
  211. package/dist/esm/{index-bebaae5d.js → index-d8817fb0.js} +3 -3
  212. package/dist/esm/index.js +9 -9
  213. package/dist/esm/ion-accordion_2.entry.js +2 -2
  214. package/dist/esm/ion-action-sheet.entry.js +7 -7
  215. package/dist/esm/ion-alert.entry.js +8 -8
  216. package/dist/esm/ion-app_8.entry.js +8 -9
  217. package/dist/esm/ion-avatar_3.entry.js +4 -4
  218. package/dist/esm/ion-back-button.entry.js +3 -3
  219. package/dist/esm/ion-backdrop.entry.js +2 -14
  220. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  221. package/dist/esm/ion-button_2.entry.js +4 -4
  222. package/dist/esm/ion-card_5.entry.js +2 -2
  223. package/dist/esm/ion-checkbox.entry.js +4 -4
  224. package/dist/esm/ion-chip.entry.js +2 -2
  225. package/dist/esm/ion-col_3.entry.js +2 -2
  226. package/dist/esm/ion-datetime-button.entry.js +2 -2
  227. package/dist/esm/ion-datetime_3.entry.js +15 -29
  228. package/dist/esm/ion-fab_3.entry.js +4 -4
  229. package/dist/esm/ion-img.entry.js +2 -2
  230. package/dist/esm/ion-infinite-scroll_2.entry.js +2 -2
  231. package/dist/esm/ion-input.entry.js +6 -4
  232. package/dist/esm/ion-item-option_3.entry.js +5 -5
  233. package/dist/esm/ion-item_8.entry.js +5 -5
  234. package/dist/esm/ion-loading.entry.js +5 -4
  235. package/dist/esm/ion-menu_3.entry.js +7 -7
  236. package/dist/esm/ion-modal.entry.js +6 -6
  237. package/dist/esm/ion-nav_2.entry.js +4 -4
  238. package/dist/esm/ion-picker-column-internal.entry.js +2 -2
  239. package/dist/esm/ion-picker-internal.entry.js +1 -1
  240. package/dist/esm/ion-popover.entry.js +5 -4
  241. package/dist/esm/ion-progress-bar.entry.js +4 -4
  242. package/dist/esm/ion-radio_2.entry.js +4 -4
  243. package/dist/esm/ion-range.entry.js +5 -5
  244. package/dist/esm/ion-refresher_2.entry.js +19 -34
  245. package/dist/esm/ion-reorder_2.entry.js +3 -3
  246. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  247. package/dist/esm/ion-route_4.entry.js +3 -3
  248. package/dist/esm/ion-searchbar.entry.js +5 -3
  249. package/dist/esm/ion-segment_2.entry.js +4 -4
  250. package/dist/esm/ion-select_3.entry.js +7 -6
  251. package/dist/esm/ion-spinner.entry.js +2 -2
  252. package/dist/esm/ion-split-pane.entry.js +2 -2
  253. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  254. package/dist/esm/ion-tab_2.entry.js +1 -1
  255. package/dist/esm/ion-text.entry.js +2 -2
  256. package/dist/esm/ion-textarea.entry.js +6 -4
  257. package/dist/esm/ion-toast.entry.js +6 -5
  258. package/dist/esm/ion-toggle.entry.js +5 -5
  259. package/dist/esm/{ionic-global-6c78e871.js → ionic-global-c0cda98e.js} +1 -1
  260. package/dist/esm/ionic.js +6 -6
  261. package/dist/esm/{ios.transition-daa373e9.js → ios.transition-fd16bec1.js} +2 -2
  262. package/dist/esm/loader.js +5 -5
  263. package/dist/esm/{md.transition-91c3d3cc.js → md.transition-94ac93e1.js} +2 -2
  264. package/dist/esm/{overlays-64e67e2c.js → overlays-d23ea6e1.js} +6 -2
  265. package/dist/esm/{status-tap-9dd45200.js → status-tap-2b93b1b5.js} +1 -1
  266. package/dist/esm/{swipe-back-a6f386fc.js → swipe-back-a8ca7f93.js} +2 -2
  267. package/dist/esm-es5/app-globals-722340c4.js +4 -0
  268. package/dist/esm-es5/{button-active-7013b5a1.js → button-active-ed9d848c.js} +1 -1
  269. package/dist/esm-es5/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
  270. package/dist/esm-es5/{index-39329c6f.js → index-08d686eb.js} +1 -1
  271. package/dist/esm-es5/{index-2cf77112.js → index-39782642.js} +1 -1
  272. package/dist/esm-es5/{index-7a818ed3.js → index-80492ed3.js} +1 -1
  273. package/dist/esm-es5/{index-bebaae5d.js → index-d8817fb0.js} +1 -1
  274. package/dist/esm-es5/index.js +1 -1
  275. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  276. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  277. package/dist/esm-es5/ion-alert.entry.js +1 -1
  278. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  279. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  280. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  281. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  282. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  283. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  284. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  285. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  286. package/dist/esm-es5/ion-chip.entry.js +1 -1
  287. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  288. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  289. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  290. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  291. package/dist/esm-es5/ion-img.entry.js +1 -1
  292. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  293. package/dist/esm-es5/ion-input.entry.js +1 -1
  294. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  295. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  296. package/dist/esm-es5/ion-loading.entry.js +1 -1
  297. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  298. package/dist/esm-es5/ion-modal.entry.js +1 -1
  299. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  300. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  301. package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
  302. package/dist/esm-es5/ion-popover.entry.js +1 -1
  303. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  304. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  305. package/dist/esm-es5/ion-range.entry.js +1 -1
  306. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  307. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  308. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  309. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  310. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  311. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  312. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  313. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  314. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  315. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  316. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  317. package/dist/esm-es5/ion-text.entry.js +1 -1
  318. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  319. package/dist/esm-es5/ion-toast.entry.js +1 -1
  320. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  321. package/dist/esm-es5/{ionic-global-6c78e871.js → ionic-global-c0cda98e.js} +1 -1
  322. package/dist/esm-es5/ionic.js +1 -1
  323. package/dist/esm-es5/{ios.transition-daa373e9.js → ios.transition-fd16bec1.js} +1 -1
  324. package/dist/esm-es5/loader.js +1 -1
  325. package/dist/esm-es5/{md.transition-91c3d3cc.js → md.transition-94ac93e1.js} +1 -1
  326. package/dist/esm-es5/overlays-d23ea6e1.js +4 -0
  327. package/dist/esm-es5/{status-tap-9dd45200.js → status-tap-2b93b1b5.js} +1 -1
  328. package/dist/esm-es5/swipe-back-a8ca7f93.js +4 -0
  329. package/dist/html.html-data.json +2 -2
  330. package/dist/ionic/index.esm.js +1 -1
  331. package/dist/ionic/ionic.esm.js +1 -1
  332. package/dist/ionic/ionic.js +1 -1
  333. package/dist/ionic/{p-ee4a54e3.entry.js → p-023b1cf4.entry.js} +1 -1
  334. package/dist/ionic/{p-6744eca5.entry.js → p-02e066a0.entry.js} +1 -1
  335. package/dist/ionic/{p-23a27e78.system.entry.js → p-0339b688.system.entry.js} +1 -1
  336. package/dist/ionic/{p-70ecb18b.entry.js → p-0941a5d7.entry.js} +1 -1
  337. package/dist/ionic/{p-a843a90e.system.entry.js → p-098f4d12.system.entry.js} +1 -1
  338. package/dist/ionic/p-0afef6b9.entry.js +4 -0
  339. package/dist/ionic/{p-a0945c3a.system.entry.js → p-0e53f8ea.system.entry.js} +1 -1
  340. package/dist/ionic/{p-d3e123c0.entry.js → p-0ebcff25.entry.js} +1 -1
  341. package/dist/ionic/{p-161d0916.entry.js → p-1161a793.entry.js} +1 -1
  342. package/dist/ionic/{p-89026d53.entry.js → p-1208f939.entry.js} +1 -1
  343. package/dist/ionic/{p-18032a93.entry.js → p-1286049a.entry.js} +1 -1
  344. package/dist/ionic/{p-eef8d7e8.system.entry.js → p-12869199.system.entry.js} +1 -1
  345. package/dist/ionic/p-1786bc72.js +4 -0
  346. package/dist/ionic/{p-bc97b5cd.system.entry.js → p-193ff029.system.entry.js} +1 -1
  347. package/dist/ionic/{p-1631b52f.system.js → p-1d624e03.system.js} +1 -1
  348. package/dist/ionic/{p-2657f213.entry.js → p-1de103b7.entry.js} +1 -1
  349. package/dist/ionic/p-1e57bd24.entry.js +4 -0
  350. package/dist/ionic/{p-3f5ae764.entry.js → p-1fc72959.entry.js} +1 -1
  351. package/dist/ionic/{p-1ff22253.entry.js → p-2092f39f.entry.js} +1 -1
  352. package/dist/ionic/{p-c7c8429a.system.js → p-20d469d0.system.js} +1 -1
  353. package/dist/ionic/{p-b81a8111.system.entry.js → p-2938823a.system.entry.js} +1 -1
  354. package/dist/ionic/{p-46dbd723.entry.js → p-29bf41bd.entry.js} +1 -1
  355. package/dist/ionic/p-2dd0355d.system.entry.js +4 -0
  356. package/dist/ionic/{p-57c0d5bf.system.entry.js → p-2f2293da.system.entry.js} +1 -1
  357. package/dist/ionic/{p-0263eb49.system.js → p-30029cc2.system.js} +1 -1
  358. package/dist/ionic/{p-ac4a7fc0.js → p-31158892.js} +1 -1
  359. package/dist/ionic/p-31cf9613.entry.js +4 -0
  360. package/dist/ionic/p-350f7292.system.entry.js +4 -0
  361. package/dist/ionic/{p-86c2bbc8.entry.js → p-353b349d.entry.js} +1 -1
  362. package/dist/ionic/{p-27e6473f.entry.js → p-3b568d18.entry.js} +1 -1
  363. package/dist/ionic/p-3e13501a.system.entry.js +4 -0
  364. package/dist/ionic/{p-31b2326e.system.js → p-3e1e14d9.system.js} +1 -1
  365. package/dist/ionic/{p-3acad8ff.system.entry.js → p-3e625023.system.entry.js} +1 -1
  366. package/dist/ionic/{p-426bdba9.system.js → p-3fe96156.system.js} +1 -1
  367. package/dist/ionic/{p-e26030f8.system.js → p-4155f352.system.js} +1 -1
  368. package/dist/ionic/p-4890093d.js +4 -0
  369. package/dist/ionic/{p-2cd9cb80.system.entry.js → p-4fb51e61.system.entry.js} +1 -1
  370. package/dist/ionic/p-51abefb7.system.js +4 -0
  371. package/dist/ionic/{p-e8e530fc.entry.js → p-535d2a67.entry.js} +1 -1
  372. package/dist/ionic/{p-a3a145d3.entry.js → p-55a0cd33.entry.js} +1 -1
  373. package/dist/ionic/{p-aac289d2.system.entry.js → p-564af202.system.entry.js} +1 -1
  374. package/dist/ionic/{p-abab375b.system.js → p-57477107.system.js} +1 -1
  375. package/dist/ionic/p-57798ba6.entry.js +4 -0
  376. package/dist/ionic/p-588fdf40.entry.js +4 -0
  377. package/dist/ionic/{p-a5c81b99.entry.js → p-5a68960f.entry.js} +1 -1
  378. package/dist/ionic/{p-6cf08720.entry.js → p-5b20db28.entry.js} +1 -1
  379. package/dist/ionic/{p-34d6f520.system.js → p-5b365ca7.system.js} +1 -1
  380. package/dist/ionic/{p-a1b4dba7.entry.js → p-5b834053.entry.js} +1 -1
  381. package/dist/ionic/{p-21f015cf.js → p-5ecae037.js} +1 -1
  382. package/dist/ionic/{p-67598744.entry.js → p-5fbfa8c9.entry.js} +1 -1
  383. package/dist/ionic/p-5ff60387.system.entry.js +4 -0
  384. package/dist/ionic/p-60b386c9.system.entry.js +4 -0
  385. package/dist/ionic/{p-d0251fc4.entry.js → p-67da080d.entry.js} +1 -1
  386. package/dist/ionic/{p-df361680.system.entry.js → p-6f96f7b1.system.entry.js} +1 -1
  387. package/dist/ionic/{p-fcf49977.system.entry.js → p-73ea8f82.system.entry.js} +1 -1
  388. package/dist/ionic/{p-9f376964.system.entry.js → p-76c94634.system.entry.js} +1 -1
  389. package/dist/ionic/p-76d3765d.js +4 -0
  390. package/dist/ionic/{p-2ac9d078.system.entry.js → p-77965464.system.entry.js} +1 -1
  391. package/dist/ionic/{p-a99f14a7.system.entry.js → p-7828a27f.system.entry.js} +1 -1
  392. package/dist/ionic/{p-f34d6a49.entry.js → p-7a63e024.entry.js} +1 -1
  393. package/dist/ionic/{p-5f46d93e.entry.js → p-7c7e21a7.entry.js} +1 -1
  394. package/dist/ionic/{p-bbe3feee.entry.js → p-80fa068e.entry.js} +1 -1
  395. package/dist/ionic/p-8c97cdc0.entry.js +4 -0
  396. package/dist/ionic/p-8e086176.system.entry.js +4 -0
  397. package/dist/ionic/{p-f5d2dc9b.js → p-8ededb41.js} +1 -1
  398. package/dist/ionic/{p-41f7af3f.system.entry.js → p-90483001.system.entry.js} +1 -1
  399. package/dist/ionic/{p-5f127075.system.entry.js → p-93f25d0d.system.entry.js} +1 -1
  400. package/dist/ionic/p-9588396d.entry.js +4 -0
  401. package/dist/ionic/{p-a0db3de9.system.entry.js → p-9709ebd8.system.entry.js} +1 -1
  402. package/dist/ionic/{p-12cdcb59.js → p-9738fd82.js} +1 -1
  403. package/dist/ionic/{p-8c202d6e.system.entry.js → p-98c798de.system.entry.js} +1 -1
  404. package/dist/ionic/{p-a70b5d24.entry.js → p-98f3d827.entry.js} +1 -1
  405. package/dist/ionic/{p-bb3615f7.js → p-9b97df10.js} +1 -1
  406. package/dist/ionic/{p-89cfbc88.system.entry.js → p-9c229210.system.entry.js} +2 -2
  407. package/dist/ionic/p-9eae578e.system.entry.js +4 -0
  408. package/dist/ionic/{p-93dac17a.system.entry.js → p-9eec42cc.system.entry.js} +1 -1
  409. package/dist/ionic/{p-53a3283e.entry.js → p-a4afcc88.entry.js} +1 -1
  410. package/dist/ionic/p-a60a1ce5.js +4 -0
  411. package/dist/ionic/{p-315ad733.system.entry.js → p-a8e90d15.system.entry.js} +1 -1
  412. package/dist/ionic/{p-90db28f8.system.entry.js → p-a9e3b5be.system.entry.js} +1 -1
  413. package/dist/ionic/p-ab11130c.system.js +4 -0
  414. package/dist/ionic/{p-27a5f2c7.system.entry.js → p-ad8bed54.system.entry.js} +1 -1
  415. package/dist/ionic/p-b1a2a195.system.entry.js +4 -0
  416. package/dist/ionic/{p-98ac0e27.system.entry.js → p-b3b3efba.system.entry.js} +2 -2
  417. package/dist/ionic/{p-58ff9e5b.system.js → p-b4a51c42.system.js} +1 -1
  418. package/dist/ionic/{p-3cb5466e.entry.js → p-b5f9f14c.entry.js} +1 -1
  419. package/dist/ionic/{p-b0fcf130.system.entry.js → p-b6f5e4f2.system.entry.js} +1 -1
  420. package/dist/ionic/{p-99fe0543.entry.js → p-bcd073dd.entry.js} +1 -1
  421. package/dist/ionic/p-be6344dd.entry.js +4 -0
  422. package/dist/ionic/p-c14f8ac8.js +4 -0
  423. package/dist/ionic/{p-acdd8148.js → p-c3c3333a.js} +1 -1
  424. package/dist/ionic/p-c7c7c110.entry.js +4 -0
  425. package/dist/ionic/{p-8261be6c.system.entry.js → p-c847fb35.system.entry.js} +1 -1
  426. package/dist/ionic/{p-e3c44332.system.entry.js → p-c91ccbfa.system.entry.js} +1 -1
  427. package/dist/ionic/p-c9e07b2f.entry.js +4 -0
  428. package/dist/ionic/{p-ad953217.system.entry.js → p-caf21b46.system.entry.js} +1 -1
  429. package/dist/ionic/p-ccc2fb62.system.entry.js +4 -0
  430. package/dist/ionic/{p-19545a49.system.entry.js → p-cce9f61a.system.entry.js} +1 -1
  431. package/dist/ionic/{p-71d986ae.entry.js → p-cef8c5c2.entry.js} +1 -1
  432. package/dist/ionic/{p-1c6c6098.entry.js → p-cfe57b1b.entry.js} +1 -1
  433. package/dist/ionic/{p-64af4468.entry.js → p-d1025b3d.entry.js} +1 -1
  434. package/dist/ionic/p-d32188f3.system.entry.js +4 -0
  435. package/dist/ionic/{p-c04accad.entry.js → p-d37b441e.entry.js} +1 -1
  436. package/dist/ionic/{p-4f71a9cf.system.entry.js → p-d39db09e.system.entry.js} +1 -1
  437. package/dist/ionic/{p-f8c5a0dd.system.js → p-d3b030b8.system.js} +1 -1
  438. package/dist/ionic/{p-405f1a72.entry.js → p-d51019a8.entry.js} +1 -1
  439. package/dist/ionic/{p-91f9e81b.js → p-d662d908.js} +1 -1
  440. package/dist/ionic/p-d7e9a0ac.entry.js +4 -0
  441. package/dist/ionic/p-da15f571.system.entry.js +4 -0
  442. package/dist/ionic/{p-3535a36c.entry.js → p-ddb30596.entry.js} +1 -1
  443. package/dist/ionic/p-de74582b.system.entry.js +4 -0
  444. package/dist/ionic/{p-c5ae50be.system.js → p-e3584231.system.js} +1 -1
  445. package/dist/ionic/p-e4d90573.js +4 -0
  446. package/dist/ionic/p-ebcf6eca.entry.js +4 -0
  447. package/dist/ionic/{p-ca32685b.system.entry.js → p-ec040c06.system.entry.js} +1 -1
  448. package/dist/ionic/{p-2a7e6572.system.entry.js → p-ed25b7cc.system.entry.js} +1 -1
  449. package/dist/ionic/{p-7484b1d6.system.js → p-f7a36cd0.system.js} +1 -1
  450. package/dist/ionic/{p-e4045e04.entry.js → p-f8a5bb89.entry.js} +1 -1
  451. package/dist/ionic/{p-8a75f7bf.system.entry.js → p-f957d584.system.entry.js} +1 -1
  452. package/dist/ionic/{p-ad78c421.system.js → p-fff7a57e.system.js} +1 -1
  453. package/dist/types/components/backdrop/backdrop.d.ts +0 -3
  454. package/dist/types/components/datetime/datetime.d.ts +0 -1
  455. package/dist/types/components/input/input.d.ts +5 -1
  456. package/dist/types/components/menu/menu.d.ts +1 -1
  457. package/dist/types/components/refresher/refresher.utils.d.ts +0 -16
  458. package/dist/types/components/searchbar/searchbar.d.ts +2 -0
  459. package/dist/types/components/textarea/textarea.d.ts +5 -1
  460. package/dist/types/components.d.ts +7 -7
  461. package/dist/types/utils/gesture/gesture-controller.d.ts +1 -0
  462. package/hydrate/index.d.ts +1 -1
  463. package/hydrate/index.js +79 -112
  464. package/package.json +2 -2
  465. package/components/refresher.utils.js +0 -196
  466. package/dist/esm-es5/app-globals-c23144fc.js +0 -4
  467. package/dist/esm-es5/overlays-64e67e2c.js +0 -4
  468. package/dist/esm-es5/swipe-back-a6f386fc.js +0 -4
  469. package/dist/ionic/p-06600f70.js +0 -4
  470. package/dist/ionic/p-0827d00e.system.entry.js +0 -4
  471. package/dist/ionic/p-1cbc21e2.system.entry.js +0 -4
  472. package/dist/ionic/p-1e7daa1f.entry.js +0 -4
  473. package/dist/ionic/p-2507b0c0.entry.js +0 -4
  474. package/dist/ionic/p-312221db.entry.js +0 -4
  475. package/dist/ionic/p-33f3cd49.entry.js +0 -4
  476. package/dist/ionic/p-35ce400e.system.js +0 -4
  477. package/dist/ionic/p-45db7949.system.entry.js +0 -4
  478. package/dist/ionic/p-58dd7c15.entry.js +0 -4
  479. package/dist/ionic/p-5a7d5905.system.entry.js +0 -4
  480. package/dist/ionic/p-5c7f13cd.system.entry.js +0 -4
  481. package/dist/ionic/p-5fb707e0.entry.js +0 -4
  482. package/dist/ionic/p-6a6477b2.js +0 -4
  483. package/dist/ionic/p-742e11cf.system.entry.js +0 -4
  484. package/dist/ionic/p-78ebf1b6.system.entry.js +0 -4
  485. package/dist/ionic/p-7ae5ca1f.system.entry.js +0 -4
  486. package/dist/ionic/p-83fada9e.system.entry.js +0 -4
  487. package/dist/ionic/p-8a10752d.entry.js +0 -4
  488. package/dist/ionic/p-af959b5d.entry.js +0 -4
  489. package/dist/ionic/p-b11ceee2.entry.js +0 -4
  490. package/dist/ionic/p-b5e33ebc.system.entry.js +0 -4
  491. package/dist/ionic/p-b8f2134e.js +0 -4
  492. package/dist/ionic/p-cde72008.js +0 -4
  493. package/dist/ionic/p-d1530ea9.entry.js +0 -4
  494. package/dist/ionic/p-ddccf1f4.js +0 -4
  495. package/dist/ionic/p-e145b9f9.entry.js +0 -4
  496. package/dist/ionic/p-eab6401e.js +0 -4
  497. package/dist/ionic/p-edc5c693.system.entry.js +0 -4
  498. package/dist/ionic/p-f0384573.system.entry.js +0 -4
  499. package/dist/ionic/p-f10de9d5.system.js +0 -4
  500. package/dist/ionic/p-f444fea5.entry.js +0 -4
@@ -4,20 +4,36 @@
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({ modes: ['ios'], directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
8
  test.describe(title('loading: a11y'), () => {
9
9
  test('should set aria-labelledby with a message', async ({ page }) => {
10
- await page.goto('/src/components/loading/test/a11y', config);
10
+ await page.setContent(`
11
+ <ion-loading></ion-loading>
12
+
13
+ <script>
14
+ const loading = document.querySelector('ion-loading');
15
+ loading.message = 'Loading';
16
+ </script>
17
+ `, config);
11
18
  const ionLoadingDidPresent = await page.spyOnEvent('ionLoadingDidPresent');
12
- await page.click('#open-message-loading');
19
+ const loading = page.locator('ion-loading');
20
+ await loading.evaluate((el) => el.present());
13
21
  await ionLoadingDidPresent.next();
14
22
  const results = await new AxeBuilder({ page }).analyze();
15
23
  expect(results.violations).toEqual([]);
16
24
  });
17
25
  test('should set aria-labelledby with a label', async ({ page }) => {
18
- await page.goto('/src/components/loading/test/a11y', config);
26
+ await page.setContent(`
27
+ <ion-loading aria-label="Loading"></ion-loading>
28
+
29
+ <script>
30
+ const loading = document.querySelector('ion-loading');
31
+ loading.spinner = 'bubbles';
32
+ </script>
33
+ `, config);
19
34
  const ionLoadingDidPresent = await page.spyOnEvent('ionLoadingDidPresent');
20
- await page.click('#open-label-loading');
35
+ const loading = page.locator('ion-loading');
36
+ await loading.evaluate((el) => el.present());
21
37
  await ionLoadingDidPresent.next();
22
38
  const results = await new AxeBuilder({ page }).analyze();
23
39
  expect(results.violations).toEqual([]);
@@ -261,7 +261,7 @@ ion-icon {
261
261
  --background-focused: currentColor;
262
262
  --background-focused-opacity: .1;
263
263
  --border-radius: 4px;
264
- --color: var(--ion-color-primary, #3880ff);
264
+ --color: var(--ion-color-primary, #0054e9);
265
265
  --padding-start: 5px;
266
266
  --padding-end: 5px;
267
267
  min-height: 32px;
@@ -4,6 +4,20 @@
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 ios mode uses ion-color() for the menu button
9
+ */
10
+ configs({ directions: ['ltr'], modes: ['ios'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
11
+ test.describe(title('menu-button: a11y for ion-color()'), () => {
12
+ test('should not have accessibility violations', async ({ page }) => {
13
+ await page.setContent(`
14
+ <ion-menu-button auto-hide="false"></ion-menu-button>
15
+ `, config);
16
+ const results = await new AxeBuilder({ page }).analyze();
17
+ expect(results.violations).toEqual([]);
18
+ });
19
+ });
20
+ });
7
21
  configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
8
22
  test.describe(title('menu-button: a11y'), () => {
9
23
  test('should not have accessibility violations', async ({ page }) => {
@@ -279,7 +279,7 @@
279
279
  padding-bottom: 0;
280
280
  height: 44px;
281
281
  background: transparent;
282
- color: var(--ion-color-primary, #3880ff);
282
+ color: var(--ion-color-primary, #0054e9);
283
283
  font-size: 16px;
284
284
  }
285
285
 
@@ -265,7 +265,7 @@
265
265
  padding-bottom: 0;
266
266
  height: 44px;
267
267
  background: transparent;
268
- color: var(--ion-color-primary, #3880ff);
268
+ color: var(--ion-color-primary, #0054e9);
269
269
  font-size: 14px;
270
270
  font-weight: 500;
271
271
  text-transform: uppercase;
@@ -242,5 +242,5 @@
242
242
  .picker-prefix,
243
243
  .picker-suffix,
244
244
  .picker-opt.picker-opt-selected {
245
- color: var(--ion-color-primary, #3880ff);
245
+ color: var(--ion-color-primary, #0054e9);
246
246
  }
@@ -4,10 +4,26 @@
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().forEach(({ title, config }) => {
7
+ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
8
  test.describe(title('picker-internal: a11y'), () => {
9
9
  test('should not have accessibility violations', async ({ page }) => {
10
- await page.goto(`/src/components/picker-internal/test/a11y`, config);
10
+ await page.setContent(`
11
+ <ion-picker-internal>
12
+ <ion-picker-column-internal value="3"></ion-picker-column-internal>
13
+ </ion-picker-internal>
14
+ <script>
15
+ const column = document.querySelector('ion-picker-column-internal');
16
+ column.items = [
17
+ { text: 'First', value: '1' },
18
+ { text: 'Second', value: '2' },
19
+ { text: 'Third', value: '3' },
20
+ { text: 'Fourth', value: '4' },
21
+ { text: 'Fifth', value: '5' },
22
+ { text: 'Sixth', value: '6' },
23
+ { text: 'Seventh', value: '7' },
24
+ ];
25
+ </script>
26
+ `, config);
11
27
  const results = await new AxeBuilder({ page }).analyze();
12
28
  expect(results.violations).toEqual([]);
13
29
  });
@@ -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 {
@@ -4,6 +4,7 @@
4
4
  import { writeTask } from "@stencil/core";
5
5
  import { createAnimation } from "../../utils/animation/animation";
6
6
  import { clamp, componentOnReady, transitionEndAsync } from "../../utils/helpers";
7
+ import { isPlatform } from "../../utils/platform";
7
8
  export const getRefresherAnimationType = (contentEl) => {
8
9
  const previousSibling = contentEl.previousElementSibling;
9
10
  const hasHeader = previousSibling !== null && previousSibling.tagName === 'ION-HEADER';
@@ -161,24 +162,6 @@ export const translateElement = (el, value, duration = 200) => {
161
162
  };
162
163
  // Utils
163
164
  // -----------------------------
164
- /**
165
- * In order to use the native iOS refresher the device must support rubber band scrolling.
166
- * As part of this, we need to exclude Desktop Safari because it has a slightly different rubber band effect that is not compatible with the native refresher in Ionic.
167
- *
168
- * We also need to be careful not to include devices that spoof their user agent.
169
- * For example, when using iOS emulation in Chrome the user agent will be spoofed such that
170
- * navigator.maxTouchPointer > 0. To work around this,
171
- * we check to see if the apple-pay-logo is supported as a named image which is only
172
- * true on Apple devices.
173
- *
174
- * We previously checked referencEl.style.webkitOverflowScrolling to explicitly check
175
- * for rubber band support. However, this property was removed on iPadOS and it's possible
176
- * that this will be removed on iOS in the future too.
177
- *
178
- */
179
- export const supportsRubberBandScrolling = () => {
180
- return navigator.maxTouchPoints > 0 && CSS.supports('background: -webkit-named-image(apple-pay-logo-black)');
181
- };
182
165
  export const shouldUseNativeRefresher = async (referenceEl, mode) => {
183
166
  const refresherContent = referenceEl.querySelector('ion-refresher-content');
184
167
  if (!refresherContent) {
@@ -189,5 +172,14 @@ export const shouldUseNativeRefresher = async (referenceEl, mode) => {
189
172
  const refreshingSpinner = referenceEl.querySelector('ion-refresher-content .refresher-refreshing ion-spinner');
190
173
  return (pullingSpinner !== null &&
191
174
  refreshingSpinner !== null &&
192
- ((mode === 'ios' && supportsRubberBandScrolling()) || mode === 'md'));
175
+ /**
176
+ * We use webkitOverflowScrolling for feature detection with rubber band scrolling
177
+ * on iOS. When doing referenceEl.style, webkitOverflowScrolling is undefined on non-iOS platforms.
178
+ * However, it will be the empty string on iOS.
179
+ * Note that we do not use getPropertyValue (and thus need to cast as any) because calling
180
+ * getPropertyValue('-webkit-overflow-scrolling') will return the empty string if it is not
181
+ * set on the element, even if the platform does not support that.
182
+ */
183
+ ((mode === 'ios' && isPlatform('mobile') && referenceEl.style.webkitOverflowScrolling !== undefined) ||
184
+ mode === 'md'));
193
185
  };
@@ -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
+ });
@@ -3,11 +3,11 @@
3
3
  */
4
4
  import { Host, h } from "@stencil/core";
5
5
  import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
6
+ import { isPlatform } from "../../utils/platform";
6
7
  import { sanitizeDOMString } from "../../utils/sanitization/index";
7
8
  import { arrowDown, caretBackSharp } from "ionicons/icons";
8
9
  import { config } from "../../global/config";
9
10
  import { getIonMode } from "../../global/ionic-global";
10
- import { supportsRubberBandScrolling } from "../refresher/refresher.utils";
11
11
  import { SPINNERS } from "../spinner/spinner-configs";
12
12
  export class RefresherContent {
13
13
  constructor() {
@@ -19,15 +19,9 @@ export class RefresherContent {
19
19
  }
20
20
  componentWillLoad() {
21
21
  if (this.pullingIcon === undefined) {
22
- /**
23
- * The native iOS refresher uses a spinner instead of
24
- * an icon, so we need to see if this device supports
25
- * the native iOS refresher.
26
- */
27
- const hasRubberBandScrolling = supportsRubberBandScrolling();
28
22
  const mode = getIonMode(this);
29
- const overflowRefresher = hasRubberBandScrolling ? 'lines' : arrowDown;
30
- this.pullingIcon = config.get('refreshingIcon', mode === 'ios' && hasRubberBandScrolling ? config.get('spinner', overflowRefresher) : 'circular');
23
+ const overflowRefresher = this.el.style.webkitOverflowScrolling !== undefined ? 'lines' : arrowDown;
24
+ this.pullingIcon = config.get('refreshingIcon', mode === 'ios' && isPlatform('mobile') ? config.get('spinner', overflowRefresher) : 'circular');
31
25
  }
32
26
  if (this.refreshingSpinner === undefined) {
33
27
  const mode = getIonMode(this);
@@ -52,7 +46,7 @@ export class RefresherContent {
52
46
  const pullingIcon = this.pullingIcon;
53
47
  const hasSpinner = pullingIcon != null && SPINNERS[pullingIcon] !== undefined;
54
48
  const mode = getIonMode(this);
55
- 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())));
56
50
  }
57
51
  static get is() { return "ion-refresher-content"; }
58
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);
@@ -180,6 +180,8 @@ export class Searchbar {
180
180
  *
181
181
  * Developers who wish to focus an input when an overlay is presented
182
182
  * should call `setFocus` after `didPresent` has resolved.
183
+ *
184
+ * See [managing focus](/docs/developing/managing-focus) for more information.
183
185
  */
184
186
  async setFocus() {
185
187
  if (this.nativeInput) {
@@ -890,7 +892,7 @@ export class Searchbar {
890
892
  "return": "Promise<void>"
891
893
  },
892
894
  "docs": {
893
- "text": "Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global\n`input.focus()`.\n\nDevelopers who wish to focus an input when a page enters\nshould call `setFocus()` in the `ionViewDidEnter()` lifecycle method.\n\nDevelopers who wish to focus an input when an overlay is presented\nshould call `setFocus` after `didPresent` has resolved.",
895
+ "text": "Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global\n`input.focus()`.\n\nDevelopers who wish to focus an input when a page enters\nshould call `setFocus()` in the `ionViewDidEnter()` lifecycle method.\n\nDevelopers who wish to focus an input when an overlay is presented\nshould call `setFocus` after `didPresent` has resolved.\n\nSee [managing focus](/docs/developing/managing-focus) for more information.",
894
896
  "tags": []
895
897
  }
896
898
  },
@@ -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