@ionic/core 8.4.5 → 8.5.0

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 (462) hide show
  1. package/components/checkbox.js +40 -6
  2. package/components/index6.js +11 -3
  3. package/components/ion-input.js +22 -9
  4. package/components/ion-item-divider.js +2 -2
  5. package/components/ion-item-group.js +1 -1
  6. package/components/ion-item-option.js +2 -2
  7. package/components/ion-item-options.js +1 -1
  8. package/components/ion-item-sliding.js +1 -1
  9. package/components/ion-loading.js +2 -2
  10. package/components/ion-menu-button.js +2 -2
  11. package/components/ion-menu-toggle.js +2 -2
  12. package/components/ion-menu.js +2 -2
  13. package/components/ion-nav-link.js +1 -1
  14. package/components/ion-nav.js +1 -1
  15. package/components/ion-note.js +2 -2
  16. package/components/ion-picker-legacy.js +2 -2
  17. package/components/ion-progress-bar.js +1 -1
  18. package/components/ion-range.js +3 -3
  19. package/components/ion-refresher-content.js +1 -1
  20. package/components/ion-refresher.js +1 -1
  21. package/components/ion-reorder-group.js +1 -1
  22. package/components/ion-reorder.js +1 -1
  23. package/components/ion-router-link.js +2 -2
  24. package/components/ion-router-outlet.js +1 -1
  25. package/components/ion-row.js +1 -1
  26. package/components/ion-searchbar.js +4 -4
  27. package/components/ion-segment-button.js +2 -2
  28. package/components/ion-segment-content.js +1 -1
  29. package/components/ion-segment-view.js +2 -2
  30. package/components/ion-segment.js +2 -2
  31. package/components/ion-select-option.js +1 -1
  32. package/components/ion-select.js +50 -6
  33. package/components/ion-skeleton-text.js +2 -2
  34. package/components/ion-split-pane.js +2 -2
  35. package/components/ion-tab-bar.js +2 -2
  36. package/components/ion-tab-button.js +2 -2
  37. package/components/ion-tab.js +2 -2
  38. package/components/ion-tabs.js +1 -1
  39. package/components/ion-text.js +2 -2
  40. package/components/ion-textarea.js +21 -8
  41. package/components/ion-thumbnail.js +1 -1
  42. package/components/ion-toast.js +2 -2
  43. package/components/ion-toggle.js +40 -6
  44. package/components/label.js +2 -2
  45. package/components/list-header.js +2 -2
  46. package/components/modal.js +267 -35
  47. package/components/picker-column-option.js +2 -2
  48. package/components/picker-column2.js +2 -2
  49. package/components/popover.js +2 -2
  50. package/components/radio-group.js +39 -2
  51. package/components/radio.js +3 -3
  52. package/components/ripple-effect.js +1 -1
  53. package/components/select-modal.js +1 -1
  54. package/components/select-popover.js +1 -1
  55. package/components/spinner.js +1 -1
  56. package/components/title.js +2 -2
  57. package/components/toolbar.js +2 -2
  58. package/css/core.css.map +1 -1
  59. package/css/ionic.bundle.css.map +1 -1
  60. package/dist/cjs/{data-21dc0f81.js → data-27cc2c9c.js} +1 -1
  61. package/dist/cjs/{index-5915f9b3.js → index-48b2a28e.js} +11 -3
  62. package/dist/cjs/{index-77e085b4.js → index-9b945a2d.js} +1 -1
  63. package/dist/cjs/{index-55a184f7.js → index-f68a486a.js} +3 -3
  64. package/dist/cjs/{index-864d95f4.js → index-fd6383b6.js} +1 -1
  65. package/dist/cjs/index.cjs.js +6 -6
  66. package/dist/cjs/{input-shims-52924092.js → input-shims-2d27a5be.js} +4 -2
  67. package/dist/cjs/{input.utils-e4144534.js → input.utils-2f642324.js} +1 -1
  68. package/dist/cjs/ion-accordion_2.cjs.entry.js +1 -1
  69. package/dist/cjs/ion-action-sheet.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-alert.cjs.entry.js +2 -2
  71. package/dist/cjs/ion-app_8.cjs.entry.js +10 -10
  72. package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
  73. package/dist/cjs/ion-button_2.cjs.entry.js +1 -1
  74. package/dist/cjs/ion-checkbox.cjs.entry.js +37 -6
  75. package/dist/cjs/ion-col_3.cjs.entry.js +1 -1
  76. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  77. package/dist/cjs/ion-datetime_3.cjs.entry.js +7 -7
  78. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +2 -2
  79. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +1 -1
  80. package/dist/cjs/ion-input.cjs.entry.js +21 -9
  81. package/dist/cjs/ion-item-option_3.cjs.entry.js +6 -6
  82. package/dist/cjs/ion-item_8.cjs.entry.js +11 -11
  83. package/dist/cjs/ion-loading.cjs.entry.js +4 -4
  84. package/dist/cjs/ion-menu_3.cjs.entry.js +9 -9
  85. package/dist/cjs/ion-modal.cjs.entry.js +270 -39
  86. package/dist/cjs/ion-nav_2.cjs.entry.js +4 -4
  87. package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
  88. package/dist/cjs/ion-popover.cjs.entry.js +5 -5
  89. package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
  90. package/dist/cjs/ion-radio_2.cjs.entry.js +39 -4
  91. package/dist/cjs/ion-range.cjs.entry.js +5 -5
  92. package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
  93. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  94. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  95. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  96. package/dist/cjs/ion-searchbar.cjs.entry.js +4 -4
  97. package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
  98. package/dist/cjs/ion-segment-view.cjs.entry.js +2 -2
  99. package/dist/cjs/ion-segment_2.cjs.entry.js +4 -4
  100. package/dist/cjs/ion-select-modal.cjs.entry.js +3 -3
  101. package/dist/cjs/ion-select_3.cjs.entry.js +51 -10
  102. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  103. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  104. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
  105. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
  106. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  107. package/dist/cjs/ion-textarea.cjs.entry.js +20 -8
  108. package/dist/cjs/ion-toast.cjs.entry.js +4 -4
  109. package/dist/cjs/ion-toggle.cjs.entry.js +37 -6
  110. package/dist/cjs/ionic.cjs.js +1 -1
  111. package/dist/cjs/{ios.transition-abac30e4.js → ios.transition-f970164c.js} +2 -2
  112. package/dist/cjs/loader.cjs.js +1 -1
  113. package/dist/cjs/{md.transition-e328f70d.js → md.transition-aa8820dd.js} +2 -2
  114. package/dist/cjs/{overlays-2f264f05.js → overlays-737576a2.js} +1 -1
  115. package/dist/cjs/{status-tap-191ccc90.js → status-tap-08d1ac81.js} +3 -2
  116. package/dist/collection/components/checkbox/checkbox.ios.css +52 -15
  117. package/dist/collection/components/checkbox/checkbox.js +90 -4
  118. package/dist/collection/components/checkbox/checkbox.md.css +52 -15
  119. package/dist/collection/components/input/input.ios.css +3 -2
  120. package/dist/collection/components/input/input.js +18 -4
  121. package/dist/collection/components/input/input.md.css +7 -2
  122. package/dist/collection/components/item-divider/item-divider.js +2 -2
  123. package/dist/collection/components/item-group/item-group.js +1 -1
  124. package/dist/collection/components/item-option/item-option.js +2 -2
  125. package/dist/collection/components/item-options/item-options.js +1 -1
  126. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  127. package/dist/collection/components/label/label.js +2 -2
  128. package/dist/collection/components/list-header/list-header.js +2 -2
  129. package/dist/collection/components/loading/loading.js +2 -2
  130. package/dist/collection/components/menu/menu.js +2 -2
  131. package/dist/collection/components/menu-button/menu-button.js +2 -2
  132. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  133. package/dist/collection/components/modal/animations/ios.enter.js +50 -4
  134. package/dist/collection/components/modal/animations/ios.leave.js +24 -2
  135. package/dist/collection/components/modal/animations/md.enter.js +52 -5
  136. package/dist/collection/components/modal/animations/md.leave.js +26 -3
  137. package/dist/collection/components/modal/animations/sheet.js +11 -2
  138. package/dist/collection/components/modal/gestures/sheet.js +87 -10
  139. package/dist/collection/components/modal/modal.ios.css +16 -0
  140. package/dist/collection/components/modal/modal.js +32 -7
  141. package/dist/collection/components/modal/modal.md.css +6 -0
  142. package/dist/collection/components/nav/nav.js +1 -1
  143. package/dist/collection/components/nav-link/nav-link.js +1 -1
  144. package/dist/collection/components/note/note.js +2 -2
  145. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  146. package/dist/collection/components/picker-legacy/picker.js +2 -2
  147. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  148. package/dist/collection/components/popover/popover.js +2 -2
  149. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  150. package/dist/collection/components/radio/radio.js +3 -3
  151. package/dist/collection/components/radio-group/radio-group.ios.css +205 -0
  152. package/dist/collection/components/radio-group/radio-group.js +72 -1
  153. package/dist/collection/components/radio-group/radio-group.md.css +205 -0
  154. package/dist/collection/components/range/range.js +3 -3
  155. package/dist/collection/components/refresher/refresher.js +1 -1
  156. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  157. package/dist/collection/components/reorder/reorder.js +1 -1
  158. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  159. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  160. package/dist/collection/components/router-link/router-link.js +2 -2
  161. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  162. package/dist/collection/components/row/row.js +1 -1
  163. package/dist/collection/components/searchbar/searchbar.js +4 -4
  164. package/dist/collection/components/segment/segment.js +2 -2
  165. package/dist/collection/components/segment-button/segment-button.js +2 -2
  166. package/dist/collection/components/segment-content/segment-content.js +1 -1
  167. package/dist/collection/components/segment-view/segment-view.js +2 -2
  168. package/dist/collection/components/select/select.ios.css +59 -0
  169. package/dist/collection/components/select/select.js +100 -4
  170. package/dist/collection/components/select/select.md.css +61 -0
  171. package/dist/collection/components/select-modal/select-modal.js +1 -1
  172. package/dist/collection/components/select-option/select-option.js +1 -1
  173. package/dist/collection/components/select-popover/select-popover.js +1 -1
  174. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  175. package/dist/collection/components/spinner/spinner.js +1 -1
  176. package/dist/collection/components/split-pane/split-pane.js +2 -2
  177. package/dist/collection/components/tab/tab.js +2 -2
  178. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  179. package/dist/collection/components/tab-button/tab-button.js +2 -2
  180. package/dist/collection/components/tabs/tabs.js +1 -1
  181. package/dist/collection/components/text/text.js +2 -2
  182. package/dist/collection/components/textarea/textarea.ios.css +3 -2
  183. package/dist/collection/components/textarea/textarea.js +17 -3
  184. package/dist/collection/components/textarea/textarea.md.css +7 -2
  185. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  186. package/dist/collection/components/title/title.js +2 -2
  187. package/dist/collection/components/toast/toast.js +2 -2
  188. package/dist/collection/components/toggle/toggle.ios.css +52 -15
  189. package/dist/collection/components/toggle/toggle.js +90 -4
  190. package/dist/collection/components/toggle/toggle.md.css +52 -15
  191. package/dist/collection/components/toolbar/toolbar.js +6 -2
  192. package/dist/collection/utils/logging/index.js +10 -3
  193. package/dist/docs.json +379 -2
  194. package/dist/esm/{data-ae11fd43.js → data-174ad5e0.js} +1 -1
  195. package/dist/esm/{index-9b0d46f4.js → index-738d7504.js} +11 -3
  196. package/dist/esm/{index-d4642b24.js → index-933ca126.js} +1 -1
  197. package/dist/esm/{index-c4a831fd.js → index-a313df53.js} +3 -3
  198. package/dist/esm/{index-df741ec6.js → index-c63afbe6.js} +1 -1
  199. package/dist/esm/index.js +6 -6
  200. package/dist/esm/{input-shims-80c5b98e.js → input-shims-3070628a.js} +4 -2
  201. package/dist/esm/{input.utils-3a4c0a2a.js → input.utils-926c04a8.js} +1 -1
  202. package/dist/esm/ion-accordion_2.entry.js +1 -1
  203. package/dist/esm/ion-action-sheet.entry.js +2 -2
  204. package/dist/esm/ion-alert.entry.js +2 -2
  205. package/dist/esm/ion-app_8.entry.js +10 -10
  206. package/dist/esm/ion-avatar_3.entry.js +1 -1
  207. package/dist/esm/ion-button_2.entry.js +1 -1
  208. package/dist/esm/ion-checkbox.entry.js +37 -6
  209. package/dist/esm/ion-col_3.entry.js +1 -1
  210. package/dist/esm/ion-datetime-button.entry.js +2 -2
  211. package/dist/esm/ion-datetime_3.entry.js +7 -7
  212. package/dist/esm/ion-infinite-scroll_2.entry.js +2 -2
  213. package/dist/esm/ion-input-password-toggle.entry.js +1 -1
  214. package/dist/esm/ion-input.entry.js +22 -10
  215. package/dist/esm/ion-item-option_3.entry.js +6 -6
  216. package/dist/esm/ion-item_8.entry.js +11 -11
  217. package/dist/esm/ion-loading.entry.js +4 -4
  218. package/dist/esm/ion-menu_3.entry.js +9 -9
  219. package/dist/esm/ion-modal.entry.js +270 -39
  220. package/dist/esm/ion-nav_2.entry.js +4 -4
  221. package/dist/esm/ion-picker-column-option.entry.js +2 -2
  222. package/dist/esm/ion-popover.entry.js +5 -5
  223. package/dist/esm/ion-progress-bar.entry.js +1 -1
  224. package/dist/esm/ion-radio_2.entry.js +39 -4
  225. package/dist/esm/ion-range.entry.js +5 -5
  226. package/dist/esm/ion-refresher_2.entry.js +4 -4
  227. package/dist/esm/ion-reorder_2.entry.js +4 -4
  228. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  229. package/dist/esm/ion-route_4.entry.js +2 -2
  230. package/dist/esm/ion-searchbar.entry.js +4 -4
  231. package/dist/esm/ion-segment-content.entry.js +1 -1
  232. package/dist/esm/ion-segment-view.entry.js +2 -2
  233. package/dist/esm/ion-segment_2.entry.js +4 -4
  234. package/dist/esm/ion-select-modal.entry.js +3 -3
  235. package/dist/esm/ion-select_3.entry.js +51 -10
  236. package/dist/esm/ion-spinner.entry.js +1 -1
  237. package/dist/esm/ion-split-pane.entry.js +2 -2
  238. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  239. package/dist/esm/ion-tab_2.entry.js +3 -3
  240. package/dist/esm/ion-text.entry.js +2 -2
  241. package/dist/esm/ion-textarea.entry.js +21 -9
  242. package/dist/esm/ion-toast.entry.js +4 -4
  243. package/dist/esm/ion-toggle.entry.js +37 -6
  244. package/dist/esm/ionic.js +1 -1
  245. package/dist/esm/{ios.transition-a81c9c6b.js → ios.transition-5fe4d6c8.js} +2 -2
  246. package/dist/esm/loader.js +1 -1
  247. package/dist/esm/{md.transition-dbb51edc.js → md.transition-3d0d3730.js} +2 -2
  248. package/dist/esm/{overlays-4ff1fca8.js → overlays-7579a420.js} +1 -1
  249. package/dist/esm/{status-tap-73b183f4.js → status-tap-6367b913.js} +3 -2
  250. package/dist/esm-es5/{data-ae11fd43.js → data-174ad5e0.js} +1 -1
  251. package/dist/esm-es5/index-738d7504.js +4 -0
  252. package/dist/esm-es5/{index-d4642b24.js → index-933ca126.js} +1 -1
  253. package/dist/esm-es5/{index-c4a831fd.js → index-a313df53.js} +1 -1
  254. package/dist/esm-es5/{index-df741ec6.js → index-c63afbe6.js} +1 -1
  255. package/dist/esm-es5/index.js +1 -1
  256. package/dist/esm-es5/input-shims-3070628a.js +4 -0
  257. package/dist/esm-es5/{input.utils-3a4c0a2a.js → input.utils-926c04a8.js} +1 -1
  258. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  259. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  260. package/dist/esm-es5/ion-alert.entry.js +1 -1
  261. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  262. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  263. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  264. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  265. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  266. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  267. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  268. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  269. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  270. package/dist/esm-es5/ion-input.entry.js +1 -1
  271. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  272. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  273. package/dist/esm-es5/ion-loading.entry.js +1 -1
  274. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  275. package/dist/esm-es5/ion-modal.entry.js +1 -1
  276. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  277. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  278. package/dist/esm-es5/ion-popover.entry.js +1 -1
  279. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  280. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  281. package/dist/esm-es5/ion-range.entry.js +1 -1
  282. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  283. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  284. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  285. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  286. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  287. package/dist/esm-es5/ion-segment-content.entry.js +1 -1
  288. package/dist/esm-es5/ion-segment-view.entry.js +1 -1
  289. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  290. package/dist/esm-es5/ion-select-modal.entry.js +1 -1
  291. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  292. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  293. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  294. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  295. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  296. package/dist/esm-es5/ion-text.entry.js +1 -1
  297. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  298. package/dist/esm-es5/ion-toast.entry.js +1 -1
  299. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  300. package/dist/esm-es5/ionic.js +1 -1
  301. package/dist/esm-es5/{ios.transition-a81c9c6b.js → ios.transition-5fe4d6c8.js} +1 -1
  302. package/dist/esm-es5/loader.js +1 -1
  303. package/dist/esm-es5/md.transition-3d0d3730.js +4 -0
  304. package/dist/esm-es5/{overlays-4ff1fca8.js → overlays-7579a420.js} +1 -1
  305. package/dist/esm-es5/status-tap-6367b913.js +4 -0
  306. package/dist/html.html-data.json +48 -0
  307. package/dist/ionic/index.esm.js +1 -1
  308. package/dist/ionic/ionic.esm.js +1 -1
  309. package/dist/ionic/{p-f30071a2.system.js → p-042d5353.system.js} +1 -1
  310. package/dist/ionic/{p-ad780230.js → p-060e4551.js} +1 -1
  311. package/dist/ionic/p-094c82d7.entry.js +4 -0
  312. package/dist/ionic/{p-1ef02643.system.entry.js → p-0adb6909.system.entry.js} +1 -1
  313. package/dist/ionic/{p-a9b9259c.entry.js → p-0be8a0b5.entry.js} +1 -1
  314. package/dist/ionic/{p-811ff2a0.system.entry.js → p-0bedc891.system.entry.js} +1 -1
  315. package/dist/ionic/p-0ec5b7cf.system.js +4 -0
  316. package/dist/ionic/{p-df61d353.entry.js → p-13886789.entry.js} +1 -1
  317. package/dist/ionic/p-143ff664.system.entry.js +4 -0
  318. package/dist/ionic/p-18f9b6d5.entry.js +4 -0
  319. package/dist/ionic/{p-afd7a6a9.entry.js → p-19c32a76.entry.js} +1 -1
  320. package/dist/ionic/{p-dd141012.system.entry.js → p-1a9613bf.system.entry.js} +1 -1
  321. package/dist/ionic/{p-f687573e.system.js → p-1bf5ec17.system.js} +1 -1
  322. package/dist/ionic/{p-dbac4f3e.system.entry.js → p-1d2844a5.system.entry.js} +1 -1
  323. package/dist/ionic/{p-dc8cbb8b.entry.js → p-1f837356.entry.js} +1 -1
  324. package/dist/ionic/p-2027221d.js +4 -0
  325. package/dist/ionic/{p-b8e3b3ca.system.entry.js → p-21371278.system.entry.js} +1 -1
  326. package/dist/ionic/{p-adbbf974.system.js → p-24ae7b33.system.js} +1 -1
  327. package/dist/ionic/p-29a5b4e4.entry.js +4 -0
  328. package/dist/ionic/{p-611d105b.entry.js → p-2ee9a2c6.entry.js} +1 -1
  329. package/dist/ionic/p-2fa5a4b1.entry.js +4 -0
  330. package/dist/ionic/{p-782ed885.system.js → p-3479f51b.system.js} +1 -1
  331. package/dist/ionic/{p-3705c194.entry.js → p-35f14792.entry.js} +1 -1
  332. package/dist/ionic/{p-21d1c1c7.system.entry.js → p-37a438ad.system.entry.js} +2 -2
  333. package/dist/ionic/{p-cd239b25.entry.js → p-3af7b907.entry.js} +1 -1
  334. package/dist/ionic/{p-8dbe745b.system.js → p-3bd5fedc.system.js} +1 -1
  335. package/dist/ionic/{p-31d6b3d0.system.entry.js → p-3be7cdeb.system.entry.js} +2 -2
  336. package/dist/ionic/p-3f4327f7.js +4 -0
  337. package/dist/ionic/{p-85f19de9.entry.js → p-42f6e75c.entry.js} +1 -1
  338. package/dist/ionic/{p-bf973e4b.system.entry.js → p-4470f87b.system.entry.js} +2 -2
  339. package/dist/ionic/p-4493c1ac.entry.js +4 -0
  340. package/dist/ionic/{p-0b860115.system.entry.js → p-4630688e.system.entry.js} +1 -1
  341. package/dist/ionic/{p-a8cc566d.system.entry.js → p-472c7e08.system.entry.js} +1 -1
  342. package/dist/ionic/{p-1a289aba.system.entry.js → p-491de063.system.entry.js} +1 -1
  343. package/dist/ionic/{p-ec631b0f.js → p-4c44d04c.js} +1 -1
  344. package/dist/ionic/{p-8db97fa1.js → p-4c94580e.js} +1 -1
  345. package/dist/ionic/{p-36079188.system.entry.js → p-4d0190ad.system.entry.js} +1 -1
  346. package/dist/ionic/{p-53d4d8c7.entry.js → p-50f38461.entry.js} +1 -1
  347. package/dist/ionic/{p-91fe21bb.system.js → p-51c363e7.system.js} +1 -1
  348. package/dist/ionic/{p-bf7f7084.system.entry.js → p-524ad57e.system.entry.js} +2 -2
  349. package/dist/ionic/p-54893ae3.entry.js +4 -0
  350. package/dist/ionic/p-54e9620f.js +4 -0
  351. package/dist/ionic/{p-4e1b109b.entry.js → p-58c482af.entry.js} +1 -1
  352. package/dist/ionic/{p-f59611e2.system.js → p-5eb6f582.system.js} +1 -1
  353. package/dist/ionic/p-606887b7.system.entry.js +4 -0
  354. package/dist/ionic/p-6797c66e.system.js +4 -0
  355. package/dist/ionic/{p-9023f5eb.entry.js → p-72e6a9c6.entry.js} +1 -1
  356. package/dist/ionic/{p-f1b20f28.entry.js → p-747f9517.entry.js} +1 -1
  357. package/dist/ionic/{p-00ab8b89.system.js → p-77991411.system.js} +2 -2
  358. package/dist/ionic/{p-16cd36e4.entry.js → p-7ff4f502.entry.js} +1 -1
  359. package/dist/ionic/{p-3250466d.system.entry.js → p-81378456.system.entry.js} +2 -2
  360. package/dist/ionic/p-81474833.system.entry.js +4 -0
  361. package/dist/ionic/{p-39b5611c.entry.js → p-838cc359.entry.js} +1 -1
  362. package/dist/ionic/{p-df4c00a4.system.entry.js → p-888d383b.system.entry.js} +1 -1
  363. package/dist/ionic/{p-5175f06a.entry.js → p-8b1c1fd7.entry.js} +1 -1
  364. package/dist/ionic/{p-6390c6ab.system.entry.js → p-8deac7df.system.entry.js} +1 -1
  365. package/dist/ionic/{p-b88c5ce4.entry.js → p-8fa4fa3f.entry.js} +1 -1
  366. package/dist/ionic/{p-f1ad06bd.system.entry.js → p-8fa62efe.system.entry.js} +1 -1
  367. package/dist/ionic/{p-4979cd1d.entry.js → p-8fc426e2.entry.js} +1 -1
  368. package/dist/ionic/p-959cf042.system.entry.js +4 -0
  369. package/dist/ionic/{p-32d4ac00.entry.js → p-9b069739.entry.js} +1 -1
  370. package/dist/ionic/{p-3fc787a8.system.entry.js → p-9df36075.system.entry.js} +1 -1
  371. package/dist/ionic/{p-85446175.js → p-9e51f822.js} +1 -1
  372. package/dist/ionic/{p-fd0f8d68.entry.js → p-a520973b.entry.js} +1 -1
  373. package/dist/ionic/{p-89204f3f.system.js → p-a587b2ae.system.js} +1 -1
  374. package/dist/ionic/p-a9f2c0a7.entry.js +4 -0
  375. package/dist/ionic/{p-4cfb0dc8.entry.js → p-ab7337e1.entry.js} +1 -1
  376. package/dist/ionic/{p-f9e7de97.system.entry.js → p-ac58d726.system.entry.js} +1 -1
  377. package/dist/ionic/{p-3c66a690.entry.js → p-ace2d2be.entry.js} +1 -1
  378. package/dist/ionic/{p-b7ed7f16.entry.js → p-ada878ce.entry.js} +1 -1
  379. package/dist/ionic/{p-f1be5454.entry.js → p-b055d618.entry.js} +1 -1
  380. package/dist/ionic/{p-7d425376.system.entry.js → p-b2296998.system.entry.js} +1 -1
  381. package/dist/ionic/{p-da5ae6cf.system.entry.js → p-b2ee0628.system.entry.js} +1 -1
  382. package/dist/ionic/{p-1cfb788a.entry.js → p-b6174297.entry.js} +1 -1
  383. package/dist/ionic/p-b8c2dbcd.entry.js +4 -0
  384. package/dist/ionic/{p-2f890012.system.entry.js → p-b9eb1465.system.entry.js} +1 -1
  385. package/dist/ionic/{p-afcd55c6.entry.js → p-b9f2e353.entry.js} +1 -1
  386. package/dist/ionic/p-bbc6db8c.entry.js +4 -0
  387. package/dist/ionic/p-bc3e5577.system.entry.js +4 -0
  388. package/dist/ionic/p-bf64af90.system.js +1 -1
  389. package/dist/ionic/p-c258efb9.entry.js +4 -0
  390. package/dist/ionic/{p-847fd113.entry.js → p-c25c0ba4.entry.js} +1 -1
  391. package/dist/ionic/p-c5b5f44a.entry.js +4 -0
  392. package/dist/ionic/{p-8cfaf64f.system.entry.js → p-c6a20407.system.entry.js} +1 -1
  393. package/dist/ionic/{p-96f7bb84.system.entry.js → p-c8331397.system.entry.js} +1 -1
  394. package/dist/ionic/{p-9e7a9a27.entry.js → p-c8bf9ba7.entry.js} +1 -1
  395. package/dist/ionic/{p-af873227.system.js → p-d7032956.system.js} +1 -1
  396. package/dist/ionic/p-d8c9d5ac.system.entry.js +4 -0
  397. package/dist/ionic/{p-d4308e05.system.entry.js → p-daf1e8ec.system.entry.js} +1 -1
  398. package/dist/ionic/{p-684c6a80.system.entry.js → p-def7a8bd.system.entry.js} +1 -1
  399. package/dist/ionic/{p-37e874f1.js → p-e00b72ce.js} +1 -1
  400. package/dist/ionic/{p-7737b8fa.js → p-e0a05506.js} +1 -1
  401. package/dist/ionic/{p-f97efff5.system.entry.js → p-e0c0218f.system.entry.js} +1 -1
  402. package/dist/ionic/{p-6386ccd6.system.entry.js → p-e0c43e11.system.entry.js} +1 -1
  403. package/dist/ionic/{p-8b378b48.system.entry.js → p-e4683bfd.system.entry.js} +1 -1
  404. package/dist/ionic/{p-0eb49e5c.system.entry.js → p-e5708e5d.system.entry.js} +1 -1
  405. package/dist/ionic/{p-a8584808.system.entry.js → p-e5c27d9f.system.entry.js} +1 -1
  406. package/dist/ionic/p-e5cf01f1.entry.js +4 -0
  407. package/dist/ionic/{p-27da8c2c.js → p-e7309bfa.js} +1 -1
  408. package/dist/ionic/p-ed768b77.entry.js +4 -0
  409. package/dist/ionic/{p-ded39921.entry.js → p-eec4b772.entry.js} +1 -1
  410. package/dist/ionic/{p-34b077b1.system.entry.js → p-eeee3990.system.entry.js} +1 -1
  411. package/dist/ionic/{p-360f5507.entry.js → p-efa0f3f5.entry.js} +1 -1
  412. package/dist/ionic/p-f02e9382.system.entry.js +4 -0
  413. package/dist/ionic/{p-c8c27ae7.system.entry.js → p-f6bb9be7.system.entry.js} +1 -1
  414. package/dist/ionic/{p-d60342e3.js → p-f7ce606e.js} +1 -1
  415. package/dist/ionic/{p-11bbdab8.system.entry.js → p-f94b2f2f.system.entry.js} +1 -1
  416. package/dist/ionic/{p-c5abee89.system.entry.js → p-ff4a1ba0.system.entry.js} +1 -1
  417. package/dist/types/components/checkbox/checkbox.d.ts +25 -0
  418. package/dist/types/components/input/input.d.ts +8 -0
  419. package/dist/types/components/modal/animations/sheet.d.ts +1 -0
  420. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  421. package/dist/types/components/modal/modal-interface.d.ts +1 -0
  422. package/dist/types/components/modal/modal.d.ts +14 -0
  423. package/dist/types/components/radio-group/radio-group.d.ts +15 -0
  424. package/dist/types/components/select/select.d.ts +29 -0
  425. package/dist/types/components/textarea/textarea.d.ts +8 -0
  426. package/dist/types/components/toggle/toggle.d.ts +25 -0
  427. package/dist/types/components/toolbar/toolbar.d.ts +4 -0
  428. package/dist/types/components.d.ts +96 -0
  429. package/dist/types/utils/config.d.ts +9 -0
  430. package/dist/types/utils/logging/index.d.ts +13 -1
  431. package/hydrate/index.js +575 -153
  432. package/hydrate/index.mjs +575 -153
  433. package/package.json +1 -1
  434. package/dist/esm-es5/index-9b0d46f4.js +0 -4
  435. package/dist/esm-es5/input-shims-80c5b98e.js +0 -4
  436. package/dist/esm-es5/md.transition-dbb51edc.js +0 -4
  437. package/dist/esm-es5/status-tap-73b183f4.js +0 -4
  438. package/dist/ionic/p-06fee233.js +0 -4
  439. package/dist/ionic/p-1332050e.entry.js +0 -4
  440. package/dist/ionic/p-19179876.js +0 -4
  441. package/dist/ionic/p-1ffab75e.entry.js +0 -4
  442. package/dist/ionic/p-2d4658d4.system.entry.js +0 -4
  443. package/dist/ionic/p-3e0bb0e1.entry.js +0 -4
  444. package/dist/ionic/p-3ef5e7fc.entry.js +0 -4
  445. package/dist/ionic/p-51fc2fac.system.entry.js +0 -4
  446. package/dist/ionic/p-5430a6da.entry.js +0 -4
  447. package/dist/ionic/p-64279526.js +0 -4
  448. package/dist/ionic/p-64da0521.system.js +0 -4
  449. package/dist/ionic/p-6aa6839e.entry.js +0 -4
  450. package/dist/ionic/p-6cb61a35.entry.js +0 -4
  451. package/dist/ionic/p-8d611ccd.entry.js +0 -4
  452. package/dist/ionic/p-9048389e.entry.js +0 -4
  453. package/dist/ionic/p-a300835e.system.entry.js +0 -4
  454. package/dist/ionic/p-a6042939.entry.js +0 -4
  455. package/dist/ionic/p-a6f13a4e.system.entry.js +0 -4
  456. package/dist/ionic/p-aae8187b.system.entry.js +0 -4
  457. package/dist/ionic/p-ae518f0b.system.entry.js +0 -4
  458. package/dist/ionic/p-cbd5b96a.entry.js +0 -4
  459. package/dist/ionic/p-ccbb47f5.entry.js +0 -4
  460. package/dist/ionic/p-e394222f.entry.js +0 -4
  461. package/dist/ionic/p-ea925d34.system.entry.js +0 -4
  462. package/dist/ionic/p-ff4b7e40.system.js +0 -4
@@ -149,8 +149,19 @@ export class Input {
149
149
  nativeInput.value = value;
150
150
  }
151
151
  }
152
+ /**
153
+ * dir is a globally enumerated attribute.
154
+ * As a result, creating these as properties
155
+ * can have unintended side effects. Instead, we
156
+ * listen for attribute changes and inherit them
157
+ * to the inner `<input>` element.
158
+ */
159
+ onDirChanged(newValue) {
160
+ this.inheritedAttributes = Object.assign(Object.assign({}, this.inheritedAttributes), { dir: newValue });
161
+ forceUpdate(this);
162
+ }
152
163
  componentWillLoad() {
153
- this.inheritedAttributes = Object.assign(Object.assign({}, inheritAriaAttributes(this.el)), inheritAttributes(this.el, ['tabindex', 'title', 'data-form-type']));
164
+ this.inheritedAttributes = Object.assign(Object.assign({}, inheritAriaAttributes(this.el)), inheritAttributes(this.el, ['tabindex', 'title', 'data-form-type', 'dir']));
154
165
  }
155
166
  connectedCallback() {
156
167
  const { el } = this;
@@ -414,7 +425,7 @@ export class Input {
414
425
  * TODO(FW-5592): Remove hasStartEndSlots condition
415
426
  */
416
427
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
417
- return (h(Host, { key: '54b5662d9a7f011a85e4119650c92b9af275bf96', class: createColorClasses(this.color, {
428
+ return (h(Host, { key: '166f7dea59931b8276bebef4d7a1fcd5ace90bad', class: createColorClasses(this.color, {
418
429
  [mode]: true,
419
430
  'has-value': hasValue,
420
431
  'has-focus': hasFocus,
@@ -425,7 +436,7 @@ export class Input {
425
436
  'in-item': inItem,
426
437
  'in-item-color': hostContext('ion-item.ion-color', this.el),
427
438
  'input-disabled': disabled,
428
- }) }, h("label", { key: '551cf8a932af3275689ecf32988b84355404e8f1', class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: 'b3601dca7e0f23517748f6e7feb899c953355bc4', class: "native-wrapper" }, h("slot", { key: 'd687a9bb4c5778cfee35ce1b8d6d16ddc8eca768', name: "start" }), h("input", Object.assign({ key: 'ab927e84e43bedf8b7827bb743888a1778292deb', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '0d2ee3f7e69cee75f071f37b2e9bc174572c5a01', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
439
+ }) }, h("label", { key: 'c6da0b068f8abc0fb8ffaee1a71685b03ec837ec', class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: 'cd25ec6d885bdbfdb2def51f1ad1756cc4f3e9e0', class: "native-wrapper" }, h("slot", { key: '2582b54d551c93a89d4a663a8a61b6de5fae85cc', name: "start" }), h("input", Object.assign({ key: '2b496016ba7a0c51ccd5509183e531f802701455', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '2db9987180cd4030ad63de197af838e152b47998', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
429
440
  /**
430
441
  * This prevents mobile browsers from
431
442
  * blurring the input when the clear
@@ -440,7 +451,7 @@ export class Input {
440
451
  * for screen readers as it means users would be unable to swipe past the clear button.
441
452
  */
442
453
  ev.stopPropagation();
443
- }, onClick: this.clearTextInput }, h("ion-icon", { key: 'c7715111897f43839c10d38662616edb662cd49b', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: 'afc44cbe1ad50f17942d5297a12509abecbd6ecd', name: "end" })), shouldRenderHighlight && h("div", { key: 'ee3af32cd9003d497f33e352e56313d43295f3a9', class: "input-highlight" })), this.renderBottomContent()));
454
+ }, onClick: this.clearTextInput }, h("ion-icon", { key: 'ea5e1a5f61046434bf502db692a05dece19aecd9', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: 'db1e7452cfc25accdb518ff0cc59ae3e2e47b049', name: "end" })), shouldRenderHighlight && h("div", { key: '0daeaaa5238e0c60ccfd251dedc6a381eba2fcc8', class: "input-highlight" })), this.renderBottomContent()));
444
455
  }
445
456
  static get is() { return "ion-input"; }
446
457
  static get encapsulation() { return "scoped"; }
@@ -1211,6 +1222,9 @@ export class Input {
1211
1222
  }, {
1212
1223
  "propName": "value",
1213
1224
  "methodName": "valueChanged"
1225
+ }, {
1226
+ "propName": "dir",
1227
+ "methodName": "onDirChanged"
1214
1228
  }];
1215
1229
  }
1216
1230
  }
@@ -311,6 +311,7 @@
311
311
  justify-content: space-between;
312
312
  border-top: var(--border-width) var(--border-style) var(--border-color);
313
313
  font-size: 0.75rem;
314
+ white-space: normal;
314
315
  }
315
316
 
316
317
  /**
@@ -340,7 +341,7 @@
340
341
 
341
342
  .input-bottom .helper-text {
342
343
  display: block;
343
- color: var(--ion-color-step-550, var(--ion-text-color-step-450, #737373));
344
+ color: var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d));
344
345
  }
345
346
 
346
347
  :host(.ion-touched.ion-invalid) .input-bottom .error-text {
@@ -359,7 +360,7 @@
359
360
  */
360
361
  -webkit-margin-start: auto;
361
362
  margin-inline-start: auto;
362
- color: var(--ion-color-step-550, var(--ion-text-color-step-450, #737373));
363
+ color: var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d));
363
364
  white-space: nowrap;
364
365
  padding-inline-start: 16px;
365
366
  }
@@ -799,6 +800,10 @@
799
800
  --border-color: var(--highlight-color);
800
801
  }
801
802
 
803
+ /**
804
+ * The bottom content should never have
805
+ * a border with the solid style.
806
+ */
802
807
  :host(.input-fill-solid) .input-bottom {
803
808
  border-top: none;
804
809
  }
@@ -18,11 +18,11 @@ export class ItemDivider {
18
18
  }
19
19
  render() {
20
20
  const mode = getIonMode(this);
21
- return (h(Host, { key: '6cff318230a9b2a9db529df154285d3dd9822efe', class: createColorClasses(this.color, {
21
+ return (h(Host, { key: '7150b1a3a881c3c312db40821acb9830c2885ccf', class: createColorClasses(this.color, {
22
22
  [mode]: true,
23
23
  'item-divider-sticky': this.sticky,
24
24
  item: true,
25
- }) }, h("slot", { key: 'eb50dfab74ab0fd13697db17ecd60e8fa0bf1750', name: "start" }), h("div", { key: '2806efd89d086f4fb844a479d9c095e1e0775713', class: "item-divider-inner" }, h("div", { key: '77b7d5fa987e5f1c26d8023cd1f974a8a263a3de', class: "item-divider-wrapper" }, h("slot", { key: 'dbafb0deb140a19a2a9748fd5b48760c39c6fd2e' })), h("slot", { key: 'ef9a848fe21e84ef21cd273b8a4d9f95f558175b', name: "end" }))));
25
+ }) }, h("slot", { key: '6e9d9615f475392a81177bc49b4b01dbdab67925', name: "start" }), h("div", { key: '12fe6b840ad1a1897cc34529e488207b2df448f7', class: "item-divider-inner" }, h("div", { key: '626776a8c9887dd2df5ecf3b7861beb742b41e03', class: "item-divider-wrapper" }, h("slot", { key: '90379dd99914e24ae45c9571c8d390f9b6622fd4' })), h("slot", { key: '105644332c08530155b9cd8e8c6fa9e332072a63', name: "end" }))));
26
26
  }
27
27
  static get is() { return "ion-item-divider"; }
28
28
  static get encapsulation() { return "shadow"; }
@@ -6,7 +6,7 @@ import { getIonMode } from "../../global/ionic-global";
6
6
  export class ItemGroup {
7
7
  render() {
8
8
  const mode = getIonMode(this);
9
- return (h(Host, { key: 'f9ffe0290d3fa546494fe55f952d8554f2a8abf8', role: "group", class: {
9
+ return (h(Host, { key: 'de2a969ed0dda880bc560a325848b28d0287fdb9', role: "group", class: {
10
10
  [mode]: true,
11
11
  // Used internally for styling
12
12
  [`item-group-${mode}`]: true,
@@ -44,12 +44,12 @@ export class ItemOption {
44
44
  href: this.href,
45
45
  target: this.target,
46
46
  };
47
- return (h(Host, { key: '89310624997821858c1abde60c0ffb142ca466e0', onClick: this.onClick, class: createColorClasses(this.color, {
47
+ return (h(Host, { key: '1b7708dd178dc2c9280652ca3da38c84ba7b767f', onClick: this.onClick, class: createColorClasses(this.color, {
48
48
  [mode]: true,
49
49
  'item-option-disabled': disabled,
50
50
  'item-option-expandable': expandable,
51
51
  'ion-activatable': true,
52
- }) }, h(TagType, Object.assign({ key: 'e4dfbb3048eed03a7f7e84c6f75545e0ca9b45fb' }, attrs, { class: "button-native", part: "native", disabled: disabled }), h("span", { key: 'dffcf437fbdc15f2e7a19e60a015e90c73c8377d', class: "button-inner" }, h("slot", { key: '48a23512e0601e062118d8b2c46c8bb96f25509f', name: "top" }), h("div", { key: '952a9a9aa3a476aa1f4408d7e208bf9e916b8c30', class: "horizontal-wrapper" }, h("slot", { key: 'f8d18a61c1ecec4a22a55443cf72bbc51383b64f', name: "start" }), h("slot", { key: '1f9f219e6f879d2e0bf6d80cf0d3f518eb14ce0e', name: "icon-only" }), h("slot", { key: 'a55adcdbe68131e5b1855c2dd45dd9454ab544fb' }), h("slot", { key: '3c4c85a4fbb7efc797d8bc5adf6d238da022ff9f', name: "end" })), h("slot", { key: '503c7e4b306745c523f57f24399ea06ba9b1e21d', name: "bottom" })), mode === 'md' && h("ion-ripple-effect", { key: 'b0e270b0c4f3ff9f9b6d74bad12a9278d7633226' }))));
52
+ }) }, h(TagType, Object.assign({ key: 'd9f899f5425ad6b97071494485aa3ca90bc89d30' }, attrs, { class: "button-native", part: "native", disabled: disabled }), h("span", { key: 'adc2cf72b4363be9b9eeb3584723e2bfc862af20', class: "button-inner" }, h("slot", { key: 'e668fe8e655a74e6a35e979e0cd488506b962dbf', name: "top" }), h("div", { key: '2ddcdb92b6b19c3cc549a7aee2400d1a6eeb51f1', class: "horizontal-wrapper" }, h("slot", { key: '441f13df18b72e5ed6bb51b157722e065b5847d2', name: "start" }), h("slot", { key: '425d815874b49e1628880160d7175ed3ca36ca39', name: "icon-only" }), h("slot", { key: '27437d3fa3365b12bc030704e18481fdfb14aebb' }), h("slot", { key: 'bd39330771c7f85c6df10f7f9050335ee7f14ff0', name: "end" })), h("slot", { key: '440cb6dc7743d50b261d4bf61d2c24e24b89e58c', name: "bottom" })), mode === 'md' && h("ion-ripple-effect", { key: '29632941464bbb34551cf64961187643f62bf755' }))));
53
53
  }
54
54
  static get is() { return "ion-item-option"; }
55
55
  static get encapsulation() { return "shadow"; }
@@ -17,7 +17,7 @@ export class ItemOptions {
17
17
  render() {
18
18
  const mode = getIonMode(this);
19
19
  const isEnd = isEndSide(this.side);
20
- return (h(Host, { key: '6d91399d2aaaa81d514d0bbc8dffe53eeec25d36', class: {
20
+ return (h(Host, { key: '7df4b71547524bf359c48e1b40ccbc44e850f632', class: {
21
21
  [mode]: true,
22
22
  // Used internally for styling
23
23
  [`item-options-${mode}`]: true,
@@ -386,7 +386,7 @@ export class ItemSliding {
386
386
  }
387
387
  render() {
388
388
  const mode = getIonMode(this);
389
- return (h(Host, { key: '47a3edd2ef2080ed9cfc2784277dea09785c7dc4', class: {
389
+ return (h(Host, { key: '22f83febcbc1bc27e4ddbd7fcbe590de60a10e89', class: {
390
390
  [mode]: true,
391
391
  'item-sliding-active-slide': this.state !== 2 /* SlidingState.Disabled */,
392
392
  'item-sliding-active-options-end': (this.state & 8 /* SlidingState.End */) !== 0,
@@ -55,13 +55,13 @@ export class Label {
55
55
  render() {
56
56
  const position = this.position;
57
57
  const mode = getIonMode(this);
58
- return (h(Host, { key: '6353a70565ef6fbbbf4042b000e536c61bcf99a9', class: createColorClasses(this.color, {
58
+ return (h(Host, { key: '4da84c95351a74b547f8224ecfa66924d21398c5', class: createColorClasses(this.color, {
59
59
  [mode]: true,
60
60
  'in-item-color': hostContext('ion-item.ion-color', this.el),
61
61
  [`label-${position}`]: position !== undefined,
62
62
  [`label-no-animate`]: this.noAnimate,
63
63
  'label-rtl': document.dir === 'rtl',
64
- }) }, h("slot", { key: '6ef9c2758c0168442aa84941af0a6cec1ef1ec21' })));
64
+ }) }, h("slot", { key: 'ea158ebb620275e5492965234d0ab925d391f919' })));
65
65
  }
66
66
  static get is() { return "ion-label"; }
67
67
  static get encapsulation() { return "scoped"; }
@@ -15,10 +15,10 @@ export class ListHeader {
15
15
  render() {
16
16
  const { lines } = this;
17
17
  const mode = getIonMode(this);
18
- return (h(Host, { key: 'fb78bd8601cbd7b90ec84a96e0c8325be1132b1e', class: createColorClasses(this.color, {
18
+ return (h(Host, { key: '95ce2135e2b1ad4d7d6020b0fb9bc6e02b3c0851', class: createColorClasses(this.color, {
19
19
  [mode]: true,
20
20
  [`list-header-lines-${lines}`]: lines !== undefined,
21
- }) }, h("div", { key: '2580ad49f3a54973e15f14d645a1e55a6fa066ac', class: "list-header-inner" }, h("slot", { key: '677b2e2ec8eeb3ae6ad329e86c76451cf3ae6c2f' }))));
21
+ }) }, h("div", { key: '3065b0a094bc31a90518898a5126a813c8a33816', class: "list-header-inner" }, h("slot", { key: 'fe15c87d7867f3e5d8185645c49c0228496697b8' }))));
22
22
  }
23
23
  static get is() { return "ion-list-header"; }
24
24
  static get encapsulation() { return "shadow"; }
@@ -161,9 +161,9 @@ export class Loading {
161
161
  * Otherwise, don't set aria-labelledby.
162
162
  */
163
163
  const ariaLabelledBy = message !== undefined ? msgId : null;
164
- return (h(Host, Object.assign({ key: 'd97f536b7f443ea19a2bbf2dcbc7f546b8e0a092', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
164
+ return (h(Host, Object.assign({ key: 'd6066c8b56b1fe4b597a243a7dab191ef0d21286', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
165
165
  zIndex: `${40000 + this.overlayIndex}`,
166
- }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: '6cd39bd7912fd080ab59d041644054c96d238ea9', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: 'c14ca5a9308844f11bcb010257e15208a75b39bc', tabindex: "0", "aria-hidden": "true" }), h("div", { key: '118bceefa8e1cf8b225a858f224e6d919cf03c26', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: '490d6e8ae4433835fe273162d7b90deab944fb39', class: "loading-spinner" }, h("ion-spinner", { key: 'c5cf6549c43df4cb23814b3e62ec4d9e7ea2b64f', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: '2b888362122d3b66b0492d53b0c21bd6a2a97501', tabindex: "0", "aria-hidden": "true" })));
166
+ }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: '2431eda00a2a3f510f5dfc39b7c7d47c056dfa3d', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: 'cf210aaf5e754e4eccdb49cf7ead4647b3f9b2d1', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'fa9375143d391656d70e181d25b952c77c2fc6ec', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: '8e4a4ed994f7f62df86b03696ac95162df41f52d', class: "loading-spinner" }, h("ion-spinner", { key: 'e5b323c272d365853ba92bd211e390b4fd4751d2', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: 'cae35ec8c34800477bff3ebcec8010e632158233', tabindex: "0", "aria-hidden": "true" })));
167
167
  }
168
168
  static get is() { return "ion-loading"; }
169
169
  static get encapsulation() { return "scoped"; }
@@ -614,14 +614,14 @@ export class Menu {
614
614
  * the ionBackButton listener in the menu controller
615
615
  * will handle closing the menu when Escape is pressed.
616
616
  */
617
- return (h(Host, { key: 'da96fdb4c5ddf60e615cc4cdda7ccdb3fd7e089b', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
617
+ return (h(Host, { key: '342db8551d26604128b29b21d2d8c37593972ed9', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
618
618
  [mode]: true,
619
619
  [`menu-type-${type}`]: true,
620
620
  'menu-enabled': !disabled,
621
621
  [`menu-side-${side}`]: true,
622
622
  'menu-pane-visible': isPaneVisible,
623
623
  'split-pane-side': hostContext('ion-split-pane', el),
624
- } }, h("div", { key: '894e680fe227534711128c7aca980964ddb5a08a', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: 'e9f5934518dc0cceaeadf1f2820614595fec6bc9' })), h("ion-backdrop", { key: '7282077817657b1bb6c155f1404c0a519fece993', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
624
+ } }, h("div", { key: '3c9bec2862b7fb9d88de66b1600be01f6735e3dd', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: '76283b4b2a65c78646f92c3b273eea021eda499c' })), h("ion-backdrop", { key: '121c395bc4873542a1b6ae2c9e23f2e881e75d93', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
625
625
  }
626
626
  static get is() { return "ion-menu"; }
627
627
  static get encapsulation() { return "shadow"; }
@@ -46,7 +46,7 @@ export class MenuButton {
46
46
  type: this.type,
47
47
  };
48
48
  const ariaLabel = inheritedAttributes['aria-label'] || 'menu';
49
- return (h(Host, { key: '7ec29715ce7926b7c2b08f3d9cac8aaa16b3dc28', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, "aria-hidden": hidden ? 'true' : null, class: createColorClasses(color, {
49
+ return (h(Host, { key: '3cde3704f28eb275f4a5ff2985bbb68c1024e79c', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, "aria-hidden": hidden ? 'true' : null, class: createColorClasses(color, {
50
50
  [mode]: true,
51
51
  button: true, // ion-buttons target .button
52
52
  'menu-button-hidden': hidden,
@@ -55,7 +55,7 @@ export class MenuButton {
55
55
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
56
56
  'ion-activatable': true,
57
57
  'ion-focusable': true,
58
- }) }, h("button", Object.assign({ key: 'd4c5929264af3ba0328118bcc27d2ab7ef5d3809' }, attrs, { disabled: disabled, class: "button-native", part: "native", "aria-label": ariaLabel }), h("span", { key: '7bfa6e9a93105486623d044861e879ec79ff64f1', class: "button-inner" }, h("slot", { key: '071ab58e285832fc188706166f5547d45d501ac5' }, h("ion-icon", { key: '918ec5d791921de9821c347af4f65f97dd94aabf', part: "icon", icon: menuIcon, mode: mode, lazy: false, "aria-hidden": "true" }))), mode === 'md' && h("ion-ripple-effect", { key: '00ffdd53f635e706c1dbd01b8e7944498650fe81', type: "unbounded" }))));
58
+ }) }, h("button", Object.assign({ key: 'a02a3374288bd1759b6e352ada8eab0d45c6422f' }, attrs, { disabled: disabled, class: "button-native", part: "native", "aria-label": ariaLabel }), h("span", { key: 'ba699f2277a4e7b27ce5e42faeefc53d8805bb43', class: "button-inner" }, h("slot", { key: '829fe6cbdeb173f50d1a670389d1565baa6273e4' }, h("ion-icon", { key: 'a9a9f7b8dcffc648a8429fe0adbe766869de72fd', part: "icon", icon: menuIcon, mode: mode, lazy: false, "aria-hidden": "true" }))), mode === 'md' && h("ion-ripple-effect", { key: '48deca9a771a249f2fc76eaa8b9741c8d66d8355', type: "unbounded" }))));
59
59
  }
60
60
  static get is() { return "ion-menu-button"; }
61
61
  static get encapsulation() { return "shadow"; }
@@ -26,10 +26,10 @@ export class MenuToggle {
26
26
  render() {
27
27
  const mode = getIonMode(this);
28
28
  const hidden = this.autoHide && !this.visible;
29
- return (h(Host, { key: '7c27ea5b0795676bf5cb33e1f83aa142c197f64e', onClick: this.onClick, "aria-hidden": hidden ? 'true' : null, class: {
29
+ return (h(Host, { key: '88e88fa13ac7f10ba3acfe378bd11cda0c7e2749', onClick: this.onClick, "aria-hidden": hidden ? 'true' : null, class: {
30
30
  [mode]: true,
31
31
  'menu-toggle-hidden': hidden,
32
- } }, h("slot", { key: '69f187becedc0fe34603d41d279f043cf0fdf776' })));
32
+ } }, h("slot", { key: '0a14c7b63eda64702d2fd1b4bc7db4809892842d' })));
33
33
  }
34
34
  static get is() { return "ion-menu-toggle"; }
35
35
  static get encapsulation() { return "shadow"; }
@@ -13,22 +13,68 @@ const createEnterAnimation = () => {
13
13
  })
14
14
  .afterClearStyles(['pointer-events']);
15
15
  const wrapperAnimation = createAnimation().fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');
16
- return { backdropAnimation, wrapperAnimation };
16
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
17
17
  };
18
18
  /**
19
19
  * iOS Modal Enter Animation for the Card presentation style
20
20
  */
21
21
  export const iosEnterAnimation = (baseEl, opts) => {
22
- const { presentingEl, currentBreakpoint } = opts;
22
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
23
23
  const root = getElementRoot(baseEl);
24
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
24
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
25
25
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
26
26
  wrapperAnimation.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')).beforeStyles({ opacity: 1 });
27
+ // The content animation is only added if scrolling is enabled for
28
+ // all the breakpoints.
29
+ !expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
27
30
  const baseAnimation = createAnimation('entering-base')
28
31
  .addElement(baseEl)
29
32
  .easing('cubic-bezier(0.32,0.72,0,1)')
30
33
  .duration(500)
31
- .addAnimation(wrapperAnimation);
34
+ .addAnimation([wrapperAnimation])
35
+ .beforeAddWrite(() => {
36
+ if (expandToScroll) {
37
+ // Scroll can only be done when the modal is fully expanded.
38
+ return;
39
+ }
40
+ /**
41
+ * There are some browsers that causes flickering when
42
+ * dragging the content when scroll is enabled at every
43
+ * breakpoint. This is due to the wrapper element being
44
+ * transformed off the screen and having a snap animation.
45
+ *
46
+ * A workaround is to clone the footer element and append
47
+ * it outside of the wrapper element. This way, the footer
48
+ * is still visible and the drag can be done without
49
+ * flickering. The original footer is hidden until the modal
50
+ * is dismissed. This maintains the animation of the footer
51
+ * when the modal is dismissed.
52
+ *
53
+ * The workaround needs to be done before the animation starts
54
+ * so there are no flickering issues.
55
+ */
56
+ const ionFooter = baseEl.querySelector('ion-footer');
57
+ /**
58
+ * This check is needed to prevent more than one footer
59
+ * from being appended to the shadow root.
60
+ * Otherwise, iOS and MD enter animations would append
61
+ * the footer twice.
62
+ */
63
+ const ionFooterAlreadyAppended = baseEl.shadowRoot.querySelector('ion-footer');
64
+ if (ionFooter && !ionFooterAlreadyAppended) {
65
+ const footerHeight = ionFooter.clientHeight;
66
+ const clonedFooter = ionFooter.cloneNode(true);
67
+ baseEl.shadowRoot.appendChild(clonedFooter);
68
+ ionFooter.style.setProperty('display', 'none');
69
+ ionFooter.setAttribute('aria-hidden', 'true');
70
+ // Padding is added to prevent some content from being hidden.
71
+ const page = baseEl.querySelector('.ion-page');
72
+ page.style.setProperty('padding-bottom', `${footerHeight}px`);
73
+ }
74
+ });
75
+ if (contentAnimation) {
76
+ baseAnimation.addAnimation(contentAnimation);
77
+ }
32
78
  if (presentingEl) {
33
79
  const isMobile = window.innerWidth < 768;
34
80
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -14,7 +14,7 @@ const createLeaveAnimation = () => {
14
14
  * iOS Modal Leave Animation
15
15
  */
16
16
  export const iosLeaveAnimation = (baseEl, opts, duration = 500) => {
17
- const { presentingEl, currentBreakpoint } = opts;
17
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
18
18
  const root = getElementRoot(baseEl);
19
19
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
20
20
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
@@ -23,7 +23,29 @@ export const iosLeaveAnimation = (baseEl, opts, duration = 500) => {
23
23
  .addElement(baseEl)
24
24
  .easing('cubic-bezier(0.32,0.72,0,1)')
25
25
  .duration(duration)
26
- .addAnimation(wrapperAnimation);
26
+ .addAnimation(wrapperAnimation)
27
+ .beforeAddWrite(() => {
28
+ if (expandToScroll) {
29
+ // Scroll can only be done when the modal is fully expanded.
30
+ return;
31
+ }
32
+ /**
33
+ * If expandToScroll is disabled, we need to swap
34
+ * the visibility to the original, so the footer
35
+ * dismisses with the modal and doesn't stay
36
+ * until the modal is removed from the DOM.
37
+ */
38
+ const ionFooter = baseEl.querySelector('ion-footer');
39
+ if (ionFooter) {
40
+ const clonedFooter = baseEl.shadowRoot.querySelector('ion-footer');
41
+ ionFooter.style.removeProperty('display');
42
+ ionFooter.removeAttribute('aria-hidden');
43
+ clonedFooter.style.setProperty('display', 'none');
44
+ clonedFooter.setAttribute('aria-hidden', 'true');
45
+ const page = baseEl.querySelector('.ion-page');
46
+ page.style.removeProperty('padding-bottom');
47
+ }
48
+ });
27
49
  if (presentingEl) {
28
50
  const isMobile = window.innerWidth < 768;
29
51
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -15,20 +15,67 @@ const createEnterAnimation = () => {
15
15
  { offset: 0, opacity: 0.01, transform: 'translateY(40px)' },
16
16
  { offset: 1, opacity: 1, transform: `translateY(0px)` },
17
17
  ]);
18
- return { backdropAnimation, wrapperAnimation };
18
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
19
19
  };
20
20
  /**
21
21
  * Md Modal Enter Animation
22
22
  */
23
23
  export const mdEnterAnimation = (baseEl, opts) => {
24
- const { currentBreakpoint } = opts;
24
+ const { currentBreakpoint, expandToScroll } = opts;
25
25
  const root = getElementRoot(baseEl);
26
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
26
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
27
27
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
28
28
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
29
- return createAnimation()
29
+ // The content animation is only added if scrolling is enabled for
30
+ // all the breakpoints.
31
+ expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
32
+ const baseAnimation = createAnimation()
30
33
  .addElement(baseEl)
31
34
  .easing('cubic-bezier(0.36,0.66,0.04,1)')
32
35
  .duration(280)
33
- .addAnimation([backdropAnimation, wrapperAnimation]);
36
+ .addAnimation([backdropAnimation, wrapperAnimation])
37
+ .beforeAddWrite(() => {
38
+ if (expandToScroll) {
39
+ // Scroll can only be done when the modal is fully expanded.
40
+ return;
41
+ }
42
+ /**
43
+ * There are some browsers that causes flickering when
44
+ * dragging the content when scroll is enabled at every
45
+ * breakpoint. This is due to the wrapper element being
46
+ * transformed off the screen and having a snap animation.
47
+ *
48
+ * A workaround is to clone the footer element and append
49
+ * it outside of the wrapper element. This way, the footer
50
+ * is still visible and the drag can be done without
51
+ * flickering. The original footer is hidden until the modal
52
+ * is dismissed. This maintains the animation of the footer
53
+ * when the modal is dismissed.
54
+ *
55
+ * The workaround needs to be done before the animation starts
56
+ * so there are no flickering issues.
57
+ */
58
+ const ionFooter = baseEl.querySelector('ion-footer');
59
+ /**
60
+ * This check is needed to prevent more than one footer
61
+ * from being appended to the shadow root.
62
+ * Otherwise, iOS and MD enter animations would append
63
+ * the footer twice.
64
+ */
65
+ const ionFooterAlreadyAppended = baseEl.shadowRoot.querySelector('ion-footer');
66
+ if (ionFooter && !ionFooterAlreadyAppended) {
67
+ const footerHeight = ionFooter.clientHeight;
68
+ const clonedFooter = ionFooter.cloneNode(true);
69
+ baseEl.shadowRoot.appendChild(clonedFooter);
70
+ ionFooter.style.setProperty('display', 'none');
71
+ ionFooter.setAttribute('aria-hidden', 'true');
72
+ // Padding is added to prevent some content from being hidden.
73
+ const page = baseEl.querySelector('.ion-page');
74
+ page.style.setProperty('padding-bottom', `${footerHeight}px`);
75
+ }
76
+ });
77
+ if (contentAnimation) {
78
+ baseAnimation.addAnimation(contentAnimation);
79
+ }
80
+ return baseAnimation;
34
81
  };
@@ -16,13 +16,36 @@ const createLeaveAnimation = () => {
16
16
  * Md Modal Leave Animation
17
17
  */
18
18
  export const mdLeaveAnimation = (baseEl, opts) => {
19
- const { currentBreakpoint } = opts;
19
+ const { currentBreakpoint, expandToScroll } = opts;
20
20
  const root = getElementRoot(baseEl);
21
21
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
22
22
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
23
23
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
24
- return createAnimation()
24
+ const baseAnimation = createAnimation()
25
25
  .easing('cubic-bezier(0.47,0,0.745,0.715)')
26
26
  .duration(200)
27
- .addAnimation([backdropAnimation, wrapperAnimation]);
27
+ .addAnimation([backdropAnimation, wrapperAnimation])
28
+ .beforeAddWrite(() => {
29
+ if (expandToScroll) {
30
+ // Scroll can only be done when the modal is fully expanded.
31
+ return;
32
+ }
33
+ /**
34
+ * If expandToScroll is disabled, we need to swap
35
+ * the visibility to the original, so the footer
36
+ * dismisses with the modal and doesn't stay
37
+ * until the modal is removed from the DOM.
38
+ */
39
+ const ionFooter = baseEl.querySelector('ion-footer');
40
+ if (ionFooter) {
41
+ const clonedFooter = baseEl.shadowRoot.querySelector('ion-footer');
42
+ ionFooter.style.removeProperty('display');
43
+ ionFooter.removeAttribute('aria-hidden');
44
+ clonedFooter.style.setProperty('display', 'none');
45
+ clonedFooter.setAttribute('aria-hidden', 'true');
46
+ const page = baseEl.querySelector('.ion-page');
47
+ page.style.removeProperty('padding-bottom');
48
+ }
49
+ });
50
+ return baseAnimation;
28
51
  };
@@ -4,7 +4,7 @@
4
4
  import { createAnimation } from "../../../utils/animation/animation";
5
5
  import { getBackdropValueForSheet } from "../utils";
6
6
  export const createSheetEnterAnimation = (opts) => {
7
- const { currentBreakpoint, backdropBreakpoint } = opts;
7
+ const { currentBreakpoint, backdropBreakpoint, expandToScroll } = opts;
8
8
  /**
9
9
  * If the backdropBreakpoint is undefined, then the backdrop
10
10
  * should always fade in. If the backdropBreakpoint came before the
@@ -24,7 +24,16 @@ export const createSheetEnterAnimation = (opts) => {
24
24
  { offset: 0, opacity: 1, transform: 'translateY(100%)' },
25
25
  { offset: 1, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
26
26
  ]);
27
- return { wrapperAnimation, backdropAnimation };
27
+ /**
28
+ * This allows the content to be scrollable at any breakpoint.
29
+ */
30
+ const contentAnimation = !expandToScroll
31
+ ? createAnimation('contentAnimation').keyframes([
32
+ { offset: 0, opacity: 1, maxHeight: `${(1 - currentBreakpoint) * 100}%` },
33
+ { offset: 1, opacity: 1, maxHeight: `${currentBreakpoint * 100}%` },
34
+ ])
35
+ : undefined;
36
+ return { wrapperAnimation, backdropAnimation, contentAnimation };
28
37
  };
29
38
  export const createSheetLeaveAnimation = (opts) => {
30
39
  const { currentBreakpoint, backdropBreakpoint } = opts;