@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
|
@@ -3,14 +3,129 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var ionicGlobal = require('./ionic-global-CYJNT-2P.js');
|
|
11
|
-
var frameworkDelegate = require('./framework-delegate-d-fWfeI6.js');
|
|
6
|
+
var helpers = require('./helpers-DHjAEaU9.js');
|
|
7
|
+
var index = require('./index-T36W_eKv.js');
|
|
8
|
+
var ionicGlobal = require('./ionic-global-BWd7usAF.js');
|
|
9
|
+
var frameworkDelegate = require('./framework-delegate-DYIuFqQx.js');
|
|
12
10
|
var gestureController = require('./gesture-controller-CeJslptU.js');
|
|
13
11
|
|
|
12
|
+
/**
|
|
13
|
+
* CloseWatcher is a newer API that lets
|
|
14
|
+
* use detect the hardware back button event
|
|
15
|
+
* in a web browser: https://caniuse.com/?search=closewatcher
|
|
16
|
+
* However, not every browser supports it yet.
|
|
17
|
+
*
|
|
18
|
+
* This needs to be a function so that we can
|
|
19
|
+
* check the config once it has been set.
|
|
20
|
+
* Otherwise, this code would be evaluated the
|
|
21
|
+
* moment this file is evaluated which could be
|
|
22
|
+
* before the config is set.
|
|
23
|
+
*/
|
|
24
|
+
const shouldUseCloseWatcher = () => index.config.get('experimentalCloseWatcher', false) && helpers.win !== undefined && 'CloseWatcher' in helpers.win;
|
|
25
|
+
/**
|
|
26
|
+
* When hardwareBackButton: false in config,
|
|
27
|
+
* we need to make sure we also block the default
|
|
28
|
+
* webview behavior. If we don't then it will be
|
|
29
|
+
* possible for users to navigate backward while
|
|
30
|
+
* an overlay is still open. Additionally, it will
|
|
31
|
+
* give the appearance that the hardwareBackButton
|
|
32
|
+
* config is not working as the page transition
|
|
33
|
+
* will still happen.
|
|
34
|
+
*/
|
|
35
|
+
const blockHardwareBackButton = () => {
|
|
36
|
+
document.addEventListener('backbutton', () => { });
|
|
37
|
+
};
|
|
38
|
+
const startHardwareBackButton = () => {
|
|
39
|
+
const doc = document;
|
|
40
|
+
let busy = false;
|
|
41
|
+
const backButtonCallback = () => {
|
|
42
|
+
if (busy) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
let index$1 = 0;
|
|
46
|
+
let handlers = [];
|
|
47
|
+
const ev = new CustomEvent('ionBackButton', {
|
|
48
|
+
bubbles: false,
|
|
49
|
+
detail: {
|
|
50
|
+
register(priority, handler) {
|
|
51
|
+
handlers.push({ priority, handler, id: index$1++ });
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
doc.dispatchEvent(ev);
|
|
56
|
+
const executeAction = async (handlerRegister) => {
|
|
57
|
+
try {
|
|
58
|
+
if (handlerRegister?.handler) {
|
|
59
|
+
const result = handlerRegister.handler(processHandlers);
|
|
60
|
+
if (result != null) {
|
|
61
|
+
await result;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
index.printIonError('[ion-app] - Exception in startHardwareBackButton:', e);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const processHandlers = () => {
|
|
70
|
+
if (handlers.length > 0) {
|
|
71
|
+
let selectedHandler = {
|
|
72
|
+
priority: Number.MIN_SAFE_INTEGER,
|
|
73
|
+
handler: () => undefined,
|
|
74
|
+
id: -1,
|
|
75
|
+
};
|
|
76
|
+
handlers.forEach((handler) => {
|
|
77
|
+
if (handler.priority >= selectedHandler.priority) {
|
|
78
|
+
selectedHandler = handler;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
busy = true;
|
|
82
|
+
handlers = handlers.filter((handler) => handler.id !== selectedHandler.id);
|
|
83
|
+
executeAction(selectedHandler).then(() => (busy = false));
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
processHandlers();
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* If the CloseWatcher is defined then
|
|
90
|
+
* we don't want to also listen for the native
|
|
91
|
+
* backbutton event otherwise we may get duplicate
|
|
92
|
+
* events firing.
|
|
93
|
+
*/
|
|
94
|
+
if (shouldUseCloseWatcher()) {
|
|
95
|
+
let watcher;
|
|
96
|
+
const configureWatcher = () => {
|
|
97
|
+
watcher?.destroy();
|
|
98
|
+
watcher = new helpers.win.CloseWatcher();
|
|
99
|
+
/**
|
|
100
|
+
* Once a close request happens
|
|
101
|
+
* the watcher gets destroyed.
|
|
102
|
+
* As a result, we need to re-configure
|
|
103
|
+
* the watcher so we can respond to other
|
|
104
|
+
* close requests.
|
|
105
|
+
*/
|
|
106
|
+
watcher.onclose = () => {
|
|
107
|
+
backButtonCallback();
|
|
108
|
+
configureWatcher();
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
configureWatcher();
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
doc.addEventListener('backbutton', backButtonCallback);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const OVERLAY_BACK_BUTTON_PRIORITY = 100;
|
|
118
|
+
const MENU_BACK_BUTTON_PRIORITY = 99; // 1 less than overlay priority since menu is displayed behind overlays
|
|
119
|
+
|
|
120
|
+
var hardwareBackButton = /*#__PURE__*/Object.freeze({
|
|
121
|
+
__proto__: null,
|
|
122
|
+
MENU_BACK_BUTTON_PRIORITY: MENU_BACK_BUTTON_PRIORITY,
|
|
123
|
+
OVERLAY_BACK_BUTTON_PRIORITY: OVERLAY_BACK_BUTTON_PRIORITY,
|
|
124
|
+
blockHardwareBackButton: blockHardwareBackButton,
|
|
125
|
+
shouldUseCloseWatcher: shouldUseCloseWatcher,
|
|
126
|
+
startHardwareBackButton: startHardwareBackButton
|
|
127
|
+
});
|
|
128
|
+
|
|
14
129
|
/**
|
|
15
130
|
* This query string selects elements that
|
|
16
131
|
* are eligible to receive focus. We select
|
|
@@ -407,7 +522,7 @@ const connectListeners = (doc) => {
|
|
|
407
522
|
doc.addEventListener('ionBackButton', (ev) => {
|
|
408
523
|
const lastOverlay = getPresentedOverlay(doc);
|
|
409
524
|
if (lastOverlay?.backdropDismiss) {
|
|
410
|
-
ev.detail.register(
|
|
525
|
+
ev.detail.register(OVERLAY_BACK_BUTTON_PRIORITY, () => {
|
|
411
526
|
/**
|
|
412
527
|
* Do not return this promise otherwise
|
|
413
528
|
* the hardware back button utility will
|
|
@@ -430,7 +545,7 @@ const connectListeners = (doc) => {
|
|
|
430
545
|
* this behavior will be handled via the ionBackButton
|
|
431
546
|
* event.
|
|
432
547
|
*/
|
|
433
|
-
if (!
|
|
548
|
+
if (!shouldUseCloseWatcher()) {
|
|
434
549
|
doc.addEventListener('keydown', (ev) => {
|
|
435
550
|
if (ev.key === 'Escape') {
|
|
436
551
|
const lastOverlay = getPresentedOverlay(doc);
|
|
@@ -716,7 +831,7 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
|
|
|
716
831
|
if (!overlay.presented) {
|
|
717
832
|
return false;
|
|
718
833
|
}
|
|
719
|
-
const presentedOverlays =
|
|
834
|
+
const presentedOverlays = helpers.doc !== undefined ? getPresentedOverlays(helpers.doc) : [];
|
|
720
835
|
/**
|
|
721
836
|
* For accessibility, toasts lack focus traps and don't receive
|
|
722
837
|
* `aria-hidden` on the root element when presented.
|
|
@@ -845,6 +960,40 @@ const safeCall = (handler, arg) => {
|
|
|
845
960
|
}
|
|
846
961
|
return undefined;
|
|
847
962
|
};
|
|
963
|
+
/**
|
|
964
|
+
* `--width` and `--height` values that leave an overlay spanning the viewport
|
|
965
|
+
* on that axis, so it reaches both edges. An empty value means the property
|
|
966
|
+
* was never overridden.
|
|
967
|
+
*/
|
|
968
|
+
const FULLSCREEN_SIZES = ['', '100%', '100vw', '100vh', '100dvw', '100dvh', '100svw', '100svh'];
|
|
969
|
+
/**
|
|
970
|
+
* `--width` and `--height` values that size an overlay to its content, leaving
|
|
971
|
+
* the rendered size dependent on the content and on `--max-width` or
|
|
972
|
+
* `--max-height`.
|
|
973
|
+
*/
|
|
974
|
+
const CONTENT_SIZES = ['auto', 'fit-content', 'min-content', 'max-content'];
|
|
975
|
+
/**
|
|
976
|
+
* How an overlay's `--width` or `--height` determines its used size:
|
|
977
|
+
*
|
|
978
|
+
* `fullscreen` spans the viewport on that axis. `content` depends on the
|
|
979
|
+
* overlay's content, so its used size is not known until layout. `definite`
|
|
980
|
+
* resolves independently of the overlay's content size.
|
|
981
|
+
*
|
|
982
|
+
* Values are lowercased because CSS keywords are case-insensitive, while a
|
|
983
|
+
* custom property preserves the case in which it was authored. Content values
|
|
984
|
+
* are matched as a suffix so vendor-prefixed values such as `-moz-fit-content`
|
|
985
|
+
* are recognized.
|
|
986
|
+
*/
|
|
987
|
+
const getOverlaySizeType = (size) => {
|
|
988
|
+
const value = size.trim().toLowerCase();
|
|
989
|
+
if (FULLSCREEN_SIZES.includes(value)) {
|
|
990
|
+
return 'fullscreen';
|
|
991
|
+
}
|
|
992
|
+
if (CONTENT_SIZES.some((keyword) => value.endsWith(keyword))) {
|
|
993
|
+
return 'content';
|
|
994
|
+
}
|
|
995
|
+
return 'definite';
|
|
996
|
+
};
|
|
848
997
|
const BACKDROP = 'backdrop';
|
|
849
998
|
const GESTURE = 'gesture';
|
|
850
999
|
const OVERLAY_GESTURE_PRIORITY = 39;
|
|
@@ -979,6 +1128,7 @@ const FOCUS_TRAP_DISABLE_CLASS = 'ion-disable-focus-trap';
|
|
|
979
1128
|
exports.BACKDROP = BACKDROP;
|
|
980
1129
|
exports.FOCUS_TRAP_DISABLE_CLASS = FOCUS_TRAP_DISABLE_CLASS;
|
|
981
1130
|
exports.GESTURE = GESTURE;
|
|
1131
|
+
exports.MENU_BACK_BUTTON_PRIORITY = MENU_BACK_BUTTON_PRIORITY;
|
|
982
1132
|
exports.OVERLAY_GESTURE_PRIORITY = OVERLAY_GESTURE_PRIORITY;
|
|
983
1133
|
exports.actionSheetController = actionSheetController;
|
|
984
1134
|
exports.alertController = alertController;
|
|
@@ -989,7 +1139,9 @@ exports.dismiss = dismiss;
|
|
|
989
1139
|
exports.eventMethod = eventMethod;
|
|
990
1140
|
exports.focusFirstDescendant = focusFirstDescendant;
|
|
991
1141
|
exports.focusLastDescendant = focusLastDescendant;
|
|
1142
|
+
exports.getOverlaySizeType = getOverlaySizeType;
|
|
992
1143
|
exports.getPresentedOverlay = getPresentedOverlay;
|
|
1144
|
+
exports.hardwareBackButton = hardwareBackButton;
|
|
993
1145
|
exports.isCancel = isCancel;
|
|
994
1146
|
exports.loadingController = loadingController;
|
|
995
1147
|
exports.modalController = modalController;
|
|
@@ -999,4 +1151,5 @@ exports.present = present;
|
|
|
999
1151
|
exports.restoreRootFocusTrapAccessibility = restoreRootFocusTrapAccessibility;
|
|
1000
1152
|
exports.safeCall = safeCall;
|
|
1001
1153
|
exports.setOverlayId = setOverlayId;
|
|
1154
|
+
exports.shouldUseCloseWatcher = shouldUseCloseWatcher;
|
|
1002
1155
|
exports.toastController = toastController;
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
var index = require('./index-
|
|
7
|
-
var index$1 = require('./index-
|
|
6
|
+
var index = require('./index-T36W_eKv.js');
|
|
7
|
+
var index$1 = require('./index-MdIUU940.js');
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Converts a DOM node into a Stencil VNode (or text string) so the
|
package/dist/cjs/{slot-mutation-controller-yNStVQqX.js → slot-mutation-controller-CtYZdaWI.js}
RENAMED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
var
|
|
7
|
-
var helpers = require('./helpers-7wzdhdeg.js');
|
|
6
|
+
var helpers = require('./helpers-DHjAEaU9.js');
|
|
8
7
|
var dir = require('./dir-zwDPRE5K.js');
|
|
9
8
|
|
|
10
9
|
/**
|
|
@@ -96,8 +95,8 @@ const createNotchController = (el, getNotchSpacerEl, getLabelSlot) => {
|
|
|
96
95
|
*/
|
|
97
96
|
width === 0 &&
|
|
98
97
|
notchSpacerEl.offsetParent === null &&
|
|
99
|
-
|
|
100
|
-
'IntersectionObserver' in
|
|
98
|
+
helpers.win !== undefined &&
|
|
99
|
+
'IntersectionObserver' in helpers.win) {
|
|
101
100
|
/**
|
|
102
101
|
* If there is an IO already attached
|
|
103
102
|
* then that will update the notch
|
|
@@ -360,7 +359,7 @@ const createClickController = (el, getNativeInput) => {
|
|
|
360
359
|
const createSlotMutationController = (el, slotName, mutationCallback) => {
|
|
361
360
|
let hostMutationObserver;
|
|
362
361
|
let slottedContentMutationObserver;
|
|
363
|
-
if (
|
|
362
|
+
if (helpers.win !== undefined && 'MutationObserver' in helpers.win) {
|
|
364
363
|
const slots = Array.isArray(slotName) ? slotName : [slotName];
|
|
365
364
|
hostMutationObserver = new MutationObserver((entries) => {
|
|
366
365
|
for (const entry of entries) {
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
var index = require('./index-
|
|
7
|
-
var index$1 = require('./index-
|
|
8
|
-
var helpers = require('./helpers-
|
|
6
|
+
var index = require('./index-T36W_eKv.js');
|
|
7
|
+
var index$1 = require('./index-BLq7TkUV.js');
|
|
8
|
+
var helpers = require('./helpers-DHjAEaU9.js');
|
|
9
9
|
require('./dir-zwDPRE5K.js');
|
|
10
10
|
|
|
11
11
|
const startStatusTap = () => {
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
var helpers = require('./helpers-
|
|
6
|
+
var helpers = require('./helpers-DHjAEaU9.js');
|
|
7
7
|
var dir = require('./dir-zwDPRE5K.js');
|
|
8
8
|
var index = require('./index-DRPqwSvU.js');
|
|
9
|
-
require('./index-
|
|
9
|
+
require('./index-T36W_eKv.js');
|
|
10
10
|
require('./gesture-controller-CeJslptU.js');
|
|
11
11
|
|
|
12
12
|
const createSwipeBackGesture = (el, canStartHandler, onStartHandler, onMoveHandler, onEndHandler) => {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Build, Host, forceUpdate, h, readTask, } from "@stencil/core";
|
|
5
5
|
import { componentOnReady, hasLazyBuild, inheritAriaAttributes } from "../../utils/helpers";
|
|
6
|
+
import { getOverlaySizeType } from "../../utils/overlays";
|
|
6
7
|
import { isPlatform } from "../../utils/platform";
|
|
7
8
|
import { isRTL } from "../../utils/rtl/index";
|
|
8
9
|
import { createColorClasses, hostContext } from "../../utils/theme";
|
|
@@ -47,6 +48,10 @@ export class Content {
|
|
|
47
48
|
data: undefined,
|
|
48
49
|
isScrolling: true,
|
|
49
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* Whether the host is sized to its content.
|
|
53
|
+
*/
|
|
54
|
+
this.sizeToContent = false;
|
|
50
55
|
/**
|
|
51
56
|
* If `true`, the content will scroll behind the headers
|
|
52
57
|
* and footers. This effect can easily be seen by setting the toolbar
|
|
@@ -80,6 +85,7 @@ export class Content {
|
|
|
80
85
|
}
|
|
81
86
|
componentWillLoad() {
|
|
82
87
|
this.inheritedAttributes = inheritAriaAttributes(this.el);
|
|
88
|
+
this.sizeToContent = this.readSizeToContent();
|
|
83
89
|
}
|
|
84
90
|
connectedCallback() {
|
|
85
91
|
this.isMainContent = this.el.closest('ion-menu, ion-popover, ion-modal') === null;
|
|
@@ -119,6 +125,7 @@ export class Content {
|
|
|
119
125
|
}
|
|
120
126
|
// Re-observe on reattach, since componentDidLoad only fires once.
|
|
121
127
|
this.setupFullscreenResizeObserver();
|
|
128
|
+
this.updateSizeToContent();
|
|
122
129
|
}
|
|
123
130
|
componentDidLoad() {
|
|
124
131
|
// The custom elements build assigns fullscreen after connectedCallback.
|
|
@@ -175,6 +182,16 @@ export class Content {
|
|
|
175
182
|
});
|
|
176
183
|
this.fullscreenResizeObserver.observe(this.el);
|
|
177
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Picks up an overlay that is no longer sized the way the last render
|
|
187
|
+
* assumed, re-rendering only when the answer changes. Read in a `readTask`
|
|
188
|
+
* because resolving the custom property forces a style recalculation.
|
|
189
|
+
*/
|
|
190
|
+
updateSizeToContent() {
|
|
191
|
+
readTask(() => {
|
|
192
|
+
this.sizeToContent = this.readSizeToContent();
|
|
193
|
+
});
|
|
194
|
+
}
|
|
178
195
|
destroyFullscreenResizeObserver() {
|
|
179
196
|
if (this.fullscreenResizeObserver !== undefined) {
|
|
180
197
|
this.fullscreenResizeObserver.disconnect();
|
|
@@ -221,6 +238,30 @@ export class Content {
|
|
|
221
238
|
const mode = getIonMode(this);
|
|
222
239
|
return forceOverscroll === undefined ? mode === 'ios' && isPlatform('ios') : forceOverscroll;
|
|
223
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* Reads whether to size the component to its content height. Forces a style
|
|
243
|
+
* recalculation, so it belongs in a read task or before the first render.
|
|
244
|
+
*
|
|
245
|
+
* This applies inside popovers and modals with a content-based `--height`,
|
|
246
|
+
* where the overlay does not provide the content with a definite height
|
|
247
|
+
* to fill.
|
|
248
|
+
*
|
|
249
|
+
* Only `--height` is consulted. Styling the wrapper directly, such as
|
|
250
|
+
* `ion-modal::part(content) { height: fit-content; }`, does not change
|
|
251
|
+
* `--height` and therefore cannot be observed. `--height` is the only
|
|
252
|
+
* supported way to opt into content-based sizing.
|
|
253
|
+
*/
|
|
254
|
+
readSizeToContent() {
|
|
255
|
+
if (hostContext('ion-popover', this.el)) {
|
|
256
|
+
return true;
|
|
257
|
+
}
|
|
258
|
+
const modal = this.el.closest('ion-modal');
|
|
259
|
+
if (modal === null) {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
const height = getComputedStyle(modal).getPropertyValue('--height');
|
|
263
|
+
return getOverlaySizeType(height) === 'content';
|
|
264
|
+
}
|
|
224
265
|
resize() {
|
|
225
266
|
/**
|
|
226
267
|
* Only force update if the component is rendered in a browser context.
|
|
@@ -231,6 +272,12 @@ export class Content {
|
|
|
231
272
|
* TODO: Remove if STENCIL-834 determines Stencil will account for this.
|
|
232
273
|
*/
|
|
233
274
|
if (Build.isBrowser) {
|
|
275
|
+
/**
|
|
276
|
+
* A window resize can cross a media query that changes the modal's
|
|
277
|
+
* `--height`. The content's own offsets are unchanged, so neither branch
|
|
278
|
+
* below re-renders and the class from the last render would go stale.
|
|
279
|
+
*/
|
|
280
|
+
this.updateSizeToContent();
|
|
234
281
|
if (this.fullscreen) {
|
|
235
282
|
readTask(() => this.readDimensions());
|
|
236
283
|
}
|
|
@@ -241,13 +288,15 @@ export class Content {
|
|
|
241
288
|
}
|
|
242
289
|
}
|
|
243
290
|
/**
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
291
|
+
* Recalculates the content dimensions and whether it should size itself to
|
|
292
|
+
* its content. Called by overlays when something they own changes, such as
|
|
293
|
+
* a header finishing its render or `--height` being updated.
|
|
294
|
+
*
|
|
247
295
|
* @internal
|
|
248
296
|
*/
|
|
249
297
|
async recalculateDimensions() {
|
|
250
298
|
readTask(() => this.readDimensions());
|
|
299
|
+
this.updateSizeToContent();
|
|
251
300
|
}
|
|
252
301
|
readDimensions() {
|
|
253
302
|
const page = getPageElement(this.el);
|
|
@@ -418,21 +467,21 @@ export class Content {
|
|
|
418
467
|
const forceOverscroll = this.shouldForceOverscroll();
|
|
419
468
|
const transitionShadow = mode === 'ios';
|
|
420
469
|
this.resize();
|
|
421
|
-
return (h(Host, { key: '
|
|
470
|
+
return (h(Host, { key: 'e1013621096729354ef92915af52dd823e69fdff', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
|
|
422
471
|
[mode]: true,
|
|
423
472
|
'content-fullscreen': this.fullscreen,
|
|
424
|
-
'content-sizing':
|
|
473
|
+
'content-sizing': this.sizeToContent,
|
|
425
474
|
overscroll: forceOverscroll,
|
|
426
475
|
[`content-${rtl}`]: true,
|
|
427
476
|
}), style: {
|
|
428
477
|
'--offset-top': `${this.cTop}px`,
|
|
429
478
|
'--offset-bottom': `${this.cBottom}px`,
|
|
430
|
-
}, ...inheritedAttributes }, h("div", { key: '
|
|
479
|
+
}, ...inheritedAttributes }, h("div", { key: '3d8649b164d6324beaa1bc50e1d204ad06c2ec1a', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: 'dd2d3bed8690b4f5027a43f5ec60e7e7df18106d', class: {
|
|
431
480
|
'inner-scroll': true,
|
|
432
481
|
'scroll-x': scrollX,
|
|
433
482
|
'scroll-y': scrollY,
|
|
434
483
|
overscroll: (scrollX || scrollY) && forceOverscroll,
|
|
435
|
-
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '
|
|
484
|
+
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: 'dc3d4584d9e9afd43699525a619b8e873078fbbf' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
|
|
436
485
|
}
|
|
437
486
|
static get is() { return "ion-content"; }
|
|
438
487
|
static get encapsulation() { return "shadow"; }
|
|
@@ -595,6 +644,11 @@ export class Content {
|
|
|
595
644
|
}
|
|
596
645
|
};
|
|
597
646
|
}
|
|
647
|
+
static get states() {
|
|
648
|
+
return {
|
|
649
|
+
"sizeToContent": {}
|
|
650
|
+
};
|
|
651
|
+
}
|
|
598
652
|
static get events() {
|
|
599
653
|
return [{
|
|
600
654
|
"method": "ionScrollStart",
|
|
@@ -679,7 +733,7 @@ export class Content {
|
|
|
679
733
|
"return": "Promise<void>"
|
|
680
734
|
},
|
|
681
735
|
"docs": {
|
|
682
|
-
"text": "
|
|
736
|
+
"text": "Recalculates the content dimensions and whether it should size itself to\nits content. Called by overlays when something they own changes, such as\na header finishing its render or `--height` being updated.",
|
|
683
737
|
"tags": [{
|
|
684
738
|
"name": "internal",
|
|
685
739
|
"text": undefined
|
|
@@ -77,7 +77,12 @@
|
|
|
77
77
|
--max-width: auto;
|
|
78
78
|
--height: 100%;
|
|
79
79
|
--min-height: auto;
|
|
80
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Clamps a content-sized `--height` (auto, fit-content, ...) to the
|
|
82
|
+
* overlay, giving the wrapper's flex children something to shrink
|
|
83
|
+
* toward so `ion-content` scrolls instead of overflowing.
|
|
84
|
+
*/
|
|
85
|
+
--max-height: 100%;
|
|
81
86
|
--overflow: hidden;
|
|
82
87
|
--border-radius: 0;
|
|
83
88
|
--border-width: 0;
|
|
@@ -129,8 +134,14 @@ ion-backdrop {
|
|
|
129
134
|
/**
|
|
130
135
|
* The wrapper receives programmatic focus for screen readers but should not
|
|
131
136
|
* show a visible focus ring, which is meant only for keyboard navigation.
|
|
137
|
+
*
|
|
138
|
+
* A flex layout is required for the wrapper to size itself to its content
|
|
139
|
+
* when the modal is content-sized (`--height` is auto, fit-content, ...).
|
|
140
|
+
* This makes it so that the content can scroll when it overflows the wrapper.
|
|
132
141
|
*/
|
|
133
142
|
.modal-wrapper {
|
|
143
|
+
display: flex;
|
|
144
|
+
flex-direction: column;
|
|
134
145
|
outline: none;
|
|
135
146
|
}
|
|
136
147
|
|
|
@@ -21,8 +21,8 @@ import { mdEnterAnimation } from "./animations/md.enter";
|
|
|
21
21
|
import { mdLeaveAnimation } from "./animations/md.leave";
|
|
22
22
|
import { createSheetGesture } from "./gestures/sheet";
|
|
23
23
|
import { createSwipeToCloseGesture, SwipeToCloseDefaults } from "./gestures/swipe-to-close";
|
|
24
|
-
import { getInitialSafeAreaConfig, getPositionBasedSafeAreaConfig, applySafeAreaOverrides, clearSafeAreaOverrides, getRootSafeAreaTop, onRootSafeAreaTopChange,
|
|
25
|
-
import { setCardStatusBarDark, setCardStatusBarDefault } from "./utils";
|
|
24
|
+
import { getInitialSafeAreaConfig, getPositionBasedSafeAreaConfig, applySafeAreaOverrides, clearSafeAreaOverrides, getRootSafeAreaTop, onRootSafeAreaTopChange, getModalCoveredAxes, } from "./safe-area-utils";
|
|
25
|
+
import { onModalHeightChange, setCardStatusBarDark, setCardStatusBarDefault } from "./utils";
|
|
26
26
|
// TODO(FW-2832): types
|
|
27
27
|
/**
|
|
28
28
|
* @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
|
|
@@ -1053,7 +1053,7 @@ export class Modal {
|
|
|
1053
1053
|
/**
|
|
1054
1054
|
* Creates the context object for safe-area utilities.
|
|
1055
1055
|
*
|
|
1056
|
-
* `
|
|
1056
|
+
* `coveredAxes` is only set by `setInitialSafeAreaOverrides()`
|
|
1057
1057
|
* because it is only read by `getInitialSafeAreaConfig()`. Other callers
|
|
1058
1058
|
* (resize handler, post-animation update, fullscreen-padding apply) would
|
|
1059
1059
|
* pay a `getComputedStyle()` cost for a value they never consult.
|
|
@@ -1067,6 +1067,26 @@ export class Modal {
|
|
|
1067
1067
|
currentBreakpoint: this.currentBreakpoint,
|
|
1068
1068
|
};
|
|
1069
1069
|
}
|
|
1070
|
+
/**
|
|
1071
|
+
* Keeps the content's sizing in sync with `--height`. The content reads the
|
|
1072
|
+
* property to determine whether it should size itself to its content, and
|
|
1073
|
+
* changes to `--height` on an ancestor or the root can change that behavior
|
|
1074
|
+
* without changing the modal itself.
|
|
1075
|
+
*/
|
|
1076
|
+
watchHeightForContent() {
|
|
1077
|
+
/**
|
|
1078
|
+
* A sheet's height comes from its breakpoints, so its content never sizes
|
|
1079
|
+
* itself to `--height`. Watching it would cause the drag to recalculate on
|
|
1080
|
+
* every frame.
|
|
1081
|
+
*/
|
|
1082
|
+
if (this.isSheetModal) {
|
|
1083
|
+
return;
|
|
1084
|
+
}
|
|
1085
|
+
this.unsubscribeHeightChange?.();
|
|
1086
|
+
this.unsubscribeHeightChange = onModalHeightChange(this.el, () => {
|
|
1087
|
+
this.el.querySelectorAll('ion-content').forEach((contentEl) => contentEl.recalculateDimensions());
|
|
1088
|
+
});
|
|
1089
|
+
}
|
|
1070
1090
|
/**
|
|
1071
1091
|
* Sets initial safe-area overrides before modal animation.
|
|
1072
1092
|
* Called in present() before animation starts.
|
|
@@ -1080,10 +1100,11 @@ export class Modal {
|
|
|
1080
1100
|
setInitialSafeAreaOverrides() {
|
|
1081
1101
|
const context = {
|
|
1082
1102
|
...this.getSafeAreaContext(),
|
|
1083
|
-
|
|
1103
|
+
coveredAxes: getModalCoveredAxes(this.el),
|
|
1084
1104
|
};
|
|
1085
1105
|
const safeAreaConfig = getInitialSafeAreaConfig(context);
|
|
1086
1106
|
applySafeAreaOverrides(this.el, safeAreaConfig);
|
|
1107
|
+
this.watchHeightForContent();
|
|
1087
1108
|
// Set the internal offset property with the resolved root safe-area-top value
|
|
1088
1109
|
if (context.isSheetModal) {
|
|
1089
1110
|
this.updateSheetOffsetTop();
|
|
@@ -1203,6 +1224,8 @@ export class Modal {
|
|
|
1203
1224
|
clearSafeAreaOverrides(this.el);
|
|
1204
1225
|
this.unsubscribeRootSafeAreaTop?.();
|
|
1205
1226
|
this.unsubscribeRootSafeAreaTop = undefined;
|
|
1227
|
+
this.unsubscribeHeightChange?.();
|
|
1228
|
+
this.unsubscribeHeightChange = undefined;
|
|
1206
1229
|
// Remove internal sheet offset property
|
|
1207
1230
|
this.el.style.removeProperty('--ion-modal-offset-top');
|
|
1208
1231
|
const { contentEl } = this.findContentAndFooter();
|
|
@@ -1240,7 +1263,7 @@ export class Modal {
|
|
|
1240
1263
|
const isCardModal = presentingElement !== undefined && mode === 'ios';
|
|
1241
1264
|
const isHandleCycle = handleBehavior === 'cycle';
|
|
1242
1265
|
const isSheetModalWithHandle = isSheetModal && showHandle;
|
|
1243
|
-
return (h(Host, { key: '
|
|
1266
|
+
return (h(Host, { key: '17a95bd7722bac2344bea041aff97db17f55c0cf', "no-router": true,
|
|
1244
1267
|
// Allow the modal to be navigable when the handle is focusable
|
|
1245
1268
|
tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1, ...htmlAttributes, style: {
|
|
1246
1269
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
@@ -1253,7 +1276,7 @@ export class Modal {
|
|
|
1253
1276
|
'overlay-hidden': true,
|
|
1254
1277
|
[FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false,
|
|
1255
1278
|
...getClassMap(this.cssClass),
|
|
1256
|
-
}, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, h("ion-backdrop", { key: '
|
|
1279
|
+
}, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, h("ion-backdrop", { key: '9dab1ef4771c0d847ba2be8672afbaa2748517f3', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '64af7ed1c5f552b61fc4b9387b926acc76c8a99a', class: "modal-shadow" }), h("div", { key: '7e76d77d5b2e8f0467bb793facf5aa86f8d01bbe',
|
|
1257
1280
|
/*
|
|
1258
1281
|
role and aria-modal must be used on the
|
|
1259
1282
|
same element. They must also be set inside the
|
|
@@ -1266,9 +1289,9 @@ export class Modal {
|
|
|
1266
1289
|
without the tabindex focus() would be a no-op and screen readers
|
|
1267
1290
|
may not properly announce the dialog and its content when it opens.
|
|
1268
1291
|
*/
|
|
1269
|
-
role: "dialog", ...inheritedAttributes, "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }, showHandle && (h("button", { key: '
|
|
1292
|
+
role: "dialog", ...inheritedAttributes, "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }, showHandle && (h("button", { key: '5efc0bb0a59adcc594ac48da9fd90e57908a7ffb', class: "modal-handle",
|
|
1270
1293
|
// Prevents the handle from receiving keyboard focus when it does not cycle
|
|
1271
|
-
tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '
|
|
1294
|
+
tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '6175fcd0b39c086b4e9eb9e96c4d631c2a86774b', onSlotchange: this.onSlotChange }))));
|
|
1272
1295
|
}
|
|
1273
1296
|
static get is() { return "ion-modal"; }
|
|
1274
1297
|
static get encapsulation() { return "shadow"; }
|
|
@@ -77,7 +77,12 @@
|
|
|
77
77
|
--max-width: auto;
|
|
78
78
|
--height: 100%;
|
|
79
79
|
--min-height: auto;
|
|
80
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Clamps a content-sized `--height` (auto, fit-content, ...) to the
|
|
82
|
+
* overlay, giving the wrapper's flex children something to shrink
|
|
83
|
+
* toward so `ion-content` scrolls instead of overflowing.
|
|
84
|
+
*/
|
|
85
|
+
--max-height: 100%;
|
|
81
86
|
--overflow: hidden;
|
|
82
87
|
--border-radius: 0;
|
|
83
88
|
--border-width: 0;
|
|
@@ -129,8 +134,14 @@ ion-backdrop {
|
|
|
129
134
|
/**
|
|
130
135
|
* The wrapper receives programmatic focus for screen readers but should not
|
|
131
136
|
* show a visible focus ring, which is meant only for keyboard navigation.
|
|
137
|
+
*
|
|
138
|
+
* A flex layout is required for the wrapper to size itself to its content
|
|
139
|
+
* when the modal is content-sized (`--height` is auto, fit-content, ...).
|
|
140
|
+
* This makes it so that the content can scroll when it overflows the wrapper.
|
|
132
141
|
*/
|
|
133
142
|
.modal-wrapper {
|
|
143
|
+
display: flex;
|
|
144
|
+
flex-direction: column;
|
|
134
145
|
outline: none;
|
|
135
146
|
}
|
|
136
147
|
|