@ionic/core 9.0.4-nightly.20260914 → 9.0.4-nightly.20260916
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.js
CHANGED
|
@@ -7,6 +7,10 @@ var stream = require('stream');
|
|
|
7
7
|
|
|
8
8
|
const modeResolutionChain = [];
|
|
9
9
|
|
|
10
|
+
// captured here, at true module scope, before hydrateFactory shadows the
|
|
11
|
+
// AbortController identifier for component code below.
|
|
12
|
+
var $stencilNativeAbortController = AbortController;
|
|
13
|
+
|
|
10
14
|
function hydrateFactory($stencilWindow, $stencilHydrateOpts, $stencilHydrateResults, $stencilAfterHydrate, $stencilHydrateResolve) {
|
|
11
15
|
var globalThis = $stencilWindow;
|
|
12
16
|
var self = $stencilWindow;
|
|
@@ -98,8 +102,46 @@ function hydrateFactory($stencilWindow, $stencilHydrateOpts, $stencilHydrateResu
|
|
|
98
102
|
|
|
99
103
|
var fetch, FetchError, Headers, Request, Response;
|
|
100
104
|
|
|
105
|
+
// Aborted when the render times out or errors, so in-flight fetch() calls
|
|
106
|
+
// made by component code stop holding the render's window/results alive
|
|
107
|
+
// instead of running to completion against a torn-down window. See #6864.
|
|
108
|
+
var $stencilAbortController = new $stencilNativeAbortController();
|
|
109
|
+
|
|
110
|
+
// Any AbortController a component creates itself is transparently wired to
|
|
111
|
+
// cascade-abort when the render times out too, so component code using the
|
|
112
|
+
// standard AbortController convention for its own cancellable work (axios,
|
|
113
|
+
// aws-sdk v3, the mongodb driver, etc.) gets cancelled automatically.
|
|
114
|
+
var AbortController = function () {
|
|
115
|
+
var controller = new $stencilNativeAbortController();
|
|
116
|
+
$stencilAbortController.signal.addEventListener(
|
|
117
|
+
'abort',
|
|
118
|
+
function () {
|
|
119
|
+
controller.abort();
|
|
120
|
+
},
|
|
121
|
+
{ once: true },
|
|
122
|
+
);
|
|
123
|
+
return controller;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
function $stencilFetchSignal(callerSignal) {
|
|
127
|
+
if (!callerSignal) {
|
|
128
|
+
return $stencilAbortController.signal;
|
|
129
|
+
}
|
|
130
|
+
if (callerSignal.aborted || $stencilAbortController.signal.aborted) {
|
|
131
|
+
return callerSignal.aborted ? callerSignal : $stencilAbortController.signal;
|
|
132
|
+
}
|
|
133
|
+
var merged = new $stencilNativeAbortController();
|
|
134
|
+
var onAbort = function () { merged.abort(); };
|
|
135
|
+
callerSignal.addEventListener('abort', onAbort, { once: true });
|
|
136
|
+
$stencilAbortController.signal.addEventListener('abort', onAbort, { once: true });
|
|
137
|
+
return merged.signal;
|
|
138
|
+
}
|
|
139
|
+
|
|
101
140
|
if (typeof $stencilWindow.fetch === 'function') {
|
|
102
|
-
|
|
141
|
+
var $stencilRawFetch = $stencilWindow.fetch;
|
|
142
|
+
fetch = $stencilWindow.fetch = function(input, init) {
|
|
143
|
+
return $stencilRawFetch(input, Object.assign({}, init, { signal: $stencilFetchSignal(init && init.signal) }));
|
|
144
|
+
};
|
|
103
145
|
} else {
|
|
104
146
|
fetch = $stencilWindow.fetch = function() { throw new Error('fetch() is not implemented'); };
|
|
105
147
|
}
|
|
@@ -422,7 +464,7 @@ const appGlobalScript = initialize || (() => {});
|
|
|
422
464
|
const globalScripts = appGlobalScript;
|
|
423
465
|
|
|
424
466
|
/*
|
|
425
|
-
Stencil Hydrate Platform v4.
|
|
467
|
+
Stencil Hydrate Platform v4.45.0 | MIT Licensed | https://stenciljs.com
|
|
426
468
|
*/
|
|
427
469
|
var __create = Object.create;
|
|
428
470
|
var __defProp = Object.defineProperty;
|
|
@@ -1886,13 +1928,14 @@ var scopeSelector = (selector, scopeSelectorText, hostSelector, slotSelector) =>
|
|
|
1886
1928
|
}
|
|
1887
1929
|
}).join(", ");
|
|
1888
1930
|
};
|
|
1931
|
+
var isScopableAtRule = (selector) => selector.startsWith("@media") || selector.startsWith("@supports") || selector.startsWith("@page") || selector.startsWith("@document") || selector.startsWith("@layer");
|
|
1889
1932
|
var scopeSelectors = (cssText, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector) => {
|
|
1890
1933
|
return processRules(cssText, (rule) => {
|
|
1891
1934
|
let selector = rule.selector;
|
|
1892
1935
|
let content = rule.content;
|
|
1893
1936
|
if (rule.selector[0] !== "@") {
|
|
1894
1937
|
selector = scopeSelector(rule.selector, scopeSelectorText, hostSelector, slotSelector);
|
|
1895
|
-
} else if (
|
|
1938
|
+
} else if (isScopableAtRule(rule.selector)) {
|
|
1896
1939
|
content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector);
|
|
1897
1940
|
}
|
|
1898
1941
|
const cssRule = {
|
|
@@ -1971,15 +2014,16 @@ var scopeCss = (cssText, scopeId2, commentOriginalSelector) => {
|
|
|
1971
2014
|
rule.selector = placeholder + rule.selector;
|
|
1972
2015
|
return rule;
|
|
1973
2016
|
};
|
|
1974
|
-
|
|
2017
|
+
const commentSelectors = (input) => processRules(input, (rule) => {
|
|
1975
2018
|
if (rule.selector[0] !== "@") {
|
|
1976
2019
|
return processCommentedSelector(rule);
|
|
1977
|
-
}
|
|
1978
|
-
|
|
1979
|
-
|
|
2020
|
+
}
|
|
2021
|
+
if (isScopableAtRule(rule.selector)) {
|
|
2022
|
+
rule.content = commentSelectors(rule.content);
|
|
1980
2023
|
}
|
|
1981
2024
|
return rule;
|
|
1982
2025
|
});
|
|
2026
|
+
cssText = commentSelectors(cssText);
|
|
1983
2027
|
}
|
|
1984
2028
|
const scoped = scopeCssText(cssText, scopeId2, hostScopeId, slotScopeId);
|
|
1985
2029
|
cssText = [scoped.cssText, ...commentsWithHash].join("\n");
|
|
@@ -2620,7 +2664,7 @@ var updateChildren = (parentElm, oldCh, newVNode2, newCh, isInitialRender = fals
|
|
|
2620
2664
|
if (idxInOld >= 0) {
|
|
2621
2665
|
elmToMove = oldCh[idxInOld];
|
|
2622
2666
|
if (elmToMove.$tag$ !== newStartVnode.$tag$) {
|
|
2623
|
-
node = createElm(oldCh && oldCh[newStartIdx], newVNode2,
|
|
2667
|
+
node = createElm(oldCh && oldCh[newStartIdx], newVNode2, newStartIdx);
|
|
2624
2668
|
} else {
|
|
2625
2669
|
patch(elmToMove, newStartVnode, isInitialRender);
|
|
2626
2670
|
oldCh[idxInOld] = void 0;
|
|
@@ -5395,7 +5439,7 @@ function forceUpdate2() {
|
|
|
5395
5439
|
}
|
|
5396
5440
|
|
|
5397
5441
|
// src/hydrate/platform/hydrate-app.ts
|
|
5398
|
-
function hydrateApp(win2, opts, results, afterHydrate, resolve) {
|
|
5442
|
+
function hydrateApp(win2, opts, results, afterHydrate, resolve, abortController) {
|
|
5399
5443
|
const connectedElements = /* @__PURE__ */ new Set();
|
|
5400
5444
|
const createdElements = /* @__PURE__ */ new Set();
|
|
5401
5445
|
const waitingElements = /* @__PURE__ */ new Set();
|
|
@@ -5405,6 +5449,13 @@ function hydrateApp(win2, opts, results, afterHydrate, resolve) {
|
|
|
5405
5449
|
setScopedSSR(opts);
|
|
5406
5450
|
let tmrId;
|
|
5407
5451
|
let ranCompleted = false;
|
|
5452
|
+
const abortedPromise = new Promise((res) => {
|
|
5453
|
+
if (abortController.signal.aborted) {
|
|
5454
|
+
res();
|
|
5455
|
+
} else {
|
|
5456
|
+
abortController.signal.addEventListener("abort", () => res(), { once: true });
|
|
5457
|
+
}
|
|
5458
|
+
});
|
|
5408
5459
|
function hydratedComplete() {
|
|
5409
5460
|
globalThis.clearTimeout(tmrId);
|
|
5410
5461
|
createdElements.clear();
|
|
@@ -5426,6 +5477,7 @@ function hydrateApp(win2, opts, results, afterHydrate, resolve) {
|
|
|
5426
5477
|
}
|
|
5427
5478
|
function hydratedError(err2) {
|
|
5428
5479
|
renderCatchError(opts, results, err2);
|
|
5480
|
+
abortController.abort();
|
|
5429
5481
|
hydratedComplete();
|
|
5430
5482
|
}
|
|
5431
5483
|
function timeoutExceeded() {
|
|
@@ -5471,7 +5523,7 @@ function hydrateApp(win2, opts, results, afterHydrate, resolve) {
|
|
|
5471
5523
|
if (isValidComponent(elm, opts) && results.hydratedCount < opts.maxHydrateCount) {
|
|
5472
5524
|
if (!connectedElements.has(elm) && shouldHydrate(elm)) {
|
|
5473
5525
|
connectedElements.add(elm);
|
|
5474
|
-
return hydrateComponent.call(elm, win2, results, elm.nodeName, elm, waitingElements);
|
|
5526
|
+
return hydrateComponent.call(elm, win2, results, elm.nodeName, elm, waitingElements, abortedPromise);
|
|
5475
5527
|
}
|
|
5476
5528
|
}
|
|
5477
5529
|
return resolved2;
|
|
@@ -5501,7 +5553,7 @@ function hydrateApp(win2, opts, results, afterHydrate, resolve) {
|
|
|
5501
5553
|
hydratedError(e);
|
|
5502
5554
|
}
|
|
5503
5555
|
}
|
|
5504
|
-
async function hydrateComponent(win2, results, tagName, elm, waitingElements) {
|
|
5556
|
+
async function hydrateComponent(win2, results, tagName, elm, waitingElements, aborted) {
|
|
5505
5557
|
tagName = tagName.toLowerCase();
|
|
5506
5558
|
const Cstr = loadModule(
|
|
5507
5559
|
{
|
|
@@ -5517,17 +5569,19 @@ async function hydrateComponent(win2, results, tagName, elm, waitingElements) {
|
|
|
5517
5569
|
addHostEventListeners(this, hostRef, cmpMeta.$listeners$);
|
|
5518
5570
|
try {
|
|
5519
5571
|
connectedCallback(elm);
|
|
5520
|
-
await elm.componentOnReady();
|
|
5521
|
-
|
|
5522
|
-
|
|
5523
|
-
|
|
5524
|
-
|
|
5525
|
-
results.components.
|
|
5526
|
-
|
|
5527
|
-
|
|
5528
|
-
|
|
5529
|
-
|
|
5530
|
-
|
|
5572
|
+
const wasAborted = await Promise.race([elm.componentOnReady().then(() => false), aborted.then(() => true)]);
|
|
5573
|
+
if (!wasAborted) {
|
|
5574
|
+
results.hydratedCount++;
|
|
5575
|
+
const ref = getHostRef(elm);
|
|
5576
|
+
const modeName = !(ref == null ? void 0 : ref.$modeName$) ? "$" : ref == null ? void 0 : ref.$modeName$;
|
|
5577
|
+
if (!results.components.some((c) => c.tag === tagName && c.mode === modeName)) {
|
|
5578
|
+
results.components.push({
|
|
5579
|
+
tag: tagName,
|
|
5580
|
+
mode: modeName,
|
|
5581
|
+
count: 0,
|
|
5582
|
+
depth: -1
|
|
5583
|
+
});
|
|
5584
|
+
}
|
|
5531
5585
|
}
|
|
5532
5586
|
} catch (e) {
|
|
5533
5587
|
win2.console.error(e);
|
|
@@ -5785,6 +5839,9 @@ var setScopedSSR = (opts) => {
|
|
|
5785
5839
|
var needsScopedSSR = () => scopedSSR;
|
|
5786
5840
|
var scopedSSR = false;
|
|
5787
5841
|
|
|
5842
|
+
const win$1 = typeof window !== 'undefined' ? window : undefined;
|
|
5843
|
+
const doc = typeof document !== 'undefined' ? document : undefined;
|
|
5844
|
+
|
|
5788
5845
|
/**
|
|
5789
5846
|
* Returns `true` if the direction resolves to `rtl` for the given element.
|
|
5790
5847
|
*
|
|
@@ -5979,6 +6036,44 @@ const addEventListener$1 = (el, eventName, callback, opts) => {
|
|
|
5979
6036
|
const removeEventListener = (el, eventName, callback, opts) => {
|
|
5980
6037
|
return el.removeEventListener(eventName, callback, opts);
|
|
5981
6038
|
};
|
|
6039
|
+
/**
|
|
6040
|
+
* Calls back when a CSS custom property that resolves to a length changes,
|
|
6041
|
+
* which no event covers. The probe inherits the property from `hostEl` and
|
|
6042
|
+
* uses it as its height, turning a property change into a size change that
|
|
6043
|
+
* `ResizeObserver` can detect.
|
|
6044
|
+
*
|
|
6045
|
+
* The callback receives the probe's height. For length values, this matches
|
|
6046
|
+
* the resolved property value. For other values, such as `fit-content`, the
|
|
6047
|
+
* probe remains at zero, so the value only signals that the property changed.
|
|
6048
|
+
* Percentages resolve against the probe's containing block, not the element
|
|
6049
|
+
* where the property is ultimately used.
|
|
6050
|
+
*
|
|
6051
|
+
* Pass `initialValue` when the caller has already read the property so that
|
|
6052
|
+
* changes occurring before the observer's first delivery are not missed.
|
|
6053
|
+
* Without it, the first delivery establishes the baseline.
|
|
6054
|
+
*/
|
|
6055
|
+
const onCustomPropertyChange = (hostEl, property, callback, initialValue) => {
|
|
6056
|
+
const doc = win$1?.document;
|
|
6057
|
+
if (!doc || !hostEl || typeof ResizeObserver === 'undefined') {
|
|
6058
|
+
return () => undefined;
|
|
6059
|
+
}
|
|
6060
|
+
const probe = doc.createElement('div');
|
|
6061
|
+
probe.style.cssText = `position:fixed;visibility:hidden;pointer-events:none;top:0;left:0;width:0;height:var(${property},0px);`;
|
|
6062
|
+
hostEl.appendChild(probe);
|
|
6063
|
+
let lastHeight = initialValue;
|
|
6064
|
+
const observer = new ResizeObserver((entries) => {
|
|
6065
|
+
const { height } = entries[0].contentRect;
|
|
6066
|
+
if (lastHeight !== undefined && height !== lastHeight) {
|
|
6067
|
+
callback(height);
|
|
6068
|
+
}
|
|
6069
|
+
lastHeight = height;
|
|
6070
|
+
});
|
|
6071
|
+
observer.observe(probe);
|
|
6072
|
+
return () => {
|
|
6073
|
+
observer.disconnect();
|
|
6074
|
+
probe.remove();
|
|
6075
|
+
};
|
|
6076
|
+
};
|
|
5982
6077
|
/**
|
|
5983
6078
|
* Gets the root context of a shadow dom element
|
|
5984
6079
|
* On newer browsers this will be the shadowRoot,
|
|
@@ -6859,9 +6954,6 @@ class AccordionGroup {
|
|
|
6859
6954
|
}; }
|
|
6860
6955
|
}
|
|
6861
6956
|
|
|
6862
|
-
const win$1 = typeof window !== 'undefined' ? window : undefined;
|
|
6863
|
-
const doc = typeof document !== 'undefined' ? document : undefined;
|
|
6864
|
-
|
|
6865
6957
|
const getCapacitor = () => {
|
|
6866
6958
|
if (win$1 !== undefined) {
|
|
6867
6959
|
return win$1.Capacitor;
|
|
@@ -8721,6 +8813,40 @@ const safeCall = (handler, arg) => {
|
|
|
8721
8813
|
}
|
|
8722
8814
|
return undefined;
|
|
8723
8815
|
};
|
|
8816
|
+
/**
|
|
8817
|
+
* `--width` and `--height` values that leave an overlay spanning the viewport
|
|
8818
|
+
* on that axis, so it reaches both edges. An empty value means the property
|
|
8819
|
+
* was never overridden.
|
|
8820
|
+
*/
|
|
8821
|
+
const FULLSCREEN_SIZES = ['', '100%', '100vw', '100vh', '100dvw', '100dvh', '100svw', '100svh'];
|
|
8822
|
+
/**
|
|
8823
|
+
* `--width` and `--height` values that size an overlay to its content, leaving
|
|
8824
|
+
* the rendered size dependent on the content and on `--max-width` or
|
|
8825
|
+
* `--max-height`.
|
|
8826
|
+
*/
|
|
8827
|
+
const CONTENT_SIZES = ['auto', 'fit-content', 'min-content', 'max-content'];
|
|
8828
|
+
/**
|
|
8829
|
+
* How an overlay's `--width` or `--height` determines its used size:
|
|
8830
|
+
*
|
|
8831
|
+
* `fullscreen` spans the viewport on that axis. `content` depends on the
|
|
8832
|
+
* overlay's content, so its used size is not known until layout. `definite`
|
|
8833
|
+
* resolves independently of the overlay's content size.
|
|
8834
|
+
*
|
|
8835
|
+
* Values are lowercased because CSS keywords are case-insensitive, while a
|
|
8836
|
+
* custom property preserves the case in which it was authored. Content values
|
|
8837
|
+
* are matched as a suffix so vendor-prefixed values such as `-moz-fit-content`
|
|
8838
|
+
* are recognized.
|
|
8839
|
+
*/
|
|
8840
|
+
const getOverlaySizeType = (size) => {
|
|
8841
|
+
const value = size.trim().toLowerCase();
|
|
8842
|
+
if (FULLSCREEN_SIZES.includes(value)) {
|
|
8843
|
+
return 'fullscreen';
|
|
8844
|
+
}
|
|
8845
|
+
if (CONTENT_SIZES.some((keyword) => value.endsWith(keyword))) {
|
|
8846
|
+
return 'content';
|
|
8847
|
+
}
|
|
8848
|
+
return 'definite';
|
|
8849
|
+
};
|
|
8724
8850
|
const BACKDROP = 'backdrop';
|
|
8725
8851
|
const GESTURE = 'gesture';
|
|
8726
8852
|
const OVERLAY_GESTURE_PRIORITY = 39;
|
|
@@ -13600,6 +13726,10 @@ class Content {
|
|
|
13600
13726
|
data: undefined,
|
|
13601
13727
|
isScrolling: true,
|
|
13602
13728
|
};
|
|
13729
|
+
/**
|
|
13730
|
+
* Whether the host is sized to its content.
|
|
13731
|
+
*/
|
|
13732
|
+
this.sizeToContent = false;
|
|
13603
13733
|
/**
|
|
13604
13734
|
* If `true`, the content will scroll behind the headers
|
|
13605
13735
|
* and footers. This effect can easily be seen by setting the toolbar
|
|
@@ -13633,6 +13763,7 @@ class Content {
|
|
|
13633
13763
|
}
|
|
13634
13764
|
componentWillLoad() {
|
|
13635
13765
|
this.inheritedAttributes = inheritAriaAttributes(this.el);
|
|
13766
|
+
this.sizeToContent = this.readSizeToContent();
|
|
13636
13767
|
}
|
|
13637
13768
|
connectedCallback() {
|
|
13638
13769
|
this.isMainContent = this.el.closest('ion-menu, ion-popover, ion-modal') === null;
|
|
@@ -13672,6 +13803,7 @@ class Content {
|
|
|
13672
13803
|
}
|
|
13673
13804
|
// Re-observe on reattach, since componentDidLoad only fires once.
|
|
13674
13805
|
this.setupFullscreenResizeObserver();
|
|
13806
|
+
this.updateSizeToContent();
|
|
13675
13807
|
}
|
|
13676
13808
|
componentDidLoad() {
|
|
13677
13809
|
// The custom elements build assigns fullscreen after connectedCallback.
|
|
@@ -13711,6 +13843,16 @@ class Content {
|
|
|
13711
13843
|
return;
|
|
13712
13844
|
}
|
|
13713
13845
|
}
|
|
13846
|
+
/**
|
|
13847
|
+
* Picks up an overlay that is no longer sized the way the last render
|
|
13848
|
+
* assumed, re-rendering only when the answer changes. Read in a `readTask`
|
|
13849
|
+
* because resolving the custom property forces a style recalculation.
|
|
13850
|
+
*/
|
|
13851
|
+
updateSizeToContent() {
|
|
13852
|
+
readTask(() => {
|
|
13853
|
+
this.sizeToContent = this.readSizeToContent();
|
|
13854
|
+
});
|
|
13855
|
+
}
|
|
13714
13856
|
destroyFullscreenResizeObserver() {
|
|
13715
13857
|
if (this.fullscreenResizeObserver !== undefined) {
|
|
13716
13858
|
this.fullscreenResizeObserver.disconnect();
|
|
@@ -13757,16 +13899,42 @@ class Content {
|
|
|
13757
13899
|
const mode = getIonMode$1(this);
|
|
13758
13900
|
return forceOverscroll === undefined ? mode === 'ios' && isPlatform('ios') : forceOverscroll;
|
|
13759
13901
|
}
|
|
13902
|
+
/**
|
|
13903
|
+
* Reads whether to size the component to its content height. Forces a style
|
|
13904
|
+
* recalculation, so it belongs in a read task or before the first render.
|
|
13905
|
+
*
|
|
13906
|
+
* This applies inside popovers and modals with a content-based `--height`,
|
|
13907
|
+
* where the overlay does not provide the content with a definite height
|
|
13908
|
+
* to fill.
|
|
13909
|
+
*
|
|
13910
|
+
* Only `--height` is consulted. Styling the wrapper directly, such as
|
|
13911
|
+
* `ion-modal::part(content) { height: fit-content; }`, does not change
|
|
13912
|
+
* `--height` and therefore cannot be observed. `--height` is the only
|
|
13913
|
+
* supported way to opt into content-based sizing.
|
|
13914
|
+
*/
|
|
13915
|
+
readSizeToContent() {
|
|
13916
|
+
if (hostContext('ion-popover', this.el)) {
|
|
13917
|
+
return true;
|
|
13918
|
+
}
|
|
13919
|
+
const modal = this.el.closest('ion-modal');
|
|
13920
|
+
if (modal === null) {
|
|
13921
|
+
return false;
|
|
13922
|
+
}
|
|
13923
|
+
const height = getComputedStyle(modal).getPropertyValue('--height');
|
|
13924
|
+
return getOverlaySizeType(height) === 'content';
|
|
13925
|
+
}
|
|
13760
13926
|
resize() {
|
|
13761
13927
|
}
|
|
13762
13928
|
/**
|
|
13763
|
-
*
|
|
13764
|
-
*
|
|
13765
|
-
*
|
|
13929
|
+
* Recalculates the content dimensions and whether it should size itself to
|
|
13930
|
+
* its content. Called by overlays when something they own changes, such as
|
|
13931
|
+
* a header finishing its render or `--height` being updated.
|
|
13932
|
+
*
|
|
13766
13933
|
* @internal
|
|
13767
13934
|
*/
|
|
13768
13935
|
async recalculateDimensions() {
|
|
13769
13936
|
readTask(() => this.readDimensions());
|
|
13937
|
+
this.updateSizeToContent();
|
|
13770
13938
|
}
|
|
13771
13939
|
readDimensions() {
|
|
13772
13940
|
const page = getPageElement(this.el);
|
|
@@ -13936,21 +14104,21 @@ class Content {
|
|
|
13936
14104
|
const forceOverscroll = this.shouldForceOverscroll();
|
|
13937
14105
|
const transitionShadow = mode === 'ios';
|
|
13938
14106
|
this.resize();
|
|
13939
|
-
return (hAsync(Host, { key: '
|
|
14107
|
+
return (hAsync(Host, { key: 'e1013621096729354ef92915af52dd823e69fdff', role: isMainContent ? 'main' : undefined, class: createColorClasses$1(this.color, {
|
|
13940
14108
|
[mode]: true,
|
|
13941
14109
|
'content-fullscreen': this.fullscreen,
|
|
13942
|
-
'content-sizing':
|
|
14110
|
+
'content-sizing': this.sizeToContent,
|
|
13943
14111
|
overscroll: forceOverscroll,
|
|
13944
14112
|
[`content-${rtl}`]: true,
|
|
13945
14113
|
}), style: {
|
|
13946
14114
|
'--offset-top': `${this.cTop}px`,
|
|
13947
14115
|
'--offset-bottom': `${this.cBottom}px`,
|
|
13948
|
-
}, ...inheritedAttributes }, hAsync("div", { key: '
|
|
14116
|
+
}, ...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: {
|
|
13949
14117
|
'inner-scroll': true,
|
|
13950
14118
|
'scroll-x': scrollX,
|
|
13951
14119
|
'scroll-y': scrollY,
|
|
13952
14120
|
overscroll: (scrollX || scrollY) && forceOverscroll,
|
|
13953
|
-
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, hAsync("slot", { key: '
|
|
14121
|
+
}, 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));
|
|
13954
14122
|
}
|
|
13955
14123
|
get el() { return getElement(this); }
|
|
13956
14124
|
static get watchers() { return {
|
|
@@ -13970,6 +14138,7 @@ class Content {
|
|
|
13970
14138
|
"scrollX": [4, "scroll-x"],
|
|
13971
14139
|
"scrollY": [4, "scroll-y"],
|
|
13972
14140
|
"scrollEvents": [4, "scroll-events"],
|
|
14141
|
+
"sizeToContent": [32],
|
|
13973
14142
|
"recalculateDimensions": [64],
|
|
13974
14143
|
"getScrollElement": [64],
|
|
13975
14144
|
"getBackgroundElement": [64],
|
|
@@ -24978,6 +25147,12 @@ const setCardStatusBarDefault = (defaultStyle = Style.Default) => {
|
|
|
24978
25147
|
}
|
|
24979
25148
|
StatusBar.setStyle({ style: defaultStyle });
|
|
24980
25149
|
};
|
|
25150
|
+
/**
|
|
25151
|
+
* Calls back when the modal's resolved `--height` changes.
|
|
25152
|
+
*/
|
|
25153
|
+
const onModalHeightChange = (hostEl, callback) => {
|
|
25154
|
+
return onCustomPropertyChange(hostEl, '--height', () => callback());
|
|
25155
|
+
};
|
|
24981
25156
|
|
|
24982
25157
|
/**
|
|
24983
25158
|
* Swiping is only possible when the content is scrolled to the top, so that we
|
|
@@ -26505,40 +26680,12 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
26505
26680
|
};
|
|
26506
26681
|
};
|
|
26507
26682
|
|
|
26508
|
-
/**
|
|
26509
|
-
* These thresholds match the SCSS media query breakpoints in modal.vars.scss
|
|
26510
|
-
* that trigger the centered dialog layout (non-fullscreen modal).
|
|
26511
|
-
*
|
|
26512
|
-
* SCSS defines two height breakpoints: $modal-inset-min-height-small (600px)
|
|
26513
|
-
* and $modal-inset-min-height-large (768px). We use the smaller one because
|
|
26514
|
-
* that's the threshold where the modal transitions from fullscreen to centered
|
|
26515
|
-
* dialog — the larger breakpoint only increases the dialog's height.
|
|
26516
|
-
*/
|
|
26517
|
-
const MODAL_INSET_MIN_WIDTH = 768;
|
|
26518
|
-
const MODAL_INSET_MIN_HEIGHT = 600;
|
|
26519
26683
|
const EDGE_THRESHOLD = 5;
|
|
26520
|
-
/**
|
|
26521
|
-
* CSS values for `--width` / `--height` that are treated as fullscreen
|
|
26522
|
-
* (modal touches the corresponding screen edges). Empty string means the
|
|
26523
|
-
* property was not overridden. See `hasCustomModalDimensions()`.
|
|
26524
|
-
*/
|
|
26525
|
-
const FULLSCREEN_SIZE_VALUES = new Set(['', '100%', '100vw', '100vh', '100dvw', '100dvh', '100svw', '100svh']);
|
|
26526
26684
|
/**
|
|
26527
26685
|
* Cache for resolved root safe-area-top value, invalidated once per frame.
|
|
26528
26686
|
*/
|
|
26529
26687
|
let cachedRootSafeAreaTop = null;
|
|
26530
26688
|
let cacheInvalidationScheduled$1 = false;
|
|
26531
|
-
/**
|
|
26532
|
-
* Determines if the current viewport meets the CSS media query conditions
|
|
26533
|
-
* that cause regular modals to render as centered dialogs instead of fullscreen.
|
|
26534
|
-
* Matches: @media (min-width: 768px) and (min-height: 600px)
|
|
26535
|
-
*/
|
|
26536
|
-
const isCenteredDialogViewport = () => {
|
|
26537
|
-
if (!win$1)
|
|
26538
|
-
return false;
|
|
26539
|
-
return win$1.matchMedia(`(min-width: ${MODAL_INSET_MIN_WIDTH}px) and (min-height: ${MODAL_INSET_MIN_HEIGHT}px)`)
|
|
26540
|
-
.matches;
|
|
26541
|
-
};
|
|
26542
26689
|
/**
|
|
26543
26690
|
* Resolves the current root --ion-safe-area-top value to pixels.
|
|
26544
26691
|
* Uses a temporary element because getComputedStyle on :root returns
|
|
@@ -26572,55 +26719,64 @@ const getRootSafeAreaTop = () => {
|
|
|
26572
26719
|
return value;
|
|
26573
26720
|
};
|
|
26574
26721
|
/**
|
|
26575
|
-
* Calls back when the resolved root `--ion-safe-area-top` changes
|
|
26576
|
-
*
|
|
26577
|
-
*
|
|
26722
|
+
* Calls back when the resolved root `--ion-safe-area-top` changes. The value
|
|
26723
|
+
* the caller already applied is passed as the baseline, so a change between
|
|
26724
|
+
* that read and the observer starting is still reported.
|
|
26578
26725
|
*/
|
|
26579
26726
|
const onRootSafeAreaTopChange = (callback) => {
|
|
26580
|
-
|
|
26581
|
-
if (!doc?.body || typeof ResizeObserver === 'undefined') {
|
|
26582
|
-
return () => undefined;
|
|
26583
|
-
}
|
|
26584
|
-
const probe = doc.createElement('div');
|
|
26585
|
-
probe.style.cssText =
|
|
26586
|
-
'position:fixed;visibility:hidden;pointer-events:none;top:0;left:0;width:0;' +
|
|
26587
|
-
'height:var(--ion-safe-area-top,0px);';
|
|
26588
|
-
doc.body.appendChild(probe);
|
|
26589
|
-
/**
|
|
26590
|
-
* Seeded with the value the caller has already applied, so a change that
|
|
26591
|
-
* lands before the observer's first delivery still gets reported. Comparing
|
|
26592
|
-
* against an unset value instead would consume that first delivery and treat
|
|
26593
|
-
* the new inset as the baseline.
|
|
26594
|
-
*/
|
|
26595
|
-
let lastHeight = getRootSafeAreaTop();
|
|
26596
|
-
const observer = new ResizeObserver((entries) => {
|
|
26597
|
-
const { height } = entries[0].contentRect;
|
|
26598
|
-
if (height !== lastHeight) {
|
|
26599
|
-
lastHeight = height;
|
|
26600
|
-
callback(height);
|
|
26601
|
-
}
|
|
26602
|
-
});
|
|
26603
|
-
observer.observe(probe);
|
|
26604
|
-
return () => {
|
|
26605
|
-
observer.disconnect();
|
|
26606
|
-
probe.remove();
|
|
26607
|
-
};
|
|
26727
|
+
return onCustomPropertyChange(win$1?.document?.body, '--ion-safe-area-top', callback, getRootSafeAreaTop());
|
|
26608
26728
|
};
|
|
26609
26729
|
/**
|
|
26610
|
-
*
|
|
26611
|
-
*
|
|
26612
|
-
*
|
|
26730
|
+
* Determines which viewport axes the modal spans so safe-area requirements
|
|
26731
|
+
* can be predicted independently for each axis.
|
|
26732
|
+
*
|
|
26733
|
+
* A modal that spans an axis reaches both edges on that axis and needs the
|
|
26734
|
+
* corresponding safe-area insets. A modal that does not span an axis reaches
|
|
26735
|
+
* neither edge on that axis.
|
|
26613
26736
|
*
|
|
26614
|
-
*
|
|
26615
|
-
*
|
|
26616
|
-
*
|
|
26617
|
-
*
|
|
26737
|
+
* When both `--width` and `--height` are `fullscreen`, coverage can be
|
|
26738
|
+
* determined directly. Otherwise, coverage is based on the rendered wrapper,
|
|
26739
|
+
* including cases where content sizing or `--max-height` causes the modal
|
|
26740
|
+
* to reach the viewport.
|
|
26618
26741
|
*/
|
|
26619
|
-
const
|
|
26742
|
+
const getModalCoveredAxes = (hostEl) => {
|
|
26620
26743
|
const styles = getComputedStyle(hostEl);
|
|
26621
|
-
const width = styles.getPropertyValue('--width')
|
|
26622
|
-
const height = styles.getPropertyValue('--height')
|
|
26623
|
-
|
|
26744
|
+
const width = getOverlaySizeType(styles.getPropertyValue('--width'));
|
|
26745
|
+
const height = getOverlaySizeType(styles.getPropertyValue('--height'));
|
|
26746
|
+
if (width === 'fullscreen' && height === 'fullscreen') {
|
|
26747
|
+
return { vertical: true, horizontal: true };
|
|
26748
|
+
}
|
|
26749
|
+
return measureCoveredAxes(hostEl);
|
|
26750
|
+
};
|
|
26751
|
+
/**
|
|
26752
|
+
* Measures the modal wrapper to determine whether it spans the viewport
|
|
26753
|
+
* on each axis.
|
|
26754
|
+
*
|
|
26755
|
+
* The wrapper has no box while the modal is hidden, so `overlay-hidden`
|
|
26756
|
+
* is temporarily removed to allow the wrapper to be measured. The class
|
|
26757
|
+
* is restored in the same task before the browser can paint.
|
|
26758
|
+
*
|
|
26759
|
+
* Only the wrapper's size is measured. Its position is affected by the
|
|
26760
|
+
* enter animation, which initially translates it by its own height, while
|
|
26761
|
+
* the translation does not affect its measured size.
|
|
26762
|
+
*/
|
|
26763
|
+
const measureCoveredAxes = (hostEl) => {
|
|
26764
|
+
const wrapperEl = hostEl.shadowRoot?.querySelector('.modal-wrapper');
|
|
26765
|
+
if (wrapperEl == null || win$1 === undefined) {
|
|
26766
|
+
return { vertical: false, horizontal: false };
|
|
26767
|
+
}
|
|
26768
|
+
const wasHidden = hostEl.classList.contains('overlay-hidden');
|
|
26769
|
+
if (wasHidden) {
|
|
26770
|
+
hostEl.classList.remove('overlay-hidden');
|
|
26771
|
+
}
|
|
26772
|
+
const { width, height } = wrapperEl.getBoundingClientRect();
|
|
26773
|
+
if (wasHidden) {
|
|
26774
|
+
hostEl.classList.add('overlay-hidden');
|
|
26775
|
+
}
|
|
26776
|
+
return {
|
|
26777
|
+
vertical: height >= win$1.innerHeight - EDGE_THRESHOLD,
|
|
26778
|
+
horizontal: width >= win$1.innerWidth - EDGE_THRESHOLD,
|
|
26779
|
+
};
|
|
26624
26780
|
};
|
|
26625
26781
|
/**
|
|
26626
26782
|
* Returns the initial safe-area configuration based on modal type.
|
|
@@ -26654,26 +26810,23 @@ const getInitialSafeAreaConfig = (context) => {
|
|
|
26654
26810
|
right: '0px',
|
|
26655
26811
|
};
|
|
26656
26812
|
}
|
|
26657
|
-
|
|
26658
|
-
|
|
26659
|
-
|
|
26660
|
-
|
|
26661
|
-
|
|
26662
|
-
|
|
26663
|
-
|
|
26664
|
-
|
|
26665
|
-
|
|
26666
|
-
|
|
26667
|
-
|
|
26668
|
-
|
|
26669
|
-
};
|
|
26670
|
-
}
|
|
26671
|
-
// Fullscreen modals on phone - inherit all safe areas
|
|
26813
|
+
/**
|
|
26814
|
+
* Each axis is evaluated independently because a modal can span one axis
|
|
26815
|
+
* without spanning the other. This allows the initial safe-area configuration
|
|
26816
|
+
* to match the modal's expected dimensions and avoids correcting an incorrect
|
|
26817
|
+
* pair of insets after presentation.
|
|
26818
|
+
*
|
|
26819
|
+
* A modal can span the horizontal axis while remaining inset vertically, or
|
|
26820
|
+
* span the vertical axis while remaining inset horizontally. Wide viewports
|
|
26821
|
+
* can also render regular modals as centered dialogs, while content-sized
|
|
26822
|
+
* modals may still be clamped to the viewport.
|
|
26823
|
+
*/
|
|
26824
|
+
const { vertical, horizontal } = context.coveredAxes ?? { vertical: true, horizontal: true };
|
|
26672
26825
|
return {
|
|
26673
|
-
top: 'inherit',
|
|
26674
|
-
bottom: 'inherit',
|
|
26675
|
-
left: 'inherit',
|
|
26676
|
-
right: 'inherit',
|
|
26826
|
+
top: vertical ? 'inherit' : '0px',
|
|
26827
|
+
bottom: vertical ? 'inherit' : '0px',
|
|
26828
|
+
left: horizontal ? 'inherit' : '0px',
|
|
26829
|
+
right: horizontal ? 'inherit' : '0px',
|
|
26677
26830
|
};
|
|
26678
26831
|
};
|
|
26679
26832
|
/**
|
|
@@ -26725,9 +26878,9 @@ const clearSafeAreaOverrides = (hostEl) => {
|
|
|
26725
26878
|
hostEl.style.removeProperty('--ion-safe-area-right');
|
|
26726
26879
|
};
|
|
26727
26880
|
|
|
26728
|
-
const modalIosCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:
|
|
26881
|
+
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}`;
|
|
26729
26882
|
|
|
26730
|
-
const modalMdCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:
|
|
26883
|
+
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}`;
|
|
26731
26884
|
|
|
26732
26885
|
// TODO(FW-2832): types
|
|
26733
26886
|
/**
|
|
@@ -27765,7 +27918,7 @@ class Modal {
|
|
|
27765
27918
|
/**
|
|
27766
27919
|
* Creates the context object for safe-area utilities.
|
|
27767
27920
|
*
|
|
27768
|
-
* `
|
|
27921
|
+
* `coveredAxes` is only set by `setInitialSafeAreaOverrides()`
|
|
27769
27922
|
* because it is only read by `getInitialSafeAreaConfig()`. Other callers
|
|
27770
27923
|
* (resize handler, post-animation update, fullscreen-padding apply) would
|
|
27771
27924
|
* pay a `getComputedStyle()` cost for a value they never consult.
|
|
@@ -27779,6 +27932,26 @@ class Modal {
|
|
|
27779
27932
|
currentBreakpoint: this.currentBreakpoint,
|
|
27780
27933
|
};
|
|
27781
27934
|
}
|
|
27935
|
+
/**
|
|
27936
|
+
* Keeps the content's sizing in sync with `--height`. The content reads the
|
|
27937
|
+
* property to determine whether it should size itself to its content, and
|
|
27938
|
+
* changes to `--height` on an ancestor or the root can change that behavior
|
|
27939
|
+
* without changing the modal itself.
|
|
27940
|
+
*/
|
|
27941
|
+
watchHeightForContent() {
|
|
27942
|
+
/**
|
|
27943
|
+
* A sheet's height comes from its breakpoints, so its content never sizes
|
|
27944
|
+
* itself to `--height`. Watching it would cause the drag to recalculate on
|
|
27945
|
+
* every frame.
|
|
27946
|
+
*/
|
|
27947
|
+
if (this.isSheetModal) {
|
|
27948
|
+
return;
|
|
27949
|
+
}
|
|
27950
|
+
this.unsubscribeHeightChange?.();
|
|
27951
|
+
this.unsubscribeHeightChange = onModalHeightChange(this.el, () => {
|
|
27952
|
+
this.el.querySelectorAll('ion-content').forEach((contentEl) => contentEl.recalculateDimensions());
|
|
27953
|
+
});
|
|
27954
|
+
}
|
|
27782
27955
|
/**
|
|
27783
27956
|
* Sets initial safe-area overrides before modal animation.
|
|
27784
27957
|
* Called in present() before animation starts.
|
|
@@ -27792,10 +27965,11 @@ class Modal {
|
|
|
27792
27965
|
setInitialSafeAreaOverrides() {
|
|
27793
27966
|
const context = {
|
|
27794
27967
|
...this.getSafeAreaContext(),
|
|
27795
|
-
|
|
27968
|
+
coveredAxes: getModalCoveredAxes(this.el),
|
|
27796
27969
|
};
|
|
27797
27970
|
const safeAreaConfig = getInitialSafeAreaConfig(context);
|
|
27798
27971
|
applySafeAreaOverrides(this.el, safeAreaConfig);
|
|
27972
|
+
this.watchHeightForContent();
|
|
27799
27973
|
// Set the internal offset property with the resolved root safe-area-top value
|
|
27800
27974
|
if (context.isSheetModal) {
|
|
27801
27975
|
this.updateSheetOffsetTop();
|
|
@@ -27915,6 +28089,8 @@ class Modal {
|
|
|
27915
28089
|
clearSafeAreaOverrides(this.el);
|
|
27916
28090
|
this.unsubscribeRootSafeAreaTop?.();
|
|
27917
28091
|
this.unsubscribeRootSafeAreaTop = undefined;
|
|
28092
|
+
this.unsubscribeHeightChange?.();
|
|
28093
|
+
this.unsubscribeHeightChange = undefined;
|
|
27918
28094
|
// Remove internal sheet offset property
|
|
27919
28095
|
this.el.style.removeProperty('--ion-modal-offset-top');
|
|
27920
28096
|
const { contentEl } = this.findContentAndFooter();
|
|
@@ -27952,7 +28128,7 @@ class Modal {
|
|
|
27952
28128
|
const isCardModal = presentingElement !== undefined && mode === 'ios';
|
|
27953
28129
|
const isHandleCycle = handleBehavior === 'cycle';
|
|
27954
28130
|
const isSheetModalWithHandle = isSheetModal && showHandle;
|
|
27955
|
-
return (hAsync(Host, { key: '
|
|
28131
|
+
return (hAsync(Host, { key: '17a95bd7722bac2344bea041aff97db17f55c0cf', "no-router": true,
|
|
27956
28132
|
// Allow the modal to be navigable when the handle is focusable
|
|
27957
28133
|
tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1, ...htmlAttributes, style: {
|
|
27958
28134
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
@@ -27965,7 +28141,7 @@ class Modal {
|
|
|
27965
28141
|
'overlay-hidden': true,
|
|
27966
28142
|
[FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false,
|
|
27967
28143
|
...getClassMap(this.cssClass),
|
|
27968
|
-
}, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, hAsync("ion-backdrop", { key: '
|
|
28144
|
+
}, 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',
|
|
27969
28145
|
/*
|
|
27970
28146
|
role and aria-modal must be used on the
|
|
27971
28147
|
same element. They must also be set inside the
|
|
@@ -27978,9 +28154,9 @@ class Modal {
|
|
|
27978
28154
|
without the tabindex focus() would be a no-op and screen readers
|
|
27979
28155
|
may not properly announce the dialog and its content when it opens.
|
|
27980
28156
|
*/
|
|
27981
|
-
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: '
|
|
28157
|
+
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",
|
|
27982
28158
|
// Prevents the handle from receiving keyboard focus when it does not cycle
|
|
27983
|
-
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: '
|
|
28159
|
+
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 }))));
|
|
27984
28160
|
}
|
|
27985
28161
|
get el() { return getElement(this); }
|
|
27986
28162
|
static get watchers() { return {
|
|
@@ -43053,7 +43229,7 @@ exports.hydrateApp = hydrateApp;
|
|
|
43053
43229
|
|
|
43054
43230
|
|
|
43055
43231
|
/*hydrateAppClosure end*/
|
|
43056
|
-
hydrateApp(window, $stencilHydrateOpts, $stencilHydrateResults, $stencilAfterHydrate, $stencilHydrateResolve);
|
|
43232
|
+
hydrateApp(window, $stencilHydrateOpts, $stencilHydrateResults, $stencilAfterHydrate, $stencilHydrateResolve, $stencilAbortController);
|
|
43057
43233
|
}
|
|
43058
43234
|
|
|
43059
43235
|
hydrateAppClosure($stencilWindow);
|
|
@@ -43148,7 +43324,7 @@ var NAMESPACE = (
|
|
|
43148
43324
|
);
|
|
43149
43325
|
|
|
43150
43326
|
/*
|
|
43151
|
-
Stencil Hydrate Runner v4.
|
|
43327
|
+
Stencil Hydrate Runner v4.45.0 | MIT Licensed | https://stenciljs.com
|
|
43152
43328
|
*/
|
|
43153
43329
|
var __create = Object.create;
|
|
43154
43330
|
var __defProp = Object.defineProperty;
|
|
@@ -57295,11 +57471,14 @@ function resetWindow(win2) {
|
|
|
57295
57471
|
} catch (e) {
|
|
57296
57472
|
}
|
|
57297
57473
|
}
|
|
57298
|
-
|
|
57299
|
-
|
|
57300
|
-
|
|
57301
|
-
win2.
|
|
57302
|
-
win2.
|
|
57474
|
+
const windowDestroyed = () => {
|
|
57475
|
+
throw new Error("MockWindow was already destroyed");
|
|
57476
|
+
};
|
|
57477
|
+
win2.fetch = windowDestroyed;
|
|
57478
|
+
win2.Headers = windowDestroyed;
|
|
57479
|
+
win2.Request = windowDestroyed;
|
|
57480
|
+
win2.Response = windowDestroyed;
|
|
57481
|
+
win2.FetchError = windowDestroyed;
|
|
57303
57482
|
}
|
|
57304
57483
|
}
|
|
57305
57484
|
function resetWindowDimensions(win2) {
|