@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
@@ -494,7 +494,7 @@ textarea.alert-input {
494
494
 
495
495
  .alert-input:focus {
496
496
  margin-bottom: 4px;
497
- border-bottom: 2px solid var(--ion-color-primary, #3880ff);
497
+ border-bottom: 2px solid var(--ion-color-primary, #0054e9);
498
498
  }
499
499
 
500
500
  .alert-radio-group,
@@ -580,7 +580,7 @@ textarea.alert-input {
580
580
  height: 10px;
581
581
  transform: scale3d(0, 0, 0);
582
582
  transition: transform 280ms cubic-bezier(0.4, 0, 0.2, 1);
583
- background-color: var(--ion-color-primary, #3880ff);
583
+ background-color: var(--ion-color-primary, #0054e9);
584
584
  }
585
585
  @supports (inset-inline-start: 0) {
586
586
  .alert-radio-inner {
@@ -615,7 +615,7 @@ textarea.alert-input {
615
615
  }
616
616
 
617
617
  [aria-checked=true] .alert-radio-icon {
618
- border-color: var(--ion-color-primary, #3880ff);
618
+ border-color: var(--ion-color-primary, #0054e9);
619
619
  }
620
620
 
621
621
  [aria-checked=true] .alert-radio-inner {
@@ -675,8 +675,8 @@ textarea.alert-input {
675
675
  }
676
676
 
677
677
  [aria-checked=true] .alert-checkbox-icon {
678
- border-color: var(--ion-color-primary, #3880ff);
679
- background-color: var(--ion-color-primary, #3880ff);
678
+ border-color: var(--ion-color-primary, #0054e9);
679
+ background-color: var(--ion-color-primary, #0054e9);
680
680
  }
681
681
 
682
682
  [aria-checked=true] .alert-checkbox-inner {
@@ -747,7 +747,7 @@ textarea.alert-input {
747
747
  padding-bottom: 10px;
748
748
  position: relative;
749
749
  background-color: transparent;
750
- color: var(--ion-color-primary, #3880ff);
750
+ color: var(--ion-color-primary, #0054e9);
751
751
  font-weight: 500;
752
752
  text-align: end;
753
753
  text-transform: uppercase;
@@ -19,6 +19,28 @@ const testAria = async (page, buttonID, expectedAriaLabelledBy, expectedAriaDesc
19
19
  expect(ariaLabelledBy).toBe(expectedAriaLabelledBy);
20
20
  expect(ariaDescribedBy).toBe(expectedAriaDescribedBy);
21
21
  };
22
+ configs({ directions: ['ltr'], themes: ['dark', 'light'] }).forEach(({ title, config }) => {
23
+ test.describe(title('alert: Axe testing'), () => {
24
+ test('should not have accessibility violations when header and message are defined', async ({ page }) => {
25
+ await page.setContent(`
26
+ <ion-alert></ion-alert>
27
+
28
+ <script>
29
+ const alert = document.querySelector('ion-alert');
30
+ alert.header = 'Header';
31
+ alert.subHeader = 'Subtitle';
32
+ alert.buttons = ['OK'];
33
+ </script>
34
+ `, config);
35
+ const ionAlertDidPresent = await page.spyOnEvent('ionAlertDidPresent');
36
+ const alert = page.locator('ion-alert');
37
+ await alert.evaluate((el) => el.present());
38
+ await ionAlertDidPresent.next();
39
+ const results = await new AxeBuilder({ page }).analyze();
40
+ expect(results.violations).toEqual([]);
41
+ });
42
+ });
43
+ });
22
44
  configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
23
45
  test.describe(title('alert: text wrapping'), () => {
24
46
  test('should break on words and white spaces for radios', async ({ page }, testInfo) => {
@@ -72,15 +94,6 @@ configs({ directions: ['ltr'] }).forEach(({ config, title }) => {
72
94
  test.beforeEach(async ({ page }) => {
73
95
  await page.goto(`/src/components/alert/test/a11y`, config);
74
96
  });
75
- test('should not have accessibility violations when header and message are defined', async ({ page }) => {
76
- const didPresent = await page.spyOnEvent('ionAlertDidPresent');
77
- const button = page.locator('#bothHeaders');
78
- await button.click();
79
- await didPresent.next();
80
- // TODO FW-4375
81
- const results = await new AxeBuilder({ page }).disableRules('color-contrast').analyze();
82
- expect(results.violations).toEqual([]);
83
- });
84
97
  test('should have aria-labelledby when header is set', async ({ page }) => {
85
98
  await testAria(page, 'noMessage', 'alert-1-hdr', null);
86
99
  });
@@ -331,7 +331,7 @@ ion-icon {
331
331
  --background-focused: currentColor;
332
332
  --background-focused-opacity: .1;
333
333
  --border-radius: 4px;
334
- --color: var(--ion-color-primary, #3880ff);
334
+ --color: var(--ion-color-primary, #0054e9);
335
335
  --icon-margin-end: 1px;
336
336
  --icon-margin-start: -4px;
337
337
  /**
@@ -1,8 +1,29 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import AxeBuilder from "@axe-core/playwright";
4
5
  import { expect } from "@playwright/test";
5
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
+ /**
8
+ * Only ios mode uses ion-color() for the back button
9
+ */
10
+ configs({ directions: ['ltr'], modes: ['ios'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
11
+ test.describe(title('back-button: a11y for ion-color()'), () => {
12
+ test('should not have accessibility violations', async ({ page }) => {
13
+ await page.setContent(`
14
+ <style>
15
+ ion-back-button {
16
+ display: inline-block !important;
17
+ vertical-align: middle;
18
+ }
19
+ </style>
20
+ <ion-back-button text="Back" aria-label="back button"></ion-back-button>
21
+ `, config);
22
+ const results = await new AxeBuilder({ page }).analyze();
23
+ expect(results.violations).toEqual([]);
24
+ });
25
+ });
26
+ });
6
27
  configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
7
28
  test.describe(title('back-button: font scaling'), () => {
8
29
  test('should scale text on larger font sizes', async ({ page }) => {
@@ -2,25 +2,13 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { Host, h } from "@stencil/core";
5
- import { GESTURE_CONTROLLER } from "../../utils/gesture/index";
6
5
  import { getIonMode } from "../../global/ionic-global";
7
6
  export class Backdrop {
8
7
  constructor() {
9
- this.blocker = GESTURE_CONTROLLER.createBlocker({
10
- disableScroll: true,
11
- });
12
8
  this.visible = true;
13
9
  this.tappable = true;
14
10
  this.stopPropagation = true;
15
11
  }
16
- connectedCallback() {
17
- if (this.stopPropagation) {
18
- this.blocker.block();
19
- }
20
- }
21
- disconnectedCallback() {
22
- this.blocker.unblock();
23
- }
24
12
  onMouseDown(ev) {
25
13
  this.emitTap(ev);
26
14
  }
@@ -63,7 +63,7 @@
63
63
  * @prop --padding-bottom: Bottom padding of the badge
64
64
  * @prop --padding-start: Left padding if direction is left-to-right, and right padding if direction is right-to-left of the badge
65
65
  */
66
- --background: var(--ion-color-primary, #3880ff);
66
+ --background: var(--ion-color-primary, #0054e9);
67
67
  --color: var(--ion-color-primary-contrast, #fff);
68
68
  --padding-top: 3px;
69
69
  --padding-end: 8px;
@@ -63,7 +63,7 @@
63
63
  * @prop --padding-bottom: Bottom padding of the badge
64
64
  * @prop --padding-start: Left padding if direction is left-to-right, and right padding if direction is right-to-left of the badge
65
65
  */
66
- --background: var(--ion-color-primary, #3880ff);
66
+ --background: var(--ion-color-primary, #0054e9);
67
67
  --color: var(--ion-color-primary-contrast, #fff);
68
68
  --padding-top: 3px;
69
69
  --padding-end: 8px;
@@ -1,6 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import AxeBuilder from "@axe-core/playwright";
4
5
  import { expect } from "@playwright/test";
5
6
  import { configs, test } from "../../../../utils/test/playwright/index";
6
7
  configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
@@ -20,3 +21,20 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
20
21
  });
21
22
  });
22
23
  });
24
+ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ config, title }) => {
25
+ test.describe(title('badge: a11y'), () => {
26
+ test('should not have accessibility violations', async ({ page }) => {
27
+ /**
28
+ * All page content should be contained by landmarks (main, nav, etc.)
29
+ * By containing the badge in a main element, we can avoid this violation.
30
+ */
31
+ await page.setContent(`
32
+ <main>
33
+ <ion-badge>123</ion-badge>
34
+ </main>
35
+ `, config);
36
+ const results = await new AxeBuilder({ page }).analyze();
37
+ expect(results.violations).toEqual([]);
38
+ });
39
+ });
40
+ });
@@ -114,20 +114,20 @@
114
114
  }
115
115
 
116
116
  :host(.button-solid) {
117
- --background: var(--ion-color-primary, #3880ff);
117
+ --background: var(--ion-color-primary, #0054e9);
118
118
  --color: var(--ion-color-primary-contrast, #fff);
119
119
  }
120
120
 
121
121
  :host(.button-outline) {
122
- --border-color: var(--ion-color-primary, #3880ff);
122
+ --border-color: var(--ion-color-primary, #0054e9);
123
123
  --background: transparent;
124
- --color: var(--ion-color-primary, #3880ff);
124
+ --color: var(--ion-color-primary, #0054e9);
125
125
  }
126
126
 
127
127
  :host(.button-clear) {
128
128
  --border-width: 0;
129
129
  --background: transparent;
130
- --color: var(--ion-color-primary, #3880ff);
130
+ --color: var(--ion-color-primary, #0054e9);
131
131
  }
132
132
 
133
133
  :host(.button-block) {
@@ -465,9 +465,9 @@ ion-ripple-effect {
465
465
  }
466
466
 
467
467
  :host(.button-solid) {
468
- --background-activated: var(--ion-color-primary-shade, #3171e0);
469
- --background-focused: var(--ion-color-primary-shade, #3171e0);
470
- --background-hover: var(--ion-color-primary-tint, #4c8dff);
468
+ --background-activated: var(--ion-color-primary-shade, #004acd);
469
+ --background-focused: var(--ion-color-primary-shade, #004acd);
470
+ --background-hover: var(--ion-color-primary-tint, #1a65eb);
471
471
  --background-activated-opacity: 1;
472
472
  --background-focused-opacity: 1;
473
473
  --background-hover-opacity: 1;
@@ -477,8 +477,8 @@ ion-ripple-effect {
477
477
  --border-radius: 14px;
478
478
  --border-width: 1px;
479
479
  --border-style: solid;
480
- --background-activated: var(--ion-color-primary, #3880ff);
481
- --background-focused: var(--ion-color-primary, #3880ff);
480
+ --background-activated: var(--ion-color-primary, #0054e9);
481
+ --background-focused: var(--ion-color-primary, #0054e9);
482
482
  --background-hover: transparent;
483
483
  --background-focused-opacity: .1;
484
484
  --color-activated: var(--ion-color-primary-contrast, #fff);
@@ -487,7 +487,7 @@ ion-ripple-effect {
487
487
  :host(.button-clear) {
488
488
  --background-activated: transparent;
489
489
  --background-activated-opacity: 0;
490
- --background-focused: var(--ion-color-primary, #3880ff);
490
+ --background-focused: var(--ion-color-primary, #0054e9);
491
491
  --background-hover: transparent;
492
492
  --background-focused-opacity: .1;
493
493
  font-size: min(1.0625rem, 51px);
@@ -114,20 +114,20 @@
114
114
  }
115
115
 
116
116
  :host(.button-solid) {
117
- --background: var(--ion-color-primary, #3880ff);
117
+ --background: var(--ion-color-primary, #0054e9);
118
118
  --color: var(--ion-color-primary-contrast, #fff);
119
119
  }
120
120
 
121
121
  :host(.button-outline) {
122
- --border-color: var(--ion-color-primary, #3880ff);
122
+ --border-color: var(--ion-color-primary, #0054e9);
123
123
  --background: transparent;
124
- --color: var(--ion-color-primary, #3880ff);
124
+ --color: var(--ion-color-primary, #0054e9);
125
125
  }
126
126
 
127
127
  :host(.button-clear) {
128
128
  --border-width: 0;
129
129
  --background: transparent;
130
- --color: var(--ion-color-primary, #3880ff);
130
+ --color: var(--ion-color-primary, #0054e9);
131
131
  }
132
132
 
133
133
  :host(.button-block) {
@@ -431,8 +431,8 @@ ion-ripple-effect {
431
431
  --border-style: solid;
432
432
  --box-shadow: none;
433
433
  --background-activated: transparent;
434
- --background-focused: var(--ion-color-primary, #3880ff);
435
- --background-hover: var(--ion-color-primary, #3880ff);
434
+ --background-focused: var(--ion-color-primary, #0054e9);
435
+ --background-hover: var(--ion-color-primary, #0054e9);
436
436
  --background-activated-opacity: 0;
437
437
  --background-focused-opacity: .12;
438
438
  --background-hover-opacity: .04;
@@ -444,8 +444,8 @@ ion-ripple-effect {
444
444
 
445
445
  :host(.button-clear) {
446
446
  --background-activated: transparent;
447
- --background-focused: var(--ion-color-primary, #3880ff);
448
- --background-hover: var(--ion-color-primary, #3880ff);
447
+ --background-focused: var(--ion-color-primary, #0054e9);
448
+ --background-hover: var(--ion-color-primary, #0054e9);
449
449
  --background-activated-opacity: 0;
450
450
  --background-focused-opacity: .12;
451
451
  --background-hover-opacity: .04;
@@ -1,8 +1,56 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import AxeBuilder from "@axe-core/playwright";
4
5
  import { expect } from "@playwright/test";
5
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
+ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
+ test.describe(title('button: a11y for ion-color()'), () => {
9
+ test('should not have accessibility violations', async ({ page }) => {
10
+ await page.setContent(`
11
+ <ion-button>Default</ion-button>
12
+ <ion-button fill="solid">Solid</ion-button>
13
+ <ion-button fill="outline">Outline</ion-button>
14
+ <ion-button fill="clear">Clear</ion-button>
15
+ `, config);
16
+ const results = await new AxeBuilder({ page }).analyze();
17
+ expect(results.violations).toEqual([]);
18
+ });
19
+ test('focused state should not have accessibility violations', async ({ page }) => {
20
+ await page.setContent(`
21
+ <ion-button class="ion-focused" fill="solid">Solid</ion-button>
22
+ <ion-button class="ion-focused" fill="outline">Outline</ion-button>
23
+ <ion-button class="ion-focused" fill="clear">Clear</ion-button>
24
+ `, config);
25
+ const results = await new AxeBuilder({ page }).analyze();
26
+ expect(results.violations).toEqual([]);
27
+ });
28
+ test('button in toolbar should not have accessibility violations', async ({ page }) => {
29
+ await page.setContent(`
30
+ <ion-toolbar>
31
+ <ion-button fill="outline" class="ion-activated">Start</ion-button>
32
+ </ion-toolbar>
33
+ `, config);
34
+ const results = await new AxeBuilder({ page }).analyze();
35
+ expect(results.violations).toEqual([]);
36
+ });
37
+ });
38
+ });
39
+ /**
40
+ * Only ios mode uses ion-color() for the activated button state
41
+ */
42
+ configs({ directions: ['ltr'], modes: ['ios'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
43
+ test.describe(title('button: ios contrast'), () => {
44
+ test('activated state should not have accessibility violations', async ({ page }) => {
45
+ await page.setContent(`
46
+ <ion-button class="ion-activated" fill="solid">Solid</ion-button>
47
+ <ion-button class="ion-activated" fill="outline">Outline</ion-button>
48
+ `, config);
49
+ const results = await new AxeBuilder({ page }).analyze();
50
+ expect(results.violations).toEqual([]);
51
+ });
52
+ });
53
+ });
6
54
  configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
7
55
  test.describe(title('button: font scaling'), () => {
8
56
  test('should scale default button text on larger font sizes', async ({ page }) => {
@@ -71,8 +71,8 @@
71
71
  * @prop --checkmark-color: Color of the checkbox checkmark when checked
72
72
  * @prop --checkmark-width: Stroke width of the checkbox checkmark
73
73
  */
74
- --checkbox-background-checked: var(--ion-color-primary, #3880ff);
75
- --border-color-checked: var(--ion-color-primary, #3880ff);
74
+ --checkbox-background-checked: var(--ion-color-primary, #0054e9);
75
+ --border-color-checked: var(--ion-color-primary, #0054e9);
76
76
  --checkmark-color: var(--ion-color-primary-contrast, #fff);
77
77
  --checkmark-width: 1;
78
78
  --transition: none;
@@ -71,8 +71,8 @@
71
71
  * @prop --checkmark-color: Color of the checkbox checkmark when checked
72
72
  * @prop --checkmark-width: Stroke width of the checkbox checkmark
73
73
  */
74
- --checkbox-background-checked: var(--ion-color-primary, #3880ff);
75
- --border-color-checked: var(--ion-color-primary, #3880ff);
74
+ --checkbox-background-checked: var(--ion-color-primary, #0054e9);
75
+ --border-color-checked: var(--ion-color-primary, #0054e9);
76
76
  --checkmark-color: var(--ion-color-primary-contrast, #fff);
77
77
  --checkmark-width: 1;
78
78
  --transition: none;
@@ -4,10 +4,19 @@
4
4
  import AxeBuilder from "@axe-core/playwright";
5
5
  import { expect } from "@playwright/test";
6
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
- configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
7
+ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
8
  test.describe(title('checkbox: a11y'), () => {
9
9
  test('should not have accessibility violations', async ({ page }) => {
10
- await page.goto(`/src/components/checkbox/test/a11y`, config);
10
+ await page.setContent(`
11
+ <main>
12
+ <ion-checkbox>Label</ion-checkbox>
13
+ <ion-checkbox aria-label="my aria label"></ion-checkbox>
14
+ <ion-checkbox checked="true">Checked</ion-checkbox>
15
+ <ion-item>
16
+ <ion-checkbox>Checkbox in item</ion-checkbox>
17
+ </ion-item>
18
+ </main>
19
+ `, config);
11
20
  const results = await new AxeBuilder({ page }).analyze();
12
21
  expect(results.violations).toEqual([]);
13
22
  });
@@ -97,10 +97,6 @@
97
97
  color: var(--ion-color-contrast);
98
98
  }
99
99
 
100
- :host(.outer-content) {
101
- --background: var(--ion-color-step-50, #f2f2f2);
102
- }
103
-
104
100
  #background-content {
105
101
  left: 0px;
106
102
  right: 0px;
@@ -334,9 +334,8 @@ export class Content {
334
334
  const mode = getIonMode(this);
335
335
  const forceOverscroll = this.shouldForceOverscroll();
336
336
  const transitionShadow = mode === 'ios';
337
- const TagType = isMainContent ? 'main' : 'div';
338
337
  this.resize();
339
- return (h(Host, { class: createColorClasses(this.color, {
338
+ return (h(Host, { role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
340
339
  [mode]: true,
341
340
  'content-sizing': hostContext('ion-popover', this.el),
342
341
  overscroll: forceOverscroll,
@@ -344,7 +343,7 @@ export class Content {
344
343
  }), style: {
345
344
  '--offset-top': `${this.cTop}px`,
346
345
  '--offset-bottom': `${this.cBottom}px`,
347
- } }, h("div", { ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), h(TagType, { class: {
346
+ } }, h("div", { ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), h("div", { class: {
348
347
  'inner-scroll': true,
349
348
  'scroll-x': scrollX,
350
349
  'scroll-y': scrollY,
@@ -94,7 +94,7 @@ ion-picker-column-internal {
94
94
  }
95
95
 
96
96
  /**
97
- * This ensures that the picker is apppropriately
97
+ * This ensures that the picker is appropriately
98
98
  * sized and never truncates the text.
99
99
  */
100
100
  :host(.datetime-size-fixed.datetime-prefer-wheel) {
@@ -317,23 +317,8 @@ ion-picker-column-internal {
317
317
  justify-content: space-between;
318
318
  }
319
319
 
320
- :host .calendar-action-buttons ion-item,
321
320
  :host .calendar-action-buttons ion-button {
322
- --background: translucent;
323
- }
324
-
325
- :host .calendar-action-buttons ion-item ion-label {
326
- display: flex;
327
- align-items: center;
328
- }
329
-
330
- :host .calendar-action-buttons ion-item ion-icon {
331
- -webkit-padding-start: 4px;
332
- padding-inline-start: 4px;
333
- -webkit-padding-end: 0;
334
- padding-inline-end: 0;
335
- padding-top: 0;
336
- padding-bottom: 0;
321
+ --background: transparent;
337
322
  }
338
323
 
339
324
  :host .calendar-days-of-week {
@@ -515,8 +500,66 @@ ion-picker-column-internal {
515
500
  position: static;
516
501
  }
517
502
 
518
- :host(.show-month-and-year) .calendar-action-buttons ion-item {
519
- --color: var(--ion-color-base);
503
+ :host(.show-month-and-year) .calendar-action-buttons .calendar-month-year-toggle {
504
+ color: var(--ion-color-base);
505
+ }
506
+
507
+ .calendar-month-year {
508
+ min-width: 0;
509
+ }
510
+
511
+ .calendar-month-year-toggle {
512
+ font-family: inherit;
513
+ font-size: inherit;
514
+ font-style: inherit;
515
+ font-weight: inherit;
516
+ letter-spacing: inherit;
517
+ text-decoration: inherit;
518
+ text-indent: inherit;
519
+ text-overflow: inherit;
520
+ text-transform: inherit;
521
+ text-align: inherit;
522
+ white-space: inherit;
523
+ color: inherit;
524
+ position: relative;
525
+ border: 0;
526
+ outline: none;
527
+ background: transparent;
528
+ cursor: pointer;
529
+ z-index: 1;
530
+ }
531
+ .calendar-month-year-toggle::after {
532
+ left: 0;
533
+ right: 0;
534
+ top: 0;
535
+ bottom: 0;
536
+ position: absolute;
537
+ content: "";
538
+ opacity: 0;
539
+ transition: opacity 15ms linear, background-color 15ms linear;
540
+ z-index: -1;
541
+ }
542
+ .calendar-month-year-toggle.ion-focused::after {
543
+ background: currentColor;
544
+ }
545
+ .calendar-month-year-toggle:disabled {
546
+ opacity: 0.3;
547
+ pointer-events: none;
548
+ }
549
+
550
+ .calendar-month-year-toggle ion-icon {
551
+ -webkit-padding-start: 4px;
552
+ padding-inline-start: 4px;
553
+ -webkit-padding-end: 0;
554
+ padding-inline-end: 0;
555
+ padding-top: 0;
556
+ padding-bottom: 0;
557
+ flex-shrink: 0;
558
+ }
559
+
560
+ .calendar-month-year-toggle #toggle-wrapper {
561
+ display: inline-flex;
562
+ align-items: center;
520
563
  }
521
564
 
522
565
  /**
@@ -605,15 +648,31 @@ ion-picker-column-internal {
605
648
  margin-top: 10px;
606
649
  }
607
650
 
608
- :host .calendar-action-buttons ion-item {
609
- --padding-start: 16px;
610
- --background-hover: transparent;
611
- --background-activated: transparent;
651
+ .calendar-month-year-toggle {
652
+ -webkit-padding-start: 16px;
653
+ padding-inline-start: 16px;
654
+ -webkit-padding-end: 16px;
655
+ padding-inline-end: 16px;
656
+ padding-top: 0px;
657
+ padding-bottom: 0px;
658
+ min-height: 44px;
612
659
  font-size: min(1rem, 25.6px);
613
660
  font-weight: 600;
614
661
  }
662
+ .calendar-month-year-toggle.ion-focused::after {
663
+ opacity: 0.15;
664
+ }
665
+
666
+ .calendar-month-year-toggle #toggle-wrapper {
667
+ -webkit-margin-start: 0;
668
+ margin-inline-start: 0;
669
+ -webkit-margin-end: 8px;
670
+ margin-inline-end: 8px;
671
+ margin-top: 10px;
672
+ margin-bottom: 10px;
673
+ }
615
674
 
616
- :host .calendar-action-buttons ion-item ion-icon,
675
+ :host .calendar-action-buttons .calendar-month-year-toggle ion-icon,
617
676
  :host .calendar-action-buttons ion-buttons ion-button {
618
677
  color: var(--ion-color-base);
619
678
  }
@@ -1257,26 +1257,11 @@ export class Datetime {
1257
1257
  const nextMonthDisabled = disabled || isNextMonthDisabled(this.workingParts, this.maxParts);
1258
1258
  // don't use the inheritAttributes util because it removes dir from the host, and we still need that
1259
1259
  const hostDir = this.el.getAttribute('dir') || undefined;
1260
- return (h("div", { class: "calendar-header" }, h("div", { class: "calendar-action-buttons" }, h("div", { class: "calendar-month-year" }, h("ion-item", { part: "month-year-button", ref: (el) => (this.monthYearToggleItemRef = el), button: true, "aria-label": "Show year picker", detail: false, lines: "none", disabled: disabled, onClick: () => {
1261
- var _a;
1262
- this.toggleMonthAndYearView();
1263
- /**
1264
- * TODO: FW-3547
1265
- *
1266
- * Currently there is not a way to set the aria-label on the inner button
1267
- * on the `ion-item` and have it be reactive to changes. This is a workaround
1268
- * until we either refactor `ion-item` to a button or Stencil adds a way to
1269
- * have reactive props for built-in properties, such as `aria-label`.
1270
- */
1271
- const { monthYearToggleItemRef } = this;
1272
- if (monthYearToggleItemRef) {
1273
- const btn = (_a = monthYearToggleItemRef.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.item-native');
1274
- if (btn) {
1275
- const monthYearAriaLabel = this.showMonthAndYear ? 'Hide year picker' : 'Show year picker';
1276
- btn.setAttribute('aria-label', monthYearAriaLabel);
1277
- }
1278
- }
1279
- } }, h("ion-label", null, getMonthAndYear(this.locale, this.workingParts), h("ion-icon", { "aria-hidden": "true", icon: this.showMonthAndYear ? expandedIcon : collapsedIcon, lazy: false, flipRtl: true })))), h("div", { class: "calendar-next-prev" }, h("ion-buttons", null, h("ion-button", { "aria-label": "Previous month", disabled: prevMonthDisabled, onClick: () => this.prevMonth() }, h("ion-icon", { dir: hostDir, "aria-hidden": "true", slot: "icon-only", icon: chevronBack, lazy: false, flipRtl: true })), h("ion-button", { "aria-label": "Next month", disabled: nextMonthDisabled, onClick: () => this.nextMonth() }, h("ion-icon", { dir: hostDir, "aria-hidden": "true", slot: "icon-only", icon: chevronForward, lazy: false, flipRtl: true }))))), h("div", { class: "calendar-days-of-week", "aria-hidden": "true" }, getDaysOfWeek(this.locale, mode, this.firstDayOfWeek % 7).map((d) => {
1260
+ return (h("div", { class: "calendar-header" }, h("div", { class: "calendar-action-buttons" }, h("div", { class: "calendar-month-year" }, h("button", { class: {
1261
+ 'calendar-month-year-toggle': true,
1262
+ 'ion-activatable': true,
1263
+ 'ion-focusable': true,
1264
+ }, part: "month-year-button", disabled: disabled, "aria-label": this.showMonthAndYear ? 'Hide year picker' : 'Show year picker', onClick: () => this.toggleMonthAndYearView() }, h("span", { id: "toggle-wrapper" }, getMonthAndYear(this.locale, this.workingParts), h("ion-icon", { "aria-hidden": "true", icon: this.showMonthAndYear ? expandedIcon : collapsedIcon, lazy: false, flipRtl: true })), mode === 'md' && h("ion-ripple-effect", null))), h("div", { class: "calendar-next-prev" }, h("ion-buttons", null, h("ion-button", { "aria-label": "Previous month", disabled: prevMonthDisabled, onClick: () => this.prevMonth() }, h("ion-icon", { dir: hostDir, "aria-hidden": "true", slot: "icon-only", icon: chevronBack, lazy: false, flipRtl: true })), h("ion-button", { "aria-label": "Next month", disabled: nextMonthDisabled, onClick: () => this.nextMonth() }, h("ion-icon", { dir: hostDir, "aria-hidden": "true", slot: "icon-only", icon: chevronForward, lazy: false, flipRtl: true }))))), h("div", { class: "calendar-days-of-week", "aria-hidden": "true" }, getDaysOfWeek(this.locale, mode, this.firstDayOfWeek % 7).map((d) => {
1280
1265
  return h("div", { class: "day-of-week" }, d);
1281
1266
  }))));
1282
1267
  }