voyager-ionic-core 7.5.0 → 7.5.5

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 (594) hide show
  1. package/components/action-sheet.js +2 -2
  2. package/components/alert.js +2 -2
  3. package/components/animation.js +18 -3
  4. package/components/checkbox.js +2 -2
  5. package/components/form-controller.js +1 -5
  6. package/components/index8.js +0 -1
  7. package/components/input-shims.js +9 -1
  8. package/components/ion-accordion-group.js +11 -1
  9. package/components/ion-datetime.js +48 -23
  10. package/components/ion-fab-list.js +1 -1
  11. package/components/ion-fab.js +1 -1
  12. package/components/ion-header.js +1 -1
  13. package/components/ion-input.js +11 -4
  14. package/components/ion-item-divider.js +2 -2
  15. package/components/ion-item-option.js +2 -2
  16. package/components/ion-menu.js +17 -5
  17. package/components/ion-modal.js +8 -8
  18. package/components/ion-range.js +2 -2
  19. package/components/ion-refresher.js +8 -1
  20. package/components/ion-reorder.js +2 -2
  21. package/components/ion-searchbar.js +10 -3
  22. package/components/ion-segment.js +43 -17
  23. package/components/ion-select.js +2 -2
  24. package/components/ion-tab-bar.js +2 -2
  25. package/components/ion-tab-button.js +2 -2
  26. package/components/ion-textarea.js +11 -4
  27. package/components/ion-title.js +1 -1
  28. package/components/ion-toast.js +2 -2
  29. package/components/ion-toggle.js +2 -2
  30. package/components/ios.transition.js +209 -41
  31. package/components/item.js +2 -2
  32. package/components/list-header.js +2 -2
  33. package/components/list.js +2 -2
  34. package/components/picker-internal.js +2 -2
  35. package/components/popover.js +2 -2
  36. package/components/radio-group.js +10 -1
  37. package/components/radio.js +2 -3
  38. package/components/watch-options.js +14 -3
  39. package/css/core.css.map +1 -1
  40. package/css/display.css.map +1 -1
  41. package/css/float-elements.css.map +1 -1
  42. package/css/global.bundle.css.map +1 -1
  43. package/css/ionic.bundle.css.map +1 -1
  44. package/css/padding.css.map +1 -1
  45. package/css/structure.css.map +1 -1
  46. package/css/text-alignment.css.map +1 -1
  47. package/css/text-transformation.css.map +1 -1
  48. package/css/typography.css.map +1 -1
  49. package/css/utils.bundle.css.map +1 -1
  50. package/dist/cjs/{animation-c8bdd3c7.js → animation-1083855c.js} +18 -3
  51. package/dist/cjs/{app-globals-fe1ad535.js → app-globals-1d4c1dbf.js} +1 -1
  52. package/dist/cjs/{button-active-c0ff1915.js → button-active-af897e0e.js} +1 -1
  53. package/dist/cjs/{form-controller-5e223b54.js → form-controller-9343050c.js} +1 -5
  54. package/dist/cjs/{index-d93fb71d.js → index-573877f3.js} +3 -3
  55. package/dist/cjs/{index-305a23dc.js → index-c2940dc1.js} +127 -57
  56. package/dist/cjs/{index-5e7529f6.js → index-d7561763.js} +2 -2
  57. package/dist/cjs/{index-10873539.js → index-da2c7a37.js} +0 -1
  58. package/dist/cjs/index.cjs.js +8 -8
  59. package/dist/cjs/{input-shims-da7dc0de.js → input-shims-b0a75a01.js} +10 -2
  60. package/dist/cjs/ion-accordion_2.cjs.entry.js +13 -3
  61. package/dist/cjs/ion-action-sheet.cjs.entry.js +7 -7
  62. package/dist/cjs/ion-alert.cjs.entry.js +7 -7
  63. package/dist/cjs/ion-app_8.cjs.entry.js +8 -8
  64. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  65. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  66. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  67. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  68. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  69. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-checkbox.cjs.entry.js +5 -5
  71. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  72. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  73. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  74. package/dist/cjs/ion-datetime_3.cjs.entry.js +52 -27
  75. package/dist/cjs/ion-fab_3.cjs.entry.js +4 -4
  76. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  77. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
  78. package/dist/cjs/ion-input.cjs.entry.js +13 -6
  79. package/dist/cjs/ion-item-option_3.cjs.entry.js +6 -6
  80. package/dist/cjs/ion-item_8.cjs.entry.js +10 -10
  81. package/dist/cjs/ion-loading.cjs.entry.js +4 -4
  82. package/dist/cjs/ion-menu_3.cjs.entry.js +22 -10
  83. package/dist/cjs/ion-modal.cjs.entry.js +14 -14
  84. package/dist/cjs/ion-nav_2.cjs.entry.js +3 -3
  85. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +2 -2
  86. package/dist/cjs/ion-picker-internal.cjs.entry.js +3 -3
  87. package/dist/cjs/ion-popover.cjs.entry.js +7 -7
  88. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  89. package/dist/cjs/ion-radio_2.cjs.entry.js +15 -7
  90. package/dist/cjs/ion-range.cjs.entry.js +6 -6
  91. package/dist/cjs/ion-refresher_2.cjs.entry.js +12 -5
  92. package/dist/cjs/ion-reorder_2.cjs.entry.js +5 -5
  93. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  94. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  95. package/dist/cjs/ion-searchbar.cjs.entry.js +11 -4
  96. package/dist/cjs/ion-segment_2.cjs.entry.js +45 -19
  97. package/dist/cjs/ion-select_3.cjs.entry.js +7 -7
  98. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  99. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  100. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +6 -6
  101. package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
  102. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  103. package/dist/cjs/ion-textarea.cjs.entry.js +13 -6
  104. package/dist/cjs/ion-toast.cjs.entry.js +6 -6
  105. package/dist/cjs/ion-toggle.cjs.entry.js +5 -5
  106. package/dist/cjs/{ionic-global-fb752503.js → ionic-global-ea2901a3.js} +1 -1
  107. package/dist/cjs/ionic.cjs.js +4 -4
  108. package/dist/cjs/{ios.transition-a4d545dd.js → ios.transition-ac909bc8.js} +212 -44
  109. package/dist/cjs/loader.cjs.js +3 -3
  110. package/dist/cjs/{md.transition-80bb961b.js → md.transition-907af519.js} +3 -3
  111. package/dist/cjs/{overlays-1a734051.js → overlays-2ffc5f27.js} +1 -1
  112. package/dist/cjs/{status-tap-778e8054.js → status-tap-3fb2391a.js} +2 -2
  113. package/dist/cjs/{watch-options-f3f77e54.js → watch-options-53bbb124.js} +14 -3
  114. package/dist/collection/collection-manifest.json +1 -1
  115. package/dist/collection/components/accordion-group/accordion-group.js +10 -0
  116. package/dist/collection/components/accordion-group/accordion-group.md.css +2 -2
  117. package/dist/collection/components/action-sheet/action-sheet.ios.css +18 -5
  118. package/dist/collection/components/action-sheet/action-sheet.md.css +18 -5
  119. package/dist/collection/components/action-sheet/test/basic/action-sheet.e2e.js +59 -0
  120. package/dist/collection/components/alert/alert.ios.css +37 -4
  121. package/dist/collection/components/alert/alert.md.css +37 -4
  122. package/dist/collection/components/alert/test/a11y/alert.e2e.js +48 -0
  123. package/dist/collection/components/checkbox/checkbox.ios.css +3 -3
  124. package/dist/collection/components/checkbox/checkbox.md.css +3 -3
  125. package/dist/collection/components/datetime/datetime.ios.css +24 -4
  126. package/dist/collection/components/datetime/datetime.js +47 -22
  127. package/dist/collection/components/datetime/datetime.md.css +24 -8
  128. package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +66 -0
  129. package/dist/collection/components/datetime/test/disabled/datetime.e2e.js +68 -0
  130. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +113 -0
  131. package/dist/collection/components/fab/fab.css +24 -36
  132. package/dist/collection/components/fab/test/safe-area/fab.e2e.js +63 -0
  133. package/dist/collection/components/fab-list/fab-list.css +2 -2
  134. package/dist/collection/components/header/header.ios.css +4 -1
  135. package/dist/collection/components/input/input.ios.css +15 -15
  136. package/dist/collection/components/input/input.js +9 -2
  137. package/dist/collection/components/input/input.md.css +22 -10
  138. package/dist/collection/components/item/item.ios.css +60 -12
  139. package/dist/collection/components/item/item.md.css +63 -15
  140. package/dist/collection/components/item/test/basic/item.e2e.js +26 -0
  141. package/dist/collection/components/item-divider/item-divider.ios.css +35 -8
  142. package/dist/collection/components/item-divider/item-divider.md.css +35 -8
  143. package/dist/collection/components/item-divider/test/basic/item-divider.e2e.js +22 -0
  144. package/dist/collection/components/item-option/item-option.ios.css +0 -10
  145. package/dist/collection/components/item-option/item-option.md.css +0 -10
  146. package/dist/collection/components/item-sliding/test/basic/item-sliding.e2e.js +77 -0
  147. package/dist/collection/components/label/label.ios.css +1 -1
  148. package/dist/collection/components/list/list.ios.css +15 -1
  149. package/dist/collection/components/list/list.md.css +41 -3
  150. package/dist/collection/components/list/test/lines/list.e2e.js +143 -0
  151. package/dist/collection/components/list-header/list-header.ios.css +15 -2
  152. package/dist/collection/components/list-header/list-header.md.css +15 -2
  153. package/dist/collection/components/list-header/test/basic/list-header.e2e.js +28 -0
  154. package/dist/collection/components/menu/menu.ios.css +4 -4
  155. package/dist/collection/components/menu/menu.js +15 -3
  156. package/dist/collection/components/menu/menu.md.css +4 -4
  157. package/dist/collection/components/modal/animations/ios.enter.js +3 -3
  158. package/dist/collection/components/modal/animations/ios.leave.js +4 -4
  159. package/dist/collection/components/modal/modal.ios.css +2 -2
  160. package/dist/collection/components/picker/picker.ios.css +1 -1
  161. package/dist/collection/components/picker/picker.md.css +1 -1
  162. package/dist/collection/components/picker-internal/picker-internal.ios.css +2 -2
  163. package/dist/collection/components/picker-internal/picker-internal.md.css +2 -2
  164. package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +5 -0
  165. package/dist/collection/components/popover/popover.ios.css +4 -4
  166. package/dist/collection/components/popover/popover.md.css +2 -2
  167. package/dist/collection/components/radio/radio.ios.css +4 -4
  168. package/dist/collection/components/radio/radio.js +5 -2
  169. package/dist/collection/components/radio/radio.md.css +4 -4
  170. package/dist/collection/components/radio/test/legacy/a11y/radio.e2e.js +5 -5
  171. package/dist/collection/components/radio-group/radio-group.js +10 -1
  172. package/dist/collection/components/range/range.ios.css +1 -1
  173. package/dist/collection/components/range/range.md.css +1 -1
  174. package/dist/collection/components/refresher/refresher.utils.js +8 -1
  175. package/dist/collection/components/reorder/reorder.ios.css +1 -34
  176. package/dist/collection/components/reorder/reorder.md.css +1 -34
  177. package/dist/collection/components/searchbar/searchbar.js +9 -2
  178. package/dist/collection/components/searchbar/searchbar.md.css +12 -6
  179. package/dist/collection/components/searchbar/test/basic/searchbar.e2e.js +25 -0
  180. package/dist/collection/components/segment/segment.js +43 -17
  181. package/dist/collection/components/select/select.ios.css +12 -15
  182. package/dist/collection/components/select/select.md.css +16 -7
  183. package/dist/collection/components/split-pane/test/multiple/split-pane.e2e.js +31 -0
  184. package/dist/collection/components/tab-bar/tab-bar.ios.css +4 -4
  185. package/dist/collection/components/tab-bar/tab-bar.md.css +4 -4
  186. package/dist/collection/components/tab-bar/test/basic/tab-bar.e2e.js +43 -0
  187. package/dist/collection/components/tab-button/tab-button.ios.css +3 -3
  188. package/dist/collection/components/tab-button/tab-button.md.css +3 -3
  189. package/dist/collection/components/textarea/textarea.ios.css +19 -19
  190. package/dist/collection/components/textarea/textarea.js +9 -2
  191. package/dist/collection/components/textarea/textarea.md.css +26 -20
  192. package/dist/collection/components/title/title.ios.css +11 -2
  193. package/dist/collection/components/toast/toast.ios.css +1 -1
  194. package/dist/collection/components/toast/toast.md.css +1 -1
  195. package/dist/collection/components/toggle/toggle.ios.css +3 -3
  196. package/dist/collection/components/toggle/toggle.md.css +3 -3
  197. package/dist/collection/utils/animation/animation.js +18 -3
  198. package/dist/collection/utils/content/index.js +0 -1
  199. package/dist/collection/utils/forms/form-controller.js +1 -5
  200. package/dist/collection/utils/input-shims/hacks/common.js +9 -1
  201. package/dist/collection/utils/transition/ios.transition.js +209 -41
  202. package/dist/collection/utils/watch-options.js +14 -3
  203. package/dist/docs.json +3 -3
  204. package/dist/esm/{animation-92066c62.js → animation-8aa13916.js} +18 -3
  205. package/dist/esm/{app-globals-ec816a70.js → app-globals-2398e405.js} +1 -1
  206. package/dist/esm/{button-active-d926d4f4.js → button-active-ce5cba4c.js} +1 -1
  207. package/dist/esm/{form-controller-ed77647a.js → form-controller-64edeaad.js} +1 -5
  208. package/dist/esm/{index-df55802d.js → index-0aa6e61f.js} +2 -2
  209. package/dist/esm/{index-746a238e.js → index-4392efa5.js} +0 -1
  210. package/dist/esm/{index-7d2b2808.js → index-6a0ccabb.js} +3 -3
  211. package/dist/esm/{index-b49b173c.js → index-7c9b1bca.js} +127 -57
  212. package/dist/esm/index.js +8 -8
  213. package/dist/esm/{input-shims-d78a3c77.js → input-shims-d0c93e5d.js} +10 -2
  214. package/dist/esm/ion-accordion_2.entry.js +13 -3
  215. package/dist/esm/ion-action-sheet.entry.js +7 -7
  216. package/dist/esm/ion-alert.entry.js +7 -7
  217. package/dist/esm/ion-app_8.entry.js +8 -8
  218. package/dist/esm/ion-avatar_3.entry.js +2 -2
  219. package/dist/esm/ion-back-button.entry.js +2 -2
  220. package/dist/esm/ion-backdrop.entry.js +2 -2
  221. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  222. package/dist/esm/ion-button_2.entry.js +2 -2
  223. package/dist/esm/ion-card_5.entry.js +2 -2
  224. package/dist/esm/ion-checkbox.entry.js +5 -5
  225. package/dist/esm/ion-chip.entry.js +2 -2
  226. package/dist/esm/ion-col_3.entry.js +2 -2
  227. package/dist/esm/ion-datetime-button.entry.js +2 -2
  228. package/dist/esm/ion-datetime_3.entry.js +52 -27
  229. package/dist/esm/ion-fab_3.entry.js +4 -4
  230. package/dist/esm/ion-img.entry.js +2 -2
  231. package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
  232. package/dist/esm/ion-input.entry.js +14 -7
  233. package/dist/esm/ion-item-option_3.entry.js +6 -6
  234. package/dist/esm/ion-item_8.entry.js +10 -10
  235. package/dist/esm/ion-loading.entry.js +4 -4
  236. package/dist/esm/ion-menu_3.entry.js +22 -10
  237. package/dist/esm/ion-modal.entry.js +14 -14
  238. package/dist/esm/ion-nav_2.entry.js +3 -3
  239. package/dist/esm/ion-picker-column-internal.entry.js +2 -2
  240. package/dist/esm/ion-picker-internal.entry.js +3 -3
  241. package/dist/esm/ion-popover.entry.js +7 -7
  242. package/dist/esm/ion-progress-bar.entry.js +2 -2
  243. package/dist/esm/ion-radio_2.entry.js +15 -7
  244. package/dist/esm/ion-range.entry.js +6 -6
  245. package/dist/esm/ion-refresher_2.entry.js +12 -5
  246. package/dist/esm/ion-reorder_2.entry.js +5 -5
  247. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  248. package/dist/esm/ion-route_4.entry.js +2 -2
  249. package/dist/esm/ion-searchbar.entry.js +12 -5
  250. package/dist/esm/ion-segment_2.entry.js +45 -19
  251. package/dist/esm/ion-select_3.entry.js +7 -7
  252. package/dist/esm/ion-spinner.entry.js +2 -2
  253. package/dist/esm/ion-split-pane.entry.js +2 -2
  254. package/dist/esm/ion-tab-bar_2.entry.js +6 -6
  255. package/dist/esm/ion-tab_2.entry.js +1 -1
  256. package/dist/esm/ion-text.entry.js +2 -2
  257. package/dist/esm/ion-textarea.entry.js +14 -7
  258. package/dist/esm/ion-toast.entry.js +6 -6
  259. package/dist/esm/ion-toggle.entry.js +5 -5
  260. package/dist/esm/{ionic-global-246ca78f.js → ionic-global-40e42e7f.js} +1 -1
  261. package/dist/esm/ionic.js +5 -5
  262. package/dist/esm/{ios.transition-a86d7bbe.js → ios.transition-1651c430.js} +212 -44
  263. package/dist/esm/loader.js +4 -4
  264. package/dist/esm/{md.transition-365ef6b6.js → md.transition-66f18369.js} +3 -3
  265. package/dist/esm/{overlays-cec6bac8.js → overlays-6c9feb7e.js} +1 -1
  266. package/dist/esm/{status-tap-9aeeaca5.js → status-tap-9ce68758.js} +2 -2
  267. package/dist/esm/{watch-options-355a920a.js → watch-options-02d8498b.js} +14 -3
  268. package/dist/esm-es5/animation-8aa13916.js +4 -0
  269. package/dist/esm-es5/app-globals-2398e405.js +4 -0
  270. package/dist/esm-es5/{button-active-d926d4f4.js → button-active-ce5cba4c.js} +1 -1
  271. package/dist/esm-es5/config-96c9ace3.js +1 -1
  272. package/dist/esm-es5/cubic-bezier-66542bc5.js +1 -1
  273. package/dist/esm-es5/data-44d9e816.js +1 -1
  274. package/dist/esm-es5/dir-912e3e13.js +1 -1
  275. package/dist/esm-es5/focus-visible-85493433.js +1 -1
  276. package/dist/esm-es5/form-controller-64edeaad.js +4 -0
  277. package/dist/esm-es5/framework-delegate-aa433dea.js +1 -1
  278. package/dist/esm-es5/gesture-controller-0fa396c4.js +1 -1
  279. package/dist/esm-es5/haptic-1243b917.js +1 -1
  280. package/dist/esm-es5/hardware-back-button-39299f84.js +1 -1
  281. package/dist/esm-es5/helpers-3379ba19.js +1 -1
  282. package/dist/esm-es5/index-0aa6e61f.js +4 -0
  283. package/dist/esm-es5/index-4392efa5.js +4 -0
  284. package/dist/esm-es5/index-6a0ccabb.js +4 -0
  285. package/dist/esm-es5/index-7c9b1bca.js +5 -0
  286. package/dist/esm-es5/index-f0cc4e14.js +1 -1
  287. package/dist/esm-es5/index-ff313b19.js +1 -1
  288. package/dist/esm-es5/index.js +1 -1
  289. package/dist/esm-es5/input-shims-d0c93e5d.js +4 -0
  290. package/dist/esm-es5/input.utils-ec063df4.js +1 -1
  291. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  292. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  293. package/dist/esm-es5/ion-alert.entry.js +1 -1
  294. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  295. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  296. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  297. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  298. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  299. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  300. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  301. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  302. package/dist/esm-es5/ion-chip.entry.js +1 -1
  303. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  304. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  305. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  306. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  307. package/dist/esm-es5/ion-img.entry.js +1 -1
  308. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  309. package/dist/esm-es5/ion-input.entry.js +1 -1
  310. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  311. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  312. package/dist/esm-es5/ion-loading.entry.js +1 -1
  313. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  314. package/dist/esm-es5/ion-modal.entry.js +1 -1
  315. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  316. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  317. package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
  318. package/dist/esm-es5/ion-popover.entry.js +1 -1
  319. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  320. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  321. package/dist/esm-es5/ion-range.entry.js +1 -1
  322. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  323. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  324. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  325. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  326. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  327. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  328. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  329. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  330. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  331. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  332. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  333. package/dist/esm-es5/ion-text.entry.js +1 -1
  334. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  335. package/dist/esm-es5/ion-toast.entry.js +1 -1
  336. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  337. package/dist/esm-es5/ionic-global-40e42e7f.js +4 -0
  338. package/dist/esm-es5/ionic.js +1 -1
  339. package/dist/esm-es5/ios.transition-1651c430.js +4 -0
  340. package/dist/esm-es5/keyboard-b551279d.js +1 -1
  341. package/dist/esm-es5/keyboard-controller-0c2dce71.js +1 -1
  342. package/dist/esm-es5/loader.js +1 -1
  343. package/dist/esm-es5/md.transition-66f18369.js +4 -0
  344. package/dist/esm-es5/notch-controller-8c9c0e54.js +1 -1
  345. package/dist/esm-es5/overlays-6c9feb7e.js +4 -0
  346. package/dist/esm-es5/spinner-configs-d09fbbbb.js +1 -1
  347. package/dist/esm-es5/status-tap-9ce68758.js +4 -0
  348. package/dist/esm-es5/swipe-back-cd4295f3.js +1 -1
  349. package/dist/esm-es5/watch-options-02d8498b.js +4 -0
  350. package/dist/html.html-data.json +1 -1
  351. package/dist/ionic/index.esm.js +1 -1
  352. package/dist/ionic/ionic.esm.js +1 -1
  353. package/dist/ionic/ionic.js +1 -1
  354. package/dist/ionic/p-0330f0a3.system.entry.js +4 -0
  355. package/dist/ionic/{p-a7f8dc42.entry.js → p-0492946a.entry.js} +1 -1
  356. package/dist/ionic/{p-78030c1f.system.entry.js → p-07d9e9cd.system.entry.js} +1 -1
  357. package/dist/ionic/{p-ced41304.system.js → p-09d142b3.system.js} +1 -1
  358. package/dist/ionic/{p-fcf47f80.entry.js → p-0a794e83.entry.js} +1 -1
  359. package/dist/ionic/p-0d8e9393.entry.js +4 -0
  360. package/dist/ionic/p-0dc0d9b5.entry.js +4 -0
  361. package/dist/ionic/p-0e23256e.system.entry.js +4 -0
  362. package/dist/ionic/p-14aca3fb.entry.js +4 -0
  363. package/dist/ionic/p-14b4348c.system.js +4 -0
  364. package/dist/ionic/{p-108f9d49.entry.js → p-174f3446.entry.js} +1 -1
  365. package/dist/ionic/p-18e01b30.system.entry.js +4 -0
  366. package/dist/ionic/p-1a8ae7a7.system.entry.js +4 -0
  367. package/dist/ionic/p-1cb5f2f8.system.entry.js +4 -0
  368. package/dist/ionic/{p-c42c86c0.system.entry.js → p-1d269117.system.entry.js} +1 -1
  369. package/dist/ionic/{p-0ac3fb2c.entry.js → p-1dc91702.entry.js} +1 -1
  370. package/dist/ionic/p-1e5165db.system.entry.js +4 -0
  371. package/dist/ionic/{p-0b00b937.entry.js → p-1e86a71b.entry.js} +1 -1
  372. package/dist/ionic/p-1f4f0d59.system.entry.js +4 -0
  373. package/dist/ionic/p-20cf4994.js +4 -0
  374. package/dist/ionic/p-236063ec.system.entry.js +4 -0
  375. package/dist/ionic/p-2b89ea1b.system.js +1 -1
  376. package/dist/ionic/p-2e8e0045.js +4 -0
  377. package/dist/ionic/{p-ce7d67a7.system.entry.js → p-34d2de14.system.entry.js} +2 -2
  378. package/dist/ionic/{p-303bf1e8.system.entry.js → p-352c0232.system.entry.js} +2 -2
  379. package/dist/ionic/p-3602001b.system.js +4 -0
  380. package/dist/ionic/p-3632220b.system.js +1 -1
  381. package/dist/ionic/p-377c636c.system.entry.js +4 -0
  382. package/dist/ionic/{p-f9fa802c.system.entry.js → p-39044fe6.system.entry.js} +2 -2
  383. package/dist/ionic/{p-38089641.entry.js → p-3ce8c3e3.entry.js} +1 -1
  384. package/dist/ionic/p-3d7fea9b.system.entry.js +4 -0
  385. package/dist/ionic/p-3de79805.entry.js +4 -0
  386. package/dist/ionic/{p-0bbede6a.system.entry.js → p-3fb57e1b.system.entry.js} +1 -1
  387. package/dist/ionic/{p-5c3e72a8.system.js → p-40903d34.system.js} +1 -1
  388. package/dist/ionic/p-41122cd6.system.js +4 -0
  389. package/dist/ionic/p-41477ad9.system.js +1 -1
  390. package/dist/ionic/p-44bc8b45.system.js +2 -2
  391. package/dist/ionic/p-4518e4c0.system.entry.js +4 -0
  392. package/dist/ionic/{p-eab10949.system.entry.js → p-45da1e68.system.entry.js} +1 -1
  393. package/dist/ionic/p-4794e0ac.system.entry.js +4 -0
  394. package/dist/ionic/p-479cdbf8.system.js +2 -2
  395. package/dist/ionic/{p-4e50b8d1.entry.js → p-48d9faa7.entry.js} +1 -1
  396. package/dist/ionic/{p-8d6728a1.system.entry.js → p-4a142496.system.entry.js} +1 -1
  397. package/dist/ionic/p-4c80afe1.system.entry.js +4 -0
  398. package/dist/ionic/p-4cd588b3.system.entry.js +4 -0
  399. package/dist/ionic/{p-afb6658f.entry.js → p-4dbac22d.entry.js} +1 -1
  400. package/dist/ionic/p-4e6a1efb.system.entry.js +4 -0
  401. package/dist/ionic/p-4ecb5692.entry.js +4 -0
  402. package/dist/ionic/p-5370e786.js +4 -0
  403. package/dist/ionic/p-55ed230e.system.js +4 -0
  404. package/dist/ionic/p-56dc022e.system.js +1 -1
  405. package/dist/ionic/p-5aac9314.system.js +4 -0
  406. package/dist/ionic/p-5bd4e009.entry.js +4 -0
  407. package/dist/ionic/{p-6f8a95a3.system.entry.js → p-5cfb3feb.system.entry.js} +2 -2
  408. package/dist/ionic/{p-181b7c2a.js → p-5d711127.js} +1 -1
  409. package/dist/ionic/p-5da0eb3e.system.entry.js +4 -0
  410. package/dist/ionic/p-5deff017.entry.js +4 -0
  411. package/dist/ionic/p-613d4042.system.js +2 -2
  412. package/dist/ionic/p-63d519fb.entry.js +4 -0
  413. package/dist/ionic/{p-8083aadb.entry.js → p-63f08fe3.entry.js} +1 -1
  414. package/dist/ionic/{p-35b26732.entry.js → p-64296b15.entry.js} +1 -1
  415. package/dist/ionic/p-64ed03a3.entry.js +4 -0
  416. package/dist/ionic/p-664d2b07.system.entry.js +4 -0
  417. package/dist/ionic/p-67aab78f.js +4 -0
  418. package/dist/ionic/{p-e0f52215.system.entry.js → p-67e18f02.system.entry.js} +1 -1
  419. package/dist/ionic/{p-572cce26.system.entry.js → p-67ed452a.system.entry.js} +2 -2
  420. package/dist/ionic/p-67eecef4.system.js +4 -0
  421. package/dist/ionic/{p-76378400.js → p-6c3d5383.js} +1 -1
  422. package/dist/ionic/{p-1289b3b5.system.entry.js → p-6e23777e.system.entry.js} +2 -2
  423. package/dist/ionic/p-702d85d8.system.js +4 -0
  424. package/dist/ionic/{p-1edb53a1.entry.js → p-7176cea3.entry.js} +1 -1
  425. package/dist/ionic/p-73411c1b.entry.js +4 -0
  426. package/dist/ionic/p-73420380.js +4 -0
  427. package/dist/ionic/{p-6ea2e653.entry.js → p-744973f3.entry.js} +1 -1
  428. package/dist/ionic/p-772f6c84.system.js +2 -2
  429. package/dist/ionic/p-77e7a9c8.entry.js +4 -0
  430. package/dist/ionic/p-7ab6fc5a.system.entry.js +4 -0
  431. package/dist/ionic/{p-31119a15.entry.js → p-7cee75c0.entry.js} +1 -1
  432. package/dist/ionic/{p-cf62e1c8.js → p-800ef057.js} +1 -1
  433. package/dist/ionic/p-815c2fba.system.js +2 -2
  434. package/dist/ionic/p-819ff3b9.system.js +1 -1
  435. package/dist/ionic/p-87411e39.system.js +1 -1
  436. package/dist/ionic/p-8a308596.system.js +4 -0
  437. package/dist/ionic/{p-3818f63f.entry.js → p-8ad82eb3.entry.js} +1 -1
  438. package/dist/ionic/{p-c4a5de01.entry.js → p-8b29691f.entry.js} +1 -1
  439. package/dist/ionic/p-8c15eda7.system.js +2 -2
  440. package/dist/ionic/p-8e1bded3.entry.js +4 -0
  441. package/dist/ionic/{p-15decbec.entry.js → p-9209d90c.entry.js} +1 -1
  442. package/dist/ionic/{p-96ba8eac.entry.js → p-92800752.entry.js} +1 -1
  443. package/dist/ionic/p-965677f1.entry.js +4 -0
  444. package/dist/ionic/{p-446230d7.js → p-97c65aa5.js} +1 -1
  445. package/dist/ionic/p-97e31c0a.system.js +4 -0
  446. package/dist/ionic/p-9ab6f3e6.system.js +1 -1
  447. package/dist/ionic/{p-62e7d4fa.js → p-9b89cbde.js} +1 -1
  448. package/dist/ionic/p-9e852ff1.system.js +1 -1
  449. package/dist/ionic/p-a0b6d438.js +4 -0
  450. package/dist/ionic/p-a545b4f1.system.js +4 -0
  451. package/dist/ionic/p-a5c1e6ce.entry.js +4 -0
  452. package/dist/ionic/p-a6d83a03.system.entry.js +4 -0
  453. package/dist/ionic/p-a8e68fd9.entry.js +4 -0
  454. package/dist/ionic/{p-aa377971.system.js → p-a936d224.system.js} +1 -1
  455. package/dist/ionic/{p-beb864e4.system.entry.js → p-a9c3699b.system.entry.js} +1 -1
  456. package/dist/ionic/p-ab4cff27.system.js +1 -1
  457. package/dist/ionic/{p-012952cd.system.entry.js → p-abacb44b.system.entry.js} +2 -2
  458. package/dist/ionic/{p-1f81b5be.entry.js → p-af016cd3.entry.js} +1 -1
  459. package/dist/ionic/{p-a9c32660.entry.js → p-b0cee324.entry.js} +1 -1
  460. package/dist/ionic/{p-f4309ac7.entry.js → p-b1142133.entry.js} +1 -1
  461. package/dist/ionic/p-b17b7c3c.system.entry.js +4 -0
  462. package/dist/ionic/p-b203659a.system.entry.js +4 -0
  463. package/dist/ionic/{p-c679fcb5.entry.js → p-b2a74a72.entry.js} +1 -1
  464. package/dist/ionic/p-b4b4bb29.system.js +1 -1
  465. package/dist/ionic/p-b6f8ee31.entry.js +4 -0
  466. package/dist/ionic/p-b8c3f071.system.js +1 -1
  467. package/dist/ionic/p-b906c5ca.entry.js +4 -0
  468. package/dist/ionic/p-b912e055.system.js +1 -1
  469. package/dist/ionic/{p-e42aaa8b.entry.js → p-b91fe549.entry.js} +1 -1
  470. package/dist/ionic/p-bba2ce59.system.js +1 -1
  471. package/dist/ionic/p-beb64be7.system.entry.js +4 -0
  472. package/dist/ionic/p-bed722c4.system.entry.js +4 -0
  473. package/dist/ionic/p-c0c81820.system.js +4 -0
  474. package/dist/ionic/p-c224b9a9.js +5 -0
  475. package/dist/ionic/p-c4042875.system.js +4 -0
  476. package/dist/ionic/p-c4f2dce7.system.js +1 -1
  477. package/dist/ionic/{p-6f6646bf.system.entry.js → p-c7b8c2ef.system.entry.js} +1 -1
  478. package/dist/ionic/{p-1ecba429.entry.js → p-c7d30db9.entry.js} +1 -1
  479. package/dist/ionic/{p-db1a1e00.entry.js → p-c919498d.entry.js} +1 -1
  480. package/dist/ionic/{p-54200074.entry.js → p-ca5219df.entry.js} +1 -1
  481. package/dist/ionic/p-ccdcb022.system.js +1 -1
  482. package/dist/ionic/p-cf425ec5.system.entry.js +4 -0
  483. package/dist/ionic/p-d2597b3e.system.js +5 -0
  484. package/dist/ionic/p-d3952bd5.system.entry.js +4 -0
  485. package/dist/ionic/{p-8c1805f4.system.entry.js → p-d7ea6a0d.system.entry.js} +1 -1
  486. package/dist/ionic/p-db5043df.system.entry.js +4 -0
  487. package/dist/ionic/p-dfa756ed.system.js +4 -0
  488. package/dist/ionic/{p-28ea45b9.js → p-e6b240a0.js} +1 -1
  489. package/dist/ionic/{p-cabd2c6d.entry.js → p-e76a4bc8.entry.js} +1 -1
  490. package/dist/ionic/{p-cf0c93e3.system.entry.js → p-e8400078.system.entry.js} +2 -2
  491. package/dist/ionic/{p-4e6e43c1.entry.js → p-ed636a74.entry.js} +1 -1
  492. package/dist/ionic/p-f10de93b.js +4 -0
  493. package/dist/ionic/{p-f919c026.entry.js → p-f4cc91f6.entry.js} +1 -1
  494. package/dist/ionic/p-f5a750e4.system.entry.js +4 -0
  495. package/dist/ionic/p-f8e620f1.entry.js +4 -0
  496. package/dist/ionic/p-fa8d4788.system.js +1 -1
  497. package/dist/ionic/{p-8a2801f1.system.entry.js → p-ff5144f3.system.entry.js} +1 -1
  498. package/dist/ionic/p-ff5a10f9.system.js +2 -2
  499. package/dist/ionic/{p-6129af0a.system.entry.js → p-ffb876b0.system.entry.js} +1 -1
  500. package/dist/types/components/datetime/datetime.d.ts +1 -1
  501. package/dist/types/components/menu/menu-interface.d.ts +15 -4
  502. package/dist/types/components/radio/radio.d.ts +1 -1
  503. package/dist/types/components.d.ts +627 -3
  504. package/dist/types/stencil-public-runtime.d.ts +21 -0
  505. package/dist/types/utils/content/index.d.ts +1 -1
  506. package/dist/types/utils/focus-visible.d.ts +3 -2
  507. package/dist/types/utils/menu-controller/index.d.ts +2 -21
  508. package/dist/types/utils/test/platform.utils.d.ts +9 -9
  509. package/dist/types/utils/watch-options.d.ts +9 -1
  510. package/hydrate/index.d.ts +1 -1
  511. package/hydrate/index.js +567 -238
  512. package/package.json +11 -14
  513. package/dist/esm-es5/animation-92066c62.js +0 -4
  514. package/dist/esm-es5/app-globals-ec816a70.js +0 -4
  515. package/dist/esm-es5/form-controller-ed77647a.js +0 -4
  516. package/dist/esm-es5/index-746a238e.js +0 -4
  517. package/dist/esm-es5/index-7d2b2808.js +0 -4
  518. package/dist/esm-es5/index-b49b173c.js +0 -5
  519. package/dist/esm-es5/index-df55802d.js +0 -4
  520. package/dist/esm-es5/input-shims-d78a3c77.js +0 -4
  521. package/dist/esm-es5/ionic-global-246ca78f.js +0 -4
  522. package/dist/esm-es5/ios.transition-a86d7bbe.js +0 -4
  523. package/dist/esm-es5/md.transition-365ef6b6.js +0 -4
  524. package/dist/esm-es5/overlays-cec6bac8.js +0 -4
  525. package/dist/esm-es5/status-tap-9aeeaca5.js +0 -4
  526. package/dist/esm-es5/watch-options-355a920a.js +0 -4
  527. package/dist/ionic/p-015187e5.system.js +0 -4
  528. package/dist/ionic/p-06ac429a.js +0 -5
  529. package/dist/ionic/p-0b7c25ee.system.entry.js +0 -4
  530. package/dist/ionic/p-0f1f59da.system.entry.js +0 -4
  531. package/dist/ionic/p-128a98e8.system.js +0 -4
  532. package/dist/ionic/p-16e44585.js +0 -4
  533. package/dist/ionic/p-19fba51c.entry.js +0 -4
  534. package/dist/ionic/p-1a463b1e.system.entry.js +0 -4
  535. package/dist/ionic/p-1f260a7b.entry.js +0 -4
  536. package/dist/ionic/p-29073efe.system.entry.js +0 -4
  537. package/dist/ionic/p-2bbf3ac4.system.entry.js +0 -4
  538. package/dist/ionic/p-33a8349a.system.entry.js +0 -4
  539. package/dist/ionic/p-34259245.system.entry.js +0 -4
  540. package/dist/ionic/p-35e399bd.entry.js +0 -4
  541. package/dist/ionic/p-38c5fe2b.system.entry.js +0 -4
  542. package/dist/ionic/p-3a58e3a4.system.entry.js +0 -4
  543. package/dist/ionic/p-3d726a67.system.js +0 -4
  544. package/dist/ionic/p-3f3da911.system.entry.js +0 -4
  545. package/dist/ionic/p-4215652f.system.entry.js +0 -4
  546. package/dist/ionic/p-4f97c112.entry.js +0 -4
  547. package/dist/ionic/p-54f6cd27.system.entry.js +0 -4
  548. package/dist/ionic/p-5b976d70.entry.js +0 -4
  549. package/dist/ionic/p-5bf16a18.js +0 -4
  550. package/dist/ionic/p-629aa3fd.system.js +0 -5
  551. package/dist/ionic/p-64475ab5.system.js +0 -4
  552. package/dist/ionic/p-673846f6.entry.js +0 -4
  553. package/dist/ionic/p-6ce0a709.system.entry.js +0 -4
  554. package/dist/ionic/p-818b2e75.entry.js +0 -4
  555. package/dist/ionic/p-81ef7437.system.entry.js +0 -4
  556. package/dist/ionic/p-8e24ebbc.js +0 -4
  557. package/dist/ionic/p-8f01a9a2.system.js +0 -4
  558. package/dist/ionic/p-939e0fa1.system.js +0 -4
  559. package/dist/ionic/p-95817276.system.entry.js +0 -4
  560. package/dist/ionic/p-9b9dcc3e.system.entry.js +0 -4
  561. package/dist/ionic/p-9dc85536.system.entry.js +0 -4
  562. package/dist/ionic/p-9f2e0db9.js +0 -4
  563. package/dist/ionic/p-a04bfada.entry.js +0 -4
  564. package/dist/ionic/p-a164e3ab.system.entry.js +0 -4
  565. package/dist/ionic/p-a200a7fc.entry.js +0 -4
  566. package/dist/ionic/p-a34fc12e.system.entry.js +0 -4
  567. package/dist/ionic/p-ad48dd13.system.js +0 -4
  568. package/dist/ionic/p-b132c2c0.system.js +0 -4
  569. package/dist/ionic/p-b3c68723.system.js +0 -4
  570. package/dist/ionic/p-b61a2fa0.system.entry.js +0 -4
  571. package/dist/ionic/p-b753ec0d.system.entry.js +0 -4
  572. package/dist/ionic/p-b9047b05.system.js +0 -4
  573. package/dist/ionic/p-c05315f5.system.entry.js +0 -4
  574. package/dist/ionic/p-c105bd36.entry.js +0 -4
  575. package/dist/ionic/p-c49672d8.system.js +0 -4
  576. package/dist/ionic/p-c87827ca.system.js +0 -4
  577. package/dist/ionic/p-c8c9d699.system.entry.js +0 -4
  578. package/dist/ionic/p-c92f0a6d.system.entry.js +0 -4
  579. package/dist/ionic/p-c956e82c.system.entry.js +0 -4
  580. package/dist/ionic/p-c994fff0.system.js +0 -4
  581. package/dist/ionic/p-ca5cf574.js +0 -4
  582. package/dist/ionic/p-cd2d17c3.system.entry.js +0 -4
  583. package/dist/ionic/p-d35217be.entry.js +0 -4
  584. package/dist/ionic/p-d6e53e66.entry.js +0 -4
  585. package/dist/ionic/p-e1d5752d.system.entry.js +0 -4
  586. package/dist/ionic/p-e2bb634f.js +0 -4
  587. package/dist/ionic/p-e38a5f77.js +0 -4
  588. package/dist/ionic/p-e65ebe96.entry.js +0 -4
  589. package/dist/ionic/p-e74faf2a.entry.js +0 -4
  590. package/dist/ionic/p-eac263dd.entry.js +0 -4
  591. package/dist/ionic/p-f34f001c.entry.js +0 -4
  592. package/dist/ionic/p-f5bf698b.entry.js +0 -4
  593. package/dist/ionic/p-f7566bad.entry.js +0 -4
  594. /package/dist/ionic/{p-b24aa895.js → p-114a36ed.js} +0 -0
@@ -22,3 +22,146 @@ configs().forEach(({ title, screenshot, config }) => {
22
22
  });
23
23
  });
24
24
  });
25
+ /**
26
+ * Padding and border color ensures the bottom border can be easily seen if it regresses.
27
+ * The background color ensures that any border radius values can be seen.
28
+ */
29
+ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
30
+ test.describe(title('list: lines with children'), () => {
31
+ test('only item in inset list should not have line', async ({ page }) => {
32
+ test.info().annotations.push({
33
+ type: 'issue',
34
+ description: 'https://github.com/ionic-team/ionic-framework/issues/28435',
35
+ });
36
+ await page.setContent(`
37
+ <style>
38
+ #container {
39
+ padding: 10px;
40
+ background: #0088cc;
41
+ }
42
+
43
+ ion-item {
44
+ --border-color: red;
45
+ }
46
+ </style>
47
+ <div id="container">
48
+ <ion-list inset="true">
49
+ <ion-item>
50
+ <ion-label>Item 0</ion-label>
51
+ </ion-item>
52
+ </ion-list>
53
+ </div>
54
+ `, config);
55
+ const container = page.locator('#container');
56
+ await expect(container).toHaveScreenshot(screenshot('inset-list-only-item-no-lines'));
57
+ });
58
+ test('last item in inset list with end options should not have line', async ({ page }) => {
59
+ test.info().annotations.push({
60
+ type: 'issue',
61
+ description: 'https://github.com/ionic-team/ionic-framework/issues/28435',
62
+ });
63
+ await page.setContent(`
64
+ <style>
65
+ #container {
66
+ padding: 10px;
67
+ background: #0088cc;
68
+ }
69
+
70
+ ion-item {
71
+ --border-color: red;
72
+ }
73
+ </style>
74
+ <div id="container">
75
+ <ion-list inset="true">
76
+ <ion-item-sliding>
77
+ <ion-item>
78
+ <ion-label>Item 0</ion-label>
79
+ </ion-item>
80
+ <ion-item-options slot="end">
81
+ <ion-item-option color="warning">
82
+ <ion-icon slot="icon-only" name="pin"></ion-icon>
83
+ </ion-item-option>
84
+ </ion-item-options>
85
+ </ion-item-sliding>
86
+
87
+ <ion-item-sliding>
88
+ <ion-item>
89
+ <ion-label>Item 1</ion-label>
90
+ </ion-item>
91
+ <ion-item-options slot="end">
92
+ <ion-item-option color="warning">
93
+ <ion-icon slot="icon-only" name="pin"></ion-icon>
94
+ </ion-item-option>
95
+ </ion-item-options>
96
+ </ion-item-sliding>
97
+
98
+ <ion-item-sliding>
99
+ <ion-item>
100
+ <ion-label>Item 2</ion-label>
101
+ </ion-item>
102
+ <ion-item-options slot="end">
103
+ <ion-item-option color="warning">
104
+ <ion-icon slot="icon-only" name="pin"></ion-icon>
105
+ </ion-item-option>
106
+ </ion-item-options>
107
+ </ion-item-sliding>
108
+ </ion-list>
109
+ </div>
110
+ `, config);
111
+ const container = page.locator('#container');
112
+ await expect(container).toHaveScreenshot(screenshot('inset-list-end-options-no-lines'));
113
+ });
114
+ test('last item in inset list with start options should not have line', async ({ page }) => {
115
+ await page.setContent(`
116
+ <style>
117
+ #container {
118
+ padding: 10px;
119
+ background: #0088cc;
120
+ }
121
+
122
+ ion-item {
123
+ --border-color: red;
124
+ }
125
+ </style>
126
+ <div id="container">
127
+ <ion-list inset="true">
128
+ <ion-item-sliding>
129
+ <ion-item-options slot="start">
130
+ <ion-item-option color="warning">
131
+ <ion-icon slot="icon-only" name="pin"></ion-icon>
132
+ </ion-item-option>
133
+ </ion-item-options>
134
+ <ion-item>
135
+ <ion-label>Item 0</ion-label>
136
+ </ion-item>
137
+ </ion-item-sliding>
138
+
139
+ <ion-item-sliding>
140
+ <ion-item-options slot="start">
141
+ <ion-item-option color="warning">
142
+ <ion-icon slot="icon-only" name="pin"></ion-icon>
143
+ </ion-item-option>
144
+ </ion-item-options>
145
+ <ion-item>
146
+ <ion-label>Item 1</ion-label>
147
+ </ion-item>
148
+ </ion-item-sliding>
149
+
150
+ <ion-item-sliding>
151
+ <ion-item-options slot="start">
152
+ <ion-item-option color="warning">
153
+ <ion-icon slot="icon-only" name="pin"></ion-icon>
154
+ </ion-item-option>
155
+ </ion-item-options>
156
+ <ion-item>
157
+ <ion-label>Item 2</ion-label>
158
+ </ion-item>
159
+ </ion-item-sliding>
160
+ </ion-list>
161
+ </div>
162
+ `, config);
163
+ const container = page.locator('#container');
164
+ await expect(container).toHaveScreenshot(screenshot('inset-list-start-options-no-lines'));
165
+ });
166
+ });
167
+ });
@@ -172,14 +172,27 @@
172
172
  --background: transparent;
173
173
  --color: var(--ion-color-step-850, #262626);
174
174
  --border-color: var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-250, #c8c7cc)));
175
- -webkit-padding-start: calc(var(--ion-safe-area-left, 0px) + 16px);
176
- padding-inline-start: calc(var(--ion-safe-area-left, 0px) + 16px);
175
+ /* stylelint-disable */
176
+ padding-right: var(--ion-safe-area-right);
177
+ padding-left: calc(var(--ion-safe-area-left, 0px) + 16px);
178
+ /* stylelint-enable */
177
179
  position: relative;
178
180
  align-items: flex-end;
179
181
  font-size: min(1.375rem, 56.1px);
180
182
  font-weight: 700;
181
183
  letter-spacing: 0;
182
184
  }
185
+ :host-context([dir=rtl]) {
186
+ padding-right: calc(var(--ion-safe-area-right, 0px) + 16px);
187
+ padding-left: var(--ion-safe-area-left);
188
+ }
189
+
190
+ @supports selector(:dir(rtl)) {
191
+ :host(:dir(rtl)) {
192
+ padding-right: calc(var(--ion-safe-area-right, 0px) + 16px);
193
+ padding-left: var(--ion-safe-area-left);
194
+ }
195
+ }
183
196
 
184
197
  ::slotted(ion-button),
185
198
  ::slotted(ion-label) {
@@ -172,11 +172,24 @@
172
172
  --background: transparent;
173
173
  --color: var(--ion-text-color, #000);
174
174
  --border-color: var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.13))));
175
- -webkit-padding-start: calc(var(--ion-safe-area-left, 0) + 16px);
176
- padding-inline-start: calc(var(--ion-safe-area-left, 0) + 16px);
175
+ /* stylelint-disable */
176
+ padding-right: var(--ion-safe-area-right);
177
+ padding-left: calc(var(--ion-safe-area-left, 0px) + 16px);
178
+ /* stylelint-enable */
177
179
  min-height: 45px;
178
180
  font-size: 0.875rem;
179
181
  }
182
+ :host-context([dir=rtl]) {
183
+ padding-right: calc(var(--ion-safe-area-right, 0px) + 16px);
184
+ padding-left: var(--ion-safe-area-left);
185
+ }
186
+
187
+ @supports selector(:dir(rtl)) {
188
+ :host(:dir(rtl)) {
189
+ padding-right: calc(var(--ion-safe-area-right, 0px) + 16px);
190
+ padding-left: var(--ion-safe-area-left);
191
+ }
192
+ }
180
193
 
181
194
  :host(.list-header-lines-full) {
182
195
  --border-width: 0 0 1px 0;
@@ -12,3 +12,31 @@ configs().forEach(({ title, screenshot, config }) => {
12
12
  });
13
13
  });
14
14
  });
15
+ /**
16
+ * This behavior needs to be tested in both modes and directions to
17
+ * make sure the safe area padding is applied only to that side
18
+ * regardless of direction
19
+ */
20
+ configs().forEach(({ title, screenshot, config }) => {
21
+ test.describe(title('list-header: basic'), () => {
22
+ test.describe('safe area', () => {
23
+ test('should have padding added by the safe area', async ({ page }) => {
24
+ await page.setContent(`
25
+ <style>
26
+ :root {
27
+ --ion-safe-area-left: 40px;
28
+ --ion-safe-area-right: 20px;
29
+ }
30
+ </style>
31
+
32
+ <ion-list-header>
33
+ <ion-label>List Header</ion-label>
34
+ <ion-button>Button</ion-button>
35
+ </ion-list-header>
36
+ `, config);
37
+ const listHeader = page.locator('ion-list-header');
38
+ await expect(listHeader).toHaveScreenshot(screenshot(`list-header-safe-area`));
39
+ });
40
+ });
41
+ });
42
+ });
@@ -114,7 +114,7 @@
114
114
  right: 0;
115
115
  }
116
116
  @supports selector(:dir(rtl)) {
117
- :host(.menu-side-start) .menu-inner:dir(rtl) {
117
+ :host(.menu-side-start:dir(rtl)) .menu-inner {
118
118
  left: unset;
119
119
  right: unset;
120
120
  left: auto;
@@ -142,7 +142,7 @@
142
142
  }
143
143
 
144
144
  @supports selector(:dir(rtl)) {
145
- :host(.menu-side-start) .menu-inner:dir(rtl) {
145
+ :host(.menu-side-start:dir(rtl)) .menu-inner {
146
146
  /**
147
147
  * Menu does not cover the whole screen so we need to set the safe area for the
148
148
  * side that touches the screen edge only. Since safe area is not logical, it
@@ -197,7 +197,7 @@
197
197
  right: auto;
198
198
  }
199
199
  @supports selector(:dir(rtl)) {
200
- :host(.menu-side-end) .menu-inner:dir(rtl) {
200
+ :host(.menu-side-end:dir(rtl)) .menu-inner {
201
201
  left: unset;
202
202
  right: unset;
203
203
  left: 0;
@@ -225,7 +225,7 @@
225
225
  }
226
226
 
227
227
  @supports selector(:dir(rtl)) {
228
- :host(.menu-side-end) .menu-inner:dir(rtl) {
228
+ :host(.menu-side-end:dir(rtl)) .menu-inner {
229
229
  /**
230
230
  * Menu does not cover the whole screen so we need to set the safe area for the
231
231
  * side that touches the screen edge only. Since safe area is not logical, it
@@ -173,6 +173,18 @@ export class Menu {
173
173
  this.contentEl = undefined;
174
174
  }
175
175
  onSplitPaneChanged(ev) {
176
+ const { target } = ev;
177
+ const closestSplitPane = this.el.closest('ion-split-pane');
178
+ /**
179
+ * Menu listens on the body for "ionSplitPaneVisible".
180
+ * However, this means the callback will run any time
181
+ * a SplitPane changes visibility. As a result, we only want
182
+ * Menu's visibility state to update if its parent SplitPane
183
+ * changes visibility.
184
+ */
185
+ if (target !== closestSplitPane) {
186
+ return;
187
+ }
176
188
  this.isPaneVisible = ev.detail.isPane(this.el);
177
189
  this.updateState();
178
190
  }
@@ -331,11 +343,11 @@ export class Menu {
331
343
  this.animation = undefined;
332
344
  }
333
345
  // Create new animation
334
- this.animation = await menuController._createAnimation(this.type, this);
346
+ const animation = (this.animation = await menuController._createAnimation(this.type, this));
335
347
  if (!config.getBoolean('animated', true)) {
336
- this.animation.duration(0);
348
+ animation.duration(0);
337
349
  }
338
- this.animation.fill('both');
350
+ animation.fill('both');
339
351
  }
340
352
  async startAnimation(shouldOpen, animated) {
341
353
  const isReversed = !shouldOpen;
@@ -114,7 +114,7 @@
114
114
  right: 0;
115
115
  }
116
116
  @supports selector(:dir(rtl)) {
117
- :host(.menu-side-start) .menu-inner:dir(rtl) {
117
+ :host(.menu-side-start:dir(rtl)) .menu-inner {
118
118
  left: unset;
119
119
  right: unset;
120
120
  left: auto;
@@ -142,7 +142,7 @@
142
142
  }
143
143
 
144
144
  @supports selector(:dir(rtl)) {
145
- :host(.menu-side-start) .menu-inner:dir(rtl) {
145
+ :host(.menu-side-start:dir(rtl)) .menu-inner {
146
146
  /**
147
147
  * Menu does not cover the whole screen so we need to set the safe area for the
148
148
  * side that touches the screen edge only. Since safe area is not logical, it
@@ -197,7 +197,7 @@
197
197
  right: auto;
198
198
  }
199
199
  @supports selector(:dir(rtl)) {
200
- :host(.menu-side-end) .menu-inner:dir(rtl) {
200
+ :host(.menu-side-end:dir(rtl)) .menu-inner {
201
201
  left: unset;
202
202
  right: unset;
203
203
  left: 0;
@@ -225,7 +225,7 @@
225
225
  }
226
226
 
227
227
  @supports selector(:dir(rtl)) {
228
- :host(.menu-side-end) .menu-inner:dir(rtl) {
228
+ :host(.menu-side-end:dir(rtl)) .menu-inner {
229
229
  /**
230
230
  * Menu does not cover the whole screen so we need to set the safe area for the
231
231
  * side that touches the screen edge only. Since safe area is not logical, it
@@ -38,8 +38,8 @@ export const iosEnterAnimation = (baseEl, opts) => {
38
38
  'transform-origin': 'top center',
39
39
  overflow: 'hidden',
40
40
  });
41
- const bodyEl = document.body;
42
- if (isMobile) {
41
+ const appEl = baseEl.closest('ion-app');
42
+ if (isMobile && appEl) {
43
43
  /**
44
44
  * Fallback for browsers that does not support `max()` (ex: Firefox)
45
45
  * No need to worry about statusbar padding since engines like Gecko
@@ -53,7 +53,7 @@ export const iosEnterAnimation = (baseEl, opts) => {
53
53
  .afterStyles({
54
54
  transform: finalTransform,
55
55
  })
56
- .beforeAddWrite(() => bodyEl.style.setProperty('background-color', 'black'))
56
+ .beforeAddWrite(() => appEl.style.setProperty('background-color', 'black'))
57
57
  .addElement(presentingEl)
58
58
  .keyframes([
59
59
  { offset: 0, filter: 'contrast(1)', transform: 'translateY(0px) scale(1)', borderRadius: '0px' },
@@ -24,7 +24,8 @@ export const iosLeaveAnimation = (baseEl, opts, duration = 500) => {
24
24
  .easing('cubic-bezier(0.32,0.72,0,1)')
25
25
  .duration(duration)
26
26
  .addAnimation(wrapperAnimation);
27
- if (presentingEl) {
27
+ const appEl = baseEl.closest('ion-app');
28
+ if (presentingEl && appEl) {
28
29
  const isMobile = window.innerWidth < 768;
29
30
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
30
31
  const presentingElRoot = getElementRoot(presentingEl);
@@ -37,12 +38,11 @@ export const iosLeaveAnimation = (baseEl, opts, duration = 500) => {
37
38
  return;
38
39
  }
39
40
  presentingEl.style.setProperty('overflow', '');
40
- const numModals = Array.from(bodyEl.querySelectorAll('ion-modal:not(.overlay-hidden)')).filter((m) => m.presentingElement !== undefined).length;
41
+ const numModals = Array.from(appEl.querySelectorAll('ion-modal:not(.overlay-hidden)')).filter((m) => m.presentingElement !== undefined).length;
41
42
  if (numModals <= 1) {
42
- bodyEl.style.setProperty('background-color', '');
43
+ appEl.style.setProperty('background-color', '');
43
44
  }
44
45
  });
45
- const bodyEl = document.body;
46
46
  if (isMobile) {
47
47
  const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
48
48
  const modalTransform = hasCardModal ? '-10px' : transformOffset;
@@ -254,7 +254,7 @@ ion-backdrop {
254
254
  border-bottom-left-radius: 0;
255
255
  }
256
256
  @supports selector(:dir(rtl)) {
257
- :host(.modal-card) .modal-wrapper:dir(rtl) {
257
+ :host(.modal-card:dir(rtl)) .modal-wrapper {
258
258
  border-top-left-radius: var(--border-radius);
259
259
  border-top-right-radius: var(--border-radius);
260
260
  border-bottom-right-radius: 0;
@@ -304,7 +304,7 @@ ion-backdrop {
304
304
  }
305
305
 
306
306
  @supports selector(:dir(rtl)) {
307
- :host(.modal-sheet) .modal-wrapper:dir(rtl) {
307
+ :host(.modal-sheet:dir(rtl)) .modal-wrapper {
308
308
  border-top-left-radius: var(--border-radius);
309
309
  border-top-right-radius: var(--border-radius);
310
310
  border-bottom-right-radius: 0;
@@ -86,7 +86,7 @@
86
86
  right: 0;
87
87
  }
88
88
  @supports selector(:dir(rtl)) {
89
- :host:dir(rtl) {
89
+ :host(:dir(rtl)) {
90
90
  left: unset;
91
91
  right: unset;
92
92
  right: 0;
@@ -86,7 +86,7 @@
86
86
  right: 0;
87
87
  }
88
88
  @supports selector(:dir(rtl)) {
89
- :host:dir(rtl) {
89
+ :host(:dir(rtl)) {
90
90
  left: unset;
91
91
  right: unset;
92
92
  right: 0;
@@ -86,7 +86,7 @@
86
86
  right: 0;
87
87
  }
88
88
  @supports selector(:dir(rtl)) {
89
- :host .picker-before:dir(rtl) {
89
+ :host(:dir(rtl)) .picker-before {
90
90
  left: unset;
91
91
  right: unset;
92
92
  right: 0;
@@ -113,7 +113,7 @@
113
113
  right: 0;
114
114
  }
115
115
  @supports selector(:dir(rtl)) {
116
- :host .picker-after:dir(rtl) {
116
+ :host(:dir(rtl)) .picker-after {
117
117
  left: unset;
118
118
  right: unset;
119
119
  right: 0;
@@ -86,7 +86,7 @@
86
86
  right: 0;
87
87
  }
88
88
  @supports selector(:dir(rtl)) {
89
- :host .picker-before:dir(rtl) {
89
+ :host(:dir(rtl)) .picker-before {
90
90
  left: unset;
91
91
  right: unset;
92
92
  right: 0;
@@ -113,7 +113,7 @@
113
113
  right: 0;
114
114
  }
115
115
  @supports selector(:dir(rtl)) {
116
- :host .picker-after:dir(rtl) {
116
+ :host(:dir(rtl)) .picker-after {
117
117
  left: unset;
118
118
  right: unset;
119
119
  right: 0;
@@ -10,6 +10,11 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
10
10
  test.describe(title('picker-internal: rendering'), () => {
11
11
  test('inline pickers should not have visual regression', async ({ page }) => {
12
12
  await page.goto(`/src/components/picker-internal/test/basic`, config);
13
+ const fullStack = page.locator('#inline button[data-value="full-stack"]');
14
+ const onion = page.locator('#inline button[data-value="onion"]');
15
+ await expect(fullStack).toHaveClass(/picker-item-active/);
16
+ await expect(onion).toHaveClass(/picker-item-active/);
17
+ await page.waitForChanges();
13
18
  await expect(page.locator('#inline')).toHaveScreenshot(screenshot(`picker-internal-inline-diff`));
14
19
  });
15
20
  });
@@ -138,7 +138,7 @@
138
138
  }
139
139
 
140
140
  @supports selector(:dir(rtl)) {
141
- :host(.popover-nested.popover-side-start):dir(rtl) {
141
+ :host(.popover-nested.popover-side-start:dir(rtl)) {
142
142
  --offset-x: -5px;
143
143
  }
144
144
  }
@@ -151,7 +151,7 @@
151
151
  }
152
152
 
153
153
  @supports selector(:dir(rtl)) {
154
- :host(.popover-nested.popover-side-end):dir(rtl) {
154
+ :host(.popover-nested.popover-side-end:dir(rtl)) {
155
155
  --offset-x: 5px;
156
156
  }
157
157
  }
@@ -284,7 +284,7 @@
284
284
  }
285
285
 
286
286
  @supports selector(:dir(rtl)) {
287
- :host(.popover-side-start) .popover-arrow:dir(rtl) {
287
+ :host(.popover-side-start:dir(rtl)) .popover-arrow {
288
288
  transform: rotate(-90deg);
289
289
  }
290
290
  }
@@ -297,7 +297,7 @@
297
297
  }
298
298
 
299
299
  @supports selector(:dir(rtl)) {
300
- :host(.popover-side-end) .popover-arrow:dir(rtl) {
300
+ :host(.popover-side-end:dir(rtl)) .popover-arrow {
301
301
  transform: rotate(90deg);
302
302
  }
303
303
  }
@@ -138,7 +138,7 @@
138
138
  }
139
139
 
140
140
  @supports selector(:dir(rtl)) {
141
- :host(.popover-nested.popover-side-start):dir(rtl) {
141
+ :host(.popover-nested.popover-side-start:dir(rtl)) {
142
142
  --offset-x: -5px;
143
143
  }
144
144
  }
@@ -151,7 +151,7 @@
151
151
  }
152
152
 
153
153
  @supports selector(:dir(rtl)) {
154
- :host(.popover-nested.popover-side-end):dir(rtl) {
154
+ :host(.popover-nested.popover-side-end:dir(rtl)) {
155
155
  --offset-x: 5px;
156
156
  }
157
157
  }
@@ -103,7 +103,7 @@
103
103
  right: 0;
104
104
  }
105
105
  @supports selector(:dir(rtl)) {
106
- :host(.legacy-radio) label:dir(rtl) {
106
+ :host(.legacy-radio:dir(rtl)) label {
107
107
  left: unset;
108
108
  right: unset;
109
109
  right: 0;
@@ -317,7 +317,7 @@ input {
317
317
  }
318
318
 
319
319
  @supports selector(:dir(rtl)) {
320
- :host(.radio-label-placement-stacked.radio-alignment-start) .label-text-wrapper:dir(rtl) {
320
+ :host(.radio-label-placement-stacked.radio-alignment-start:dir(rtl)) .label-text-wrapper {
321
321
  transform-origin: right top;
322
322
  }
323
323
  }
@@ -330,7 +330,7 @@ input {
330
330
  }
331
331
 
332
332
  @supports selector(:dir(rtl)) {
333
- :host(.radio-label-placement-stacked.radio-alignment-center) .label-text-wrapper:dir(rtl) {
333
+ :host(.radio-label-placement-stacked.radio-alignment-center:dir(rtl)) .label-text-wrapper {
334
334
  transform-origin: calc(100% - center) top;
335
335
  }
336
336
  }
@@ -463,7 +463,7 @@ input {
463
463
  right: -9px;
464
464
  }
465
465
  @supports selector(:dir(rtl)) {
466
- :host(.ion-focused) .radio-icon::after:dir(rtl) {
466
+ :host(.ion-focused:dir(rtl)) .radio-icon::after {
467
467
  left: unset;
468
468
  right: unset;
469
469
  right: -9px;
@@ -85,7 +85,6 @@ export class Radio {
85
85
  }
86
86
  /** @internal */
87
87
  async setFocus(ev) {
88
- // TODO(FW-2832): type (using Event triggers a build error due to conflict with Stencil Event import)
89
88
  ev.stopPropagation();
90
89
  ev.preventDefault();
91
90
  this.el.focus();
@@ -416,7 +415,7 @@ Developers can dismiss this warning by removing their usage of the "legacy" prop
416
415
  return {
417
416
  "setFocus": {
418
417
  "complexType": {
419
- "signature": "(ev: any) => Promise<void>",
418
+ "signature": "(ev: globalThis.Event) => Promise<void>",
420
419
  "parameters": [{
421
420
  "tags": [],
422
421
  "text": ""
@@ -425,6 +424,10 @@ Developers can dismiss this warning by removing their usage of the "legacy" prop
425
424
  "Promise": {
426
425
  "location": "global",
427
426
  "id": "global::Promise"
427
+ },
428
+ "globalThis": {
429
+ "location": "global",
430
+ "id": "global::globalThis"
428
431
  }
429
432
  },
430
433
  "return": "Promise<void>"
@@ -103,7 +103,7 @@
103
103
  right: 0;
104
104
  }
105
105
  @supports selector(:dir(rtl)) {
106
- :host(.legacy-radio) label:dir(rtl) {
106
+ :host(.legacy-radio:dir(rtl)) label {
107
107
  left: unset;
108
108
  right: unset;
109
109
  right: 0;
@@ -317,7 +317,7 @@ input {
317
317
  }
318
318
 
319
319
  @supports selector(:dir(rtl)) {
320
- :host(.radio-label-placement-stacked.radio-alignment-start) .label-text-wrapper:dir(rtl) {
320
+ :host(.radio-label-placement-stacked.radio-alignment-start:dir(rtl)) .label-text-wrapper {
321
321
  transform-origin: right top;
322
322
  }
323
323
  }
@@ -330,7 +330,7 @@ input {
330
330
  }
331
331
 
332
332
  @supports selector(:dir(rtl)) {
333
- :host(.radio-label-placement-stacked.radio-alignment-center) .label-text-wrapper:dir(rtl) {
333
+ :host(.radio-label-placement-stacked.radio-alignment-center:dir(rtl)) .label-text-wrapper {
334
334
  transform-origin: calc(100% - center) top;
335
335
  }
336
336
  }
@@ -477,7 +477,7 @@ input {
477
477
  right: -12px;
478
478
  }
479
479
  @supports selector(:dir(rtl)) {
480
- :host(.ion-focused.legacy-radio) .radio-icon::after:dir(rtl) {
480
+ :host(.ion-focused.legacy-radio:dir(rtl)) .radio-icon::after {
481
481
  left: unset;
482
482
  right: unset;
483
483
  right: -12px;
@@ -8,9 +8,11 @@ import { configs, test } from "../../../../../utils/test/playwright/index";
8
8
  */
9
9
  configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
10
10
  test.describe(title('radio: a11y'), () => {
11
- // TODO(FW-5218)
12
- test.fixme('tabbing should switch between radio groups', async ({ page, pageUtils }) => {
11
+ test.beforeEach(async ({ page, skip }) => {
12
+ skip.browser('webkit', 'Tabbing is flaky in Safari');
13
13
  await page.goto(`/src/components/radio/test/legacy/a11y`, config);
14
+ });
15
+ test('tabbing should switch between radio groups', async ({ page, pageUtils }) => {
14
16
  const firstGroupRadios = page.locator('#first-group ion-radio');
15
17
  const secondGroupRadios = page.locator('#second-group ion-radio');
16
18
  await pageUtils.pressKeys('Tab');
@@ -20,9 +22,7 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
20
22
  await pageUtils.pressKeys('shift+Tab');
21
23
  await expect(firstGroupRadios.nth(0)).toBeFocused();
22
24
  });
23
- // TODO(FW-5218)
24
- test.fixme('using arrow keys should move between enabled radios within group', async ({ page, pageUtils }) => {
25
- await page.goto(`/src/components/radio/test/legacy/a11y`, config);
25
+ test('using arrow keys should move between enabled radios within group', async ({ page, pageUtils }) => {
26
26
  const firstGroupRadios = page.locator('#first-group ion-radio');
27
27
  await pageUtils.pressKeys('Tab');
28
28
  await expect(firstGroupRadios.nth(0)).toBeFocused();