@ionic/core 7.6.2-dev.11705355381.14b22962 → 7.6.2-dev.11705694334.11b34c62

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 (398) hide show
  1. package/components/action-sheet.js +4 -4
  2. package/components/alert.js +2 -2
  3. package/components/animation.js +16 -1
  4. package/components/button-active.js +1 -1
  5. package/components/button.js +2 -2
  6. package/components/checkbox.js +2 -2
  7. package/components/ion-back-button.js +1 -1
  8. package/components/ion-badge.js +2 -2
  9. package/components/ion-content.js +3 -2
  10. package/components/ion-datetime-button.js +4 -4
  11. package/components/ion-datetime.js +1 -1
  12. package/components/ion-fab-button.js +2 -2
  13. package/components/ion-input.js +2 -2
  14. package/components/ion-item-option.js +2 -2
  15. package/components/ion-item-sliding.js +128 -7
  16. package/components/ion-loading.js +1 -1
  17. package/components/ion-menu-button.js +1 -1
  18. package/components/ion-menu.js +15 -21
  19. package/components/ion-modal.js +1 -1
  20. package/components/ion-picker-legacy.js +2 -2
  21. package/components/ion-progress-bar.js +5 -2
  22. package/components/ion-range.js +2 -2
  23. package/components/ion-refresher-content.js +1 -1
  24. package/components/ion-refresher.js +1 -1
  25. package/components/ion-router-link.js +1 -1
  26. package/components/ion-searchbar.js +1 -1
  27. package/components/ion-segment-button.js +1 -1
  28. package/components/ion-select.js +2 -2
  29. package/components/ion-split-pane.js +15 -26
  30. package/components/ion-tab-bar.js +2 -2
  31. package/components/ion-tab-button.js +1 -1
  32. package/components/ion-textarea.js +2 -2
  33. package/components/ion-toast.js +2 -2
  34. package/components/ion-toggle.js +2 -2
  35. package/components/item.js +2 -2
  36. package/components/label.js +1 -1
  37. package/components/picker-column2.js +1 -1
  38. package/components/radio.js +2 -2
  39. package/components/select-popover.js +1 -1
  40. package/css/core.css +34 -101
  41. package/css/core.css.map +1 -1
  42. package/css/global.bundle.css +1 -1
  43. package/css/ionic.bundle.css +1 -1
  44. package/css/ionic.bundle.css.map +1 -1
  45. package/css/typography.css +1 -1
  46. package/dist/cjs/{animation-9b401d39.js → animation-8a4f9df4.js} +16 -0
  47. package/dist/cjs/{button-active-5bf1cac0.js → button-active-466dfc8a.js} +1 -1
  48. package/dist/cjs/{index-3b012034.js → index-8023641e.js} +1 -1
  49. package/dist/cjs/{index-17ab7794.js → index-d8b5d5f9.js} +2 -2
  50. package/dist/cjs/index.cjs.js +5 -5
  51. package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -6
  52. package/dist/cjs/ion-alert.cjs.entry.js +4 -4
  53. package/dist/cjs/ion-app_8.cjs.entry.js +4 -3
  54. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  55. package/dist/cjs/ion-back-button.cjs.entry.js +1 -1
  56. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  57. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  58. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
  59. package/dist/cjs/ion-datetime_3.cjs.entry.js +5 -5
  60. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  61. package/dist/cjs/ion-input.cjs.entry.js +2 -2
  62. package/dist/cjs/ion-item-option_3.cjs.entry.js +130 -10
  63. package/dist/cjs/ion-item_8.cjs.entry.js +3 -3
  64. package/dist/cjs/ion-loading.cjs.entry.js +2 -2
  65. package/dist/cjs/ion-menu_3.cjs.entry.js +19 -24
  66. package/dist/cjs/ion-modal.cjs.entry.js +3 -3
  67. package/dist/cjs/ion-nav_2.cjs.entry.js +1 -1
  68. package/dist/cjs/ion-popover.cjs.entry.js +2 -2
  69. package/dist/cjs/ion-progress-bar.cjs.entry.js +5 -2
  70. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  71. package/dist/cjs/ion-range.cjs.entry.js +2 -2
  72. package/dist/cjs/ion-refresher_2.cjs.entry.js +3 -3
  73. package/dist/cjs/ion-route_4.cjs.entry.js +1 -1
  74. package/dist/cjs/ion-searchbar.cjs.entry.js +1 -1
  75. package/dist/cjs/ion-segment_2.cjs.entry.js +1 -1
  76. package/dist/cjs/ion-select_3.cjs.entry.js +3 -3
  77. package/dist/cjs/ion-split-pane.cjs.entry.js +14 -24
  78. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +3 -3
  79. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  80. package/dist/cjs/ion-toast.cjs.entry.js +3 -3
  81. package/dist/cjs/ion-toggle.cjs.entry.js +2 -2
  82. package/dist/cjs/ionic.cjs.js +1 -1
  83. package/dist/cjs/{ios.transition-b5353f3e.js → ios.transition-34cad0cb.js} +2 -2
  84. package/dist/cjs/loader.cjs.js +1 -1
  85. package/dist/cjs/{md.transition-67157dd9.js → md.transition-5bcc289d.js} +2 -2
  86. package/dist/collection/components/action-sheet/action-sheet.ios.css +12 -5
  87. package/dist/collection/components/action-sheet/action-sheet.js +2 -2
  88. package/dist/collection/components/action-sheet/action-sheet.md.css +9 -2
  89. package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +14 -23
  90. package/dist/collection/components/action-sheet/test/basic/action-sheet-rendering.e2e.js +19 -0
  91. package/dist/collection/components/action-sheet/test/basic/action-sheet.spec.js +22 -0
  92. package/dist/collection/components/alert/alert.ios.css +28 -27
  93. package/dist/collection/components/alert/alert.md.css +6 -6
  94. package/dist/collection/components/alert/test/a11y/alert.e2e.js +9 -22
  95. package/dist/collection/components/back-button/back-button.ios.css +1 -1
  96. package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +0 -21
  97. package/dist/collection/components/badge/badge.ios.css +1 -1
  98. package/dist/collection/components/badge/badge.md.css +1 -1
  99. package/dist/collection/components/badge/test/a11y/badge.e2e.js +0 -18
  100. package/dist/collection/components/button/button.ios.css +10 -10
  101. package/dist/collection/components/button/button.md.css +8 -8
  102. package/dist/collection/components/button/test/a11y/button.e2e.js +0 -48
  103. package/dist/collection/components/checkbox/checkbox.ios.css +5 -5
  104. package/dist/collection/components/checkbox/checkbox.md.css +2 -3
  105. package/dist/collection/components/checkbox/test/a11y/checkbox.e2e.js +2 -11
  106. package/dist/collection/components/checkbox/test/basic/checkbox.e2e.js +10 -0
  107. package/dist/collection/components/content/content.js +3 -2
  108. package/dist/collection/components/datetime/datetime.ios.css +3 -2
  109. package/dist/collection/components/datetime-button/datetime-button.ios.css +107 -0
  110. package/dist/collection/components/datetime-button/datetime-button.js +4 -4
  111. package/dist/collection/components/datetime-button/{datetime-button.css → datetime-button.md.css} +9 -6
  112. package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +12 -0
  113. package/dist/collection/components/fab-button/fab-button.ios.css +13 -13
  114. package/dist/collection/components/fab-button/fab-button.md.css +4 -4
  115. package/dist/collection/components/fab-button/test/a11y/fab-button.e2e.js +0 -50
  116. package/dist/collection/components/input/input.ios.css +3 -3
  117. package/dist/collection/components/input/input.md.css +3 -3
  118. package/dist/collection/components/input/test/a11y/input.e2e.js +3 -41
  119. package/dist/collection/components/item/item.ios.css +3 -3
  120. package/dist/collection/components/item/item.md.css +4 -4
  121. package/dist/collection/components/item-option/item-option.ios.css +2 -2
  122. package/dist/collection/components/item-option/item-option.md.css +1 -1
  123. package/dist/collection/components/item-sliding/animations/item-sliding-options.js +59 -0
  124. package/dist/collection/components/item-sliding/item-sliding.css +8 -4
  125. package/dist/collection/components/item-sliding/item-sliding.js +89 -6
  126. package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +0 -28
  127. package/dist/collection/components/item-sliding/test/basic/item-sliding.e2e.js +62 -25
  128. package/dist/collection/components/label/label.md.css +1 -1
  129. package/dist/collection/components/label/test/a11y/label.e2e.js +0 -20
  130. package/dist/collection/components/loading/loading.md.css +1 -1
  131. package/dist/collection/components/loading/test/a11y/loading.e2e.js +5 -21
  132. package/dist/collection/components/menu/menu.ios.css +3 -64
  133. package/dist/collection/components/menu/menu.js +13 -19
  134. package/dist/collection/components/menu/menu.md.css +3 -64
  135. package/dist/collection/components/menu-button/menu-button.ios.css +1 -1
  136. package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +0 -14
  137. package/dist/collection/components/modal/gestures/swipe-to-close.js +1 -1
  138. package/dist/collection/components/picker-legacy/picker.ios.css +1 -1
  139. package/dist/collection/components/picker-legacy/picker.md.css +1 -1
  140. package/dist/collection/components/picker-legacy-column/picker-column.md.css +1 -1
  141. package/dist/collection/components/progress-bar/progress-bar.ios.css +17 -11
  142. package/dist/collection/components/progress-bar/progress-bar.js +3 -0
  143. package/dist/collection/components/progress-bar/progress-bar.md.css +8 -10
  144. package/dist/collection/components/radio/radio.ios.css +2 -2
  145. package/dist/collection/components/radio/radio.md.css +2 -2
  146. package/dist/collection/components/radio/test/a11y/radio.e2e.js +68 -101
  147. package/dist/collection/components/range/range.ios.css +1 -1
  148. package/dist/collection/components/range/range.md.css +3 -3
  149. package/dist/collection/components/range/test/a11y/range.e2e.js +8 -18
  150. package/dist/collection/components/refresher/refresher.md.css +2 -2
  151. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  152. package/dist/collection/components/router-link/router-link.css +1 -1
  153. package/dist/collection/components/searchbar/searchbar.ios.css +4 -4
  154. package/dist/collection/components/segment/test/a11y/segment.e2e.js +0 -23
  155. package/dist/collection/components/segment-button/segment-button.md.css +2 -2
  156. package/dist/collection/components/select/select.ios.css +3 -3
  157. package/dist/collection/components/select/select.md.css +3 -3
  158. package/dist/collection/components/select/test/a11y/select.e2e.js +4 -68
  159. package/dist/collection/components/select-popover/select-popover.md.css +4 -4
  160. package/dist/collection/components/split-pane/split-pane.ios.css +53 -1
  161. package/dist/collection/components/split-pane/split-pane.js +12 -46
  162. package/dist/collection/components/split-pane/split-pane.md.css +53 -1
  163. package/dist/collection/components/tab-bar/tab-bar.ios.css +1 -1
  164. package/dist/collection/components/tab-bar/tab-bar.md.css +1 -1
  165. package/dist/collection/components/tab-button/tab-button.ios.css +6 -1
  166. package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +3 -41
  167. package/dist/collection/components/textarea/textarea.ios.css +3 -3
  168. package/dist/collection/components/textarea/textarea.md.css +3 -3
  169. package/dist/collection/components/toast/test/a11y/toast.e2e.js +24 -56
  170. package/dist/collection/components/toast/toast.ios.css +1 -1
  171. package/dist/collection/components/toast/toast.md.css +2 -2
  172. package/dist/collection/components/toggle/test/a11y/toggle.e2e.js +2 -8
  173. package/dist/collection/components/toggle/toggle.ios.css +8 -8
  174. package/dist/collection/components/toggle/toggle.md.css +2 -2
  175. package/dist/collection/css/test/a11y/typography.e2e.js +0 -18
  176. package/dist/collection/utils/animation/animation.js +15 -0
  177. package/dist/collection/utils/gesture/button-active.js +1 -1
  178. package/dist/collection/utils/test/playwright/generator.js +0 -1
  179. package/dist/collection/utils/test/playwright/page/utils/set-content.js +1 -1
  180. package/dist/docs.json +34 -7
  181. package/dist/esm/{animation-dde8cc0d.js → animation-ccab0993.js} +16 -1
  182. package/dist/esm/{button-active-48379dd2.js → button-active-2758ff14.js} +1 -1
  183. package/dist/esm/{index-4743453d.js → index-9dbb78a4.js} +2 -2
  184. package/dist/esm/{index-1193f005.js → index-b7e9478d.js} +1 -1
  185. package/dist/esm/index.js +5 -5
  186. package/dist/esm/ion-action-sheet.entry.js +6 -6
  187. package/dist/esm/ion-alert.entry.js +4 -4
  188. package/dist/esm/ion-app_8.entry.js +4 -3
  189. package/dist/esm/ion-avatar_3.entry.js +2 -2
  190. package/dist/esm/ion-back-button.entry.js +1 -1
  191. package/dist/esm/ion-button_2.entry.js +2 -2
  192. package/dist/esm/ion-checkbox.entry.js +2 -2
  193. package/dist/esm/ion-datetime-button.entry.js +4 -4
  194. package/dist/esm/ion-datetime_3.entry.js +5 -5
  195. package/dist/esm/ion-fab_3.entry.js +2 -2
  196. package/dist/esm/ion-input.entry.js +2 -2
  197. package/dist/esm/ion-item-option_3.entry.js +130 -10
  198. package/dist/esm/ion-item_8.entry.js +3 -3
  199. package/dist/esm/ion-loading.entry.js +2 -2
  200. package/dist/esm/ion-menu_3.entry.js +19 -24
  201. package/dist/esm/ion-modal.entry.js +3 -3
  202. package/dist/esm/ion-nav_2.entry.js +1 -1
  203. package/dist/esm/ion-popover.entry.js +2 -2
  204. package/dist/esm/ion-progress-bar.entry.js +5 -2
  205. package/dist/esm/ion-radio_2.entry.js +2 -2
  206. package/dist/esm/ion-range.entry.js +2 -2
  207. package/dist/esm/ion-refresher_2.entry.js +3 -3
  208. package/dist/esm/ion-route_4.entry.js +1 -1
  209. package/dist/esm/ion-searchbar.entry.js +1 -1
  210. package/dist/esm/ion-segment_2.entry.js +1 -1
  211. package/dist/esm/ion-select_3.entry.js +3 -3
  212. package/dist/esm/ion-split-pane.entry.js +14 -24
  213. package/dist/esm/ion-tab-bar_2.entry.js +3 -3
  214. package/dist/esm/ion-textarea.entry.js +2 -2
  215. package/dist/esm/ion-toast.entry.js +3 -3
  216. package/dist/esm/ion-toggle.entry.js +2 -2
  217. package/dist/esm/ionic.js +1 -1
  218. package/dist/esm/{ios.transition-3376ccb2.js → ios.transition-01176d76.js} +2 -2
  219. package/dist/esm/loader.js +1 -1
  220. package/dist/esm/{md.transition-f992779f.js → md.transition-558655c7.js} +2 -2
  221. package/dist/esm-es5/animation-ccab0993.js +4 -0
  222. package/dist/esm-es5/button-active-2758ff14.js +4 -0
  223. package/dist/esm-es5/{index-4743453d.js → index-9dbb78a4.js} +1 -1
  224. package/dist/esm-es5/{index-1193f005.js → index-b7e9478d.js} +1 -1
  225. package/dist/esm-es5/index.js +1 -1
  226. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  227. package/dist/esm-es5/ion-alert.entry.js +1 -1
  228. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  229. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  230. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  231. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  232. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  233. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  234. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  235. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  236. package/dist/esm-es5/ion-input.entry.js +1 -1
  237. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  238. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  239. package/dist/esm-es5/ion-loading.entry.js +1 -1
  240. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  241. package/dist/esm-es5/ion-modal.entry.js +1 -1
  242. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  243. package/dist/esm-es5/ion-popover.entry.js +1 -1
  244. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  245. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  246. package/dist/esm-es5/ion-range.entry.js +1 -1
  247. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  248. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  249. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  250. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  251. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  252. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  253. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  254. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  255. package/dist/esm-es5/ion-toast.entry.js +1 -1
  256. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  257. package/dist/esm-es5/ionic.js +1 -1
  258. package/dist/esm-es5/{ios.transition-3376ccb2.js → ios.transition-01176d76.js} +1 -1
  259. package/dist/esm-es5/loader.js +1 -1
  260. package/dist/esm-es5/md.transition-558655c7.js +4 -0
  261. package/dist/html.html-data.json +12 -0
  262. package/dist/ionic/index.esm.js +1 -1
  263. package/dist/ionic/ionic.esm.js +1 -1
  264. package/dist/ionic/{p-ec0a9b2c.system.entry.js → p-019e0d80.system.entry.js} +1 -1
  265. package/dist/ionic/p-02dc8c5b.entry.js +4 -0
  266. package/dist/ionic/{p-c6e9ef77.entry.js → p-0cc80201.entry.js} +1 -1
  267. package/dist/ionic/{p-662a9a47.system.entry.js → p-0dfa4ab4.system.entry.js} +1 -1
  268. package/dist/ionic/{p-590447a5.system.entry.js → p-0e908476.system.entry.js} +1 -1
  269. package/dist/ionic/{p-df6f50ef.entry.js → p-10339dcc.entry.js} +1 -1
  270. package/dist/ionic/{p-1d5b03e3.system.entry.js → p-11bf2ad0.system.entry.js} +1 -1
  271. package/dist/ionic/{p-3796194b.system.entry.js → p-19c379da.system.entry.js} +1 -1
  272. package/dist/ionic/p-19d9ceb8.system.js +1 -1
  273. package/dist/ionic/p-1a22895e.system.entry.js +4 -0
  274. package/dist/ionic/p-1c69a4ca.system.entry.js +4 -0
  275. package/dist/ionic/{p-92bfb607.entry.js → p-20a4ee02.entry.js} +1 -1
  276. package/dist/ionic/{p-530bb2af.system.entry.js → p-2316de85.system.entry.js} +1 -1
  277. package/dist/ionic/{p-5cbfce20.entry.js → p-26ff1180.entry.js} +1 -1
  278. package/dist/ionic/p-289f354c.entry.js +4 -0
  279. package/dist/ionic/p-2a3b87cd.entry.js +4 -0
  280. package/dist/ionic/p-2e01f1c5.system.entry.js +4 -0
  281. package/dist/ionic/p-38531958.system.entry.js +4 -0
  282. package/dist/ionic/{p-5f1b0512.entry.js → p-3b043115.entry.js} +1 -1
  283. package/dist/ionic/p-3b434dee.system.entry.js +4 -0
  284. package/dist/ionic/{p-d88ed181.system.entry.js → p-41208f54.system.entry.js} +1 -1
  285. package/dist/ionic/{p-f0dbd73e.system.entry.js → p-42925096.system.entry.js} +1 -1
  286. package/dist/ionic/p-44791cff.entry.js +4 -0
  287. package/dist/ionic/p-4981ea0a.system.entry.js +4 -0
  288. package/dist/ionic/{p-13d4dfe7.entry.js → p-5074a526.entry.js} +1 -1
  289. package/dist/ionic/{p-a41eaff2.system.entry.js → p-56b1a872.system.entry.js} +1 -1
  290. package/dist/ionic/p-57785713.system.entry.js +4 -0
  291. package/dist/ionic/p-57e9de81.system.js +4 -0
  292. package/dist/ionic/{p-c001b24f.entry.js → p-5dc16594.entry.js} +1 -1
  293. package/dist/ionic/{p-9f94e34a.system.entry.js → p-614e63a9.system.entry.js} +1 -1
  294. package/dist/ionic/{p-8b160fba.entry.js → p-67e52d31.entry.js} +1 -1
  295. package/dist/ionic/{p-aa975ff8.entry.js → p-6855f26a.entry.js} +1 -1
  296. package/dist/ionic/{p-7dade589.system.entry.js → p-69ce8bba.system.entry.js} +1 -1
  297. package/dist/ionic/p-6fb2b5e3.js +4 -0
  298. package/dist/ionic/{p-8e961825.entry.js → p-799da666.entry.js} +1 -1
  299. package/dist/ionic/{p-04377cfa.js → p-7b4649d7.js} +1 -1
  300. package/dist/ionic/{p-4abb1251.entry.js → p-7c7bc0cc.entry.js} +1 -1
  301. package/dist/ionic/{p-a29db3a0.entry.js → p-7dcf795f.entry.js} +1 -1
  302. package/dist/ionic/{p-a074be82.system.js → p-7de7a5fd.system.js} +1 -1
  303. package/dist/ionic/{p-f38c1f8d.entry.js → p-806a9810.entry.js} +1 -1
  304. package/dist/ionic/p-80ad9792.system.js +4 -0
  305. package/dist/ionic/{p-d08e0136.entry.js → p-84b567a6.entry.js} +1 -1
  306. package/dist/ionic/{p-a49931aa.system.js → p-9093afb1.system.js} +1 -1
  307. package/dist/ionic/p-922c234e.js +4 -0
  308. package/dist/ionic/p-950c05ad.entry.js +4 -0
  309. package/dist/ionic/p-97a9d526.system.entry.js +4 -0
  310. package/dist/ionic/p-99d448ba.system.entry.js +4 -0
  311. package/dist/ionic/p-9c5e3a2c.system.entry.js +4 -0
  312. package/dist/ionic/{p-1c453add.system.entry.js → p-a1bd098f.system.entry.js} +1 -1
  313. package/dist/ionic/p-a619ecad.entry.js +4 -0
  314. package/dist/ionic/{p-354682e8.system.entry.js → p-abd5d0d5.system.entry.js} +1 -1
  315. package/dist/ionic/{p-e9431a58.entry.js → p-ae4b7df8.entry.js} +1 -1
  316. package/dist/ionic/p-b20717fc.system.entry.js +4 -0
  317. package/dist/ionic/p-b61d7624.entry.js +4 -0
  318. package/dist/ionic/p-b660ba8a.system.js +4 -0
  319. package/dist/ionic/{p-2716d76c.entry.js → p-b68d435f.entry.js} +1 -1
  320. package/dist/ionic/p-ba2b1ef5.entry.js +4 -0
  321. package/dist/ionic/{p-bc01c384.entry.js → p-ba5d9e27.entry.js} +1 -1
  322. package/dist/ionic/{p-9c48f42f.entry.js → p-bb3fd397.entry.js} +1 -1
  323. package/dist/ionic/{p-44a56556.js → p-c75dc92f.js} +1 -1
  324. package/dist/ionic/{p-1ab2642a.system.js → p-c8f7e8c8.system.js} +1 -1
  325. package/dist/ionic/p-cd729946.js +4 -0
  326. package/dist/ionic/{p-385bb983.entry.js → p-cf53213c.entry.js} +1 -1
  327. package/dist/ionic/{p-e403ff07.entry.js → p-d1ab26de.entry.js} +1 -1
  328. package/dist/ionic/p-d2a73201.system.entry.js +4 -0
  329. package/dist/ionic/p-d3525765.js +4 -0
  330. package/dist/ionic/{p-d01449a3.system.entry.js → p-da666998.system.entry.js} +1 -1
  331. package/dist/ionic/{p-cc700688.system.entry.js → p-db05ecb6.system.entry.js} +1 -1
  332. package/dist/ionic/p-dc43a79e.entry.js +4 -0
  333. package/dist/ionic/{p-0aa78a8d.system.js → p-e755af39.system.js} +1 -1
  334. package/dist/ionic/p-ee71caaa.system.entry.js +4 -0
  335. package/dist/ionic/{p-5aec2208.entry.js → p-f0eafd38.entry.js} +1 -1
  336. package/dist/ionic/{p-25312768.system.entry.js → p-f25b4396.system.entry.js} +1 -1
  337. package/dist/ionic/p-f65f4d3e.system.entry.js +4 -0
  338. package/dist/ionic/p-fd98debb.entry.js +4 -0
  339. package/dist/ionic/p-fe458994.system.entry.js +4 -0
  340. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +8 -0
  341. package/dist/types/components/item-sliding/animations/item-sliding-options.d.ts +10 -0
  342. package/dist/types/components/item-sliding/item-sliding.d.ts +19 -0
  343. package/dist/types/components/menu/menu.d.ts +1 -11
  344. package/dist/types/components/split-pane/split-pane.d.ts +2 -14
  345. package/dist/types/components.d.ts +8 -1
  346. package/dist/types/utils/animation/animation-interface.d.ts +6 -0
  347. package/dist/types/utils/animation/animation.d.ts +2 -0
  348. package/hydrate/index.js +232 -108
  349. package/package.json +1 -1
  350. package/css/themes/dark.always.css +0 -122
  351. package/css/themes/dark.always.css.map +0 -1
  352. package/css/themes/dark.class.css +0 -122
  353. package/css/themes/dark.class.css.map +0 -1
  354. package/css/themes/dark.css +0 -3
  355. package/css/themes/dark.css.map +0 -1
  356. package/css/themes/dark.system.css +0 -124
  357. package/css/themes/dark.system.css.map +0 -1
  358. package/dist/collection/components/progress-bar/test/a11y/progress-bar.e2e.js +0 -24
  359. package/dist/collection/components/refresher/test/a11y/refresher.e2e.js +0 -25
  360. package/dist/collection/components/router-link/test/a11y/router-link.e2e.js +0 -23
  361. package/dist/collection/components/select-popover/test/a11y/select-popover.e2e.js +0 -32
  362. package/dist/collection/components/split-pane/test/wrapped-menu/split-pane.e2e.js +0 -41
  363. package/dist/collection/themes/test/colors/theme.e2e.js +0 -114
  364. package/dist/esm-es5/animation-dde8cc0d.js +0 -4
  365. package/dist/esm-es5/button-active-48379dd2.js +0 -4
  366. package/dist/esm-es5/md.transition-f992779f.js +0 -4
  367. package/dist/ionic/p-04d84d5d.entry.js +0 -4
  368. package/dist/ionic/p-068950da.entry.js +0 -4
  369. package/dist/ionic/p-0832dedf.entry.js +0 -4
  370. package/dist/ionic/p-11c55ac8.system.js +0 -4
  371. package/dist/ionic/p-1b60cc53.js +0 -4
  372. package/dist/ionic/p-24c3f2cd.system.entry.js +0 -4
  373. package/dist/ionic/p-2724403e.entry.js +0 -4
  374. package/dist/ionic/p-283bc1a1.system.entry.js +0 -4
  375. package/dist/ionic/p-29d03b3a.js +0 -4
  376. package/dist/ionic/p-38f2c6bb.system.js +0 -4
  377. package/dist/ionic/p-3af5faf8.system.entry.js +0 -4
  378. package/dist/ionic/p-4eae8c91.entry.js +0 -4
  379. package/dist/ionic/p-56944895.entry.js +0 -4
  380. package/dist/ionic/p-713af1fe.entry.js +0 -4
  381. package/dist/ionic/p-8a25bf30.system.entry.js +0 -4
  382. package/dist/ionic/p-97aaf697.system.entry.js +0 -4
  383. package/dist/ionic/p-98f35d98.js +0 -4
  384. package/dist/ionic/p-9a68d8ef.system.js +0 -4
  385. package/dist/ionic/p-9a8bc8f3.system.entry.js +0 -4
  386. package/dist/ionic/p-a6e5f54e.system.entry.js +0 -4
  387. package/dist/ionic/p-b231b7cf.system.entry.js +0 -4
  388. package/dist/ionic/p-b59fe3bd.system.entry.js +0 -4
  389. package/dist/ionic/p-b7e03ff0.system.entry.js +0 -4
  390. package/dist/ionic/p-bec6ae40.entry.js +0 -4
  391. package/dist/ionic/p-c16fbc5f.system.entry.js +0 -4
  392. package/dist/ionic/p-cb3ef9c1.system.entry.js +0 -4
  393. package/dist/ionic/p-cb6a1fa0.system.entry.js +0 -4
  394. package/dist/ionic/p-cd3e1a06.entry.js +0 -4
  395. package/dist/ionic/p-cd574dfa.js +0 -4
  396. package/dist/ionic/p-d1ad57d5.system.entry.js +0 -4
  397. package/dist/ionic/p-d2634efe.system.entry.js +0 -4
  398. package/dist/ionic/p-fc17f198.entry.js +0 -4
@@ -334,7 +334,7 @@ ion-ripple-effect {
334
334
  * }
335
335
  */
336
336
  :host {
337
- --background: var(--ion-color-primary, #0054e9);
337
+ --background: var(--ion-color-primary, #3880ff);
338
338
  --background-activated: transparent;
339
339
  --background-focused: currentColor;
340
340
  --background-hover: currentColor;
@@ -359,10 +359,10 @@ ion-ripple-effect {
359
359
  --color: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.54);
360
360
  --color-activated: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.54);
361
361
  --color-focused: var(--color-activated);
362
- --background: var(--ion-color-light, #f6f8fc);
362
+ --background: var(--ion-color-light, #f4f5f8);
363
363
  --background-activated: transparent;
364
- --background-focused: var(--ion-color-light-shade, #d8dade);
365
- --background-hover: var(--ion-color-light-tint, #f7f9fc);
364
+ --background-focused: var(--ion-color-light-shade, #d7d8da);
365
+ --background-hover: var(--ion-color-light-tint, #f5f6f9);
366
366
  }
367
367
 
368
368
  :host(.fab-button-in-list) ::slotted(ion-icon) {
@@ -1,58 +1,8 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import AxeBuilder from "@axe-core/playwright";
5
4
  import { expect } from "@playwright/test";
6
5
  import { configs, test } from "../../../../utils/test/playwright/index";
7
- configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
8
- test.describe(title('fab-button: a11y'), () => {
9
- test('should not have accessibility violations', async ({ page }) => {
10
- await page.setContent(`
11
- <ion-fab-button>FAB</ion-fab-button>
12
- <ion-fab-button class="ion-activated">FAB</ion-fab-button>
13
- `, config);
14
- const results = await new AxeBuilder({ page }).analyze();
15
- expect(results.violations).toEqual([]);
16
- });
17
- });
18
- test.describe(title('fab-list: contrast'), () => {
19
- test('should not have accessibility violations', async ({ page }) => {
20
- await page.setContent(`
21
- <ion-fab activated="true">
22
- <ion-fab-button>
23
- Open
24
- </ion-fab-button>
25
- <ion-fab-list side="bottom">
26
- <ion-fab-button>Down</ion-fab-button>
27
- <ion-fab-button class="ion-activated">Down</ion-fab-button>
28
- <ion-fab-button class="ion-focused">Down</ion-fab-button>
29
- </ion-fab-list>
30
- </ion-fab>
31
- `, config);
32
- const results = await new AxeBuilder({ page }).analyze();
33
- expect(results.violations).toEqual([]);
34
- });
35
- });
36
- test.describe(title('fab: translucent contrast'), () => {
37
- test('should not have accessibility violations', async ({ page }) => {
38
- await page.setContent(`
39
- <ion-fab-button translucent="true">FAB</ion-fab-button>
40
- <ion-fab-button class="ion-focused" translucent="true">FAB</ion-fab-button>
41
- <ion-fab activated="true">
42
- <ion-fab-button>
43
- Open
44
- </ion-fab-button>
45
- <ion-fab-list side="bottom">
46
- <ion-fab-button translucent="true">Down</ion-fab-button>
47
- <ion-fab-button class="ion-focused" translucent="true">Down</ion-fab-button>
48
- </ion-fab-list>
49
- </ion-fab>
50
- `, config);
51
- const results = await new AxeBuilder({ page }).analyze();
52
- expect(results.violations).toEqual([]);
53
- });
54
- });
55
- });
56
6
  configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => {
57
7
  test.describe(title('fab-button: aria attributes'), () => {
58
8
  test('should inherit aria attributes to inner button', async ({ page }) => {
@@ -89,9 +89,9 @@
89
89
  --background: transparent;
90
90
  --color: initial;
91
91
  --border-style: solid;
92
- --highlight-color-focused: var(--ion-color-primary, #0054e9);
93
- --highlight-color-valid: var(--ion-color-success, #2dd55b);
94
- --highlight-color-invalid: var(--ion-color-danger, #c5000f);
92
+ --highlight-color-focused: var(--ion-color-primary, #3880ff);
93
+ --highlight-color-valid: var(--ion-color-success, #2dd36f);
94
+ --highlight-color-invalid: var(--ion-color-danger, #eb445a);
95
95
  /**
96
96
  * This is a private API that is used to switch
97
97
  * out the highlight color based on the state
@@ -89,9 +89,9 @@
89
89
  --background: transparent;
90
90
  --color: initial;
91
91
  --border-style: solid;
92
- --highlight-color-focused: var(--ion-color-primary, #0054e9);
93
- --highlight-color-valid: var(--ion-color-success, #2dd55b);
94
- --highlight-color-invalid: var(--ion-color-danger, #c5000f);
92
+ --highlight-color-focused: var(--ion-color-primary, #3880ff);
93
+ --highlight-color-valid: var(--ion-color-success, #2dd36f);
94
+ --highlight-color-invalid: var(--ion-color-danger, #eb445a);
95
95
  /**
96
96
  * This is a private API that is used to switch
97
97
  * out the highlight color based on the state
@@ -4,52 +4,14 @@
4
4
  import AxeBuilder from "@axe-core/playwright";
5
5
  import { expect } from "@playwright/test";
6
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
- configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
7
+ configs({ directions: ['ltr'] }).forEach(({ title, config, screenshot }) => {
8
8
  test.describe(title('input: a11y'), () => {
9
- test('default layout should not have accessibility violations', async ({ page }) => {
10
- await page.setContent(`
11
- <main>
12
- <ion-input label="Label" placeholder="Placeholder"></ion-input>
13
- <ion-input placeholder="Placeholder">
14
- <div slot="label">Label"></div>
15
- </ion-input>
16
- <ion-input label="Label" value="My Text"></ion-input>
17
- <ion-input aria-label="Label"></ion-input>
18
- <ion-input label="Email" fill="solid" value="hi@ionic.io">
19
- <ion-icon slot="start" name="lock-closed" aria-hidden="true"></ion-icon>
20
- <ion-button slot="end" aria-label="button">
21
- <ion-icon slot="icon-only" name="lock-closed" aria-hidden="true"></ion-icon>
22
- </ion-button>
23
- </ion-input>
24
- </main>
25
- `, config);
26
- const results = await new AxeBuilder({ page }).analyze();
27
- expect(results.violations).toEqual([]);
28
- });
29
- test('focused state should not have accessibility violations', async ({ page }) => {
30
- /**
31
- * The primary color against the focus background
32
- * when using fill="solid" does not meet AA
33
- * contrast guidelines so it excluded from the test.
34
- * The contrast here is a significant improvement
35
- * over what Ionic has had in the past, so the team
36
- * has decided that this tradeoff is acceptable since
37
- * the scope of the problem is limited to the focus
38
- * state with the primary color when fill="solid".
39
- */
40
- await page.setContent(`
41
- <main>
42
- <ion-input class="has-focus" label="Label" value="My Text"></ion-input>
43
- <ion-input class="has-focus" label-placement="floating" label="Label" value="My Text"></ion-input>
44
- <ion-input class="has-focus" fill="outline" label-placement="floating" label="Label" value="My Text"></ion-input>
45
- </main>
46
- `, config);
9
+ test('should not have accessibility violations', async ({ page }) => {
10
+ await page.goto(`/src/components/input/test/a11y`, config);
47
11
  const results = await new AxeBuilder({ page }).analyze();
48
12
  expect(results.violations).toEqual([]);
49
13
  });
50
14
  });
51
- });
52
- configs({ directions: ['ltr'] }).forEach(({ title, config, screenshot }) => {
53
15
  test.describe(title('input: font scaling'), () => {
54
16
  test('should scale text on larger font sizes', async ({ page }) => {
55
17
  await page.setContent(`
@@ -700,9 +700,9 @@ ion-ripple-effect {
700
700
  --border-color: var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-250, #c8c7cc)));
701
701
  --color: var(--ion-item-color, var(--ion-text-color, #000));
702
702
  --highlight-height: 0px;
703
- --highlight-color-focused: var(--ion-color-primary, #0054e9);
704
- --highlight-color-valid: var(--ion-color-success, #2dd55b);
705
- --highlight-color-invalid: var(--ion-color-danger, #c5000f);
703
+ --highlight-color-focused: var(--ion-color-primary, #3880ff);
704
+ --highlight-color-valid: var(--ion-color-success, #2dd36f);
705
+ --highlight-color-invalid: var(--ion-color-danger, #eb445a);
706
706
  --bottom-padding-start: 0px;
707
707
  font-size: 1rem;
708
708
  }
@@ -800,9 +800,9 @@ ion-ripple-effect {
800
800
  --inner-padding-end: 16px;
801
801
  --inner-border-width: 0 0 1px 0;
802
802
  --highlight-height: 1px;
803
- --highlight-color-focused: var(--ion-color-primary, #0054e9);
804
- --highlight-color-valid: var(--ion-color-success, #2dd55b);
805
- --highlight-color-invalid: var(--ion-color-danger, #c5000f);
803
+ --highlight-color-focused: var(--ion-color-primary, #3880ff);
804
+ --highlight-color-valid: var(--ion-color-success, #2dd36f);
805
+ --highlight-color-invalid: var(--ion-color-danger, #eb445a);
806
806
  font-size: 1rem;
807
807
  font-weight: normal;
808
808
  text-transform: none;
@@ -1100,7 +1100,7 @@ ion-ripple-effect {
1100
1100
  :host(.ion-focused:not(.ion-color)) ::slotted(.label-floating),
1101
1101
  :host(.item-has-focus:not(.ion-color)) ::slotted(.label-stacked),
1102
1102
  :host(.item-has-focus:not(.ion-color)) ::slotted(.label-floating) {
1103
- color: var(--ion-color-primary, #0054e9);
1103
+ color: var(--ion-color-primary, #3880ff);
1104
1104
  }
1105
1105
 
1106
1106
  :host(.ion-color) {
@@ -58,7 +58,7 @@
58
58
  * @prop --background: Background of the item option
59
59
  * @prop --color: Color of the item option
60
60
  */
61
- --background: var(--ion-color-primary, #0054e9);
61
+ --background: var(--ion-color-primary, #3880ff);
62
62
  --color: var(--ion-color-primary-contrast, #fff);
63
63
  background: var(--background);
64
64
  color: var(--color);
@@ -234,7 +234,7 @@
234
234
  }
235
235
 
236
236
  :host(.ion-activated) {
237
- background: var(--ion-color-primary-shade, #004acd);
237
+ background: var(--ion-color-primary-shade, #3171e0);
238
238
  }
239
239
 
240
240
  :host(.ion-color.ion-activated) {
@@ -58,7 +58,7 @@
58
58
  * @prop --background: Background of the item option
59
59
  * @prop --color: Color of the item option
60
60
  */
61
- --background: var(--ion-color-primary, #0054e9);
61
+ --background: var(--ion-color-primary, #3880ff);
62
62
  --color: var(--ion-color-primary-contrast, #fff);
63
63
  background: var(--background);
64
64
  color: var(--color);
@@ -0,0 +1,59 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { createAnimation } from "../../../utils/animation/animation";
5
+ /**
6
+ * Animates the opening and closing of a sliding item option.
7
+ * @param el The element to animate.
8
+ * @param viewportOffset The offset of the element on the x-axis to locate it off-screen.
9
+ * @param progress The progress of the animation (0 - 1).
10
+ * @param isFinal Whether the animation is in its final state (collapsed or expanded).
11
+ * @param isReset Whether to reset the element to its initial state.
12
+ * @param zIndex _Optional_ The z-index to apply to the element.
13
+ */
14
+ export const slidingItemAnimation = (el, viewportOffset, progress, isFinal, isReset, zIndex) => {
15
+ const styles = zIndex !== undefined ? { zIndex: `${zIndex}` } : {};
16
+ const swipeAnimation = createAnimation()
17
+ .addElement(el)
18
+ /**
19
+ * The specific value here does not actually
20
+ * matter. We just need this to be a positive
21
+ * value so the animation does not jump
22
+ * to the end when the user begins to drag.
23
+ */
24
+ .duration(1)
25
+ .commitStyles()
26
+ .keyframes([
27
+ Object.assign({ offset: 0, transform: `translate3d(${viewportOffset}px,0,0)` }, styles),
28
+ Object.assign({ offset: 1, transform: `translate3d(0,0,0)` }, styles),
29
+ ]);
30
+ if (isReset) {
31
+ swipeAnimation.destroy();
32
+ const leaveAnimation = createAnimation()
33
+ .addElement(el)
34
+ .duration(300)
35
+ .easing('ease-out')
36
+ .beforeStyles({
37
+ zIndex: zIndex,
38
+ })
39
+ .fromTo('transform', el.style.transform, `translate3d(${viewportOffset}px,0,0)`)
40
+ .afterClearStyles(['z-index', 'transform']);
41
+ leaveAnimation.play().then(() => leaveAnimation.destroy());
42
+ }
43
+ if (!isFinal) {
44
+ swipeAnimation.progressStart(true, progress);
45
+ }
46
+ else {
47
+ swipeAnimation.destroy();
48
+ const expandAnimation = createAnimation()
49
+ .addElement(el)
50
+ .duration(300)
51
+ .easing('ease-out')
52
+ .beforeStyles({
53
+ zIndex: zIndex,
54
+ })
55
+ .fromTo('transform', el.style.transform, `translate3d(0,0,0)`)
56
+ .afterClearStyles(['z-index', 'transform']);
57
+ expandAnimation.play();
58
+ }
59
+ };
@@ -79,11 +79,7 @@ ion-item-sliding .item {
79
79
  }
80
80
 
81
81
  .item-sliding-active-swipe-end .item-options-end .item-option-expandable {
82
- /* stylelint-disable-next-line property-disallowed-list */
83
- padding-left: 100%;
84
82
  order: 1;
85
- transition-duration: 0.6s;
86
- transition-property: padding-left;
87
83
  }
88
84
  :host-context([dir=rtl]) .item-sliding-active-swipe-end .item-options-end .item-option-expandable {
89
85
  order: -1;
@@ -99,6 +95,14 @@ ion-item-sliding .item {
99
95
  }
100
96
  }
101
97
 
98
+ .item-sliding-animation-legacy.item-sliding-active-swipe-end .item-options-end .item-option-expandable,
99
+ .item-sliding-animation-modern.item-sliding-active-swipe-end .item-options-end .item-option-expandable {
100
+ /* stylelint-disable-next-line property-disallowed-list */
101
+ padding-left: 100%;
102
+ transition-duration: 0.6s;
103
+ transition-property: padding-left;
104
+ }
105
+
102
106
  .item-sliding-active-swipe-start .item-options-start .item-option-expandable {
103
107
  /* stylelint-disable-next-line property-disallowed-list */
104
108
  padding-right: 100%;
@@ -2,10 +2,14 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { Host, h } from "@stencil/core";
5
+ import { supportsWebAnimations } from "../../utils/animation/animation";
5
6
  import { findClosestIonContent, disableContentScrollY, resetContentScrollY } from "../../utils/content/index";
6
7
  import { isEndSide } from "../../utils/helpers";
8
+ import { printIonWarning } from "../../utils/logging/index";
9
+ import { isRTL } from "../../utils/rtl/index";
7
10
  import { watchForOptions } from "../../utils/watch-options";
8
11
  import { getIonMode } from "../../global/ionic-global";
12
+ import { slidingItemAnimation } from "./animations/item-sliding-options";
9
13
  const SWIPE_MARGIN = 30;
10
14
  const ELASTIC_FACTOR = 0.55;
11
15
  let openSlidingItem;
@@ -22,6 +26,7 @@ export class ItemSliding {
22
26
  this.initialContentScrollY = true;
23
27
  this.state = 2 /* SlidingState.Disabled */;
24
28
  this.disabled = false;
29
+ this.animationType = 'legacy';
25
30
  }
26
31
  disabledChanged() {
27
32
  if (this.gesture) {
@@ -70,6 +75,12 @@ export class ItemSliding {
70
75
  this.mutationObserver = undefined;
71
76
  }
72
77
  }
78
+ componentWillLoad() {
79
+ if (!supportsWebAnimations && this.animationType === 'modern') {
80
+ printIonWarning('Animation type "modern" needs Web Animations API support. Falling back to "legacy".');
81
+ this.animationType = 'legacy';
82
+ }
83
+ }
73
84
  /**
74
85
  * Get the amount the item is open in pixels.
75
86
  */
@@ -174,6 +185,20 @@ export class ItemSliding {
174
185
  return this.rightOptions;
175
186
  }
176
187
  }
188
+ /**
189
+ * Given a side, return the width of the options on that side.
190
+ *
191
+ * @param side The side of the options to get the width for.
192
+ */
193
+ getOptionsWidth(side) {
194
+ if (side === 'start') {
195
+ return this.optsWidthLeftSide;
196
+ }
197
+ else if (side === 'end') {
198
+ return this.optsWidthRightSide;
199
+ }
200
+ return 0;
201
+ }
177
202
  async updateOptions() {
178
203
  const options = this.el.querySelectorAll('ion-item-options');
179
204
  let sides = 0;
@@ -321,7 +346,8 @@ export class ItemSliding {
321
346
  if (!this.item) {
322
347
  return;
323
348
  }
324
- const { el } = this;
349
+ const { el, animationType } = this;
350
+ const rtl = isRTL(el);
325
351
  const style = this.item.style;
326
352
  this.openAmount = openAmount;
327
353
  if (isFinal) {
@@ -365,14 +391,51 @@ export class ItemSliding {
365
391
  }, 600);
366
392
  openSlidingItem = undefined;
367
393
  style.transform = '';
394
+ if (animationType === 'modern') {
395
+ this.animateSlidingItemOptions(0, rtl);
396
+ }
368
397
  return;
369
398
  }
370
399
  style.transform = `translate3d(${-openAmount}px,0,0)`;
400
+ if (animationType === 'modern') {
401
+ this.animateSlidingItemOptions(openAmount, rtl);
402
+ }
371
403
  this.ionDrag.emit({
372
404
  amount: openAmount,
373
405
  ratio: this.getSlidingRatioSync(),
374
406
  });
375
407
  }
408
+ animateSlidingItemOptions(openAmount, isRTL) {
409
+ var _a;
410
+ /**
411
+ * The total width of the 'processed' options.
412
+ * Used to calculate the offset to move each option off the
413
+ * screen, on top of each other.
414
+ */
415
+ let optionWidthOffset = 0;
416
+ const side = this.state === 16 /* SlidingState.Start */ ? 'start' : 'end';
417
+ const options = Array.from(((_a = this.getOptions(side)) === null || _a === void 0 ? void 0 : _a.querySelectorAll('ion-item-option')) || []);
418
+ const optsWidth = this.getOptionsWidth(side);
419
+ const progress = Math.abs(openAmount / optsWidth);
420
+ options.forEach((option, index) => {
421
+ let isFinal = false;
422
+ let zIndex;
423
+ let viewportOffset = 0;
424
+ const isReset = openAmount === 0;
425
+ if (side === 'start') {
426
+ viewportOffset = isRTL ? -1 * (optsWidth - optionWidthOffset) : -1 * (option.clientWidth + optionWidthOffset);
427
+ isFinal = openAmount <= -optsWidth;
428
+ zIndex = isRTL ? undefined : options.length - index;
429
+ }
430
+ else {
431
+ viewportOffset = isRTL ? optionWidthOffset + option.clientWidth : optsWidth - optionWidthOffset;
432
+ isFinal = openAmount >= optsWidth;
433
+ zIndex = isRTL ? options.length - index : undefined;
434
+ }
435
+ slidingItemAnimation(option, viewportOffset, progress, isFinal, isReset, zIndex);
436
+ optionWidthOffset += option.clientWidth;
437
+ });
438
+ }
376
439
  getSlidingRatioSync() {
377
440
  if (this.openAmount > 0) {
378
441
  return this.openAmount / this.optsWidthRightSide;
@@ -386,13 +449,15 @@ export class ItemSliding {
386
449
  }
387
450
  render() {
388
451
  const mode = getIonMode(this);
452
+ const { state, animationType } = this;
389
453
  return (h(Host, { class: {
390
454
  [mode]: true,
391
- 'item-sliding-active-slide': this.state !== 2 /* SlidingState.Disabled */,
392
- 'item-sliding-active-options-end': (this.state & 8 /* SlidingState.End */) !== 0,
393
- 'item-sliding-active-options-start': (this.state & 16 /* SlidingState.Start */) !== 0,
394
- 'item-sliding-active-swipe-end': (this.state & 32 /* SlidingState.SwipeEnd */) !== 0,
395
- 'item-sliding-active-swipe-start': (this.state & 64 /* SlidingState.SwipeStart */) !== 0,
455
+ [`item-sliding-animation-${animationType}`]: true,
456
+ 'item-sliding-active-slide': state !== 2 /* SlidingState.Disabled */,
457
+ 'item-sliding-active-options-end': (state & 8 /* SlidingState.End */) !== 0,
458
+ 'item-sliding-active-options-start': (state & 16 /* SlidingState.Start */) !== 0,
459
+ 'item-sliding-active-swipe-end': (state & 32 /* SlidingState.SwipeEnd */) !== 0,
460
+ 'item-sliding-active-swipe-start': (state & 64 /* SlidingState.SwipeStart */) !== 0,
396
461
  } }));
397
462
  }
398
463
  static get is() { return "ion-item-sliding"; }
@@ -425,6 +490,24 @@ export class ItemSliding {
425
490
  "attribute": "disabled",
426
491
  "reflect": false,
427
492
  "defaultValue": "false"
493
+ },
494
+ "animationType": {
495
+ "type": "string",
496
+ "mutable": false,
497
+ "complexType": {
498
+ "original": "'modern' | 'legacy'",
499
+ "resolved": "\"legacy\" | \"modern\"",
500
+ "references": {}
501
+ },
502
+ "required": false,
503
+ "optional": false,
504
+ "docs": {
505
+ "tags": [],
506
+ "text": "Specifies the animation behavior for sliding item options.\nYou can choose between two available options: \"modern\" and \"legacy\".\n\n- \"legacy\": The item will be swiped to reveal the option buttons beneath it.\n- \"modern\": As the item is swiped, all item options will smoothly and gradually reveal themselves.\n\nThe \"modern\" animation type requires the [Web Animations API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API).\nCheck [Browser Support](https://caniuse.com/web-animation) for more information."
507
+ },
508
+ "attribute": "animation-type",
509
+ "reflect": false,
510
+ "defaultValue": "'legacy'"
428
511
  }
429
512
  };
430
513
  }
@@ -1,36 +1,8 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import AxeBuilder from "@axe-core/playwright";
5
- import { expect } from "@playwright/test";
6
4
  import { configs, test } from "../../../../utils/test/playwright/index";
7
5
  import { testSlidingItem } from "../test.utils";
8
- configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
9
- test.describe(title('item-sliding: a11y for ion-color()'), () => {
10
- test('should not have accessibility violations', async ({ page }) => {
11
- await page.setContent(`
12
- <main>
13
- <ion-item-sliding id="axe">
14
- <ion-item>
15
- <ion-label>Sliding Item with End Options</ion-label>
16
- </ion-item>
17
-
18
- <ion-item-options>
19
- <ion-item-option>Favorite</ion-item-option>
20
- <ion-item-option class="ion-activated">Activated</ion-item-option>
21
- </ion-item-options>
22
- </ion-item-sliding>
23
- </main>
24
- `, config);
25
- await page.locator(`#axe`).evaluate(async (el) => {
26
- await el.open('end');
27
- });
28
- await page.waitForChanges();
29
- const results = await new AxeBuilder({ page }).analyze();
30
- expect(results.violations).toEqual([]);
31
- });
32
- });
33
- });
34
6
  /**
35
7
  * This behavior does not vary across directions
36
8
  */
@@ -15,33 +15,70 @@ configs().forEach(({ title, screenshot, config }) => {
15
15
  test.beforeEach(async ({ page }) => {
16
16
  await page.goto(`/src/components/item-sliding/test/basic`, config);
17
17
  });
18
- test.describe('start options', () => {
19
- test('should not have visual regressions', async ({ page }) => {
20
- const item = page.locator('#item2');
21
- /**
22
- * Negative dragByX value to drag element from the right to the left
23
- * to reveal the options on the right side.
24
- * Positive dragByX value to drag element from the left to the right
25
- * to reveal the options on the left side.
26
- */
27
- const dragByX = config.direction === 'rtl' ? -150 : 150;
28
- await dragElementBy(item, page, dragByX);
29
- await page.waitForChanges();
30
- await expect(item).toHaveScreenshot(screenshot('item-sliding-start'));
18
+ test.describe('legacy animation', () => {
19
+ test.describe('start options', () => {
20
+ test('should not have visual regressions', async ({ page }) => {
21
+ const item = page.locator('#item2');
22
+ /**
23
+ * Negative dragByX value to drag element from the right to the left
24
+ * to reveal the options on the right side.
25
+ * Positive dragByX value to drag element from the left to the right
26
+ * to reveal the options on the left side.
27
+ */
28
+ const dragByX = config.direction === 'rtl' ? -150 : 150;
29
+ await dragElementBy(item, page, dragByX);
30
+ await page.waitForChanges();
31
+ await expect(item).toHaveScreenshot(screenshot('item-sliding-start'));
32
+ });
33
+ });
34
+ test.describe('end options', () => {
35
+ test('should not have visual regressions', async ({ page }) => {
36
+ const item = page.locator('#item2');
37
+ /**
38
+ * Negative dragByX value to drag element from the right to the left
39
+ * to reveal the options on the right side.
40
+ * Positive dragByX value to drag element from the left to the right
41
+ * to reveal the options on the left side.
42
+ */
43
+ const dragByX = config.direction === 'rtl' ? 150 : -150;
44
+ await dragElementBy(item, page, dragByX);
45
+ await expect(item).toHaveScreenshot(screenshot('item-sliding-end'));
46
+ });
31
47
  });
32
48
  });
33
- test.describe('end options', () => {
34
- test('should not have visual regressions', async ({ page }) => {
35
- const item = page.locator('#item2');
36
- /**
37
- * Negative dragByX value to drag element from the right to the left
38
- * to reveal the options on the right side.
39
- * Positive dragByX value to drag element from the left to the right
40
- * to reveal the options on the left side.
41
- */
42
- const dragByX = config.direction === 'rtl' ? 150 : -150;
43
- await dragElementBy(item, page, dragByX);
44
- await expect(item).toHaveScreenshot(screenshot('item-sliding-end'));
49
+ test.describe('modern animation', () => {
50
+ test.describe('start options', () => {
51
+ test('should not have visual regressions', async ({ page }) => {
52
+ const useModernAnimationBtn = page.locator('#useModernAnimation');
53
+ await useModernAnimationBtn.click();
54
+ const item = page.locator('#item2');
55
+ /**
56
+ * Negative dragByX value to drag element from the right to the left
57
+ * to reveal the options on the right side.
58
+ * Positive dragByX value to drag element from the left to the right
59
+ * to reveal the options on the left side.
60
+ */
61
+ const dragByX = config.direction === 'rtl' ? -150 : 150;
62
+ await dragElementBy(item, page, dragByX);
63
+ await page.waitForChanges();
64
+ await expect(item).toHaveScreenshot(screenshot('modern-item-sliding-start'));
65
+ });
66
+ });
67
+ test.describe('end options', () => {
68
+ test('should not have visual regressions', async ({ page }) => {
69
+ const useModernAnimationBtn = page.locator('#useModernAnimation');
70
+ await useModernAnimationBtn.click();
71
+ const item = page.locator('#item2');
72
+ /**
73
+ * Negative dragByX value to drag element from the right to the left
74
+ * to reveal the options on the right side.
75
+ * Positive dragByX value to drag element from the left to the right
76
+ * to reveal the options on the left side.
77
+ */
78
+ const dragByX = config.direction === 'rtl' ? 150 : -150;
79
+ await dragElementBy(item, page, dragByX);
80
+ await expect(item).toHaveScreenshot(screenshot('modern-item-sliding-end'));
81
+ });
45
82
  });
46
83
  });
47
84
  });
@@ -348,7 +348,7 @@
348
348
  :host-context(.ion-focused).label-floating:not(.ion-color),
349
349
  :host-context(.item-has-focus).label-stacked:not(.ion-color),
350
350
  :host-context(.item-has-focus).label-floating:not(.ion-color) {
351
- color: var(--ion-color-primary, #0054e9);
351
+ color: var(--ion-color-primary, #3880ff);
352
352
  }
353
353
 
354
354
  :host-context(.ion-focused.ion-color).label-stacked:not(.ion-color),