@ionic/core 8.8.20-dev.11787158518.168a2fea → 8.8.20-dev.11789504012.1a675914

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