@ionic/core 9.0.7-dev.11791478996.1b854592 → 9.0.7-dev.11792524803.14f0e7d2
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-CvyvLbPe.js → p-6sKRBFnK.js} +1 -1
- package/components/{p-V1THdfzs.js → p-B8HBLiYi.js} +1 -1
- package/components/{p-HthJZjZ6.js → p-BEiYs-sz.js} +1 -1
- package/components/p-BKeulLTJ.js +4 -0
- package/components/{p-D0nwlsl_.js → p-BKxLivx4.js} +1 -1
- package/components/{p-BMHdI-wb.js → p-BLjEwM6v.js} +1 -1
- package/components/p-BNnmwjuy.js +4 -0
- package/components/{p-DMPsc_0r.js → p-BSJriPuC.js} +1 -1
- package/components/p-BUVGbkSc.js +4 -0
- package/components/{p-KbMCbGRA.js → p-B_tZQKpS.js} +1 -1
- package/components/{p-DhfJAkyd.js → p-BinR4_P7.js} +1 -1
- package/components/{p-CqvARtmt.js → p-BrOSQhkA.js} +1 -1
- package/components/p-BriaEJK8.js +4 -0
- package/components/p-BsLM9eQu.js +4 -0
- package/components/p-Bu6O-veK.js +4 -0
- package/{dist/ionic/p-e1haAYzm.js → components/p-C7rB-0-1.js} +1 -1
- package/components/{p-CdrNHfZl.js → p-C9ioHZq-.js} +1 -1
- package/components/{p-BODcC-C0.js → p-CAQG0btC.js} +1 -1
- package/components/{p-BqyLLYLm.js → p-CHHkdXfP.js} +1 -1
- package/components/{p-Bd8hg9FK.js → p-CJgshb3W.js} +1 -1
- package/components/{p-jsVMT15X.js → p-CQjNc-Pz.js} +1 -1
- package/components/{p-Drpw2dyl.js → p-CTUMJM0R.js} +1 -1
- package/components/p-CVVUo4J1.js +4 -0
- package/components/{p-DBtFJlTi.js → p-CXy2v7GI.js} +1 -1
- package/components/{p-C1AxSUnp.js → p-C_NQIzjP.js} +1 -1
- package/components/{p-Ba9_OzSY.js → p-Canp1qah.js} +1 -1
- package/components/p-CcQQ8oRo.js +4 -0
- package/components/{p-hLu-eIbb.js → p-CiFFeRH9.js} +1 -1
- package/components/{p-DnGlmM4u.js → p-CiXOsJF2.js} +1 -1
- package/components/p-Ctw69DyZ.js +4 -0
- package/components/{p-C_gnmBt2.js → p-CvzE7FFp.js} +1 -1
- package/components/{p-r59A3wQk.js → p-CzykzqAO.js} +1 -1
- package/components/{p--cshUOAU.js → p-D0jSx7rE.js} +1 -1
- package/components/{p-YNnH1_Hs.js → p-D4NOsSCE.js} +1 -1
- package/components/{p-CJdQ1u7W.js → p-DGLuPe1e.js} +1 -1
- package/components/{p-CjPRDxby.js → p-DGUed0uX.js} +1 -1
- package/components/{p-DDI6VLW9.js → p-DM2jMsSO.js} +1 -1
- package/components/{p-yGD6MBgf.js → p-DPyjiKOq.js} +1 -1
- package/components/{p-7KepMw9O.js → p-DSmHJ2DH.js} +1 -1
- package/components/{p-DHo45oj7.js → p-DWGgvN5e.js} +1 -1
- package/components/{p-B4IBdPVJ.js → p-DlUdjUlf.js} +1 -1
- package/components/{p-ChkSQqfP.js → p-Dlr7b3_2.js} +1 -1
- package/components/{p-ChsJlFCQ.js → p-LH1I_Zhd.js} +1 -1
- package/components/{p-CQKWzUsE.js → p-PPagT42x.js} +1 -1
- package/components/{p-ZrYBjOcc.js → p-RJT5zTbD.js} +1 -1
- package/components/{p-GpqwNbxf.js → p-T2dnrBya.js} +1 -1
- package/components/p-WMQuK_Tj.js +4 -0
- package/components/{p-_y7kwBO8.js → p-eJpG4UbM.js} +1 -1
- package/components/{p-TLtgwTFF.js → p-fFx6WCTj.js} +1 -1
- package/components/p-q2WJ5Igc.js +4 -0
- package/components/{p-CKiqp4Vl.js → p-y7Nhe3de.js} +1 -1
- package/components/{p-BVNUhOOf.js → p-yjLe0sN2.js} +1 -1
- package/css/core.css.map +1 -1
- package/css/display.css.map +1 -1
- package/css/flex-utils.css.map +1 -1
- package/css/float-elements.css +1 -1
- package/css/float-elements.css.map +1 -1
- package/css/global.bundle.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/css/padding.css.map +1 -1
- package/css/structure.css.map +1 -1
- package/css/text-alignment.css.map +1 -1
- package/css/text-transformation.css.map +1 -1
- package/css/typography.css.map +1 -1
- package/css/utils.bundle.css +1 -1
- package/css/utils.bundle.css.map +1 -1
- package/dist/cjs/{animation-DcgLg_PI.js → animation-BFKyYY11.js} +2 -2
- package/dist/cjs/{app-globals-BoFCZq0K.js → app-globals-BLTzqkrC.js} +1 -1
- package/dist/cjs/{attribute-controller-BjTE2TOf.js → attribute-controller-CXIeB0Mn.js} +1 -1
- package/dist/cjs/{button-active-FdsfRDY_.js → button-active-CEQaiV9N.js} +2 -2
- package/dist/cjs/{capacitor-C6Pp4Z7A.js → capacitor-BMzmHhwe.js} +1 -1
- package/dist/cjs/{format-CVjpvAl1.js → format-CdRlDqPs.js} +1 -1
- package/dist/cjs/{framework-delegate-JbKIVMzR.js → framework-delegate-DTLbqaaO.js} +1 -1
- package/dist/cjs/{haptic--4QteuuM.js → haptic-CJVUv_GB.js} +1 -1
- package/dist/cjs/{helpers-Cqr69qxA.js → helpers-Crluoxqu.js} +1 -1
- package/dist/cjs/{index-CNaZ6SYM.js → index-BAM4223M.js} +2 -2
- package/dist/cjs/{index-BQpSekmz.js → index-BKpybYNI.js} +2 -2
- package/dist/cjs/{index-B4ONUQRp.js → index-BSD7toMO.js} +1 -1
- package/dist/cjs/{index-BhWiDK25.js → index-CElfU-dK.js} +5 -6
- package/dist/cjs/{index-DCfr5hz-.js → index-CgXTRA_-.js} +4 -16
- package/dist/cjs/{index-BiQyIvoc.js → index-SAR1xwtW.js} +27 -40
- package/dist/cjs/index.cjs.js +11 -11
- package/dist/cjs/{input-shims-2AsXPZ5m.js → input-shims-CHghGZe-.js} +5 -5
- package/dist/cjs/{input.utils-Becpo0ax.js → input.utils-BBZr0wjw.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 +18 -46
- 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 +8 -33
- 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 +9 -10
- package/dist/cjs/ion-modal.cjs.entry.js +11 -11
- package/dist/cjs/ion-nav_2.cjs.entry.js +7 -29
- 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 +125 -20
- 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-48ceLiJ6.js → ionic-global-C1h8Yi_K.js} +1 -1
- package/dist/cjs/ionic.cjs.js +5 -5
- package/dist/cjs/{ios.transition-Ca6XODo9.js → ios.transition-YFSxiyP_.js} +4 -4
- package/dist/cjs/{item-multiple-inputs-C-hz7xrh.js → item-multiple-inputs-h2PyAFzG.js} +1 -1
- package/dist/cjs/{keyboard-BlHp4a_c.js → keyboard-C-C7xMKk.js} +1 -1
- package/dist/cjs/{keyboard-c2_I35b-.js → keyboard-Cv-LNReK.js} +4 -4
- package/dist/cjs/{keyboard-controller-DHS0BgXp.js → keyboard-controller-CLcFxSnb.js} +2 -2
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-D8SfNYEp.js → md.transition-Cm8yg0UK.js} +4 -4
- package/dist/cjs/{overlays-CLld3axA.js → overlays-C68wNDWY.js} +20 -79
- package/dist/cjs/{select-option-render-CzyhrkOu.js → select-option-render-C-Yh9yZG.js} +2 -2
- package/dist/cjs/{slot-mutation-controller-ClDxh3EK.js → slot-mutation-controller-zixZ5LyH.js} +1 -1
- package/dist/cjs/{status-tap-CDA0Y3Ad.js → status-tap-C3frTJ4c.js} +3 -3
- package/dist/cjs/{swipe-back-Idb4gqUk.js → swipe-back-BigumsQ1.js} +2 -2
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/input-otp/input-otp.js +3 -29
- package/dist/collection/components/menu/menu.js +3 -4
- package/dist/collection/components/nav/nav.js +2 -24
- package/dist/collection/components/route/route.js +9 -1
- package/dist/collection/components/route-redirect/route-redirect.js +1 -1
- package/dist/collection/components/router/utils/constants.js +2 -0
- package/dist/collection/components/router/utils/matching.js +97 -14
- package/dist/collection/components/router/utils/path.js +17 -3
- package/dist/collection/components/router-outlet/router-outlet.js +3 -31
- package/dist/collection/utils/hardware-back-button.js +12 -41
- package/dist/collection/utils/menu-controller/index.js +1 -2
- package/dist/collection/utils/overlays.js +4 -30
- package/dist/collection/utils/transition/index.js +0 -11
- package/dist/docs.json +4 -4
- package/dist/esm/{animation-DmtJpz89.js → animation-CFd8Olt3.js} +2 -2
- package/dist/esm/{app-globals-CNfpAPW6.js → app-globals-7GHLBkwd.js} +1 -1
- package/dist/esm/{attribute-controller-DPMIcbef.js → attribute-controller-Cn665x42.js} +1 -1
- package/dist/esm/{button-active-DVk40Sjl.js → button-active-DMuYeDQN.js} +2 -2
- package/dist/esm/{capacitor-CHJaJ9aX.js → capacitor-CoEgIpR9.js} +1 -1
- package/dist/esm/{format-Ck1cw5z7.js → format-C9zPmwKU.js} +1 -1
- package/dist/esm/{framework-delegate-CDjM1vRH.js → framework-delegate-DeT5pmPB.js} +1 -1
- package/dist/esm/{haptic-WXfMCob9.js → haptic-Dxm7ZmT5.js} +1 -1
- package/dist/esm/{helpers-BJqKF1pr.js → helpers-B54ynME_.js} +1 -1
- package/dist/esm/{index-TkLga3ma.js → index--21qeSt0.js} +2 -2
- package/dist/esm/{index-z9vdZN7I.js → index-B8iieOdw.js} +5 -16
- package/dist/esm/{index-DIouXecD.js → index-B9jhwvmO.js} +5 -6
- package/dist/esm/{index-CK8uF0iB.js → index-D4ZMZz_3.js} +1 -1
- package/dist/esm/{index-BpRUsN_W.js → index-D9OR05yj.js} +27 -40
- package/dist/esm/{index-Clv8QC5L.js → index-D_xZtbw6.js} +2 -2
- package/dist/esm/index.js +11 -11
- package/dist/esm/{input-shims-C1iYF5JK.js → input-shims-MCrhq67U.js} +5 -5
- package/dist/esm/{input.utils-DZY_K8Po.js → input.utils-B-IIWrwT.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 +18 -46
- 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 +8 -33
- 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 +9 -10
- package/dist/esm/ion-modal.entry.js +11 -11
- package/dist/esm/ion-nav_2.entry.js +7 -29
- 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 +125 -20
- 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-Cep6oYzK.js → ionic-global-B-G43ddm.js} +1 -1
- package/dist/esm/ionic.js +6 -6
- package/dist/esm/{ios.transition-BkUGiDUz.js → ios.transition-CRfGj4Mo.js} +4 -4
- package/dist/esm/{item-multiple-inputs-Bd2LO7qK.js → item-multiple-inputs-BSD9wGHO.js} +1 -1
- package/dist/esm/{keyboard-B4Y-Gph8.js → keyboard-DDw62P0D.js} +4 -4
- package/dist/esm/{keyboard-controller-B2NoF7bV.js → keyboard-controller-Dzjet5wD.js} +2 -2
- package/dist/esm/{keyboard-Cmqp5iZD.js → keyboard-ly3M0GO7.js} +1 -1
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-B6hlrWjR.js → md.transition-wqThNy_C.js} +4 -4
- package/dist/esm/{overlays-DmDY-El7.js → overlays-BQnV0HAU.js} +21 -78
- package/dist/esm/{select-option-render-BSDT9oSA.js → select-option-render-CGxPejmz.js} +2 -2
- package/dist/esm/{slot-mutation-controller-hAS2uJ7c.js → slot-mutation-controller-C3s4-_YN.js} +1 -1
- package/dist/esm/{status-tap-VGRBYwiC.js → status-tap-DRx9wSD_.js} +3 -3
- package/dist/esm/{swipe-back-DV3UpWzz.js → swipe-back-Ch3UU_US.js} +2 -2
- package/dist/html.html-data.json +2 -2
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-7db20410.entry.js → p-0517aec4.entry.js} +1 -1
- package/dist/ionic/{p-9ffccbf1.entry.js → p-083b1119.entry.js} +1 -1
- package/dist/ionic/{p-d0e374f8.entry.js → p-0ab133d6.entry.js} +1 -1
- package/dist/ionic/{p-4d785062.entry.js → p-1213b719.entry.js} +1 -1
- package/dist/ionic/{p-0c32c626.entry.js → p-150f350e.entry.js} +1 -1
- package/dist/ionic/{p-c293f854.entry.js → p-20d1ac29.entry.js} +1 -1
- package/dist/ionic/{p-d72accc4.entry.js → p-24b0a961.entry.js} +1 -1
- package/dist/ionic/{p-d2406889.entry.js → p-28f506ce.entry.js} +1 -1
- package/dist/ionic/{p-930c3538.entry.js → p-2e6e933d.entry.js} +1 -1
- package/dist/ionic/{p-0f97175e.entry.js → p-30dcf43b.entry.js} +1 -1
- package/dist/ionic/{p-00cd107d.entry.js → p-378341d1.entry.js} +1 -1
- package/dist/ionic/{p-6c7b5930.entry.js → p-37f46670.entry.js} +1 -1
- package/dist/ionic/{p-b9ed3a52.entry.js → p-3a5faaa8.entry.js} +1 -1
- package/dist/ionic/p-3bd7e5df.entry.js +4 -0
- package/dist/ionic/{p-4e4e5919.entry.js → p-3c4b0ba7.entry.js} +1 -1
- package/dist/ionic/{p-4bd80334.entry.js → p-42b2a992.entry.js} +1 -1
- package/dist/ionic/p-52449f1f.entry.js +4 -0
- package/dist/ionic/p-52dc3309.entry.js +4 -0
- package/dist/ionic/{p-64ac3864.entry.js → p-58f914ee.entry.js} +1 -1
- package/dist/ionic/{p-b3aadfe8.entry.js → p-5b9666be.entry.js} +1 -1
- package/dist/ionic/{p-a4389f13.entry.js → p-5c19330c.entry.js} +1 -1
- package/dist/ionic/{p-bfdbe24b.entry.js → p-61b304c8.entry.js} +1 -1
- package/dist/ionic/{p-0b09c60e.entry.js → p-624f2fa8.entry.js} +1 -1
- package/dist/ionic/{p-d9a3dfd1.entry.js → p-636349e2.entry.js} +1 -1
- package/dist/ionic/{p-4f25b926.entry.js → p-6865f0e1.entry.js} +1 -1
- package/dist/ionic/{p-27d96a9b.entry.js → p-7441ed2b.entry.js} +1 -1
- package/dist/ionic/{p-91f3cd8b.entry.js → p-76309bab.entry.js} +1 -1
- package/dist/ionic/p-83448626.entry.js +4 -0
- package/dist/ionic/{p-7e9c2a97.entry.js → p-834afcf7.entry.js} +1 -1
- package/dist/ionic/{p-362dcd86.entry.js → p-93cd738b.entry.js} +1 -1
- package/dist/ionic/{p-eb989dc9.entry.js → p-9b78fedf.entry.js} +1 -1
- package/dist/ionic/{p-5bb24bce.entry.js → p-9dd9788c.entry.js} +1 -1
- package/dist/ionic/{p-nCAPr1Ah.js → p-B4ELlbJE.js} +1 -1
- package/dist/ionic/p-B4wzg4z4.js +4 -0
- package/dist/ionic/{p-Co7eql8D.js → p-B4xjg_Qu.js} +1 -1
- package/dist/ionic/{p-DPNVo1nr.js → p-BCgqWm-V.js} +1 -1
- package/dist/ionic/p-BChRVdVv.js +4 -0
- package/dist/ionic/{p-BO10QT9r.js → p-BUB5OrpU.js} +1 -1
- package/dist/ionic/{p-BZTgGzGK.js → p-BVEsh7-M.js} +1 -1
- package/dist/ionic/p-Ba6ZV-qU.js +4 -0
- package/dist/ionic/{p-DxftXYZp.js → p-BhMQahM6.js} +1 -1
- package/dist/ionic/{p-D926OmIX.js → p-BtHAx8im.js} +1 -1
- package/{components/p-Dbi3KqKm.js → dist/ionic/p-Bv-6401R.js} +1 -1
- package/dist/ionic/{p-DfvWlTdB.js → p-CCik51Nv.js} +1 -1
- package/dist/ionic/p-CTmJSZcs.js +4 -0
- package/dist/ionic/{p-CngfKMRU.js → p-CTrwMl44.js} +1 -1
- package/dist/ionic/p-CVwXN07G.js +4 -0
- package/dist/ionic/p-CgQdInM0.js +4 -0
- package/dist/ionic/{p-SEecsUh7.js → p-CrAPHbJ3.js} +1 -1
- package/dist/ionic/{p-Bx5x5GJV.js → p-CsWrz1c2.js} +1 -1
- package/dist/ionic/p-D5akOqD0.js +4 -0
- package/dist/ionic/p-D9OR05yj.js +6 -0
- package/dist/ionic/p-DHf9V6zI.js +4 -0
- package/dist/ionic/{p-CXs4J83x.js → p-DNxEB9-T.js} +1 -1
- package/dist/ionic/p-DZUqAr_6.js +4 -0
- package/dist/ionic/{p-BY4FwwBp.js → p-DxvRP6ld.js} +1 -1
- package/dist/ionic/p-Dzew6Qv7.js +4 -0
- package/dist/ionic/p-PkaVMJga.js +4 -0
- package/dist/ionic/{p-c250b6b0.entry.js → p-b0a3dd1a.entry.js} +1 -1
- package/dist/ionic/{p-ec259ac5.entry.js → p-b1164028.entry.js} +1 -1
- package/dist/ionic/{p-230f510c.entry.js → p-b710b4b8.entry.js} +1 -1
- package/dist/ionic/{p-8c85e250.entry.js → p-b9659d21.entry.js} +1 -1
- package/dist/ionic/p-ba7bd621.entry.js +4 -0
- package/dist/ionic/{p-82abf431.entry.js → p-daaecea3.entry.js} +1 -1
- package/dist/ionic/{p-e7ab4def.entry.js → p-e05073f6.entry.js} +1 -1
- package/dist/ionic/{p-8d651adb.entry.js → p-e137f724.entry.js} +1 -1
- package/dist/ionic/{p-107a81a6.entry.js → p-e1969fd1.entry.js} +1 -1
- package/dist/ionic/{p-77252596.entry.js → p-e338693a.entry.js} +1 -1
- package/dist/ionic/{p-8b79061e.entry.js → p-e4c3f17f.entry.js} +1 -1
- package/dist/ionic/{p-01b7e3f2.entry.js → p-e7414c33.entry.js} +1 -1
- package/dist/ionic/{p-8db08782.entry.js → p-eb762f80.entry.js} +1 -1
- package/dist/ionic/p-edcb63e5.entry.js +4 -0
- package/dist/ionic/{p-c97e4c00.entry.js → p-efa00ce5.entry.js} +1 -1
- package/dist/ionic/{p-60780b88.entry.js → p-f19e50f8.entry.js} +1 -1
- package/dist/ionic/{p-8d2ccf0c.entry.js → p-f20b6a9b.entry.js} +1 -1
- package/dist/ionic/{p-f2116a54.entry.js → p-f9057f70.entry.js} +1 -1
- package/dist/ionic/{p-0a789930.entry.js → p-f99cf5aa.entry.js} +1 -1
- package/dist/ionic/{p-62c87f3d.entry.js → p-fee863dc.entry.js} +1 -1
- package/dist/ionic/{p-CgcGX08t.js → p-kKvGoaEe.js} +1 -1
- package/dist/ionic/{p-B8IuTu_r.js → p-tXpzvta8.js} +1 -1
- package/dist/ionic/p-vPo3vRFc.js +4 -0
- package/dist/types/components/input-otp/input-otp.d.ts +0 -7
- package/dist/types/components/nav/nav.d.ts +0 -1
- package/dist/types/components/route/route.d.ts +8 -0
- package/dist/types/components/route-redirect/route-redirect.d.ts +3 -1
- package/dist/types/components/router/utils/constants.d.ts +2 -0
- package/dist/types/components/router/utils/matching.d.ts +10 -0
- package/dist/types/components/router/utils/path.d.ts +5 -1
- package/dist/types/components/router-outlet/router-outlet.d.ts +0 -1
- package/dist/types/components.d.ts +4 -4
- package/dist/types/utils/config.d.ts +1 -4
- package/dist/types/utils/hardware-back-button.d.ts +0 -11
- package/dist/types/utils/overlays.d.ts +2 -5
- package/dist/types/utils/transition/index.d.ts +0 -6
- package/hydrate/index.js +319 -524
- package/hydrate/index.mjs +319 -524
- package/package.json +1 -1
- package/components/p-B02CcbPD.js +0 -4
- package/components/p-CohRJRIu.js +0 -4
- package/components/p-Ct2aBEue.js +0 -4
- package/components/p-CwEis84J.js +0 -4
- package/components/p-CxEV3Vwy.js +0 -4
- package/components/p-Cyajikho.js +0 -4
- package/components/p-DD92Fw3n.js +0 -4
- package/components/p-DfDIY2oP.js +0 -4
- package/components/p-IQN1T5zw.js +0 -4
- package/components/p-ODGeXc3M.js +0 -4
- package/components/p-R4UxBukQ.js +0 -4
- package/dist/ionic/p-52a16f94.entry.js +0 -4
- package/dist/ionic/p-539d6c8e.entry.js +0 -4
- package/dist/ionic/p-7ce9c6f8.entry.js +0 -4
- package/dist/ionic/p-7l6ENjIV.js +0 -4
- package/dist/ionic/p-BNXIurCt.js +0 -4
- package/dist/ionic/p-BOLqP2-V.js +0 -4
- package/dist/ionic/p-BdHBcCZF.js +0 -4
- package/dist/ionic/p-BexAj0yw.js +0 -4
- package/dist/ionic/p-BpRUsN_W.js +0 -6
- package/dist/ionic/p-BuLlVedw.js +0 -4
- package/dist/ionic/p-C1WYZOZj.js +0 -4
- package/dist/ionic/p-C2LaBx3E.js +0 -4
- package/dist/ionic/p-D13gXhdC.js +0 -4
- package/dist/ionic/p-DXXGkPA8.js +0 -4
- package/dist/ionic/p-Dk4Mdaru.js +0 -4
- package/dist/ionic/p-DriE1ZAo.js +0 -4
- package/dist/ionic/p-af11d3c6.entry.js +0 -4
- package/dist/ionic/p-b5bcbbc1.entry.js +0 -4
- package/dist/ionic/p-c83dbc12.entry.js +0 -4
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
+
import { WILDCARD_PARAM } from "./constants";
|
|
5
|
+
import { chainToSegments, endsWithWildcard, withoutWildcard } from "./path";
|
|
4
6
|
/**
|
|
5
7
|
* Returns whether the given redirect matches the given path segments.
|
|
6
8
|
*
|
|
@@ -41,6 +43,10 @@ export const matchesIDs = (ids, chain) => {
|
|
|
41
43
|
if (routeId.id.toLowerCase() !== routeChain.id) {
|
|
42
44
|
break;
|
|
43
45
|
}
|
|
46
|
+
// Weight a wildcard route when the outlet reports its `pathMatch`
|
|
47
|
+
if (routeId.params?.[WILDCARD_PARAM] !== undefined && endsWithWildcard(routeChain.segments)) {
|
|
48
|
+
score++;
|
|
49
|
+
}
|
|
44
50
|
if (routeId.params) {
|
|
45
51
|
const routeIdParams = Object.keys(routeId.params);
|
|
46
52
|
// Only compare routes with the chain that have the same number of parameters.
|
|
@@ -96,21 +102,28 @@ export const matchesSegments = (segments, chain) => {
|
|
|
96
102
|
matchesDefault = true;
|
|
97
103
|
}
|
|
98
104
|
else {
|
|
99
|
-
|
|
105
|
+
const params = {};
|
|
106
|
+
for (const segment of withoutWildcard(chainSegments)) {
|
|
100
107
|
const data = inputSegments.next();
|
|
101
108
|
// data param
|
|
102
109
|
if (segment[0] === ':') {
|
|
103
110
|
if (data === '') {
|
|
104
111
|
return null;
|
|
105
112
|
}
|
|
106
|
-
allparams = allparams || [];
|
|
107
|
-
const params = allparams[i] || (allparams[i] = {});
|
|
108
113
|
params[segment.slice(1)] = data;
|
|
109
114
|
}
|
|
110
115
|
else if (data !== segment) {
|
|
111
116
|
return null;
|
|
112
117
|
}
|
|
113
118
|
}
|
|
119
|
+
// A trailing `*` on a parent route has no effect. Its children match the rest of the path.
|
|
120
|
+
if (i === chain.length - 1 && endsWithWildcard(chainSegments)) {
|
|
121
|
+
params[WILDCARD_PARAM] = inputSegments.rest().join('/');
|
|
122
|
+
}
|
|
123
|
+
if (Object.keys(params).length > 0) {
|
|
124
|
+
allparams = allparams || [];
|
|
125
|
+
allparams[i] = params;
|
|
126
|
+
}
|
|
114
127
|
matchesDefault = false;
|
|
115
128
|
}
|
|
116
129
|
}
|
|
@@ -142,25 +155,38 @@ export const mergeParams = (a, b) => {
|
|
|
142
155
|
* Returns the best match or null when no match is found.
|
|
143
156
|
* When a chain is returned the parameters are updated from the RouteIDs.
|
|
144
157
|
* That is they contain both the componentProps of the <ion-route> and the parameter segment.
|
|
158
|
+
*
|
|
159
|
+
* When a wildcard route ties with other routes, a route without a wildcard that can build a url wins,
|
|
160
|
+
* then the wildcard route. Otherwise the first route declared wins a tie.
|
|
145
161
|
*/
|
|
146
162
|
export const findChainForIDs = (ids, chains) => {
|
|
147
|
-
let match = null;
|
|
148
163
|
let maxMatches = 0;
|
|
164
|
+
let tied = [];
|
|
149
165
|
for (const chain of chains) {
|
|
150
166
|
const score = matchesIDs(ids, chain);
|
|
151
167
|
if (score > maxMatches) {
|
|
152
|
-
match = chain;
|
|
153
168
|
maxMatches = score;
|
|
169
|
+
tied = [chain];
|
|
170
|
+
}
|
|
171
|
+
else if (score > 0 && score === maxMatches) {
|
|
172
|
+
tied.push(chain);
|
|
154
173
|
}
|
|
155
174
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
175
|
+
const matches = tied.map((chain) => chain.map((route, i) => ({
|
|
176
|
+
id: route.id,
|
|
177
|
+
segments: route.segments,
|
|
178
|
+
params: mergeParams(route.params, ids[i]?.params),
|
|
179
|
+
})));
|
|
180
|
+
if (!matches.some(chainEndsWithWildcard)) {
|
|
181
|
+
return matches.length > 0 ? matches[0] : null;
|
|
182
|
+
}
|
|
183
|
+
return matches.reduce((best, chain) => (tieRank(chain) > tieRank(best) ? chain : best));
|
|
184
|
+
};
|
|
185
|
+
const tieRank = (chain) => {
|
|
186
|
+
if (chainEndsWithWildcard(chain)) {
|
|
187
|
+
return 1;
|
|
162
188
|
}
|
|
163
|
-
return null;
|
|
189
|
+
return chainToSegments(chain) !== null ? 2 : 0;
|
|
164
190
|
};
|
|
165
191
|
/**
|
|
166
192
|
* Finds the best match for the segments in the chains.
|
|
@@ -168,10 +194,17 @@ export const findChainForIDs = (ids, chains) => {
|
|
|
168
194
|
* Returns the best match or null when no match is found.
|
|
169
195
|
* When a chain is returned the parameters are updated from the segments.
|
|
170
196
|
* That is they contain both the componentProps of the <ion-route> and the parameter segments.
|
|
197
|
+
*
|
|
198
|
+
* When wildcard routes match, the one with the most fixed segments wins if it has more fixed segments than every
|
|
199
|
+
* route that matched the whole path. Routes that only matched by ignoring trailing segments don't count.
|
|
171
200
|
*/
|
|
172
201
|
export const findChainForSegments = (segments, chains) => {
|
|
173
202
|
let match = null;
|
|
174
203
|
let bestScore = 0;
|
|
204
|
+
let fullMatch = null;
|
|
205
|
+
let bestFullScore = 0;
|
|
206
|
+
let maxFullFixed = -1;
|
|
207
|
+
let wildcard = null;
|
|
175
208
|
for (const chain of chains) {
|
|
176
209
|
const matchedChain = matchesSegments(segments, chain);
|
|
177
210
|
if (matchedChain !== null) {
|
|
@@ -180,9 +213,51 @@ export const findChainForSegments = (segments, chains) => {
|
|
|
180
213
|
bestScore = score;
|
|
181
214
|
match = matchedChain;
|
|
182
215
|
}
|
|
216
|
+
if (chainEndsWithWildcard(matchedChain)) {
|
|
217
|
+
if (wildcard === null || winsWildcard(matchedChain, wildcard)) {
|
|
218
|
+
wildcard = matchedChain;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else if (!isPartialMatch(segments, matchedChain)) {
|
|
222
|
+
if (score > bestFullScore) {
|
|
223
|
+
bestFullScore = score;
|
|
224
|
+
fullMatch = matchedChain;
|
|
225
|
+
}
|
|
226
|
+
maxFullFixed = Math.max(maxFullFixed, countFixedSegments(matchedChain));
|
|
227
|
+
}
|
|
183
228
|
}
|
|
184
229
|
}
|
|
185
|
-
|
|
230
|
+
// Without a wildcard to match the rest of the path, routes can still ignore trailing segments.
|
|
231
|
+
if (wildcard === null) {
|
|
232
|
+
return match;
|
|
233
|
+
}
|
|
234
|
+
// Compare fixed segments rather than priority, since nesting under default routes raises the priority
|
|
235
|
+
return countFixedSegments(wildcard) > maxFullFixed ? wildcard : fullMatch;
|
|
236
|
+
};
|
|
237
|
+
/** Returns whether the chain matched the path segments only by ignoring some trailing segments. */
|
|
238
|
+
const isPartialMatch = (segments, chain) => {
|
|
239
|
+
const matched = chainToSegments(chain);
|
|
240
|
+
return matched !== null && matched.length < segments.filter((s) => s !== '').length;
|
|
241
|
+
};
|
|
242
|
+
const chainEndsWithWildcard = (chain) => {
|
|
243
|
+
return endsWithWildcard(chain[chain.length - 1].segments);
|
|
244
|
+
};
|
|
245
|
+
/** Returns whether the wildcard chain beats `best` by fixed segments, then by priority. */
|
|
246
|
+
const winsWildcard = (chain, best) => {
|
|
247
|
+
const chainFixed = countFixedSegments(chain);
|
|
248
|
+
const bestFixed = countFixedSegments(best);
|
|
249
|
+
return chainFixed > bestFixed || (chainFixed === bestFixed && computePriority(chain) > computePriority(best));
|
|
250
|
+
};
|
|
251
|
+
const countFixedSegments = (chain) => {
|
|
252
|
+
let count = 0;
|
|
253
|
+
for (const route of chain) {
|
|
254
|
+
for (const segment of withoutWildcard(route.segments)) {
|
|
255
|
+
if (segment !== '' && segment[0] !== ':') {
|
|
256
|
+
count++;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return count;
|
|
186
261
|
};
|
|
187
262
|
/**
|
|
188
263
|
* Computes the priority of a chain.
|
|
@@ -194,12 +269,14 @@ export const findChainForSegments = (segments, chains) => {
|
|
|
194
269
|
* - /path/to/page
|
|
195
270
|
*
|
|
196
271
|
* The second one will be given a higher priority because "page" is a fixed segment (vs ":where", a parameter segment).
|
|
272
|
+
*
|
|
273
|
+
* A trailing wildcard is not counted.
|
|
197
274
|
*/
|
|
198
275
|
export const computePriority = (chain) => {
|
|
199
276
|
let score = 1;
|
|
200
277
|
let level = 1;
|
|
201
278
|
for (const route of chain) {
|
|
202
|
-
for (const segment of route.segments) {
|
|
279
|
+
for (const segment of withoutWildcard(route.segments)) {
|
|
203
280
|
if (segment[0] === ':') {
|
|
204
281
|
score += Math.pow(1, level);
|
|
205
282
|
}
|
|
@@ -221,4 +298,10 @@ export class RouterSegments {
|
|
|
221
298
|
}
|
|
222
299
|
return '';
|
|
223
300
|
}
|
|
301
|
+
/** Consumes and returns the remaining non empty segments. */
|
|
302
|
+
rest() {
|
|
303
|
+
const rest = this.segments.filter((s) => s !== '');
|
|
304
|
+
this.segments = [];
|
|
305
|
+
return rest;
|
|
306
|
+
}
|
|
224
307
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { ROUTER_INTENT_FORWARD } from "./constants";
|
|
4
|
+
import { ROUTER_INTENT_FORWARD, WILDCARD_PARAM } from "./constants";
|
|
5
5
|
/** Join the non empty segments with "/". */
|
|
6
6
|
export const generatePath = (segments) => {
|
|
7
7
|
const path = segments.filter((s) => s.length > 0).join('/');
|
|
@@ -34,12 +34,13 @@ export const writeSegments = (history, root, useHash, segments, direction, state
|
|
|
34
34
|
*
|
|
35
35
|
* Notes:
|
|
36
36
|
* - parameter segments of the form :param are replaced with their value,
|
|
37
|
-
* - null is returned when a value is missing for any parameter segment
|
|
37
|
+
* - null is returned when a value is missing for any parameter segment,
|
|
38
|
+
* - a trailing wildcard is replaced with the path it matched.
|
|
38
39
|
*/
|
|
39
40
|
export const chainToSegments = (chain) => {
|
|
40
41
|
const segments = [];
|
|
41
42
|
for (const route of chain) {
|
|
42
|
-
for (const segment of route.segments) {
|
|
43
|
+
for (const segment of withoutWildcard(route.segments)) {
|
|
43
44
|
if (segment[0] === ':') {
|
|
44
45
|
const param = route.params && route.params[segment.slice(1)];
|
|
45
46
|
if (!param) {
|
|
@@ -51,9 +52,22 @@ export const chainToSegments = (chain) => {
|
|
|
51
52
|
segments.push(segment);
|
|
52
53
|
}
|
|
53
54
|
}
|
|
55
|
+
segments.push(...wildcardSegments(route));
|
|
54
56
|
}
|
|
55
57
|
return segments;
|
|
56
58
|
};
|
|
59
|
+
/** Only a `*` in the last segment of a route url is a wildcard. Elsewhere it's matched literally. */
|
|
60
|
+
export const endsWithWildcard = (segments) => {
|
|
61
|
+
return segments[segments.length - 1] === '*';
|
|
62
|
+
};
|
|
63
|
+
/** Returns the path segments matched by the trailing wildcard of the route. */
|
|
64
|
+
const wildcardSegments = (route) => {
|
|
65
|
+
const pathMatch = endsWithWildcard(route.segments) ? route.params?.[WILDCARD_PARAM] : undefined;
|
|
66
|
+
return pathMatch ? pathMatch.split('/').filter((s) => s.length > 0) : [];
|
|
67
|
+
};
|
|
68
|
+
export const withoutWildcard = (segments) => {
|
|
69
|
+
return endsWithWildcard(segments) ? segments.slice(0, -1) : segments;
|
|
70
|
+
};
|
|
57
71
|
/**
|
|
58
72
|
* Removes the prefix segments from the path segments.
|
|
59
73
|
*
|
|
@@ -7,7 +7,7 @@ import { attachComponent, detachComponent } from "../../utils/framework-delegate
|
|
|
7
7
|
import { shallowEqualStringMap, hasLazyBuild } from "../../utils/helpers";
|
|
8
8
|
import { createLockController } from "../../utils/lock-controller";
|
|
9
9
|
import { printIonError } from "../../utils/logging/index";
|
|
10
|
-
import {
|
|
10
|
+
import { transition } from "../../utils/transition/index";
|
|
11
11
|
import { config } from "../../global/config";
|
|
12
12
|
import { getIonMode } from "../../global/ionic-global";
|
|
13
13
|
export class RouterOutlet {
|
|
@@ -32,14 +32,6 @@ export class RouterOutlet {
|
|
|
32
32
|
async connectedCallback() {
|
|
33
33
|
const onStart = () => {
|
|
34
34
|
this.gestureOrAnimationInProgress = true;
|
|
35
|
-
/**
|
|
36
|
-
* Without animations there's nothing for the swipe to drive, so
|
|
37
|
-
* wait until the gesture ends to decide whether to go back.
|
|
38
|
-
*/
|
|
39
|
-
if (!(this.animated && config.getBoolean('animated', true))) {
|
|
40
|
-
this.unblockSwipeClicks = blockSwipeClicks(this.el);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
35
|
if (this.swipeHandler) {
|
|
44
36
|
this.swipeHandler.onStart();
|
|
45
37
|
}
|
|
@@ -72,21 +64,7 @@ export class RouterOutlet {
|
|
|
72
64
|
this.ani.progressEnd(shouldComplete ? 1 : 0, newStepValue, dur);
|
|
73
65
|
}
|
|
74
66
|
else {
|
|
75
|
-
|
|
76
|
-
this.unblockSwipeClicks = undefined;
|
|
77
|
-
// The stack can change during the swipe, so check that going back is still possible.
|
|
78
|
-
if (unblock && shouldComplete && swipeHandler?.canStart()) {
|
|
79
|
-
new Promise((resolve) => resolve(swipeHandler.onStart()))
|
|
80
|
-
.then(() => swipeHandler.onEnd(true))
|
|
81
|
-
.finally(() => {
|
|
82
|
-
this.gestureOrAnimationInProgress = false;
|
|
83
|
-
unblock();
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
this.gestureOrAnimationInProgress = false;
|
|
88
|
-
unblock?.();
|
|
89
|
-
}
|
|
67
|
+
this.gestureOrAnimationInProgress = false;
|
|
90
68
|
}
|
|
91
69
|
});
|
|
92
70
|
if (this.swipeGesture === undefined) {
|
|
@@ -109,12 +87,6 @@ export class RouterOutlet {
|
|
|
109
87
|
this.gesture.destroy();
|
|
110
88
|
this.gesture = undefined;
|
|
111
89
|
}
|
|
112
|
-
// Destroying the gesture skips onEnd, so end a deferred swipe here.
|
|
113
|
-
if (this.unblockSwipeClicks) {
|
|
114
|
-
this.unblockSwipeClicks();
|
|
115
|
-
this.unblockSwipeClicks = undefined;
|
|
116
|
-
this.gestureOrAnimationInProgress = false;
|
|
117
|
-
}
|
|
118
90
|
}
|
|
119
91
|
/** @internal */
|
|
120
92
|
async commit(enteringEl, leavingEl, opts) {
|
|
@@ -226,7 +198,7 @@ export class RouterOutlet {
|
|
|
226
198
|
return true;
|
|
227
199
|
}
|
|
228
200
|
render() {
|
|
229
|
-
return h("slot", { key: '
|
|
201
|
+
return h("slot", { key: '249e7d8a063c781db52fa535e42d648c7bf2909a' });
|
|
230
202
|
}
|
|
231
203
|
static get is() { return "ion-router-outlet"; }
|
|
232
204
|
static get encapsulation() { return "shadow"; }
|
|
@@ -30,23 +30,6 @@ 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
|
-
};
|
|
50
33
|
export const startHardwareBackButton = () => {
|
|
51
34
|
const doc = document;
|
|
52
35
|
let busy = false;
|
|
@@ -98,44 +81,32 @@ export const startHardwareBackButton = () => {
|
|
|
98
81
|
processHandlers();
|
|
99
82
|
};
|
|
100
83
|
/**
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
84
|
+
* If the CloseWatcher is defined then
|
|
85
|
+
* we don't want to also listen for the native
|
|
86
|
+
* backbutton event otherwise we may get duplicate
|
|
87
|
+
* events firing.
|
|
104
88
|
*/
|
|
105
|
-
doc.addEventListener('backbutton', backButtonCallback);
|
|
106
89
|
if (shouldUseCloseWatcher()) {
|
|
107
90
|
let watcher;
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
}
|
|
91
|
+
const configureWatcher = () => {
|
|
92
|
+
watcher?.destroy();
|
|
122
93
|
watcher = new win.CloseWatcher();
|
|
123
94
|
/**
|
|
124
95
|
* Once a close request happens
|
|
125
96
|
* the watcher gets destroyed.
|
|
126
97
|
* As a result, we need to re-configure
|
|
127
98
|
* the watcher so we can respond to other
|
|
128
|
-
* close requests
|
|
129
|
-
* closed nothing, like a modal whose canDismiss
|
|
130
|
-
* returned false.
|
|
99
|
+
* close requests.
|
|
131
100
|
*/
|
|
132
101
|
watcher.onclose = () => {
|
|
133
|
-
watcher = undefined;
|
|
134
102
|
backButtonCallback();
|
|
135
|
-
|
|
103
|
+
configureWatcher();
|
|
136
104
|
};
|
|
137
105
|
};
|
|
138
|
-
|
|
106
|
+
configureWatcher();
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
doc.addEventListener('backbutton', backButtonCallback);
|
|
139
110
|
}
|
|
140
111
|
};
|
|
141
112
|
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
|
|
5
|
+
import { MENU_BACK_BUTTON_PRIORITY } 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,7 +184,6 @@ const createMenuController = () => {
|
|
|
184
184
|
registerAnimation('reveal', menuRevealAnimation);
|
|
185
185
|
registerAnimation('push', menuPushAnimation);
|
|
186
186
|
registerAnimation('overlay', menuOverlayAnimation);
|
|
187
|
-
addCloseWatcherCondition(() => _getOpenSync() !== undefined);
|
|
188
187
|
doc?.addEventListener('ionBackButton', (ev) => {
|
|
189
188
|
const openMenu = _getOpenSync();
|
|
190
189
|
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 {
|
|
6
|
+
import { shouldUseCloseWatcher } 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,11 +13,6 @@ 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';
|
|
21
16
|
export const activeAnimations = new WeakMap();
|
|
22
17
|
/**
|
|
23
18
|
* Determines if the overlay's backdrop is always blocking (no background interaction).
|
|
@@ -144,7 +139,7 @@ const focusElementInOverlay = (hostToFocus, overlay) => {
|
|
|
144
139
|
* Should NOT include: Toast
|
|
145
140
|
*/
|
|
146
141
|
const trapKeyboardFocus = (ev, doc) => {
|
|
147
|
-
const lastOverlay = getPresentedOverlay(doc,
|
|
142
|
+
const lastOverlay = getPresentedOverlay(doc, 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-popover');
|
|
148
143
|
const target = ev.target;
|
|
149
144
|
/**
|
|
150
145
|
* If no active overlay, ignore this event.
|
|
@@ -327,11 +322,6 @@ const connectListeners = (doc) => {
|
|
|
327
322
|
doc.addEventListener('focus', (ev) => {
|
|
328
323
|
trapKeyboardFocus(ev, doc);
|
|
329
324
|
}, 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);
|
|
335
325
|
// handle back-button click
|
|
336
326
|
doc.addEventListener('ionBackButton', (ev) => {
|
|
337
327
|
const lastOverlay = getPresentedOverlay(doc);
|
|
@@ -455,8 +445,7 @@ export const setRootAriaHidden = (hidden = false) => {
|
|
|
455
445
|
* Cleans up root `aria-hidden` and `backdrop-no-scroll` when
|
|
456
446
|
* an overlay is removed from the DOM without going through
|
|
457
447
|
* the `dismiss()` flow (e.g., when a framework unmounts the
|
|
458
|
-
* overlay during a route change).
|
|
459
|
-
* CloseWatcher if nothing is left to close.
|
|
448
|
+
* overlay during a route change).
|
|
460
449
|
*
|
|
461
450
|
* Should be called from an overlay's `disconnectedCallback`
|
|
462
451
|
* when the overlay was still presented at the time of removal.
|
|
@@ -465,7 +454,6 @@ export const cleanupRootFocusTrapAccessibility = () => {
|
|
|
465
454
|
if (typeof document === 'undefined') {
|
|
466
455
|
return;
|
|
467
456
|
}
|
|
468
|
-
updateCloseWatcher();
|
|
469
457
|
const remainingOverlays = getPresentedOverlays(document);
|
|
470
458
|
const hasRemainingLocking = remainingOverlays.some((o) => locksAppRoot(o));
|
|
471
459
|
if (!hasRemainingLocking) {
|
|
@@ -487,9 +475,7 @@ const applyRootLock = (el) => {
|
|
|
487
475
|
};
|
|
488
476
|
/**
|
|
489
477
|
* Re-applies the root lock that `cleanupRootFocusTrapAccessibility()` released.
|
|
490
|
-
* Call from `connectedCallback` when the overlay is still presented.
|
|
491
|
-
* re-arms the CloseWatcher, which every overlay needs, so that happens
|
|
492
|
-
* before the `locksAppRoot` check.
|
|
478
|
+
* Call from `connectedCallback` when the overlay is still presented.
|
|
493
479
|
*
|
|
494
480
|
* A synchronous move keeps the overlay connected, so the lock survives. A
|
|
495
481
|
* detach with a re-insert in a later task releases it, which is the shape a
|
|
@@ -499,7 +485,6 @@ export const restoreRootFocusTrapAccessibility = (overlayEl) => {
|
|
|
499
485
|
if (typeof document === 'undefined') {
|
|
500
486
|
return;
|
|
501
487
|
}
|
|
502
|
-
updateCloseWatcher();
|
|
503
488
|
const el = overlayEl;
|
|
504
489
|
if (!locksAppRoot(el)) {
|
|
505
490
|
return;
|
|
@@ -713,11 +698,6 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
|
|
|
713
698
|
printIonError(`[${overlay.el.tagName.toLowerCase()}] - `, err);
|
|
714
699
|
}
|
|
715
700
|
overlay.el.remove();
|
|
716
|
-
/**
|
|
717
|
-
* Release the back button if nothing
|
|
718
|
-
* else is left to close.
|
|
719
|
-
*/
|
|
720
|
-
updateCloseWatcher();
|
|
721
701
|
return true;
|
|
722
702
|
};
|
|
723
703
|
const getAppRoot = (doc) => {
|
|
@@ -726,12 +706,6 @@ const getAppRoot = (doc) => {
|
|
|
726
706
|
const overlayAnimation = async (overlay, animationBuilder, baseEl, opts) => {
|
|
727
707
|
// Make overlay visible in case it's hidden
|
|
728
708
|
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();
|
|
735
709
|
const aniRoot = overlay.el;
|
|
736
710
|
const animation = animationBuilder(aniRoot, opts);
|
|
737
711
|
if (!overlay.animated || !config.getBoolean('animated', true)) {
|
|
@@ -229,17 +229,6 @@ export const setPageHidden = (el, hidden) => {
|
|
|
229
229
|
el.classList.remove('ion-page-hidden');
|
|
230
230
|
}
|
|
231
231
|
};
|
|
232
|
-
/**
|
|
233
|
-
* Blocks clicks on `el` during a swipe to go back without animations,
|
|
234
|
-
* so releasing the pointer doesn't click whatever is under it. Returns
|
|
235
|
-
* a function that unblocks it after the release click.
|
|
236
|
-
*/
|
|
237
|
-
export const blockSwipeClicks = (el) => {
|
|
238
|
-
el.style.setProperty('pointer-events', 'none');
|
|
239
|
-
return () => {
|
|
240
|
-
setTimeout(() => el.style.removeProperty('pointer-events'));
|
|
241
|
-
};
|
|
242
|
-
};
|
|
243
232
|
const setZIndex = (enteringEl, leavingEl, direction) => {
|
|
244
233
|
if (enteringEl !== undefined) {
|
|
245
234
|
enteringEl.style.zIndex = direction === 'back' ? '99' : '101';
|
package/dist/docs.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"timestamp": "2026-10-
|
|
2
|
+
"timestamp": "2026-10-20T19:35:25",
|
|
3
3
|
"compiler": {
|
|
4
4
|
"name": "@stencil/core",
|
|
5
|
-
"version": "4.45.
|
|
5
|
+
"version": "4.45.1",
|
|
6
6
|
"typescriptVersion": "5.8.3"
|
|
7
7
|
},
|
|
8
8
|
"components": [
|
|
@@ -27325,7 +27325,7 @@
|
|
|
27325
27325
|
"mutable": false,
|
|
27326
27326
|
"attr": "url",
|
|
27327
27327
|
"reflectToAttr": false,
|
|
27328
|
-
"docs": "Relative path that needs to match in order for this route to apply.\n\nAccepts paths similar to expressjs so that you can define parameters\nin the url /foo/:bar where bar would be available in incoming props.",
|
|
27328
|
+
"docs": "Relative path that needs to match in order for this route to apply.\n\nAccepts paths similar to expressjs so that you can define parameters\nin the url /foo/:bar where bar would be available in incoming props.\n\nA url ending in `*`, such as `*` or `/admin/*`, matches any remaining path,\nincluding none, so `/admin/*` also matches `/admin`. It only wins over a\nroute that matches the whole path when it has more fixed segments, so\n`/admin/*` wins over `/:section/:id` but not over `/admin/:id`. It always\nwins over a route that matches by ignoring trailing segments, such as\n`/admin` for `/admin/users`. The matched path is passed in the `pathMatch`\nprop without a leading `/`. A `*` on a route with child routes is ignored.",
|
|
27329
27329
|
"docsTags": [
|
|
27330
27330
|
{
|
|
27331
27331
|
"name": "default",
|
|
@@ -27389,7 +27389,7 @@
|
|
|
27389
27389
|
"mutable": false,
|
|
27390
27390
|
"attr": "from",
|
|
27391
27391
|
"reflectToAttr": false,
|
|
27392
|
-
"docs": "A redirect route, redirects \"from\" a URL \"to\" another URL. This property is that \"from\" URL.\nIt needs to be an exact match of the navigated URL in order to apply
|
|
27392
|
+
"docs": "A redirect route, redirects \"from\" a URL \"to\" another URL. This property is that \"from\" URL.\nIt needs to be an exact match of the navigated URL in order to apply, unless it ends in `*`.\nA `from` that ends in `*` matches any path below it, but not the path itself, so `/admin/*`\nmatches `/admin/posts` but not `/admin`.\n\nThe path specified in this value is always an absolute path, even if the initial `/` slash\nis not specified.",
|
|
27393
27393
|
"docsTags": [],
|
|
27394
27394
|
"values": [
|
|
27395
27395
|
{
|
|
@@ -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-D9OR05yj.js';
|
|
5
|
+
import { w as win } from './helpers-B54ynME_.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-B-G43ddm.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-B54ynME_.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-D9OR05yj.js';
|
|
5
|
+
import { h as hapticSelectionEnd, a as hapticSelectionChanged, b as hapticSelectionStart } from './haptic-Dxm7ZmT5.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-B54ynME_.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-D9OR05yj.js';
|
|
5
5
|
import { i as isRTL } from './dir-Dojwmvde.js';
|
|
6
6
|
|
|
7
7
|
const win = typeof window !== 'undefined' ? window : undefined;
|