@ionic/core 9.0.7-nightly.20261005 → 9.0.7-nightly.20261007
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-D0jSx7rE.js → p--cshUOAU.js} +1 -1
- package/components/{p-DSmHJ2DH.js → p-7KepMw9O.js} +1 -1
- package/components/p-B02CcbPD.js +4 -0
- package/components/{p-DlUdjUlf.js → p-B4IBdPVJ.js} +1 -1
- package/components/{p-DGLuPe1e.js → p-BG2lMobd.js} +1 -1
- package/components/{p-BLjEwM6v.js → p-BMHdI-wb.js} +1 -1
- package/components/{p-CAQG0btC.js → p-BODcC-C0.js} +1 -1
- package/components/{p-yjLe0sN2.js → p-BVNUhOOf.js} +1 -1
- package/components/{p-Canp1qah.js → p-Ba9_OzSY.js} +1 -1
- package/components/{p-CHHkdXfP.js → p-BqyLLYLm.js} +1 -1
- package/components/{p-C_NQIzjP.js → p-C1AxSUnp.js} +1 -1
- package/{dist/ionic/p-PkaVMJga.js → components/p-C7r5Gja6.js} +1 -1
- package/components/{p-y7Nhe3de.js → p-CKiqp4Vl.js} +1 -1
- package/components/{p-CvzE7FFp.js → p-C_gnmBt2.js} +1 -1
- package/components/{p-C9ioHZq-.js → p-CdrNHfZl.js} +1 -1
- package/components/{p-Dlr7b3_2.js → p-ChkSQqfP.js} +1 -1
- package/components/{p-LH1I_Zhd.js → p-ChsJlFCQ.js} +1 -1
- package/components/{p-DGUed0uX.js → p-CjPRDxby.js} +1 -1
- package/components/p-CohRJRIu.js +4 -0
- package/components/{p-BrOSQhkA.js → p-CqvARtmt.js} +1 -1
- package/components/p-Ct2aBEue.js +4 -0
- package/components/{p-6sKRBFnK.js → p-CvyvLbPe.js} +1 -1
- package/components/{p-C7rB-0-1.js → p-CwEis84J.js} +1 -1
- package/components/p-CxEV3Vwy.js +4 -0
- package/components/p-Cyajikho.js +4 -0
- package/components/{p-PPagT42x.js → p-D64Tyi-z.js} +1 -1
- package/components/{p-CXy2v7GI.js → p-DBtFJlTi.js} +1 -1
- package/components/p-DD92Fw3n.js +4 -0
- package/components/{p-DM2jMsSO.js → p-DDI6VLW9.js} +1 -1
- package/components/{p-DWGgvN5e.js → p-DHo45oj7.js} +1 -1
- package/components/{p-BSJriPuC.js → p-DMPsc_0r.js} +1 -1
- package/{dist/ionic/p-Bv-6401R.js → components/p-Dbi3KqKm.js} +1 -1
- package/components/{p-BinR4_P7.js → p-DhfJAkyd.js} +1 -1
- package/components/{p-CiXOsJF2.js → p-DnGlmM4u.js} +1 -1
- package/components/{p-CTUMJM0R.js → p-Drpw2dyl.js} +1 -1
- package/components/{p-BKxLivx4.js → p-Dvyv9SMk.js} +1 -1
- package/components/{p-T2dnrBya.js → p-GpqwNbxf.js} +1 -1
- package/components/{p-BEiYs-sz.js → p-HthJZjZ6.js} +1 -1
- package/components/p-IQN1T5zw.js +4 -0
- package/components/{p-B_tZQKpS.js → p-KbMCbGRA.js} +1 -1
- package/components/p-ODGeXc3M.js +4 -0
- package/components/p-R4UxBukQ.js +4 -0
- package/components/{p-fFx6WCTj.js → p-TLtgwTFF.js} +1 -1
- package/components/p-Uk13YgEc.js +4 -0
- package/components/{p-B8HBLiYi.js → p-V1THdfzs.js} +1 -1
- package/components/{p-D4NOsSCE.js → p-YNnH1_Hs.js} +1 -1
- package/components/{p-RJT5zTbD.js → p-ZrYBjOcc.js} +1 -1
- package/components/{p-eJpG4UbM.js → p-_y7kwBO8.js} +1 -1
- package/components/{p-CiFFeRH9.js → p-hLu-eIbb.js} +1 -1
- package/components/{p-CQjNc-Pz.js → p-jsVMT15X.js} +1 -1
- package/components/{p-CzykzqAO.js → p-r59A3wQk.js} +1 -1
- package/components/{p-DPyjiKOq.js → p-yGD6MBgf.js} +1 -1
- package/dist/cjs/{animation-BFKyYY11.js → animation-DcgLg_PI.js} +2 -2
- package/dist/cjs/{app-globals-BLTzqkrC.js → app-globals-BoFCZq0K.js} +1 -1
- package/dist/cjs/{attribute-controller-CXIeB0Mn.js → attribute-controller-BjTE2TOf.js} +1 -1
- package/dist/cjs/{button-active-CEQaiV9N.js → button-active-FdsfRDY_.js} +2 -2
- package/dist/cjs/{capacitor-BMzmHhwe.js → capacitor-C6Pp4Z7A.js} +1 -1
- package/dist/cjs/{format-CdRlDqPs.js → format-CVjpvAl1.js} +1 -1
- package/dist/cjs/{framework-delegate-DTLbqaaO.js → framework-delegate-JbKIVMzR.js} +1 -1
- package/dist/cjs/{haptic-CJVUv_GB.js → haptic--4QteuuM.js} +1 -1
- package/dist/cjs/{helpers-Crluoxqu.js → helpers-Cqr69qxA.js} +1 -1
- package/dist/cjs/{index-BSD7toMO.js → index-B4ONUQRp.js} +1 -1
- package/dist/cjs/{index-BKpybYNI.js → index-BQpSekmz.js} +2 -2
- package/dist/cjs/{index-CElfU-dK.js → index-BhWiDK25.js} +6 -5
- package/dist/cjs/{index-SAR1xwtW.js → index-BiQyIvoc.js} +40 -27
- package/dist/cjs/{index-BAM4223M.js → index-CNaZ6SYM.js} +2 -2
- package/dist/cjs/{index-CgXTRA_-.js → index-DUiuw_fH.js} +4 -4
- package/dist/cjs/index.cjs.js +11 -11
- package/dist/cjs/{input-shims-CHghGZe-.js → input-shims-2AsXPZ5m.js} +5 -5
- package/dist/cjs/{input.utils-BBZr0wjw.js → input.utils-Becpo0ax.js} +1 -1
- package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-action-sheet.cjs.entry.js +11 -11
- package/dist/cjs/ion-alert.cjs.entry.js +11 -11
- package/dist/cjs/ion-app_8.cjs.entry.js +16 -16
- 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 +4 -4
- package/dist/cjs/ion-card_5.cjs.entry.js +4 -4
- 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 +6 -6
- 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 -5
- package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-item_8.cjs.entry.js +4 -4
- package/dist/cjs/ion-loading.cjs.entry.js +7 -7
- package/dist/cjs/ion-menu_3.cjs.entry.js +10 -9
- package/dist/cjs/ion-modal.cjs.entry.js +11 -11
- 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 +5 -5
- package/dist/cjs/ion-picker.cjs.entry.js +2 -2
- package/dist/cjs/ion-popover.cjs.entry.js +7 -7
- 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 -8
- package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -6
- 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 +7 -7
- package/dist/cjs/ion-select_3.cjs.entry.js +8 -8
- 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 -6
- 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 -5
- package/dist/cjs/ion-toast.cjs.entry.js +7 -7
- package/dist/cjs/ion-toggle.cjs.entry.js +6 -6
- package/dist/cjs/{ionic-global-C1h8Yi_K.js → ionic-global-48ceLiJ6.js} +1 -1
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-YFSxiyP_.js → ios.transition-D85_rHf5.js} +4 -4
- package/dist/cjs/{item-multiple-inputs-h2PyAFzG.js → item-multiple-inputs-C-hz7xrh.js} +1 -1
- package/dist/cjs/{keyboard-C-C7xMKk.js → keyboard-BlHp4a_c.js} +1 -1
- package/dist/cjs/{keyboard-Cv-LNReK.js → keyboard-c2_I35b-.js} +4 -4
- package/dist/cjs/{keyboard-controller-CLcFxSnb.js → keyboard-controller-DHS0BgXp.js} +2 -2
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/{md.transition-Cm8yg0UK.js → md.transition-Ce9X1WXr.js} +4 -4
- package/dist/cjs/{overlays-C68wNDWY.js → overlays-CLld3axA.js} +79 -20
- package/dist/cjs/{select-option-render-C-Yh9yZG.js → select-option-render-CzyhrkOu.js} +2 -2
- package/dist/cjs/{slot-mutation-controller-zixZ5LyH.js → slot-mutation-controller-ClDxh3EK.js} +1 -1
- package/dist/cjs/{status-tap-C3frTJ4c.js → status-tap-CDA0Y3Ad.js} +3 -3
- package/dist/cjs/{swipe-back-BigumsQ1.js → swipe-back-Idb4gqUk.js} +2 -2
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/menu/menu.js +4 -3
- package/dist/collection/utils/hardware-back-button.js +41 -12
- package/dist/collection/utils/menu-controller/index.js +2 -1
- package/dist/collection/utils/overlays.js +30 -4
- package/dist/docs.json +2 -2
- package/dist/esm/{animation-CFd8Olt3.js → animation-DmtJpz89.js} +2 -2
- package/dist/esm/{app-globals-7GHLBkwd.js → app-globals-CNfpAPW6.js} +1 -1
- package/dist/esm/{attribute-controller-Cn665x42.js → attribute-controller-DPMIcbef.js} +1 -1
- package/dist/esm/{button-active-DMuYeDQN.js → button-active-DVk40Sjl.js} +2 -2
- package/dist/esm/{capacitor-CoEgIpR9.js → capacitor-CHJaJ9aX.js} +1 -1
- package/dist/esm/{format-C9zPmwKU.js → format-Ck1cw5z7.js} +1 -1
- package/dist/esm/{framework-delegate-DeT5pmPB.js → framework-delegate-CDjM1vRH.js} +1 -1
- package/dist/esm/{haptic-Dxm7ZmT5.js → haptic-WXfMCob9.js} +1 -1
- package/dist/esm/{helpers-B54ynME_.js → helpers-BJqKF1pr.js} +1 -1
- package/dist/esm/{index-B8iieOdw.js → index-BBASprVu.js} +4 -4
- package/dist/esm/{index-D9OR05yj.js → index-BpRUsN_W.js} +40 -27
- package/dist/esm/{index-D4ZMZz_3.js → index-CK8uF0iB.js} +1 -1
- package/dist/esm/{index-D_xZtbw6.js → index-Clv8QC5L.js} +2 -2
- package/dist/esm/{index-B9jhwvmO.js → index-DIouXecD.js} +6 -5
- package/dist/esm/{index--21qeSt0.js → index-TkLga3ma.js} +2 -2
- package/dist/esm/index.js +11 -11
- package/dist/esm/{input-shims-MCrhq67U.js → input-shims-C1iYF5JK.js} +5 -5
- package/dist/esm/{input.utils-B-IIWrwT.js → input.utils-DZY_K8Po.js} +1 -1
- package/dist/esm/ion-accordion_2.entry.js +3 -3
- package/dist/esm/ion-action-sheet.entry.js +11 -11
- package/dist/esm/ion-alert.entry.js +11 -11
- package/dist/esm/ion-app_8.entry.js +16 -16
- 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 +4 -4
- package/dist/esm/ion-card_5.entry.js +4 -4
- 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 -6
- 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 -5
- package/dist/esm/ion-item-option_3.entry.js +4 -4
- package/dist/esm/ion-item_8.entry.js +4 -4
- package/dist/esm/ion-loading.entry.js +7 -7
- package/dist/esm/ion-menu_3.entry.js +10 -9
- package/dist/esm/ion-modal.entry.js +11 -11
- 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 -5
- package/dist/esm/ion-picker.entry.js +2 -2
- package/dist/esm/ion-popover.entry.js +7 -7
- 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 -8
- package/dist/esm/ion-reorder_2.entry.js +6 -6
- 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 -7
- package/dist/esm/ion-select_3.entry.js +8 -8
- 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 -6
- 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 -5
- package/dist/esm/ion-toast.entry.js +7 -7
- package/dist/esm/ion-toggle.entry.js +6 -6
- package/dist/esm/{ionic-global-B-G43ddm.js → ionic-global-Cep6oYzK.js} +1 -1
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-CRfGj4Mo.js → ios.transition-B8netzsb.js} +4 -4
- package/dist/esm/{item-multiple-inputs-BSD9wGHO.js → item-multiple-inputs-Bd2LO7qK.js} +1 -1
- package/dist/esm/{keyboard-DDw62P0D.js → keyboard-B4Y-Gph8.js} +4 -4
- package/dist/esm/{keyboard-ly3M0GO7.js → keyboard-Cmqp5iZD.js} +1 -1
- package/dist/esm/{keyboard-controller-Dzjet5wD.js → keyboard-controller-B2NoF7bV.js} +2 -2
- package/dist/esm/loader.js +4 -4
- package/dist/esm/{md.transition-wqThNy_C.js → md.transition-DNCSSiXk.js} +4 -4
- package/dist/esm/{overlays-BQnV0HAU.js → overlays-DmDY-El7.js} +78 -21
- package/dist/esm/{select-option-render-CGxPejmz.js → select-option-render-BSDT9oSA.js} +2 -2
- package/dist/esm/{slot-mutation-controller-C3s4-_YN.js → slot-mutation-controller-hAS2uJ7c.js} +1 -1
- package/dist/esm/{status-tap-DRx9wSD_.js → status-tap-VGRBYwiC.js} +3 -3
- package/dist/esm/{swipe-back-Ch3UU_US.js → swipe-back-DV3UpWzz.js} +2 -2
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-378341d1.entry.js → p-00cd107d.entry.js} +1 -1
- package/dist/ionic/{p-e7414c33.entry.js → p-01b7e3f2.entry.js} +1 -1
- package/dist/ionic/{p-f99cf5aa.entry.js → p-0a789930.entry.js} +1 -1
- package/dist/ionic/{p-624f2fa8.entry.js → p-0b09c60e.entry.js} +1 -1
- package/dist/ionic/{p-150f350e.entry.js → p-0c32c626.entry.js} +1 -1
- package/dist/ionic/{p-30dcf43b.entry.js → p-0f97175e.entry.js} +1 -1
- package/dist/ionic/{p-e1969fd1.entry.js → p-107a81a6.entry.js} +1 -1
- package/dist/ionic/{p-28f506ce.entry.js → p-2124fd4f.entry.js} +1 -1
- package/dist/ionic/{p-b710b4b8.entry.js → p-230f510c.entry.js} +1 -1
- package/dist/ionic/{p-7441ed2b.entry.js → p-27d96a9b.entry.js} +1 -1
- package/dist/ionic/{p-93cd738b.entry.js → p-362dcd86.entry.js} +1 -1
- package/dist/ionic/{p-42b2a992.entry.js → p-4bd80334.entry.js} +1 -1
- package/dist/ionic/{p-1213b719.entry.js → p-4d785062.entry.js} +1 -1
- package/dist/ionic/{p-3c4b0ba7.entry.js → p-4e4e5919.entry.js} +1 -1
- package/dist/ionic/{p-6865f0e1.entry.js → p-4f25b926.entry.js} +1 -1
- package/dist/ionic/{p-1110da0d.entry.js → p-539d6c8e.entry.js} +1 -1
- package/dist/ionic/{p-9dd9788c.entry.js → p-5bb24bce.entry.js} +1 -1
- package/dist/ionic/{p-f19e50f8.entry.js → p-60780b88.entry.js} +1 -1
- package/dist/ionic/{p-fee863dc.entry.js → p-62c87f3d.entry.js} +1 -1
- package/dist/ionic/{p-58f914ee.entry.js → p-64ac3864.entry.js} +1 -1
- package/dist/ionic/{p-37f46670.entry.js → p-6c7b5930.entry.js} +1 -1
- package/dist/ionic/{p-e338693a.entry.js → p-77252596.entry.js} +1 -1
- package/dist/ionic/p-7ce9c6f8.entry.js +4 -0
- package/dist/ionic/{p-0517aec4.entry.js → p-7db20410.entry.js} +1 -1
- package/dist/ionic/{p-834afcf7.entry.js → p-7e9c2a97.entry.js} +1 -1
- package/dist/ionic/p-7l6ENjIV.js +4 -0
- package/dist/ionic/{p-daaecea3.entry.js → p-82abf431.entry.js} +1 -1
- package/dist/ionic/{p-e4c3f17f.entry.js → p-8b79061e.entry.js} +1 -1
- package/dist/ionic/{p-b9659d21.entry.js → p-8c85e250.entry.js} +1 -1
- package/dist/ionic/{p-f20b6a9b.entry.js → p-8d2ccf0c.entry.js} +1 -1
- package/dist/ionic/{p-e137f724.entry.js → p-8d651adb.entry.js} +1 -1
- package/dist/ionic/{p-eb762f80.entry.js → p-8db08782.entry.js} +1 -1
- package/dist/ionic/{p-76309bab.entry.js → p-91f3cd8b.entry.js} +1 -1
- package/dist/ionic/{p-2e6e933d.entry.js → p-930c3538.entry.js} +1 -1
- package/dist/ionic/{p-083b1119.entry.js → p-9ffccbf1.entry.js} +1 -1
- package/dist/ionic/{p-tXpzvta8.js → p-B8IuTu_r.js} +1 -1
- package/dist/ionic/p-BNXIurCt.js +4 -0
- package/dist/ionic/{p-BUB5OrpU.js → p-BO10QT9r.js} +1 -1
- package/dist/ionic/p-BOLqP2-V.js +4 -0
- package/dist/ionic/{p-DxvRP6ld.js → p-BY4FwwBp.js} +1 -1
- package/dist/ionic/p-BdHBcCZF.js +4 -0
- package/dist/ionic/p-BexAj0yw.js +4 -0
- package/dist/ionic/{p-kKvGoaEe.js → p-Bnc1L7Rk.js} +1 -1
- package/dist/ionic/p-BpRUsN_W.js +6 -0
- package/dist/ionic/p-Bppj2PE0.js +4 -0
- package/dist/ionic/p-BuLlVedw.js +4 -0
- package/dist/ionic/{p-CsWrz1c2.js → p-Bx5x5GJV.js} +1 -1
- package/dist/ionic/p-C1WYZOZj.js +4 -0
- package/dist/ionic/p-C2LaBx3E.js +4 -0
- package/dist/ionic/{p-DNxEB9-T.js → p-CXs4J83x.js} +1 -1
- package/dist/ionic/{p-CTrwMl44.js → p-CngfKMRU.js} +1 -1
- package/dist/ionic/{p-B4xjg_Qu.js → p-Co7eql8D.js} +1 -1
- package/dist/ionic/p-D13gXhdC.js +4 -0
- package/dist/ionic/{p-BtHAx8im.js → p-D926OmIX.js} +1 -1
- package/dist/ionic/{p-BCgqWm-V.js → p-DPNVo1nr.js} +1 -1
- package/{components/p-CVVUo4J1.js → dist/ionic/p-DQXtveHv.js} +1 -1
- package/dist/ionic/p-DXXGkPA8.js +4 -0
- package/dist/ionic/{p-CCik51Nv.js → p-DfvWlTdB.js} +1 -1
- package/dist/ionic/p-DriE1ZAo.js +4 -0
- package/dist/ionic/{p-BhMQahM6.js → p-DxftXYZp.js} +1 -1
- package/dist/ionic/{p-CrAPHbJ3.js → p-SEecsUh7.js} +1 -1
- package/dist/ionic/{p-5c19330c.entry.js → p-a4389f13.entry.js} +1 -1
- package/dist/ionic/{p-f5dfb3a0.entry.js → p-af11d3c6.entry.js} +1 -1
- package/dist/ionic/{p-f9057f70.entry.js → p-af56702e.entry.js} +1 -1
- package/dist/ionic/{p-5b9666be.entry.js → p-b3aadfe8.entry.js} +1 -1
- package/dist/ionic/p-b5bcbbc1.entry.js +4 -0
- package/dist/ionic/{p-3a5faaa8.entry.js → p-b9ed3a52.entry.js} +1 -1
- package/dist/ionic/{p-61b304c8.entry.js → p-bfdbe24b.entry.js} +1 -1
- package/dist/ionic/{p-b0a3dd1a.entry.js → p-c250b6b0.entry.js} +1 -1
- package/dist/ionic/{p-20d1ac29.entry.js → p-c293f854.entry.js} +1 -1
- package/dist/ionic/p-c83dbc12.entry.js +4 -0
- package/dist/ionic/{p-0ab133d6.entry.js → p-d0e374f8.entry.js} +1 -1
- package/dist/ionic/{p-24b0a961.entry.js → p-d72accc4.entry.js} +1 -1
- package/dist/ionic/{p-636349e2.entry.js → p-d9a3dfd1.entry.js} +1 -1
- package/dist/ionic/p-e1haAYzm.js +4 -0
- package/dist/ionic/{p-e05073f6.entry.js → p-e7ab4def.entry.js} +1 -1
- package/dist/ionic/{p-9b78fedf.entry.js → p-eb989dc9.entry.js} +1 -1
- package/dist/ionic/{p-b1164028.entry.js → p-ec259ac5.entry.js} +1 -1
- package/dist/ionic/{p-efa00ce5.entry.js → p-f6fcd4f8.entry.js} +1 -1
- package/dist/ionic/{p-3bd7e5df.entry.js → p-fcb04fb5.entry.js} +1 -1
- package/dist/ionic/{p-B4ELlbJE.js → p-nCAPr1Ah.js} +1 -1
- package/dist/types/utils/config.d.ts +4 -1
- package/dist/types/utils/hardware-back-button.d.ts +11 -0
- package/dist/types/utils/overlays.d.ts +5 -2
- package/hydrate/index.js +414 -190
- package/hydrate/index.mjs +414 -190
- package/package.json +1 -1
- package/components/p-BKeulLTJ.js +0 -4
- package/components/p-BNnmwjuy.js +0 -4
- package/components/p-BUVGbkSc.js +0 -4
- package/components/p-BriaEJK8.js +0 -4
- package/components/p-BsLM9eQu.js +0 -4
- package/components/p-Bu6O-veK.js +0 -4
- package/components/p-CJgshb3W.js +0 -4
- package/components/p-CcQQ8oRo.js +0 -4
- package/components/p-Ctw69DyZ.js +0 -4
- package/components/p-WMQuK_Tj.js +0 -4
- package/components/p-q2WJ5Igc.js +0 -4
- package/dist/ionic/p-52dc3309.entry.js +0 -4
- package/dist/ionic/p-83448626.entry.js +0 -4
- package/dist/ionic/p-B4wzg4z4.js +0 -4
- package/dist/ionic/p-BChRVdVv.js +0 -4
- package/dist/ionic/p-BVEsh7-M.js +0 -4
- package/dist/ionic/p-Ba6ZV-qU.js +0 -4
- package/dist/ionic/p-CTmJSZcs.js +0 -4
- package/dist/ionic/p-CVwXN07G.js +0 -4
- package/dist/ionic/p-CgQdInM0.js +0 -4
- package/dist/ionic/p-D5akOqD0.js +0 -4
- package/dist/ionic/p-D9OR05yj.js +0 -6
- package/dist/ionic/p-DHf9V6zI.js +0 -4
- package/dist/ionic/p-DZUqAr_6.js +0 -4
- package/dist/ionic/p-Dzew6Qv7.js +0 -4
- package/dist/ionic/p-ba7bd621.entry.js +0 -4
- package/dist/ionic/p-vPo3vRFc.js +0 -4
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
var helpers = require('./helpers-
|
|
7
|
-
var index = require('./index-
|
|
8
|
-
var ionicGlobal = require('./ionic-global-
|
|
9
|
-
var frameworkDelegate = require('./framework-delegate-
|
|
6
|
+
var helpers = require('./helpers-Cqr69qxA.js');
|
|
7
|
+
var index = require('./index-BiQyIvoc.js');
|
|
8
|
+
var ionicGlobal = require('./ionic-global-48ceLiJ6.js');
|
|
9
|
+
var frameworkDelegate = require('./framework-delegate-JbKIVMzR.js');
|
|
10
10
|
var gestureController = require('./gesture-controller-CeJslptU.js');
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -35,6 +35,23 @@ const shouldUseCloseWatcher = () => index.config.get('experimentalCloseWatcher',
|
|
|
35
35
|
const blockHardwareBackButton = () => {
|
|
36
36
|
document.addEventListener('backbutton', () => { });
|
|
37
37
|
};
|
|
38
|
+
const closeWatcherConditions = [];
|
|
39
|
+
let syncCloseWatcher;
|
|
40
|
+
/**
|
|
41
|
+
* Registers a check for whether the back button
|
|
42
|
+
* has something to close. The CloseWatcher is only
|
|
43
|
+
* active while one of these checks passes.
|
|
44
|
+
*/
|
|
45
|
+
const addCloseWatcherCondition = (condition) => {
|
|
46
|
+
closeWatcherConditions.push(condition);
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Call this whenever something the back button
|
|
50
|
+
* can close opens or closes.
|
|
51
|
+
*/
|
|
52
|
+
const updateCloseWatcher = () => {
|
|
53
|
+
syncCloseWatcher?.();
|
|
54
|
+
};
|
|
38
55
|
const startHardwareBackButton = () => {
|
|
39
56
|
const doc = document;
|
|
40
57
|
let busy = false;
|
|
@@ -86,32 +103,44 @@ const startHardwareBackButton = () => {
|
|
|
86
103
|
processHandlers();
|
|
87
104
|
};
|
|
88
105
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* events firing.
|
|
106
|
+
* Android WebView never sends the hardware back
|
|
107
|
+
* button to a CloseWatcher, so hybrid apps still
|
|
108
|
+
* need this. Browsers never fire backbutton.
|
|
93
109
|
*/
|
|
110
|
+
doc.addEventListener('backbutton', backButtonCallback);
|
|
94
111
|
if (shouldUseCloseWatcher()) {
|
|
95
112
|
let watcher;
|
|
96
|
-
|
|
97
|
-
|
|
113
|
+
/**
|
|
114
|
+
* An active CloseWatcher stops the back button from
|
|
115
|
+
* navigating, so only keep one while there's something to close.
|
|
116
|
+
*/
|
|
117
|
+
syncCloseWatcher = () => {
|
|
118
|
+
const canClose = closeWatcherConditions.some((condition) => condition());
|
|
119
|
+
if (!canClose) {
|
|
120
|
+
watcher?.destroy();
|
|
121
|
+
watcher = undefined;
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (watcher !== undefined) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
98
127
|
watcher = new helpers.win.CloseWatcher();
|
|
99
128
|
/**
|
|
100
129
|
* Once a close request happens
|
|
101
130
|
* the watcher gets destroyed.
|
|
102
131
|
* As a result, we need to re-configure
|
|
103
132
|
* the watcher so we can respond to other
|
|
104
|
-
* close requests
|
|
133
|
+
* close requests, including after one that
|
|
134
|
+
* closed nothing, like a modal whose canDismiss
|
|
135
|
+
* returned false.
|
|
105
136
|
*/
|
|
106
137
|
watcher.onclose = () => {
|
|
138
|
+
watcher = undefined;
|
|
107
139
|
backButtonCallback();
|
|
108
|
-
|
|
140
|
+
syncCloseWatcher?.();
|
|
109
141
|
};
|
|
110
142
|
};
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
doc.addEventListener('backbutton', backButtonCallback);
|
|
143
|
+
syncCloseWatcher();
|
|
115
144
|
}
|
|
116
145
|
};
|
|
117
146
|
const OVERLAY_BACK_BUTTON_PRIORITY = 100;
|
|
@@ -121,9 +150,11 @@ var hardwareBackButton = /*#__PURE__*/Object.freeze({
|
|
|
121
150
|
__proto__: null,
|
|
122
151
|
MENU_BACK_BUTTON_PRIORITY: MENU_BACK_BUTTON_PRIORITY,
|
|
123
152
|
OVERLAY_BACK_BUTTON_PRIORITY: OVERLAY_BACK_BUTTON_PRIORITY,
|
|
153
|
+
addCloseWatcherCondition: addCloseWatcherCondition,
|
|
124
154
|
blockHardwareBackButton: blockHardwareBackButton,
|
|
125
155
|
shouldUseCloseWatcher: shouldUseCloseWatcher,
|
|
126
|
-
startHardwareBackButton: startHardwareBackButton
|
|
156
|
+
startHardwareBackButton: startHardwareBackButton,
|
|
157
|
+
updateCloseWatcher: updateCloseWatcher
|
|
127
158
|
});
|
|
128
159
|
|
|
129
160
|
/**
|
|
@@ -209,6 +240,11 @@ const focusElementInContext = (hostToFocus, fallbackElement) => {
|
|
|
209
240
|
|
|
210
241
|
let lastOverlayIndex = 0;
|
|
211
242
|
let lastId = 0;
|
|
243
|
+
/**
|
|
244
|
+
* Every overlay except toast, which doesn't trap
|
|
245
|
+
* focus or close on back.
|
|
246
|
+
*/
|
|
247
|
+
const NON_TOAST_OVERLAYS = 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-popover';
|
|
212
248
|
const activeAnimations = new WeakMap();
|
|
213
249
|
/**
|
|
214
250
|
* Determines if the overlay's backdrop is always blocking (no background interaction).
|
|
@@ -335,7 +371,7 @@ const focusElementInOverlay = (hostToFocus, overlay) => {
|
|
|
335
371
|
* Should NOT include: Toast
|
|
336
372
|
*/
|
|
337
373
|
const trapKeyboardFocus = (ev, doc) => {
|
|
338
|
-
const lastOverlay = getPresentedOverlay(doc,
|
|
374
|
+
const lastOverlay = getPresentedOverlay(doc, NON_TOAST_OVERLAYS);
|
|
339
375
|
const target = ev.target;
|
|
340
376
|
/**
|
|
341
377
|
* If no active overlay, ignore this event.
|
|
@@ -518,6 +554,11 @@ const connectListeners = (doc) => {
|
|
|
518
554
|
doc.addEventListener('focus', (ev) => {
|
|
519
555
|
trapKeyboardFocus(ev, doc);
|
|
520
556
|
}, true);
|
|
557
|
+
/**
|
|
558
|
+
* Whether the overlay actually dismisses is checked at press time,
|
|
559
|
+
* since `backdropDismiss` can change while it's open.
|
|
560
|
+
*/
|
|
561
|
+
addCloseWatcherCondition(() => getPresentedOverlay(doc, NON_TOAST_OVERLAYS) !== undefined);
|
|
521
562
|
// handle back-button click
|
|
522
563
|
doc.addEventListener('ionBackButton', (ev) => {
|
|
523
564
|
const lastOverlay = getPresentedOverlay(doc);
|
|
@@ -641,7 +682,8 @@ const setRootAriaHidden = (hidden = false) => {
|
|
|
641
682
|
* Cleans up root `aria-hidden` and `backdrop-no-scroll` when
|
|
642
683
|
* an overlay is removed from the DOM without going through
|
|
643
684
|
* the `dismiss()` flow (e.g., when a framework unmounts the
|
|
644
|
-
* overlay during a route change).
|
|
685
|
+
* overlay during a route change). Also releases the
|
|
686
|
+
* CloseWatcher if nothing is left to close.
|
|
645
687
|
*
|
|
646
688
|
* Should be called from an overlay's `disconnectedCallback`
|
|
647
689
|
* when the overlay was still presented at the time of removal.
|
|
@@ -650,6 +692,7 @@ const cleanupRootFocusTrapAccessibility = () => {
|
|
|
650
692
|
if (typeof document === 'undefined') {
|
|
651
693
|
return;
|
|
652
694
|
}
|
|
695
|
+
updateCloseWatcher();
|
|
653
696
|
const remainingOverlays = getPresentedOverlays(document);
|
|
654
697
|
const hasRemainingLocking = remainingOverlays.some((o) => locksAppRoot(o));
|
|
655
698
|
if (!hasRemainingLocking) {
|
|
@@ -671,7 +714,9 @@ const applyRootLock = (el) => {
|
|
|
671
714
|
};
|
|
672
715
|
/**
|
|
673
716
|
* Re-applies the root lock that `cleanupRootFocusTrapAccessibility()` released.
|
|
674
|
-
* Call from `connectedCallback` when the overlay is still presented.
|
|
717
|
+
* Call from `connectedCallback` when the overlay is still presented. Also
|
|
718
|
+
* re-arms the CloseWatcher, which every overlay needs, so that happens
|
|
719
|
+
* before the `locksAppRoot` check.
|
|
675
720
|
*
|
|
676
721
|
* A synchronous move keeps the overlay connected, so the lock survives. A
|
|
677
722
|
* detach with a re-insert in a later task releases it, which is the shape a
|
|
@@ -681,6 +726,7 @@ const restoreRootFocusTrapAccessibility = (overlayEl) => {
|
|
|
681
726
|
if (typeof document === 'undefined') {
|
|
682
727
|
return;
|
|
683
728
|
}
|
|
729
|
+
updateCloseWatcher();
|
|
684
730
|
const el = overlayEl;
|
|
685
731
|
if (!locksAppRoot(el)) {
|
|
686
732
|
return;
|
|
@@ -894,6 +940,11 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
|
|
|
894
940
|
index.printIonError(`[${overlay.el.tagName.toLowerCase()}] - `, err);
|
|
895
941
|
}
|
|
896
942
|
overlay.el.remove();
|
|
943
|
+
/**
|
|
944
|
+
* Release the back button if nothing
|
|
945
|
+
* else is left to close.
|
|
946
|
+
*/
|
|
947
|
+
updateCloseWatcher();
|
|
897
948
|
return true;
|
|
898
949
|
};
|
|
899
950
|
const getAppRoot = (doc) => {
|
|
@@ -902,6 +953,12 @@ const getAppRoot = (doc) => {
|
|
|
902
953
|
const overlayAnimation = async (overlay, animationBuilder, baseEl, opts) => {
|
|
903
954
|
// Make overlay visible in case it's hidden
|
|
904
955
|
baseEl.classList.remove('overlay-hidden');
|
|
956
|
+
/**
|
|
957
|
+
* Removing `overlay-hidden` makes the overlay count
|
|
958
|
+
* as presented, so back can dismiss it while it
|
|
959
|
+
* animates in.
|
|
960
|
+
*/
|
|
961
|
+
updateCloseWatcher();
|
|
905
962
|
const aniRoot = overlay.el;
|
|
906
963
|
const animation = animationBuilder(aniRoot, opts);
|
|
907
964
|
if (!overlay.animated || !index.config.getBoolean('animated', true)) {
|
|
@@ -1131,6 +1188,7 @@ exports.GESTURE = GESTURE;
|
|
|
1131
1188
|
exports.MENU_BACK_BUTTON_PRIORITY = MENU_BACK_BUTTON_PRIORITY;
|
|
1132
1189
|
exports.OVERLAY_GESTURE_PRIORITY = OVERLAY_GESTURE_PRIORITY;
|
|
1133
1190
|
exports.actionSheetController = actionSheetController;
|
|
1191
|
+
exports.addCloseWatcherCondition = addCloseWatcherCondition;
|
|
1134
1192
|
exports.alertController = alertController;
|
|
1135
1193
|
exports.cleanupRootFocusTrapAccessibility = cleanupRootFocusTrapAccessibility;
|
|
1136
1194
|
exports.createDelegateController = createDelegateController;
|
|
@@ -1153,3 +1211,4 @@ exports.safeCall = safeCall;
|
|
|
1153
1211
|
exports.setOverlayId = setOverlayId;
|
|
1154
1212
|
exports.shouldUseCloseWatcher = shouldUseCloseWatcher;
|
|
1155
1213
|
exports.toastController = toastController;
|
|
1214
|
+
exports.updateCloseWatcher = updateCloseWatcher;
|
|
@@ -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-BiQyIvoc.js');
|
|
7
|
+
var index$1 = require('./index-B4ONUQRp.js');
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Converts a DOM node into a Stencil VNode (or text string) so the
|
|
@@ -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-BiQyIvoc.js');
|
|
7
|
+
var index$1 = require('./index-CNaZ6SYM.js');
|
|
8
|
+
var helpers = require('./helpers-Cqr69qxA.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-Cqr69qxA.js');
|
|
7
7
|
var dir = require('./dir-zwDPRE5K.js');
|
|
8
8
|
var index = require('./index-DRPqwSvU.js');
|
|
9
|
-
require('./index-
|
|
9
|
+
require('./index-BiQyIvoc.js');
|
|
10
10
|
require('./gesture-controller-CeJslptU.js');
|
|
11
11
|
|
|
12
12
|
const createSwipeBackGesture = (el, canStartHandler, onStartHandler, onMoveHandler, onEndHandler) => {
|
|
@@ -5,7 +5,7 @@ import { Build, Host, h } from "@stencil/core";
|
|
|
5
5
|
import { getTimeGivenProgression } from "../../utils/animation/cubic-bezier";
|
|
6
6
|
import { focusFirstDescendant, focusLastDescendant } from "../../utils/focus-trap";
|
|
7
7
|
import { GESTURE_CONTROLLER } from "../../utils/gesture/index";
|
|
8
|
-
import { shouldUseCloseWatcher } from "../../utils/hardware-back-button";
|
|
8
|
+
import { shouldUseCloseWatcher, updateCloseWatcher } from "../../utils/hardware-back-button";
|
|
9
9
|
import { inheritAriaAttributes, assert, clamp, isEndSide as isEnd } from "../../utils/helpers";
|
|
10
10
|
import { printIonError } from "../../utils/logging/index";
|
|
11
11
|
import { menuController } from "../../utils/menu-controller/index";
|
|
@@ -560,6 +560,7 @@ export class Menu {
|
|
|
560
560
|
// emit opened/closed events
|
|
561
561
|
this._isOpen = isOpen;
|
|
562
562
|
this.isAnimating = false;
|
|
563
|
+
updateCloseWatcher();
|
|
563
564
|
if (!this._isOpen) {
|
|
564
565
|
this.blocker.unblock();
|
|
565
566
|
}
|
|
@@ -656,14 +657,14 @@ export class Menu {
|
|
|
656
657
|
* the ionBackButton listener in the menu controller
|
|
657
658
|
* will handle closing the menu when Escape is pressed.
|
|
658
659
|
*/
|
|
659
|
-
return (h(Host, { key: '
|
|
660
|
+
return (h(Host, { key: '5cf26df26d4e539860cbeaea98ec621b98c3fcfc', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
|
|
660
661
|
[mode]: true,
|
|
661
662
|
[`menu-type-${type}`]: true,
|
|
662
663
|
'menu-enabled': !disabled,
|
|
663
664
|
[`menu-side-${side}`]: true,
|
|
664
665
|
'menu-pane-visible': isPaneVisible,
|
|
665
666
|
'split-pane-side': hostContext('ion-split-pane', el),
|
|
666
|
-
} }, h("div", { key: '
|
|
667
|
+
} }, h("div", { key: 'f337016e293bb8665c99762e0c389dd6c372bb33', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: '4c3fe331aa42cd57d7ad9bd1f5910f8eeb62d7da' })), h("ion-backdrop", { key: '61af7ea876d81574841e1dd3e81e2352e555d096', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
|
|
667
668
|
}
|
|
668
669
|
static get is() { return "ion-menu"; }
|
|
669
670
|
static get encapsulation() { return "shadow"; }
|
|
@@ -30,6 +30,23 @@ export const shouldUseCloseWatcher = () => config.get('experimentalCloseWatcher'
|
|
|
30
30
|
export const blockHardwareBackButton = () => {
|
|
31
31
|
document.addEventListener('backbutton', () => { });
|
|
32
32
|
};
|
|
33
|
+
const closeWatcherConditions = [];
|
|
34
|
+
let syncCloseWatcher;
|
|
35
|
+
/**
|
|
36
|
+
* Registers a check for whether the back button
|
|
37
|
+
* has something to close. The CloseWatcher is only
|
|
38
|
+
* active while one of these checks passes.
|
|
39
|
+
*/
|
|
40
|
+
export const addCloseWatcherCondition = (condition) => {
|
|
41
|
+
closeWatcherConditions.push(condition);
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Call this whenever something the back button
|
|
45
|
+
* can close opens or closes.
|
|
46
|
+
*/
|
|
47
|
+
export const updateCloseWatcher = () => {
|
|
48
|
+
syncCloseWatcher?.();
|
|
49
|
+
};
|
|
33
50
|
export const startHardwareBackButton = () => {
|
|
34
51
|
const doc = document;
|
|
35
52
|
let busy = false;
|
|
@@ -81,32 +98,44 @@ export const startHardwareBackButton = () => {
|
|
|
81
98
|
processHandlers();
|
|
82
99
|
};
|
|
83
100
|
/**
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* events firing.
|
|
101
|
+
* Android WebView never sends the hardware back
|
|
102
|
+
* button to a CloseWatcher, so hybrid apps still
|
|
103
|
+
* need this. Browsers never fire backbutton.
|
|
88
104
|
*/
|
|
105
|
+
doc.addEventListener('backbutton', backButtonCallback);
|
|
89
106
|
if (shouldUseCloseWatcher()) {
|
|
90
107
|
let watcher;
|
|
91
|
-
|
|
92
|
-
|
|
108
|
+
/**
|
|
109
|
+
* An active CloseWatcher stops the back button from
|
|
110
|
+
* navigating, so only keep one while there's something to close.
|
|
111
|
+
*/
|
|
112
|
+
syncCloseWatcher = () => {
|
|
113
|
+
const canClose = closeWatcherConditions.some((condition) => condition());
|
|
114
|
+
if (!canClose) {
|
|
115
|
+
watcher?.destroy();
|
|
116
|
+
watcher = undefined;
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (watcher !== undefined) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
93
122
|
watcher = new win.CloseWatcher();
|
|
94
123
|
/**
|
|
95
124
|
* Once a close request happens
|
|
96
125
|
* the watcher gets destroyed.
|
|
97
126
|
* As a result, we need to re-configure
|
|
98
127
|
* the watcher so we can respond to other
|
|
99
|
-
* close requests
|
|
128
|
+
* close requests, including after one that
|
|
129
|
+
* closed nothing, like a modal whose canDismiss
|
|
130
|
+
* returned false.
|
|
100
131
|
*/
|
|
101
132
|
watcher.onclose = () => {
|
|
133
|
+
watcher = undefined;
|
|
102
134
|
backButtonCallback();
|
|
103
|
-
|
|
135
|
+
syncCloseWatcher?.();
|
|
104
136
|
};
|
|
105
137
|
};
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
doc.addEventListener('backbutton', backButtonCallback);
|
|
138
|
+
syncCloseWatcher();
|
|
110
139
|
}
|
|
111
140
|
};
|
|
112
141
|
export const OVERLAY_BACK_BUTTON_PRIORITY = 100;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { doc } from "../browser/index";
|
|
5
|
-
import { MENU_BACK_BUTTON_PRIORITY } from "../hardware-back-button";
|
|
5
|
+
import { MENU_BACK_BUTTON_PRIORITY, addCloseWatcherCondition } from "../hardware-back-button";
|
|
6
6
|
import { printIonWarning } from "../logging/index";
|
|
7
7
|
import { componentOnReady } from "../helpers";
|
|
8
8
|
import { menuOverlayAnimation } from "./animations/overlay";
|
|
@@ -184,6 +184,7 @@ const createMenuController = () => {
|
|
|
184
184
|
registerAnimation('reveal', menuRevealAnimation);
|
|
185
185
|
registerAnimation('push', menuPushAnimation);
|
|
186
186
|
registerAnimation('overlay', menuOverlayAnimation);
|
|
187
|
+
addCloseWatcherCondition(() => _getOpenSync() !== undefined);
|
|
187
188
|
doc?.addEventListener('ionBackButton', (ev) => {
|
|
188
189
|
const openMenu = _getOpenSync();
|
|
189
190
|
if (openMenu) {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { doc } from "./browser/index";
|
|
5
5
|
import { focusFirstDescendant, focusLastDescendant, focusableQueryString } from "./focus-trap";
|
|
6
|
-
import { shouldUseCloseWatcher } from "./hardware-back-button";
|
|
6
|
+
import { addCloseWatcherCondition, shouldUseCloseWatcher, updateCloseWatcher } from "./hardware-back-button";
|
|
7
7
|
import { printIonError, printIonWarning } from "./logging/index";
|
|
8
8
|
import { config } from "../global/config";
|
|
9
9
|
import { getIonMode } from "../global/ionic-global";
|
|
@@ -13,6 +13,11 @@ import { OVERLAY_BACK_BUTTON_PRIORITY } from "./hardware-back-button";
|
|
|
13
13
|
import { addEventListener, componentOnReady, focusVisibleElement, getElementRoot, removeEventListener, } from "./helpers";
|
|
14
14
|
let lastOverlayIndex = 0;
|
|
15
15
|
let lastId = 0;
|
|
16
|
+
/**
|
|
17
|
+
* Every overlay except toast, which doesn't trap
|
|
18
|
+
* focus or close on back.
|
|
19
|
+
*/
|
|
20
|
+
const NON_TOAST_OVERLAYS = 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-popover';
|
|
16
21
|
export const activeAnimations = new WeakMap();
|
|
17
22
|
/**
|
|
18
23
|
* Determines if the overlay's backdrop is always blocking (no background interaction).
|
|
@@ -139,7 +144,7 @@ const focusElementInOverlay = (hostToFocus, overlay) => {
|
|
|
139
144
|
* Should NOT include: Toast
|
|
140
145
|
*/
|
|
141
146
|
const trapKeyboardFocus = (ev, doc) => {
|
|
142
|
-
const lastOverlay = getPresentedOverlay(doc,
|
|
147
|
+
const lastOverlay = getPresentedOverlay(doc, NON_TOAST_OVERLAYS);
|
|
143
148
|
const target = ev.target;
|
|
144
149
|
/**
|
|
145
150
|
* If no active overlay, ignore this event.
|
|
@@ -322,6 +327,11 @@ const connectListeners = (doc) => {
|
|
|
322
327
|
doc.addEventListener('focus', (ev) => {
|
|
323
328
|
trapKeyboardFocus(ev, doc);
|
|
324
329
|
}, true);
|
|
330
|
+
/**
|
|
331
|
+
* Whether the overlay actually dismisses is checked at press time,
|
|
332
|
+
* since `backdropDismiss` can change while it's open.
|
|
333
|
+
*/
|
|
334
|
+
addCloseWatcherCondition(() => getPresentedOverlay(doc, NON_TOAST_OVERLAYS) !== undefined);
|
|
325
335
|
// handle back-button click
|
|
326
336
|
doc.addEventListener('ionBackButton', (ev) => {
|
|
327
337
|
const lastOverlay = getPresentedOverlay(doc);
|
|
@@ -445,7 +455,8 @@ export const setRootAriaHidden = (hidden = false) => {
|
|
|
445
455
|
* Cleans up root `aria-hidden` and `backdrop-no-scroll` when
|
|
446
456
|
* an overlay is removed from the DOM without going through
|
|
447
457
|
* the `dismiss()` flow (e.g., when a framework unmounts the
|
|
448
|
-
* overlay during a route change).
|
|
458
|
+
* overlay during a route change). Also releases the
|
|
459
|
+
* CloseWatcher if nothing is left to close.
|
|
449
460
|
*
|
|
450
461
|
* Should be called from an overlay's `disconnectedCallback`
|
|
451
462
|
* when the overlay was still presented at the time of removal.
|
|
@@ -454,6 +465,7 @@ export const cleanupRootFocusTrapAccessibility = () => {
|
|
|
454
465
|
if (typeof document === 'undefined') {
|
|
455
466
|
return;
|
|
456
467
|
}
|
|
468
|
+
updateCloseWatcher();
|
|
457
469
|
const remainingOverlays = getPresentedOverlays(document);
|
|
458
470
|
const hasRemainingLocking = remainingOverlays.some((o) => locksAppRoot(o));
|
|
459
471
|
if (!hasRemainingLocking) {
|
|
@@ -475,7 +487,9 @@ const applyRootLock = (el) => {
|
|
|
475
487
|
};
|
|
476
488
|
/**
|
|
477
489
|
* Re-applies the root lock that `cleanupRootFocusTrapAccessibility()` released.
|
|
478
|
-
* Call from `connectedCallback` when the overlay is still presented.
|
|
490
|
+
* Call from `connectedCallback` when the overlay is still presented. Also
|
|
491
|
+
* re-arms the CloseWatcher, which every overlay needs, so that happens
|
|
492
|
+
* before the `locksAppRoot` check.
|
|
479
493
|
*
|
|
480
494
|
* A synchronous move keeps the overlay connected, so the lock survives. A
|
|
481
495
|
* detach with a re-insert in a later task releases it, which is the shape a
|
|
@@ -485,6 +499,7 @@ export const restoreRootFocusTrapAccessibility = (overlayEl) => {
|
|
|
485
499
|
if (typeof document === 'undefined') {
|
|
486
500
|
return;
|
|
487
501
|
}
|
|
502
|
+
updateCloseWatcher();
|
|
488
503
|
const el = overlayEl;
|
|
489
504
|
if (!locksAppRoot(el)) {
|
|
490
505
|
return;
|
|
@@ -698,6 +713,11 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
|
|
|
698
713
|
printIonError(`[${overlay.el.tagName.toLowerCase()}] - `, err);
|
|
699
714
|
}
|
|
700
715
|
overlay.el.remove();
|
|
716
|
+
/**
|
|
717
|
+
* Release the back button if nothing
|
|
718
|
+
* else is left to close.
|
|
719
|
+
*/
|
|
720
|
+
updateCloseWatcher();
|
|
701
721
|
return true;
|
|
702
722
|
};
|
|
703
723
|
const getAppRoot = (doc) => {
|
|
@@ -706,6 +726,12 @@ const getAppRoot = (doc) => {
|
|
|
706
726
|
const overlayAnimation = async (overlay, animationBuilder, baseEl, opts) => {
|
|
707
727
|
// Make overlay visible in case it's hidden
|
|
708
728
|
baseEl.classList.remove('overlay-hidden');
|
|
729
|
+
/**
|
|
730
|
+
* Removing `overlay-hidden` makes the overlay count
|
|
731
|
+
* as presented, so back can dismiss it while it
|
|
732
|
+
* animates in.
|
|
733
|
+
*/
|
|
734
|
+
updateCloseWatcher();
|
|
709
735
|
const aniRoot = overlay.el;
|
|
710
736
|
const animation = animationBuilder(aniRoot, opts);
|
|
711
737
|
if (!overlay.animated || !config.getBoolean('animated', true)) {
|
package/dist/docs.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { c as printIonError } from './index-
|
|
5
|
-
import { w as win } from './helpers-
|
|
4
|
+
import { c as printIonError } from './index-BpRUsN_W.js';
|
|
5
|
+
import { w as win } from './helpers-BJqKF1pr.js';
|
|
6
6
|
|
|
7
7
|
let animationPrefix;
|
|
8
8
|
const getAnimationPrefix = (el) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { i as initialize } from './ionic-global-
|
|
4
|
+
import { i as initialize } from './ionic-global-Cep6oYzK.js';
|
|
5
5
|
|
|
6
6
|
const appGlobalScript = initialize || (() => {});
|
|
7
7
|
const globalScripts = appGlobalScript;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { b as inheritAttributes, w as win, q as ariaAttributes } from './helpers-
|
|
4
|
+
import { b as inheritAttributes, w as win, q as ariaAttributes } from './helpers-BJqKF1pr.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Copies a set of attributes off the host element so they can be applied to an element
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { w as writeTask } from './index-
|
|
5
|
-
import { h as hapticSelectionEnd, a as hapticSelectionChanged, b as hapticSelectionStart } from './haptic-
|
|
4
|
+
import { w as writeTask } from './index-BpRUsN_W.js';
|
|
5
|
+
import { h as hapticSelectionEnd, a as hapticSelectionChanged, b as hapticSelectionStart } from './haptic-WXfMCob9.js';
|
|
6
6
|
import { createGesture } from './index-BmLuEdV7.js';
|
|
7
7
|
|
|
8
8
|
const createButtonActiveGesture = (el, isButton) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { c as componentOnReady } from './helpers-
|
|
4
|
+
import { c as componentOnReady } from './helpers-BJqKF1pr.js';
|
|
5
5
|
|
|
6
6
|
// TODO(FW-2832): types
|
|
7
7
|
const attachComponent = async (delegate, container, component, cssClasses, componentProps, inline) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { c as printIonError } from './index-
|
|
4
|
+
import { c as printIonError } from './index-BpRUsN_W.js';
|
|
5
5
|
import { i as isRTL } from './dir-Dojwmvde.js';
|
|
6
6
|
|
|
7
7
|
const win = typeof window !== 'undefined' ? window : undefined;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { i as config, a as printIonWarning, w as writeTask, B as Build } from './index-
|
|
5
|
-
import { r as raf } from './helpers-
|
|
4
|
+
import { i as config, a as printIonWarning, w as writeTask, B as Build } from './index-BpRUsN_W.js';
|
|
5
|
+
import { r as raf } from './helpers-BJqKF1pr.js';
|
|
6
6
|
|
|
7
7
|
const LIFECYCLE_WILL_ENTER = 'ionViewWillEnter';
|
|
8
8
|
const LIFECYCLE_DID_ENTER = 'ionViewDidEnter';
|
|
@@ -118,8 +118,8 @@ const createFocusController = () => {
|
|
|
118
118
|
};
|
|
119
119
|
const LAST_FOCUS = 'ion-last-focus';
|
|
120
120
|
|
|
121
|
-
const iosTransitionAnimation = () => import('./ios.transition-
|
|
122
|
-
const mdTransitionAnimation = () => import('./md.transition-
|
|
121
|
+
const iosTransitionAnimation = () => import('./ios.transition-B8netzsb.js');
|
|
122
|
+
const mdTransitionAnimation = () => import('./md.transition-DNCSSiXk.js');
|
|
123
123
|
const focusController = createFocusController();
|
|
124
124
|
// TODO(FW-2832): types
|
|
125
125
|
/**
|