@ionic/core 9.0.4-nightly.20260914 → 9.0.4-nightly.20260915
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.
- package/components/index.js +1 -1
- package/components/ion-accordion-group.js +1 -1
- package/components/ion-accordion.js +1 -1
- package/components/ion-action-sheet.js +1 -1
- package/components/ion-alert.js +1 -1
- package/components/ion-app.js +1 -1
- package/components/ion-avatar.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-backdrop.js +1 -1
- package/components/ion-badge.js +1 -1
- package/components/ion-breadcrumb.js +1 -1
- package/components/ion-breadcrumbs.js +1 -1
- package/components/ion-button.js +1 -1
- package/components/ion-buttons.js +1 -1
- package/components/ion-card-content.js +1 -1
- package/components/ion-card-header.js +1 -1
- package/components/ion-card-subtitle.js +1 -1
- package/components/ion-card-title.js +1 -1
- package/components/ion-card.js +1 -1
- package/components/ion-checkbox.js +1 -1
- package/components/ion-chip.js +1 -1
- package/components/ion-col.js +1 -1
- package/components/ion-content.js +1 -1
- package/components/ion-datetime-button.js +1 -1
- package/components/ion-datetime.js +1 -1
- package/components/ion-fab-button.js +1 -1
- package/components/ion-fab-list.js +1 -1
- package/components/ion-fab.js +1 -1
- package/components/ion-footer.js +1 -1
- package/components/ion-grid.js +1 -1
- package/components/ion-header.js +1 -1
- package/components/ion-icon.js +1 -1
- package/components/ion-img.js +1 -1
- package/components/ion-infinite-scroll-content.js +1 -1
- package/components/ion-infinite-scroll.js +1 -1
- package/components/ion-input-otp.js +1 -1
- package/components/ion-input-password-toggle.js +1 -1
- package/components/ion-input.js +1 -1
- package/components/ion-item-divider.js +1 -1
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +1 -1
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-item.js +1 -1
- package/components/ion-label.js +1 -1
- package/components/ion-list-header.js +1 -1
- package/components/ion-list.js +1 -1
- package/components/ion-loading.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-menu-toggle.js +1 -1
- package/components/ion-menu.js +1 -1
- package/components/ion-modal.js +1 -1
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +1 -1
- package/components/ion-picker-column-option.js +1 -1
- package/components/ion-picker-column.js +1 -1
- package/components/ion-picker.js +1 -1
- package/components/ion-popover.js +1 -1
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-radio-group.js +1 -1
- package/components/ion-radio.js +1 -1
- package/components/ion-range.js +1 -1
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-refresher.js +1 -1
- package/components/ion-reorder-group.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-ripple-effect.js +1 -1
- package/components/ion-route-redirect.js +1 -1
- package/components/ion-route.js +1 -1
- package/components/ion-router-link.js +1 -1
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-router.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +1 -1
- package/components/ion-segment-button.js +1 -1
- package/components/ion-segment-content.js +1 -1
- package/components/ion-segment-view.js +1 -1
- package/components/ion-segment.js +1 -1
- package/components/ion-select-modal.js +1 -1
- package/components/ion-select-option.js +1 -1
- package/components/ion-select-popover.js +1 -1
- package/components/ion-select.js +1 -1
- package/components/ion-skeleton-text.js +1 -1
- package/components/ion-spinner.js +1 -1
- package/components/ion-split-pane.js +1 -1
- package/components/ion-tab-bar.js +1 -1
- package/components/ion-tab-button.js +1 -1
- package/components/ion-tab.js +1 -1
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +1 -1
- package/components/ion-textarea.js +1 -1
- package/components/ion-thumbnail.js +1 -1
- package/components/ion-title.js +1 -1
- package/components/ion-toast.js +1 -1
- package/components/ion-toggle.js +1 -1
- package/components/ion-toolbar.js +1 -1
- package/components/p--pR3YKVX.js +4 -0
- package/components/{p-BJr2B5hZ.js → p-2ta4uE9-.js} +1 -1
- package/components/{p-YjMkHuvH.js → p-47h0_nN4.js} +1 -1
- package/components/{p-C8Ck7_Eo.js → p-8MzqWBTT.js} +1 -1
- package/components/{p-CNLioZ3B.js → p-BGChz0G8.js} +1 -1
- package/components/{p-DZRZic9C.js → p-BLe-edUh.js} +1 -1
- package/components/{p-CJgnoKcN.js → p-BMHhG7Xh.js} +1 -1
- package/components/{p-TWw4e4sO.js → p-BPbgEuCf.js} +1 -1
- package/components/{p-DnBNYc7u.js → p-Bc-3W2an.js} +1 -1
- package/{dist/ionic/p-DTxBioUO.js → components/p-BezPzC13.js} +1 -1
- package/components/{p-B1_TL6RQ.js → p-BezRi1ML.js} +1 -1
- package/{dist/ionic/p-DcCEP7Ss.js → components/p-Bi8VGu4M.js} +1 -1
- package/components/{p-DL13ieTa.js → p-BjizFeM6.js} +1 -1
- package/components/{p-BF48Oc0v.js → p-BuxZkazO.js} +1 -1
- package/components/p-BxCcX93a.js +4 -0
- package/components/{p-BW_SlU2D.js → p-C0tpzcpi.js} +1 -1
- package/components/{p-DMBiAyOR.js → p-C6WYVtle.js} +1 -1
- package/components/p-CDt7Q7Dj.js +4 -0
- package/components/p-CDvyV0r0.js +4 -0
- package/components/{p-C4VpVfrJ.js → p-CEs5NmKW.js} +1 -1
- package/components/{p-CMRYD_yR.js → p-CLVgYpRn.js} +1 -1
- package/components/{p-Cd1WaN-0.js → p-CMT0YmOj.js} +1 -1
- package/components/{p-DFLJvuRK.js → p-CPGp3WWG.js} +1 -1
- package/components/{p-B4lxwJ8N.js → p-CXuRZoWE.js} +1 -1
- package/components/{p-D7wDJdFn.js → p-CaY8IRMT.js} +1 -1
- package/components/{p-BQyuFxYc.js → p-CcOl6jEv.js} +1 -1
- package/components/{p-Ctop2IWW.js → p-CeGQfrDU.js} +1 -1
- package/components/{p-cEN43Ahr.js → p-CkffScdn.js} +1 -1
- package/components/{p-BT9-hMMz.js → p-CpcdCRug.js} +1 -1
- package/components/{p-Hp8t4RMX.js → p-Csi6iX-c.js} +1 -1
- package/components/{p-1sJ0ZDPe.js → p-CthoZqG1.js} +1 -1
- package/components/{p-Fl7ZFU74.js → p-DBGxvxkE.js} +1 -1
- package/components/p-DEvF_E6y.js +4 -0
- package/components/{p-COO0eJOA.js → p-DKX1mWld.js} +1 -1
- package/components/{p-CqbGBmqb.js → p-DMT-4tHM.js} +1 -1
- package/components/p-DOwsU7Mc.js +4 -0
- package/components/{p-5ldEpNdG.js → p-DSuBagxs.js} +1 -1
- package/{dist/ionic/p-DZ6Hmc-8.js → components/p-DVHC9GYb.js} +1 -1
- package/components/p-DWe-YApm.js +4 -0
- package/components/{p-Bi-it1EH.js → p-DX_3N4fh.js} +1 -1
- package/components/{p-C-NbvXu4.js → p-DcrAT6v8.js} +1 -1
- package/components/p-DftucGJR.js +4 -0
- package/components/{p-qAXsfUff.js → p-HO1CDBeU.js} +1 -1
- package/components/{p-DM1gJSMP.js → p-MLplUp3U.js} +1 -1
- package/{dist/ionic/p-BMiZX1LT.js → components/p-MOwrp7hX.js} +1 -1
- package/components/{p-D5w_FlVa.js → p-MSr4IlyS.js} +1 -1
- package/components/{p-GGbIHyEF.js → p-PWHvigWP.js} +1 -1
- package/components/p-S-gGoI4A.js +4 -0
- package/components/{p-BYJRZKHa.js → p-gyjG_IM4.js} +1 -1
- package/components/p-k92zpBT6.js +4 -0
- package/components/{p-DxhHlJln.js → p-rDUBp56G.js} +1 -1
- package/css/core.css +1 -1
- package/css/core.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/dist/cjs/{animation-Kd1N7WTN.js → animation-2DHlng-f.js} +3 -3
- package/dist/cjs/{app-globals-b1G4t26O.js → app-globals-BeC95igM.js} +1 -1
- package/dist/cjs/{button-active-CQCFubJJ.js → button-active-CTyeZB16.js} +2 -2
- package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-cADDPMtd.js} +3 -3
- package/dist/cjs/{format-bHU8N1g5.js → format-BbkxKT7p.js} +1 -1
- package/dist/cjs/{framework-delegate-d-fWfeI6.js → framework-delegate-DYIuFqQx.js} +1 -1
- package/dist/cjs/{haptic-Ch-X4gRx.js → haptic-CqPss9_L.js} +1 -1
- package/dist/cjs/{helpers-7wzdhdeg.js → helpers-DHjAEaU9.js} +45 -1
- package/dist/cjs/{index-C74Q3t6a.js → index-B-R-H1Z2.js} +7 -8
- package/dist/cjs/{index-DtvKGwdh.js → index-BLq7TkUV.js} +2 -2
- package/dist/cjs/{index-CQfEIyLK.js → index-D_D542p0.js} +4 -4
- package/dist/cjs/{index-DFNrCX7M.js → index-Da83wbmS.js} +8 -9
- package/dist/cjs/{index-KiSZqhYS.js → index-MdIUU940.js} +1 -1
- package/dist/cjs/{index-DXoo08JC.js → index-T36W_eKv.js} +13 -8
- package/dist/cjs/index.cjs.js +17 -19
- package/dist/cjs/{input-shims-VJIiKBKv.js → input-shims-DYxL0Fdm.js} +16 -17
- package/dist/cjs/{input.utils-EHVE2RK_.js → input.utils-B_32Xwga.js} +1 -1
- package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-action-sheet.cjs.entry.js +26 -28
- package/dist/cjs/ion-alert.cjs.entry.js +27 -29
- package/dist/cjs/ion-app_8.cjs.entry.js +72 -24
- package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-back-button.cjs.entry.js +3 -3
- package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-button_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-card_5.cjs.entry.js +3 -3
- package/dist/cjs/ion-checkbox.cjs.entry.js +4 -4
- package/dist/cjs/ion-chip.cjs.entry.js +2 -2
- package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
- package/dist/cjs/ion-datetime.cjs.entry.js +7 -9
- package/dist/cjs/ion-fab_3.cjs.entry.js +3 -3
- package/dist/cjs/ion-img.cjs.entry.js +3 -3
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +5 -5
- package/dist/cjs/ion-input-otp.cjs.entry.js +3 -3
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +2 -2
- package/dist/cjs/ion-input.cjs.entry.js +5 -6
- package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-item_8.cjs.entry.js +3 -3
- package/dist/cjs/ion-loading.cjs.entry.js +18 -20
- package/dist/cjs/ion-menu_3.cjs.entry.js +15 -17
- package/dist/cjs/ion-modal.cjs.entry.js +177 -172
- package/dist/cjs/ion-nav_2.cjs.entry.js +6 -6
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +3 -3
- package/dist/cjs/ion-picker-column.cjs.entry.js +8 -9
- package/dist/cjs/ion-picker.cjs.entry.js +2 -2
- package/dist/cjs/ion-popover.cjs.entry.js +18 -20
- package/dist/cjs/ion-progress-bar.cjs.entry.js +3 -3
- package/dist/cjs/ion-radio_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-range.cjs.entry.js +4 -4
- package/dist/cjs/ion-refresher_2.cjs.entry.js +8 -9
- package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -7
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
- package/dist/cjs/ion-route_4.cjs.entry.js +4 -4
- package/dist/cjs/ion-searchbar.cjs.entry.js +3 -3
- package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
- package/dist/cjs/ion-segment-view.cjs.entry.js +1 -1
- package/dist/cjs/ion-segment_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-select-modal.cjs.entry.js +8 -10
- package/dist/cjs/ion-select_3.cjs.entry.js +13 -15
- package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
- package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +6 -7
- package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-text.cjs.entry.js +2 -2
- package/dist/cjs/ion-textarea.cjs.entry.js +5 -6
- package/dist/cjs/ion-toast.cjs.entry.js +49 -51
- package/dist/cjs/ion-toggle.cjs.entry.js +6 -7
- package/dist/cjs/{ionic-global-CYJNT-2P.js → ionic-global-BWd7usAF.js} +1 -1
- package/dist/cjs/ionic.cjs.js +5 -5
- package/dist/cjs/{ios.transition-DYGiD6gM.js → ios.transition-6AFNO6uU.js} +4 -5
- package/dist/cjs/{item-multiple-inputs-Dv6qrMhm.js → item-multiple-inputs-BaBx_Te8.js} +1 -1
- package/dist/cjs/{keyboard-Cix5TVkD.js → keyboard-BJEm-3HF.js} +5 -3
- package/dist/cjs/{keyboard-cHxZlTyz.js → keyboard-DstMw6u1.js} +1 -1
- package/dist/cjs/{keyboard-controller-PtZoN2GS.js → keyboard-controller-DaUNT15d.js} +9 -9
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-CrSkaoz6.js → md.transition-CPq0ckrU.js} +4 -5
- package/dist/cjs/{overlays-BR21NUIG.js → overlays-DwMDYc_O.js} +162 -9
- package/dist/cjs/{select-option-render-D8ZEjYji.js → select-option-render-Cu-ABBRH.js} +2 -2
- package/dist/cjs/{slot-mutation-controller-yNStVQqX.js → slot-mutation-controller-CtYZdaWI.js} +4 -5
- package/dist/cjs/{status-tap-CNP5eD1R.js → status-tap-BUfv_eD4.js} +3 -3
- package/dist/cjs/{swipe-back-BYb_nLJe.js → swipe-back-DYKxJU5r.js} +2 -2
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/content/content.js +62 -8
- package/dist/collection/components/modal/modal.ios.css +12 -1
- package/dist/collection/components/modal/modal.js +31 -8
- package/dist/collection/components/modal/modal.md.css +12 -1
- package/dist/collection/components/modal/safe-area-utils.js +69 -90
- package/dist/collection/components/modal/utils.js +7 -0
- package/dist/collection/utils/helpers.js +39 -0
- package/dist/collection/utils/overlays.js +34 -0
- package/dist/docs.json +2 -2
- package/dist/esm/{animation-BFNVlYum.js → animation-CAzXJ2I1.js} +2 -2
- package/dist/esm/{app-globals-BgX0BGL1.js → app-globals-DGJXnnkm.js} +1 -1
- package/dist/esm/{button-active-BfOvDr3b.js → button-active-DyyWVqU3.js} +2 -2
- package/dist/esm/{capacitor-CFERIeaU.js → capacitor-C041I3qZ.js} +1 -1
- package/dist/esm/{format-DDFE9jM5.js → format-D78cdY12.js} +1 -1
- package/dist/esm/{framework-delegate-BwNhx9NR.js → framework-delegate-CUDbUfWS.js} +1 -1
- package/dist/esm/{haptic-Cq4UAeka.js → haptic-D3njgGLB.js} +1 -1
- package/dist/esm/{helpers-BSmc0nst.js → helpers-BJFnZngp.js} +43 -2
- package/dist/esm/{index-DnA_7Bnx.js → index-CdoVp_rZ.js} +4 -4
- package/dist/esm/{index-D76bbuoi.js → index-DmnOg_xm.js} +1 -1
- package/dist/esm/{index-CJln0gS3.js → index-DoY4e_3F.js} +2 -3
- package/dist/esm/{index-C23AVPx9.js → index-Dvqtt_WK.js} +13 -8
- package/dist/esm/{index-BuPaALjU.js → index-iurdcGHg.js} +5 -6
- package/dist/esm/{index-C1b9CLFg.js → index-obGyiHiO.js} +2 -2
- package/dist/esm/index.js +11 -13
- package/dist/esm/{input-shims-Dqk-Ou25.js → input-shims-DognYvwv.js} +5 -6
- package/dist/esm/{input.utils-rqoH22pW.js → input.utils-C3mVJhji.js} +1 -1
- package/dist/esm/ion-accordion_2.entry.js +3 -3
- package/dist/esm/ion-action-sheet.entry.js +11 -13
- package/dist/esm/ion-alert.entry.js +11 -13
- package/dist/esm/ion-app_8.entry.js +72 -24
- package/dist/esm/ion-avatar_3.entry.js +2 -2
- package/dist/esm/ion-back-button.entry.js +3 -3
- package/dist/esm/ion-backdrop.entry.js +2 -2
- package/dist/esm/ion-breadcrumb_2.entry.js +3 -3
- package/dist/esm/ion-button_2.entry.js +3 -3
- package/dist/esm/ion-card_5.entry.js +3 -3
- package/dist/esm/ion-checkbox.entry.js +4 -4
- package/dist/esm/ion-chip.entry.js +2 -2
- package/dist/esm/ion-col_3.entry.js +2 -2
- package/dist/esm/ion-datetime-button.entry.js +4 -4
- package/dist/esm/ion-datetime.entry.js +6 -8
- package/dist/esm/ion-fab_3.entry.js +3 -3
- package/dist/esm/ion-img.entry.js +3 -3
- package/dist/esm/ion-infinite-scroll_2.entry.js +5 -5
- package/dist/esm/ion-input-otp.entry.js +3 -3
- package/dist/esm/ion-input-password-toggle.entry.js +2 -2
- package/dist/esm/ion-input.entry.js +5 -6
- package/dist/esm/ion-item-option_3.entry.js +4 -4
- package/dist/esm/ion-item_8.entry.js +3 -3
- package/dist/esm/ion-loading.entry.js +7 -9
- package/dist/esm/ion-menu_3.entry.js +7 -9
- package/dist/esm/ion-modal.entry.js +115 -110
- package/dist/esm/ion-nav_2.entry.js +6 -6
- package/dist/esm/ion-picker-column-option.entry.js +3 -3
- package/dist/esm/ion-picker-column.entry.js +5 -6
- package/dist/esm/ion-picker.entry.js +2 -2
- package/dist/esm/ion-popover.entry.js +7 -9
- package/dist/esm/ion-progress-bar.entry.js +3 -3
- package/dist/esm/ion-radio_2.entry.js +4 -4
- package/dist/esm/ion-range.entry.js +4 -4
- package/dist/esm/ion-refresher_2.entry.js +8 -9
- package/dist/esm/ion-reorder_2.entry.js +6 -7
- package/dist/esm/ion-ripple-effect.entry.js +2 -2
- package/dist/esm/ion-route_4.entry.js +4 -4
- package/dist/esm/ion-searchbar.entry.js +3 -3
- package/dist/esm/ion-segment-content.entry.js +1 -1
- package/dist/esm/ion-segment-view.entry.js +1 -1
- package/dist/esm/ion-segment_2.entry.js +3 -3
- package/dist/esm/ion-select-modal.entry.js +7 -9
- package/dist/esm/ion-select_3.entry.js +8 -10
- package/dist/esm/ion-spinner.entry.js +2 -2
- package/dist/esm/ion-split-pane.entry.js +2 -2
- package/dist/esm/ion-tab-bar_2.entry.js +6 -7
- package/dist/esm/ion-tab_2.entry.js +3 -3
- package/dist/esm/ion-text.entry.js +2 -2
- package/dist/esm/ion-textarea.entry.js +5 -6
- package/dist/esm/ion-toast.entry.js +7 -9
- package/dist/esm/ion-toggle.entry.js +6 -7
- package/dist/esm/{ionic-global-ZXjCXKH0.js → ionic-global-BSaFA7np.js} +1 -1
- package/dist/esm/ionic.js +6 -6
- package/dist/esm/{ios.transition-CWAgfQ1r.js → ios.transition-ofa92pAl.js} +4 -5
- package/dist/esm/{item-multiple-inputs-DZnIiOO_.js → item-multiple-inputs-CffmpUe9.js} +1 -1
- package/dist/esm/{keyboard-DAF8GNJ9.js → keyboard-Cz4hUjuj.js} +1 -1
- package/dist/esm/{keyboard-Cj8mLJeq.js → keyboard-Dsc85bts.js} +5 -3
- package/dist/esm/{keyboard-controller-DEwoa1ev.js → keyboard-controller-BLvRgxgP.js} +2 -2
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-ZuqDDdDW.js → md.transition-DnFfqsAv.js} +4 -5
- package/dist/esm/{overlays-DKE0DgvE.js → overlays-a_5AhqWk.js} +156 -7
- package/dist/esm/{select-option-render-CRP_teb1.js → select-option-render-C_PCwA67.js} +2 -2
- package/dist/esm/{slot-mutation-controller-BVnANfIt.js → slot-mutation-controller-D7n8Peo2.js} +1 -2
- package/dist/esm/{status-tap-Cv9gb3ja.js → status-tap-BsTKKfug.js} +3 -3
- package/dist/esm/{swipe-back-B2CmabKY.js → swipe-back-ibFGqXH2.js} +2 -2
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-063769cf.entry.js +4 -0
- package/dist/ionic/{p-d8c138d9.entry.js → p-097a0cf5.entry.js} +1 -1
- package/dist/ionic/{p-ec00fd0d.entry.js → p-0a14a6a3.entry.js} +1 -1
- package/dist/ionic/p-0a824cef.entry.js +4 -0
- package/dist/ionic/{p-9c5f2691.entry.js → p-12ea6d13.entry.js} +1 -1
- package/dist/ionic/p-1c4926e9.entry.js +4 -0
- package/dist/ionic/p-1dac4211.entry.js +4 -0
- package/dist/ionic/{p-a8ff2489.entry.js → p-23afeeb2.entry.js} +1 -1
- package/dist/ionic/{p-ca1b8865.entry.js → p-25abc69d.entry.js} +1 -1
- package/dist/ionic/{p-099b7f9f.entry.js → p-26d89234.entry.js} +1 -1
- package/dist/ionic/{p-8b80d9f9.entry.js → p-28952272.entry.js} +1 -1
- package/dist/ionic/{p-5cc09b40.entry.js → p-29687c0b.entry.js} +1 -1
- package/dist/ionic/p-2ecebfd9.entry.js +4 -0
- package/dist/ionic/p-302e4d74.entry.js +4 -0
- package/dist/ionic/p-38d3e1cb.entry.js +4 -0
- package/dist/ionic/p-41254776.entry.js +4 -0
- package/dist/ionic/{p-6e386853.entry.js → p-416bec74.entry.js} +1 -1
- package/dist/ionic/{p-354d38d3.entry.js → p-41ae57ea.entry.js} +1 -1
- package/dist/ionic/{p-7bfeccb3.entry.js → p-4dc3f2b3.entry.js} +1 -1
- package/dist/ionic/{p-efc0cf82.entry.js → p-5272e103.entry.js} +1 -1
- package/dist/ionic/{p-68cc89a6.entry.js → p-59305088.entry.js} +1 -1
- package/dist/ionic/p-5b9b245e.entry.js +4 -0
- package/dist/ionic/{p-561af487.entry.js → p-5eadc64e.entry.js} +1 -1
- package/dist/ionic/p-5f695204.entry.js +4 -0
- package/dist/ionic/{p-38b9375b.entry.js → p-60ca717e.entry.js} +1 -1
- package/dist/ionic/{p-4c3e50f8.entry.js → p-63eb4550.entry.js} +1 -1
- package/dist/ionic/{p-90f50a65.entry.js → p-689f7a37.entry.js} +1 -1
- package/dist/ionic/{p-54cbb0a7.entry.js → p-7da532af.entry.js} +1 -1
- package/dist/ionic/{p-271c3640.entry.js → p-84dea138.entry.js} +1 -1
- package/dist/ionic/{p-4712a8a9.entry.js → p-88cf4127.entry.js} +1 -1
- package/dist/ionic/{p-3bba83ee.entry.js → p-89e04e63.entry.js} +1 -1
- package/dist/ionic/{p-dd01be0a.entry.js → p-8af458bf.entry.js} +1 -1
- package/dist/ionic/p-8d68604a.entry.js +4 -0
- package/dist/ionic/p-B13Uv-FT.js +4 -0
- package/dist/ionic/p-B8K6OHqa.js +4 -0
- package/dist/ionic/p-BD0v0Sx_.js +4 -0
- package/dist/ionic/p-BDs20Dfe.js +4 -0
- package/dist/ionic/p-BIj0Lfim.js +4 -0
- package/dist/ionic/p-BRZstBYy.js +4 -0
- package/dist/ionic/{p-T71k3C35.js → p-BRlwrQ6h.js} +1 -1
- package/dist/ionic/{p-DYUjHcuH.js → p-BT0-h-eD.js} +1 -1
- package/dist/ionic/p-Ba_yQZdQ.js +4 -0
- package/dist/ionic/p-BnMJqJBa.js +4 -0
- package/{components/p-6ZLn6K5e.js → dist/ionic/p-BrbwGxm1.js} +1 -1
- package/dist/ionic/p-Bu6uWqQM.js +4 -0
- package/dist/ionic/p-Bx46Dlpo.js +4 -0
- package/dist/ionic/p-C0vJzNM9.js +4 -0
- package/dist/ionic/p-C4FdGOym.js +4 -0
- package/dist/ionic/p-C5SsTfux.js +4 -0
- package/dist/ionic/p-CD77BF32.js +4 -0
- package/dist/ionic/p-CESQIy-V.js +4 -0
- package/dist/ionic/{p-BaeKWZ-a.js → p-CazJOH5P.js} +1 -1
- package/dist/ionic/p-D14knedj.js +4 -0
- package/dist/ionic/p-DQcKi6P6.js +4 -0
- package/dist/ionic/p-DlvB1Idh.js +4 -0
- package/dist/ionic/{p-C23AVPx9.js → p-Dvqtt_WK.js} +1 -1
- package/dist/ionic/{p-CJv-wOAd.js → p-NL1pxcde.js} +1 -1
- package/dist/ionic/{p-191a651e.entry.js → p-a1d733a3.entry.js} +1 -1
- package/dist/ionic/p-a4a2ce90.entry.js +4 -0
- package/dist/ionic/p-a6a95175.entry.js +4 -0
- package/dist/ionic/p-ac6a1168.entry.js +4 -0
- package/dist/ionic/{p-cc4320d3.entry.js → p-bcf18c26.entry.js} +1 -1
- package/dist/ionic/p-be8ae1cc.entry.js +4 -0
- package/dist/ionic/{p-85599fe3.entry.js → p-c0dd14f4.entry.js} +1 -1
- package/dist/ionic/{p-f0fb23c1.entry.js → p-c9952851.entry.js} +1 -1
- package/dist/ionic/p-cb893f35.entry.js +4 -0
- package/dist/ionic/p-d7fb1d2a.entry.js +4 -0
- package/dist/ionic/{p-ee09ac9d.entry.js → p-d8a6ebfd.entry.js} +1 -1
- package/dist/ionic/{p-7fbb3319.entry.js → p-dd89474c.entry.js} +1 -1
- package/dist/ionic/{p-fe9ed9bd.entry.js → p-df272a41.entry.js} +1 -1
- package/dist/ionic/{p-b9b4e85d.entry.js → p-e04a7110.entry.js} +1 -1
- package/dist/ionic/{p-D7jHfs0Y.js → p-e0g1fYYm.js} +1 -1
- package/dist/ionic/{p-a8df96c8.entry.js → p-e3a98575.entry.js} +1 -1
- package/dist/ionic/{p-d6755739.entry.js → p-efa78f73.entry.js} +1 -1
- package/dist/ionic/{p-1f24cb24.entry.js → p-f97ef975.entry.js} +1 -1
- package/dist/ionic/p-fc3312a4.entry.js +4 -0
- package/dist/ionic/{p-5d9094ac.entry.js → p-fd220f9c.entry.js} +1 -1
- package/dist/ionic/p-g9SK-dv1.js +4 -0
- package/dist/ionic/p-yYEBg4iw.js +4 -0
- package/dist/ionic/{p-BMPN55of.js → p-yiP8rgDC.js} +1 -1
- package/dist/types/components/content/content.d.ts +28 -3
- package/dist/types/components/modal/modal.d.ts +9 -1
- package/dist/types/components/modal/safe-area-utils.d.ts +28 -14
- package/dist/types/components/modal/utils.d.ts +4 -0
- package/dist/types/components.d.ts +1 -1
- package/dist/types/stencil-public-runtime.d.ts +61 -55
- package/dist/types/utils/helpers.d.ts +17 -0
- package/dist/types/utils/overlays.d.ts +15 -0
- package/hydrate/index.js +315 -136
- package/hydrate/index.mjs +315 -136
- package/package.json +1 -1
- package/components/p-BNIsryb2.js +0 -4
- package/components/p-BU8a2IhR.js +0 -4
- package/components/p-BWoa-cki.js +0 -4
- package/components/p-BgkOsq-d.js +0 -4
- package/components/p-C09TXohi.js +0 -4
- package/components/p-CG_zZq_I.js +0 -4
- package/components/p-CWAks_S_.js +0 -4
- package/components/p-CWuIRJQN.js +0 -4
- package/components/p-CobW5muY.js +0 -4
- package/components/p-CrAKlX71.js +0 -4
- package/components/p-DhNuxvJH.js +0 -4
- package/components/p-DiuOa1vw.js +0 -4
- package/components/p-M34T2gyX.js +0 -4
- package/dist/cjs/hardware-back-button-Bu4Dzw8l.js +0 -121
- package/dist/cjs/index-DkNv4J_i.js +0 -10
- package/dist/esm/hardware-back-button-DmkiRgOT.js +0 -115
- package/dist/esm/index-ZjP4CjeZ.js +0 -7
- package/dist/ionic/p-171a2278.entry.js +0 -4
- package/dist/ionic/p-1e64f5c7.entry.js +0 -4
- package/dist/ionic/p-2ea4bb36.entry.js +0 -4
- package/dist/ionic/p-338a02e0.entry.js +0 -4
- package/dist/ionic/p-3e01c744.entry.js +0 -4
- package/dist/ionic/p-458715a9.entry.js +0 -4
- package/dist/ionic/p-5906ea6f.entry.js +0 -4
- package/dist/ionic/p-612ea3b1.entry.js +0 -4
- package/dist/ionic/p-723f4dcd.entry.js +0 -4
- package/dist/ionic/p-77c96e08.entry.js +0 -4
- package/dist/ionic/p-803059b6.entry.js +0 -4
- package/dist/ionic/p-9595e305.entry.js +0 -4
- package/dist/ionic/p-BY6BzzPF.js +0 -4
- package/dist/ionic/p-Bd72UYI2.js +0 -4
- package/dist/ionic/p-BgOvhHy_.js +0 -4
- package/dist/ionic/p-BhamHSw3.js +0 -4
- package/dist/ionic/p-BijjLYjT.js +0 -4
- package/dist/ionic/p-C8XilMh0.js +0 -4
- package/dist/ionic/p-CER8qW8Y.js +0 -4
- package/dist/ionic/p-CFuOr1Tu.js +0 -4
- package/dist/ionic/p-CIGNaXM1.js +0 -4
- package/dist/ionic/p-CMZYmFb4.js +0 -4
- package/dist/ionic/p-CmXuiRT6.js +0 -4
- package/dist/ionic/p-D5t_-oMk.js +0 -4
- package/dist/ionic/p-D6rHcCvc.js +0 -4
- package/dist/ionic/p-DLM95R4x.js +0 -4
- package/dist/ionic/p-D_gb-kdd.js +0 -4
- package/dist/ionic/p-DajLgJ4d.js +0 -4
- package/dist/ionic/p-Do3zTvCA.js +0 -4
- package/dist/ionic/p-ZjP4CjeZ.js +0 -4
- package/dist/ionic/p-aff52029.entry.js +0 -4
- package/dist/ionic/p-b3532b8d.entry.js +0 -4
- package/dist/ionic/p-d526798a.entry.js +0 -4
- package/dist/ionic/p-e7f4b1e0.entry.js +0 -4
- package/dist/ionic/p-ed725cdf.entry.js +0 -4
- package/dist/ionic/p-fa50d493.entry.js +0 -4
- package/dist/ionic/p-zWf7R2xV.js +0 -4
package/hydrate/index.mjs
CHANGED
|
@@ -5,6 +5,10 @@ import { Readable } from 'stream';
|
|
|
5
5
|
|
|
6
6
|
const modeResolutionChain = [];
|
|
7
7
|
|
|
8
|
+
// captured here, at true module scope, before hydrateFactory shadows the
|
|
9
|
+
// AbortController identifier for component code below.
|
|
10
|
+
var $stencilNativeAbortController = AbortController;
|
|
11
|
+
|
|
8
12
|
function hydrateFactory($stencilWindow, $stencilHydrateOpts, $stencilHydrateResults, $stencilAfterHydrate, $stencilHydrateResolve) {
|
|
9
13
|
var globalThis = $stencilWindow;
|
|
10
14
|
var self = $stencilWindow;
|
|
@@ -96,8 +100,46 @@ function hydrateFactory($stencilWindow, $stencilHydrateOpts, $stencilHydrateResu
|
|
|
96
100
|
|
|
97
101
|
var fetch, FetchError, Headers, Request, Response;
|
|
98
102
|
|
|
103
|
+
// Aborted when the render times out or errors, so in-flight fetch() calls
|
|
104
|
+
// made by component code stop holding the render's window/results alive
|
|
105
|
+
// instead of running to completion against a torn-down window. See #6864.
|
|
106
|
+
var $stencilAbortController = new $stencilNativeAbortController();
|
|
107
|
+
|
|
108
|
+
// Any AbortController a component creates itself is transparently wired to
|
|
109
|
+
// cascade-abort when the render times out too, so component code using the
|
|
110
|
+
// standard AbortController convention for its own cancellable work (axios,
|
|
111
|
+
// aws-sdk v3, the mongodb driver, etc.) gets cancelled automatically.
|
|
112
|
+
var AbortController = function () {
|
|
113
|
+
var controller = new $stencilNativeAbortController();
|
|
114
|
+
$stencilAbortController.signal.addEventListener(
|
|
115
|
+
'abort',
|
|
116
|
+
function () {
|
|
117
|
+
controller.abort();
|
|
118
|
+
},
|
|
119
|
+
{ once: true },
|
|
120
|
+
);
|
|
121
|
+
return controller;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
function $stencilFetchSignal(callerSignal) {
|
|
125
|
+
if (!callerSignal) {
|
|
126
|
+
return $stencilAbortController.signal;
|
|
127
|
+
}
|
|
128
|
+
if (callerSignal.aborted || $stencilAbortController.signal.aborted) {
|
|
129
|
+
return callerSignal.aborted ? callerSignal : $stencilAbortController.signal;
|
|
130
|
+
}
|
|
131
|
+
var merged = new $stencilNativeAbortController();
|
|
132
|
+
var onAbort = function () { merged.abort(); };
|
|
133
|
+
callerSignal.addEventListener('abort', onAbort, { once: true });
|
|
134
|
+
$stencilAbortController.signal.addEventListener('abort', onAbort, { once: true });
|
|
135
|
+
return merged.signal;
|
|
136
|
+
}
|
|
137
|
+
|
|
99
138
|
if (typeof $stencilWindow.fetch === 'function') {
|
|
100
|
-
|
|
139
|
+
var $stencilRawFetch = $stencilWindow.fetch;
|
|
140
|
+
fetch = $stencilWindow.fetch = function(input, init) {
|
|
141
|
+
return $stencilRawFetch(input, Object.assign({}, init, { signal: $stencilFetchSignal(init && init.signal) }));
|
|
142
|
+
};
|
|
101
143
|
} else {
|
|
102
144
|
fetch = $stencilWindow.fetch = function() { throw new Error('fetch() is not implemented'); };
|
|
103
145
|
}
|
|
@@ -420,7 +462,7 @@ const appGlobalScript = initialize || (() => {});
|
|
|
420
462
|
const globalScripts = appGlobalScript;
|
|
421
463
|
|
|
422
464
|
/*
|
|
423
|
-
Stencil Hydrate Platform v4.
|
|
465
|
+
Stencil Hydrate Platform v4.45.0 | MIT Licensed | https://stenciljs.com
|
|
424
466
|
*/
|
|
425
467
|
var __create = Object.create;
|
|
426
468
|
var __defProp = Object.defineProperty;
|
|
@@ -1884,13 +1926,14 @@ var scopeSelector = (selector, scopeSelectorText, hostSelector, slotSelector) =>
|
|
|
1884
1926
|
}
|
|
1885
1927
|
}).join(", ");
|
|
1886
1928
|
};
|
|
1929
|
+
var isScopableAtRule = (selector) => selector.startsWith("@media") || selector.startsWith("@supports") || selector.startsWith("@page") || selector.startsWith("@document") || selector.startsWith("@layer");
|
|
1887
1930
|
var scopeSelectors = (cssText, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector) => {
|
|
1888
1931
|
return processRules(cssText, (rule) => {
|
|
1889
1932
|
let selector = rule.selector;
|
|
1890
1933
|
let content = rule.content;
|
|
1891
1934
|
if (rule.selector[0] !== "@") {
|
|
1892
1935
|
selector = scopeSelector(rule.selector, scopeSelectorText, hostSelector, slotSelector);
|
|
1893
|
-
} else if (
|
|
1936
|
+
} else if (isScopableAtRule(rule.selector)) {
|
|
1894
1937
|
content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector);
|
|
1895
1938
|
}
|
|
1896
1939
|
const cssRule = {
|
|
@@ -1969,15 +2012,16 @@ var scopeCss = (cssText, scopeId2, commentOriginalSelector) => {
|
|
|
1969
2012
|
rule.selector = placeholder + rule.selector;
|
|
1970
2013
|
return rule;
|
|
1971
2014
|
};
|
|
1972
|
-
|
|
2015
|
+
const commentSelectors = (input) => processRules(input, (rule) => {
|
|
1973
2016
|
if (rule.selector[0] !== "@") {
|
|
1974
2017
|
return processCommentedSelector(rule);
|
|
1975
|
-
}
|
|
1976
|
-
|
|
1977
|
-
|
|
2018
|
+
}
|
|
2019
|
+
if (isScopableAtRule(rule.selector)) {
|
|
2020
|
+
rule.content = commentSelectors(rule.content);
|
|
1978
2021
|
}
|
|
1979
2022
|
return rule;
|
|
1980
2023
|
});
|
|
2024
|
+
cssText = commentSelectors(cssText);
|
|
1981
2025
|
}
|
|
1982
2026
|
const scoped = scopeCssText(cssText, scopeId2, hostScopeId, slotScopeId);
|
|
1983
2027
|
cssText = [scoped.cssText, ...commentsWithHash].join("\n");
|
|
@@ -2618,7 +2662,7 @@ var updateChildren = (parentElm, oldCh, newVNode2, newCh, isInitialRender = fals
|
|
|
2618
2662
|
if (idxInOld >= 0) {
|
|
2619
2663
|
elmToMove = oldCh[idxInOld];
|
|
2620
2664
|
if (elmToMove.$tag$ !== newStartVnode.$tag$) {
|
|
2621
|
-
node = createElm(oldCh && oldCh[newStartIdx], newVNode2,
|
|
2665
|
+
node = createElm(oldCh && oldCh[newStartIdx], newVNode2, newStartIdx);
|
|
2622
2666
|
} else {
|
|
2623
2667
|
patch(elmToMove, newStartVnode, isInitialRender);
|
|
2624
2668
|
oldCh[idxInOld] = void 0;
|
|
@@ -5393,7 +5437,7 @@ function forceUpdate2() {
|
|
|
5393
5437
|
}
|
|
5394
5438
|
|
|
5395
5439
|
// src/hydrate/platform/hydrate-app.ts
|
|
5396
|
-
function hydrateApp(win2, opts, results, afterHydrate, resolve) {
|
|
5440
|
+
function hydrateApp(win2, opts, results, afterHydrate, resolve, abortController) {
|
|
5397
5441
|
const connectedElements = /* @__PURE__ */ new Set();
|
|
5398
5442
|
const createdElements = /* @__PURE__ */ new Set();
|
|
5399
5443
|
const waitingElements = /* @__PURE__ */ new Set();
|
|
@@ -5403,6 +5447,13 @@ function hydrateApp(win2, opts, results, afterHydrate, resolve) {
|
|
|
5403
5447
|
setScopedSSR(opts);
|
|
5404
5448
|
let tmrId;
|
|
5405
5449
|
let ranCompleted = false;
|
|
5450
|
+
const abortedPromise = new Promise((res) => {
|
|
5451
|
+
if (abortController.signal.aborted) {
|
|
5452
|
+
res();
|
|
5453
|
+
} else {
|
|
5454
|
+
abortController.signal.addEventListener("abort", () => res(), { once: true });
|
|
5455
|
+
}
|
|
5456
|
+
});
|
|
5406
5457
|
function hydratedComplete() {
|
|
5407
5458
|
globalThis.clearTimeout(tmrId);
|
|
5408
5459
|
createdElements.clear();
|
|
@@ -5424,6 +5475,7 @@ function hydrateApp(win2, opts, results, afterHydrate, resolve) {
|
|
|
5424
5475
|
}
|
|
5425
5476
|
function hydratedError(err2) {
|
|
5426
5477
|
renderCatchError(opts, results, err2);
|
|
5478
|
+
abortController.abort();
|
|
5427
5479
|
hydratedComplete();
|
|
5428
5480
|
}
|
|
5429
5481
|
function timeoutExceeded() {
|
|
@@ -5469,7 +5521,7 @@ function hydrateApp(win2, opts, results, afterHydrate, resolve) {
|
|
|
5469
5521
|
if (isValidComponent(elm, opts) && results.hydratedCount < opts.maxHydrateCount) {
|
|
5470
5522
|
if (!connectedElements.has(elm) && shouldHydrate(elm)) {
|
|
5471
5523
|
connectedElements.add(elm);
|
|
5472
|
-
return hydrateComponent.call(elm, win2, results, elm.nodeName, elm, waitingElements);
|
|
5524
|
+
return hydrateComponent.call(elm, win2, results, elm.nodeName, elm, waitingElements, abortedPromise);
|
|
5473
5525
|
}
|
|
5474
5526
|
}
|
|
5475
5527
|
return resolved2;
|
|
@@ -5499,7 +5551,7 @@ function hydrateApp(win2, opts, results, afterHydrate, resolve) {
|
|
|
5499
5551
|
hydratedError(e);
|
|
5500
5552
|
}
|
|
5501
5553
|
}
|
|
5502
|
-
async function hydrateComponent(win2, results, tagName, elm, waitingElements) {
|
|
5554
|
+
async function hydrateComponent(win2, results, tagName, elm, waitingElements, aborted) {
|
|
5503
5555
|
tagName = tagName.toLowerCase();
|
|
5504
5556
|
const Cstr = loadModule(
|
|
5505
5557
|
{
|
|
@@ -5515,17 +5567,19 @@ async function hydrateComponent(win2, results, tagName, elm, waitingElements) {
|
|
|
5515
5567
|
addHostEventListeners(this, hostRef, cmpMeta.$listeners$);
|
|
5516
5568
|
try {
|
|
5517
5569
|
connectedCallback(elm);
|
|
5518
|
-
await elm.componentOnReady();
|
|
5519
|
-
|
|
5520
|
-
|
|
5521
|
-
|
|
5522
|
-
|
|
5523
|
-
results.components.
|
|
5524
|
-
|
|
5525
|
-
|
|
5526
|
-
|
|
5527
|
-
|
|
5528
|
-
|
|
5570
|
+
const wasAborted = await Promise.race([elm.componentOnReady().then(() => false), aborted.then(() => true)]);
|
|
5571
|
+
if (!wasAborted) {
|
|
5572
|
+
results.hydratedCount++;
|
|
5573
|
+
const ref = getHostRef(elm);
|
|
5574
|
+
const modeName = !(ref == null ? void 0 : ref.$modeName$) ? "$" : ref == null ? void 0 : ref.$modeName$;
|
|
5575
|
+
if (!results.components.some((c) => c.tag === tagName && c.mode === modeName)) {
|
|
5576
|
+
results.components.push({
|
|
5577
|
+
tag: tagName,
|
|
5578
|
+
mode: modeName,
|
|
5579
|
+
count: 0,
|
|
5580
|
+
depth: -1
|
|
5581
|
+
});
|
|
5582
|
+
}
|
|
5529
5583
|
}
|
|
5530
5584
|
} catch (e) {
|
|
5531
5585
|
win2.console.error(e);
|
|
@@ -5783,6 +5837,9 @@ var setScopedSSR = (opts) => {
|
|
|
5783
5837
|
var needsScopedSSR = () => scopedSSR;
|
|
5784
5838
|
var scopedSSR = false;
|
|
5785
5839
|
|
|
5840
|
+
const win$1 = typeof window !== 'undefined' ? window : undefined;
|
|
5841
|
+
const doc = typeof document !== 'undefined' ? document : undefined;
|
|
5842
|
+
|
|
5786
5843
|
/**
|
|
5787
5844
|
* Returns `true` if the direction resolves to `rtl` for the given element.
|
|
5788
5845
|
*
|
|
@@ -5977,6 +6034,44 @@ const addEventListener$1 = (el, eventName, callback, opts) => {
|
|
|
5977
6034
|
const removeEventListener = (el, eventName, callback, opts) => {
|
|
5978
6035
|
return el.removeEventListener(eventName, callback, opts);
|
|
5979
6036
|
};
|
|
6037
|
+
/**
|
|
6038
|
+
* Calls back when a CSS custom property that resolves to a length changes,
|
|
6039
|
+
* which no event covers. The probe inherits the property from `hostEl` and
|
|
6040
|
+
* uses it as its height, turning a property change into a size change that
|
|
6041
|
+
* `ResizeObserver` can detect.
|
|
6042
|
+
*
|
|
6043
|
+
* The callback receives the probe's height. For length values, this matches
|
|
6044
|
+
* the resolved property value. For other values, such as `fit-content`, the
|
|
6045
|
+
* probe remains at zero, so the value only signals that the property changed.
|
|
6046
|
+
* Percentages resolve against the probe's containing block, not the element
|
|
6047
|
+
* where the property is ultimately used.
|
|
6048
|
+
*
|
|
6049
|
+
* Pass `initialValue` when the caller has already read the property so that
|
|
6050
|
+
* changes occurring before the observer's first delivery are not missed.
|
|
6051
|
+
* Without it, the first delivery establishes the baseline.
|
|
6052
|
+
*/
|
|
6053
|
+
const onCustomPropertyChange = (hostEl, property, callback, initialValue) => {
|
|
6054
|
+
const doc = win$1?.document;
|
|
6055
|
+
if (!doc || !hostEl || typeof ResizeObserver === 'undefined') {
|
|
6056
|
+
return () => undefined;
|
|
6057
|
+
}
|
|
6058
|
+
const probe = doc.createElement('div');
|
|
6059
|
+
probe.style.cssText = `position:fixed;visibility:hidden;pointer-events:none;top:0;left:0;width:0;height:var(${property},0px);`;
|
|
6060
|
+
hostEl.appendChild(probe);
|
|
6061
|
+
let lastHeight = initialValue;
|
|
6062
|
+
const observer = new ResizeObserver((entries) => {
|
|
6063
|
+
const { height } = entries[0].contentRect;
|
|
6064
|
+
if (lastHeight !== undefined && height !== lastHeight) {
|
|
6065
|
+
callback(height);
|
|
6066
|
+
}
|
|
6067
|
+
lastHeight = height;
|
|
6068
|
+
});
|
|
6069
|
+
observer.observe(probe);
|
|
6070
|
+
return () => {
|
|
6071
|
+
observer.disconnect();
|
|
6072
|
+
probe.remove();
|
|
6073
|
+
};
|
|
6074
|
+
};
|
|
5980
6075
|
/**
|
|
5981
6076
|
* Gets the root context of a shadow dom element
|
|
5982
6077
|
* On newer browsers this will be the shadowRoot,
|
|
@@ -6857,9 +6952,6 @@ class AccordionGroup {
|
|
|
6857
6952
|
}; }
|
|
6858
6953
|
}
|
|
6859
6954
|
|
|
6860
|
-
const win$1 = typeof window !== 'undefined' ? window : undefined;
|
|
6861
|
-
const doc = typeof document !== 'undefined' ? document : undefined;
|
|
6862
|
-
|
|
6863
6955
|
const getCapacitor = () => {
|
|
6864
6956
|
if (win$1 !== undefined) {
|
|
6865
6957
|
return win$1.Capacitor;
|
|
@@ -8719,6 +8811,40 @@ const safeCall = (handler, arg) => {
|
|
|
8719
8811
|
}
|
|
8720
8812
|
return undefined;
|
|
8721
8813
|
};
|
|
8814
|
+
/**
|
|
8815
|
+
* `--width` and `--height` values that leave an overlay spanning the viewport
|
|
8816
|
+
* on that axis, so it reaches both edges. An empty value means the property
|
|
8817
|
+
* was never overridden.
|
|
8818
|
+
*/
|
|
8819
|
+
const FULLSCREEN_SIZES = ['', '100%', '100vw', '100vh', '100dvw', '100dvh', '100svw', '100svh'];
|
|
8820
|
+
/**
|
|
8821
|
+
* `--width` and `--height` values that size an overlay to its content, leaving
|
|
8822
|
+
* the rendered size dependent on the content and on `--max-width` or
|
|
8823
|
+
* `--max-height`.
|
|
8824
|
+
*/
|
|
8825
|
+
const CONTENT_SIZES = ['auto', 'fit-content', 'min-content', 'max-content'];
|
|
8826
|
+
/**
|
|
8827
|
+
* How an overlay's `--width` or `--height` determines its used size:
|
|
8828
|
+
*
|
|
8829
|
+
* `fullscreen` spans the viewport on that axis. `content` depends on the
|
|
8830
|
+
* overlay's content, so its used size is not known until layout. `definite`
|
|
8831
|
+
* resolves independently of the overlay's content size.
|
|
8832
|
+
*
|
|
8833
|
+
* Values are lowercased because CSS keywords are case-insensitive, while a
|
|
8834
|
+
* custom property preserves the case in which it was authored. Content values
|
|
8835
|
+
* are matched as a suffix so vendor-prefixed values such as `-moz-fit-content`
|
|
8836
|
+
* are recognized.
|
|
8837
|
+
*/
|
|
8838
|
+
const getOverlaySizeType = (size) => {
|
|
8839
|
+
const value = size.trim().toLowerCase();
|
|
8840
|
+
if (FULLSCREEN_SIZES.includes(value)) {
|
|
8841
|
+
return 'fullscreen';
|
|
8842
|
+
}
|
|
8843
|
+
if (CONTENT_SIZES.some((keyword) => value.endsWith(keyword))) {
|
|
8844
|
+
return 'content';
|
|
8845
|
+
}
|
|
8846
|
+
return 'definite';
|
|
8847
|
+
};
|
|
8722
8848
|
const BACKDROP = 'backdrop';
|
|
8723
8849
|
const GESTURE = 'gesture';
|
|
8724
8850
|
const OVERLAY_GESTURE_PRIORITY = 39;
|
|
@@ -13598,6 +13724,10 @@ class Content {
|
|
|
13598
13724
|
data: undefined,
|
|
13599
13725
|
isScrolling: true,
|
|
13600
13726
|
};
|
|
13727
|
+
/**
|
|
13728
|
+
* Whether the host is sized to its content.
|
|
13729
|
+
*/
|
|
13730
|
+
this.sizeToContent = false;
|
|
13601
13731
|
/**
|
|
13602
13732
|
* If `true`, the content will scroll behind the headers
|
|
13603
13733
|
* and footers. This effect can easily be seen by setting the toolbar
|
|
@@ -13631,6 +13761,7 @@ class Content {
|
|
|
13631
13761
|
}
|
|
13632
13762
|
componentWillLoad() {
|
|
13633
13763
|
this.inheritedAttributes = inheritAriaAttributes(this.el);
|
|
13764
|
+
this.sizeToContent = this.readSizeToContent();
|
|
13634
13765
|
}
|
|
13635
13766
|
connectedCallback() {
|
|
13636
13767
|
this.isMainContent = this.el.closest('ion-menu, ion-popover, ion-modal') === null;
|
|
@@ -13670,6 +13801,7 @@ class Content {
|
|
|
13670
13801
|
}
|
|
13671
13802
|
// Re-observe on reattach, since componentDidLoad only fires once.
|
|
13672
13803
|
this.setupFullscreenResizeObserver();
|
|
13804
|
+
this.updateSizeToContent();
|
|
13673
13805
|
}
|
|
13674
13806
|
componentDidLoad() {
|
|
13675
13807
|
// The custom elements build assigns fullscreen after connectedCallback.
|
|
@@ -13709,6 +13841,16 @@ class Content {
|
|
|
13709
13841
|
return;
|
|
13710
13842
|
}
|
|
13711
13843
|
}
|
|
13844
|
+
/**
|
|
13845
|
+
* Picks up an overlay that is no longer sized the way the last render
|
|
13846
|
+
* assumed, re-rendering only when the answer changes. Read in a `readTask`
|
|
13847
|
+
* because resolving the custom property forces a style recalculation.
|
|
13848
|
+
*/
|
|
13849
|
+
updateSizeToContent() {
|
|
13850
|
+
readTask(() => {
|
|
13851
|
+
this.sizeToContent = this.readSizeToContent();
|
|
13852
|
+
});
|
|
13853
|
+
}
|
|
13712
13854
|
destroyFullscreenResizeObserver() {
|
|
13713
13855
|
if (this.fullscreenResizeObserver !== undefined) {
|
|
13714
13856
|
this.fullscreenResizeObserver.disconnect();
|
|
@@ -13755,16 +13897,42 @@ class Content {
|
|
|
13755
13897
|
const mode = getIonMode$1(this);
|
|
13756
13898
|
return forceOverscroll === undefined ? mode === 'ios' && isPlatform('ios') : forceOverscroll;
|
|
13757
13899
|
}
|
|
13900
|
+
/**
|
|
13901
|
+
* Reads whether to size the component to its content height. Forces a style
|
|
13902
|
+
* recalculation, so it belongs in a read task or before the first render.
|
|
13903
|
+
*
|
|
13904
|
+
* This applies inside popovers and modals with a content-based `--height`,
|
|
13905
|
+
* where the overlay does not provide the content with a definite height
|
|
13906
|
+
* to fill.
|
|
13907
|
+
*
|
|
13908
|
+
* Only `--height` is consulted. Styling the wrapper directly, such as
|
|
13909
|
+
* `ion-modal::part(content) { height: fit-content; }`, does not change
|
|
13910
|
+
* `--height` and therefore cannot be observed. `--height` is the only
|
|
13911
|
+
* supported way to opt into content-based sizing.
|
|
13912
|
+
*/
|
|
13913
|
+
readSizeToContent() {
|
|
13914
|
+
if (hostContext('ion-popover', this.el)) {
|
|
13915
|
+
return true;
|
|
13916
|
+
}
|
|
13917
|
+
const modal = this.el.closest('ion-modal');
|
|
13918
|
+
if (modal === null) {
|
|
13919
|
+
return false;
|
|
13920
|
+
}
|
|
13921
|
+
const height = getComputedStyle(modal).getPropertyValue('--height');
|
|
13922
|
+
return getOverlaySizeType(height) === 'content';
|
|
13923
|
+
}
|
|
13758
13924
|
resize() {
|
|
13759
13925
|
}
|
|
13760
13926
|
/**
|
|
13761
|
-
*
|
|
13762
|
-
*
|
|
13763
|
-
*
|
|
13927
|
+
* Recalculates the content dimensions and whether it should size itself to
|
|
13928
|
+
* its content. Called by overlays when something they own changes, such as
|
|
13929
|
+
* a header finishing its render or `--height` being updated.
|
|
13930
|
+
*
|
|
13764
13931
|
* @internal
|
|
13765
13932
|
*/
|
|
13766
13933
|
async recalculateDimensions() {
|
|
13767
13934
|
readTask(() => this.readDimensions());
|
|
13935
|
+
this.updateSizeToContent();
|
|
13768
13936
|
}
|
|
13769
13937
|
readDimensions() {
|
|
13770
13938
|
const page = getPageElement(this.el);
|
|
@@ -13934,21 +14102,21 @@ class Content {
|
|
|
13934
14102
|
const forceOverscroll = this.shouldForceOverscroll();
|
|
13935
14103
|
const transitionShadow = mode === 'ios';
|
|
13936
14104
|
this.resize();
|
|
13937
|
-
return (hAsync(Host, { key: '
|
|
14105
|
+
return (hAsync(Host, { key: 'e1013621096729354ef92915af52dd823e69fdff', role: isMainContent ? 'main' : undefined, class: createColorClasses$1(this.color, {
|
|
13938
14106
|
[mode]: true,
|
|
13939
14107
|
'content-fullscreen': this.fullscreen,
|
|
13940
|
-
'content-sizing':
|
|
14108
|
+
'content-sizing': this.sizeToContent,
|
|
13941
14109
|
overscroll: forceOverscroll,
|
|
13942
14110
|
[`content-${rtl}`]: true,
|
|
13943
14111
|
}), style: {
|
|
13944
14112
|
'--offset-top': `${this.cTop}px`,
|
|
13945
14113
|
'--offset-bottom': `${this.cBottom}px`,
|
|
13946
|
-
}, ...inheritedAttributes }, hAsync("div", { key: '
|
|
14114
|
+
}, ...inheritedAttributes }, hAsync("div", { key: '3d8649b164d6324beaa1bc50e1d204ad06c2ec1a', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? hAsync("slot", { name: "fixed" }) : null, hAsync("div", { key: 'dd2d3bed8690b4f5027a43f5ec60e7e7df18106d', class: {
|
|
13947
14115
|
'inner-scroll': true,
|
|
13948
14116
|
'scroll-x': scrollX,
|
|
13949
14117
|
'scroll-y': scrollY,
|
|
13950
14118
|
overscroll: (scrollX || scrollY) && forceOverscroll,
|
|
13951
|
-
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, hAsync("slot", { key: '
|
|
14119
|
+
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, hAsync("slot", { key: 'dc3d4584d9e9afd43699525a619b8e873078fbbf' })), transitionShadow ? (hAsync("div", { class: "transition-effect" }, hAsync("div", { class: "transition-cover" }), hAsync("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? hAsync("slot", { name: "fixed" }) : null));
|
|
13952
14120
|
}
|
|
13953
14121
|
get el() { return getElement(this); }
|
|
13954
14122
|
static get watchers() { return {
|
|
@@ -13968,6 +14136,7 @@ class Content {
|
|
|
13968
14136
|
"scrollX": [4, "scroll-x"],
|
|
13969
14137
|
"scrollY": [4, "scroll-y"],
|
|
13970
14138
|
"scrollEvents": [4, "scroll-events"],
|
|
14139
|
+
"sizeToContent": [32],
|
|
13971
14140
|
"recalculateDimensions": [64],
|
|
13972
14141
|
"getScrollElement": [64],
|
|
13973
14142
|
"getBackgroundElement": [64],
|
|
@@ -24976,6 +25145,12 @@ const setCardStatusBarDefault = (defaultStyle = Style.Default) => {
|
|
|
24976
25145
|
}
|
|
24977
25146
|
StatusBar.setStyle({ style: defaultStyle });
|
|
24978
25147
|
};
|
|
25148
|
+
/**
|
|
25149
|
+
* Calls back when the modal's resolved `--height` changes.
|
|
25150
|
+
*/
|
|
25151
|
+
const onModalHeightChange = (hostEl, callback) => {
|
|
25152
|
+
return onCustomPropertyChange(hostEl, '--height', () => callback());
|
|
25153
|
+
};
|
|
24979
25154
|
|
|
24980
25155
|
/**
|
|
24981
25156
|
* Swiping is only possible when the content is scrolled to the top, so that we
|
|
@@ -26503,40 +26678,12 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
26503
26678
|
};
|
|
26504
26679
|
};
|
|
26505
26680
|
|
|
26506
|
-
/**
|
|
26507
|
-
* These thresholds match the SCSS media query breakpoints in modal.vars.scss
|
|
26508
|
-
* that trigger the centered dialog layout (non-fullscreen modal).
|
|
26509
|
-
*
|
|
26510
|
-
* SCSS defines two height breakpoints: $modal-inset-min-height-small (600px)
|
|
26511
|
-
* and $modal-inset-min-height-large (768px). We use the smaller one because
|
|
26512
|
-
* that's the threshold where the modal transitions from fullscreen to centered
|
|
26513
|
-
* dialog — the larger breakpoint only increases the dialog's height.
|
|
26514
|
-
*/
|
|
26515
|
-
const MODAL_INSET_MIN_WIDTH = 768;
|
|
26516
|
-
const MODAL_INSET_MIN_HEIGHT = 600;
|
|
26517
26681
|
const EDGE_THRESHOLD = 5;
|
|
26518
|
-
/**
|
|
26519
|
-
* CSS values for `--width` / `--height` that are treated as fullscreen
|
|
26520
|
-
* (modal touches the corresponding screen edges). Empty string means the
|
|
26521
|
-
* property was not overridden. See `hasCustomModalDimensions()`.
|
|
26522
|
-
*/
|
|
26523
|
-
const FULLSCREEN_SIZE_VALUES = new Set(['', '100%', '100vw', '100vh', '100dvw', '100dvh', '100svw', '100svh']);
|
|
26524
26682
|
/**
|
|
26525
26683
|
* Cache for resolved root safe-area-top value, invalidated once per frame.
|
|
26526
26684
|
*/
|
|
26527
26685
|
let cachedRootSafeAreaTop = null;
|
|
26528
26686
|
let cacheInvalidationScheduled$1 = false;
|
|
26529
|
-
/**
|
|
26530
|
-
* Determines if the current viewport meets the CSS media query conditions
|
|
26531
|
-
* that cause regular modals to render as centered dialogs instead of fullscreen.
|
|
26532
|
-
* Matches: @media (min-width: 768px) and (min-height: 600px)
|
|
26533
|
-
*/
|
|
26534
|
-
const isCenteredDialogViewport = () => {
|
|
26535
|
-
if (!win$1)
|
|
26536
|
-
return false;
|
|
26537
|
-
return win$1.matchMedia(`(min-width: ${MODAL_INSET_MIN_WIDTH}px) and (min-height: ${MODAL_INSET_MIN_HEIGHT}px)`)
|
|
26538
|
-
.matches;
|
|
26539
|
-
};
|
|
26540
26687
|
/**
|
|
26541
26688
|
* Resolves the current root --ion-safe-area-top value to pixels.
|
|
26542
26689
|
* Uses a temporary element because getComputedStyle on :root returns
|
|
@@ -26570,55 +26717,64 @@ const getRootSafeAreaTop = () => {
|
|
|
26570
26717
|
return value;
|
|
26571
26718
|
};
|
|
26572
26719
|
/**
|
|
26573
|
-
* Calls back when the resolved root `--ion-safe-area-top` changes
|
|
26574
|
-
*
|
|
26575
|
-
*
|
|
26720
|
+
* Calls back when the resolved root `--ion-safe-area-top` changes. The value
|
|
26721
|
+
* the caller already applied is passed as the baseline, so a change between
|
|
26722
|
+
* that read and the observer starting is still reported.
|
|
26576
26723
|
*/
|
|
26577
26724
|
const onRootSafeAreaTopChange = (callback) => {
|
|
26578
|
-
|
|
26579
|
-
if (!doc?.body || typeof ResizeObserver === 'undefined') {
|
|
26580
|
-
return () => undefined;
|
|
26581
|
-
}
|
|
26582
|
-
const probe = doc.createElement('div');
|
|
26583
|
-
probe.style.cssText =
|
|
26584
|
-
'position:fixed;visibility:hidden;pointer-events:none;top:0;left:0;width:0;' +
|
|
26585
|
-
'height:var(--ion-safe-area-top,0px);';
|
|
26586
|
-
doc.body.appendChild(probe);
|
|
26587
|
-
/**
|
|
26588
|
-
* Seeded with the value the caller has already applied, so a change that
|
|
26589
|
-
* lands before the observer's first delivery still gets reported. Comparing
|
|
26590
|
-
* against an unset value instead would consume that first delivery and treat
|
|
26591
|
-
* the new inset as the baseline.
|
|
26592
|
-
*/
|
|
26593
|
-
let lastHeight = getRootSafeAreaTop();
|
|
26594
|
-
const observer = new ResizeObserver((entries) => {
|
|
26595
|
-
const { height } = entries[0].contentRect;
|
|
26596
|
-
if (height !== lastHeight) {
|
|
26597
|
-
lastHeight = height;
|
|
26598
|
-
callback(height);
|
|
26599
|
-
}
|
|
26600
|
-
});
|
|
26601
|
-
observer.observe(probe);
|
|
26602
|
-
return () => {
|
|
26603
|
-
observer.disconnect();
|
|
26604
|
-
probe.remove();
|
|
26605
|
-
};
|
|
26725
|
+
return onCustomPropertyChange(win$1?.document?.body, '--ion-safe-area-top', callback, getRootSafeAreaTop());
|
|
26606
26726
|
};
|
|
26607
26727
|
/**
|
|
26608
|
-
*
|
|
26609
|
-
*
|
|
26610
|
-
*
|
|
26728
|
+
* Determines which viewport axes the modal spans so safe-area requirements
|
|
26729
|
+
* can be predicted independently for each axis.
|
|
26730
|
+
*
|
|
26731
|
+
* A modal that spans an axis reaches both edges on that axis and needs the
|
|
26732
|
+
* corresponding safe-area insets. A modal that does not span an axis reaches
|
|
26733
|
+
* neither edge on that axis.
|
|
26611
26734
|
*
|
|
26612
|
-
*
|
|
26613
|
-
*
|
|
26614
|
-
*
|
|
26615
|
-
*
|
|
26735
|
+
* When both `--width` and `--height` are `fullscreen`, coverage can be
|
|
26736
|
+
* determined directly. Otherwise, coverage is based on the rendered wrapper,
|
|
26737
|
+
* including cases where content sizing or `--max-height` causes the modal
|
|
26738
|
+
* to reach the viewport.
|
|
26616
26739
|
*/
|
|
26617
|
-
const
|
|
26740
|
+
const getModalCoveredAxes = (hostEl) => {
|
|
26618
26741
|
const styles = getComputedStyle(hostEl);
|
|
26619
|
-
const width = styles.getPropertyValue('--width')
|
|
26620
|
-
const height = styles.getPropertyValue('--height')
|
|
26621
|
-
|
|
26742
|
+
const width = getOverlaySizeType(styles.getPropertyValue('--width'));
|
|
26743
|
+
const height = getOverlaySizeType(styles.getPropertyValue('--height'));
|
|
26744
|
+
if (width === 'fullscreen' && height === 'fullscreen') {
|
|
26745
|
+
return { vertical: true, horizontal: true };
|
|
26746
|
+
}
|
|
26747
|
+
return measureCoveredAxes(hostEl);
|
|
26748
|
+
};
|
|
26749
|
+
/**
|
|
26750
|
+
* Measures the modal wrapper to determine whether it spans the viewport
|
|
26751
|
+
* on each axis.
|
|
26752
|
+
*
|
|
26753
|
+
* The wrapper has no box while the modal is hidden, so `overlay-hidden`
|
|
26754
|
+
* is temporarily removed to allow the wrapper to be measured. The class
|
|
26755
|
+
* is restored in the same task before the browser can paint.
|
|
26756
|
+
*
|
|
26757
|
+
* Only the wrapper's size is measured. Its position is affected by the
|
|
26758
|
+
* enter animation, which initially translates it by its own height, while
|
|
26759
|
+
* the translation does not affect its measured size.
|
|
26760
|
+
*/
|
|
26761
|
+
const measureCoveredAxes = (hostEl) => {
|
|
26762
|
+
const wrapperEl = hostEl.shadowRoot?.querySelector('.modal-wrapper');
|
|
26763
|
+
if (wrapperEl == null || win$1 === undefined) {
|
|
26764
|
+
return { vertical: false, horizontal: false };
|
|
26765
|
+
}
|
|
26766
|
+
const wasHidden = hostEl.classList.contains('overlay-hidden');
|
|
26767
|
+
if (wasHidden) {
|
|
26768
|
+
hostEl.classList.remove('overlay-hidden');
|
|
26769
|
+
}
|
|
26770
|
+
const { width, height } = wrapperEl.getBoundingClientRect();
|
|
26771
|
+
if (wasHidden) {
|
|
26772
|
+
hostEl.classList.add('overlay-hidden');
|
|
26773
|
+
}
|
|
26774
|
+
return {
|
|
26775
|
+
vertical: height >= win$1.innerHeight - EDGE_THRESHOLD,
|
|
26776
|
+
horizontal: width >= win$1.innerWidth - EDGE_THRESHOLD,
|
|
26777
|
+
};
|
|
26622
26778
|
};
|
|
26623
26779
|
/**
|
|
26624
26780
|
* Returns the initial safe-area configuration based on modal type.
|
|
@@ -26652,26 +26808,23 @@ const getInitialSafeAreaConfig = (context) => {
|
|
|
26652
26808
|
right: '0px',
|
|
26653
26809
|
};
|
|
26654
26810
|
}
|
|
26655
|
-
|
|
26656
|
-
|
|
26657
|
-
|
|
26658
|
-
|
|
26659
|
-
|
|
26660
|
-
|
|
26661
|
-
|
|
26662
|
-
|
|
26663
|
-
|
|
26664
|
-
|
|
26665
|
-
|
|
26666
|
-
|
|
26667
|
-
};
|
|
26668
|
-
}
|
|
26669
|
-
// Fullscreen modals on phone - inherit all safe areas
|
|
26811
|
+
/**
|
|
26812
|
+
* Each axis is evaluated independently because a modal can span one axis
|
|
26813
|
+
* without spanning the other. This allows the initial safe-area configuration
|
|
26814
|
+
* to match the modal's expected dimensions and avoids correcting an incorrect
|
|
26815
|
+
* pair of insets after presentation.
|
|
26816
|
+
*
|
|
26817
|
+
* A modal can span the horizontal axis while remaining inset vertically, or
|
|
26818
|
+
* span the vertical axis while remaining inset horizontally. Wide viewports
|
|
26819
|
+
* can also render regular modals as centered dialogs, while content-sized
|
|
26820
|
+
* modals may still be clamped to the viewport.
|
|
26821
|
+
*/
|
|
26822
|
+
const { vertical, horizontal } = context.coveredAxes ?? { vertical: true, horizontal: true };
|
|
26670
26823
|
return {
|
|
26671
|
-
top: 'inherit',
|
|
26672
|
-
bottom: 'inherit',
|
|
26673
|
-
left: 'inherit',
|
|
26674
|
-
right: 'inherit',
|
|
26824
|
+
top: vertical ? 'inherit' : '0px',
|
|
26825
|
+
bottom: vertical ? 'inherit' : '0px',
|
|
26826
|
+
left: horizontal ? 'inherit' : '0px',
|
|
26827
|
+
right: horizontal ? 'inherit' : '0px',
|
|
26675
26828
|
};
|
|
26676
26829
|
};
|
|
26677
26830
|
/**
|
|
@@ -26723,9 +26876,9 @@ const clearSafeAreaOverrides = (hostEl) => {
|
|
|
26723
26876
|
hostEl.style.removeProperty('--ion-safe-area-right');
|
|
26724
26877
|
};
|
|
26725
26878
|
|
|
26726
|
-
const modalIosCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:
|
|
26879
|
+
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}`;
|
|
26727
26880
|
|
|
26728
|
-
const modalMdCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:
|
|
26881
|
+
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}`;
|
|
26729
26882
|
|
|
26730
26883
|
// TODO(FW-2832): types
|
|
26731
26884
|
/**
|
|
@@ -27763,7 +27916,7 @@ class Modal {
|
|
|
27763
27916
|
/**
|
|
27764
27917
|
* Creates the context object for safe-area utilities.
|
|
27765
27918
|
*
|
|
27766
|
-
* `
|
|
27919
|
+
* `coveredAxes` is only set by `setInitialSafeAreaOverrides()`
|
|
27767
27920
|
* because it is only read by `getInitialSafeAreaConfig()`. Other callers
|
|
27768
27921
|
* (resize handler, post-animation update, fullscreen-padding apply) would
|
|
27769
27922
|
* pay a `getComputedStyle()` cost for a value they never consult.
|
|
@@ -27777,6 +27930,26 @@ class Modal {
|
|
|
27777
27930
|
currentBreakpoint: this.currentBreakpoint,
|
|
27778
27931
|
};
|
|
27779
27932
|
}
|
|
27933
|
+
/**
|
|
27934
|
+
* Keeps the content's sizing in sync with `--height`. The content reads the
|
|
27935
|
+
* property to determine whether it should size itself to its content, and
|
|
27936
|
+
* changes to `--height` on an ancestor or the root can change that behavior
|
|
27937
|
+
* without changing the modal itself.
|
|
27938
|
+
*/
|
|
27939
|
+
watchHeightForContent() {
|
|
27940
|
+
/**
|
|
27941
|
+
* A sheet's height comes from its breakpoints, so its content never sizes
|
|
27942
|
+
* itself to `--height`. Watching it would cause the drag to recalculate on
|
|
27943
|
+
* every frame.
|
|
27944
|
+
*/
|
|
27945
|
+
if (this.isSheetModal) {
|
|
27946
|
+
return;
|
|
27947
|
+
}
|
|
27948
|
+
this.unsubscribeHeightChange?.();
|
|
27949
|
+
this.unsubscribeHeightChange = onModalHeightChange(this.el, () => {
|
|
27950
|
+
this.el.querySelectorAll('ion-content').forEach((contentEl) => contentEl.recalculateDimensions());
|
|
27951
|
+
});
|
|
27952
|
+
}
|
|
27780
27953
|
/**
|
|
27781
27954
|
* Sets initial safe-area overrides before modal animation.
|
|
27782
27955
|
* Called in present() before animation starts.
|
|
@@ -27790,10 +27963,11 @@ class Modal {
|
|
|
27790
27963
|
setInitialSafeAreaOverrides() {
|
|
27791
27964
|
const context = {
|
|
27792
27965
|
...this.getSafeAreaContext(),
|
|
27793
|
-
|
|
27966
|
+
coveredAxes: getModalCoveredAxes(this.el),
|
|
27794
27967
|
};
|
|
27795
27968
|
const safeAreaConfig = getInitialSafeAreaConfig(context);
|
|
27796
27969
|
applySafeAreaOverrides(this.el, safeAreaConfig);
|
|
27970
|
+
this.watchHeightForContent();
|
|
27797
27971
|
// Set the internal offset property with the resolved root safe-area-top value
|
|
27798
27972
|
if (context.isSheetModal) {
|
|
27799
27973
|
this.updateSheetOffsetTop();
|
|
@@ -27913,6 +28087,8 @@ class Modal {
|
|
|
27913
28087
|
clearSafeAreaOverrides(this.el);
|
|
27914
28088
|
this.unsubscribeRootSafeAreaTop?.();
|
|
27915
28089
|
this.unsubscribeRootSafeAreaTop = undefined;
|
|
28090
|
+
this.unsubscribeHeightChange?.();
|
|
28091
|
+
this.unsubscribeHeightChange = undefined;
|
|
27916
28092
|
// Remove internal sheet offset property
|
|
27917
28093
|
this.el.style.removeProperty('--ion-modal-offset-top');
|
|
27918
28094
|
const { contentEl } = this.findContentAndFooter();
|
|
@@ -27950,7 +28126,7 @@ class Modal {
|
|
|
27950
28126
|
const isCardModal = presentingElement !== undefined && mode === 'ios';
|
|
27951
28127
|
const isHandleCycle = handleBehavior === 'cycle';
|
|
27952
28128
|
const isSheetModalWithHandle = isSheetModal && showHandle;
|
|
27953
|
-
return (hAsync(Host, { key: '
|
|
28129
|
+
return (hAsync(Host, { key: '17a95bd7722bac2344bea041aff97db17f55c0cf', "no-router": true,
|
|
27954
28130
|
// Allow the modal to be navigable when the handle is focusable
|
|
27955
28131
|
tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1, ...htmlAttributes, style: {
|
|
27956
28132
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
@@ -27963,7 +28139,7 @@ class Modal {
|
|
|
27963
28139
|
'overlay-hidden': true,
|
|
27964
28140
|
[FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false,
|
|
27965
28141
|
...getClassMap(this.cssClass),
|
|
27966
|
-
}, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, hAsync("ion-backdrop", { key: '
|
|
28142
|
+
}, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, hAsync("ion-backdrop", { key: '9dab1ef4771c0d847ba2be8672afbaa2748517f3', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && hAsync("div", { key: '64af7ed1c5f552b61fc4b9387b926acc76c8a99a', class: "modal-shadow" }), hAsync("div", { key: '7e76d77d5b2e8f0467bb793facf5aa86f8d01bbe',
|
|
27967
28143
|
/*
|
|
27968
28144
|
role and aria-modal must be used on the
|
|
27969
28145
|
same element. They must also be set inside the
|
|
@@ -27976,9 +28152,9 @@ class Modal {
|
|
|
27976
28152
|
without the tabindex focus() would be a no-op and screen readers
|
|
27977
28153
|
may not properly announce the dialog and its content when it opens.
|
|
27978
28154
|
*/
|
|
27979
|
-
role: "dialog", ...inheritedAttributes, "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }, showHandle && (hAsync("button", { key: '
|
|
28155
|
+
role: "dialog", ...inheritedAttributes, "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }, showHandle && (hAsync("button", { key: '5efc0bb0a59adcc594ac48da9fd90e57908a7ffb', class: "modal-handle",
|
|
27980
28156
|
// Prevents the handle from receiving keyboard focus when it does not cycle
|
|
27981
|
-
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) })), hAsync("slot", { key: '
|
|
28157
|
+
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) })), hAsync("slot", { key: '6175fcd0b39c086b4e9eb9e96c4d631c2a86774b', onSlotchange: this.onSlotChange }))));
|
|
27982
28158
|
}
|
|
27983
28159
|
get el() { return getElement(this); }
|
|
27984
28160
|
static get watchers() { return {
|
|
@@ -43051,7 +43227,7 @@ exports.hydrateApp = hydrateApp;
|
|
|
43051
43227
|
|
|
43052
43228
|
|
|
43053
43229
|
/*hydrateAppClosure end*/
|
|
43054
|
-
hydrateApp(window, $stencilHydrateOpts, $stencilHydrateResults, $stencilAfterHydrate, $stencilHydrateResolve);
|
|
43230
|
+
hydrateApp(window, $stencilHydrateOpts, $stencilHydrateResults, $stencilAfterHydrate, $stencilHydrateResolve, $stencilAbortController);
|
|
43055
43231
|
}
|
|
43056
43232
|
|
|
43057
43233
|
hydrateAppClosure($stencilWindow);
|
|
@@ -43146,7 +43322,7 @@ var NAMESPACE = (
|
|
|
43146
43322
|
);
|
|
43147
43323
|
|
|
43148
43324
|
/*
|
|
43149
|
-
Stencil Hydrate Runner v4.
|
|
43325
|
+
Stencil Hydrate Runner v4.45.0 | MIT Licensed | https://stenciljs.com
|
|
43150
43326
|
*/
|
|
43151
43327
|
var __create = Object.create;
|
|
43152
43328
|
var __defProp = Object.defineProperty;
|
|
@@ -57293,11 +57469,14 @@ function resetWindow(win2) {
|
|
|
57293
57469
|
} catch (e) {
|
|
57294
57470
|
}
|
|
57295
57471
|
}
|
|
57296
|
-
|
|
57297
|
-
|
|
57298
|
-
|
|
57299
|
-
win2.
|
|
57300
|
-
win2.
|
|
57472
|
+
const windowDestroyed = () => {
|
|
57473
|
+
throw new Error("MockWindow was already destroyed");
|
|
57474
|
+
};
|
|
57475
|
+
win2.fetch = windowDestroyed;
|
|
57476
|
+
win2.Headers = windowDestroyed;
|
|
57477
|
+
win2.Request = windowDestroyed;
|
|
57478
|
+
win2.Response = windowDestroyed;
|
|
57479
|
+
win2.FetchError = windowDestroyed;
|
|
57301
57480
|
}
|
|
57302
57481
|
}
|
|
57303
57482
|
function resetWindowDimensions(win2) {
|