@ionic/core 8.8.20-dev.11787158518.168a2fea → 8.8.20-dev.11788449221.155f9f1e

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 (1241) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-accordion-group.js +1 -1
  3. package/components/ion-accordion.js +1 -1
  4. package/components/ion-action-sheet.js +1 -1
  5. package/components/ion-alert.js +1 -1
  6. package/components/ion-app.js +1 -1
  7. package/components/ion-avatar.js +1 -1
  8. package/components/ion-back-button.js +1 -1
  9. package/components/ion-backdrop.js +1 -1
  10. package/components/ion-badge.js +1 -1
  11. package/components/ion-breadcrumb.js +1 -1
  12. package/components/ion-breadcrumbs.js +1 -1
  13. package/components/ion-button.js +1 -1
  14. package/components/ion-buttons.js +1 -1
  15. package/components/ion-card-content.js +1 -1
  16. package/components/ion-card-header.js +1 -1
  17. package/components/ion-card-subtitle.js +1 -1
  18. package/components/ion-card-title.js +1 -1
  19. package/components/ion-card.js +1 -1
  20. package/components/ion-checkbox.js +1 -1
  21. package/components/ion-chip.js +1 -1
  22. package/components/ion-col.js +1 -1
  23. package/components/ion-content.js +1 -1
  24. package/components/ion-datetime-button.js +1 -1
  25. package/components/ion-datetime.js +1 -1
  26. package/components/ion-divider.d.ts +11 -0
  27. package/components/ion-divider.js +4 -0
  28. package/components/ion-fab-button.js +1 -1
  29. package/components/ion-fab-list.js +1 -1
  30. package/components/ion-fab.js +1 -1
  31. package/components/ion-footer.js +1 -1
  32. package/components/ion-gallery-item.d.ts +11 -0
  33. package/components/ion-gallery-item.js +4 -0
  34. package/components/ion-gallery.d.ts +11 -0
  35. package/components/ion-gallery.js +4 -0
  36. package/components/ion-grid.js +1 -1
  37. package/components/ion-header.js +1 -1
  38. package/components/ion-icon.js +1 -1
  39. package/components/ion-img.js +1 -1
  40. package/components/ion-infinite-scroll-content.js +1 -1
  41. package/components/ion-infinite-scroll.js +1 -1
  42. package/components/ion-input-otp.js +1 -1
  43. package/components/ion-input-password-toggle.js +1 -1
  44. package/components/ion-input.js +1 -1
  45. package/components/ion-item-divider.js +1 -1
  46. package/components/ion-item-group.js +1 -1
  47. package/components/ion-item-option.js +1 -1
  48. package/components/ion-item-options.js +1 -1
  49. package/components/ion-item-sliding.js +1 -1
  50. package/components/ion-item.js +1 -1
  51. package/components/ion-label.js +1 -1
  52. package/components/ion-list-header.js +1 -1
  53. package/components/ion-list.js +1 -1
  54. package/components/ion-loading.js +1 -1
  55. package/components/ion-menu-button.js +1 -1
  56. package/components/ion-menu-toggle.js +1 -1
  57. package/components/ion-menu.js +1 -1
  58. package/components/ion-modal.js +1 -1
  59. package/components/ion-nav-link.js +1 -1
  60. package/components/ion-nav.js +1 -1
  61. package/components/ion-note.js +1 -1
  62. package/components/ion-picker-column-option.js +1 -1
  63. package/components/ion-picker-column.js +1 -1
  64. package/components/ion-picker-legacy-column.d.ts +11 -0
  65. package/components/ion-picker-legacy-column.js +4 -0
  66. package/components/ion-picker-legacy.d.ts +11 -0
  67. package/components/ion-picker-legacy.js +4 -0
  68. package/components/ion-picker.js +1 -1
  69. package/components/ion-popover.js +1 -1
  70. package/components/ion-progress-bar.js +1 -1
  71. package/components/ion-radio-group.js +1 -1
  72. package/components/ion-radio.js +1 -1
  73. package/components/ion-range.js +1 -1
  74. package/components/ion-refresher-content.js +1 -1
  75. package/components/ion-refresher.js +1 -1
  76. package/components/ion-reorder-group.js +1 -1
  77. package/components/ion-reorder.js +1 -1
  78. package/components/ion-ripple-effect.js +1 -1
  79. package/components/ion-route-redirect.js +1 -1
  80. package/components/ion-route.js +1 -1
  81. package/components/ion-router-link.js +1 -1
  82. package/components/ion-router-outlet.js +1 -1
  83. package/components/ion-router.js +1 -1
  84. package/components/ion-row.js +1 -1
  85. package/components/ion-searchbar.js +1 -1
  86. package/components/ion-segment-button.js +1 -1
  87. package/components/ion-segment-content.js +1 -1
  88. package/components/ion-segment-view.js +1 -1
  89. package/components/ion-segment.js +1 -1
  90. package/components/ion-select-modal.js +1 -1
  91. package/components/ion-select-option.js +1 -1
  92. package/components/ion-select-popover.js +1 -1
  93. package/components/ion-select.js +1 -1
  94. package/components/ion-skeleton-text.js +1 -1
  95. package/components/ion-spinner.js +1 -1
  96. package/components/ion-split-pane.js +1 -1
  97. package/components/ion-tab-bar.js +1 -1
  98. package/components/ion-tab-button.js +1 -1
  99. package/components/ion-tab.js +1 -1
  100. package/components/ion-tabs.js +1 -1
  101. package/components/ion-text.js +1 -1
  102. package/components/ion-textarea.js +1 -1
  103. package/components/ion-thumbnail.js +1 -1
  104. package/components/ion-title.js +1 -1
  105. package/components/ion-toast.js +1 -1
  106. package/components/ion-toggle.js +1 -1
  107. package/components/ion-toolbar.js +1 -1
  108. package/components/{p-DwpKZ6rl.js → p-B2SvA6NE.js} +1 -1
  109. package/components/p-B39i6rpY.js +4 -0
  110. package/components/p-B4GJERAm.js +4 -0
  111. package/components/p-B9_sPaDw.js +4 -0
  112. package/components/p-BDqjX7Z_.js +4 -0
  113. package/components/p-BE21dB_a.js +4 -0
  114. package/components/p-BJyeT56g.js +4 -0
  115. package/components/p-BLP69XoA.js +4 -0
  116. package/components/p-BTBa_wH7.js +4 -0
  117. package/components/p-BTEOs1at.js +4 -0
  118. package/components/p-BU8Blvqg.js +4 -0
  119. package/components/p-BUePQFRZ.js +4 -0
  120. package/components/p-BXjGM4gW.js +4 -0
  121. package/components/p-BXuZo5-p.js +4 -0
  122. package/components/p-BYRVyMu9.js +4 -0
  123. package/components/p-BYSs-jZz.js +4 -0
  124. package/components/{p-ryyf_ItD.js → p-BZwQa9ey.js} +1 -1
  125. package/components/p-B_a4XnF2.js +4 -0
  126. package/components/p-BjW8SOqw.js +4 -0
  127. package/components/p-BnQAsi91.js +4 -0
  128. package/components/p-BrF4HSay.js +4 -0
  129. package/components/p-Bs5kME4N.js +4 -0
  130. package/components/p-BwKpO3Is.js +4 -0
  131. package/components/p-BwzRqsq1.js +4 -0
  132. package/components/p-C0K6CGg9.js +4 -0
  133. package/components/p-C1L59jNd.js +4 -0
  134. package/components/p-C3ydXg9O.js +4 -0
  135. package/components/p-C5F5Zw01.js +4 -0
  136. package/components/p-C784We0w.js +4 -0
  137. package/components/p-CA81qANP.js +4 -0
  138. package/components/p-CEz0vNHD.js +4 -0
  139. package/components/p-CHB9zWT6.js +4 -0
  140. package/components/p-CJNsztW3.js +4 -0
  141. package/components/{p-CMLAwl_N.js → p-CKLXmqy1.js} +1 -1
  142. package/components/p-CODBQrPj.js +4 -0
  143. package/components/p-CVYFPBs-.js +4 -0
  144. package/components/p-CWqLCAML.js +4 -0
  145. package/components/p-CaB0_AG0.js +4 -0
  146. package/components/p-CaXMr1SL.js +4 -0
  147. package/components/p-Cc3oC60a.js +4 -0
  148. package/components/p-CjlmHeGM.js +4 -0
  149. package/components/p-CstXr-x9.js +4 -0
  150. package/components/{p-DzRT60Tw.js → p-Cu8FoYIJ.js} +1 -1
  151. package/components/p-CxhjkdQ_.js +4 -0
  152. package/components/p-CxoHM559.js +4 -0
  153. package/components/p-D0Iqw6OZ.js +4 -0
  154. package/components/p-D12Xsfh7.js +4 -0
  155. package/components/p-D1t981Ih.js +4 -0
  156. package/components/p-D2tZEPGv.js +4 -0
  157. package/components/p-D6zl6ZA8.js +4 -0
  158. package/components/p-DExJ63jR.js +4 -0
  159. package/components/p-DHvfufkW.js +4 -0
  160. package/components/p-DNweMi32.js +4 -0
  161. package/components/p-DRUGmlKi.js +4 -0
  162. package/components/p-DYq-5riI.js +4 -0
  163. package/components/p-DaJxRxSQ.js +4 -0
  164. package/components/p-Db3A3kHi.js +4 -0
  165. package/components/p-Df6AAcu8.js +4 -0
  166. package/components/p-Dhi5xtNS.js +4 -0
  167. package/components/{p-63OhffQv.js → p-Di8NbWfs.js} +1 -1
  168. package/components/p-DkfVuzjA.js +4 -0
  169. package/components/p-DriGEn08.js +4 -0
  170. package/components/p-Ds3yn-R0.js +4 -0
  171. package/components/p-DylrHLJF.js +4 -0
  172. package/components/p-VrmyB-Wu.js +4 -0
  173. package/components/p-Wn4ujuPW.js +4 -0
  174. package/components/p-X6YgGSBf.js +4 -0
  175. package/components/p-dLA3JnNJ.js +4 -0
  176. package/components/p-fIOYmaqA.js +4 -0
  177. package/components/p-o8OKV5aD.js +4 -0
  178. package/components/p-vUGYs065.js +4 -0
  179. package/components/p-vXpMhGrs.js +4 -0
  180. package/css/core.css +1 -1
  181. package/css/core.css.map +1 -1
  182. package/css/display.css +1 -1
  183. package/css/display.css.map +1 -1
  184. package/css/flex-utils.css +1 -1
  185. package/css/flex-utils.css.map +1 -1
  186. package/css/float-elements.css.map +1 -1
  187. package/css/global.bundle.css.map +1 -1
  188. package/css/ionic/bundle.ionic.css +1 -0
  189. package/css/ionic/bundle.ionic.css.map +1 -0
  190. package/css/ionic/core.ionic.css +1 -0
  191. package/css/ionic/core.ionic.css.map +1 -0
  192. package/css/ionic/global.bundle.ionic.css +1 -0
  193. package/css/ionic/global.bundle.ionic.css.map +1 -0
  194. package/css/ionic/ionic-swiper.ionic.css +1 -0
  195. package/css/ionic/ionic-swiper.ionic.css.map +1 -0
  196. package/css/ionic/link.ionic.css +1 -0
  197. package/css/ionic/link.ionic.css.map +1 -0
  198. package/css/ionic/structure.ionic.css +1 -0
  199. package/css/ionic/structure.ionic.css.map +1 -0
  200. package/css/ionic/typography.ionic.css +1 -0
  201. package/css/ionic/typography.ionic.css.map +1 -0
  202. package/css/ionic/utils.bundle.ionic.css +1 -0
  203. package/css/ionic/utils.bundle.ionic.css.map +1 -0
  204. package/css/ionic-swiper.css +1 -1
  205. package/css/ionic-swiper.css.map +1 -1
  206. package/css/ionic.bundle.css +1 -1
  207. package/css/ionic.bundle.css.map +1 -1
  208. package/css/normalize.css.map +1 -1
  209. package/css/padding.css.map +1 -1
  210. package/css/palettes/dark.always.css.map +1 -1
  211. package/css/palettes/dark.class.css.map +1 -1
  212. package/css/palettes/dark.system.css.map +1 -1
  213. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  214. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  215. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  216. package/css/palettes/high-contrast.always.css.map +1 -1
  217. package/css/palettes/high-contrast.class.css.map +1 -1
  218. package/css/palettes/high-contrast.system.css.map +1 -1
  219. package/css/structure.css.map +1 -1
  220. package/css/text-alignment.css.map +1 -1
  221. package/css/text-transformation.css.map +1 -1
  222. package/css/typography.css.map +1 -1
  223. package/css/utils.bundle.css +1 -1
  224. package/css/utils.bundle.css.map +1 -1
  225. package/dist/cjs/{animation-C0mOHzej.js → animation-CxRPIayb.js} +6 -6
  226. package/dist/cjs/{app-globals-BREG4twP.js → app-globals-BwvlV6g7.js} +1 -1
  227. package/dist/cjs/{button-active-CVMevT9a.js → button-active-qCQDwE2m.js} +3 -3
  228. package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-CRl0exFC.js} +3 -3
  229. package/dist/cjs/caret-down-vtVgfXIs.js +8 -0
  230. package/dist/cjs/caret-left-CxZXLRv5.js +8 -0
  231. package/dist/cjs/caret-right-CRCgv98E.js +8 -0
  232. package/dist/cjs/clear-button-press-controller-C7B9kyMa.js +45 -0
  233. package/dist/cjs/{config-CjUbvdPW.js → config-DWdFbSNK.js} +4 -5
  234. package/dist/cjs/{dir-zwDPRE5K.js → dir-DD0jPVH3.js} +3 -2
  235. package/dist/cjs/{focus-visible-CCvKiLh3.js → focus-visible-BIj-I3-C.js} +24 -0
  236. package/dist/cjs/{format-pp0Du3K-.js → format-COAsdjOc.js} +30 -40
  237. package/dist/cjs/{framework-delegate-Dfo5XsGv.js → framework-delegate-IvkF1VuM.js} +10 -6
  238. package/dist/cjs/{gesture-controller-BDUH7687.js → gesture-controller-dtqlP_q4.js} +8 -15
  239. package/dist/cjs/{haptic-Ch-X4gRx.js → haptic-DG25gZzb.js} +4 -3
  240. package/dist/cjs/{helpers-YPQybDph.js → helpers-Dhimwhpn.js} +74 -7
  241. package/dist/cjs/{index-DwlRtFZe.js → index-BJ2-LydH.js} +3 -9
  242. package/dist/cjs/{index-zVCah4Uz.js → index-Bsq0SbXc.js} +2 -2
  243. package/dist/cjs/{index-uvry__L4.js → index-C1knGA9x.js} +65 -33
  244. package/dist/cjs/{index-wOmugbdg.js → index-CxDnX7hd.js} +2 -0
  245. package/dist/cjs/{index-DXsPSne6.js → index-DhDV4RxJ.js} +16 -15
  246. package/dist/cjs/{index-BLdJCcJY.js → index-DuleInoh.js} +5 -5
  247. package/dist/cjs/{index-B7zJsYWS.js → index-YYUVCfP-.js} +3 -3
  248. package/dist/cjs/{index-DDg31ZF5.js → index-yon1HGB7.js} +10 -9
  249. package/dist/cjs/index.cjs.js +18 -18
  250. package/dist/cjs/{input-shims-Cbu1fcye.js → input-shims-BgJcHtqI.js} +23 -20
  251. package/dist/cjs/input.utils--RmR5lVe.js +150 -0
  252. package/dist/cjs/ion-accordion_2.cjs.entry.js +383 -379
  253. package/dist/cjs/ion-action-sheet.cjs.entry.js +87 -179
  254. package/dist/cjs/ion-alert.cjs.entry.js +126 -251
  255. package/dist/cjs/ion-app_8.cjs.entry.js +608 -461
  256. package/dist/cjs/ion-avatar_3.cjs.entry.js +125 -19
  257. package/dist/cjs/ion-back-button.cjs.entry.js +50 -65
  258. package/dist/cjs/ion-backdrop.cjs.entry.js +22 -23
  259. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +170 -212
  260. package/dist/cjs/ion-button_2.cjs.entry.js +118 -153
  261. package/dist/cjs/ion-card_5.cjs.entry.js +80 -110
  262. package/dist/cjs/ion-checkbox.cjs.entry.js +130 -164
  263. package/dist/cjs/ion-chip.cjs.entry.js +56 -21
  264. package/dist/cjs/ion-col_3.cjs.entry.js +61 -186
  265. package/dist/cjs/ion-datetime-button.cjs.entry.js +248 -256
  266. package/dist/cjs/ion-datetime_3.cjs.entry.js +3242 -0
  267. package/dist/cjs/ion-divider.cjs.entry.js +51 -0
  268. package/dist/cjs/ion-fab_3.cjs.entry.js +113 -155
  269. package/dist/cjs/ion-gallery-item.cjs.entry.js +59 -0
  270. package/dist/cjs/ion-gallery.cjs.entry.js +608 -0
  271. package/dist/cjs/ion-img.cjs.entry.js +17 -35
  272. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +157 -109
  273. package/dist/cjs/ion-input-otp.cjs.entry.js +437 -435
  274. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +64 -40
  275. package/dist/cjs/ion-input.cjs.entry.js +312 -351
  276. package/dist/cjs/ion-item-option_3.cjs.entry.js +512 -137
  277. package/dist/cjs/ion-item_8.cjs.entry.js +190 -218
  278. package/dist/cjs/ion-loading.cjs.entry.js +69 -152
  279. package/dist/cjs/ion-menu_3.cjs.entry.js +138 -182
  280. package/dist/cjs/ion-modal.cjs.entry.js +501 -571
  281. package/dist/cjs/ion-nav_2.cjs.entry.js +164 -104
  282. package/dist/cjs/ion-picker-column-option.cjs.entry.js +40 -40
  283. package/dist/cjs/ion-picker-column.cjs.entry.js +410 -422
  284. package/dist/cjs/ion-picker.cjs.entry.js +401 -406
  285. package/dist/cjs/ion-popover.cjs.entry.js +212 -324
  286. package/dist/cjs/ion-progress-bar.cjs.entry.js +48 -36
  287. package/dist/cjs/ion-radio_2.cjs.entry.js +162 -217
  288. package/dist/cjs/ion-range.cjs.entry.js +251 -309
  289. package/dist/cjs/ion-refresher_2.cjs.entry.js +122 -175
  290. package/dist/cjs/ion-reorder_2.cjs.entry.js +54 -60
  291. package/dist/cjs/ion-ripple-effect.cjs.entry.js +26 -18
  292. package/dist/cjs/ion-route_4.cjs.entry.js +76 -179
  293. package/dist/cjs/ion-searchbar.cjs.entry.js +331 -308
  294. package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
  295. package/dist/cjs/ion-segment-view.cjs.entry.js +27 -28
  296. package/dist/cjs/ion-segment_2.cjs.entry.js +141 -177
  297. package/dist/cjs/ion-select-modal.cjs.entry.js +70 -50
  298. package/dist/cjs/ion-select_3.cjs.entry.js +429 -507
  299. package/dist/cjs/ion-spinner.cjs.entry.js +36 -28
  300. package/dist/cjs/ion-split-pane.cjs.entry.js +25 -34
  301. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +180 -117
  302. package/dist/cjs/ion-tab_2.cjs.entry.js +30 -55
  303. package/dist/cjs/ion-text.cjs.entry.js +7 -13
  304. package/dist/cjs/ion-textarea.cjs.entry.js +310 -303
  305. package/dist/cjs/ion-toast.cjs.entry.js +170 -265
  306. package/dist/cjs/ion-toggle.cjs.entry.js +187 -184
  307. package/dist/cjs/ionic-global-DYLhJaw7.js +519 -0
  308. package/dist/cjs/ionic.cjs.js +4 -4
  309. package/dist/cjs/{ios.transition-zTmJz8T-.js → ios.transition-Blgf-vZU.js} +21 -15
  310. package/dist/cjs/{item-multiple-inputs-BdYSbfKN.js → item-multiple-inputs-DKn76MYO.js} +1 -1
  311. package/dist/cjs/{keyboard-cHxZlTyz.js → keyboard-BgioTbwQ.js} +3 -3
  312. package/dist/cjs/{keyboard-Cix5TVkD.js → keyboard-Otnp8OQI.js} +5 -4
  313. package/dist/cjs/list-a-7GSA6K.js +8 -0
  314. package/dist/cjs/loader.cjs.js +4 -4
  315. package/dist/cjs/{md.transition-nb_4pUXu.js → md.transition-ClgvbGfq.js} +11 -9
  316. package/dist/cjs/notch-controller-0hkmmSGo.js +155 -0
  317. package/dist/cjs/{overlay-control-label-D2sdL2O8.js → overlay-control-label-DnRLQR1t.js} +13 -11
  318. package/dist/cjs/{overlays-KaNVDNqC.js → overlays-Bxjqh2m3.js} +336 -60
  319. package/dist/cjs/scroll-hide-controller-qWMU5yOk.js +345 -0
  320. package/dist/cjs/{select-option-render-pULCGldr.js → select-option-render-BqJEK1N1.js} +4 -3
  321. package/dist/cjs/{status-tap-o9IIymsP.js → status-tap-ClA8u57t.js} +5 -4
  322. package/dist/cjs/{swipe-back-B7X9VOlH.js → swipe-back-4vY7mi8i.js} +6 -5
  323. package/dist/cjs/{theme-Bw0rpaNN.js → theme-IlOsGAz7.js} +26 -7
  324. package/dist/cjs/validity-QmuwEptc.js +51 -0
  325. package/dist/cjs/x-BTF99yFH.js +8 -0
  326. package/dist/collection/collection-manifest.json +13 -1
  327. package/dist/collection/components/accordion/accordion.ionic.css +201 -0
  328. package/dist/collection/components/accordion/accordion.ios.css +73 -58
  329. package/dist/collection/components/accordion/accordion.js +338 -327
  330. package/dist/collection/components/accordion/accordion.md.css +67 -59
  331. package/dist/collection/components/accordion-group/accordion-group.ionic.css +93 -0
  332. package/dist/collection/components/accordion-group/accordion-group.ios.css +16 -4
  333. package/dist/collection/components/accordion-group/accordion-group.js +69 -56
  334. package/dist/collection/components/accordion-group/accordion-group.md.css +22 -4
  335. package/dist/collection/components/action-sheet/action-sheet.ionic.css +494 -0
  336. package/dist/collection/components/action-sheet/action-sheet.ios.css +184 -54
  337. package/dist/collection/components/action-sheet/action-sheet.js +76 -166
  338. package/dist/collection/components/action-sheet/action-sheet.md.css +179 -55
  339. package/dist/collection/components/action-sheet/test/basic/fixture.js +0 -3
  340. package/dist/collection/components/alert/alert.ionic.css +787 -0
  341. package/dist/collection/components/alert/alert.ios.css +247 -54
  342. package/dist/collection/components/alert/alert.js +113 -236
  343. package/dist/collection/components/alert/alert.md.css +243 -56
  344. package/dist/collection/components/app/app.js +15 -86
  345. package/dist/collection/components/avatar/avatar.ionic.css +385 -0
  346. package/dist/collection/components/avatar/avatar.ios.css +7 -33
  347. package/dist/collection/components/avatar/avatar.js +120 -4
  348. package/dist/collection/components/avatar/avatar.md.css +51 -0
  349. package/dist/collection/components/back-button/back-button.ios.css +60 -48
  350. package/dist/collection/components/back-button/back-button.js +46 -61
  351. package/dist/collection/components/back-button/back-button.md.css +60 -48
  352. package/dist/collection/components/backdrop/backdrop.ionic.css +109 -0
  353. package/dist/collection/components/backdrop/backdrop.ios.css +56 -19
  354. package/dist/collection/components/backdrop/backdrop.js +26 -22
  355. package/dist/collection/components/backdrop/backdrop.md.css +56 -19
  356. package/dist/collection/components/badge/badge.ionic.css +272 -0
  357. package/dist/collection/components/badge/badge.ios.css +137 -12
  358. package/dist/collection/components/badge/badge.js +145 -15
  359. package/dist/collection/components/badge/badge.md.css +122 -12
  360. package/dist/collection/components/breadcrumb/breadcrumb.ios.css +20 -8
  361. package/dist/collection/components/breadcrumb/breadcrumb.js +72 -101
  362. package/dist/collection/components/breadcrumb/breadcrumb.md.css +20 -8
  363. package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +6 -0
  364. package/dist/collection/components/breadcrumbs/breadcrumbs.js +99 -112
  365. package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +6 -0
  366. package/dist/collection/components/button/button.ionic.css +644 -0
  367. package/dist/collection/components/button/button.ios.css +154 -46
  368. package/dist/collection/components/button/button.js +122 -157
  369. package/dist/collection/components/button/button.md.css +150 -50
  370. package/dist/collection/components/buttons/buttons.ionic.css +97 -0
  371. package/dist/collection/components/buttons/buttons.ios.css +59 -7
  372. package/dist/collection/components/buttons/buttons.js +29 -21
  373. package/dist/collection/components/buttons/buttons.md.css +55 -3
  374. package/dist/collection/components/card/card.ionic.css +144 -0
  375. package/dist/collection/components/card/card.ios.css +65 -14
  376. package/dist/collection/components/card/card.js +61 -63
  377. package/dist/collection/components/card/card.md.css +65 -14
  378. package/dist/collection/components/card-content/card-content.ionic.css +89 -0
  379. package/dist/collection/components/card-content/card-content.ios.css +20 -35
  380. package/dist/collection/components/card-content/card-content.js +12 -10
  381. package/dist/collection/components/card-content/card-content.md.css +20 -35
  382. package/dist/collection/components/card-header/card-header.ionic.css +85 -0
  383. package/dist/collection/components/card-header/card-header.ios.css +27 -15
  384. package/dist/collection/components/card-header/card-header.js +20 -21
  385. package/dist/collection/components/card-header/card-header.md.css +27 -15
  386. package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +144 -0
  387. package/dist/collection/components/card-subtitle/card-subtitle.ios.css +12 -0
  388. package/dist/collection/components/card-subtitle/card-subtitle.js +11 -14
  389. package/dist/collection/components/card-subtitle/card-subtitle.md.css +12 -0
  390. package/dist/collection/components/card-title/card-title.ios.css +73 -0
  391. package/dist/collection/components/card-title/card-title.js +11 -14
  392. package/dist/collection/components/card-title/card-title.md.css +73 -0
  393. package/dist/collection/components/checkbox/checkbox.ionic.css +543 -0
  394. package/dist/collection/components/checkbox/checkbox.ios.css +242 -117
  395. package/dist/collection/components/checkbox/checkbox.js +165 -160
  396. package/dist/collection/components/checkbox/checkbox.md.css +243 -118
  397. package/dist/collection/components/chip/chip.ionic.css +217 -0
  398. package/dist/collection/components/chip/chip.ios.css +67 -14
  399. package/dist/collection/components/chip/chip.js +116 -20
  400. package/dist/collection/components/chip/chip.md.css +67 -14
  401. package/dist/collection/components/col/col.css +192 -4
  402. package/dist/collection/components/col/col.js +212 -186
  403. package/dist/collection/components/content/content.css +47 -2
  404. package/dist/collection/components/content/content.js +78 -102
  405. package/dist/collection/components/datetime/datetime.ionic.css +703 -0
  406. package/dist/collection/components/datetime/datetime.ios.css +304 -148
  407. package/dist/collection/components/datetime/datetime.js +928 -1086
  408. package/dist/collection/components/datetime/datetime.md.css +294 -138
  409. package/dist/collection/components/datetime/utils/data.js +19 -18
  410. package/dist/collection/components/datetime/utils/format.js +11 -21
  411. package/dist/collection/components/datetime/utils/manipulation.js +8 -8
  412. package/dist/collection/components/datetime/utils/parse.js +10 -10
  413. package/dist/collection/components/datetime/utils/state.js +2 -8
  414. package/dist/collection/components/datetime/utils/validate.js +5 -4
  415. package/dist/collection/components/datetime-button/datetime-button.ios.css +6 -5
  416. package/dist/collection/components/datetime-button/datetime-button.js +246 -253
  417. package/dist/collection/components/datetime-button/datetime-button.md.css +6 -5
  418. package/dist/collection/components/divider/divider.ionic.css +148 -0
  419. package/dist/collection/components/divider/divider.ios.css +87 -0
  420. package/dist/collection/components/divider/divider.js +94 -0
  421. package/dist/collection/components/divider/divider.md.css +87 -0
  422. package/dist/collection/components/fab/fab.css +25 -1
  423. package/dist/collection/components/fab/fab.js +22 -25
  424. package/dist/collection/components/fab-button/fab-button.ios.css +18 -6
  425. package/dist/collection/components/fab-button/fab-button.js +83 -117
  426. package/dist/collection/components/fab-button/fab-button.md.css +20 -8
  427. package/dist/collection/components/fab-list/fab-list.css +12 -0
  428. package/dist/collection/components/fab-list/fab-list.js +20 -15
  429. package/dist/collection/components/footer/footer-interface.js +1 -0
  430. package/dist/collection/components/footer/footer.ios.css +33 -6
  431. package/dist/collection/components/footer/footer.js +151 -65
  432. package/dist/collection/components/footer/footer.md.css +40 -0
  433. package/dist/collection/components/gallery/gallery-constants.js +12 -0
  434. package/dist/collection/components/gallery/gallery-interface.js +1 -0
  435. package/dist/collection/components/gallery/gallery.css +15 -0
  436. package/dist/collection/components/gallery/gallery.js +679 -0
  437. package/dist/collection/components/gallery/test/utils.js +100 -0
  438. package/dist/collection/components/gallery-item/gallery-item.css +49 -0
  439. package/dist/collection/components/gallery-item/gallery-item.js +99 -0
  440. package/dist/collection/components/grid/grid.css +12 -0
  441. package/dist/collection/components/grid/grid.js +15 -9
  442. package/dist/collection/components/header/header-interface.js +1 -0
  443. package/dist/collection/components/header/header.ionic.css +250 -0
  444. package/dist/collection/components/header/header.ios.css +178 -133
  445. package/dist/collection/components/header/header.js +202 -70
  446. package/dist/collection/components/header/header.md.css +199 -9
  447. package/dist/collection/components/header/header.utils.js +6 -13
  448. package/dist/collection/components/img/img.js +16 -34
  449. package/dist/collection/components/infinite-scroll/infinite-scroll.js +164 -76
  450. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +12 -0
  451. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +19 -30
  452. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +12 -0
  453. package/dist/collection/components/input/input.ionic.css +891 -0
  454. package/dist/collection/components/input/input.ios.css +247 -191
  455. package/dist/collection/components/input/input.js +340 -357
  456. package/dist/collection/components/input/input.md.css +234 -285
  457. package/dist/collection/components/input-otp/input-otp.ionic.css +371 -0
  458. package/dist/collection/components/input-otp/input-otp.ios.css +105 -60
  459. package/dist/collection/components/input-otp/input-otp.js +437 -432
  460. package/dist/collection/components/input-otp/input-otp.md.css +105 -60
  461. package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +78 -0
  462. package/dist/collection/components/input-password-toggle/input-password-toggle.js +60 -37
  463. package/dist/collection/components/input-password-toggle/input-password-toggle.native.css +61 -0
  464. package/dist/collection/components/item/item.ionic.css +496 -0
  465. package/dist/collection/components/item/item.ios.css +120 -80
  466. package/dist/collection/components/item/item.js +102 -113
  467. package/dist/collection/components/item/item.md.css +131 -79
  468. package/dist/collection/components/item-divider/item-divider.ios.css +18 -0
  469. package/dist/collection/components/item-divider/item-divider.js +21 -23
  470. package/dist/collection/components/item-divider/item-divider.md.css +18 -0
  471. package/dist/collection/components/item-group/item-group.ios.css +12 -0
  472. package/dist/collection/components/item-group/item-group.js +13 -7
  473. package/dist/collection/components/item-group/item-group.md.css +12 -0
  474. package/dist/collection/components/item-option/item-option.ionic.css +277 -0
  475. package/dist/collection/components/item-option/item-option.ios.css +136 -29
  476. package/dist/collection/components/item-option/item-option.js +92 -56
  477. package/dist/collection/components/item-option/item-option.md.css +136 -29
  478. package/dist/collection/components/item-options/item-options.ionic.css +221 -0
  479. package/dist/collection/components/item-options/item-options.ios.css +77 -34
  480. package/dist/collection/components/item-options/item-options.js +20 -17
  481. package/dist/collection/components/item-options/item-options.md.css +77 -34
  482. package/dist/collection/components/item-sliding/item-sliding.ionic.css +211 -0
  483. package/dist/collection/components/item-sliding/item-sliding.js +441 -61
  484. package/dist/collection/components/item-sliding/{item-sliding.css → item-sliding.native.css} +84 -9
  485. package/dist/collection/components/item-sliding/test/test.utils.js +13 -0
  486. package/dist/collection/components/label/label.ios.css +18 -0
  487. package/dist/collection/components/label/label.js +15 -32
  488. package/dist/collection/components/label/label.md.css +18 -0
  489. package/dist/collection/components/list/list.ionic.css +212 -0
  490. package/dist/collection/components/list/list.ios.css +54 -14
  491. package/dist/collection/components/list/list.js +55 -19
  492. package/dist/collection/components/list/list.md.css +56 -16
  493. package/dist/collection/components/list-header/list-header.ionic.css +190 -0
  494. package/dist/collection/components/list-header/list-header.ios.css +82 -38
  495. package/dist/collection/components/list-header/list-header.js +11 -18
  496. package/dist/collection/components/list-header/list-header.md.css +82 -38
  497. package/dist/collection/components/loading/loading.ios.css +13 -1
  498. package/dist/collection/components/loading/loading.js +62 -143
  499. package/dist/collection/components/loading/loading.md.css +13 -1
  500. package/dist/collection/components/menu/menu.ios.css +15 -3
  501. package/dist/collection/components/menu/menu.js +71 -108
  502. package/dist/collection/components/menu/menu.md.css +15 -3
  503. package/dist/collection/components/menu-button/menu-button.ionic.css +236 -0
  504. package/dist/collection/components/menu-button/menu-button.ios.css +48 -14
  505. package/dist/collection/components/menu-button/menu-button.js +45 -38
  506. package/dist/collection/components/menu-button/menu-button.md.css +49 -15
  507. package/dist/collection/components/menu-toggle/menu-toggle.js +21 -25
  508. package/dist/collection/components/modal/animations/ionic.enter.js +40 -0
  509. package/dist/collection/components/modal/animations/ionic.leave.js +28 -0
  510. package/dist/collection/components/modal/animations/ios.enter.js +1 -1
  511. package/dist/collection/components/modal/animations/md.enter.js +1 -1
  512. package/dist/collection/components/modal/animations/sheet.js +8 -2
  513. package/dist/collection/components/modal/gestures/sheet.js +86 -32
  514. package/dist/collection/components/modal/gestures/swipe-to-close.js +3 -15
  515. package/dist/collection/components/modal/modal.ionic.css +255 -0
  516. package/dist/collection/components/modal/modal.ios.css +178 -70
  517. package/dist/collection/components/modal/modal.js +272 -404
  518. package/dist/collection/components/modal/modal.md.css +178 -70
  519. package/dist/collection/components/modal/safe-area-utils.js +7 -6
  520. package/dist/collection/components/modal/test/fixtures.js +0 -3
  521. package/dist/collection/components/nav/nav.css +7 -1
  522. package/dist/collection/components/nav/nav.js +256 -72
  523. package/dist/collection/components/nav/view-controller.js +1 -7
  524. package/dist/collection/components/nav-link/nav-link.js +14 -21
  525. package/dist/collection/components/note/note.ios.css +12 -0
  526. package/dist/collection/components/note/note.js +11 -14
  527. package/dist/collection/components/note/note.md.css +12 -0
  528. package/dist/collection/components/picker/picker.ios.css +15 -3
  529. package/dist/collection/components/picker/picker.js +398 -403
  530. package/dist/collection/components/picker/picker.md.css +15 -3
  531. package/dist/collection/components/picker-column/picker-column.css +9 -5
  532. package/dist/collection/components/picker-column/picker-column.js +409 -418
  533. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +6 -0
  534. package/dist/collection/components/picker-column-option/picker-column-option.js +42 -38
  535. package/dist/collection/components/picker-column-option/picker-column-option.md.css +7 -6
  536. package/dist/collection/components/picker-legacy/animations/ios.enter.js +27 -0
  537. package/dist/collection/components/picker-legacy/animations/ios.leave.js +23 -0
  538. package/dist/collection/components/picker-legacy/picker-interface.js +1 -0
  539. package/dist/collection/components/picker-legacy/picker.ios.css +312 -0
  540. package/dist/collection/components/picker-legacy/picker.js +891 -0
  541. package/dist/collection/components/picker-legacy/picker.md.css +299 -0
  542. package/dist/collection/components/picker-legacy-column/picker-column.ios.css +243 -0
  543. package/dist/collection/components/picker-legacy-column/picker-column.js +422 -0
  544. package/dist/collection/components/picker-legacy-column/picker-column.md.css +234 -0
  545. package/dist/collection/components/picker-legacy-column/test/test.utils.js +43 -0
  546. package/dist/collection/components/popover/animations/ios.enter.js +2 -1
  547. package/dist/collection/components/popover/animations/md.enter.js +2 -1
  548. package/dist/collection/components/popover/popover.ionic.css +290 -0
  549. package/dist/collection/components/popover/popover.ios.css +15 -2
  550. package/dist/collection/components/popover/popover.js +199 -313
  551. package/dist/collection/components/popover/popover.md.css +15 -2
  552. package/dist/collection/components/popover/test/fixture.js +0 -1
  553. package/dist/collection/components/popover/utils.js +6 -4
  554. package/dist/collection/components/progress-bar/progress-bar.ionic.css +287 -0
  555. package/dist/collection/components/progress-bar/progress-bar.ios.css +48 -17
  556. package/dist/collection/components/progress-bar/progress-bar.js +65 -33
  557. package/dist/collection/components/progress-bar/progress-bar.md.css +48 -17
  558. package/dist/collection/components/radio/radio.ionic.css +422 -0
  559. package/dist/collection/components/radio/radio.ios.css +207 -102
  560. package/dist/collection/components/radio/radio.js +77 -108
  561. package/dist/collection/components/radio/radio.md.css +207 -102
  562. package/dist/collection/components/radio-group/radio-group.ionic.css +119 -0
  563. package/dist/collection/components/radio-group/radio-group.ios.css +43 -19
  564. package/dist/collection/components/radio-group/radio-group.js +113 -107
  565. package/dist/collection/components/radio-group/radio-group.md.css +43 -19
  566. package/dist/collection/components/radio-group/test/fixtures.js +0 -2
  567. package/dist/collection/components/range/range.ionic.css +567 -0
  568. package/dist/collection/components/range/range.ios.css +128 -85
  569. package/dist/collection/components/range/range.js +247 -305
  570. package/dist/collection/components/range/range.md.css +128 -85
  571. package/dist/collection/components/refresher/refresher.ios.css +14 -1
  572. package/dist/collection/components/refresher/refresher.js +88 -117
  573. package/dist/collection/components/refresher/refresher.md.css +15 -2
  574. package/dist/collection/components/refresher-content/refresher-content.js +31 -47
  575. package/dist/collection/components/reorder/reorder.ios.css +6 -0
  576. package/dist/collection/components/reorder/reorder.js +33 -7
  577. package/dist/collection/components/reorder/reorder.md.css +6 -0
  578. package/dist/collection/components/reorder-group/reorder-group.css +6 -0
  579. package/dist/collection/components/reorder-group/reorder-group.js +22 -47
  580. package/dist/collection/components/ripple-effect/{ripple-effect.css → ripple-effect.common.css} +7 -1
  581. package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +215 -0
  582. package/dist/collection/components/ripple-effect/ripple-effect.js +26 -17
  583. package/dist/collection/components/route/route.js +14 -39
  584. package/dist/collection/components/route-redirect/route-redirect.js +0 -31
  585. package/dist/collection/components/router/router.js +37 -37
  586. package/dist/collection/components/router/utils/dom.js +7 -25
  587. package/dist/collection/components/router/utils/matching.js +9 -7
  588. package/dist/collection/components/router/utils/parser.js +1 -1
  589. package/dist/collection/components/router/utils/path.js +1 -0
  590. package/dist/collection/components/router-link/router-link.css +8 -2
  591. package/dist/collection/components/router-link/router-link.js +19 -40
  592. package/dist/collection/components/router-outlet/router-outlet.css +7 -1
  593. package/dist/collection/components/router-outlet/router-outlet.js +25 -83
  594. package/dist/collection/components/row/row.css +16 -0
  595. package/dist/collection/components/row/row.js +9 -2
  596. package/dist/collection/components/searchbar/searchbar.ionic.css +622 -0
  597. package/dist/collection/components/searchbar/searchbar.ios.css +56 -18
  598. package/dist/collection/components/searchbar/searchbar.js +380 -321
  599. package/dist/collection/components/searchbar/searchbar.md.css +56 -18
  600. package/dist/collection/components/segment/segment.ionic.css +115 -0
  601. package/dist/collection/components/segment/segment.ios.css +45 -2
  602. package/dist/collection/components/segment/segment.js +94 -126
  603. package/dist/collection/components/segment/segment.md.css +45 -2
  604. package/dist/collection/components/segment-button/segment-button.ionic.css +352 -0
  605. package/dist/collection/components/segment-button/segment-button.ios.css +146 -105
  606. package/dist/collection/components/segment-button/segment-button.js +46 -49
  607. package/dist/collection/components/segment-button/segment-button.md.css +148 -107
  608. package/dist/collection/components/segment-content/segment-content.js +1 -1
  609. package/dist/collection/components/segment-view/segment-view.ios.css +6 -0
  610. package/dist/collection/components/segment-view/segment-view.js +27 -28
  611. package/dist/collection/components/segment-view/segment-view.md.css +6 -0
  612. package/dist/collection/components/select/select.ionic.css +809 -0
  613. package/dist/collection/components/select/select.ios.css +351 -206
  614. package/dist/collection/components/select/select.js +444 -431
  615. package/dist/collection/components/select/select.md.css +383 -230
  616. package/dist/collection/components/select-modal/select-modal.ionic.css +257 -0
  617. package/dist/collection/components/select-modal/select-modal.ios.css +293 -45
  618. package/dist/collection/components/select-modal/select-modal.js +79 -37
  619. package/dist/collection/components/select-modal/select-modal.md.css +273 -43
  620. package/dist/collection/components/select-modal/test/fixtures.js +1 -8
  621. package/dist/collection/components/select-option/select-option.js +15 -48
  622. package/dist/collection/components/select-popover/select-popover.ionic.css +255 -0
  623. package/dist/collection/components/select-popover/select-popover.ios.css +188 -124
  624. package/dist/collection/components/select-popover/select-popover.js +37 -44
  625. package/dist/collection/components/select-popover/select-popover.md.css +228 -47
  626. package/dist/collection/components/select-popover/test/fixtures.js +1 -8
  627. package/dist/collection/components/skeleton-text/skeleton-text.css +6 -0
  628. package/dist/collection/components/skeleton-text/skeleton-text.js +15 -15
  629. package/dist/collection/components/spinner/{spinner.css → spinner.ionic.css} +78 -10
  630. package/dist/collection/components/spinner/spinner.js +55 -26
  631. package/dist/collection/components/spinner/spinner.native.css +199 -0
  632. package/dist/collection/components/split-pane/split-pane.ios.css +20 -2
  633. package/dist/collection/components/split-pane/split-pane.js +28 -33
  634. package/dist/collection/components/split-pane/split-pane.md.css +20 -2
  635. package/dist/collection/components/tab/tab.js +10 -17
  636. package/dist/collection/components/tab-bar/tab-bar.ionic.css +249 -0
  637. package/dist/collection/components/tab-bar/tab-bar.ios.css +86 -43
  638. package/dist/collection/components/tab-bar/tab-bar.js +190 -44
  639. package/dist/collection/components/tab-bar/tab-bar.md.css +86 -43
  640. package/dist/collection/components/tab-button/tab-button.ionic.css +373 -0
  641. package/dist/collection/components/tab-button/tab-button.ios.css +171 -95
  642. package/dist/collection/components/tab-button/tab-button.js +74 -68
  643. package/dist/collection/components/tab-button/tab-button.md.css +137 -93
  644. package/dist/collection/components/tabs/tabs.css +7 -1
  645. package/dist/collection/components/tabs/tabs.js +23 -33
  646. package/dist/collection/components/text/text.css +6 -0
  647. package/dist/collection/components/text/text.js +7 -12
  648. package/dist/collection/components/textarea/textarea.ionic.css +898 -0
  649. package/dist/collection/components/textarea/textarea.ios.css +329 -221
  650. package/dist/collection/components/textarea/textarea.js +334 -302
  651. package/dist/collection/components/textarea/textarea.md.css +358 -231
  652. package/dist/collection/components/thumbnail/thumbnail.css +6 -0
  653. package/dist/collection/components/thumbnail/thumbnail.js +9 -2
  654. package/dist/collection/components/title/title.ionic.css +127 -0
  655. package/dist/collection/components/title/title.ios.css +32 -4
  656. package/dist/collection/components/title/title.js +13 -23
  657. package/dist/collection/components/title/title.md.css +39 -4
  658. package/dist/collection/components/toast/animations/utils.js +1 -1
  659. package/dist/collection/components/toast/toast.ionic.css +394 -0
  660. package/dist/collection/components/toast/toast.ios.css +84 -45
  661. package/dist/collection/components/toast/toast.js +178 -232
  662. package/dist/collection/components/toast/toast.md.css +84 -45
  663. package/dist/collection/components/toggle/toggle.ionic.css +512 -0
  664. package/dist/collection/components/toggle/toggle.ios.css +247 -127
  665. package/dist/collection/components/toggle/toggle.js +177 -175
  666. package/dist/collection/components/toggle/toggle.md.css +245 -127
  667. package/dist/collection/components/toolbar/test/image.svg +1 -0
  668. package/dist/collection/components/toolbar/toolbar.ionic.css +249 -0
  669. package/dist/collection/components/toolbar/toolbar.ios.css +90 -47
  670. package/dist/collection/components/toolbar/toolbar.js +222 -25
  671. package/dist/collection/components/toolbar/toolbar.md.css +90 -47
  672. package/dist/collection/global/config.js +6 -4
  673. package/dist/collection/global/ionic-global.js +242 -20
  674. package/dist/collection/index.js +1 -1
  675. package/dist/collection/utils/animation/animation.js +3 -3
  676. package/dist/collection/utils/config.js +4 -5
  677. package/dist/collection/utils/css-value-validation.js +39 -0
  678. package/dist/collection/utils/focus-controller/index.js +1 -1
  679. package/dist/collection/utils/focus-trap.js +16 -5
  680. package/dist/collection/utils/focus-visible.js +22 -0
  681. package/dist/collection/utils/forms/clear-button-press-controller.js +40 -0
  682. package/dist/collection/utils/forms/index.js +1 -1
  683. package/dist/collection/utils/forms/validity.js +31 -0
  684. package/dist/collection/utils/framework-delegate.js +9 -5
  685. package/dist/collection/utils/gesture/gesture-controller.js +8 -15
  686. package/dist/collection/utils/gesture/index.js +2 -10
  687. package/dist/collection/utils/hardware-back-button.js +18 -3
  688. package/dist/collection/utils/helpers.js +72 -5
  689. package/dist/collection/utils/input-shims/hacks/scroll-assist.js +5 -4
  690. package/dist/collection/utils/input-shims/hacks/scroll-data.js +2 -1
  691. package/dist/collection/utils/keyboard/keyboard-controller.js +8 -6
  692. package/dist/collection/utils/keyboard/keyboard.js +1 -1
  693. package/dist/collection/utils/logging/index.js +4 -23
  694. package/dist/collection/utils/media.js +1 -0
  695. package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
  696. package/dist/collection/utils/menu-controller/animations/push.js +2 -1
  697. package/dist/collection/utils/menu-controller/animations/reveal.js +2 -1
  698. package/dist/collection/utils/menu-controller/index.js +2 -1
  699. package/dist/collection/utils/native/haptic.js +3 -2
  700. package/dist/collection/utils/native/keyboard.js +2 -2
  701. package/dist/collection/utils/native/status-bar.js +1 -1
  702. package/dist/collection/utils/overlay-control-label.js +13 -11
  703. package/dist/collection/utils/overlays.js +312 -45
  704. package/dist/collection/utils/platform.js +5 -4
  705. package/dist/collection/utils/rtl/dir.js +3 -2
  706. package/dist/collection/utils/sanitization/index.js +2 -2
  707. package/dist/collection/utils/scroll-hide-controller.js +178 -0
  708. package/dist/collection/utils/select-option-render.js +2 -1
  709. package/dist/collection/utils/slot-mutation-controller.js +2 -1
  710. package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
  711. package/dist/collection/utils/test/playwright/drag-element.js +35 -11
  712. package/dist/collection/utils/test/playwright/generator.js +51 -25
  713. package/dist/collection/utils/test/playwright/page/event-spy.js +12 -11
  714. package/dist/collection/utils/test/playwright/page/utils/goto.js +15 -5
  715. package/dist/collection/utils/test/playwright/page/utils/set-content.js +27 -4
  716. package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +3 -2
  717. package/dist/collection/utils/test/press-keys.js +17 -10
  718. package/dist/collection/utils/theme.js +26 -7
  719. package/dist/collection/utils/transition/ios.transition.js +14 -9
  720. package/dist/collection/utils/transition/md.transition.js +4 -3
  721. package/dist/docs.json +10038 -534
  722. package/dist/esm/{animation-CGFdmGk9.js → animation-BsVixxLP.js} +5 -5
  723. package/dist/esm/{app-globals-CYmMeGdU.js → app-globals-rPvWQFXp.js} +1 -1
  724. package/dist/esm/{button-active-BDOsVAiZ.js → button-active-BS8YgJRD.js} +3 -3
  725. package/dist/esm/{capacitor-CFERIeaU.js → capacitor-BnXrCBvt.js} +1 -1
  726. package/dist/esm/caret-down-D1t981Ih.js +6 -0
  727. package/dist/esm/caret-left-fIOYmaqA.js +6 -0
  728. package/dist/esm/caret-right-BYSs-jZz.js +6 -0
  729. package/dist/esm/clear-button-press-controller-Ci6Q_x5-.js +43 -0
  730. package/dist/esm/{config-DWCzVL3Y.js → config-BwKpO3Is.js} +4 -5
  731. package/dist/esm/{dir-Dojwmvde.js → dir-o8OKV5aD.js} +3 -2
  732. package/dist/esm/{focus-visible-BmVRXR1y.js → focus-visible-vXpMhGrs.js} +23 -1
  733. package/dist/esm/{format-Dcwga61t.js → format-2WlZcMvG.js} +31 -41
  734. package/dist/esm/{framework-delegate-BHTU2Ip9.js → framework-delegate-P5K_3uYw.js} +10 -6
  735. package/dist/esm/{gesture-controller-TXPDHL13.js → gesture-controller-BTEOs1at.js} +8 -15
  736. package/dist/esm/{haptic-Cq4UAeka.js → haptic-ByW74Ow9.js} +4 -3
  737. package/dist/esm/{helpers-CAGf8Wgp.js → helpers-ChPZH7zh.js} +74 -8
  738. package/dist/esm/{index-BvabGprD.js → index-B4Kq2YNk.js} +2 -1
  739. package/dist/esm/{index-DcPaH5uL.js → index-Bck1OwMs.js} +3 -9
  740. package/dist/esm/{index-ChhhtsGZ.js → index-C0EQceqV.js} +66 -34
  741. package/dist/esm/{index-Clc-28O1.js → index-C7EAbm0C.js} +5 -4
  742. package/dist/esm/{index-CqneaaGd.js → index-C7F1yJyV.js} +13 -12
  743. package/dist/esm/{index-WlteAIqz.js → index-CXSPjEca.js} +5 -5
  744. package/dist/esm/{index-CKM1DdGm.js → index-Mq5pCWmZ.js} +3 -3
  745. package/dist/esm/{index-T0JxBI8V.js → index-niemeDYi.js} +2 -2
  746. package/dist/esm/index.js +17 -18
  747. package/dist/esm/{input-shims-B8sfni1e.js → input-shims-CM5m0K8T.js} +15 -12
  748. package/dist/esm/input.utils-DhJNJPiU.js +147 -0
  749. package/dist/esm/ion-accordion_2.entry.js +383 -379
  750. package/dist/esm/ion-action-sheet.entry.js +87 -179
  751. package/dist/esm/ion-alert.entry.js +126 -251
  752. package/dist/esm/ion-app_8.entry.js +607 -460
  753. package/dist/esm/ion-avatar_3.entry.js +125 -19
  754. package/dist/esm/ion-back-button.entry.js +50 -65
  755. package/dist/esm/ion-backdrop.entry.js +22 -23
  756. package/dist/esm/ion-breadcrumb_2.entry.js +170 -212
  757. package/dist/esm/ion-button_2.entry.js +118 -153
  758. package/dist/esm/ion-card_5.entry.js +80 -110
  759. package/dist/esm/ion-checkbox.entry.js +130 -164
  760. package/dist/esm/ion-chip.entry.js +56 -21
  761. package/dist/esm/ion-col_3.entry.js +61 -186
  762. package/dist/esm/ion-datetime-button.entry.js +248 -256
  763. package/dist/esm/ion-datetime_3.entry.js +3238 -0
  764. package/dist/esm/ion-divider.entry.js +49 -0
  765. package/dist/esm/ion-fab_3.entry.js +113 -155
  766. package/dist/esm/ion-gallery-item.entry.js +57 -0
  767. package/dist/esm/ion-gallery.entry.js +606 -0
  768. package/dist/esm/ion-img.entry.js +17 -35
  769. package/dist/esm/ion-infinite-scroll_2.entry.js +157 -109
  770. package/dist/esm/ion-input-otp.entry.js +437 -435
  771. package/dist/esm/ion-input-password-toggle.entry.js +64 -40
  772. package/dist/esm/ion-input.entry.js +310 -349
  773. package/dist/esm/ion-item-option_3.entry.js +512 -137
  774. package/dist/esm/ion-item_8.entry.js +190 -218
  775. package/dist/esm/ion-loading.entry.js +69 -152
  776. package/dist/esm/ion-menu_3.entry.js +138 -182
  777. package/dist/esm/ion-modal.entry.js +459 -529
  778. package/dist/esm/ion-nav_2.entry.js +164 -104
  779. package/dist/esm/ion-picker-column-option.entry.js +40 -40
  780. package/dist/esm/ion-picker-column.entry.js +410 -422
  781. package/dist/esm/ion-picker.entry.js +401 -406
  782. package/dist/esm/ion-popover.entry.js +212 -324
  783. package/dist/esm/ion-progress-bar.entry.js +48 -36
  784. package/dist/esm/ion-radio_2.entry.js +162 -217
  785. package/dist/esm/ion-range.entry.js +251 -309
  786. package/dist/esm/ion-refresher_2.entry.js +122 -175
  787. package/dist/esm/ion-reorder_2.entry.js +54 -60
  788. package/dist/esm/ion-ripple-effect.entry.js +26 -18
  789. package/dist/esm/ion-route_4.entry.js +76 -179
  790. package/dist/esm/ion-searchbar.entry.js +331 -308
  791. package/dist/esm/ion-segment-content.entry.js +2 -2
  792. package/dist/esm/ion-segment-view.entry.js +27 -28
  793. package/dist/esm/ion-segment_2.entry.js +141 -177
  794. package/dist/esm/ion-select-modal.entry.js +70 -50
  795. package/dist/esm/ion-select_3.entry.js +429 -507
  796. package/dist/esm/ion-spinner.entry.js +36 -28
  797. package/dist/esm/ion-split-pane.entry.js +25 -34
  798. package/dist/esm/ion-tab-bar_2.entry.js +179 -116
  799. package/dist/esm/ion-tab_2.entry.js +30 -55
  800. package/dist/esm/ion-text.entry.js +7 -13
  801. package/dist/esm/ion-textarea.entry.js +309 -302
  802. package/dist/esm/ion-toast.entry.js +149 -244
  803. package/dist/esm/ion-toggle.entry.js +187 -184
  804. package/dist/esm/ionic-global-BJDU78B6.js +508 -0
  805. package/dist/esm/ionic.js +5 -5
  806. package/dist/esm/{ios.transition-DXRCmcbC.js → ios.transition-6oGu53GR.js} +21 -15
  807. package/dist/esm/{item-multiple-inputs-rU8VaNNg.js → item-multiple-inputs-C6onMFOo.js} +1 -1
  808. package/dist/esm/{keyboard-Cj8mLJeq.js → keyboard-XukEYIFf.js} +5 -4
  809. package/dist/esm/{keyboard-DAF8GNJ9.js → keyboard-x-uHYVoq.js} +3 -3
  810. package/dist/esm/list-Dhi5xtNS.js +6 -0
  811. package/dist/esm/loader.js +5 -5
  812. package/dist/esm/{md.transition-BMngO4i_.js → md.transition-Dy5HxiSE.js} +11 -9
  813. package/dist/esm/notch-controller-BYB7mUMg.js +153 -0
  814. package/dist/esm/{overlay-control-label-BSQPZ79H.js → overlay-control-label-CODBQrPj.js} +13 -11
  815. package/dist/esm/{overlays-CPmIs9Ls.js → overlays-C3YvaMgX.js} +333 -57
  816. package/dist/esm/scroll-hide-controller-B3MRYNXh.js +342 -0
  817. package/dist/esm/{select-option-render-C4m76VGH.js → select-option-render-BlKZ2H83.js} +4 -3
  818. package/dist/esm/{status-tap-CHB7KwIb.js → status-tap-DK-ylvU7.js} +5 -4
  819. package/dist/esm/{swipe-back-C9HW1bug.js → swipe-back-DFICtpMC.js} +6 -5
  820. package/dist/esm/theme-DaJxRxSQ.js +67 -0
  821. package/dist/esm/validity-BjW8SOqw.js +48 -0
  822. package/dist/esm/x-BDqjX7Z_.js +6 -0
  823. package/dist/html.html-data.json +2690 -123
  824. package/dist/ionic/index.esm.js +1 -1
  825. package/dist/ionic/ionic.esm.js +1 -1
  826. package/dist/ionic/p--sroV-k-.js +4 -0
  827. package/dist/ionic/p-0166d6e5.entry.js +4 -0
  828. package/dist/ionic/p-0a0a66e2.entry.js +4 -0
  829. package/dist/ionic/p-0ac15b5f.entry.js +4 -0
  830. package/dist/ionic/p-0c636ad3.entry.js +4 -0
  831. package/dist/ionic/p-126031d2.entry.js +4 -0
  832. package/dist/ionic/p-1a609156.entry.js +4 -0
  833. package/dist/ionic/p-1b473bad.entry.js +4 -0
  834. package/dist/ionic/p-1c1c18da.entry.js +4 -0
  835. package/dist/ionic/p-1ce65194.entry.js +4 -0
  836. package/dist/ionic/p-1febf200.entry.js +4 -0
  837. package/dist/ionic/p-2016c1c0.entry.js +4 -0
  838. package/dist/ionic/p-2365483a.entry.js +4 -0
  839. package/dist/ionic/p-296226f1.entry.js +4 -0
  840. package/dist/ionic/p-2a54aec2.entry.js +4 -0
  841. package/dist/ionic/p-2bf60b77.entry.js +4 -0
  842. package/dist/ionic/p-2e0184c0.entry.js +4 -0
  843. package/dist/ionic/p-2e1d650a.entry.js +4 -0
  844. package/dist/ionic/p-316eed75.entry.js +4 -0
  845. package/dist/ionic/p-31a0c9c2.entry.js +4 -0
  846. package/dist/ionic/p-40a21a22.entry.js +4 -0
  847. package/dist/ionic/p-431bc3ce.entry.js +4 -0
  848. package/dist/ionic/p-51542c69.entry.js +4 -0
  849. package/dist/ionic/p-5dedd699.entry.js +4 -0
  850. package/dist/ionic/p-68e453f7.entry.js +4 -0
  851. package/dist/ionic/p-711ba315.entry.js +4 -0
  852. package/dist/ionic/p-731d11e1.entry.js +4 -0
  853. package/dist/ionic/p-75c7595c.entry.js +4 -0
  854. package/dist/ionic/p-76232f5f.entry.js +4 -0
  855. package/dist/ionic/p-7cbf17f0.entry.js +4 -0
  856. package/dist/ionic/p-7f59020c.entry.js +4 -0
  857. package/dist/ionic/p-7k7Q1A38.js +4 -0
  858. package/dist/ionic/p-8303462c.entry.js +4 -0
  859. package/dist/ionic/p-9db78e5c.entry.js +4 -0
  860. package/dist/ionic/p-B4Kq2YNk.js +4 -0
  861. package/dist/ionic/p-BDqjX7Z_.js +4 -0
  862. package/dist/ionic/p-BFhQ1N-L.js +4 -0
  863. package/dist/ionic/p-BG7tpRhR.js +4 -0
  864. package/dist/ionic/p-BITyMTKr.js +4 -0
  865. package/dist/ionic/p-BRPONI7N.js +4 -0
  866. package/dist/ionic/p-BTEOs1at.js +4 -0
  867. package/dist/ionic/p-BVdSuKmt.js +4 -0
  868. package/dist/ionic/p-BYRVyMu9.js +4 -0
  869. package/dist/ionic/p-BYSs-jZz.js +4 -0
  870. package/dist/ionic/p-BjW8SOqw.js +4 -0
  871. package/dist/ionic/p-Bpx1lBiP.js +4 -0
  872. package/dist/ionic/p-BwKpO3Is.js +4 -0
  873. package/dist/ionic/p-C-BLhfUi.js +4 -0
  874. package/dist/ionic/p-C-aO35cw.js +4 -0
  875. package/dist/ionic/p-C0EQceqV.js +5 -0
  876. package/dist/ionic/p-CDrQfM-I.js +4 -0
  877. package/dist/ionic/p-CODBQrPj.js +4 -0
  878. package/dist/ionic/p-CTSaffvS.js +4 -0
  879. package/dist/ionic/p-CaM5HwzM.js +4 -0
  880. package/dist/ionic/p-CgaW5Zy8.js +4 -0
  881. package/dist/ionic/p-Cipl19Qe.js +4 -0
  882. package/dist/ionic/p-CnBfCmL2.js +4 -0
  883. package/dist/ionic/p-D-Xit5Ye.js +4 -0
  884. package/dist/ionic/p-D1t981Ih.js +4 -0
  885. package/dist/ionic/p-D7LIC84Z.js +4 -0
  886. package/dist/ionic/p-D844sgjq.js +4 -0
  887. package/dist/ionic/p-DWDKFjrH.js +4 -0
  888. package/dist/ionic/p-DaJxRxSQ.js +4 -0
  889. package/dist/ionic/p-Dhi5xtNS.js +4 -0
  890. package/dist/ionic/p-DhyWlGap.js +4 -0
  891. package/dist/ionic/p-DiyY-i-5.js +4 -0
  892. package/dist/ionic/p-DrxPmT9E.js +4 -0
  893. package/dist/ionic/p-YIsE5bNG.js +4 -0
  894. package/dist/ionic/p-a37444b3.entry.js +4 -0
  895. package/dist/ionic/p-a9df0ccf.entry.js +4 -0
  896. package/dist/ionic/p-ac3af8af.entry.js +4 -0
  897. package/dist/ionic/p-b25f3aba.entry.js +4 -0
  898. package/dist/ionic/p-b3da2cc7.entry.js +4 -0
  899. package/dist/ionic/p-b4533070.entry.js +4 -0
  900. package/dist/ionic/p-b4901bce.entry.js +4 -0
  901. package/dist/ionic/p-bb7bb4fd.entry.js +4 -0
  902. package/dist/ionic/p-be06def7.entry.js +4 -0
  903. package/dist/ionic/p-c0983eac.entry.js +4 -0
  904. package/dist/ionic/p-c4ebdfd2.entry.js +4 -0
  905. package/dist/ionic/p-c4ed1e18.entry.js +4 -0
  906. package/dist/ionic/p-d9ac7a0d.entry.js +4 -0
  907. package/dist/ionic/p-dc8a8505.entry.js +4 -0
  908. package/dist/ionic/p-ddc41dbb.entry.js +4 -0
  909. package/dist/ionic/p-de4e8418.entry.js +4 -0
  910. package/dist/ionic/p-df642ef5.entry.js +4 -0
  911. package/dist/ionic/p-e086f8c3.entry.js +4 -0
  912. package/dist/ionic/p-edd8f490.entry.js +4 -0
  913. package/dist/ionic/p-f0968c91.entry.js +4 -0
  914. package/dist/ionic/p-f6768728.entry.js +4 -0
  915. package/dist/ionic/p-fIOYmaqA.js +4 -0
  916. package/dist/ionic/p-fc726f4a.entry.js +4 -0
  917. package/dist/ionic/p-ff74cf5d.entry.js +4 -0
  918. package/dist/ionic/p-i6iV8hMy.js +4 -0
  919. package/dist/ionic/p-nUlpIttM.js +4 -0
  920. package/dist/ionic/p-o8OKV5aD.js +4 -0
  921. package/dist/ionic/p-vXpMhGrs.js +4 -0
  922. package/dist/ionic/p-zRFin7iz.js +4 -0
  923. package/dist/ionic/p-zn4qAQ_d.js +4 -0
  924. package/dist/types/components/accordion/accordion.d.ts +6 -3
  925. package/dist/types/components/accordion-group/accordion-group.d.ts +12 -1
  926. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +3 -7
  927. package/dist/types/components/action-sheet/action-sheet.d.ts +3 -2
  928. package/dist/types/components/alert/alert-interface.d.ts +3 -7
  929. package/dist/types/components/alert/alert.d.ts +3 -2
  930. package/dist/types/components/app/app.d.ts +4 -5
  931. package/dist/types/components/avatar/avatar.d.ts +32 -0
  932. package/dist/types/components/back-button/back-button.d.ts +2 -1
  933. package/dist/types/components/backdrop/backdrop.d.ts +4 -0
  934. package/dist/types/components/badge/badge.d.ts +34 -1
  935. package/dist/types/components/breadcrumb/breadcrumb.d.ts +4 -1
  936. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
  937. package/dist/types/components/button/button.d.ts +23 -8
  938. package/dist/types/components/buttons/buttons.d.ts +5 -1
  939. package/dist/types/components/card/card.d.ts +8 -1
  940. package/dist/types/components/card-content/card-content.d.ts +2 -1
  941. package/dist/types/components/card-header/card-header.d.ts +3 -2
  942. package/dist/types/components/card-subtitle/card-subtitle.d.ts +2 -1
  943. package/dist/types/components/card-title/card-title.d.ts +2 -1
  944. package/dist/types/components/checkbox/checkbox.d.ts +14 -4
  945. package/dist/types/components/chip/chip.d.ts +26 -1
  946. package/dist/types/components/col/col.d.ts +52 -5
  947. package/dist/types/components/content/content.d.ts +3 -0
  948. package/dist/types/components/datetime/datetime.d.ts +26 -1
  949. package/dist/types/components/datetime/utils/data.d.ts +5 -5
  950. package/dist/types/components/datetime-button/datetime-button.d.ts +2 -1
  951. package/dist/types/components/divider/divider.d.ts +20 -0
  952. package/dist/types/components/fab/fab.d.ts +4 -0
  953. package/dist/types/components/fab-button/fab-button.d.ts +5 -3
  954. package/dist/types/components/fab-list/fab-list.d.ts +4 -0
  955. package/dist/types/components/footer/footer-interface.d.ts +1 -0
  956. package/dist/types/components/footer/footer.d.ts +20 -3
  957. package/dist/types/components/gallery/gallery-constants.d.ts +9 -0
  958. package/dist/types/components/gallery/gallery-interface.d.ts +10 -0
  959. package/dist/types/components/gallery/gallery.d.ts +218 -0
  960. package/dist/types/components/gallery/test/utils.d.ts +3 -0
  961. package/dist/types/components/gallery-item/gallery-item.d.ts +33 -0
  962. package/dist/types/components/grid/grid.d.ts +4 -0
  963. package/dist/types/components/header/header-interface.d.ts +1 -0
  964. package/dist/types/components/header/header.d.ts +26 -3
  965. package/dist/types/components/header/header.utils.d.ts +4 -5
  966. package/dist/types/components/img/img.d.ts +2 -1
  967. package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +21 -0
  968. package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +4 -0
  969. package/dist/types/components/input/input.d.ts +40 -17
  970. package/dist/types/components/input-otp/input-otp.d.ts +37 -0
  971. package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +2 -0
  972. package/dist/types/components/item/item.d.ts +11 -4
  973. package/dist/types/components/item-divider/item-divider.d.ts +2 -1
  974. package/dist/types/components/item-group/item-group.d.ts +4 -0
  975. package/dist/types/components/item-option/item-option.d.ts +18 -1
  976. package/dist/types/components/item-options/item-options.d.ts +4 -0
  977. package/dist/types/components/item-sliding/item-sliding.d.ts +47 -1
  978. package/dist/types/components/item-sliding/test/test.utils.d.ts +13 -0
  979. package/dist/types/components/label/label.d.ts +2 -1
  980. package/dist/types/components/list/list.d.ts +15 -1
  981. package/dist/types/components/list-header/list-header.d.ts +2 -1
  982. package/dist/types/components/loading/loading-interface.d.ts +2 -7
  983. package/dist/types/components/loading/loading.d.ts +3 -2
  984. package/dist/types/components/menu/menu.d.ts +3 -0
  985. package/dist/types/components/menu-button/menu-button.d.ts +3 -1
  986. package/dist/types/components/menu-toggle/menu-toggle.d.ts +3 -0
  987. package/dist/types/components/modal/animations/ionic.enter.d.ts +6 -0
  988. package/dist/types/components/modal/animations/ionic.leave.d.ts +6 -0
  989. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  990. package/dist/types/components/modal/modal-interface.d.ts +4 -16
  991. package/dist/types/components/modal/modal.d.ts +15 -12
  992. package/dist/types/components/nav/nav-interface.d.ts +10 -1
  993. package/dist/types/components/nav/nav.d.ts +27 -3
  994. package/dist/types/components/nav-link/nav-link.d.ts +4 -0
  995. package/dist/types/components/note/note.d.ts +2 -1
  996. package/dist/types/components/picker/picker.d.ts +2 -1
  997. package/dist/types/components/picker-column/picker-column.d.ts +2 -1
  998. package/dist/types/components/picker-column-option/picker-column-option.d.ts +4 -0
  999. package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +5 -0
  1000. package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +5 -0
  1001. package/dist/types/components/picker-legacy/picker-interface.d.ts +52 -0
  1002. package/dist/types/components/picker-legacy/picker.d.ts +159 -0
  1003. package/dist/types/components/picker-legacy-column/picker-column.d.ts +46 -0
  1004. package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +9 -0
  1005. package/dist/types/components/popover/popover-interface.d.ts +3 -6
  1006. package/dist/types/components/popover/popover.d.ts +6 -5
  1007. package/dist/types/components/progress-bar/progress-bar.d.ts +10 -1
  1008. package/dist/types/components/radio/radio.d.ts +2 -1
  1009. package/dist/types/components/radio-group/radio-group.d.ts +12 -0
  1010. package/dist/types/components/range/range.d.ts +2 -1
  1011. package/dist/types/components/refresher/refresher.d.ts +2 -1
  1012. package/dist/types/components/refresher-content/refresher-content.d.ts +4 -0
  1013. package/dist/types/components/reorder/reorder.d.ts +9 -0
  1014. package/dist/types/components/reorder-group/reorder-group.d.ts +4 -0
  1015. package/dist/types/components/ripple-effect/ripple-effect.d.ts +4 -0
  1016. package/dist/types/components/route/route.d.ts +5 -1
  1017. package/dist/types/components/router/router.d.ts +4 -0
  1018. package/dist/types/components/router-link/router-link.d.ts +4 -0
  1019. package/dist/types/components/router-outlet/router-outlet.d.ts +4 -8
  1020. package/dist/types/components/row/row.d.ts +4 -0
  1021. package/dist/types/components/searchbar/searchbar.d.ts +57 -11
  1022. package/dist/types/components/segment/segment.d.ts +2 -1
  1023. package/dist/types/components/segment-button/segment-button.d.ts +2 -1
  1024. package/dist/types/components/select/select.d.ts +55 -26
  1025. package/dist/types/components/select-modal/select-modal.d.ts +8 -0
  1026. package/dist/types/components/select-option/select-option.d.ts +7 -4
  1027. package/dist/types/components/select-popover/select-popover.d.ts +3 -0
  1028. package/dist/types/components/skeleton-text/skeleton-text.d.ts +4 -0
  1029. package/dist/types/components/spinner/spinner.d.ts +15 -0
  1030. package/dist/types/components/split-pane/split-pane.d.ts +4 -0
  1031. package/dist/types/components/tab/tab.d.ts +4 -0
  1032. package/dist/types/components/tab-bar/tab-bar-interface.d.ts +1 -0
  1033. package/dist/types/components/tab-bar/tab-bar.d.ts +41 -3
  1034. package/dist/types/components/tab-button/tab-button.d.ts +12 -1
  1035. package/dist/types/components/tabs/tabs.d.ts +3 -0
  1036. package/dist/types/components/text/text.d.ts +2 -1
  1037. package/dist/types/components/textarea/textarea.d.ts +58 -16
  1038. package/dist/types/components/thumbnail/thumbnail.d.ts +4 -0
  1039. package/dist/types/components/title/title.d.ts +4 -0
  1040. package/dist/types/components/toast/animations/utils.d.ts +2 -2
  1041. package/dist/types/components/toast/toast-interface.d.ts +3 -7
  1042. package/dist/types/components/toast/toast.d.ts +19 -2
  1043. package/dist/types/components/toggle/toggle.d.ts +15 -1
  1044. package/dist/types/components/toolbar/toolbar.d.ts +43 -3
  1045. package/dist/types/components.d.ts +2171 -263
  1046. package/dist/types/global/ionic-global.d.ts +28 -2
  1047. package/dist/types/index.d.ts +1 -1
  1048. package/dist/types/interface.d.ts +4 -0
  1049. package/dist/types/utils/config.d.ts +114 -3
  1050. package/dist/types/utils/css-value-validation.d.ts +21 -0
  1051. package/dist/types/utils/focus-trap.d.ts +1 -1
  1052. package/dist/types/utils/focus-visible.d.ts +13 -0
  1053. package/dist/types/utils/forms/clear-button-press-controller.d.ts +20 -0
  1054. package/dist/types/utils/forms/index.d.ts +1 -1
  1055. package/dist/types/utils/forms/validity.d.ts +7 -0
  1056. package/dist/types/utils/helpers.d.ts +22 -0
  1057. package/dist/types/utils/logging/index.d.ts +1 -2
  1058. package/dist/types/utils/overlay-control-label.d.ts +11 -9
  1059. package/dist/types/utils/overlays-interface.d.ts +31 -1
  1060. package/dist/types/utils/overlays.d.ts +10 -12
  1061. package/dist/types/utils/scroll-hide-controller.d.ts +56 -0
  1062. package/dist/types/utils/test/playwright/drag-element.d.ts +16 -3
  1063. package/dist/types/utils/test/playwright/generator.d.ts +31 -2
  1064. package/dist/types/utils/test/playwright/playwright-page.d.ts +1 -1
  1065. package/dist/types/utils/test/playwright/testExpect.d.ts +1 -1
  1066. package/dist/types/utils/theme.d.ts +9 -0
  1067. package/hydrate/index.js +12136 -10495
  1068. package/hydrate/index.mjs +12136 -10495
  1069. package/package.json +17 -56
  1070. package/components/p--m5cCjbK.js +0 -4
  1071. package/components/p-1jI5oW-W.js +0 -4
  1072. package/components/p-8FN7p701.js +0 -4
  1073. package/components/p-B4uHHhPK.js +0 -4
  1074. package/components/p-BMPN55of.js +0 -4
  1075. package/components/p-BNJOu1Q2.js +0 -4
  1076. package/components/p-BOvLNVKq.js +0 -4
  1077. package/components/p-BSQPZ79H.js +0 -4
  1078. package/components/p-BeamQXHF.js +0 -4
  1079. package/components/p-BhamHSw3.js +0 -4
  1080. package/components/p-Bjig0DJK.js +0 -4
  1081. package/components/p-BjluhQMI.js +0 -4
  1082. package/components/p-BlsIikdZ.js +0 -4
  1083. package/components/p-BmVRXR1y.js +0 -4
  1084. package/components/p-BqPNzJf6.js +0 -4
  1085. package/components/p-BrD9Xv62.js +0 -4
  1086. package/components/p-BvJqoZ5R.js +0 -4
  1087. package/components/p-Bz6z3Asd.js +0 -4
  1088. package/components/p-C5KYjZWD.js +0 -4
  1089. package/components/p-C6HnVvHO.js +0 -4
  1090. package/components/p-C7jvh5Wy.js +0 -4
  1091. package/components/p-C9BGR5fy.js +0 -4
  1092. package/components/p-CB-y1CdP.js +0 -4
  1093. package/components/p-CEW4RXZO.js +0 -4
  1094. package/components/p-CHH3loEE.js +0 -4
  1095. package/components/p-CIGNaXM1.js +0 -4
  1096. package/components/p-CJKUWjmg.js +0 -4
  1097. package/components/p-C_phlPMC.js +0 -4
  1098. package/components/p-CbhUdtjf.js +0 -4
  1099. package/components/p-CejmQs3h.js +0 -4
  1100. package/components/p-CtZqa4HM.js +0 -4
  1101. package/components/p-D7-vHX0A.js +0 -4
  1102. package/components/p-D9qIVSWm.js +0 -4
  1103. package/components/p-DD5fQ4EQ.js +0 -4
  1104. package/components/p-DE-3iMNW.js +0 -4
  1105. package/components/p-DFvZn99E.js +0 -4
  1106. package/components/p-DHFt2rdc.js +0 -4
  1107. package/components/p-DJztqcrH.js +0 -4
  1108. package/components/p-DM-PrAoh.js +0 -4
  1109. package/components/p-DSzSbVP2.js +0 -4
  1110. package/components/p-DV85C0e0.js +0 -4
  1111. package/components/p-DWCzVL3Y.js +0 -4
  1112. package/components/p-D_RCyzwu.js +0 -4
  1113. package/components/p-D_tD8r3L.js +0 -4
  1114. package/components/p-DaA_8eqt.js +0 -4
  1115. package/components/p-DjCtLZbF.js +0 -4
  1116. package/components/p-Dmd2xqCe.js +0 -4
  1117. package/components/p-Dojwmvde.js +0 -4
  1118. package/components/p-G0TxqHfe.js +0 -4
  1119. package/components/p-G6JR-cr_.js +0 -4
  1120. package/components/p-GG5GhznE.js +0 -4
  1121. package/components/p-LpMHEu3v.js +0 -4
  1122. package/components/p-TXPDHL13.js +0 -4
  1123. package/components/p-UIBJkZf8.js +0 -4
  1124. package/components/p-ZjP4CjeZ.js +0 -4
  1125. package/components/p-_IKFD3ID.js +0 -4
  1126. package/components/p-byZM6qHV.js +0 -4
  1127. package/components/p-dKq2jIum.js +0 -4
  1128. package/components/p-fruGqVHh.js +0 -4
  1129. package/components/p-iYhH60Tc.js +0 -4
  1130. package/components/p-ia3IDdJS.js +0 -4
  1131. package/dist/cjs/hardware-back-button-fqpYh-kd.js +0 -121
  1132. package/dist/cjs/index-DkNv4J_i.js +0 -10
  1133. package/dist/cjs/input.utils-BZdMWVrt.js +0 -35
  1134. package/dist/cjs/ion-datetime.cjs.entry.js +0 -2770
  1135. package/dist/cjs/ionic-global-k6hOWWpn.js +0 -156
  1136. package/dist/cjs/keyboard-controller-PtZoN2GS.js +0 -167
  1137. package/dist/cjs/slot-mutation-controller-DPHmqXdV.js +0 -397
  1138. package/dist/cjs/validity-BpS37YFM.js +0 -19
  1139. package/dist/collection/utils/forms/start-container-controller.js +0 -132
  1140. package/dist/esm/hardware-back-button-gLJHMX_F.js +0 -115
  1141. package/dist/esm/index-ZjP4CjeZ.js +0 -7
  1142. package/dist/esm/input.utils-B1ValN_N.js +0 -33
  1143. package/dist/esm/ion-datetime.entry.js +0 -2768
  1144. package/dist/esm/ionic-global-BVB7BrLT.js +0 -151
  1145. package/dist/esm/keyboard-controller-DEwoa1ev.js +0 -165
  1146. package/dist/esm/slot-mutation-controller-DiE_C9un.js +0 -393
  1147. package/dist/esm/theme-byZM6qHV.js +0 -48
  1148. package/dist/esm/validity-DJztqcrH.js +0 -17
  1149. package/dist/ionic/p-06ec7136.entry.js +0 -4
  1150. package/dist/ionic/p-09fe4fa3.entry.js +0 -4
  1151. package/dist/ionic/p-10d45a07.entry.js +0 -4
  1152. package/dist/ionic/p-208c8a07.entry.js +0 -4
  1153. package/dist/ionic/p-212474fa.entry.js +0 -4
  1154. package/dist/ionic/p-2eef1396.entry.js +0 -4
  1155. package/dist/ionic/p-347e005d.entry.js +0 -4
  1156. package/dist/ionic/p-3a0b3f1d.entry.js +0 -4
  1157. package/dist/ionic/p-3b071259.entry.js +0 -4
  1158. package/dist/ionic/p-40424a88.entry.js +0 -4
  1159. package/dist/ionic/p-4204184c.entry.js +0 -4
  1160. package/dist/ionic/p-47464391.entry.js +0 -4
  1161. package/dist/ionic/p-4eOQC00Z.js +0 -4
  1162. package/dist/ionic/p-4f9c9126.entry.js +0 -4
  1163. package/dist/ionic/p-5JsKPLJD.js +0 -4
  1164. package/dist/ionic/p-5bc485c6.entry.js +0 -4
  1165. package/dist/ionic/p-603a61e6.entry.js +0 -4
  1166. package/dist/ionic/p-60576951.entry.js +0 -4
  1167. package/dist/ionic/p-67a81d33.entry.js +0 -4
  1168. package/dist/ionic/p-6affb775.entry.js +0 -4
  1169. package/dist/ionic/p-6f120c25.entry.js +0 -4
  1170. package/dist/ionic/p-71c82b60.entry.js +0 -4
  1171. package/dist/ionic/p-79325ffe.entry.js +0 -4
  1172. package/dist/ionic/p-7CBuOvEo.js +0 -4
  1173. package/dist/ionic/p-7e4d51fa.entry.js +0 -4
  1174. package/dist/ionic/p-7f5d4664.entry.js +0 -4
  1175. package/dist/ionic/p-80ee82fc.entry.js +0 -4
  1176. package/dist/ionic/p-84af7dbc.entry.js +0 -4
  1177. package/dist/ionic/p-89ca830a.entry.js +0 -4
  1178. package/dist/ionic/p-93b8ec8f.entry.js +0 -4
  1179. package/dist/ionic/p-946f65c2.entry.js +0 -4
  1180. package/dist/ionic/p-9c4b39fb.entry.js +0 -4
  1181. package/dist/ionic/p-B1NEZUzQ.js +0 -4
  1182. package/dist/ionic/p-B1ck5iy-.js +0 -4
  1183. package/dist/ionic/p-B4FrqdW0.js +0 -4
  1184. package/dist/ionic/p-BB0LlG4y.js +0 -4
  1185. package/dist/ionic/p-BMPN55of.js +0 -4
  1186. package/dist/ionic/p-BSQPZ79H.js +0 -4
  1187. package/dist/ionic/p-BYEAtHr-.js +0 -4
  1188. package/dist/ionic/p-BhamHSw3.js +0 -4
  1189. package/dist/ionic/p-BmVRXR1y.js +0 -4
  1190. package/dist/ionic/p-BvabGprD.js +0 -4
  1191. package/dist/ionic/p-C-94tAim.js +0 -4
  1192. package/dist/ionic/p-C-eHZMYE.js +0 -4
  1193. package/dist/ionic/p-CBR_W98Z.js +0 -4
  1194. package/dist/ionic/p-CBWAXjA5.js +0 -4
  1195. package/dist/ionic/p-CIGNaXM1.js +0 -4
  1196. package/dist/ionic/p-CMRtMbJc.js +0 -4
  1197. package/dist/ionic/p-CPcPmkGv.js +0 -4
  1198. package/dist/ionic/p-CaRuIadB.js +0 -4
  1199. package/dist/ionic/p-Cdjxf_yg.js +0 -4
  1200. package/dist/ionic/p-ChhhtsGZ.js +0 -5
  1201. package/dist/ionic/p-CzS1qWve.js +0 -4
  1202. package/dist/ionic/p-D5t_-oMk.js +0 -4
  1203. package/dist/ionic/p-D94_RztK.js +0 -4
  1204. package/dist/ionic/p-DJztqcrH.js +0 -4
  1205. package/dist/ionic/p-DWCzVL3Y.js +0 -4
  1206. package/dist/ionic/p-DjjfauRM.js +0 -4
  1207. package/dist/ionic/p-DkUB-ROc.js +0 -4
  1208. package/dist/ionic/p-Dn0mqQ_R.js +0 -4
  1209. package/dist/ionic/p-Dojwmvde.js +0 -4
  1210. package/dist/ionic/p-DplOqGUv.js +0 -4
  1211. package/dist/ionic/p-Dst_XmZh.js +0 -4
  1212. package/dist/ionic/p-T71k3C35.js +0 -4
  1213. package/dist/ionic/p-TXPDHL13.js +0 -4
  1214. package/dist/ionic/p-UIBJkZf8.js +0 -4
  1215. package/dist/ionic/p-ZjP4CjeZ.js +0 -4
  1216. package/dist/ionic/p-a438b193.entry.js +0 -4
  1217. package/dist/ionic/p-babaaaa7.entry.js +0 -4
  1218. package/dist/ionic/p-be08d500.entry.js +0 -4
  1219. package/dist/ionic/p-be9a4f51.entry.js +0 -4
  1220. package/dist/ionic/p-byZM6qHV.js +0 -4
  1221. package/dist/ionic/p-c00d3092.entry.js +0 -4
  1222. package/dist/ionic/p-c36dc8f5.entry.js +0 -4
  1223. package/dist/ionic/p-c72a7e17.entry.js +0 -4
  1224. package/dist/ionic/p-c8edd88c.entry.js +0 -4
  1225. package/dist/ionic/p-ce0e380b.entry.js +0 -4
  1226. package/dist/ionic/p-ce32912b.entry.js +0 -4
  1227. package/dist/ionic/p-d07cf130.entry.js +0 -4
  1228. package/dist/ionic/p-d27edeb3.entry.js +0 -4
  1229. package/dist/ionic/p-d5d2c506.entry.js +0 -4
  1230. package/dist/ionic/p-d5e31ca9.entry.js +0 -4
  1231. package/dist/ionic/p-de91444f.entry.js +0 -4
  1232. package/dist/ionic/p-ded69ceb.entry.js +0 -4
  1233. package/dist/ionic/p-df72866d.entry.js +0 -4
  1234. package/dist/ionic/p-e47e3151.entry.js +0 -4
  1235. package/dist/ionic/p-e621e5e8.entry.js +0 -4
  1236. package/dist/ionic/p-eea9cf93.entry.js +0 -4
  1237. package/dist/ionic/p-f402f5a4.entry.js +0 -4
  1238. package/dist/ionic/p-fe1bfbcf.entry.js +0 -4
  1239. package/dist/ionic/p-ffb90460.entry.js +0 -4
  1240. package/dist/types/utils/forms/start-container-controller.d.ts +0 -34
  1241. /package/dist/collection/components/{input-password-toggle/input-password-toggle.css → refresher-content/refresher-content.css} +0 -0
@@ -3,25 +3,24 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var index$3 = require('./index-uvry__L4.js');
7
- var index$1 = require('./index-zVCah4Uz.js');
8
- var frameworkDelegate = require('./framework-delegate-Dfo5XsGv.js');
9
- var helpers = require('./helpers-YPQybDph.js');
6
+ var index$2 = require('./index-C1knGA9x.js');
7
+ var index = require('./index-Bsq0SbXc.js');
8
+ var frameworkDelegate = require('./framework-delegate-IvkF1VuM.js');
9
+ var helpers = require('./helpers-Dhimwhpn.js');
10
10
  var lockController = require('./lock-controller-aDB9wrEf.js');
11
- var capacitor = require('./capacitor-DmA66EwP.js');
12
- var overlays = require('./overlays-KaNVDNqC.js');
13
- var theme = require('./theme-Bw0rpaNN.js');
14
- var index$4 = require('./index-BLdJCcJY.js');
15
- var ionicGlobal = require('./ionic-global-k6hOWWpn.js');
16
- var keyboard = require('./keyboard-Cix5TVkD.js');
17
- var animation = require('./animation-C0mOHzej.js');
11
+ var capacitor = require('./capacitor-CRl0exFC.js');
12
+ var overlays = require('./overlays-Bxjqh2m3.js');
13
+ var theme = require('./theme-IlOsGAz7.js');
14
+ var index$3 = require('./index-DuleInoh.js');
15
+ var ionicGlobal = require('./ionic-global-DYLhJaw7.js');
16
+ var keyboard = require('./keyboard-Otnp8OQI.js');
17
+ var animation = require('./animation-CxRPIayb.js');
18
18
  var cubicBezier = require('./cubic-bezier-DAjy1V-e.js');
19
- var index$2 = require('./index-DwlRtFZe.js');
20
- var index = require('./index-DkNv4J_i.js');
21
- require('./dir-zwDPRE5K.js');
22
- require('./hardware-back-button-fqpYh-kd.js');
23
- require('./gesture-controller-BDUH7687.js');
24
- require('./keyboard-cHxZlTyz.js');
19
+ var index$1 = require('./index-BJ2-LydH.js');
20
+ require('./focus-visible-BIj-I3-C.js');
21
+ require('./dir-DD0jPVH3.js');
22
+ require('./gesture-controller-dtqlP_q4.js');
23
+ require('./keyboard-BgioTbwQ.js');
25
24
 
26
25
  var Style;
27
26
  (function (Style) {
@@ -32,7 +31,7 @@ var Style;
32
31
  const StatusBar = {
33
32
  getEngine() {
34
33
  const capacitor$1 = capacitor.getCapacitor();
35
- if (capacitor$1?.isPluginAvailable('StatusBar')) {
34
+ if (capacitor$1 === null || capacitor$1 === void 0 ? void 0 : capacitor$1.isPluginAvailable('StatusBar')) {
36
35
  return capacitor$1.Plugins.StatusBar;
37
36
  }
38
37
  return undefined;
@@ -118,18 +117,116 @@ const getBackdropValueForSheet = (x, backdropBreakpoint) => {
118
117
  *
119
118
  */
120
119
  const setCardStatusBarDark = () => {
121
- if (!index.win || index.win.innerWidth >= 768) {
120
+ if (!ionicGlobal.win || ionicGlobal.win.innerWidth >= 768) {
122
121
  return;
123
122
  }
124
123
  StatusBar.setStyle({ style: Style.Dark });
125
124
  };
126
125
  const setCardStatusBarDefault = (defaultStyle = Style.Default) => {
127
- if (!index.win || index.win.innerWidth >= 768) {
126
+ if (!ionicGlobal.win || ionicGlobal.win.innerWidth >= 768) {
128
127
  return;
129
128
  }
130
129
  StatusBar.setStyle({ style: defaultStyle });
131
130
  };
132
131
 
132
+ const createSheetEnterAnimation = (opts) => {
133
+ const { currentBreakpoint, backdropBreakpoint, expandToScroll, staticBackdropOpacity } = opts;
134
+ /**
135
+ * If the backdropBreakpoint is undefined, then the backdrop
136
+ * should always fade in. If the backdropBreakpoint came before the
137
+ * current breakpoint, then the backdrop should be fading in.
138
+ */
139
+ const shouldShowBackdrop = backdropBreakpoint === undefined || backdropBreakpoint < currentBreakpoint;
140
+ let initialBackdrop = '0';
141
+ if (staticBackdropOpacity) {
142
+ initialBackdrop = 'calc(var(--backdrop-opacity)';
143
+ }
144
+ else if (shouldShowBackdrop) {
145
+ initialBackdrop = `calc(var(--backdrop-opacity) * ${currentBreakpoint})`;
146
+ }
147
+ const backdropAnimation = animation.createAnimation('backdropAnimation').fromTo('opacity', 0, initialBackdrop);
148
+ if (shouldShowBackdrop) {
149
+ backdropAnimation
150
+ .beforeStyles({
151
+ 'pointer-events': 'none',
152
+ })
153
+ .afterClearStyles(['pointer-events']);
154
+ }
155
+ const wrapperAnimation = animation.createAnimation('wrapperAnimation').keyframes([
156
+ { offset: 0, opacity: 1, transform: 'translateY(100%)' },
157
+ { offset: 1, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
158
+ ]);
159
+ /**
160
+ * This allows the content to be scrollable at any breakpoint.
161
+ */
162
+ const contentAnimation = !expandToScroll
163
+ ? animation.createAnimation('contentAnimation').keyframes([
164
+ { offset: 0, opacity: 1, maxHeight: `${(1 - currentBreakpoint) * 100}%` },
165
+ { offset: 1, opacity: 1, maxHeight: `${currentBreakpoint * 100}%` },
166
+ ])
167
+ : undefined;
168
+ return { wrapperAnimation, backdropAnimation, contentAnimation };
169
+ };
170
+ const createSheetLeaveAnimation = (opts) => {
171
+ const { currentBreakpoint, backdropBreakpoint } = opts;
172
+ /**
173
+ * Backdrop does not always fade in from 0 to 1 if backdropBreakpoint
174
+ * is defined, so we need to account for that offset by figuring out
175
+ * what the current backdrop value should be.
176
+ */
177
+ const backdropValue = `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(currentBreakpoint, backdropBreakpoint)})`;
178
+ const defaultBackdrop = [
179
+ { offset: 0, opacity: backdropValue },
180
+ { offset: 1, opacity: 0 },
181
+ ];
182
+ const customBackdrop = [
183
+ { offset: 0, opacity: backdropValue },
184
+ { offset: backdropBreakpoint, opacity: 0 },
185
+ { offset: 1, opacity: 0 },
186
+ ];
187
+ const backdropAnimation = animation.createAnimation('backdropAnimation').keyframes(backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop);
188
+ const wrapperAnimation = animation.createAnimation('wrapperAnimation').keyframes([
189
+ { offset: 0, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
190
+ { offset: 1, opacity: 1, transform: `translateY(100%)` },
191
+ ]);
192
+ return { wrapperAnimation, backdropAnimation };
193
+ };
194
+
195
+ const createEnterAnimation$2 = () => {
196
+ const backdropAnimation = animation.createAnimation()
197
+ .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
198
+ .beforeStyles({
199
+ 'pointer-events': 'none',
200
+ })
201
+ .afterClearStyles(['pointer-events']);
202
+ const wrapperAnimation = animation.createAnimation().keyframes([
203
+ { offset: 0, opacity: 0.01, transform: 'translateY(40px)' },
204
+ { offset: 1, opacity: 1, transform: `translateY(0px)` },
205
+ ]);
206
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
207
+ };
208
+ /**
209
+ * Ionic Modal Enter Animation
210
+ */
211
+ const ionicEnterAnimation = (baseEl, opts) => {
212
+ const { currentBreakpoint, expandToScroll } = opts;
213
+ const root = helpers.getElementRoot(baseEl);
214
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$2();
215
+ backdropAnimation.addElement(root.querySelector('ion-backdrop'));
216
+ wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
217
+ // The content animation is only added if scrolling is enabled for
218
+ // all the breakpoints.
219
+ !expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
220
+ backdropAnimation.duration(300).easing('ease-out');
221
+ wrapperAnimation.duration(400).easing('cubic-bezier(0.32, 0.68, 0, 1)');
222
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.duration(400).easing('cubic-bezier(0.32, 0.68, 0, 1)');
223
+ const baseAnimation = animation.createAnimation().addElement(baseEl).addAnimation([backdropAnimation, wrapperAnimation]);
224
+ if (contentAnimation) {
225
+ baseAnimation.addAnimation(contentAnimation);
226
+ }
227
+ return baseAnimation;
228
+ };
229
+
133
230
  /**
134
231
  * Swiping is only possible when the content is scrolled to the top, so that we
135
232
  * do not interfere with scrolling, and never on content with a refresher.
@@ -141,8 +238,8 @@ const setCardStatusBarDefault = (defaultStyle = Style.Default) => {
141
238
  * synchronous operation, and `getScrollElement` is asynchronous.
142
239
  */
143
240
  const canSwipeOnContent = (contentEl) => {
144
- const scrollEl = index$1.isIonContent(contentEl) ? helpers.getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
145
- const hasRefresherInContent = !!index$1.findRefresherInContent(contentEl);
241
+ const scrollEl = index.isIonContent(contentEl) ? helpers.getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
242
+ const hasRefresherInContent = !!index.findRefresherInContent(contentEl);
146
243
  return !hasRefresherInContent && scrollEl.scrollTop === 0;
147
244
  };
148
245
  const handleCanDismiss = async (el, animation) => {
@@ -279,7 +376,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
279
376
  let initialScrollY = true;
280
377
  let lastStep = 0;
281
378
  const getScrollY = () => {
282
- if (contentEl && index$1.isIonContent(contentEl)) {
379
+ if (contentEl && index.isIonContent(contentEl)) {
283
380
  return contentEl.scrollY;
284
381
  /**
285
382
  * Custom scroll containers are intended to be
@@ -305,7 +402,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
305
402
  * swipe again. The target content will not
306
403
  * be the same between swipes.
307
404
  */
308
- contentEl = index$1.findClosestIonContent(target);
405
+ contentEl = index.findClosestIonContent(target);
309
406
  if (contentEl) {
310
407
  return canSwipeOnContent(contentEl);
311
408
  }
@@ -320,13 +417,14 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
320
417
  return false;
321
418
  };
322
419
  const onStart = (detail) => {
420
+ var _a;
323
421
  const { deltaY } = detail;
324
422
  /**
325
423
  * Firefox automatically selects the header text during drag
326
424
  * due to the focusable wrapper (tabindex="-1"). Remove any
327
425
  * selection that may have occurred.
328
426
  */
329
- window.getSelection()?.removeAllRanges();
427
+ (_a = window.getSelection()) === null || _a === void 0 ? void 0 : _a.removeAllRanges();
330
428
  /**
331
429
  * Get the initial scrollY value so
332
430
  * that we can correctly reset the scrollY
@@ -349,7 +447,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
349
447
  * happen at the same time as the gesture.
350
448
  */
351
449
  if (deltaY > 0 && contentEl) {
352
- index$1.disableContentScrollY(contentEl);
450
+ index.disableContentScrollY(contentEl);
353
451
  }
354
452
  animation.progressStart(true, isOpen ? 1 : 0);
355
453
  onDragStart();
@@ -363,7 +461,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
363
461
  * happen at the same time as the gesture.
364
462
  */
365
463
  if (deltaY > 0 && contentEl) {
366
- index$1.disableContentScrollY(contentEl);
464
+ index.disableContentScrollY(contentEl);
367
465
  }
368
466
  /**
369
467
  * If we are swiping on the content
@@ -458,7 +556,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
458
556
  isOpen = shouldComplete;
459
557
  gesture.enable(false);
460
558
  if (contentEl) {
461
- index$1.resetContentScrollY(contentEl, initialScrollY);
559
+ index.resetContentScrollY(contentEl, initialScrollY);
462
560
  }
463
561
  animation
464
562
  .onFinish(() => {
@@ -479,34 +577,21 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
479
577
  * check canDismiss. 25% was chosen
480
578
  * to avoid accidental swipes.
481
579
  */
482
- const isAttemptingCanDismiss = isAttemptingDismissWithCanDismiss && clampedStep > maxStep / 4;
483
- if (isAttemptingCanDismiss) {
580
+ if (isAttemptingDismissWithCanDismiss && clampedStep > maxStep / 4) {
484
581
  handleCanDismiss(el, animation);
485
582
  }
486
583
  else if (shouldComplete) {
487
584
  onDismiss();
488
585
  }
489
- /**
490
- * `shouldComplete` is not enough on its own, since it is always `false`
491
- * when canDismiss blocks the gesture. `canDismiss: false` blocks it and
492
- * never dismisses, because `handleCanDismiss` returns early when
493
- * canDismiss is not a function. A canDismiss function dismisses through
494
- * `handleCanDismiss`, which awaits the callback, so the outcome is not
495
- * known when this event is emitted.
496
- */
497
- const isDismissing = isAttemptingDismissWithCanDismiss
498
- ? isAttemptingCanDismiss && typeof el.canDismiss === 'function'
499
- : shouldComplete;
500
586
  const eventDetail = {
501
587
  currentY: detail.currentY,
502
588
  deltaY: detail.deltaY,
503
589
  velocityY: detail.velocityY,
504
590
  progress: calculateProgress(el, detail.deltaY),
505
- isDismissing,
506
591
  };
507
592
  onDragEnd(eventDetail);
508
593
  };
509
- const gesture = index$2.createGesture({
594
+ const gesture = index$1.createGesture({
510
595
  el,
511
596
  gestureName: 'modalSwipeToClose',
512
597
  gesturePriority: overlays.OVERLAY_GESTURE_PRIORITY,
@@ -561,63 +646,6 @@ const calculateProgress = (el, deltaY) => {
561
646
  return Math.max(0, Math.min(1, roundedProgress));
562
647
  };
563
648
 
564
- const createSheetEnterAnimation = (opts) => {
565
- const { currentBreakpoint, backdropBreakpoint, expandToScroll } = opts;
566
- /**
567
- * If the backdropBreakpoint is undefined, then the backdrop
568
- * should always fade in. If the backdropBreakpoint came before the
569
- * current breakpoint, then the backdrop should be fading in.
570
- */
571
- const shouldShowBackdrop = backdropBreakpoint === undefined || backdropBreakpoint < currentBreakpoint;
572
- const initialBackdrop = shouldShowBackdrop ? `calc(var(--backdrop-opacity) * ${currentBreakpoint})` : '0';
573
- const backdropAnimation = animation.createAnimation('backdropAnimation').fromTo('opacity', 0, initialBackdrop);
574
- if (shouldShowBackdrop) {
575
- backdropAnimation
576
- .beforeStyles({
577
- 'pointer-events': 'none',
578
- })
579
- .afterClearStyles(['pointer-events']);
580
- }
581
- const wrapperAnimation = animation.createAnimation('wrapperAnimation').keyframes([
582
- { offset: 0, opacity: 1, transform: 'translateY(100%)' },
583
- { offset: 1, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
584
- ]);
585
- /**
586
- * This allows the content to be scrollable at any breakpoint.
587
- */
588
- const contentAnimation = !expandToScroll
589
- ? animation.createAnimation('contentAnimation').keyframes([
590
- { offset: 0, opacity: 1, maxHeight: `${(1 - currentBreakpoint) * 100}%` },
591
- { offset: 1, opacity: 1, maxHeight: `${currentBreakpoint * 100}%` },
592
- ])
593
- : undefined;
594
- return { wrapperAnimation, backdropAnimation, contentAnimation };
595
- };
596
- const createSheetLeaveAnimation = (opts) => {
597
- const { currentBreakpoint, backdropBreakpoint } = opts;
598
- /**
599
- * Backdrop does not always fade in from 0 to 1 if backdropBreakpoint
600
- * is defined, so we need to account for that offset by figuring out
601
- * what the current backdrop value should be.
602
- */
603
- const backdropValue = `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(currentBreakpoint, backdropBreakpoint)})`;
604
- const defaultBackdrop = [
605
- { offset: 0, opacity: backdropValue },
606
- { offset: 1, opacity: 0 },
607
- ];
608
- const customBackdrop = [
609
- { offset: 0, opacity: backdropValue },
610
- { offset: backdropBreakpoint, opacity: 0 },
611
- { offset: 1, opacity: 0 },
612
- ];
613
- const backdropAnimation = animation.createAnimation('backdropAnimation').keyframes(backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop);
614
- const wrapperAnimation = animation.createAnimation('wrapperAnimation').keyframes([
615
- { offset: 0, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
616
- { offset: 1, opacity: 1, transform: `translateY(100%)` },
617
- ]);
618
- return { wrapperAnimation, backdropAnimation };
619
- };
620
-
621
649
  const createEnterAnimation$1 = () => {
622
650
  const backdropAnimation = animation.createAnimation()
623
651
  .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
@@ -639,7 +667,7 @@ const iosEnterAnimation = (baseEl, opts) => {
639
667
  wrapperAnimation.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')).beforeStyles({ opacity: 1 });
640
668
  // The content animation is only added if scrolling is enabled for
641
669
  // all the breakpoints.
642
- !expandToScroll && contentAnimation?.addElement(baseEl.querySelector('.ion-page'));
670
+ !expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
643
671
  const baseAnimation = animation.createAnimation('entering-base')
644
672
  .addElement(baseEl)
645
673
  .easing('cubic-bezier(0.32,0.72,0,1)')
@@ -972,7 +1000,7 @@ const mdEnterAnimation = (baseEl, opts) => {
972
1000
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
973
1001
  // The content animation is only added if scrolling is enabled for
974
1002
  // all the breakpoints.
975
- !expandToScroll && contentAnimation?.addElement(baseEl.querySelector('.ion-page'));
1003
+ !expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
976
1004
  const baseAnimation = animation.createAnimation()
977
1005
  .addElement(baseEl)
978
1006
  .easing('cubic-bezier(0.36,0.66,0.04,1)')
@@ -1008,16 +1036,17 @@ const mdLeaveAnimation = (baseEl, opts) => {
1008
1036
  return baseAnimation;
1009
1037
  };
1010
1038
 
1011
- const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], expandToScroll, getCurrentBreakpoint, onDismiss, onBreakpointChange, onDragStart, onDragMove, onDragEnd) => {
1039
+ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], expandToScroll, getCurrentBreakpoint, onDismiss, onBreakpointChange, usePhysicsBasedGesture, onDragStart, onDragMove, onDragEnd) => {
1040
+ var _a;
1012
1041
  // Defaults for the sheet swipe animation
1013
1042
  const defaultBackdrop = [
1014
1043
  { offset: 0, opacity: 'var(--backdrop-opacity)' },
1015
- { offset: 1, opacity: 0.01 },
1044
+ { offset: 1, opacity: usePhysicsBasedGesture ? 'var(--backdrop-opacity)' : 0.01 },
1016
1045
  ];
1017
1046
  const customBackdrop = [
1018
1047
  { offset: 0, opacity: 'var(--backdrop-opacity)' },
1019
- { offset: 1 - backdropBreakpoint, opacity: 0 },
1020
- { offset: 1, opacity: 0 },
1048
+ { offset: 1 - backdropBreakpoint, opacity: usePhysicsBasedGesture ? 'var(--backdrop-opacity)' : 0 },
1049
+ { offset: 1, opacity: usePhysicsBasedGesture ? 'var(--backdrop-opacity)' : 0 },
1021
1050
  ];
1022
1051
  const SheetDefaults = {
1023
1052
  WRAPPER_KEYFRAMES: [
@@ -1032,7 +1061,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1032
1061
  };
1033
1062
  const contentEl = baseEl.querySelector('ion-content');
1034
1063
  // Cache the initial value so the gesture restores it instead of forcing scrolling on.
1035
- const initialContentScrollY = contentEl?.scrollY ?? true;
1064
+ const initialContentScrollY = (_a = contentEl === null || contentEl === void 0 ? void 0 : contentEl.scrollY) !== null && _a !== void 0 ? _a : true;
1036
1065
  const height = wrapperEl.clientHeight;
1037
1066
  let currentBreakpoint = initialBreakpoint;
1038
1067
  let offset = 0;
@@ -1098,9 +1127,9 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1098
1127
  cachedFooterEl.style.removeProperty('height');
1099
1128
  cachedFooterEl.style.removeProperty('top');
1100
1129
  cachedFooterEl.style.removeProperty('left');
1101
- page?.style.removeProperty('padding-bottom');
1130
+ page === null || page === void 0 ? void 0 : page.style.removeProperty('padding-bottom');
1102
1131
  // Move to page
1103
- page?.appendChild(cachedFooterEl);
1132
+ page === null || page === void 0 ? void 0 : page.appendChild(cachedFooterEl);
1104
1133
  });
1105
1134
  }
1106
1135
  else {
@@ -1144,7 +1173,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1144
1173
  // when the footer is positioned absolutely. This has to be done before we
1145
1174
  // make the footer absolutely positioned or we may accidentally cause the
1146
1175
  // sheet to scroll.
1147
- page?.style.setProperty('padding-bottom', `${footerHeights}px`);
1176
+ page === null || page === void 0 ? void 0 : page.style.setProperty('padding-bottom', `${footerHeights}px`);
1148
1177
  // Apply positioning styles to keep footer at bottom
1149
1178
  cachedFooterEl.classList.add('modal-footer-moving');
1150
1179
  // Apply our preserved styles to pin the footer
@@ -1169,7 +1198,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1169
1198
  if (wrapperAnimation && backdropAnimation) {
1170
1199
  wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
1171
1200
  backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
1172
- contentAnimation?.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
1201
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
1173
1202
  animation.progressStart(true, 1 - currentBreakpoint);
1174
1203
  /**
1175
1204
  * If backdrop is not enabled, then content
@@ -1197,7 +1226,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1197
1226
  * For example, when using ion-nav within a modal it is possible to swipe, push a view,
1198
1227
  * and then swipe again. The target content will not be the same between swipes.
1199
1228
  */
1200
- const contentEl = index$1.findClosestIonContent(detail.event.target);
1229
+ const contentEl = index.findClosestIonContent(detail.event.target);
1201
1230
  currentBreakpoint = getCurrentBreakpoint();
1202
1231
  /**
1203
1232
  * Upwards swipes on the content cannot move the sheet anyway, so this only
@@ -1209,12 +1238,13 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1209
1238
  return true;
1210
1239
  };
1211
1240
  const onStart = (detail) => {
1241
+ var _a;
1212
1242
  /**
1213
1243
  * Firefox automatically selects the header text during drag
1214
1244
  * due to the focusable wrapper (tabindex="-1"). Remove any
1215
1245
  * selection that may have occurred.
1216
1246
  */
1217
- window.getSelection()?.removeAllRanges();
1247
+ (_a = window.getSelection()) === null || _a === void 0 ? void 0 : _a.removeAllRanges();
1218
1248
  /**
1219
1249
  * If canDismiss is anything other than `true`
1220
1250
  * then users should be able to swipe down
@@ -1234,9 +1264,9 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1234
1264
  * which would impact performance significantly.
1235
1265
  */
1236
1266
  if (!expandToScroll) {
1237
- const targetEl = index$1.findClosestIonContent(detail.event.target);
1267
+ const targetEl = index.findClosestIonContent(detail.event.target);
1238
1268
  cachedScrollEl =
1239
- targetEl && index$1.isIonContent(targetEl) ? helpers.getElementRoot(targetEl).querySelector('.inner-scroll') : targetEl;
1269
+ targetEl && index.isIonContent(targetEl) ? helpers.getElementRoot(targetEl).querySelector('.inner-scroll') : targetEl;
1240
1270
  }
1241
1271
  /**
1242
1272
  * If expandToScroll is disabled, we need to swap
@@ -1330,7 +1360,9 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1330
1360
  : step;
1331
1361
  offset = helpers.clamp(0.0001, processedStep, maxStep);
1332
1362
  animation.progressStep(offset);
1333
- const snapBreakpoint = calculateSnapBreakpoint(detail.deltaY);
1363
+ const snapBreakpoint = usePhysicsBasedGesture
1364
+ ? calculateVelocitySnapBreakpoint(detail.deltaY, detail.velocityY, detail.currentY)
1365
+ : calculatePositionSnapBreakpoint(detail.deltaY);
1334
1366
  const eventDetail = {
1335
1367
  currentY: detail.currentY,
1336
1368
  deltaY: detail.deltaY,
@@ -1341,23 +1373,15 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1341
1373
  onDragMove(eventDetail);
1342
1374
  };
1343
1375
  const onEnd = (detail) => {
1344
- const snapBreakpoint = calculateSnapBreakpoint(detail.deltaY);
1345
- /**
1346
- * `snapBreakpoint === 0` is not enough on its own. `canDismiss: false`
1347
- * snaps to 0 but never dismisses, since `handleCanDismiss` returns early
1348
- * when canDismiss is not a function. A canDismiss function dismisses
1349
- * through `handleCanDismiss`, which awaits the callback, so the outcome
1350
- * is not known when this event is emitted.
1351
- */
1352
- const shouldPreventDismiss = canDismissBlocksGesture && snapBreakpoint === 0;
1353
- const isDismissing = shouldPreventDismiss ? typeof baseEl.canDismiss === 'function' : snapBreakpoint === 0;
1376
+ const snapBreakpoint = usePhysicsBasedGesture
1377
+ ? calculateVelocitySnapBreakpoint(detail.deltaY, detail.velocityY, detail.currentY)
1378
+ : calculatePositionSnapBreakpoint(detail.deltaY);
1354
1379
  const eventDetail = {
1355
1380
  currentY: detail.currentY,
1356
1381
  deltaY: detail.deltaY,
1357
1382
  velocityY: detail.velocityY,
1358
1383
  progress: calculateProgress(detail.currentY),
1359
1384
  snapBreakpoint,
1360
- isDismissing,
1361
1385
  };
1362
1386
  /**
1363
1387
  * If expandToScroll is disabled, we should not allow the moveSheetToBreakpoint
@@ -1373,11 +1397,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1373
1397
  * swap to moving on drag and if we don't swap back here then the footer will get stuck.
1374
1398
  */
1375
1399
  swapFooterPosition('stationary');
1376
- /**
1377
- * The sheet does not move in this case, so the gesture
1378
- * never dismisses the modal.
1379
- */
1380
- onDragEnd({ ...eventDetail, isDismissing: false });
1400
+ onDragEnd(eventDetail);
1381
1401
  return;
1382
1402
  }
1383
1403
  moveSheetToBreakpoint({
@@ -1402,6 +1422,14 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1402
1422
  */
1403
1423
  const shouldPreventDismiss = canDismiss && breakpoint === 0;
1404
1424
  const snapToBreakpoint = shouldPreventDismiss ? currentBreakpoint : breakpoint;
1425
+ /**
1426
+ * Detect snap-back behavior: when the snap target is the same as the current breakpoint,
1427
+ * the user released before crossing the threshold to a new breakpoint.
1428
+ * Apply different timing and easing for snap-back vs. snap-to-new.
1429
+ */
1430
+ const isSnapBack = snapToBreakpoint === currentBreakpoint;
1431
+ const duration = usePhysicsBasedGesture ? (isSnapBack ? 300 : 400) : 500;
1432
+ const easing = isSnapBack ? 'cubic-bezier(0.34, 1.4, 0.64, 1)' : 'cubic-bezier(0.32, 0.68, 0, 1)';
1405
1433
  const shouldRemainOpen = snapToBreakpoint !== 0;
1406
1434
  currentBreakpoint = 0;
1407
1435
  /**
@@ -1416,11 +1444,15 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1416
1444
  backdropAnimation.keyframes([
1417
1445
  {
1418
1446
  offset: 0,
1419
- opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(1 - breakpointOffset, backdropBreakpoint)})`,
1447
+ opacity: usePhysicsBasedGesture
1448
+ ? 'var(--backdrop-opacity)'
1449
+ : `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(1 - breakpointOffset, backdropBreakpoint)})`,
1420
1450
  },
1421
1451
  {
1422
1452
  offset: 1,
1423
- opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(snapToBreakpoint, backdropBreakpoint)})`,
1453
+ opacity: usePhysicsBasedGesture
1454
+ ? 'var(--backdrop-opacity)'
1455
+ : `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(snapToBreakpoint, backdropBreakpoint)})`,
1424
1456
  },
1425
1457
  ]);
1426
1458
  if (contentAnimation) {
@@ -1438,6 +1470,12 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1438
1470
  }
1439
1471
  animation.progressStep(0);
1440
1472
  }
1473
+ /**
1474
+ * Apply the appropriate easing curve for this snap behavior.
1475
+ */
1476
+ if (usePhysicsBasedGesture) {
1477
+ animation.easing(easing);
1478
+ }
1441
1479
  /**
1442
1480
  * Gesture should remain disabled until the
1443
1481
  * snapping animation completes.
@@ -1492,7 +1530,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1492
1530
  helpers.raf(() => {
1493
1531
  wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
1494
1532
  backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
1495
- contentAnimation?.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
1533
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
1496
1534
  animation.progressStart(true, 1 - snapToBreakpoint);
1497
1535
  currentBreakpoint = snapToBreakpoint;
1498
1536
  onBreakpointChange(currentBreakpoint);
@@ -1527,7 +1565,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1527
1565
  * be added every time onEnd runs.
1528
1566
  */
1529
1567
  }, { oneTimeCallback: true })
1530
- .progressEnd(1, 0, animated ? 500 : 0);
1568
+ .progressEnd(1, 0, animated ? duration : 0);
1531
1569
  });
1532
1570
  };
1533
1571
  /**
@@ -1538,7 +1576,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1538
1576
  * @param deltaY The change in Y position since the gesture started.
1539
1577
  * @returns The snap breakpoint value.
1540
1578
  */
1541
- const calculateSnapBreakpoint = (deltaY) => {
1579
+ const calculatePositionSnapBreakpoint = (deltaY) => {
1542
1580
  /**
1543
1581
  * Calculates the real-time vertical position of the modal.
1544
1582
  * We combine the wrapper's current bounding box position with the
@@ -1558,6 +1596,50 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1558
1596
  });
1559
1597
  return snapBreakpoint;
1560
1598
  };
1599
+ /**
1600
+ * Calculates the snap breakpoint using velocity-based logic.
1601
+ * This provides a more intuitive and responsive sheet behavior for the Ionic theme.
1602
+ *
1603
+ * Rules:
1604
+ * 1. Fast downward flick (> 500 px/s) always dismisses, regardless of position
1605
+ * 2. Fast upward flick (> 400 px/s) snaps to the next breakpoint above
1606
+ * 3. If dragged 40% below current snap point without fast upward flick, dismisses
1607
+ * 4. Otherwise, falls back to position-based snap (closest breakpoint)
1608
+ *
1609
+ * @param deltaY The change in Y position since gesture started
1610
+ * @param velocityY The velocity in pixels per millisecond
1611
+ * @param currentY The current Y position of the gesture
1612
+ * @returns The snap breakpoint value
1613
+ */
1614
+ const calculateVelocitySnapBreakpoint = (deltaY, velocityY, currentY) => {
1615
+ // Convert velocity from px/ms to px/s for easier threshold comparison
1616
+ const velocityYPerSecond = velocityY * 1000;
1617
+ // Calculate current progress (0 = fully closed, 1 = fully expanded)
1618
+ const currentProgress = calculateProgress(currentY);
1619
+ // Rule 1: Fast downward flick always dismisses
1620
+ if (velocityYPerSecond > 500) {
1621
+ return minBreakpoint;
1622
+ }
1623
+ // Rule 2: Fast upward flick moves to next breakpoint above
1624
+ if (velocityYPerSecond < -400) {
1625
+ // Find next breakpoint above current position
1626
+ const nextBreakpoint = breakpoints.find((bp) => bp > currentProgress);
1627
+ // If no breakpoint above, stay at max breakpoint
1628
+ return nextBreakpoint !== null && nextBreakpoint !== void 0 ? nextBreakpoint : maxBreakpoint;
1629
+ }
1630
+ // Rule 3: 40% dismissal rule (only if not flicking up and 0 breakpoint exists)
1631
+ if (minBreakpoint === 0 && currentBreakpoint > 0) {
1632
+ // Calculate how far we've moved below the current snap point
1633
+ const distanceBelowSnap = currentBreakpoint - currentProgress;
1634
+ const percentageBelowSnap = distanceBelowSnap / currentBreakpoint;
1635
+ // If dragged more than 40% below and not flicking up, dismiss
1636
+ if (percentageBelowSnap > 0.4 && velocityYPerSecond <= 400) {
1637
+ return 0;
1638
+ }
1639
+ }
1640
+ // Rule 4: Fallback to position-based snap (existing logic)
1641
+ return calculatePositionSnapBreakpoint(deltaY);
1642
+ };
1561
1643
  /**
1562
1644
  * Calculates the progress of the swipe gesture.
1563
1645
  *
@@ -1628,7 +1710,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1628
1710
  */
1629
1711
  return viewportBottom - activeHeight;
1630
1712
  };
1631
- const gesture = index$2.createGesture({
1713
+ const gesture = index$1.createGesture({
1632
1714
  el: wrapperEl,
1633
1715
  gestureName: 'modalSheet',
1634
1716
  gesturePriority: 40,
@@ -1685,9 +1767,9 @@ let cacheInvalidationScheduled = false;
1685
1767
  * Matches: @media (min-width: 768px) and (min-height: 600px)
1686
1768
  */
1687
1769
  const isCenteredDialogViewport = () => {
1688
- if (!index.win)
1770
+ if (!ionicGlobal.win)
1689
1771
  return false;
1690
- return index.win.matchMedia(`(min-width: ${MODAL_INSET_MIN_WIDTH}px) and (min-height: ${MODAL_INSET_MIN_HEIGHT}px)`)
1772
+ return ionicGlobal.win.matchMedia(`(min-width: ${MODAL_INSET_MIN_WIDTH}px) and (min-height: ${MODAL_INSET_MIN_HEIGHT}px)`)
1691
1773
  .matches;
1692
1774
  };
1693
1775
  /**
@@ -1702,8 +1784,8 @@ const getRootSafeAreaTop = () => {
1702
1784
  if (cachedRootSafeAreaTop !== null) {
1703
1785
  return cachedRootSafeAreaTop;
1704
1786
  }
1705
- const doc = index.win?.document;
1706
- if (!doc?.body) {
1787
+ const doc = ionicGlobal.win === null || ionicGlobal.win === void 0 ? void 0 : ionicGlobal.win.document;
1788
+ if (!(doc === null || doc === void 0 ? void 0 : doc.body)) {
1707
1789
  return 0;
1708
1790
  }
1709
1791
  const el = doc.createElement('div');
@@ -1728,8 +1810,8 @@ const getRootSafeAreaTop = () => {
1728
1810
  * a change to it becomes a size change the observer can see.
1729
1811
  */
1730
1812
  const onRootSafeAreaTopChange = (callback) => {
1731
- const doc = index.win?.document;
1732
- if (!doc?.body || typeof ResizeObserver === 'undefined') {
1813
+ const doc = ionicGlobal.win === null || ionicGlobal.win === void 0 ? void 0 : ionicGlobal.win.document;
1814
+ if (!(doc === null || doc === void 0 ? void 0 : doc.body) || typeof ResizeObserver === 'undefined') {
1733
1815
  return () => undefined;
1734
1816
  }
1735
1817
  const probe = doc.createElement('div');
@@ -1841,9 +1923,10 @@ const getInitialSafeAreaConfig = (context) => {
1841
1923
  * @returns SafeAreaConfig based on position
1842
1924
  */
1843
1925
  const getPositionBasedSafeAreaConfig = (wrapperEl) => {
1926
+ var _a, _b;
1844
1927
  const rect = wrapperEl.getBoundingClientRect();
1845
- const vh = index.win?.innerHeight ?? 0;
1846
- const vw = index.win?.innerWidth ?? 0;
1928
+ const vh = (_a = ionicGlobal.win === null || ionicGlobal.win === void 0 ? void 0 : ionicGlobal.win.innerHeight) !== null && _a !== void 0 ? _a : 0;
1929
+ const vw = (_b = ionicGlobal.win === null || ionicGlobal.win === void 0 ? void 0 : ionicGlobal.win.innerWidth) !== null && _b !== void 0 ? _b : 0;
1847
1930
  // Only apply safe-area to sides where modal overlaps with screen edge
1848
1931
  return {
1849
1932
  top: rect.top <= EDGE_THRESHOLD ? 'inherit' : '0px',
@@ -1876,198 +1959,217 @@ const clearSafeAreaOverrides = (hostEl) => {
1876
1959
  hostEl.style.removeProperty('--ion-safe-area-right');
1877
1960
  };
1878
1961
 
1879
- const modalIosCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-wrapper{outline:none}.modal-shadow{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:""}:host(.modal-sheet){--height:calc(100% - (var(--ion-modal-offset-top, 0px) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.4)}:host(.modal-card),:host(.modal-sheet){--border-radius:10px}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:10px}}.modal-wrapper{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}@media screen and (max-width: 767px){@supports (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - max(30px, var(--ion-safe-area-top)) - 10px)}}@supports not (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - 40px)}}:host(.modal-card) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-card){--backdrop-opacity:0;--width:100%;-ms-flex-align:end;align-items:flex-end}:host(.modal-card) .modal-shadow{display:none}:host(.modal-card) ion-backdrop{pointer-events:none}}@media screen and (min-width: 768px){:host(.modal-card){--width:calc(100% - 120px);--height:calc(100% - (120px + var(--ion-safe-area-top) + var(--ion-safe-area-bottom)));--max-width:720px;--max-height:1000px;--backdrop-opacity:0;--box-shadow:0px 0px 30px 10px rgba(0, 0, 0, 0.1);-webkit-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out}:host(.modal-card) .modal-wrapper{-webkit-box-shadow:none;box-shadow:none}:host(.modal-card) .modal-shadow{-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}}:host(.modal-sheet) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}`;
1962
+ const modalIonicCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-width:0;--border-style:none;--border-color:transparent;--box-shadow:none;right:0;left:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-wrapper{outline:none}.modal-shadow{position:absolute;background:transparent}.modal-handle{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;cursor:pointer;z-index:11}.modal-handle::before{position:absolute;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:""}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--background:var(--token-bg-surface-default, var(--token-primitives-base-white, #ffffff));--box-shadow:var(--token-elevation-3, 0px 2px 7px 0px rgba(0, 0, 0, 0.05), 0px 6px 32px 0px rgba(0, 0, 0, 0.16));--backdrop-opacity:0.7;color:var(--token-text-default, var(--token-primitives-neutral-1200, #242424))}:host(.modal-round){--border-radius:var(--token-border-radius-1000, var(--token-scale-1000, 40px))}:host(.modal-soft){--border-radius:var(--token-border-radius-400, var(--token-scale-400, 16px))}:host(.modal-rectangular){--border-radius:var(--token-border-radius-0, var(--token-scale-0, 0px))}:host(.select-modal.modal-default){--max-height:45%;--max-width:calc(100% - (var(--token-space-400, var(--token-scale-400, 16px)) * 2));--min-height:340px}.modal-handle{right:0px;left:0px;top:var(--token-space-300, var(--token-scale-300, 12px));border-radius:var(--token-border-radius-100, var(--token-scale-100, 4px));width:var(--token-scale-1100, 44px);height:var(--token-scale-100, 4px);background-color:var(--token-primitives-neutral-300, #e0e0e0)}.modal-handle::before{-webkit-padding-start:var(--token-space-100, var(--token-scale-100, 4px));padding-inline-start:var(--token-space-100, var(--token-scale-100, 4px));-webkit-padding-end:var(--token-space-100, var(--token-scale-100, 4px));padding-inline-end:var(--token-space-100, var(--token-scale-100, 4px));padding-top:var(--token-space-100, var(--token-scale-100, 4px));padding-bottom:var(--token-space-100, var(--token-scale-100, 4px))}:host(.modal-sheet) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + var(--token-scale-250, 10px)))}`;
1880
1963
 
1881
- const modalMdCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-wrapper{outline:none}.modal-shadow{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:""}:host(.modal-sheet){--height:calc(100% - (var(--ion-modal-offset-top, 0px) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.32)}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:2px;--box-shadow:0 28px 48px rgba(0, 0, 0, 0.4)}}.modal-wrapper{-webkit-transform:translate3d(0, 40px, 0);transform:translate3d(0, 40px, 0);opacity:0.01}`;
1964
+ const modalIosCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-width:0;--border-style:none;--border-color:transparent;--box-shadow:none;right:0;left:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-wrapper{outline:none}.modal-shadow{position:absolute;background:transparent}.modal-handle{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;cursor:pointer;z-index:11}.modal-handle::before{position:absolute;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:""}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--background:var(--ion-background-color, #fff);--border-radius:0;--backdrop-opacity:0;color:var(--ion-text-color, #000)}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px;--ion-safe-area-top:0px;--ion-safe-area-bottom:0px;--ion-safe-area-right:0px;--ion-safe-area-left:0px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{right:0px;left:0px;top:5px;border-radius:8px;width:36px;height:5px;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be))}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;width:36px;height:5px}:host(.modal-sheet){--height:calc(100% - (var(--ion-modal-offset-top, 0px) + 10px))}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.4)}:host(.modal-card),:host(.modal-sheet){--border-radius:10px}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:10px}}.modal-wrapper{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}@media screen and (max-width: 767px){@supports (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - max(30px, var(--ion-safe-area-top)) - 10px)}}@supports not (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - 40px)}}:host(.modal-card) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-card){--backdrop-opacity:0;--width:100%;-ms-flex-align:end;align-items:flex-end}:host(.modal-card) .modal-shadow{display:none}:host(.modal-card) ion-backdrop{pointer-events:none}}@media screen and (min-width: 768px){:host(.modal-card){--width:calc(100% - 120px);--height:calc(100% - (120px + var(--ion-safe-area-top) + var(--ion-safe-area-bottom)));--max-width:720px;--max-height:1000px;--backdrop-opacity:0;--box-shadow:0px 0px 30px 10px rgba(0, 0, 0, 0.1);-webkit-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out}:host(.modal-card) .modal-wrapper{-webkit-box-shadow:none;box-shadow:none}:host(.modal-card) .modal-shadow{-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}}:host(.modal-sheet) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}`;
1965
+
1966
+ const modalMdCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-width:0;--border-style:none;--border-color:transparent;--box-shadow:none;right:0;left:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-wrapper{outline:none}.modal-shadow{position:absolute;background:transparent}.modal-handle{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;cursor:pointer;z-index:11}.modal-handle::before{position:absolute;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:""}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--background:var(--ion-background-color, #fff);--border-radius:0;--backdrop-opacity:0;color:var(--ion-text-color, #000)}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px;--ion-safe-area-top:0px;--ion-safe-area-bottom:0px;--ion-safe-area-right:0px;--ion-safe-area-left:0px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{right:0px;left:0px;top:5px;border-radius:8px;width:36px;height:5px;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be))}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;width:36px;height:5px}:host(.modal-sheet){--height:calc(100% - (var(--ion-modal-offset-top, 0px) + 10px))}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.32)}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:2px;--box-shadow:0 28px 48px rgba(0, 0, 0, 0.4)}}.modal-wrapper{-webkit-transform:translate3d(0, 40px, 0);transform:translate3d(0, 40px, 0);opacity:0.01}`;
1882
1967
 
1883
1968
  const Modal = class {
1884
1969
  constructor(hostRef) {
1885
- index$3.registerInstance(this, hostRef);
1886
- this.didPresent = index$3.createEvent(this, "ionModalDidPresent", 7);
1887
- this.willPresent = index$3.createEvent(this, "ionModalWillPresent", 7);
1888
- this.willDismiss = index$3.createEvent(this, "ionModalWillDismiss", 7);
1889
- this.didDismiss = index$3.createEvent(this, "ionModalDidDismiss", 7);
1890
- this.ionBreakpointDidChange = index$3.createEvent(this, "ionBreakpointDidChange", 7);
1891
- this.didPresentShorthand = index$3.createEvent(this, "didPresent", 7);
1892
- this.willPresentShorthand = index$3.createEvent(this, "willPresent", 7);
1893
- this.willDismissShorthand = index$3.createEvent(this, "willDismiss", 7);
1894
- this.didDismissShorthand = index$3.createEvent(this, "didDismiss", 7);
1895
- this.ionMount = index$3.createEvent(this, "ionMount", 7);
1896
- this.ionDragStart = index$3.createEvent(this, "ionDragStart", 7);
1897
- this.ionDragMove = index$3.createEvent(this, "ionDragMove", 7);
1898
- this.ionDragEnd = index$3.createEvent(this, "ionDragEnd", 7);
1899
- }
1900
- lockController = lockController.createLockController();
1901
- triggerController = overlays.createTriggerController();
1902
- gesture;
1903
- coreDelegate = frameworkDelegate.CoreDelegate();
1904
- sheetTransition;
1905
- isSheetModal = false;
1906
- /**
1907
- * The breakpoint value that has been committed for a sheet modal.
1908
- * This represents the modal's resting state when it is not being dragged
1909
- * or animating toward a new position.
1910
- */
1911
- currentBreakpoint;
1912
- wrapperEl;
1913
- backdropEl;
1914
- dragHandleEl;
1915
- sortedBreakpoints;
1916
- keyboardOpenCallback;
1917
- moveSheetToBreakpoint;
1918
- resetSheetContentScroll;
1919
- inheritedAttributes = {};
1920
- statusBarStyle;
1921
- inline = false;
1922
- workingDelegate;
1923
- // Reference to the user's provided modal content
1924
- usersElement;
1925
- // Whether or not modal is being dismissed via gesture
1926
- gestureAnimationDismissing = false;
1927
- // View transition properties for handling portrait/landscape switches
1928
- currentViewIsPortrait;
1929
- viewTransitionAnimation;
1930
- resizeTimeout;
1931
- unsubscribeRootSafeAreaTop;
1932
- // Mutation observer to watch for parent removal
1933
- parentRemovalObserver;
1934
- // Cached original parent from before modal is moved to body during presentation
1935
- cachedOriginalParent;
1936
- // Cached ion-page ancestor for child route passthrough
1937
- cachedPageParent;
1938
- lastFocus;
1939
- animation;
1940
- presented = false;
1941
- get el() { return index$3.getElement(this); }
1942
- /** @internal */
1943
- hasController = false;
1944
- /** @internal */
1945
- overlayIndex;
1946
- /** @internal */
1947
- delegate;
1948
- /**
1949
- * If `true`, the keyboard will be automatically dismissed when the overlay is presented.
1950
- */
1951
- keyboardClose = true;
1952
- /**
1953
- * Animation to use when the modal is presented.
1954
- */
1955
- enterAnimation;
1956
- /**
1957
- * Animation to use when the modal is dismissed.
1958
- */
1959
- leaveAnimation;
1960
- /**
1961
- * The breakpoints to use when creating a sheet modal. Each value in the
1962
- * array must be a decimal between 0 and 1 where 0 indicates the modal is fully
1963
- * closed and 1 indicates the modal is fully open. Values are relative
1964
- * to the height of the modal, not the height of the screen. One of the values in this
1965
- * array must be the value of the `initialBreakpoint` property.
1966
- * For example: [0, .25, .5, 1]
1967
- */
1968
- breakpoints;
1969
- /**
1970
- * Controls whether scrolling or dragging within the sheet modal expands
1971
- * it to a larger breakpoint. This only takes effect when `breakpoints`
1972
- * and `initialBreakpoint` are set.
1973
- *
1974
- * If `true`, scrolling or dragging anywhere in the modal will first expand
1975
- * it to the next breakpoint. Once fully expanded, scrolling will affect the
1976
- * content.
1977
- * If `false`, scrolling will always affect the content. The modal will
1978
- * only expand when dragging the header or handle. The modal will close when
1979
- * dragging the header or handle. It can also be closed when dragging the
1980
- * content, but only if the content is scrolled to the top.
1981
- */
1982
- expandToScroll = true;
1983
- /**
1984
- * A decimal value between 0 and 1 that indicates the
1985
- * initial point the modal will open at when creating a
1986
- * sheet modal. This value must also be listed in the
1987
- * `breakpoints` array.
1988
- */
1989
- initialBreakpoint;
1990
- /**
1991
- * A decimal value between 0 and 1 that indicates the
1992
- * point after which the backdrop will begin to fade in
1993
- * when using a sheet modal. Prior to this point, the
1994
- * backdrop will be hidden and the content underneath
1995
- * the sheet can be interacted with. This value is exclusive
1996
- * meaning the backdrop will become active after the value
1997
- * specified.
1998
- */
1999
- backdropBreakpoint = 0;
2000
- /**
2001
- * The horizontal line that displays at the top of a sheet modal. It is `true` by default when
2002
- * setting the `breakpoints` and `initialBreakpoint` properties.
2003
- */
2004
- handle;
2005
- /**
2006
- * The interaction behavior for the sheet modal when the handle is pressed.
2007
- *
2008
- * Handle behavior is unavailable when the `handle` property is set to
2009
- * `false` or when the `breakpoints` property is not set (using a
2010
- * fullscreen or card modal).
2011
- *
2012
- * Set to `"cycle"` to make the handle focusable and let the sheet modal
2013
- * cycle between available breakpoints when pressed. This keeps the sheet
2014
- * operable with assistive technology.
2015
- *
2016
- * Set to `"none"` to make the handle purely decorative when pressed and
2017
- * removed from the tab order.
2018
- *
2019
- * Defaults to `"cycle"`.
2020
- */
2021
- handleBehavior = 'cycle';
2022
- /**
2023
- * The component to display inside of the modal.
2024
- * @internal
2025
- */
2026
- component;
2027
- /**
2028
- * The data to pass to the modal component.
2029
- * @internal
2030
- */
2031
- componentProps;
2032
- /**
2033
- * Additional classes to apply for custom CSS. If multiple classes are
2034
- * provided they should be separated by spaces.
2035
- * @internal
2036
- */
2037
- cssClass;
2038
- /**
2039
- * If `true`, the modal will be dismissed when the backdrop is clicked.
2040
- */
2041
- backdropDismiss = true;
2042
- /**
2043
- * If `true`, a backdrop will be displayed behind the modal.
2044
- * This property controls whether or not the backdrop
2045
- * darkens the screen when the modal is presented.
2046
- * It does not control whether or not the backdrop
2047
- * is active or present in the DOM.
2048
- */
2049
- showBackdrop = true;
2050
- /**
2051
- * If `true`, the modal will animate.
2052
- */
2053
- animated = true;
2054
- /**
2055
- * The element that presented the modal. This is used for card presentation effects
2056
- * and for stacking multiple modals on top of each other. Only applies in iOS mode.
2057
- */
2058
- presentingElement;
2059
- /**
2060
- * Additional attributes to pass to the modal.
2061
- */
2062
- htmlAttributes;
2063
- /**
2064
- * If `true`, the modal will open. If `false`, the modal will close.
2065
- * Use this if you need finer grained control over presentation, otherwise
2066
- * just use the modalController or the `trigger` property.
2067
- * Note: `isOpen` will not automatically be set back to `false` when
2068
- * the modal dismisses. You will need to do that in your code.
2069
- */
2070
- isOpen = false;
1970
+ index$2.registerInstance(this, hostRef);
1971
+ this.didPresent = index$2.createEvent(this, "ionModalDidPresent", 7);
1972
+ this.willPresent = index$2.createEvent(this, "ionModalWillPresent", 7);
1973
+ this.willDismiss = index$2.createEvent(this, "ionModalWillDismiss", 7);
1974
+ this.didDismiss = index$2.createEvent(this, "ionModalDidDismiss", 7);
1975
+ this.ionBreakpointDidChange = index$2.createEvent(this, "ionBreakpointDidChange", 7);
1976
+ this.didPresentShorthand = index$2.createEvent(this, "didPresent", 7);
1977
+ this.willPresentShorthand = index$2.createEvent(this, "willPresent", 7);
1978
+ this.willDismissShorthand = index$2.createEvent(this, "willDismiss", 7);
1979
+ this.didDismissShorthand = index$2.createEvent(this, "didDismiss", 7);
1980
+ this.ionMount = index$2.createEvent(this, "ionMount", 7);
1981
+ this.ionDragStart = index$2.createEvent(this, "ionDragStart", 7);
1982
+ this.ionDragMove = index$2.createEvent(this, "ionDragMove", 7);
1983
+ this.ionDragEnd = index$2.createEvent(this, "ionDragEnd", 7);
1984
+ this.lockController = lockController.createLockController();
1985
+ this.triggerController = overlays.createTriggerController();
1986
+ this.coreDelegate = frameworkDelegate.CoreDelegate();
1987
+ this.isSheetModal = false;
1988
+ this.inheritedAttributes = {};
1989
+ this.inline = false;
1990
+ // Whether or not modal is being dismissed via gesture
1991
+ this.gestureAnimationDismissing = false;
1992
+ this.presented = false;
1993
+ /** @internal */
1994
+ this.hasController = false;
1995
+ /**
1996
+ * If `true`, the keyboard will be automatically dismissed when the overlay is presented.
1997
+ */
1998
+ this.keyboardClose = true;
1999
+ /**
2000
+ * Controls whether scrolling or dragging within the sheet modal expands
2001
+ * it to a larger breakpoint. This only takes effect when `breakpoints`
2002
+ * and `initialBreakpoint` are set.
2003
+ *
2004
+ * If `true`, scrolling or dragging anywhere in the modal will first expand
2005
+ * it to the next breakpoint. Once fully expanded, scrolling will affect the
2006
+ * content.
2007
+ * If `false`, scrolling will always affect the content. The modal will
2008
+ * only expand when dragging the header or handle. The modal will close when
2009
+ * dragging the header or handle. It can also be closed when dragging the
2010
+ * content, but only if the content is scrolled to the top.
2011
+ */
2012
+ this.expandToScroll = true;
2013
+ /**
2014
+ * A decimal value between 0 and 1 that indicates the
2015
+ * point after which the backdrop will begin to fade in
2016
+ * when using a sheet modal. Prior to this point, the
2017
+ * backdrop will be hidden and the content underneath
2018
+ * the sheet can be interacted with. This value is exclusive
2019
+ * meaning the backdrop will become active after the value
2020
+ * specified.
2021
+ */
2022
+ this.backdropBreakpoint = 0;
2023
+ /**
2024
+ * The interaction behavior for the sheet modal when the handle is pressed.
2025
+ *
2026
+ * Defaults to `"none"`, which means the modal will not change size or position when the handle is pressed.
2027
+ * Set to `"cycle"` to let the modal cycle between available breakpoints when pressed.
2028
+ *
2029
+ * Handle behavior is unavailable when the `handle` property is set to `false` or
2030
+ * when the `breakpoints` property is not set (using a fullscreen or card modal).
2031
+ */
2032
+ this.handleBehavior = 'none';
2033
+ /**
2034
+ * If `true`, the modal will be dismissed when the backdrop is clicked.
2035
+ */
2036
+ this.backdropDismiss = true;
2037
+ /**
2038
+ * If `true`, a backdrop will be displayed behind the modal.
2039
+ * This property controls whether or not the backdrop
2040
+ * darkens the screen when the modal is presented.
2041
+ * It does not control whether or not the backdrop
2042
+ * is active or present in the DOM.
2043
+ */
2044
+ this.showBackdrop = true;
2045
+ /**
2046
+ * If `true`, the modal will animate.
2047
+ */
2048
+ this.animated = true;
2049
+ /**
2050
+ * If `true`, the modal will open. If `false`, the modal will close.
2051
+ * Use this if you need finer grained control over presentation, otherwise
2052
+ * just use the modalController or the `trigger` property.
2053
+ * Note: `isOpen` will not automatically be set back to `false` when
2054
+ * the modal dismisses. You will need to do that in your code.
2055
+ */
2056
+ this.isOpen = false;
2057
+ /**
2058
+ * If `true`, the component passed into `ion-modal` will
2059
+ * automatically be mounted when the modal is created. The
2060
+ * component will remain mounted even when the modal is dismissed.
2061
+ * However, the component will be destroyed when the modal is
2062
+ * destroyed. This property is not reactive and should only be
2063
+ * used when initially creating a modal.
2064
+ *
2065
+ * Note: This feature only applies to inline modals in JavaScript
2066
+ * frameworks such as Angular, React, and Vue.
2067
+ */
2068
+ this.keepContentsMounted = false;
2069
+ /**
2070
+ * If `true`, focus will not be allowed to move outside of this overlay.
2071
+ * If `false`, focus will be allowed to move outside of the overlay.
2072
+ *
2073
+ * In most scenarios this property should remain set to `true`. Setting
2074
+ * this property to `false` can cause severe accessibility issues as users
2075
+ * relying on assistive technologies may be able to move focus into
2076
+ * a confusing state. We recommend only setting this to `false` when
2077
+ * absolutely necessary.
2078
+ *
2079
+ * Developers may want to consider disabling focus trapping if this
2080
+ * overlay presents a non-Ionic overlay from a 3rd party library.
2081
+ * Developers would disable focus trapping on the Ionic overlay
2082
+ * when presenting the 3rd party overlay and then re-enable
2083
+ * focus trapping when dismissing the 3rd party overlay and moving
2084
+ * focus back to the Ionic overlay.
2085
+ */
2086
+ this.focusTrap = true;
2087
+ /**
2088
+ * Determines whether or not a modal can dismiss
2089
+ * when calling the `dismiss` method.
2090
+ *
2091
+ * If the value is `true` or the value's function returns `true`, the modal will close when trying to dismiss.
2092
+ * If the value is `false` or the value's function returns `false`, the modal will not close when trying to dismiss.
2093
+ *
2094
+ * See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this
2095
+ * if you need to access `this` from within the callback.
2096
+ */
2097
+ this.canDismiss = true;
2098
+ this.onHandleClick = () => {
2099
+ const { sheetTransition, handleBehavior } = this;
2100
+ if (handleBehavior !== 'cycle' || sheetTransition !== undefined) {
2101
+ /**
2102
+ * The sheet modal should not advance to the next breakpoint
2103
+ * if the handle behavior is not `cycle` or if the handle
2104
+ * is clicked while the sheet is moving to a breakpoint.
2105
+ */
2106
+ return;
2107
+ }
2108
+ this.moveToNextBreakpoint();
2109
+ };
2110
+ this.onBackdropTap = () => {
2111
+ const { sheetTransition } = this;
2112
+ if (sheetTransition !== undefined) {
2113
+ /**
2114
+ * When the handle is double clicked at the largest breakpoint,
2115
+ * it will start to move to the first breakpoint. While transitioning,
2116
+ * the backdrop will often receive the second click. We prevent the
2117
+ * backdrop from dismissing the modal while moving between breakpoints.
2118
+ */
2119
+ return;
2120
+ }
2121
+ this.dismiss(undefined, overlays.BACKDROP);
2122
+ };
2123
+ this.onLifecycle = (modalEvent) => {
2124
+ const el = this.usersElement;
2125
+ const name = LIFECYCLE_MAP[modalEvent.type];
2126
+ if (el && name) {
2127
+ const ev = new CustomEvent(name, {
2128
+ bubbles: false,
2129
+ cancelable: false,
2130
+ detail: modalEvent.detail,
2131
+ });
2132
+ el.dispatchEvent(ev);
2133
+ }
2134
+ };
2135
+ /**
2136
+ * When the modal receives focus directly, pass focus to the handle
2137
+ * if it exists and is focusable, otherwise let the focus trap handle it.
2138
+ */
2139
+ this.onModalFocus = (ev) => {
2140
+ var _a;
2141
+ const { dragHandleEl, el } = this;
2142
+ /**
2143
+ * Shadow DOM focus is retargeted to the host, so `ev.target === el` is also
2144
+ * true when a shadow child (the dialog wrapper present() focuses) is focused.
2145
+ * shadowRoot's activeElement is null only when the host was focused directly,
2146
+ * so redirect to the handle only then and leave present()'s wrapper focus intact.
2147
+ */
2148
+ if (ev.target === el && ((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.activeElement) == null && dragHandleEl && dragHandleEl.tabIndex !== -1) {
2149
+ dragHandleEl.focus();
2150
+ }
2151
+ };
2152
+ /**
2153
+ * When the slot changes, we need to find all the modals in the slot
2154
+ * and set the data-parent-ion-modal attribute on them so we can find them
2155
+ * and dismiss them when we get dismissed.
2156
+ * We need to do it this way because when a modal is opened, it's moved to
2157
+ * the end of the body and is no longer an actual child of the modal.
2158
+ */
2159
+ this.onSlotChange = ({ target }) => {
2160
+ const slot = target;
2161
+ slot.assignedElements().forEach((el) => {
2162
+ el.querySelectorAll('ion-modal').forEach((childModal) => {
2163
+ // We don't need to write to the DOM if the modal is already tagged
2164
+ // If this is a deeply nested modal, this effect should cascade so we don't
2165
+ // need to worry about another modal claiming the same child.
2166
+ if (childModal.getAttribute('data-parent-ion-modal') === null) {
2167
+ childModal.setAttribute('data-parent-ion-modal', this.el.id);
2168
+ }
2169
+ });
2170
+ });
2171
+ };
2172
+ }
2071
2173
  onIsOpenChange(newValue, oldValue) {
2072
2174
  if (newValue === true && oldValue === false) {
2073
2175
  this.present();
@@ -2076,11 +2178,6 @@ const Modal = class {
2076
2178
  this.dismiss();
2077
2179
  }
2078
2180
  }
2079
- /**
2080
- * An ID corresponding to the trigger element that
2081
- * causes the modal to open when clicked.
2082
- */
2083
- trigger;
2084
2181
  triggerChanged() {
2085
2182
  const { trigger, el, triggerController } = this;
2086
2183
  if (trigger) {
@@ -2113,108 +2210,6 @@ const Modal = class {
2113
2210
  }
2114
2211
  }, 50); // Debounce to avoid excessive calls during active resizing
2115
2212
  }
2116
- /**
2117
- * If `true`, the component passed into `ion-modal` will
2118
- * automatically be mounted when the modal is created. The
2119
- * component will remain mounted even when the modal is dismissed.
2120
- * However, the component will be destroyed when the modal is
2121
- * destroyed. This property is not reactive and should only be
2122
- * used when initially creating a modal.
2123
- *
2124
- * Note: This feature only applies to inline modals in JavaScript
2125
- * frameworks such as Angular, React, and Vue.
2126
- */
2127
- keepContentsMounted = false;
2128
- /**
2129
- * If `true`, focus will not be allowed to move outside of this overlay.
2130
- * If `false`, focus will be allowed to move outside of the overlay.
2131
- *
2132
- * In most scenarios this property should remain set to `true`. Setting
2133
- * this property to `false` can cause severe accessibility issues as users
2134
- * relying on assistive technologies may be able to move focus into
2135
- * a confusing state. We recommend only setting this to `false` when
2136
- * absolutely necessary.
2137
- *
2138
- * Developers may want to consider disabling focus trapping if this
2139
- * overlay presents a non-Ionic overlay from a 3rd party library.
2140
- * Developers would disable focus trapping on the Ionic overlay
2141
- * when presenting the 3rd party overlay and then re-enable
2142
- * focus trapping when dismissing the 3rd party overlay and moving
2143
- * focus back to the Ionic overlay.
2144
- */
2145
- focusTrap = true;
2146
- /**
2147
- * Determines whether or not a modal can dismiss
2148
- * when calling the `dismiss` method.
2149
- *
2150
- * If the value is `true` or the value's function returns `true`, the modal will close when trying to dismiss.
2151
- * If the value is `false` or the value's function returns `false`, the modal will not close when trying to dismiss.
2152
- *
2153
- * See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this
2154
- * if you need to access `this` from within the callback.
2155
- */
2156
- canDismiss = true;
2157
- /**
2158
- * Emitted after the modal has presented.
2159
- */
2160
- didPresent;
2161
- /**
2162
- * Emitted before the modal has presented.
2163
- */
2164
- willPresent;
2165
- /**
2166
- * Emitted before the modal has dismissed.
2167
- */
2168
- willDismiss;
2169
- /**
2170
- * Emitted after the modal has dismissed.
2171
- */
2172
- didDismiss;
2173
- /**
2174
- * Emitted after the modal breakpoint has changed.
2175
- */
2176
- ionBreakpointDidChange;
2177
- /**
2178
- * Emitted after the modal has presented.
2179
- * Shorthand for ionModalDidPresent.
2180
- */
2181
- didPresentShorthand;
2182
- /**
2183
- * Emitted before the modal has presented.
2184
- * Shorthand for ionModalWillPresent.
2185
- */
2186
- willPresentShorthand;
2187
- /**
2188
- * Emitted before the modal has dismissed.
2189
- * Shorthand for ionModalWillDismiss.
2190
- */
2191
- willDismissShorthand;
2192
- /**
2193
- * Emitted after the modal has dismissed.
2194
- * Shorthand for ionModalDidDismiss.
2195
- */
2196
- didDismissShorthand;
2197
- /**
2198
- * Emitted before the modal has presented, but after the component
2199
- * has been mounted in the DOM.
2200
- * This event exists so iOS can run the entering
2201
- * transition properly
2202
- *
2203
- * @internal
2204
- */
2205
- ionMount;
2206
- /**
2207
- * Event that is emitted when the sheet modal or card modal gesture starts.
2208
- */
2209
- ionDragStart;
2210
- /**
2211
- * Event that is emitted when the sheet modal or card modal gesture moves.
2212
- */
2213
- ionDragMove;
2214
- /**
2215
- * Event that is emitted when the sheet modal or card modal gesture ends.
2216
- */
2217
- ionDragEnd;
2218
2213
  breakpointsChanged(breakpoints) {
2219
2214
  if (breakpoints !== undefined) {
2220
2215
  this.sortedBreakpoints = breakpoints.sort((a, b) => a - b);
@@ -2232,12 +2227,9 @@ const Modal = class {
2232
2227
  // Also called in dismiss() — intentional dual cleanup covers both
2233
2228
  // dismiss-then-remove and direct DOM removal without dismiss.
2234
2229
  this.cleanupSafeAreaOverrides();
2235
- // Clean up aria-hidden if removed without dismiss() being called
2236
- if (this.presented) {
2237
- overlays.cleanupRootFocusTrapAccessibility();
2238
- }
2239
2230
  }
2240
2231
  componentWillLoad() {
2232
+ var _a;
2241
2233
  const { breakpoints, initialBreakpoint, el, htmlAttributes } = this;
2242
2234
  const isSheetModal = (this.isSheetModal = breakpoints !== undefined && initialBreakpoint !== undefined);
2243
2235
  const attributesToInherit = ['aria-label', 'role'];
@@ -2272,10 +2264,7 @@ const Modal = class {
2272
2264
  * htmlAttributes wins, but that's not a pattern that we recommend.
2273
2265
  * The only time you'd need htmlAttributes is when using modalController.
2274
2266
  */
2275
- this.inheritedAttributes = {
2276
- ...this.inheritedAttributes,
2277
- [attribute]: htmlAttributes[attribute],
2278
- };
2267
+ this.inheritedAttributes = Object.assign(Object.assign({}, this.inheritedAttributes), { [attribute]: htmlAttributes[attribute] });
2279
2268
  delete htmlAttributes[attribute];
2280
2269
  }
2281
2270
  });
@@ -2284,9 +2273,9 @@ const Modal = class {
2284
2273
  this.currentBreakpoint = this.initialBreakpoint;
2285
2274
  }
2286
2275
  if (breakpoints !== undefined && initialBreakpoint !== undefined && !breakpoints.includes(initialBreakpoint)) {
2287
- index$3.printIonWarning('[ion-modal] - Your breakpoints array must include the initialBreakpoint value.');
2276
+ index$2.printIonWarning('[ion-modal] - Your breakpoints array must include the initialBreakpoint value.');
2288
2277
  }
2289
- if (!this.htmlAttributes?.id) {
2278
+ if (!((_a = this.htmlAttributes) === null || _a === void 0 ? void 0 : _a.id)) {
2290
2279
  overlays.setOverlayId(this.el);
2291
2280
  }
2292
2281
  }
@@ -2384,7 +2373,7 @@ const Modal = class {
2384
2373
  * get the transition incorrect.
2385
2374
  */
2386
2375
  if (helpers.hasLazyBuild(el)) {
2387
- await index$4.deepReady(this.usersElement);
2376
+ await index$3.deepReady(this.usersElement);
2388
2377
  /**
2389
2378
  * If keepContentsMounted="true" then the
2390
2379
  * JS Framework has already mounted the inner
@@ -2395,9 +2384,9 @@ const Modal = class {
2395
2384
  */
2396
2385
  }
2397
2386
  else if (!this.keepContentsMounted) {
2398
- await index$4.waitForMount();
2387
+ await index$3.waitForMount();
2399
2388
  }
2400
- index$3.writeTask(() => this.el.classList.add('show-modal'));
2389
+ index$2.writeTask(() => this.el.classList.add('show-modal'));
2401
2390
  // Recalculate isSheetModal before safe-area setup because framework
2402
2391
  // bindings (e.g., Angular) may not have been applied when componentWillLoad ran.
2403
2392
  this.isSheetModal = this.breakpoints !== undefined && this.initialBreakpoint !== undefined;
@@ -2414,11 +2403,12 @@ const Modal = class {
2414
2403
  this.statusBarStyle = await StatusBar.getStyle();
2415
2404
  setCardStatusBarDark();
2416
2405
  }
2417
- await overlays.present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
2406
+ await overlays.present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, ionicEnterAnimation, {
2418
2407
  presentingEl: presentingElement,
2419
2408
  currentBreakpoint: this.initialBreakpoint,
2420
2409
  backdropBreakpoint: this.backdropBreakpoint,
2421
2410
  expandToScroll: this.expandToScroll,
2411
+ staticBackdropOpacity: ionicGlobal.getIonTheme(this) === 'ionic',
2422
2412
  });
2423
2413
  // Update safe-area based on actual position after animation
2424
2414
  this.updateSafeAreaOverrides();
@@ -2468,6 +2458,7 @@ const Modal = class {
2468
2458
  unlock();
2469
2459
  }
2470
2460
  initSwipeToClose() {
2461
+ var _a;
2471
2462
  if (ionicGlobal.getIonMode(this) !== 'ios') {
2472
2463
  return;
2473
2464
  }
@@ -2475,17 +2466,17 @@ const Modal = class {
2475
2466
  // All of the elements needed for the swipe gesture
2476
2467
  // should be in the DOM and referenced by now, except
2477
2468
  // for the presenting el
2478
- const animationBuilder = this.leaveAnimation || index$3.config.get('modalLeave', iosLeaveAnimation);
2469
+ const animationBuilder = this.leaveAnimation || index$2.config.get('modalLeave', iosLeaveAnimation);
2479
2470
  const ani = (this.animation = animationBuilder(el, {
2480
2471
  presentingEl: this.presentingElement,
2481
2472
  expandToScroll: this.expandToScroll,
2482
2473
  }));
2483
- const contentEl = index$1.findIonContent(el);
2474
+ const contentEl = index.findIonContent(el);
2484
2475
  if (!contentEl) {
2485
- index$1.printIonContentErrorMsg(el);
2476
+ index.printIonContentErrorMsg(el);
2486
2477
  return;
2487
2478
  }
2488
- const statusBarStyle = this.statusBarStyle ?? Style.Default;
2479
+ const statusBarStyle = (_a = this.statusBarStyle) !== null && _a !== void 0 ? _a : Style.Default;
2489
2480
  this.gesture = createSwipeToCloseGesture(el, ani, statusBarStyle, () => this.cardOnDismiss(), () => this.onDragStart(), (detail) => this.onDragMove(detail), (detail) => this.onDragEnd(detail));
2490
2481
  this.gesture.enable(true);
2491
2482
  }
@@ -2494,20 +2485,21 @@ const Modal = class {
2494
2485
  if (!wrapperEl || initialBreakpoint === undefined) {
2495
2486
  return;
2496
2487
  }
2497
- const animationBuilder = this.enterAnimation || index$3.config.get('modalEnter', iosEnterAnimation);
2488
+ const animationBuilder = this.enterAnimation || index$2.config.get('modalEnter', iosEnterAnimation);
2498
2489
  const ani = (this.animation = animationBuilder(this.el, {
2499
2490
  presentingEl: this.presentingElement,
2500
2491
  currentBreakpoint: initialBreakpoint,
2501
2492
  backdropBreakpoint,
2502
2493
  expandToScroll: this.expandToScroll,
2494
+ staticBackdropOpacity: ionicGlobal.getIonTheme(this) === 'ionic',
2503
2495
  }));
2504
2496
  ani.progressStart(true, 1);
2505
- const { gesture, moveSheetToBreakpoint, resetContentScroll } = createSheetGesture(this.el, this.backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, ani, this.sortedBreakpoints, this.expandToScroll, () => this.currentBreakpoint ?? 0, () => this.sheetOnDismiss(), (breakpoint) => {
2497
+ const { gesture, moveSheetToBreakpoint, resetContentScroll } = createSheetGesture(this.el, this.backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, ani, this.sortedBreakpoints, this.expandToScroll, () => { var _a; return (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : 0; }, () => this.sheetOnDismiss(), (breakpoint) => {
2506
2498
  if (this.currentBreakpoint !== breakpoint) {
2507
2499
  this.currentBreakpoint = breakpoint;
2508
2500
  this.ionBreakpointDidChange.emit({ breakpoint });
2509
2501
  }
2510
- }, () => this.onDragStart(), (detail) => this.onDragMove(detail), (detail) => this.onDragEnd(detail));
2502
+ }, ionicGlobal.getIonTheme(this) === 'ionic', () => this.onDragStart(), (detail) => this.onDragMove(detail), (detail) => this.onDragEnd(detail));
2511
2503
  this.gesture = gesture;
2512
2504
  this.moveSheetToBreakpoint = moveSheetToBreakpoint;
2513
2505
  this.resetSheetContentScroll = resetContentScroll;
@@ -2528,6 +2520,7 @@ const Modal = class {
2528
2520
  * passthrough on child route page wrappers and nested router outlets.
2529
2521
  */
2530
2522
  setupChildRoutePassthrough() {
2523
+ var _a;
2531
2524
  // Cache the page parent for cleanup
2532
2525
  this.cachedPageParent = this.getOriginalPageParent();
2533
2526
  const pageParent = this.cachedPageParent;
@@ -2535,11 +2528,14 @@ const Modal = class {
2535
2528
  if (!pageParent || pageParent.tagName === 'ION-APP') {
2536
2529
  return;
2537
2530
  }
2538
- const hasVisibleContent = Array.from(pageParent.children).some((child) => child !== this.el &&
2539
- !(child instanceof HTMLElement && window.getComputedStyle(child).display === 'none') &&
2540
- child.tagName !== 'TEMPLATE' &&
2541
- child.tagName !== 'SLOT' &&
2542
- !(child.nodeType === Node.TEXT_NODE && !child.textContent?.trim()));
2531
+ const hasVisibleContent = Array.from(pageParent.children).some((child) => {
2532
+ var _a;
2533
+ return child !== this.el &&
2534
+ !(child instanceof HTMLElement && window.getComputedStyle(child).display === 'none') &&
2535
+ child.tagName !== 'TEMPLATE' &&
2536
+ child.tagName !== 'SLOT' &&
2537
+ !(child.nodeType === Node.TEXT_NODE && !((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()));
2538
+ });
2543
2539
  if (hasVisibleContent) {
2544
2540
  return;
2545
2541
  }
@@ -2547,7 +2543,7 @@ const Modal = class {
2547
2543
  pageParent.classList.add('ion-page-overlay-passthrough');
2548
2544
  // Also make nested router outlets passthrough
2549
2545
  const routerOutlet = pageParent.parentElement;
2550
- if (routerOutlet?.tagName === 'ION-ROUTER-OUTLET' && routerOutlet.parentElement?.tagName !== 'ION-APP') {
2546
+ if ((routerOutlet === null || routerOutlet === void 0 ? void 0 : routerOutlet.tagName) === 'ION-ROUTER-OUTLET' && ((_a = routerOutlet.parentElement) === null || _a === void 0 ? void 0 : _a.tagName) !== 'ION-APP') {
2551
2547
  routerOutlet.style.setProperty('pointer-events', 'none');
2552
2548
  routerOutlet.setAttribute('data-overlay-passthrough', 'true');
2553
2549
  }
@@ -2575,7 +2571,7 @@ const Modal = class {
2575
2571
  }
2576
2572
  pageParent.classList.remove('ion-page-overlay-passthrough');
2577
2573
  const routerOutlet = pageParent.parentElement;
2578
- if (routerOutlet?.hasAttribute('data-overlay-passthrough')) {
2574
+ if (routerOutlet === null || routerOutlet === void 0 ? void 0 : routerOutlet.hasAttribute('data-overlay-passthrough')) {
2579
2575
  routerOutlet.style.removeProperty('pointer-events');
2580
2576
  routerOutlet.removeAttribute('data-overlay-passthrough');
2581
2577
  }
@@ -2638,6 +2634,7 @@ const Modal = class {
2638
2634
  * For example, `cancel` or `backdrop`.
2639
2635
  */
2640
2636
  async dismiss(data, role) {
2637
+ var _a, _b;
2641
2638
  if (this.gestureAnimationDismissing && role !== overlays.GESTURE) {
2642
2639
  return false;
2643
2640
  }
@@ -2682,14 +2679,14 @@ const Modal = class {
2682
2679
  }
2683
2680
  const dismissed = await overlays.dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, {
2684
2681
  presentingEl: presentingElement,
2685
- currentBreakpoint: this.currentBreakpoint ?? this.initialBreakpoint,
2682
+ currentBreakpoint: (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : this.initialBreakpoint,
2686
2683
  backdropBreakpoint: this.backdropBreakpoint,
2687
2684
  expandToScroll: this.expandToScroll,
2688
2685
  });
2689
2686
  if (dismissed) {
2690
2687
  const { delegate } = this.getDelegate();
2691
2688
  await frameworkDelegate.detachComponent(delegate, this.usersElement);
2692
- index$3.writeTask(() => this.el.classList.remove('show-modal'));
2689
+ index$2.writeTask(() => this.el.classList.remove('show-modal'));
2693
2690
  if (this.animation) {
2694
2691
  this.animation.destroy();
2695
2692
  }
@@ -2701,7 +2698,7 @@ const Modal = class {
2701
2698
  * the top breakpoint. Inline modals reuse the same content on the next
2702
2699
  * present, so hand it back before the gesture goes away.
2703
2700
  */
2704
- this.resetSheetContentScroll?.();
2701
+ (_b = this.resetSheetContentScroll) === null || _b === void 0 ? void 0 : _b.call(this);
2705
2702
  this.resetSheetContentScroll = undefined;
2706
2703
  this.cleanupViewTransitionListener();
2707
2704
  this.cleanupParentRemovalObserver();
@@ -2733,11 +2730,11 @@ const Modal = class {
2733
2730
  */
2734
2731
  async setCurrentBreakpoint(breakpoint) {
2735
2732
  if (!this.isSheetModal) {
2736
- index$3.printIonWarning('[ion-modal] - setCurrentBreakpoint is only supported on sheet modals.');
2733
+ index$2.printIonWarning('[ion-modal] - setCurrentBreakpoint is only supported on sheet modals.');
2737
2734
  return;
2738
2735
  }
2739
2736
  if (!this.breakpoints.includes(breakpoint)) {
2740
- index$3.printIonWarning(`[ion-modal] - Attempted to set invalid breakpoint value ${breakpoint}. Please double check that the breakpoint value is part of your defined breakpoints.`);
2737
+ index$2.printIonWarning(`[ion-modal] - Attempted to set invalid breakpoint value ${breakpoint}. Please double check that the breakpoint value is part of your defined breakpoints.`);
2741
2738
  return;
2742
2739
  }
2743
2740
  const { currentBreakpoint, moveSheetToBreakpoint, canDismiss, breakpoints, animated } = this;
@@ -2782,59 +2779,18 @@ const Modal = class {
2782
2779
  await this.setCurrentBreakpoint(nextBreakpoint);
2783
2780
  return true;
2784
2781
  }
2785
- onHandleClick = () => {
2786
- const { sheetTransition, handleBehavior } = this;
2787
- if (handleBehavior !== 'cycle' || sheetTransition !== undefined) {
2788
- /**
2789
- * The sheet modal should not advance to the next breakpoint
2790
- * if the handle behavior is not `cycle` or if the handle
2791
- * is clicked while the sheet is moving to a breakpoint.
2792
- */
2793
- return;
2782
+ getShape() {
2783
+ const theme = ionicGlobal.getIonTheme(this);
2784
+ const { shape } = this;
2785
+ // TODO(ROU-11167): Remove theme check when shapes are defined for all themes.
2786
+ if (theme !== 'ionic') {
2787
+ return undefined;
2794
2788
  }
2795
- this.moveToNextBreakpoint();
2796
- };
2797
- onBackdropTap = () => {
2798
- const { sheetTransition } = this;
2799
- if (sheetTransition !== undefined) {
2800
- /**
2801
- * When the handle is double clicked at the largest breakpoint,
2802
- * it will start to move to the first breakpoint. While transitioning,
2803
- * the backdrop will often receive the second click. We prevent the
2804
- * backdrop from dismissing the modal while moving between breakpoints.
2805
- */
2806
- return;
2807
- }
2808
- this.dismiss(undefined, overlays.BACKDROP);
2809
- };
2810
- onLifecycle = (modalEvent) => {
2811
- const el = this.usersElement;
2812
- const name = LIFECYCLE_MAP[modalEvent.type];
2813
- if (el && name) {
2814
- const ev = new CustomEvent(name, {
2815
- bubbles: false,
2816
- cancelable: false,
2817
- detail: modalEvent.detail,
2818
- });
2819
- el.dispatchEvent(ev);
2820
- }
2821
- };
2822
- /**
2823
- * When the modal receives focus directly, pass focus to the handle
2824
- * if it exists and is focusable, otherwise let the focus trap handle it.
2825
- */
2826
- onModalFocus = (ev) => {
2827
- const { dragHandleEl, el } = this;
2828
- /**
2829
- * Shadow DOM focus is retargeted to the host, so `ev.target === el` is also
2830
- * true when a shadow child (the dialog wrapper present() focuses) is focused.
2831
- * shadowRoot's activeElement is null only when the host was focused directly,
2832
- * so redirect to the handle only then and leave present()'s wrapper focus intact.
2833
- */
2834
- if (ev.target === el && el.shadowRoot?.activeElement == null && dragHandleEl && dragHandleEl.tabIndex !== -1) {
2835
- dragHandleEl.focus();
2789
+ if (shape === undefined) {
2790
+ return 'round';
2836
2791
  }
2837
- };
2792
+ return shape;
2793
+ }
2838
2794
  initViewTransitionListener() {
2839
2795
  // Only enable for iOS card modals when no custom animations are provided
2840
2796
  if (ionicGlobal.getIonMode(this) !== 'ios' || !this.presentingElement || this.enterAnimation || this.leaveAnimation) {
@@ -2930,7 +2886,7 @@ const Modal = class {
2930
2886
  wrapperEl.style.transform = 'translateY(0vh)';
2931
2887
  wrapperEl.style.opacity = '1';
2932
2888
  }
2933
- if (presentingElement?.tagName === 'ION-MODAL') {
2889
+ if ((presentingElement === null || presentingElement === void 0 ? void 0 : presentingElement.tagName) === 'ION-MODAL') {
2934
2890
  const isPortrait = window.innerWidth < 768;
2935
2891
  if (isPortrait) {
2936
2892
  const transformOffset = !CSS.supports('width', 'max(0px, 1px)')
@@ -2944,29 +2900,9 @@ const Modal = class {
2944
2900
  }
2945
2901
  }
2946
2902
  }
2947
- /**
2948
- * When the slot changes, we need to find all the modals in the slot
2949
- * and set the data-parent-ion-modal attribute on them so we can find them
2950
- * and dismiss them when we get dismissed.
2951
- * We need to do it this way because when a modal is opened, it's moved to
2952
- * the end of the body and is no longer an actual child of the modal.
2953
- */
2954
- onSlotChange = ({ target }) => {
2955
- const slot = target;
2956
- slot.assignedElements().forEach((el) => {
2957
- el.querySelectorAll('ion-modal').forEach((childModal) => {
2958
- // We don't need to write to the DOM if the modal is already tagged
2959
- // If this is a deeply nested modal, this effect should cascade so we don't
2960
- // need to worry about another modal claiming the same child.
2961
- if (childModal.getAttribute('data-parent-ion-modal') === null) {
2962
- childModal.setAttribute('data-parent-ion-modal', this.el.id);
2963
- }
2964
- });
2965
- });
2966
- };
2967
2903
  async dismissNestedModals() {
2968
2904
  const nestedModals = document.querySelectorAll(`ion-modal[data-parent-ion-modal="${this.el.id}"]`);
2969
- nestedModals?.forEach(async (modal) => {
2905
+ nestedModals === null || nestedModals === void 0 ? void 0 : nestedModals.forEach(async (modal) => {
2970
2906
  await modal.dismiss(undefined, 'parent-dismissed');
2971
2907
  });
2972
2908
  }
@@ -2999,9 +2935,10 @@ const Modal = class {
2999
2935
  if (mutation.type === 'childList' && mutation.removedNodes.length > 0) {
3000
2936
  // Check if our cached original parent was removed
3001
2937
  const cachedParentWasRemoved = Array.from(mutation.removedNodes).some((node) => {
2938
+ var _a, _b;
3002
2939
  const isDirectMatch = node === this.cachedOriginalParent;
3003
2940
  const isContainedMatch = this.cachedOriginalParent
3004
- ? node.contains?.(this.cachedOriginalParent)
2941
+ ? (_b = (_a = node).contains) === null || _b === void 0 ? void 0 : _b.call(_a, this.cachedOriginalParent)
3005
2942
  : false;
3006
2943
  return isDirectMatch || isContainedMatch;
3007
2944
  });
@@ -3023,7 +2960,8 @@ const Modal = class {
3023
2960
  });
3024
2961
  }
3025
2962
  cleanupParentRemovalObserver() {
3026
- this.parentRemovalObserver?.disconnect();
2963
+ var _a;
2964
+ (_a = this.parentRemovalObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
3027
2965
  this.parentRemovalObserver = undefined;
3028
2966
  }
3029
2967
  onDragStart() {
@@ -3063,10 +3001,7 @@ const Modal = class {
3063
3001
  * sheets to prevent header content from getting double-offset padding).
3064
3002
  */
3065
3003
  setInitialSafeAreaOverrides() {
3066
- const context = {
3067
- ...this.getSafeAreaContext(),
3068
- hasCustomDimensions: hasCustomModalDimensions(this.el),
3069
- };
3004
+ const context = Object.assign(Object.assign({}, this.getSafeAreaContext()), { hasCustomDimensions: hasCustomModalDimensions(this.el) });
3070
3005
  const safeAreaConfig = getInitialSafeAreaConfig(context);
3071
3006
  applySafeAreaOverrides(this.el, safeAreaConfig);
3072
3007
  // Set the internal offset property with the resolved root safe-area-top value
@@ -3082,7 +3017,7 @@ const Modal = class {
3082
3017
  * and whenever the root safe-area value itself changes.
3083
3018
  */
3084
3019
  updateSheetOffsetTop(safeAreaTop) {
3085
- const value = safeAreaTop ?? getRootSafeAreaTop();
3020
+ const value = safeAreaTop !== null && safeAreaTop !== void 0 ? safeAreaTop : getRootSafeAreaTop();
3086
3021
  this.el.style.setProperty('--ion-modal-offset-top', `${value}px`);
3087
3022
  }
3088
3023
  /**
@@ -3182,8 +3117,9 @@ const Modal = class {
3182
3117
  * Clears all safe-area overrides and padding.
3183
3118
  */
3184
3119
  cleanupSafeAreaOverrides() {
3120
+ var _a;
3185
3121
  clearSafeAreaOverrides(this.el);
3186
- this.unsubscribeRootSafeAreaTop?.();
3122
+ (_a = this.unsubscribeRootSafeAreaTop) === null || _a === void 0 ? void 0 : _a.call(this);
3187
3123
  this.unsubscribeRootSafeAreaTop = undefined;
3188
3124
  // Remove internal sheet offset property
3189
3125
  this.el.style.removeProperty('--ion-modal-offset-top');
@@ -3193,24 +3129,16 @@ const Modal = class {
3193
3129
  render() {
3194
3130
  const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap, expandToScroll, } = this;
3195
3131
  const showHandle = handle !== false && isSheetModal;
3196
- const mode = ionicGlobal.getIonMode(this);
3197
- const isCardModal = presentingElement !== undefined && mode === 'ios';
3132
+ const theme$1 = ionicGlobal.getIonTheme(this);
3133
+ const isCardModal = presentingElement !== undefined && theme$1 === 'ios';
3198
3134
  const isHandleCycle = handleBehavior === 'cycle';
3135
+ const shape = this.getShape();
3199
3136
  const isSheetModalWithHandle = isSheetModal && showHandle;
3200
- return (index$3.h(index$3.Host, { key: 'a471c293319cb6ee5ffb7ffafec0b8413e4289de', "no-router": true,
3137
+ return (index$2.h(index$2.Host, Object.assign({ key: 'cf99da2a03dd010716265401c8b6fe46a9bf0ced', "no-router": true,
3201
3138
  // Allow the modal to be navigable when the handle is focusable
3202
- tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1, ...htmlAttributes, style: {
3139
+ tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
3203
3140
  zIndex: `${20000 + this.overlayIndex}`,
3204
- }, class: {
3205
- [mode]: true,
3206
- ['modal-default']: !isCardModal && !isSheetModal,
3207
- [`modal-card`]: isCardModal,
3208
- [`modal-sheet`]: isSheetModal,
3209
- [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll,
3210
- 'overlay-hidden': true,
3211
- [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false,
3212
- ...theme.getClassMap(this.cssClass),
3213
- }, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, index$3.h("ion-backdrop", { key: 'f67934afd4ddad64623856fb641cb6db846df428', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && index$3.h("div", { key: 'a23f5cb6cf60c8f717c1dd556bce375829c80a43', class: "modal-shadow" }), index$3.h("div", { key: '51eb6cd1070e4b7e49840a78dc7437238c867a01',
3141
+ }, class: Object.assign({ [theme$1]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-${shape}`]: shape !== undefined, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, theme.getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), index$2.h("ion-backdrop", { key: '91d148a13955bcda57b5d15d2613e74cc8cd5047', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), theme$1 === 'ios' && index$2.h("div", { key: 'bd51fa967ced9c6d574f0bb6d3c569fe53a2be59', class: "modal-shadow" }), index$2.h("div", Object.assign({ key: '45fc1228a8dfc8009c933c6cee4067c08ab27fe6',
3214
3142
  /*
3215
3143
  role and aria-modal must be used on the
3216
3144
  same element. They must also be set inside the
@@ -3223,10 +3151,11 @@ const Modal = class {
3223
3151
  without the tabindex focus() would be a no-op and screen readers
3224
3152
  may not properly announce the dialog and its content when it opens.
3225
3153
  */
3226
- role: "dialog", ...inheritedAttributes, "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }, showHandle && (index$3.h("button", { key: 'f49a144642b5c227c0c2b00b33f4c7e37a2bf088', class: "modal-handle",
3154
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (index$2.h("button", { key: '9bcc1589af7c422ee6f116aa50f62981031042ba', class: "modal-handle",
3227
3155
  // Prevents the handle from receiving keyboard focus when it does not cycle
3228
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), index$3.h("slot", { key: 'e781c0d5881762c6b61aa432721a38b49580ff64', onSlotchange: this.onSlotChange }))));
3156
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", "data-focus-order": "1", ref: (el) => (this.dragHandleEl = el) })), index$2.h("slot", { key: 'd913facdd6abf0d87ba5e2d7f8b2f1c18e3ef556', onSlotchange: this.onSlotChange }))));
3229
3157
  }
3158
+ get el() { return index$2.getElement(this); }
3230
3159
  static get watchers() { return {
3231
3160
  "isOpen": [{
3232
3161
  "onIsOpenChange": 0
@@ -3246,6 +3175,7 @@ const LIFECYCLE_MAP = {
3246
3175
  ionModalDidDismiss: 'ionViewDidLeave',
3247
3176
  };
3248
3177
  Modal.style = {
3178
+ ionic: modalIonicCss(),
3249
3179
  ios: modalIosCss(),
3250
3180
  md: modalMdCss()
3251
3181
  };