voyager-ionic-core 9.0.3 → 9.0.7

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 (553) 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-fab-button.js +1 -1
  27. package/components/ion-fab-list.js +1 -1
  28. package/components/ion-fab.js +1 -1
  29. package/components/ion-footer.js +1 -1
  30. package/components/ion-grid.js +1 -1
  31. package/components/ion-header.js +1 -1
  32. package/components/ion-icon.js +1 -1
  33. package/components/ion-img.js +1 -1
  34. package/components/ion-infinite-scroll-content.js +1 -1
  35. package/components/ion-infinite-scroll.js +1 -1
  36. package/components/ion-input-otp.js +1 -1
  37. package/components/ion-input-password-toggle.js +1 -1
  38. package/components/ion-input.js +1 -1
  39. package/components/ion-item-divider.js +1 -1
  40. package/components/ion-item-group.js +1 -1
  41. package/components/ion-item-option.js +1 -1
  42. package/components/ion-item-options.js +1 -1
  43. package/components/ion-item-sliding.js +1 -1
  44. package/components/ion-item.js +1 -1
  45. package/components/ion-label.js +1 -1
  46. package/components/ion-list-header.js +1 -1
  47. package/components/ion-list.js +1 -1
  48. package/components/ion-loading.js +1 -1
  49. package/components/ion-menu-button.js +1 -1
  50. package/components/ion-menu-toggle.js +1 -1
  51. package/components/ion-menu.js +1 -1
  52. package/components/ion-modal.js +1 -1
  53. package/components/ion-nav-link.js +1 -1
  54. package/components/ion-nav.js +1 -1
  55. package/components/ion-note.js +1 -1
  56. package/components/ion-picker-column-option.js +1 -1
  57. package/components/ion-picker-column.js +1 -1
  58. package/components/ion-picker.js +1 -1
  59. package/components/ion-popover.js +1 -1
  60. package/components/ion-progress-bar.js +1 -1
  61. package/components/ion-radio-group.js +1 -1
  62. package/components/ion-radio.js +1 -1
  63. package/components/ion-range.js +1 -1
  64. package/components/ion-refresher-content.js +1 -1
  65. package/components/ion-refresher.js +1 -1
  66. package/components/ion-reorder-group.js +1 -1
  67. package/components/ion-reorder.js +1 -1
  68. package/components/ion-ripple-effect.js +1 -1
  69. package/components/ion-route-redirect.js +1 -1
  70. package/components/ion-route.js +1 -1
  71. package/components/ion-router-link.js +1 -1
  72. package/components/ion-router-outlet.js +1 -1
  73. package/components/ion-router.js +1 -1
  74. package/components/ion-row.js +1 -1
  75. package/components/ion-searchbar.js +1 -1
  76. package/components/ion-segment-button.js +1 -1
  77. package/components/ion-segment-content.js +1 -1
  78. package/components/ion-segment-view.js +1 -1
  79. package/components/ion-segment.js +1 -1
  80. package/components/ion-select-modal.js +1 -1
  81. package/components/ion-select-option.js +1 -1
  82. package/components/ion-select-popover.js +1 -1
  83. package/components/ion-select.js +1 -1
  84. package/components/ion-skeleton-text.js +1 -1
  85. package/components/ion-spinner.js +1 -1
  86. package/components/ion-split-pane.js +1 -1
  87. package/components/ion-tab-bar.js +1 -1
  88. package/components/ion-tab-button.js +1 -1
  89. package/components/ion-tab.js +1 -1
  90. package/components/ion-tabs.js +1 -1
  91. package/components/ion-text.js +1 -1
  92. package/components/ion-textarea.js +1 -1
  93. package/components/ion-thumbnail.js +1 -1
  94. package/components/ion-title.js +1 -1
  95. package/components/ion-toast.js +1 -1
  96. package/components/ion-toggle.js +1 -1
  97. package/components/ion-toolbar.js +1 -1
  98. package/components/p--cshUOAU.js +4 -0
  99. package/components/{p-BF48Oc0v.js → p-7KepMw9O.js} +1 -1
  100. package/components/p-B-5Z9djt.js +4 -0
  101. package/components/p-B02CcbPD.js +4 -0
  102. package/components/p-B4IBdPVJ.js +4 -0
  103. package/components/{p-BYJRZKHa.js → p-BMHdI-wb.js} +1 -1
  104. package/components/p-BODcC-C0.js +4 -0
  105. package/components/{p-D7wDJdFn.js → p-Ba9_OzSY.js} +1 -1
  106. package/components/{p-DMBiAyOR.js → p-BqyLLYLm.js} +1 -1
  107. package/components/{p-BQyuFxYc.js → p-C1AxSUnp.js} +1 -1
  108. package/components/p-C7r5Gja6.js +4 -0
  109. package/components/{p-D5w_FlVa.js → p-CKiqp4Vl.js} +1 -1
  110. package/components/{p-C8Ck7_Eo.js → p-C_gnmBt2.js} +1 -1
  111. package/{dist/ionic/p-DTxBioUO.js → components/p-CdrNHfZl.js} +1 -1
  112. package/components/{p-DM1gJSMP.js → p-ChkSQqfP.js} +1 -1
  113. package/components/p-ChsJlFCQ.js +4 -0
  114. package/components/{p-cEN43Ahr.js → p-CjPRDxby.js} +1 -1
  115. package/components/p-CohRJRIu.js +4 -0
  116. package/components/{p-DxhHlJln.js → p-CqvARtmt.js} +1 -1
  117. package/components/p-Ct2aBEue.js +4 -0
  118. package/components/p-CtiO6_sC.js +4 -0
  119. package/components/{p-Hp8t4RMX.js → p-CvyvLbPe.js} +1 -1
  120. package/{dist/ionic/p-BMiZX1LT.js → components/p-CwEis84J.js} +1 -1
  121. package/components/p-CxEV3Vwy.js +4 -0
  122. package/components/p-Cyajikho.js +4 -0
  123. package/components/p-D64Tyi-z.js +4 -0
  124. package/components/{p-B4lxwJ8N.js → p-DBtFJlTi.js} +1 -1
  125. package/components/p-DD92Fw3n.js +4 -0
  126. package/components/p-DDI6VLW9.js +4 -0
  127. package/components/{p-Fl7ZFU74.js → p-DHo45oj7.js} +1 -1
  128. package/components/{p-COO0eJOA.js → p-DMPsc_0r.js} +1 -1
  129. package/{dist/ionic/p-DZ6Hmc-8.js → components/p-Dbi3KqKm.js} +1 -1
  130. package/components/p-DhfJAkyd.js +4 -0
  131. package/components/p-DnGlmM4u.js +4 -0
  132. package/components/{p-CJgnoKcN.js → p-Drpw2dyl.js} +1 -1
  133. package/components/{p-5ldEpNdG.js → p-Dvyv9SMk.js} +1 -1
  134. package/components/p-GpqwNbxf.js +4 -0
  135. package/components/{p-BJr2B5hZ.js → p-HthJZjZ6.js} +1 -1
  136. package/components/p-IQN1T5zw.js +4 -0
  137. package/components/{p-DL13ieTa.js → p-KbMCbGRA.js} +1 -1
  138. package/components/p-ODGeXc3M.js +4 -0
  139. package/components/p-R4UxBukQ.js +4 -0
  140. package/components/p-TLtgwTFF.js +4 -0
  141. package/components/p-Uk13YgEc.js +4 -0
  142. package/components/{p-qAXsfUff.js → p-V1THdfzs.js} +1 -1
  143. package/components/{p-C-NbvXu4.js → p-YNnH1_Hs.js} +1 -1
  144. package/components/{p-CqbGBmqb.js → p-ZrYBjOcc.js} +1 -1
  145. package/components/p-_y7kwBO8.js +4 -0
  146. package/components/{p-GGbIHyEF.js → p-hLu-eIbb.js} +1 -1
  147. package/components/p-jsVMT15X.js +4 -0
  148. package/components/{p-TWw4e4sO.js → p-r59A3wQk.js} +1 -1
  149. package/components/p-yGD6MBgf.js +4 -0
  150. package/css/core.css +1 -1
  151. package/css/core.css.map +1 -1
  152. package/css/display.css.map +1 -1
  153. package/css/flex-utils.css.map +1 -1
  154. package/css/float-elements.css +1 -1
  155. package/css/float-elements.css.map +1 -1
  156. package/css/global.bundle.css.map +1 -1
  157. package/css/ionic.bundle.css +1 -1
  158. package/css/ionic.bundle.css.map +1 -1
  159. package/css/padding.css.map +1 -1
  160. package/css/structure.css.map +1 -1
  161. package/css/text-alignment.css.map +1 -1
  162. package/css/text-transformation.css.map +1 -1
  163. package/css/typography.css.map +1 -1
  164. package/css/utils.bundle.css +1 -1
  165. package/css/utils.bundle.css.map +1 -1
  166. package/dist/cjs/{animation-Kd1N7WTN.js → animation-DcgLg_PI.js} +3 -3
  167. package/dist/cjs/{app-globals-b1G4t26O.js → app-globals-BoFCZq0K.js} +1 -1
  168. package/dist/cjs/attribute-controller-BjTE2TOf.js +131 -0
  169. package/dist/cjs/{button-active-CQCFubJJ.js → button-active-FdsfRDY_.js} +2 -2
  170. package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-C6Pp4Z7A.js} +3 -3
  171. package/dist/cjs/{format-bHU8N1g5.js → format-CVjpvAl1.js} +1 -1
  172. package/dist/cjs/{framework-delegate-d-fWfeI6.js → framework-delegate-JbKIVMzR.js} +1 -1
  173. package/dist/cjs/{haptic-Ch-X4gRx.js → haptic--4QteuuM.js} +1 -1
  174. package/dist/cjs/{helpers-7wzdhdeg.js → helpers-Cqr69qxA.js} +50 -3
  175. package/dist/cjs/{index-KiSZqhYS.js → index-B4ONUQRp.js} +1 -1
  176. package/dist/cjs/{index-C74Q3t6a.js → index-BQpSekmz.js} +7 -8
  177. package/dist/cjs/{index-DFNrCX7M.js → index-BhWiDK25.js} +9 -9
  178. package/dist/cjs/{index-DXoo08JC.js → index-BiQyIvoc.js} +54 -28
  179. package/dist/cjs/{index-DtvKGwdh.js → index-CNaZ6SYM.js} +2 -2
  180. package/dist/cjs/{index-CQfEIyLK.js → index-DUiuw_fH.js} +4 -4
  181. package/dist/cjs/index.cjs.js +19 -19
  182. package/dist/cjs/{input-shims-VJIiKBKv.js → input-shims-2AsXPZ5m.js} +16 -17
  183. package/dist/cjs/{input.utils-EHVE2RK_.js → input.utils-Becpo0ax.js} +1 -1
  184. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  185. package/dist/cjs/ion-action-sheet.cjs.entry.js +26 -28
  186. package/dist/cjs/ion-alert.cjs.entry.js +27 -29
  187. package/dist/cjs/ion-app_8.cjs.entry.js +72 -24
  188. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  189. package/dist/cjs/ion-back-button.cjs.entry.js +3 -3
  190. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  191. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +3 -3
  192. package/dist/cjs/ion-button_2.cjs.entry.js +23 -34
  193. package/dist/cjs/ion-card_5.cjs.entry.js +19 -7
  194. package/dist/cjs/ion-checkbox.cjs.entry.js +4 -4
  195. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  196. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  197. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
  198. package/dist/cjs/ion-datetime.cjs.entry.js +34 -29
  199. package/dist/cjs/ion-fab_3.cjs.entry.js +3 -3
  200. package/dist/cjs/ion-img.cjs.entry.js +3 -3
  201. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +5 -5
  202. package/dist/cjs/ion-input-otp.cjs.entry.js +33 -8
  203. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +2 -2
  204. package/dist/cjs/ion-input.cjs.entry.js +12 -16
  205. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  206. package/dist/cjs/ion-item_8.cjs.entry.js +17 -8
  207. package/dist/cjs/ion-loading.cjs.entry.js +18 -20
  208. package/dist/cjs/ion-menu_3.cjs.entry.js +18 -19
  209. package/dist/cjs/ion-modal.cjs.entry.js +177 -172
  210. package/dist/cjs/ion-nav_2.cjs.entry.js +6 -6
  211. package/dist/cjs/ion-picker-column-option.cjs.entry.js +3 -3
  212. package/dist/cjs/ion-picker-column.cjs.entry.js +8 -9
  213. package/dist/cjs/ion-picker.cjs.entry.js +2 -2
  214. package/dist/cjs/ion-popover.cjs.entry.js +119 -42
  215. package/dist/cjs/ion-progress-bar.cjs.entry.js +3 -3
  216. package/dist/cjs/ion-radio_2.cjs.entry.js +4 -4
  217. package/dist/cjs/ion-range.cjs.entry.js +4 -4
  218. package/dist/cjs/ion-refresher_2.cjs.entry.js +8 -9
  219. package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -7
  220. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  221. package/dist/cjs/ion-route_4.cjs.entry.js +4 -4
  222. package/dist/cjs/ion-searchbar.cjs.entry.js +3 -3
  223. package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
  224. package/dist/cjs/ion-segment-view.cjs.entry.js +1 -1
  225. package/dist/cjs/ion-segment_2.cjs.entry.js +3 -3
  226. package/dist/cjs/ion-select-modal.cjs.entry.js +8 -10
  227. package/dist/cjs/ion-select_3.cjs.entry.js +71 -53
  228. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  229. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  230. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +6 -7
  231. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
  232. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  233. package/dist/cjs/ion-textarea.cjs.entry.js +11 -15
  234. package/dist/cjs/ion-toast.cjs.entry.js +49 -51
  235. package/dist/cjs/ion-toggle.cjs.entry.js +6 -7
  236. package/dist/cjs/{ionic-global-CYJNT-2P.js → ionic-global-48ceLiJ6.js} +1 -1
  237. package/dist/cjs/ionic.cjs.js +5 -5
  238. package/dist/cjs/{ios.transition-DYGiD6gM.js → ios.transition-D85_rHf5.js} +4 -5
  239. package/dist/cjs/{item-multiple-inputs-Dv6qrMhm.js → item-multiple-inputs-C-hz7xrh.js} +1 -1
  240. package/dist/cjs/{keyboard-cHxZlTyz.js → keyboard-BlHp4a_c.js} +1 -1
  241. package/dist/cjs/{keyboard-Cix5TVkD.js → keyboard-c2_I35b-.js} +5 -3
  242. package/dist/cjs/{keyboard-controller-PtZoN2GS.js → keyboard-controller-DHS0BgXp.js} +9 -9
  243. package/dist/cjs/loader.cjs.js +4 -4
  244. package/dist/cjs/{md.transition-CrSkaoz6.js → md.transition-Ce9X1WXr.js} +4 -5
  245. package/dist/cjs/{overlays-BR21NUIG.js → overlays-CLld3axA.js} +224 -12
  246. package/dist/cjs/{select-option-render-D8ZEjYji.js → select-option-render-CzyhrkOu.js} +2 -2
  247. package/dist/cjs/{slot-mutation-controller-D6IjSEIh.js → slot-mutation-controller-ClDxh3EK.js} +73 -5
  248. package/dist/cjs/{status-tap-CNP5eD1R.js → status-tap-CDA0Y3Ad.js} +3 -3
  249. package/dist/cjs/{swipe-back-CSIJQfu5.js → swipe-back-Dy8pxJCF.js} +2 -2
  250. package/dist/collection/collection-manifest.json +1 -1
  251. package/dist/collection/components/button/button.js +21 -32
  252. package/dist/collection/components/card/card.js +17 -6
  253. package/dist/collection/components/content/content.js +62 -8
  254. package/dist/collection/components/datetime/datetime.js +27 -20
  255. package/dist/collection/components/input/input.ios.css +6 -0
  256. package/dist/collection/components/input/input.js +6 -9
  257. package/dist/collection/components/input/input.md.css +6 -0
  258. package/dist/collection/components/input-otp/input-otp.js +29 -3
  259. package/dist/collection/components/item/item.js +15 -6
  260. package/dist/collection/components/menu/menu.js +4 -3
  261. package/dist/collection/components/modal/modal.ios.css +12 -1
  262. package/dist/collection/components/modal/modal.js +31 -8
  263. package/dist/collection/components/modal/modal.md.css +12 -1
  264. package/dist/collection/components/modal/safe-area-utils.js +69 -90
  265. package/dist/collection/components/modal/utils.js +7 -0
  266. package/dist/collection/components/popover/animations/ios.enter.js +20 -6
  267. package/dist/collection/components/popover/animations/md.enter.js +19 -5
  268. package/dist/collection/components/popover/utils.js +64 -13
  269. package/dist/collection/components/select/select.ios.css +1 -1
  270. package/dist/collection/components/select/select.js +67 -38
  271. package/dist/collection/components/select/select.md.css +1 -1
  272. package/dist/collection/components/textarea/textarea.ios.css +15 -1
  273. package/dist/collection/components/textarea/textarea.js +5 -8
  274. package/dist/collection/components/textarea/textarea.md.css +15 -1
  275. package/dist/collection/index.js +1 -1
  276. package/dist/collection/utils/attribute-controller.js +126 -0
  277. package/dist/collection/utils/forms/click-controller.js +70 -0
  278. package/dist/collection/utils/forms/index.js +1 -0
  279. package/dist/collection/utils/hardware-back-button.js +41 -12
  280. package/dist/collection/utils/helpers.js +44 -3
  281. package/dist/collection/utils/logging/index.js +4 -0
  282. package/dist/collection/utils/menu-controller/index.js +2 -1
  283. package/dist/collection/utils/overlays.js +64 -4
  284. package/dist/docs.json +9 -3
  285. package/dist/esm/{animation-BFNVlYum.js → animation-DmtJpz89.js} +2 -2
  286. package/dist/esm/{app-globals-BgX0BGL1.js → app-globals-CNfpAPW6.js} +1 -1
  287. package/dist/esm/attribute-controller-DPMIcbef.js +128 -0
  288. package/dist/esm/{button-active-BfOvDr3b.js → button-active-DVk40Sjl.js} +2 -2
  289. package/dist/esm/{capacitor-CFERIeaU.js → capacitor-CHJaJ9aX.js} +1 -1
  290. package/dist/esm/{format-DDFE9jM5.js → format-Ck1cw5z7.js} +1 -1
  291. package/dist/esm/{framework-delegate-BwNhx9NR.js → framework-delegate-CDjM1vRH.js} +1 -1
  292. package/dist/esm/{haptic-Cq4UAeka.js → haptic-WXfMCob9.js} +1 -1
  293. package/dist/esm/{helpers-BSmc0nst.js → helpers-BJqKF1pr.js} +47 -4
  294. package/dist/esm/{index-DnA_7Bnx.js → index-BBASprVu.js} +4 -4
  295. package/dist/esm/{index-C23AVPx9.js → index-BpRUsN_W.js} +55 -29
  296. package/dist/esm/{index-D76bbuoi.js → index-CK8uF0iB.js} +1 -1
  297. package/dist/esm/{index-CJln0gS3.js → index-Clv8QC5L.js} +2 -3
  298. package/dist/esm/{index-BuPaALjU.js → index-DIouXecD.js} +6 -6
  299. package/dist/esm/{index-C1b9CLFg.js → index-TkLga3ma.js} +2 -2
  300. package/dist/esm/index.js +11 -13
  301. package/dist/esm/{input-shims-Dqk-Ou25.js → input-shims-C1iYF5JK.js} +5 -6
  302. package/dist/esm/{input.utils-rqoH22pW.js → input.utils-DZY_K8Po.js} +1 -1
  303. package/dist/esm/ion-accordion_2.entry.js +3 -3
  304. package/dist/esm/ion-action-sheet.entry.js +11 -13
  305. package/dist/esm/ion-alert.entry.js +11 -13
  306. package/dist/esm/ion-app_8.entry.js +72 -24
  307. package/dist/esm/ion-avatar_3.entry.js +2 -2
  308. package/dist/esm/ion-back-button.entry.js +3 -3
  309. package/dist/esm/ion-backdrop.entry.js +2 -2
  310. package/dist/esm/ion-breadcrumb_2.entry.js +3 -3
  311. package/dist/esm/ion-button_2.entry.js +23 -34
  312. package/dist/esm/ion-card_5.entry.js +19 -7
  313. package/dist/esm/ion-checkbox.entry.js +4 -4
  314. package/dist/esm/ion-chip.entry.js +2 -2
  315. package/dist/esm/ion-col_3.entry.js +2 -2
  316. package/dist/esm/ion-datetime-button.entry.js +4 -4
  317. package/dist/esm/ion-datetime.entry.js +33 -28
  318. package/dist/esm/ion-fab_3.entry.js +3 -3
  319. package/dist/esm/ion-img.entry.js +3 -3
  320. package/dist/esm/ion-infinite-scroll_2.entry.js +5 -5
  321. package/dist/esm/ion-input-otp.entry.js +33 -8
  322. package/dist/esm/ion-input-password-toggle.entry.js +2 -2
  323. package/dist/esm/ion-input.entry.js +12 -16
  324. package/dist/esm/ion-item-option_3.entry.js +4 -4
  325. package/dist/esm/ion-item_8.entry.js +17 -8
  326. package/dist/esm/ion-loading.entry.js +7 -9
  327. package/dist/esm/ion-menu_3.entry.js +10 -11
  328. package/dist/esm/ion-modal.entry.js +115 -110
  329. package/dist/esm/ion-nav_2.entry.js +6 -6
  330. package/dist/esm/ion-picker-column-option.entry.js +3 -3
  331. package/dist/esm/ion-picker-column.entry.js +5 -6
  332. package/dist/esm/ion-picker.entry.js +2 -2
  333. package/dist/esm/ion-popover.entry.js +108 -31
  334. package/dist/esm/ion-progress-bar.entry.js +3 -3
  335. package/dist/esm/ion-radio_2.entry.js +4 -4
  336. package/dist/esm/ion-range.entry.js +4 -4
  337. package/dist/esm/ion-refresher_2.entry.js +8 -9
  338. package/dist/esm/ion-reorder_2.entry.js +6 -7
  339. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  340. package/dist/esm/ion-route_4.entry.js +4 -4
  341. package/dist/esm/ion-searchbar.entry.js +3 -3
  342. package/dist/esm/ion-segment-content.entry.js +1 -1
  343. package/dist/esm/ion-segment-view.entry.js +1 -1
  344. package/dist/esm/ion-segment_2.entry.js +3 -3
  345. package/dist/esm/ion-select-modal.entry.js +7 -9
  346. package/dist/esm/ion-select_3.entry.js +66 -48
  347. package/dist/esm/ion-spinner.entry.js +2 -2
  348. package/dist/esm/ion-split-pane.entry.js +2 -2
  349. package/dist/esm/ion-tab-bar_2.entry.js +6 -7
  350. package/dist/esm/ion-tab_2.entry.js +3 -3
  351. package/dist/esm/ion-text.entry.js +2 -2
  352. package/dist/esm/ion-textarea.entry.js +11 -15
  353. package/dist/esm/ion-toast.entry.js +7 -9
  354. package/dist/esm/ion-toggle.entry.js +6 -7
  355. package/dist/esm/{ionic-global-ZXjCXKH0.js → ionic-global-Cep6oYzK.js} +1 -1
  356. package/dist/esm/ionic.js +6 -6
  357. package/dist/esm/{ios.transition-CWAgfQ1r.js → ios.transition-B8netzsb.js} +4 -5
  358. package/dist/esm/{item-multiple-inputs-DZnIiOO_.js → item-multiple-inputs-Bd2LO7qK.js} +1 -1
  359. package/dist/esm/{keyboard-Cj8mLJeq.js → keyboard-B4Y-Gph8.js} +5 -3
  360. package/dist/esm/{keyboard-DAF8GNJ9.js → keyboard-Cmqp5iZD.js} +1 -1
  361. package/dist/esm/{keyboard-controller-DEwoa1ev.js → keyboard-controller-B2NoF7bV.js} +2 -2
  362. package/dist/esm/loader.js +5 -5
  363. package/dist/esm/{md.transition-ZuqDDdDW.js → md.transition-DNCSSiXk.js} +4 -5
  364. package/dist/esm/{overlays-DKE0DgvE.js → overlays-DmDY-El7.js} +216 -10
  365. package/dist/esm/{select-option-render-CRP_teb1.js → select-option-render-BSDT9oSA.js} +2 -2
  366. package/dist/esm/{slot-mutation-controller-B5NpUZ-N.js → slot-mutation-controller-hAS2uJ7c.js} +69 -3
  367. package/dist/esm/{status-tap-Cv9gb3ja.js → status-tap-VGRBYwiC.js} +3 -3
  368. package/dist/esm/{swipe-back-De5HlmeM.js → swipe-back-tCNYR9ZM.js} +2 -2
  369. package/dist/ionic/index.esm.js +1 -1
  370. package/dist/ionic/ionic.esm.js +1 -1
  371. package/dist/ionic/{p-b9b4e85d.entry.js → p-00cd107d.entry.js} +1 -1
  372. package/dist/ionic/p-01b7e3f2.entry.js +4 -0
  373. package/dist/ionic/{p-9c5f2691.entry.js → p-0a789930.entry.js} +1 -1
  374. package/dist/ionic/p-0b09c60e.entry.js +4 -0
  375. package/dist/ionic/p-0c32c626.entry.js +4 -0
  376. package/dist/ionic/p-0f97175e.entry.js +4 -0
  377. package/dist/ionic/p-107a81a6.entry.js +4 -0
  378. package/dist/ionic/{p-ca1b8865.entry.js → p-230f510c.entry.js} +1 -1
  379. package/dist/ionic/p-27d96a9b.entry.js +4 -0
  380. package/dist/ionic/{p-db449915.entry.js → p-28251c5c.entry.js} +1 -1
  381. package/dist/ionic/{p-099b7f9f.entry.js → p-362dcd86.entry.js} +1 -1
  382. package/dist/ionic/p-4bd80334.entry.js +4 -0
  383. package/dist/ionic/p-4d785062.entry.js +4 -0
  384. package/dist/ionic/{p-efc0cf82.entry.js → p-4e4e5919.entry.js} +1 -1
  385. package/dist/ionic/{p-837db1b9.entry.js → p-4ed3c460.entry.js} +1 -1
  386. package/dist/ionic/{p-d8c138d9.entry.js → p-4f25b926.entry.js} +1 -1
  387. package/dist/ionic/{p-271c3640.entry.js → p-539d6c8e.entry.js} +1 -1
  388. package/dist/ionic/p-5bb24bce.entry.js +4 -0
  389. package/dist/ionic/p-60780b88.entry.js +4 -0
  390. package/dist/ionic/{p-54cbb0a7.entry.js → p-62c87f3d.entry.js} +1 -1
  391. package/dist/ionic/p-6317d620.entry.js +4 -0
  392. package/dist/ionic/{p-85599fe3.entry.js → p-64ac3864.entry.js} +1 -1
  393. package/dist/ionic/{p-191a651e.entry.js → p-6c7b5930.entry.js} +1 -1
  394. package/dist/ionic/{p-7fbb3319.entry.js → p-77252596.entry.js} +1 -1
  395. package/dist/ionic/p-7ce9c6f8.entry.js +4 -0
  396. package/dist/ionic/{p-8b80d9f9.entry.js → p-7db20410.entry.js} +1 -1
  397. package/dist/ionic/{p-5d9094ac.entry.js → p-7e9c2a97.entry.js} +1 -1
  398. package/dist/ionic/p-7l6ENjIV.js +4 -0
  399. package/dist/ionic/p-82abf431.entry.js +4 -0
  400. package/dist/ionic/p-8b79061e.entry.js +4 -0
  401. package/dist/ionic/{p-6e386853.entry.js → p-8c85e250.entry.js} +1 -1
  402. package/dist/ionic/{p-90f50a65.entry.js → p-8d651adb.entry.js} +1 -1
  403. package/dist/ionic/{p-dd01be0a.entry.js → p-8db08782.entry.js} +1 -1
  404. package/dist/ionic/p-91f3cd8b.entry.js +4 -0
  405. package/dist/ionic/{p-f0fb23c1.entry.js → p-930c3538.entry.js} +1 -1
  406. package/dist/ionic/{p-ee09ac9d.entry.js → p-9ffccbf1.entry.js} +1 -1
  407. package/dist/ionic/{p-CM5OBjTW.js → p-B0jcOZOE.js} +1 -1
  408. package/dist/ionic/p-B8IuTu_r.js +4 -0
  409. package/dist/ionic/p-BNXIurCt.js +4 -0
  410. package/{components/p-6ZLn6K5e.js → dist/ionic/p-BO10QT9r.js} +1 -1
  411. package/dist/ionic/p-BOLqP2-V.js +4 -0
  412. package/dist/ionic/{p-BMPN55of.js → p-BY4FwwBp.js} +1 -1
  413. package/dist/ionic/p-BdHBcCZF.js +4 -0
  414. package/{components/p-DiuOa1vw.js → dist/ionic/p-BexAj0yw.js} +1 -1
  415. package/dist/ionic/p-Bnc1L7Rk.js +4 -0
  416. package/dist/ionic/p-BpRUsN_W.js +6 -0
  417. package/dist/ionic/p-Bppj2PE0.js +4 -0
  418. package/dist/ionic/p-BuLlVedw.js +4 -0
  419. package/dist/ionic/p-Bx5x5GJV.js +4 -0
  420. package/dist/ionic/p-C1WYZOZj.js +4 -0
  421. package/dist/ionic/p-C2LaBx3E.js +4 -0
  422. package/dist/ionic/{p-Bd72UYI2.js → p-CXs4J83x.js} +1 -1
  423. package/dist/ionic/p-Co7eql8D.js +4 -0
  424. package/dist/ionic/p-D13gXhdC.js +4 -0
  425. package/dist/ionic/p-D926OmIX.js +4 -0
  426. package/dist/ionic/{p-T71k3C35.js → p-DPNVo1nr.js} +1 -1
  427. package/{components/p-C4VpVfrJ.js → dist/ionic/p-DQXtveHv.js} +1 -1
  428. package/dist/ionic/p-DXXGkPA8.js +4 -0
  429. package/dist/ionic/{p-C8XilMh0.js → p-DfvWlTdB.js} +1 -1
  430. package/dist/ionic/p-DriE1ZAo.js +4 -0
  431. package/dist/ionic/{p-D7jHfs0Y.js → p-DxftXYZp.js} +1 -1
  432. package/dist/ionic/{p-Do3zTvCA.js → p-SEecsUh7.js} +1 -1
  433. package/dist/ionic/p-a4389f13.entry.js +4 -0
  434. package/dist/ionic/p-af11d3c6.entry.js +4 -0
  435. package/dist/ionic/p-af56702e.entry.js +4 -0
  436. package/dist/ionic/{p-561af487.entry.js → p-b3aadfe8.entry.js} +1 -1
  437. package/dist/ionic/p-b5bcbbc1.entry.js +4 -0
  438. package/dist/ionic/p-b9ed3a52.entry.js +4 -0
  439. package/dist/ionic/{p-3bba83ee.entry.js → p-bfdbe24b.entry.js} +1 -1
  440. package/dist/ionic/{p-4712a8a9.entry.js → p-c250b6b0.entry.js} +1 -1
  441. package/dist/ionic/{p-38b9375b.entry.js → p-c293f854.entry.js} +1 -1
  442. package/dist/ionic/p-c81ec0e8.entry.js +4 -0
  443. package/dist/ionic/p-c83dbc12.entry.js +4 -0
  444. package/dist/ionic/p-d0e374f8.entry.js +4 -0
  445. package/dist/ionic/p-d72accc4.entry.js +4 -0
  446. package/dist/ionic/p-d9a3dfd1.entry.js +4 -0
  447. package/dist/ionic/p-e1haAYzm.js +4 -0
  448. package/dist/ionic/p-e7ab4def.entry.js +4 -0
  449. package/dist/ionic/{p-d6755739.entry.js → p-eb989dc9.entry.js} +1 -1
  450. package/dist/ionic/p-ec259ac5.entry.js +4 -0
  451. package/dist/ionic/{p-DYUjHcuH.js → p-nCAPr1Ah.js} +1 -1
  452. package/dist/types/components/button/button.d.ts +3 -12
  453. package/dist/types/components/card/card.d.ts +3 -1
  454. package/dist/types/components/content/content.d.ts +28 -3
  455. package/dist/types/components/datetime/datetime.d.ts +5 -10
  456. package/dist/types/components/input/input.d.ts +1 -0
  457. package/dist/types/components/input-otp/input-otp.d.ts +7 -0
  458. package/dist/types/components/item/item.d.ts +1 -1
  459. package/dist/types/components/modal/modal.d.ts +9 -1
  460. package/dist/types/components/modal/safe-area-utils.d.ts +28 -14
  461. package/dist/types/components/modal/utils.d.ts +4 -0
  462. package/dist/types/components/popover/utils.d.ts +16 -3
  463. package/dist/types/components/select/select.d.ts +11 -0
  464. package/dist/types/components/textarea/textarea.d.ts +1 -0
  465. package/dist/types/components.d.ts +1 -1
  466. package/dist/types/index.d.ts +1 -1
  467. package/dist/types/stencil-public-runtime.d.ts +61 -55
  468. package/dist/types/utils/attribute-controller.d.ts +56 -0
  469. package/dist/types/utils/config.d.ts +4 -1
  470. package/dist/types/utils/forms/click-controller.d.ts +36 -0
  471. package/dist/types/utils/forms/index.d.ts +1 -0
  472. package/dist/types/utils/hardware-back-button.d.ts +11 -0
  473. package/dist/types/utils/helpers.d.ts +27 -2
  474. package/dist/types/utils/logging/index.d.ts +4 -0
  475. package/dist/types/utils/overlays.d.ts +20 -2
  476. package/hydrate/index.js +1249 -484
  477. package/hydrate/index.mjs +1249 -484
  478. package/package.json +3 -3
  479. package/components/p-1sJ0ZDPe.js +0 -4
  480. package/components/p-B1_TL6RQ.js +0 -4
  481. package/components/p-BT9-hMMz.js +0 -4
  482. package/components/p-BU8a2IhR.js +0 -4
  483. package/components/p-BW_SlU2D.js +0 -4
  484. package/components/p-BWoa-cki.js +0 -4
  485. package/components/p-BgkOsq-d.js +0 -4
  486. package/components/p-Bi-it1EH.js +0 -4
  487. package/components/p-C09TXohi.js +0 -4
  488. package/components/p-CG_zZq_I.js +0 -4
  489. package/components/p-CMRYD_yR.js +0 -4
  490. package/components/p-CNLioZ3B.js +0 -4
  491. package/components/p-CWAks_S_.js +0 -4
  492. package/components/p-Cd1WaN-0.js +0 -4
  493. package/components/p-CrAKlX71.js +0 -4
  494. package/components/p-Ctop2IWW.js +0 -4
  495. package/components/p-Cw6WocLJ.js +0 -4
  496. package/components/p-DFLJvuRK.js +0 -4
  497. package/components/p-DZRZic9C.js +0 -4
  498. package/components/p-DhNuxvJH.js +0 -4
  499. package/components/p-Djmz-ssp.js +0 -4
  500. package/components/p-DnBNYc7u.js +0 -4
  501. package/components/p-DwSXbQSz.js +0 -4
  502. package/components/p-M34T2gyX.js +0 -4
  503. package/components/p-YjMkHuvH.js +0 -4
  504. package/dist/cjs/hardware-back-button-Bu4Dzw8l.js +0 -121
  505. package/dist/cjs/index-DkNv4J_i.js +0 -10
  506. package/dist/esm/hardware-back-button-DmkiRgOT.js +0 -115
  507. package/dist/esm/index-ZjP4CjeZ.js +0 -7
  508. package/dist/ionic/p-0dcb7bb6.entry.js +0 -4
  509. package/dist/ionic/p-1347880c.entry.js +0 -4
  510. package/dist/ionic/p-1f24cb24.entry.js +0 -4
  511. package/dist/ionic/p-2ea4bb36.entry.js +0 -4
  512. package/dist/ionic/p-338a02e0.entry.js +0 -4
  513. package/dist/ionic/p-3e01c744.entry.js +0 -4
  514. package/dist/ionic/p-458715a9.entry.js +0 -4
  515. package/dist/ionic/p-4c3e50f8.entry.js +0 -4
  516. package/dist/ionic/p-5906ea6f.entry.js +0 -4
  517. package/dist/ionic/p-5cc09b40.entry.js +0 -4
  518. package/dist/ionic/p-612ea3b1.entry.js +0 -4
  519. package/dist/ionic/p-68cc89a6.entry.js +0 -4
  520. package/dist/ionic/p-77c96e08.entry.js +0 -4
  521. package/dist/ionic/p-7bfeccb3.entry.js +0 -4
  522. package/dist/ionic/p-7e394cc3.entry.js +0 -4
  523. package/dist/ionic/p-803059b6.entry.js +0 -4
  524. package/dist/ionic/p-9595e305.entry.js +0 -4
  525. package/dist/ionic/p-9ee9c5b6.entry.js +0 -4
  526. package/dist/ionic/p-BY6BzzPF.js +0 -4
  527. package/dist/ionic/p-BaeKWZ-a.js +0 -4
  528. package/dist/ionic/p-BgOvhHy_.js +0 -4
  529. package/dist/ionic/p-BhamHSw3.js +0 -4
  530. package/dist/ionic/p-BijjLYjT.js +0 -4
  531. package/dist/ionic/p-C23AVPx9.js +0 -6
  532. package/dist/ionic/p-CER8qW8Y.js +0 -4
  533. package/dist/ionic/p-CFuOr1Tu.js +0 -4
  534. package/dist/ionic/p-CIGNaXM1.js +0 -4
  535. package/dist/ionic/p-CMZYmFb4.js +0 -4
  536. package/dist/ionic/p-CkxVYPtX.js +0 -4
  537. package/dist/ionic/p-CmXuiRT6.js +0 -4
  538. package/dist/ionic/p-D5t_-oMk.js +0 -4
  539. package/dist/ionic/p-D6rHcCvc.js +0 -4
  540. package/dist/ionic/p-DLM95R4x.js +0 -4
  541. package/dist/ionic/p-D_gb-kdd.js +0 -4
  542. package/dist/ionic/p-DajLgJ4d.js +0 -4
  543. package/dist/ionic/p-ZjP4CjeZ.js +0 -4
  544. package/dist/ionic/p-a8df96c8.entry.js +0 -4
  545. package/dist/ionic/p-a8ff2489.entry.js +0 -4
  546. package/dist/ionic/p-aff52029.entry.js +0 -4
  547. package/dist/ionic/p-b3532b8d.entry.js +0 -4
  548. package/dist/ionic/p-cc4320d3.entry.js +0 -4
  549. package/dist/ionic/p-d526798a.entry.js +0 -4
  550. package/dist/ionic/p-ec00fd0d.entry.js +0 -4
  551. package/dist/ionic/p-f83b3e0c.entry.js +0 -4
  552. package/dist/ionic/p-fa50d493.entry.js +0 -4
  553. package/dist/ionic/p-zWf7R2xV.js +0 -4
@@ -3,25 +3,23 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var index$3 = require('./index-DXoo08JC.js');
7
- var index$1 = require('./index-DtvKGwdh.js');
8
- var frameworkDelegate = require('./framework-delegate-d-fWfeI6.js');
9
- var helpers = require('./helpers-7wzdhdeg.js');
6
+ var index$2 = require('./index-BiQyIvoc.js');
7
+ var index = require('./index-CNaZ6SYM.js');
8
+ var frameworkDelegate = require('./framework-delegate-JbKIVMzR.js');
9
+ var helpers = require('./helpers-Cqr69qxA.js');
10
10
  var lockController = require('./lock-controller-aDB9wrEf.js');
11
- var capacitor = require('./capacitor-DmA66EwP.js');
12
- var overlays = require('./overlays-BR21NUIG.js');
11
+ var capacitor = require('./capacitor-C6Pp4Z7A.js');
12
+ var hardwareBackButton = require('./overlays-CLld3axA.js');
13
13
  var theme = require('./theme-Bw0rpaNN.js');
14
- var index$4 = require('./index-CQfEIyLK.js');
15
- var ionicGlobal = require('./ionic-global-CYJNT-2P.js');
16
- var keyboard = require('./keyboard-Cix5TVkD.js');
17
- var animation = require('./animation-Kd1N7WTN.js');
14
+ var index$3 = require('./index-DUiuw_fH.js');
15
+ var ionicGlobal = require('./ionic-global-48ceLiJ6.js');
16
+ var keyboard = require('./keyboard-c2_I35b-.js');
17
+ var animation = require('./animation-DcgLg_PI.js');
18
18
  var cubicBezier = require('./cubic-bezier-DAjy1V-e.js');
19
- var index$2 = require('./index-DRPqwSvU.js');
20
- var index = require('./index-DkNv4J_i.js');
19
+ var index$1 = require('./index-DRPqwSvU.js');
21
20
  require('./dir-zwDPRE5K.js');
22
- require('./hardware-back-button-Bu4Dzw8l.js');
23
21
  require('./gesture-controller-CeJslptU.js');
24
- require('./keyboard-cHxZlTyz.js');
22
+ require('./keyboard-BlHp4a_c.js');
25
23
 
26
24
  var Style;
27
25
  (function (Style) {
@@ -118,17 +116,23 @@ const getBackdropValueForSheet = (x, backdropBreakpoint) => {
118
116
  *
119
117
  */
120
118
  const setCardStatusBarDark = () => {
121
- if (!index.win || index.win.innerWidth >= 768) {
119
+ if (!helpers.win || helpers.win.innerWidth >= 768) {
122
120
  return;
123
121
  }
124
122
  StatusBar.setStyle({ style: Style.Dark });
125
123
  };
126
124
  const setCardStatusBarDefault = (defaultStyle = Style.Default) => {
127
- if (!index.win || index.win.innerWidth >= 768) {
125
+ if (!helpers.win || helpers.win.innerWidth >= 768) {
128
126
  return;
129
127
  }
130
128
  StatusBar.setStyle({ style: defaultStyle });
131
129
  };
130
+ /**
131
+ * Calls back when the modal's resolved `--height` changes.
132
+ */
133
+ const onModalHeightChange = (hostEl, callback) => {
134
+ return helpers.onCustomPropertyChange(hostEl, '--height', () => callback());
135
+ };
132
136
 
133
137
  /**
134
138
  * Swiping is only possible when the content is scrolled to the top, so that we
@@ -141,8 +145,8 @@ const setCardStatusBarDefault = (defaultStyle = Style.Default) => {
141
145
  * synchronous operation, and `getScrollElement` is asynchronous.
142
146
  */
143
147
  const canSwipeOnContent = (contentEl) => {
144
- const scrollEl = index$1.isIonContent(contentEl) ? helpers.getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
145
- const hasRefresherInContent = !!index$1.findRefresherInContent(contentEl);
148
+ const scrollEl = index.isIonContent(contentEl) ? helpers.getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
149
+ const hasRefresherInContent = !!index.findRefresherInContent(contentEl);
146
150
  return !hasRefresherInContent && scrollEl.scrollTop === 0;
147
151
  };
148
152
  const handleCanDismiss = async (el, animation) => {
@@ -162,7 +166,7 @@ const handleCanDismiss = async (el, animation) => {
162
166
  * If the function returns `true`,
163
167
  * then we can proceed with dismiss.
164
168
  */
165
- const shouldDismiss = await el.canDismiss(undefined, overlays.GESTURE);
169
+ const shouldDismiss = await el.canDismiss(undefined, hardwareBackButton.GESTURE);
166
170
  if (!shouldDismiss) {
167
171
  return;
168
172
  }
@@ -279,7 +283,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
279
283
  let initialScrollY = true;
280
284
  let lastStep = 0;
281
285
  const getScrollY = () => {
282
- if (contentEl && index$1.isIonContent(contentEl)) {
286
+ if (contentEl && index.isIonContent(contentEl)) {
283
287
  return contentEl.scrollY;
284
288
  /**
285
289
  * Custom scroll containers are intended to be
@@ -305,7 +309,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
305
309
  * swipe again. The target content will not
306
310
  * be the same between swipes.
307
311
  */
308
- contentEl = index$1.findClosestIonContent(target);
312
+ contentEl = index.findClosestIonContent(target);
309
313
  if (contentEl) {
310
314
  return canSwipeOnContent(contentEl);
311
315
  }
@@ -349,7 +353,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
349
353
  * happen at the same time as the gesture.
350
354
  */
351
355
  if (deltaY > 0 && contentEl) {
352
- index$1.disableContentScrollY(contentEl);
356
+ index.disableContentScrollY(contentEl);
353
357
  }
354
358
  animation.progressStart(true, isOpen ? 1 : 0);
355
359
  onDragStart();
@@ -363,7 +367,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
363
367
  * happen at the same time as the gesture.
364
368
  */
365
369
  if (deltaY > 0 && contentEl) {
366
- index$1.disableContentScrollY(contentEl);
370
+ index.disableContentScrollY(contentEl);
367
371
  }
368
372
  /**
369
373
  * If we are swiping on the content
@@ -458,7 +462,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
458
462
  isOpen = shouldComplete;
459
463
  gesture.enable(false);
460
464
  if (contentEl) {
461
- index$1.resetContentScrollY(contentEl, initialScrollY);
465
+ index.resetContentScrollY(contentEl, initialScrollY);
462
466
  }
463
467
  animation
464
468
  .onFinish(() => {
@@ -507,10 +511,10 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
507
511
  };
508
512
  onDragEnd(eventDetail);
509
513
  };
510
- const gesture = index$2.createGesture({
514
+ const gesture = index$1.createGesture({
511
515
  el,
512
516
  gestureName: 'modalSwipeToClose',
513
- gesturePriority: overlays.OVERLAY_GESTURE_PRIORITY,
517
+ gesturePriority: hardwareBackButton.OVERLAY_GESTURE_PRIORITY,
514
518
  direction: 'y',
515
519
  threshold: 10,
516
520
  canStart,
@@ -1062,7 +1066,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1062
1066
  * as inputs should not be focusable outside
1063
1067
  * the sheet.
1064
1068
  */
1065
- baseEl.classList.remove(overlays.FOCUS_TRAP_DISABLE_CLASS);
1069
+ baseEl.classList.remove(hardwareBackButton.FOCUS_TRAP_DISABLE_CLASS);
1066
1070
  };
1067
1071
  const disableBackdrop = () => {
1068
1072
  baseEl.style.setProperty('pointer-events', 'none');
@@ -1074,7 +1078,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1074
1078
  * Adding this class disables focus trapping
1075
1079
  * for the sheet temporarily.
1076
1080
  */
1077
- baseEl.classList.add(overlays.FOCUS_TRAP_DISABLE_CLASS);
1081
+ baseEl.classList.add(hardwareBackButton.FOCUS_TRAP_DISABLE_CLASS);
1078
1082
  };
1079
1083
  /**
1080
1084
  * Toggles the footer to an absolute position while moving to prevent
@@ -1198,7 +1202,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1198
1202
  * For example, when using ion-nav within a modal it is possible to swipe, push a view,
1199
1203
  * and then swipe again. The target content will not be the same between swipes.
1200
1204
  */
1201
- const contentEl = index$1.findClosestIonContent(detail.event.target);
1205
+ const contentEl = index.findClosestIonContent(detail.event.target);
1202
1206
  currentBreakpoint = getCurrentBreakpoint();
1203
1207
  /**
1204
1208
  * Upwards swipes on the content cannot move the sheet anyway, so this only
@@ -1235,9 +1239,9 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1235
1239
  * which would impact performance significantly.
1236
1240
  */
1237
1241
  if (!expandToScroll) {
1238
- const targetEl = index$1.findClosestIonContent(detail.event.target);
1242
+ const targetEl = index.findClosestIonContent(detail.event.target);
1239
1243
  cachedScrollEl =
1240
- targetEl && index$1.isIonContent(targetEl) ? helpers.getElementRoot(targetEl).querySelector('.inner-scroll') : targetEl;
1244
+ targetEl && index.isIonContent(targetEl) ? helpers.getElementRoot(targetEl).querySelector('.inner-scroll') : targetEl;
1241
1245
  }
1242
1246
  /**
1243
1247
  * If expandToScroll is disabled, we need to swap
@@ -1629,7 +1633,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1629
1633
  */
1630
1634
  return viewportBottom - activeHeight;
1631
1635
  };
1632
- const gesture = index$2.createGesture({
1636
+ const gesture = index$1.createGesture({
1633
1637
  el: wrapperEl,
1634
1638
  gestureName: 'modalSheet',
1635
1639
  gesturePriority: 40,
@@ -1657,40 +1661,12 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
1657
1661
  };
1658
1662
  };
1659
1663
 
1660
- /**
1661
- * These thresholds match the SCSS media query breakpoints in modal.vars.scss
1662
- * that trigger the centered dialog layout (non-fullscreen modal).
1663
- *
1664
- * SCSS defines two height breakpoints: $modal-inset-min-height-small (600px)
1665
- * and $modal-inset-min-height-large (768px). We use the smaller one because
1666
- * that's the threshold where the modal transitions from fullscreen to centered
1667
- * dialog — the larger breakpoint only increases the dialog's height.
1668
- */
1669
- const MODAL_INSET_MIN_WIDTH = 768;
1670
- const MODAL_INSET_MIN_HEIGHT = 600;
1671
1664
  const EDGE_THRESHOLD = 5;
1672
- /**
1673
- * CSS values for `--width` / `--height` that are treated as fullscreen
1674
- * (modal touches the corresponding screen edges). Empty string means the
1675
- * property was not overridden. See `hasCustomModalDimensions()`.
1676
- */
1677
- const FULLSCREEN_SIZE_VALUES = new Set(['', '100%', '100vw', '100vh', '100dvw', '100dvh', '100svw', '100svh']);
1678
1665
  /**
1679
1666
  * Cache for resolved root safe-area-top value, invalidated once per frame.
1680
1667
  */
1681
1668
  let cachedRootSafeAreaTop = null;
1682
1669
  let cacheInvalidationScheduled = false;
1683
- /**
1684
- * Determines if the current viewport meets the CSS media query conditions
1685
- * that cause regular modals to render as centered dialogs instead of fullscreen.
1686
- * Matches: @media (min-width: 768px) and (min-height: 600px)
1687
- */
1688
- const isCenteredDialogViewport = () => {
1689
- if (!index.win)
1690
- return false;
1691
- return index.win.matchMedia(`(min-width: ${MODAL_INSET_MIN_WIDTH}px) and (min-height: ${MODAL_INSET_MIN_HEIGHT}px)`)
1692
- .matches;
1693
- };
1694
1670
  /**
1695
1671
  * Resolves the current root --ion-safe-area-top value to pixels.
1696
1672
  * Uses a temporary element because getComputedStyle on :root returns
@@ -1703,7 +1679,7 @@ const getRootSafeAreaTop = () => {
1703
1679
  if (cachedRootSafeAreaTop !== null) {
1704
1680
  return cachedRootSafeAreaTop;
1705
1681
  }
1706
- const doc = index.win?.document;
1682
+ const doc = helpers.win?.document;
1707
1683
  if (!doc?.body) {
1708
1684
  return 0;
1709
1685
  }
@@ -1724,55 +1700,64 @@ const getRootSafeAreaTop = () => {
1724
1700
  return value;
1725
1701
  };
1726
1702
  /**
1727
- * Calls back when the resolved root `--ion-safe-area-top` changes, which no
1728
- * event and no window resize covers. The probe's height tracks the variable, so
1729
- * a change to it becomes a size change the observer can see.
1703
+ * Calls back when the resolved root `--ion-safe-area-top` changes. The value
1704
+ * the caller already applied is passed as the baseline, so a change between
1705
+ * that read and the observer starting is still reported.
1730
1706
  */
1731
1707
  const onRootSafeAreaTopChange = (callback) => {
1732
- const doc = index.win?.document;
1733
- if (!doc?.body || typeof ResizeObserver === 'undefined') {
1734
- return () => undefined;
1735
- }
1736
- const probe = doc.createElement('div');
1737
- probe.style.cssText =
1738
- 'position:fixed;visibility:hidden;pointer-events:none;top:0;left:0;width:0;' +
1739
- 'height:var(--ion-safe-area-top,0px);';
1740
- doc.body.appendChild(probe);
1741
- /**
1742
- * Seeded with the value the caller has already applied, so a change that
1743
- * lands before the observer's first delivery still gets reported. Comparing
1744
- * against an unset value instead would consume that first delivery and treat
1745
- * the new inset as the baseline.
1746
- */
1747
- let lastHeight = getRootSafeAreaTop();
1748
- const observer = new ResizeObserver((entries) => {
1749
- const { height } = entries[0].contentRect;
1750
- if (height !== lastHeight) {
1751
- lastHeight = height;
1752
- callback(height);
1753
- }
1754
- });
1755
- observer.observe(probe);
1756
- return () => {
1757
- observer.disconnect();
1758
- probe.remove();
1759
- };
1708
+ return helpers.onCustomPropertyChange(helpers.win?.document?.body, '--ion-safe-area-top', callback, getRootSafeAreaTop());
1760
1709
  };
1761
1710
  /**
1762
- * True when the modal host declares BOTH a non-fullscreen `--width` AND a
1763
- * non-fullscreen `--height` (i.e. a centered-dialog-like modal that doesn't
1764
- * touch any screen edge).
1711
+ * Determines which viewport axes the modal spans so safe-area requirements
1712
+ * can be predicted independently for each axis.
1713
+ *
1714
+ * A modal that spans an axis reaches both edges on that axis and needs the
1715
+ * corresponding safe-area insets. A modal that does not span an axis reaches
1716
+ * neither edge on that axis.
1765
1717
  *
1766
- * The conservative "both axes" check avoids mis-zeroing safe-area for
1767
- * partial-custom modals where the modal still touches top/bottom edges
1768
- * (e.g. only `--width` overridden). Partial cases fall through to the
1769
- * existing position-based post-animation correction.
1718
+ * When both `--width` and `--height` are `fullscreen`, coverage can be
1719
+ * determined directly. Otherwise, coverage is based on the rendered wrapper,
1720
+ * including cases where content sizing or `--max-height` causes the modal
1721
+ * to reach the viewport.
1770
1722
  */
1771
- const hasCustomModalDimensions = (hostEl) => {
1723
+ const getModalCoveredAxes = (hostEl) => {
1772
1724
  const styles = getComputedStyle(hostEl);
1773
- const width = styles.getPropertyValue('--width').trim();
1774
- const height = styles.getPropertyValue('--height').trim();
1775
- return !FULLSCREEN_SIZE_VALUES.has(width) && !FULLSCREEN_SIZE_VALUES.has(height);
1725
+ const width = hardwareBackButton.getOverlaySizeType(styles.getPropertyValue('--width'));
1726
+ const height = hardwareBackButton.getOverlaySizeType(styles.getPropertyValue('--height'));
1727
+ if (width === 'fullscreen' && height === 'fullscreen') {
1728
+ return { vertical: true, horizontal: true };
1729
+ }
1730
+ return measureCoveredAxes(hostEl);
1731
+ };
1732
+ /**
1733
+ * Measures the modal wrapper to determine whether it spans the viewport
1734
+ * on each axis.
1735
+ *
1736
+ * The wrapper has no box while the modal is hidden, so `overlay-hidden`
1737
+ * is temporarily removed to allow the wrapper to be measured. The class
1738
+ * is restored in the same task before the browser can paint.
1739
+ *
1740
+ * Only the wrapper's size is measured. Its position is affected by the
1741
+ * enter animation, which initially translates it by its own height, while
1742
+ * the translation does not affect its measured size.
1743
+ */
1744
+ const measureCoveredAxes = (hostEl) => {
1745
+ const wrapperEl = hostEl.shadowRoot?.querySelector('.modal-wrapper');
1746
+ if (wrapperEl == null || helpers.win === undefined) {
1747
+ return { vertical: false, horizontal: false };
1748
+ }
1749
+ const wasHidden = hostEl.classList.contains('overlay-hidden');
1750
+ if (wasHidden) {
1751
+ hostEl.classList.remove('overlay-hidden');
1752
+ }
1753
+ const { width, height } = wrapperEl.getBoundingClientRect();
1754
+ if (wasHidden) {
1755
+ hostEl.classList.add('overlay-hidden');
1756
+ }
1757
+ return {
1758
+ vertical: height >= helpers.win.innerHeight - EDGE_THRESHOLD,
1759
+ horizontal: width >= helpers.win.innerWidth - EDGE_THRESHOLD,
1760
+ };
1776
1761
  };
1777
1762
  /**
1778
1763
  * Returns the initial safe-area configuration based on modal type.
@@ -1806,26 +1791,23 @@ const getInitialSafeAreaConfig = (context) => {
1806
1791
  right: '0px',
1807
1792
  };
1808
1793
  }
1809
- // On viewports that meet the centered dialog media query breakpoints,
1810
- // regular modals render as centered dialogs (not fullscreen), so they
1811
- // don't touch any screen edges and don't need safe-area insets. Also
1812
- // applies to phone viewports when the modal declares custom --width and
1813
- // --height; these don't touch screen edges either, so the initial
1814
- // prediction must be zero to avoid a post-animation correction flash.
1815
- if (isCenteredDialogViewport() || context.hasCustomDimensions) {
1816
- return {
1817
- top: '0px',
1818
- bottom: '0px',
1819
- left: '0px',
1820
- right: '0px',
1821
- };
1822
- }
1823
- // Fullscreen modals on phone - inherit all safe areas
1794
+ /**
1795
+ * Each axis is evaluated independently because a modal can span one axis
1796
+ * without spanning the other. This allows the initial safe-area configuration
1797
+ * to match the modal's expected dimensions and avoids correcting an incorrect
1798
+ * pair of insets after presentation.
1799
+ *
1800
+ * A modal can span the horizontal axis while remaining inset vertically, or
1801
+ * span the vertical axis while remaining inset horizontally. Wide viewports
1802
+ * can also render regular modals as centered dialogs, while content-sized
1803
+ * modals may still be clamped to the viewport.
1804
+ */
1805
+ const { vertical, horizontal } = context.coveredAxes ?? { vertical: true, horizontal: true };
1824
1806
  return {
1825
- top: 'inherit',
1826
- bottom: 'inherit',
1827
- left: 'inherit',
1828
- right: 'inherit',
1807
+ top: vertical ? 'inherit' : '0px',
1808
+ bottom: vertical ? 'inherit' : '0px',
1809
+ left: horizontal ? 'inherit' : '0px',
1810
+ right: horizontal ? 'inherit' : '0px',
1829
1811
  };
1830
1812
  };
1831
1813
  /**
@@ -1843,8 +1825,8 @@ const getInitialSafeAreaConfig = (context) => {
1843
1825
  */
1844
1826
  const getPositionBasedSafeAreaConfig = (wrapperEl) => {
1845
1827
  const rect = wrapperEl.getBoundingClientRect();
1846
- const vh = index.win?.innerHeight ?? 0;
1847
- const vw = index.win?.innerWidth ?? 0;
1828
+ const vh = helpers.win?.innerHeight ?? 0;
1829
+ const vw = helpers.win?.innerWidth ?? 0;
1848
1830
  // Only apply safe-area to sides where modal overlaps with screen edge
1849
1831
  return {
1850
1832
  top: rect.top <= EDGE_THRESHOLD ? 'inherit' : '0px',
@@ -1877,28 +1859,28 @@ const clearSafeAreaOverrides = (hostEl) => {
1877
1859
  hostEl.style.removeProperty('--ion-safe-area-right');
1878
1860
  };
1879
1861
 
1880
- 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}`;
1862
+ const modalIosCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:100%;--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{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;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}`;
1881
1863
 
1882
- 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}`;
1864
+ const modalMdCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:100%;--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{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;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}`;
1883
1865
 
1884
1866
  const Modal = class {
1885
1867
  constructor(hostRef) {
1886
- index$3.registerInstance(this, hostRef);
1887
- this.didPresent = index$3.createEvent(this, "ionModalDidPresent", 7);
1888
- this.willPresent = index$3.createEvent(this, "ionModalWillPresent", 7);
1889
- this.willDismiss = index$3.createEvent(this, "ionModalWillDismiss", 7);
1890
- this.didDismiss = index$3.createEvent(this, "ionModalDidDismiss", 7);
1891
- this.ionBreakpointDidChange = index$3.createEvent(this, "ionBreakpointDidChange", 7);
1892
- this.didPresentShorthand = index$3.createEvent(this, "didPresent", 7);
1893
- this.willPresentShorthand = index$3.createEvent(this, "willPresent", 7);
1894
- this.willDismissShorthand = index$3.createEvent(this, "willDismiss", 7);
1895
- this.didDismissShorthand = index$3.createEvent(this, "didDismiss", 7);
1896
- this.ionMount = index$3.createEvent(this, "ionMount", 7);
1897
- this.ionDragStart = index$3.createEvent(this, "ionDragStart", 7);
1898
- this.ionDragMove = index$3.createEvent(this, "ionDragMove", 7);
1899
- this.ionDragEnd = index$3.createEvent(this, "ionDragEnd", 7);
1868
+ index$2.registerInstance(this, hostRef);
1869
+ this.didPresent = index$2.createEvent(this, "ionModalDidPresent", 7);
1870
+ this.willPresent = index$2.createEvent(this, "ionModalWillPresent", 7);
1871
+ this.willDismiss = index$2.createEvent(this, "ionModalWillDismiss", 7);
1872
+ this.didDismiss = index$2.createEvent(this, "ionModalDidDismiss", 7);
1873
+ this.ionBreakpointDidChange = index$2.createEvent(this, "ionBreakpointDidChange", 7);
1874
+ this.didPresentShorthand = index$2.createEvent(this, "didPresent", 7);
1875
+ this.willPresentShorthand = index$2.createEvent(this, "willPresent", 7);
1876
+ this.willDismissShorthand = index$2.createEvent(this, "willDismiss", 7);
1877
+ this.didDismissShorthand = index$2.createEvent(this, "didDismiss", 7);
1878
+ this.ionMount = index$2.createEvent(this, "ionMount", 7);
1879
+ this.ionDragStart = index$2.createEvent(this, "ionDragStart", 7);
1880
+ this.ionDragMove = index$2.createEvent(this, "ionDragMove", 7);
1881
+ this.ionDragEnd = index$2.createEvent(this, "ionDragEnd", 7);
1900
1882
  this.lockController = lockController.createLockController();
1901
- this.triggerController = overlays.createTriggerController();
1883
+ this.triggerController = hardwareBackButton.createTriggerController();
1902
1884
  this.coreDelegate = frameworkDelegate.CoreDelegate();
1903
1885
  this.isSheetModal = false;
1904
1886
  this.inheritedAttributes = {};
@@ -2044,7 +2026,7 @@ const Modal = class {
2044
2026
  */
2045
2027
  return;
2046
2028
  }
2047
- this.dismiss(undefined, overlays.BACKDROP);
2029
+ this.dismiss(undefined, hardwareBackButton.BACKDROP);
2048
2030
  };
2049
2031
  this.onLifecycle = (modalEvent) => {
2050
2032
  const el = this.usersElement;
@@ -2142,7 +2124,7 @@ const Modal = class {
2142
2124
  }
2143
2125
  connectedCallback() {
2144
2126
  const { el } = this;
2145
- overlays.prepareOverlay(el);
2127
+ hardwareBackButton.prepareOverlay(el);
2146
2128
  this.triggerChanged();
2147
2129
  // A disconnect tears down state this presentation still needs and cannot
2148
2130
  // tell a re-insert from a removal, so put it back.
@@ -2152,7 +2134,7 @@ const Modal = class {
2152
2134
  // A relocation from `willPresent` reaches these before `present()` has
2153
2135
  // applied the lock, so they apply it instead. Both are idempotent.
2154
2136
  if (this.presented) {
2155
- overlays.restoreRootFocusTrapAccessibility(el);
2137
+ hardwareBackButton.restoreRootFocusTrapAccessibility(el);
2156
2138
  this.initParentRemovalObserver();
2157
2139
  }
2158
2140
  }
@@ -2165,7 +2147,7 @@ const Modal = class {
2165
2147
  this.cleanupSafeAreaOverrides();
2166
2148
  // Clean up aria-hidden if removed without dismiss() being called
2167
2149
  if (this.presented) {
2168
- overlays.cleanupRootFocusTrapAccessibility();
2150
+ hardwareBackButton.cleanupRootFocusTrapAccessibility();
2169
2151
  }
2170
2152
  }
2171
2153
  componentWillLoad() {
@@ -2215,10 +2197,10 @@ const Modal = class {
2215
2197
  this.currentBreakpoint = this.initialBreakpoint;
2216
2198
  }
2217
2199
  if (breakpoints !== undefined && initialBreakpoint !== undefined && !breakpoints.includes(initialBreakpoint)) {
2218
- index$3.printIonWarning('[ion-modal] - Your breakpoints array must include the initialBreakpoint value.');
2200
+ index$2.printIonWarning('[ion-modal] - Your breakpoints array must include the initialBreakpoint value.');
2219
2201
  }
2220
2202
  if (!this.htmlAttributes?.id) {
2221
- overlays.setOverlayId(this.el);
2203
+ hardwareBackButton.setOverlayId(this.el);
2222
2204
  }
2223
2205
  }
2224
2206
  componentDidLoad() {
@@ -2315,7 +2297,7 @@ const Modal = class {
2315
2297
  * get the transition incorrect.
2316
2298
  */
2317
2299
  if (helpers.hasLazyBuild(el)) {
2318
- await index$4.deepReady(this.usersElement);
2300
+ await index$3.deepReady(this.usersElement);
2319
2301
  /**
2320
2302
  * If keepContentsMounted="true" then the
2321
2303
  * JS Framework has already mounted the inner
@@ -2326,9 +2308,9 @@ const Modal = class {
2326
2308
  */
2327
2309
  }
2328
2310
  else if (!this.keepContentsMounted) {
2329
- await index$4.waitForMount();
2311
+ await index$3.waitForMount();
2330
2312
  }
2331
- index$3.writeTask(() => this.el.classList.add('show-modal'));
2313
+ index$2.writeTask(() => this.el.classList.add('show-modal'));
2332
2314
  // Recalculate isSheetModal before safe-area setup because framework
2333
2315
  // bindings (e.g., Angular) may not have been applied when componentWillLoad ran.
2334
2316
  this.isSheetModal = this.breakpoints !== undefined && this.initialBreakpoint !== undefined;
@@ -2349,7 +2331,7 @@ const Modal = class {
2349
2331
  this.statusBarStyle = await StatusBar.getStyle();
2350
2332
  setCardStatusBarDark();
2351
2333
  }
2352
- await overlays.present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
2334
+ await hardwareBackButton.present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
2353
2335
  presentingEl: presentingElement,
2354
2336
  currentBreakpoint: this.initialBreakpoint,
2355
2337
  backdropBreakpoint: this.backdropBreakpoint,
@@ -2414,14 +2396,14 @@ const Modal = class {
2414
2396
  // All of the elements needed for the swipe gesture
2415
2397
  // should be in the DOM and referenced by now, except
2416
2398
  // for the presenting el
2417
- const animationBuilder = this.leaveAnimation || index$3.config.get('modalLeave', iosLeaveAnimation);
2399
+ const animationBuilder = this.leaveAnimation || index$2.config.get('modalLeave', iosLeaveAnimation);
2418
2400
  const ani = (this.animation = animationBuilder(el, {
2419
2401
  presentingEl: this.presentingElement,
2420
2402
  expandToScroll: this.expandToScroll,
2421
2403
  }));
2422
- const contentEl = index$1.findIonContent(el);
2404
+ const contentEl = index.findIonContent(el);
2423
2405
  if (!contentEl) {
2424
- index$1.printIonContentErrorMsg(el);
2406
+ index.printIonContentErrorMsg(el);
2425
2407
  return;
2426
2408
  }
2427
2409
  const statusBarStyle = this.statusBarStyle ?? Style.Default;
@@ -2433,7 +2415,7 @@ const Modal = class {
2433
2415
  if (!wrapperEl || initialBreakpoint === undefined) {
2434
2416
  return;
2435
2417
  }
2436
- const animationBuilder = this.enterAnimation || index$3.config.get('modalEnter', iosEnterAnimation);
2418
+ const animationBuilder = this.enterAnimation || index$2.config.get('modalEnter', iosEnterAnimation);
2437
2419
  const ani = (this.animation = animationBuilder(this.el, {
2438
2420
  presentingEl: this.presentingElement,
2439
2421
  currentBreakpoint: initialBreakpoint,
@@ -2536,7 +2518,7 @@ const Modal = class {
2536
2518
  this.animation.onFinish(async () => {
2537
2519
  this.currentBreakpoint = 0;
2538
2520
  this.ionBreakpointDidChange.emit({ breakpoint: this.currentBreakpoint });
2539
- await this.dismiss(undefined, overlays.GESTURE);
2521
+ await this.dismiss(undefined, hardwareBackButton.GESTURE);
2540
2522
  this.gestureAnimationDismissing = false;
2541
2523
  });
2542
2524
  }
@@ -2562,7 +2544,7 @@ const Modal = class {
2562
2544
  */
2563
2545
  setCardStatusBarDefault(this.statusBarStyle);
2564
2546
  this.animation.onFinish(async () => {
2565
- await this.dismiss(undefined, overlays.GESTURE);
2547
+ await this.dismiss(undefined, hardwareBackButton.GESTURE);
2566
2548
  this.gestureAnimationDismissing = false;
2567
2549
  });
2568
2550
  }
@@ -2577,7 +2559,7 @@ const Modal = class {
2577
2559
  * For example, `cancel` or `backdrop`.
2578
2560
  */
2579
2561
  async dismiss(data, role) {
2580
- if (this.gestureAnimationDismissing && role !== overlays.GESTURE) {
2562
+ if (this.gestureAnimationDismissing && role !== hardwareBackButton.GESTURE) {
2581
2563
  return false;
2582
2564
  }
2583
2565
  // Cancel any pending resize timeout to prevent stale updates during dismiss
@@ -2619,7 +2601,7 @@ const Modal = class {
2619
2601
  window.removeEventListener(keyboard.KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
2620
2602
  this.keyboardOpenCallback = undefined;
2621
2603
  }
2622
- const dismissed = await overlays.dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, {
2604
+ const dismissed = await hardwareBackButton.dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, {
2623
2605
  presentingEl: presentingElement,
2624
2606
  currentBreakpoint: this.currentBreakpoint ?? this.initialBreakpoint,
2625
2607
  backdropBreakpoint: this.backdropBreakpoint,
@@ -2628,7 +2610,7 @@ const Modal = class {
2628
2610
  if (dismissed) {
2629
2611
  const { delegate } = this.getDelegate();
2630
2612
  await frameworkDelegate.detachComponent(delegate, this.usersElement);
2631
- index$3.writeTask(() => this.el.classList.remove('show-modal'));
2613
+ index$2.writeTask(() => this.el.classList.remove('show-modal'));
2632
2614
  if (this.animation) {
2633
2615
  this.animation.destroy();
2634
2616
  }
@@ -2656,13 +2638,13 @@ const Modal = class {
2656
2638
  * Returns a promise that resolves when the modal did dismiss.
2657
2639
  */
2658
2640
  onDidDismiss() {
2659
- return overlays.eventMethod(this.el, 'ionModalDidDismiss');
2641
+ return hardwareBackButton.eventMethod(this.el, 'ionModalDidDismiss');
2660
2642
  }
2661
2643
  /**
2662
2644
  * Returns a promise that resolves when the modal will dismiss.
2663
2645
  */
2664
2646
  onWillDismiss() {
2665
- return overlays.eventMethod(this.el, 'ionModalWillDismiss');
2647
+ return hardwareBackButton.eventMethod(this.el, 'ionModalWillDismiss');
2666
2648
  }
2667
2649
  /**
2668
2650
  * Move a sheet style modal to a specific breakpoint.
@@ -2672,11 +2654,11 @@ const Modal = class {
2672
2654
  */
2673
2655
  async setCurrentBreakpoint(breakpoint) {
2674
2656
  if (!this.isSheetModal) {
2675
- index$3.printIonWarning('[ion-modal] - setCurrentBreakpoint is only supported on sheet modals.');
2657
+ index$2.printIonWarning('[ion-modal] - setCurrentBreakpoint is only supported on sheet modals.');
2676
2658
  return;
2677
2659
  }
2678
2660
  if (!this.breakpoints.includes(breakpoint)) {
2679
- index$3.printIonWarning(`[ion-modal] - Attempted to set invalid breakpoint value ${breakpoint}. Please double check that the breakpoint value is part of your defined breakpoints.`);
2661
+ index$2.printIonWarning(`[ion-modal] - Attempted to set invalid breakpoint value ${breakpoint}. Please double check that the breakpoint value is part of your defined breakpoints.`);
2680
2662
  return;
2681
2663
  }
2682
2664
  const { currentBreakpoint, moveSheetToBreakpoint, canDismiss, breakpoints, animated } = this;
@@ -2907,7 +2889,7 @@ const Modal = class {
2907
2889
  /**
2908
2890
  * Creates the context object for safe-area utilities.
2909
2891
  *
2910
- * `hasCustomDimensions` is only set by `setInitialSafeAreaOverrides()`
2892
+ * `coveredAxes` is only set by `setInitialSafeAreaOverrides()`
2911
2893
  * because it is only read by `getInitialSafeAreaConfig()`. Other callers
2912
2894
  * (resize handler, post-animation update, fullscreen-padding apply) would
2913
2895
  * pay a `getComputedStyle()` cost for a value they never consult.
@@ -2921,6 +2903,26 @@ const Modal = class {
2921
2903
  currentBreakpoint: this.currentBreakpoint,
2922
2904
  };
2923
2905
  }
2906
+ /**
2907
+ * Keeps the content's sizing in sync with `--height`. The content reads the
2908
+ * property to determine whether it should size itself to its content, and
2909
+ * changes to `--height` on an ancestor or the root can change that behavior
2910
+ * without changing the modal itself.
2911
+ */
2912
+ watchHeightForContent() {
2913
+ /**
2914
+ * A sheet's height comes from its breakpoints, so its content never sizes
2915
+ * itself to `--height`. Watching it would cause the drag to recalculate on
2916
+ * every frame.
2917
+ */
2918
+ if (this.isSheetModal) {
2919
+ return;
2920
+ }
2921
+ this.unsubscribeHeightChange?.();
2922
+ this.unsubscribeHeightChange = onModalHeightChange(this.el, () => {
2923
+ this.el.querySelectorAll('ion-content').forEach((contentEl) => contentEl.recalculateDimensions());
2924
+ });
2925
+ }
2924
2926
  /**
2925
2927
  * Sets initial safe-area overrides before modal animation.
2926
2928
  * Called in present() before animation starts.
@@ -2934,10 +2936,11 @@ const Modal = class {
2934
2936
  setInitialSafeAreaOverrides() {
2935
2937
  const context = {
2936
2938
  ...this.getSafeAreaContext(),
2937
- hasCustomDimensions: hasCustomModalDimensions(this.el),
2939
+ coveredAxes: getModalCoveredAxes(this.el),
2938
2940
  };
2939
2941
  const safeAreaConfig = getInitialSafeAreaConfig(context);
2940
2942
  applySafeAreaOverrides(this.el, safeAreaConfig);
2943
+ this.watchHeightForContent();
2941
2944
  // Set the internal offset property with the resolved root safe-area-top value
2942
2945
  if (context.isSheetModal) {
2943
2946
  this.updateSheetOffsetTop();
@@ -3057,6 +3060,8 @@ const Modal = class {
3057
3060
  clearSafeAreaOverrides(this.el);
3058
3061
  this.unsubscribeRootSafeAreaTop?.();
3059
3062
  this.unsubscribeRootSafeAreaTop = undefined;
3063
+ this.unsubscribeHeightChange?.();
3064
+ this.unsubscribeHeightChange = undefined;
3060
3065
  // Remove internal sheet offset property
3061
3066
  this.el.style.removeProperty('--ion-modal-offset-top');
3062
3067
  const { contentEl } = this.findContentAndFooter();
@@ -3094,7 +3099,7 @@ const Modal = class {
3094
3099
  const isCardModal = presentingElement !== undefined && mode === 'ios';
3095
3100
  const isHandleCycle = handleBehavior === 'cycle';
3096
3101
  const isSheetModalWithHandle = isSheetModal && showHandle;
3097
- return (index$3.h(index$3.Host, { key: '7c9c736052c5a788cf31040b6b2386dd9ea7454b', "no-router": true,
3102
+ return (index$2.h(index$2.Host, { key: '17a95bd7722bac2344bea041aff97db17f55c0cf', "no-router": true,
3098
3103
  // Allow the modal to be navigable when the handle is focusable
3099
3104
  tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1, ...htmlAttributes, style: {
3100
3105
  zIndex: `${20000 + this.overlayIndex}`,
@@ -3105,9 +3110,9 @@ const Modal = class {
3105
3110
  [`modal-sheet`]: isSheetModal,
3106
3111
  [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll,
3107
3112
  'overlay-hidden': true,
3108
- [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false,
3113
+ [hardwareBackButton.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false,
3109
3114
  ...theme.getClassMap(this.cssClass),
3110
- }, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, index$3.h("ion-backdrop", { key: '01b5b5765fb3a32393c736065c824bf760728823', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && index$3.h("div", { key: '40fa7727a0923f7d7461dd027f1511a6a148d84a', class: "modal-shadow" }), index$3.h("div", { key: '9af934b607f60795bd5bff7bee6eacfc9b14fa35',
3115
+ }, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, index$2.h("ion-backdrop", { key: '9dab1ef4771c0d847ba2be8672afbaa2748517f3', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && index$2.h("div", { key: '64af7ed1c5f552b61fc4b9387b926acc76c8a99a', class: "modal-shadow" }), index$2.h("div", { key: '7e76d77d5b2e8f0467bb793facf5aa86f8d01bbe',
3111
3116
  /*
3112
3117
  role and aria-modal must be used on the
3113
3118
  same element. They must also be set inside the
@@ -3120,11 +3125,11 @@ const Modal = class {
3120
3125
  without the tabindex focus() would be a no-op and screen readers
3121
3126
  may not properly announce the dialog and its content when it opens.
3122
3127
  */
3123
- role: "dialog", ...inheritedAttributes, "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }, showHandle && (index$3.h("button", { key: 'df84a6806413b13efc5b03c862edde83151579a7', class: "modal-handle",
3128
+ role: "dialog", ...inheritedAttributes, "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }, showHandle && (index$2.h("button", { key: '5efc0bb0a59adcc594ac48da9fd90e57908a7ffb', class: "modal-handle",
3124
3129
  // Prevents the handle from receiving keyboard focus when it does not cycle
3125
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), index$3.h("slot", { key: '072d3929ec6f25481946b184d8ac24219011e783', onSlotchange: this.onSlotChange }))));
3130
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), index$2.h("slot", { key: '6175fcd0b39c086b4e9eb9e96c4d631c2a86774b', onSlotchange: this.onSlotChange }))));
3126
3131
  }
3127
- get el() { return index$3.getElement(this); }
3132
+ get el() { return index$2.getElement(this); }
3128
3133
  static get watchers() { return {
3129
3134
  "isOpen": [{
3130
3135
  "onIsOpenChange": 0