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
@@ -3,11 +3,11 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- const animation = require('./animation-c8bdd3c7.js');
7
- const index = require('./index-d93fb71d.js');
6
+ const animation = require('./animation-1083855c.js');
7
+ const index = require('./index-573877f3.js');
8
8
  require('./index-306a7476.js');
9
9
  require('./helpers-ea4ccbcb.js');
10
- require('./index-305a23dc.js');
10
+ require('./index-c2940dc1.js');
11
11
 
12
12
  const DURATION = 540;
13
13
  // TODO(FW-2832): types
@@ -60,60 +60,134 @@ const createLargeTitleTransition = (rootAnimation, rtl, backDirection, enteringE
60
60
  if (shouldAnimationForward) {
61
61
  const leavingLargeTitleBox = leavingLargeTitle.getBoundingClientRect();
62
62
  const enteringBackButtonBox = enteringBackButton.getBoundingClientRect();
63
- animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, enteringBackButtonBox);
64
- animateBackButton(rootAnimation, rtl, backDirection, enteringBackButton, leavingLargeTitleBox, enteringBackButtonBox);
63
+ const enteringBackButtonTextEl = shadow(enteringBackButton).querySelector('.button-text');
64
+ const enteringBackButtonTextBox = enteringBackButtonTextEl.getBoundingClientRect();
65
+ const leavingLargeTitleTextEl = shadow(leavingLargeTitle).querySelector('.toolbar-title');
66
+ const leavingLargeTitleTextBox = leavingLargeTitleTextEl.getBoundingClientRect();
67
+ animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
68
+ animateBackButton(rootAnimation, rtl, backDirection, enteringBackButton, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox, leavingLargeTitle, leavingLargeTitleTextBox);
65
69
  }
66
70
  else if (shouldAnimationBackward) {
67
71
  const enteringLargeTitleBox = enteringLargeTitle.getBoundingClientRect();
68
72
  const leavingBackButtonBox = leavingBackButton.getBoundingClientRect();
69
- animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, leavingBackButtonBox);
70
- animateBackButton(rootAnimation, rtl, backDirection, leavingBackButton, enteringLargeTitleBox, leavingBackButtonBox);
73
+ const leavingBackButtonTextEl = shadow(leavingBackButton).querySelector('.button-text');
74
+ const leavingBackButtonTextBox = leavingBackButtonTextEl.getBoundingClientRect();
75
+ const enteringLargeTitleTextEl = shadow(enteringLargeTitle).querySelector('.toolbar-title');
76
+ const enteringLargeTitleTextBox = enteringLargeTitleTextEl.getBoundingClientRect();
77
+ animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
78
+ animateBackButton(rootAnimation, rtl, backDirection, leavingBackButton, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox, enteringLargeTitle, enteringLargeTitleTextBox);
71
79
  }
72
80
  return {
73
81
  forward: shouldAnimationForward,
74
82
  backward: shouldAnimationBackward,
75
83
  };
76
84
  };
77
- const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, largeTitleBox, backButtonBox) => {
85
+ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, backButtonBox, backButtonTextEl, backButtonTextBox, largeTitleEl, largeTitleTextBox) => {
86
+ var _a, _b;
78
87
  const BACK_BUTTON_START_OFFSET = rtl ? `calc(100% - ${backButtonBox.right + 4}px)` : `${backButtonBox.left - 4}px`;
79
- const START_TEXT_TRANSLATE = rtl ? '7px' : '-7px';
80
- const END_TEXT_TRANSLATE = rtl ? '-4px' : '4px';
81
- const ICON_TRANSLATE = rtl ? '-4px' : '4px';
82
88
  const TEXT_ORIGIN_X = rtl ? 'right' : 'left';
83
89
  const ICON_ORIGIN_X = rtl ? 'left' : 'right';
90
+ const CONTAINER_ORIGIN_X = rtl ? 'right' : 'left';
91
+ /**
92
+ * When the title and back button texts match
93
+ * then they should overlap during the page transition.
94
+ * If the texts do not match up then the back button text scale adjusts
95
+ * to not perfectly match the large title text otherwise the
96
+ * proportions will be incorrect.
97
+ * When the texts match we scale both the width and height to account for
98
+ * font weight differences between the title and back button.
99
+ */
100
+ const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
101
+ const WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
102
+ /**
103
+ * We subtract an offset to account for slight sizing/padding
104
+ * differences between the title and the back button.
105
+ */
106
+ const HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
107
+ const TEXT_START_SCALE = doTitleAndButtonTextsMatch
108
+ ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`
109
+ : `scale(${HEIGHT_SCALE})`;
110
+ const TEXT_END_SCALE = 'scale(1)';
111
+ const backButtonIconEl = shadow(backButtonEl).querySelector('ion-icon');
112
+ const backButtonIconBox = backButtonIconEl.getBoundingClientRect();
113
+ /**
114
+ * We need to offset the container by the icon dimensions
115
+ * so that the back button text aligns with the large title
116
+ * text. Otherwise, the back button icon will align with the
117
+ * large title text but the back button text will not.
118
+ */
119
+ const CONTAINER_START_TRANSLATE_X = rtl
120
+ ? `${backButtonIconBox.width / 2 - (backButtonIconBox.right - backButtonBox.right)}px`
121
+ : `${backButtonBox.left - backButtonIconBox.width / 2}px`;
122
+ const CONTAINER_END_TRANSLATE_X = rtl ? `-${window.innerWidth - backButtonBox.right}px` : `${backButtonBox.left}px`;
123
+ /**
124
+ * Back button container should be
125
+ * aligned to the top of the title container
126
+ * so the texts overlap as the back button
127
+ * text begins to fade in.
128
+ */
129
+ const CONTAINER_START_TRANSLATE_Y = `${largeTitleTextBox.top}px`;
130
+ /**
131
+ * The cloned back button should align exactly with the
132
+ * real back button on the entering page otherwise there will
133
+ * be a layout shift.
134
+ */
135
+ const CONTAINER_END_TRANSLATE_Y = `${backButtonBox.top}px`;
136
+ /**
137
+ * In the forward direction, the cloned back button
138
+ * container should translate from over the large title
139
+ * to over the back button. In the backward direction,
140
+ * it should translate from over the back button to over
141
+ * the large title.
142
+ */
143
+ const FORWARD_CONTAINER_KEYFRAMES = [
144
+ { offset: 0, transform: `translate3d(${CONTAINER_START_TRANSLATE_X}, ${CONTAINER_START_TRANSLATE_Y}, 0)` },
145
+ { offset: 1, transform: `translate3d(${CONTAINER_END_TRANSLATE_X}, ${CONTAINER_END_TRANSLATE_Y}, 0)` },
146
+ ];
147
+ const BACKWARD_CONTAINER_KEYFRAMES = [
148
+ { offset: 0, transform: `translate3d(${CONTAINER_END_TRANSLATE_X}, ${CONTAINER_END_TRANSLATE_Y}, 0)` },
149
+ { offset: 1, transform: `translate3d(${CONTAINER_START_TRANSLATE_X}, ${CONTAINER_START_TRANSLATE_Y}, 0)` },
150
+ ];
151
+ const CONTAINER_KEYFRAMES = backDirection ? BACKWARD_CONTAINER_KEYFRAMES : FORWARD_CONTAINER_KEYFRAMES;
152
+ /**
153
+ * In the forward direction, the text in the cloned back button
154
+ * should start to be (roughly) the size of the large title
155
+ * and then scale down to be the size of the actual back button.
156
+ * The text should also translate, but that translate is handled
157
+ * by the container keyframes.
158
+ */
84
159
  const FORWARD_TEXT_KEYFRAMES = [
85
- {
86
- offset: 0,
87
- opacity: 0,
88
- transform: `translate3d(${START_TEXT_TRANSLATE}, ${largeTitleBox.top - 40}px, 0) scale(2.1)`,
89
- },
90
- { offset: 1, opacity: 1, transform: `translate3d(${END_TEXT_TRANSLATE}, ${backButtonBox.top - 46}px, 0) scale(1)` },
160
+ { offset: 0, opacity: 0, transform: TEXT_START_SCALE },
161
+ { offset: 1, opacity: 1, transform: TEXT_END_SCALE },
91
162
  ];
92
163
  const BACKWARD_TEXT_KEYFRAMES = [
93
- { offset: 0, opacity: 1, transform: `translate3d(${END_TEXT_TRANSLATE}, ${backButtonBox.top - 46}px, 0) scale(1)` },
94
- { offset: 0.6, opacity: 0 },
95
- {
96
- offset: 1,
97
- opacity: 0,
98
- transform: `translate3d(${START_TEXT_TRANSLATE}, ${largeTitleBox.top - 40}px, 0) scale(2.1)`,
99
- },
164
+ { offset: 0, opacity: 1, transform: TEXT_END_SCALE },
165
+ { offset: 1, opacity: 0, transform: TEXT_START_SCALE },
100
166
  ];
101
167
  const TEXT_KEYFRAMES = backDirection ? BACKWARD_TEXT_KEYFRAMES : FORWARD_TEXT_KEYFRAMES;
168
+ /**
169
+ * The icon should scale in/out in the second
170
+ * half of the animation. The icon should also
171
+ * translate, but that translate is handled by the
172
+ * container keyframes.
173
+ */
102
174
  const FORWARD_ICON_KEYFRAMES = [
103
- { offset: 0, opacity: 0, transform: `translate3d(${ICON_TRANSLATE}, ${backButtonBox.top - 41}px, 0) scale(0.6)` },
104
- { offset: 1, opacity: 1, transform: `translate3d(${ICON_TRANSLATE}, ${backButtonBox.top - 46}px, 0) scale(1)` },
175
+ { offset: 0, opacity: 0, transform: 'scale(0.6)' },
176
+ { offset: 0.6, opacity: 0, transform: 'scale(0.6)' },
177
+ { offset: 1, opacity: 1, transform: 'scale(1)' },
105
178
  ];
106
179
  const BACKWARD_ICON_KEYFRAMES = [
107
- { offset: 0, opacity: 1, transform: `translate3d(${ICON_TRANSLATE}, ${backButtonBox.top - 46}px, 0) scale(1)` },
108
- { offset: 0.2, opacity: 0, transform: `translate3d(${ICON_TRANSLATE}, ${backButtonBox.top - 41}px, 0) scale(0.6)` },
109
- { offset: 1, opacity: 0, transform: `translate3d(${ICON_TRANSLATE}, ${backButtonBox.top - 41}px, 0) scale(0.6)` },
180
+ { offset: 0, opacity: 1, transform: 'scale(1)' },
181
+ { offset: 0.2, opacity: 0, transform: 'scale(0.6)' },
182
+ { offset: 1, opacity: 0, transform: 'scale(0.6)' },
110
183
  ];
111
184
  const ICON_KEYFRAMES = backDirection ? BACKWARD_ICON_KEYFRAMES : FORWARD_ICON_KEYFRAMES;
112
185
  const enteringBackButtonTextAnimation = animation.createAnimation();
113
186
  const enteringBackButtonIconAnimation = animation.createAnimation();
187
+ const enteringBackButtonAnimation = animation.createAnimation();
114
188
  const clonedBackButtonEl = getClonedElement('ion-back-button');
115
- const backButtonTextEl = shadow(clonedBackButtonEl).querySelector('.button-text');
116
- const backButtonIconEl = shadow(clonedBackButtonEl).querySelector('ion-icon');
189
+ const clonedBackButtonTextEl = shadow(clonedBackButtonEl).querySelector('.button-text');
190
+ const clonedBackButtonIconEl = shadow(clonedBackButtonEl).querySelector('ion-icon');
117
191
  clonedBackButtonEl.text = backButtonEl.text;
118
192
  clonedBackButtonEl.mode = backButtonEl.mode;
119
193
  clonedBackButtonEl.icon = backButtonEl.icon;
@@ -121,11 +195,19 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, larg
121
195
  clonedBackButtonEl.disabled = backButtonEl.disabled;
122
196
  clonedBackButtonEl.style.setProperty('display', 'block');
123
197
  clonedBackButtonEl.style.setProperty('position', 'fixed');
124
- enteringBackButtonIconAnimation.addElement(backButtonIconEl);
125
- enteringBackButtonTextAnimation.addElement(backButtonTextEl);
198
+ enteringBackButtonIconAnimation.addElement(clonedBackButtonIconEl);
199
+ enteringBackButtonTextAnimation.addElement(clonedBackButtonTextEl);
200
+ enteringBackButtonAnimation.addElement(clonedBackButtonEl);
201
+ enteringBackButtonAnimation
202
+ .beforeStyles({
203
+ position: 'absolute',
204
+ top: '0px',
205
+ [CONTAINER_ORIGIN_X]: '0px',
206
+ })
207
+ .keyframes(CONTAINER_KEYFRAMES);
126
208
  enteringBackButtonTextAnimation
127
209
  .beforeStyles({
128
- 'transform-origin': `${TEXT_ORIGIN_X} center`,
210
+ 'transform-origin': `${TEXT_ORIGIN_X} top`,
129
211
  })
130
212
  .beforeAddWrite(() => {
131
213
  backButtonEl.style.setProperty('display', 'none');
@@ -142,21 +224,91 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, larg
142
224
  'transform-origin': `${ICON_ORIGIN_X} center`,
143
225
  })
144
226
  .keyframes(ICON_KEYFRAMES);
145
- rootAnimation.addAnimation([enteringBackButtonTextAnimation, enteringBackButtonIconAnimation]);
227
+ rootAnimation.addAnimation([
228
+ enteringBackButtonTextAnimation,
229
+ enteringBackButtonIconAnimation,
230
+ enteringBackButtonAnimation,
231
+ ]);
146
232
  };
147
- const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, backButtonBox) => {
148
- const TITLE_START_OFFSET = rtl ? `calc(100% - ${largeTitleBox.right}px)` : `${largeTitleBox.left}px`;
149
- const START_TRANSLATE = rtl ? '-18px' : '18px';
233
+ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonTextEl, backButtonTextBox) => {
234
+ var _a, _b;
235
+ /**
236
+ * The horizontal transform origin for the large title
237
+ */
150
238
  const ORIGIN_X = rtl ? 'right' : 'left';
239
+ const TITLE_START_OFFSET = rtl ? `calc(100% - ${largeTitleBox.right}px)` : `${largeTitleBox.left}px`;
240
+ /**
241
+ * The cloned large should align exactly with the
242
+ * real large title on the leaving page otherwise there will
243
+ * be a layout shift.
244
+ */
245
+ const START_TRANSLATE_X = '0px';
246
+ const START_TRANSLATE_Y = `${largeTitleBox.top}px`;
247
+ /**
248
+ * How much to offset the large title translation by.
249
+ * This accounts for differences in sizing between the large
250
+ * title and the back button due to padding and font weight.
251
+ */
252
+ const LARGE_TITLE_TRANSLATION_OFFSET = 8;
253
+ /**
254
+ * The scaled title should (roughly) overlap the back button.
255
+ * This ensures that the back button and title overlap during
256
+ * the animation. Note that since both elements either fade in
257
+ * or fade out over the course of the animation, neither element
258
+ * will be fully visible on top of the other. As a result, the overlap
259
+ * does not need to be perfect, so approximate values are acceptable here.
260
+ */
261
+ const END_TRANSLATE_X = rtl
262
+ ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
263
+ : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
264
+ /**
265
+ * The top of the scaled large title
266
+ * should match with the top of the
267
+ * back button text element.
268
+ * We subtract 2px to account for the top padding
269
+ * on the large title element.
270
+ */
271
+ const LARGE_TITLE_TOP_PADDING = 2;
272
+ const END_TRANSLATE_Y = `${backButtonTextBox.y - LARGE_TITLE_TOP_PADDING}px`;
273
+ /**
274
+ * In the forward direction, the large title should start at its
275
+ * normal size and then scale down to be (roughly) the size of the
276
+ * back button on the other view. In the backward direction, the
277
+ * large title should start at (roughly) the size of the back button
278
+ * and then scale up to its original size.
279
+ *
280
+ * Note that since both elements either fade in
281
+ * or fade out over the course of the animation, neither element
282
+ * will be fully visible on top of the other. As a result, the overlap
283
+ * does not need to be perfect, so approximate values are acceptable here.
284
+ */
285
+ /**
286
+ * When the title and back button texts match
287
+ * then they should overlap during the page transition.
288
+ * If the texts do not match up then the large title text scale adjusts
289
+ * to not perfectly match the back button text otherwise the
290
+ * proportions will be incorrect.
291
+ * When the texts match we scale both the width and height to account for
292
+ * font weight differences between the title and back button.
293
+ */
294
+ const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
295
+ const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
296
+ const HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
297
+ const START_SCALE = 'scale(1)';
298
+ const END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
151
299
  const BACKWARDS_KEYFRAMES = [
152
- { offset: 0, opacity: 0, transform: `translate3d(${START_TRANSLATE}, ${backButtonBox.top - 4}px, 0) scale(0.49)` },
300
+ { offset: 0, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
153
301
  { offset: 0.1, opacity: 0 },
154
- { offset: 1, opacity: 1, transform: `translate3d(0, ${largeTitleBox.top + 2}px, 0) scale(1)` },
302
+ { offset: 1, opacity: 1, transform: `translate3d(${START_TRANSLATE_X}, ${START_TRANSLATE_Y}, 0) ${START_SCALE}` },
155
303
  ];
156
304
  const FORWARDS_KEYFRAMES = [
157
- { offset: 0, opacity: 0.99, transform: `translate3d(0, ${largeTitleBox.top + 2}px, 0) scale(1)` },
305
+ {
306
+ offset: 0,
307
+ opacity: 0.99,
308
+ transform: `translate3d(${START_TRANSLATE_X}, ${START_TRANSLATE_Y}, 0) ${START_SCALE}`,
309
+ },
158
310
  { offset: 0.6, opacity: 0 },
159
- { offset: 1, opacity: 0, transform: `translate3d(${START_TRANSLATE}, ${backButtonBox.top - 4}px, 0) scale(0.5)` },
311
+ { offset: 1, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
160
312
  ];
161
313
  const KEYFRAMES = backDirection ? BACKWARDS_KEYFRAMES : FORWARDS_KEYFRAMES;
162
314
  const clonedTitleEl = getClonedElement('ion-title');
@@ -167,8 +319,14 @@ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, larg
167
319
  clonedLargeTitleAnimation.addElement(clonedTitleEl);
168
320
  clonedLargeTitleAnimation
169
321
  .beforeStyles({
170
- 'transform-origin': `${ORIGIN_X} center`,
171
- height: '46px',
322
+ 'transform-origin': `${ORIGIN_X} top`,
323
+ /**
324
+ * Since font size changes will cause
325
+ * the dimension of the large title to change
326
+ * we need to set the cloned title height
327
+ * equal to that of the original large title height.
328
+ */
329
+ height: `${largeTitleBox.height}px`,
172
330
  display: '',
173
331
  position: 'relative',
174
332
  [ORIGIN_X]: TITLE_START_OFFSET,
@@ -481,6 +639,16 @@ const iosTransitionAnimation = (navEl, opts) => {
481
639
  throw err;
482
640
  }
483
641
  };
642
+ /**
643
+ * The scale of the back button during the animation
644
+ * is computed based on the scale of the large title
645
+ * and vice versa. However, we need to account for slight
646
+ * variations in the size of the large title due to
647
+ * padding and font weight. This value should be used to subtract
648
+ * a small amount from the large title height when computing scales
649
+ * to get more accurate scale results.
650
+ */
651
+ const LARGE_TITLE_SIZE_OFFSET = 10;
484
652
 
485
653
  exports.iosTransitionAnimation = iosTransitionAnimation;
486
654
  exports.shadow = shadow;
@@ -5,9 +5,9 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-305a23dc.js');
9
- const appGlobals = require('./app-globals-fe1ad535.js');
10
- require('./ionic-global-fb752503.js');
8
+ const index = require('./index-c2940dc1.js');
9
+ const appGlobals = require('./app-globals-1d4c1dbf.js');
10
+ require('./ionic-global-ea2901a3.js');
11
11
 
12
12
  const defineCustomElements = (win, options) => {
13
13
  if (typeof window === 'undefined') return undefined;
@@ -3,11 +3,11 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- const animation = require('./animation-c8bdd3c7.js');
7
- const index = require('./index-d93fb71d.js');
6
+ const animation = require('./animation-1083855c.js');
7
+ const index = require('./index-573877f3.js');
8
8
  require('./index-306a7476.js');
9
9
  require('./helpers-ea4ccbcb.js');
10
- require('./index-305a23dc.js');
10
+ require('./index-c2940dc1.js');
11
11
 
12
12
  const mdTransitionAnimation = (_, opts) => {
13
13
  var _a, _b, _c;
@@ -4,7 +4,7 @@
4
4
  'use strict';
5
5
 
6
6
  const index = require('./index-306a7476.js');
7
- const ionicGlobal = require('./ionic-global-fb752503.js');
7
+ const ionicGlobal = require('./ionic-global-ea2901a3.js');
8
8
  const frameworkDelegate = require('./framework-delegate-c0873a6f.js');
9
9
  const hardwareBackButton = require('./hardware-back-button-b67c8e75.js');
10
10
  const helpers = require('./helpers-ea4ccbcb.js');
@@ -3,8 +3,8 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- const index = require('./index-305a23dc.js');
7
- const index$1 = require('./index-10873539.js');
6
+ const index = require('./index-c2940dc1.js');
7
+ const index$1 = require('./index-da2c7a37.js');
8
8
  const helpers = require('./helpers-ea4ccbcb.js');
9
9
  require('./index-cc7dfb7c.js');
10
10
 
@@ -3,7 +3,6 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- // TODO(FW-2832): types
7
6
  const watchForOptions = (containerEl, tagName, onChange) => {
8
7
  if (typeof MutationObserver === 'undefined') {
9
8
  return;
@@ -27,10 +26,22 @@ const getSelectedOption = (mutationList, tagName) => {
27
26
  });
28
27
  return newOption;
29
28
  };
30
- const findCheckedOption = (el, tagName) => {
31
- if (el.nodeType !== 1) {
29
+ /**
30
+ * The "value" key is only set on some components such as ion-select-option.
31
+ * As a result, we create a default union type of HTMLElement and the "value" key.
32
+ * However, implementers are required to provide the appropriate component type
33
+ * such as HTMLIonSelectOptionElement.
34
+ */
35
+ const findCheckedOption = (node, tagName) => {
36
+ /**
37
+ * https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType
38
+ * The above check ensures "node" is an Element (nodeType 1).
39
+ */
40
+ if (node.nodeType !== 1) {
32
41
  return undefined;
33
42
  }
43
+ // HTMLElement inherits from Element, so we cast "el" as T.
44
+ const el = node;
34
45
  const options = el.tagName === tagName.toUpperCase() ? [el] : Array.from(el.querySelectorAll(tagName));
35
46
  return options.find((o) => o.value === el.value);
36
47
  };
@@ -94,7 +94,7 @@
94
94
  ],
95
95
  "compiler": {
96
96
  "name": "@stencil/core",
97
- "version": "4.4.1",
97
+ "version": "4.7.2",
98
98
  "typescriptVersion": "5.2.2"
99
99
  },
100
100
  "collections": [
@@ -105,6 +105,16 @@ export class AccordionGroup {
105
105
  if (this.readonly) {
106
106
  this.readonlyChanged();
107
107
  }
108
+ /**
109
+ * When binding values in frameworks such as Angular
110
+ * it is possible for the value to be set after the Web Component
111
+ * initializes but before the value watcher is set up in Stencil.
112
+ * As a result, the watcher callback may not be fired.
113
+ * We work around this by manually calling the watcher
114
+ * callback when the component has loaded and the watcher
115
+ * is configured.
116
+ */
117
+ this.valueChanged();
108
118
  }
109
119
  /**
110
120
  * Sets the value property and emits ionChange.
@@ -133,7 +133,7 @@
133
133
  }
134
134
 
135
135
  @supports selector(:dir(rtl)) {
136
- :host(.accordion-group-expand-inset) ::slotted(ion-accordion.accordion-previous):dir(rtl) {
136
+ :host(.accordion-group-expand-inset:dir(rtl)) ::slotted(ion-accordion.accordion-previous) {
137
137
  border-bottom-right-radius: 6px;
138
138
  border-bottom-left-radius: 6px;
139
139
  }
@@ -149,7 +149,7 @@
149
149
  }
150
150
 
151
151
  @supports selector(:dir(rtl)) {
152
- :host(.accordion-group-expand-inset) ::slotted(ion-accordion.accordion-next):dir(rtl) {
152
+ :host(.accordion-group-expand-inset:dir(rtl)) ::slotted(ion-accordion.accordion-next) {
153
153
  border-top-left-radius: 6px;
154
154
  border-top-right-radius: 6px;
155
155
  }
@@ -140,8 +140,8 @@
140
140
  justify-content: flex-end;
141
141
  height: 100%;
142
142
  /* Fallback for browsers that do not support dvh */
143
- max-height: 100vh;
144
- max-height: 100dvh;
143
+ max-height: calc(100vh - (var(--ion-safe-area-top, 0) + var(--ion-safe-area-bottom, 0)));
144
+ max-height: calc(100dvh - (var(--ion-safe-area-top, 0) + var(--ion-safe-area-bottom, 0)));
145
145
  }
146
146
 
147
147
  .action-sheet-group {
@@ -153,10 +153,23 @@
153
153
  background: var(--background);
154
154
  }
155
155
 
156
- .action-sheet-group::-webkit-scrollbar {
157
- display: none;
156
+ /**
157
+ * Scrollbars on mobile devices will be hidden.
158
+ * Users can still scroll the content by swiping.
159
+ * If a user has a fine pointing device, such as a
160
+ * mouse or trackpad, then scrollbars will be
161
+ * visible. This allows users to scroll the
162
+ * content with their pointing device.
163
+ * Otherwise, the user would have to use the
164
+ * keyboard to navigate through the options.
165
+ * This may not be intuitive for users who
166
+ * are not familiar with keyboard navigation.
167
+ */
168
+ @media (any-pointer: coarse) {
169
+ .action-sheet-group::-webkit-scrollbar {
170
+ display: none;
171
+ }
158
172
  }
159
-
160
173
  .action-sheet-group-cancel {
161
174
  flex-shrink: 0;
162
175
  overflow: hidden;
@@ -140,8 +140,8 @@
140
140
  justify-content: flex-end;
141
141
  height: 100%;
142
142
  /* Fallback for browsers that do not support dvh */
143
- max-height: 100vh;
144
- max-height: 100dvh;
143
+ max-height: calc(100vh - (var(--ion-safe-area-top, 0) + var(--ion-safe-area-bottom, 0)));
144
+ max-height: calc(100dvh - (var(--ion-safe-area-top, 0) + var(--ion-safe-area-bottom, 0)));
145
145
  }
146
146
 
147
147
  .action-sheet-group {
@@ -153,10 +153,23 @@
153
153
  background: var(--background);
154
154
  }
155
155
 
156
- .action-sheet-group::-webkit-scrollbar {
157
- display: none;
156
+ /**
157
+ * Scrollbars on mobile devices will be hidden.
158
+ * Users can still scroll the content by swiping.
159
+ * If a user has a fine pointing device, such as a
160
+ * mouse or trackpad, then scrollbars will be
161
+ * visible. This allows users to scroll the
162
+ * content with their pointing device.
163
+ * Otherwise, the user would have to use the
164
+ * keyboard to navigate through the options.
165
+ * This may not be intuitive for users who
166
+ * are not familiar with keyboard navigation.
167
+ */
168
+ @media (any-pointer: coarse) {
169
+ .action-sheet-group::-webkit-scrollbar {
170
+ display: none;
171
+ }
158
172
  }
159
-
160
173
  .action-sheet-group-cancel {
161
174
  flex-shrink: 0;
162
175
  overflow: hidden;
@@ -81,3 +81,62 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ config, title }) =>
81
81
  });
82
82
  });
83
83
  });
84
+ /**
85
+ * This behavior needs to be tested in both modes but does not vary
86
+ * across directions due to the component only applying safe area
87
+ * to the top and bottom
88
+ */
89
+ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
90
+ test.describe(title('action-sheet: basic'), () => {
91
+ test.describe('safe area', () => {
92
+ test('should have padding added by the safe area', async ({ page }, testInfo) => {
93
+ testInfo.annotations.push({
94
+ type: 'issue',
95
+ description: 'https://github.com/ionic-team/ionic-framework/issues/27777',
96
+ });
97
+ await page.setContent(`
98
+ <style>
99
+ :root {
100
+ --ion-safe-area-top: 60px;
101
+ --ion-safe-area-bottom: 40px;
102
+ }
103
+ </style>
104
+
105
+ <ion-action-sheet></ion-action-sheet>
106
+
107
+ <script>
108
+ const actionSheet = document.querySelector('ion-action-sheet');
109
+ actionSheet.header = 'Header';
110
+ actionSheet.subHeader = 'Sub Header';
111
+ actionSheet.buttons = [
112
+ 'Add Reaction',
113
+ 'Copy Text',
114
+ 'Share Text',
115
+ 'Copy Link to Message',
116
+ 'Remind Me',
117
+ 'Pin File',
118
+ 'Star File',
119
+ 'Mark Unread',
120
+ 'Mark Read',
121
+ 'Edit Title',
122
+ 'Erase Title',
123
+ 'Save Image',
124
+ 'Copy Image',
125
+ 'Erase Image',
126
+ 'Delete File',
127
+ {
128
+ text: 'Cancel',
129
+ role: 'cancel'
130
+ },
131
+ ];
132
+ </script>
133
+ `, config);
134
+ const ionActionSheetDidPresent = await page.spyOnEvent('ionActionSheetDidPresent');
135
+ const actionSheet = page.locator('ion-action-sheet');
136
+ await actionSheet.evaluate((el) => el.present());
137
+ await ionActionSheetDidPresent.next();
138
+ await expect(actionSheet).toHaveScreenshot(screenshot(`action-sheet-safe-area`));
139
+ });
140
+ });
141
+ });
142
+ });
@@ -122,12 +122,45 @@
122
122
  overscroll-behavior-y: contain;
123
123
  }
124
124
 
125
- .alert-checkbox-group::-webkit-scrollbar,
126
- .alert-radio-group::-webkit-scrollbar,
127
- .alert-message::-webkit-scrollbar {
128
- display: none;
125
+ .alert-checkbox-label,
126
+ .alert-radio-label {
127
+ /**
128
+ * This allows long words to wrap to the next line
129
+ * instead of flowing outside of the container.
130
+ *
131
+ * The "anywhere" keyword should be used instead
132
+ * of the "break-word" keyword since the parent
133
+ * container is using flexbox. Flex relies on min-content and
134
+ * max-content intrinsic sizes to structure the layout. Flex will
135
+ * wrap content only until it reaches its min-content intrinsic size
136
+ * which in this case is equal to the longest word in this container.
137
+ * "break-word" does not shrink the min-content intrinsic size
138
+ * of the flex item which causes the long word to still overflow.
139
+ * "anywhere" on the other hand does shrink the min-content
140
+ * intrinsic size which allows the long word to wrap to the next line.
141
+ */
142
+ overflow-wrap: anywhere;
129
143
  }
130
144
 
145
+ /**
146
+ * Scrollbars on mobile devices will be hidden.
147
+ * Users can still scroll the content by swiping.
148
+ * If a user has a fine pointing device, such as a
149
+ * mouse or trackpad, then scrollbars will be
150
+ * visible. This allows users to scroll the
151
+ * content with their pointing device.
152
+ * Otherwise, the user would have to use the
153
+ * keyboard to navigate through the options.
154
+ * This may not be intuitive for users who
155
+ * are not familiar with keyboard navigation.
156
+ */
157
+ @media (any-pointer: coarse) {
158
+ .alert-checkbox-group::-webkit-scrollbar,
159
+ .alert-radio-group::-webkit-scrollbar,
160
+ .alert-message::-webkit-scrollbar {
161
+ display: none;
162
+ }
163
+ }
131
164
  .alert-input {
132
165
  padding-left: 0;
133
166
  padding-right: 0;