voyager-ionic-core 9.0.6 → 9.0.9
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-B-5Z9djt.js +4 -0
- package/components/p-B02CcbPD.js +4 -0
- package/components/{p-DlUdjUlf.js → p-B4IBdPVJ.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-Canp1qah.js → p-Ba9_OzSY.js} +1 -1
- package/components/{p-CJgshb3W.js → p-Bd8hg9FK.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/components/{p-BinR4_P7.js → p-CKTjkpAq.js} +1 -1
- package/components/{p-y7Nhe3de.js → p-CKiqp4Vl.js} +1 -1
- package/components/{p-CiXOsJF2.js → p-CONpe3oX.js} +1 -1
- package/components/{p-BSJriPuC.js → p-CW84OFQa.js} +1 -1
- package/components/{p-PPagT42x.js → p-CYctYy9B.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-BKxLivx4.js → p-D0nwlsl_.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/{dist/ionic/p-Bv-6401R.js → components/p-Dbi3KqKm.js} +1 -1
- package/components/p-DfDIY2oP.js +4 -0
- package/components/{p-CTUMJM0R.js → p-Drpw2dyl.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-SHHIB5F0.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/components/p-zQi7R3tS.js +4 -0
- 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-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-DCfr5hz-.js} +16 -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 +46 -18
- 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 +7 -3
- 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 +61 -15
- 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 +33 -8
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +2 -2
- package/dist/cjs/ion-input.cjs.entry.js +17 -17
- 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 +41 -91
- package/dist/cjs/ion-nav_2.cjs.entry.js +29 -7
- 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 +19 -19
- 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 +16 -16
- 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 +5 -5
- package/dist/cjs/{ios.transition-YFSxiyP_.js → ios.transition-Ca6XODo9.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 +4 -4
- package/dist/cjs/{md.transition-Cm8yg0UK.js → md.transition-D8SfNYEp.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-B2OfJEBH.js} +68 -34
- package/dist/cjs/{status-tap-C3frTJ4c.js → status-tap-CDA0Y3Ad.js} +3 -3
- package/dist/cjs/{swipe-back-ChrfFzIe.js → swipe-back-Dy8pxJCF.js} +2 -2
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/backdrop/backdrop.js +6 -2
- package/dist/collection/components/datetime/datetime.js +56 -10
- package/dist/collection/components/input/input.ios.css +7 -3
- package/dist/collection/components/input/input.js +11 -11
- package/dist/collection/components/input/input.md.css +28 -15
- package/dist/collection/components/input-otp/input-otp.js +29 -3
- package/dist/collection/components/menu/menu.js +4 -3
- package/dist/collection/components/modal/gestures/sheet.js +30 -80
- package/dist/collection/components/nav/nav.js +24 -2
- package/dist/collection/components/router-outlet/router-outlet.js +31 -3
- package/dist/collection/components/select/select.ios.css +7 -3
- package/dist/collection/components/select/select.js +10 -10
- package/dist/collection/components/select/select.md.css +28 -15
- package/dist/collection/components/textarea/textarea.ios.css +7 -3
- package/dist/collection/components/textarea/textarea.js +10 -10
- package/dist/collection/components/textarea/textarea.md.css +28 -17
- package/dist/collection/utils/forms/index.js +1 -1
- package/dist/collection/utils/forms/{start-container-controller.js → start-end-container-controller.js} +66 -32
- 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/collection/utils/transition/index.js +11 -0
- package/dist/docs.json +4 -4
- 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-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-B8iieOdw.js → index-z9vdZN7I.js} +16 -5
- 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 +46 -18
- 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 +7 -3
- 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 +61 -15
- 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 +33 -8
- package/dist/esm/ion-input-password-toggle.entry.js +2 -2
- package/dist/esm/ion-input.entry.js +17 -17
- 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 +41 -91
- package/dist/esm/ion-nav_2.entry.js +29 -7
- 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 +19 -19
- 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 +16 -16
- 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 +6 -6
- package/dist/esm/{ios.transition-CRfGj4Mo.js → ios.transition-BkUGiDUz.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 +5 -5
- package/dist/esm/{md.transition-wqThNy_C.js → md.transition-B6hlrWjR.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-Btpr9-9O.js} +68 -34
- package/dist/esm/{status-tap-DRx9wSD_.js → status-tap-VGRBYwiC.js} +3 -3
- package/dist/esm/{swipe-back-CXmdi75W.js → swipe-back-tCNYR9ZM.js} +2 -2
- package/dist/html.html-data.json +1 -1
- 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-c2a23101.entry.js → p-28251c5c.entry.js} +1 -1
- package/dist/ionic/p-293cb1d5.entry.js +4 -0
- 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-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-61321cfa.entry.js +4 -0
- 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-657239f5.entry.js +4 -0
- package/dist/ionic/p-67f004eb.entry.js +4 -0
- package/dist/ionic/{p-37f46670.entry.js → p-6c7b5930.entry.js} +1 -1
- package/dist/ionic/{p-b710b4b8.entry.js → p-76c189e7.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-b9659d21.entry.js → p-8c85e250.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-94f1f7df.entry.js +4 -0
- package/dist/ionic/{p-083b1119.entry.js → p-9ffccbf1.entry.js} +1 -1
- package/dist/ionic/{p-DffXRKHu.js → p-B0jcOZOE.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-BVEsh7-M.js → p-BZTgGzGK.js} +1 -1
- package/dist/ionic/p-BdHBcCZF.js +4 -0
- package/dist/ionic/p-BexAj0yw.js +4 -0
- package/dist/ionic/p-BpED_ep_.js +4 -0
- package/dist/ionic/p-BpRUsN_W.js +6 -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-kKvGoaEe.js → p-CgcGX08t.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/dist/ionic/p-DXXGkPA8.js +4 -0
- package/dist/ionic/{p-CCik51Nv.js → p-DfvWlTdB.js} +1 -1
- package/dist/ionic/p-Dk4Mdaru.js +4 -0
- 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-4dbb2f4f.entry.js → p-a7d368b5.entry.js} +1 -1
- package/dist/ionic/p-af11d3c6.entry.js +4 -0
- 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-e1haAYzm.js +4 -0
- package/dist/ionic/{p-e05073f6.entry.js → p-e7ab4def.entry.js} +1 -1
- package/dist/ionic/p-e8e69c21.entry.js +4 -0
- 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-f9057f70.entry.js → p-f2116a54.entry.js} +1 -1
- package/dist/ionic/{p-B4ELlbJE.js → p-nCAPr1Ah.js} +1 -1
- package/dist/types/components/backdrop/backdrop.d.ts +4 -0
- package/dist/types/components/datetime/datetime.d.ts +20 -3
- package/dist/types/components/input/input.d.ts +2 -1
- package/dist/types/components/input-otp/input-otp.d.ts +7 -0
- package/dist/types/components/nav/nav.d.ts +1 -0
- package/dist/types/components/router-outlet/router-outlet.d.ts +1 -0
- package/dist/types/components/select/select.d.ts +2 -1
- package/dist/types/components/textarea/textarea.d.ts +2 -1
- package/dist/types/components.d.ts +3 -3
- package/dist/types/utils/config.d.ts +4 -1
- package/dist/types/utils/forms/index.d.ts +1 -1
- package/dist/types/utils/forms/start-end-container-controller.d.ts +44 -0
- package/dist/types/utils/hardware-back-button.d.ts +11 -0
- package/dist/types/utils/overlays.d.ts +5 -2
- package/dist/types/utils/transition/index.d.ts +6 -0
- package/hydrate/index.js +698 -354
- package/hydrate/index.mjs +698 -354
- package/package.json +4 -4
- package/components/p-BKeulLTJ.js +0 -4
- package/components/p-BNnmwjuy.js +0 -4
- package/components/p-BUVGbkSc.js +0 -4
- package/components/p-BexLz2XV.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-CVVUo4J1.js +0 -4
- package/components/p-CcQQ8oRo.js +0 -4
- package/components/p-Ctw69DyZ.js +0 -4
- package/components/p-F1rV0pyK.js +0 -4
- package/components/p-WMQuK_Tj.js +0 -4
- package/components/p-fFx6WCTj.js +0 -4
- package/components/p-q2WJ5Igc.js +0 -4
- package/dist/ionic/p-1213b719.entry.js +0 -4
- package/dist/ionic/p-336ea4b8.entry.js +0 -4
- package/dist/ionic/p-49a16200.entry.js +0 -4
- package/dist/ionic/p-52dc3309.entry.js +0 -4
- package/dist/ionic/p-636349e2.entry.js +0 -4
- package/dist/ionic/p-7441ed2b.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-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-PkaVMJga.js +0 -4
- package/dist/ionic/p-ba7bd621.entry.js +0 -4
- package/dist/ionic/p-e4c3f17f.entry.js +0 -4
- package/dist/ionic/p-edcb63e5.entry.js +0 -4
- package/dist/ionic/p-tXpzvta8.js +0 -4
- package/dist/ionic/p-vPo3vRFc.js +0 -4
- package/dist/types/utils/forms/start-container-controller.d.ts +0 -34
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { Build, Host, forceUpdate, h, } from "@stencil/core";
|
|
5
|
-
import { createClickController, createNotchController,
|
|
5
|
+
import { createClickController, createNotchController, createStartEndContainerController, checkInvalidState, } from "../../utils/forms/index";
|
|
6
6
|
import { inheritAriaAttributes, debounceEvent, inheritAttributes, componentOnReady } from "../../utils/helpers";
|
|
7
7
|
import { createSlotMutationController } from "../../utils/slot-mutation-controller";
|
|
8
8
|
import { createColorClasses, hostContext } from "../../utils/theme";
|
|
@@ -238,16 +238,16 @@ export class Input {
|
|
|
238
238
|
connectedCallback() {
|
|
239
239
|
const { el } = this;
|
|
240
240
|
this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => {
|
|
241
|
-
this.
|
|
241
|
+
this.startEndContainerController?.calculateContainerWidths();
|
|
242
242
|
this.setSlottedLabelId();
|
|
243
243
|
forceUpdate(this);
|
|
244
244
|
});
|
|
245
245
|
this.setSlottedLabelId();
|
|
246
246
|
this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
|
|
247
|
-
this.
|
|
247
|
+
this.startEndContainerController = createStartEndContainerController(el, () => this.startContainerEl, () => this.endContainerEl, () => {
|
|
248
248
|
return Build.isBrowser && getIonMode(this) === 'md' && this.fill === 'outline';
|
|
249
249
|
});
|
|
250
|
-
this.
|
|
250
|
+
this.startEndContainerController.calculateContainerWidths();
|
|
251
251
|
this.clickController = createClickController(el, () => this.nativeInput);
|
|
252
252
|
// Watch for class changes to update validation state
|
|
253
253
|
if (Build.isBrowser && typeof MutationObserver !== 'undefined') {
|
|
@@ -286,7 +286,7 @@ export class Input {
|
|
|
286
286
|
}
|
|
287
287
|
componentDidRender() {
|
|
288
288
|
this.notchController?.calculateNotchWidth();
|
|
289
|
-
this.
|
|
289
|
+
this.startEndContainerController?.calculateContainerWidths();
|
|
290
290
|
}
|
|
291
291
|
disconnectedCallback() {
|
|
292
292
|
if (Build.isBrowser) {
|
|
@@ -302,9 +302,9 @@ export class Input {
|
|
|
302
302
|
this.notchController.destroy();
|
|
303
303
|
this.notchController = undefined;
|
|
304
304
|
}
|
|
305
|
-
if (this.
|
|
306
|
-
this.
|
|
307
|
-
this.
|
|
305
|
+
if (this.startEndContainerController) {
|
|
306
|
+
this.startEndContainerController.destroy();
|
|
307
|
+
this.startEndContainerController = undefined;
|
|
308
308
|
}
|
|
309
309
|
// Clean up validation observer to prevent memory leaks
|
|
310
310
|
if (this.validationObserver) {
|
|
@@ -524,7 +524,7 @@ export class Input {
|
|
|
524
524
|
* the input has a value or is focused.
|
|
525
525
|
*/
|
|
526
526
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus));
|
|
527
|
-
return (h(Host, { key: '
|
|
527
|
+
return (h(Host, { key: '0d03d37173639105b19083c0b44da25d9115a449', class: createColorClasses(this.color, {
|
|
528
528
|
[mode]: true,
|
|
529
529
|
'has-value': hasValue,
|
|
530
530
|
'has-focus': hasFocus,
|
|
@@ -535,14 +535,14 @@ export class Input {
|
|
|
535
535
|
'in-item': inItem,
|
|
536
536
|
'in-item-color': hostContext('ion-item.ion-color', this.el),
|
|
537
537
|
'input-disabled': disabled,
|
|
538
|
-
}) }, h("label", { key: '
|
|
538
|
+
}) }, h("label", { key: '1d62890b6a54229fccae0832eebe92e546e6e53d', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, hasOutlineFill && this.renderOutlineContainer(), h("div", { key: 'b1ceeb7666678569f6479729d556a29b8e549ce5', class: "input-start", ref: (el) => (this.startContainerEl = el) }, h("slot", { key: '1af55c89b1390ff9063a6c6d49a1e8bd01c7c78e', name: "start" })), h("div", { key: '6df6bc5521352ca87aeb400d169b0c9129521249', class: "input-control" }, this.renderLabel(), h("div", { key: '55d2b3a235332d7fbf61356b13052b5c9cda01de', class: "native-wrapper", onClick: this.onLabelClick }, h("input", { key: 'a938cb7ef2e87bde9da310817e1a48e7a5c67bc3', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect ? 'on' : 'off', autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd, "aria-describedby": this.getHintTextID(), "aria-invalid": this.isInvalid ? 'true' : undefined, "aria-labelledby": this.getLabelledById(), ...this.inheritedAttributes }))), h("div", { key: 'c99685e001ee133220d74cfa877a72063d46433c', class: "input-end", ref: (el) => (this.endContainerEl = el) }, this.clearInput && !readonly && !disabled && (h("button", { key: '0e0e154182cca8b5367c1586b3c8c5b20b38006b', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
|
|
539
539
|
/**
|
|
540
540
|
* This prevents mobile browsers from
|
|
541
541
|
* blurring the input when the clear
|
|
542
542
|
* button is activated.
|
|
543
543
|
*/
|
|
544
544
|
ev.preventDefault();
|
|
545
|
-
}, onClick: this.clearTextInput }, h("ion-icon", { key: '
|
|
545
|
+
}, onClick: this.clearTextInput }, h("ion-icon", { key: '655e8d25940dbfb96e7e83b6e89575337e3e91d3', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: '6104c04ae34a26da62095de70c752efb2a0417ab', name: "end" })), shouldRenderHighlight && h("div", { key: 'c85cd8e07397e0bbd1e5a120014d83f391dfbc4c', class: "input-highlight" })), this.renderBottomContent()));
|
|
546
546
|
}
|
|
547
547
|
static get is() { return "ion-input"; }
|
|
548
548
|
static get encapsulation() { return "scoped"; }
|
|
@@ -425,7 +425,11 @@
|
|
|
425
425
|
* would not be able to see what they are typing.
|
|
426
426
|
*/
|
|
427
427
|
max-width: 200px;
|
|
428
|
-
|
|
428
|
+
/**
|
|
429
|
+
* The max-width animates with the transform so the label does not
|
|
430
|
+
* reveal its full floating width while it is still at full size.
|
|
431
|
+
*/
|
|
432
|
+
transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1), max-width 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
429
433
|
/**
|
|
430
434
|
* This ensures that double tapping this text
|
|
431
435
|
* clicks the <label> and focuses the input
|
|
@@ -439,8 +443,8 @@
|
|
|
439
443
|
* disable the label transition to prevent the floating label
|
|
440
444
|
* from animating as its position is adjusted.
|
|
441
445
|
*
|
|
442
|
-
* This class is applied by the start container controller,
|
|
443
|
-
* renaming it here requires renaming it there too.
|
|
446
|
+
* This class is applied by the start and end container controller,
|
|
447
|
+
* so renaming it here requires renaming it there too.
|
|
444
448
|
*/
|
|
445
449
|
:host(.skip-label-transition) .label-text-wrapper {
|
|
446
450
|
transition: none;
|
|
@@ -946,12 +950,20 @@
|
|
|
946
950
|
--padding-end: 16px;
|
|
947
951
|
/**
|
|
948
952
|
* The measured width of the start container, as a negative offset
|
|
949
|
-
* in LTR and a positive one in RTL. Written to the host by the
|
|
950
|
-
*
|
|
953
|
+
* in LTR and a positive one in RTL. Written to the host by the start
|
|
954
|
+
* and end container controller, so renaming it here requires renaming
|
|
951
955
|
* it there too. Declared with a default so the label is positioned
|
|
952
956
|
* correctly before the first measurement runs.
|
|
953
957
|
*/
|
|
954
958
|
--internal-start-container-adjustment: 0px;
|
|
959
|
+
/**
|
|
960
|
+
* The measured combined width of the start and end containers.
|
|
961
|
+
* Written to the host by the start and end container controller, so
|
|
962
|
+
* renaming it here requires renaming it there too. Declared with a
|
|
963
|
+
* default so the floating label falls back to the width of the
|
|
964
|
+
* control before the first measurement runs.
|
|
965
|
+
*/
|
|
966
|
+
--internal-start-end-container-width: 0px;
|
|
955
967
|
min-height: 56px;
|
|
956
968
|
}
|
|
957
969
|
|
|
@@ -1007,11 +1019,12 @@
|
|
|
1007
1019
|
}
|
|
1008
1020
|
|
|
1009
1021
|
/**
|
|
1010
|
-
* The
|
|
1011
|
-
* the
|
|
1012
|
-
*
|
|
1022
|
+
* The label is positioned relative to the control whether it is resting
|
|
1023
|
+
* over the input or floating in the notch, so its max-width always resolves
|
|
1024
|
+
* against the same width. This lets the max-width animate between the
|
|
1025
|
+
* resting and floating values without jumping.
|
|
1013
1026
|
*/
|
|
1014
|
-
:host(.input-fill-outline
|
|
1027
|
+
:host(.input-fill-outline) .input-control {
|
|
1015
1028
|
position: relative;
|
|
1016
1029
|
}
|
|
1017
1030
|
|
|
@@ -1020,9 +1033,8 @@
|
|
|
1020
1033
|
transform-origin: left top;
|
|
1021
1034
|
position: absolute;
|
|
1022
1035
|
/**
|
|
1023
|
-
*
|
|
1024
|
-
* excludes the start and end slots.
|
|
1025
|
-
* containing block becomes the wrapper and the rule below takes over.
|
|
1036
|
+
* This is the width of the text input, which already
|
|
1037
|
+
* excludes the start and end slots.
|
|
1026
1038
|
*/
|
|
1027
1039
|
max-width: 100%;
|
|
1028
1040
|
}
|
|
@@ -1055,10 +1067,11 @@
|
|
|
1055
1067
|
margin-top: 0;
|
|
1056
1068
|
margin-bottom: 0;
|
|
1057
1069
|
/**
|
|
1058
|
-
* Label text should not extend
|
|
1059
|
-
*
|
|
1070
|
+
* Label text should not extend beyond the bounds of the input.
|
|
1071
|
+
* The control excludes the start and end slots, but the notch spans
|
|
1072
|
+
* the full width of the outline, so their width is added back.
|
|
1060
1073
|
*/
|
|
1061
|
-
max-width: calc((100%
|
|
1074
|
+
max-width: calc((100% + var(--internal-start-end-container-width) - 8px) / 0.75);
|
|
1062
1075
|
}
|
|
1063
1076
|
|
|
1064
1077
|
:host(.input-fill-outline) .input-outline-container {
|
|
@@ -19,6 +19,11 @@ export class InputOTP {
|
|
|
19
19
|
* focus behavior when an input box is focused.
|
|
20
20
|
*/
|
|
21
21
|
this.isKeyboardNavigation = false;
|
|
22
|
+
/**
|
|
23
|
+
* The `length` watcher runs before new inputs render, so
|
|
24
|
+
* `componentDidRender` updates their tab indexes instead.
|
|
25
|
+
*/
|
|
26
|
+
this.updateTabIndexesAfterRender = false;
|
|
22
27
|
this.inputValues = [];
|
|
23
28
|
this.hasFocus = false;
|
|
24
29
|
this.previousInputValues = [];
|
|
@@ -378,6 +383,10 @@ export class InputOTP {
|
|
|
378
383
|
this.initializeValues();
|
|
379
384
|
this.updateTabIndexes();
|
|
380
385
|
}
|
|
386
|
+
lengthChanged() {
|
|
387
|
+
this.initializeValues();
|
|
388
|
+
this.updateTabIndexesAfterRender = true;
|
|
389
|
+
}
|
|
381
390
|
/**
|
|
382
391
|
* Processes the separators prop into an array of numbers.
|
|
383
392
|
*
|
|
@@ -434,6 +443,12 @@ export class InputOTP {
|
|
|
434
443
|
componentDidLoad() {
|
|
435
444
|
this.updateTabIndexes();
|
|
436
445
|
}
|
|
446
|
+
componentDidRender() {
|
|
447
|
+
if (this.updateTabIndexesAfterRender) {
|
|
448
|
+
this.updateTabIndexesAfterRender = false;
|
|
449
|
+
this.updateTabIndexes();
|
|
450
|
+
}
|
|
451
|
+
}
|
|
437
452
|
/**
|
|
438
453
|
* Get the regex pattern for allowed characters.
|
|
439
454
|
* If a pattern is provided, use it to create a regex pattern
|
|
@@ -611,7 +626,7 @@ export class InputOTP {
|
|
|
611
626
|
const tabbableIndex = this.getTabbableIndex();
|
|
612
627
|
const pattern = this.getPattern();
|
|
613
628
|
const hasDescription = el.querySelector('.input-otp-description')?.textContent?.trim() !== '';
|
|
614
|
-
return (h(Host, { key: '
|
|
629
|
+
return (h(Host, { key: 'def9fbd4fa135e6f435380c6ea86ac1621b4a111', class: createColorClasses(color, {
|
|
615
630
|
[mode]: true,
|
|
616
631
|
'has-focus': hasFocus,
|
|
617
632
|
[`input-otp-size-${size}`]: true,
|
|
@@ -619,10 +634,18 @@ export class InputOTP {
|
|
|
619
634
|
[`input-otp-fill-${fill}`]: true,
|
|
620
635
|
'input-otp-disabled': disabled,
|
|
621
636
|
'input-otp-readonly': readonly,
|
|
622
|
-
}) }, h("div", { key: '
|
|
637
|
+
}) }, h("div", { key: '5d3d7646a3d4fc856b7b2e1f53d29fca47b10baf', role: "group", "aria-label": "One-time password input", class: "input-otp-group", ...inheritedAttributes }, Array.from({ length }).map((_, index) => (h(Fragment, null, h("div", { class: "native-wrapper" }, h("input", { class: "native-input", id: `${inputId}-${index}`, "aria-label": `Input ${index + 1} of ${length}`, type: "text", autoCapitalize: autocapitalize, inputmode: inputmode, pattern: pattern, disabled: disabled, readOnly: readonly, tabIndex: index === tabbableIndex ? 0 : -1, value: inputValues[index] || '', autocomplete: "one-time-code", ref: (el) => {
|
|
638
|
+
if (el) {
|
|
639
|
+
inputRefs[index] = el;
|
|
640
|
+
}
|
|
641
|
+
else {
|
|
642
|
+
// The input was removed, so drop its ref and any after it.
|
|
643
|
+
inputRefs.splice(index);
|
|
644
|
+
}
|
|
645
|
+
}, onInput: this.onInput(index), onBlur: this.onBlur, onFocus: this.onFocus(index), onKeyDown: this.onKeyDown(index), onPaste: this.onPaste })), this.showSeparator(index) && h("div", { class: "input-otp-separator" }))))), h("div", { key: '9d72a4ab35b5fdd6bba9701050c385ed253b310f', class: {
|
|
623
646
|
'input-otp-description': true,
|
|
624
647
|
'input-otp-description-hidden': !hasDescription,
|
|
625
|
-
} }, h("slot", { key: '
|
|
648
|
+
} }, h("slot", { key: '7deb3373c0d4e5deac22fa51577d271b9bb3a6d2' }))));
|
|
626
649
|
}
|
|
627
650
|
static get is() { return "ion-input-otp"; }
|
|
628
651
|
static get encapsulation() { return "scoped"; }
|
|
@@ -1054,6 +1077,9 @@ export class InputOTP {
|
|
|
1054
1077
|
return [{
|
|
1055
1078
|
"propName": "value",
|
|
1056
1079
|
"methodName": "valueChanged"
|
|
1080
|
+
}, {
|
|
1081
|
+
"propName": "length",
|
|
1082
|
+
"methodName": "lengthChanged"
|
|
1057
1083
|
}, {
|
|
1058
1084
|
"propName": "separators",
|
|
1059
1085
|
"methodName": "processSeparators"
|
|
@@ -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"; }
|
|
@@ -7,6 +7,8 @@ import { clamp, getElementRoot, raf } from "../../../utils/helpers";
|
|
|
7
7
|
import { FOCUS_TRAP_DISABLE_CLASS } from "../../../utils/overlays";
|
|
8
8
|
import { getBackdropValueForSheet } from "../utils";
|
|
9
9
|
import { calculateSpringStep, canSwipeOnContent, handleCanDismiss } from "./utils";
|
|
10
|
+
/** How far ahead, in milliseconds, a drag's velocity is projected when snapping. */
|
|
11
|
+
const FLICK_PROJECTION_MS = 350;
|
|
10
12
|
export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], expandToScroll, getCurrentBreakpoint, onDismiss, onBreakpointChange, onDragStart, onDragMove, onDragEnd) => {
|
|
11
13
|
// Defaults for the sheet swipe animation
|
|
12
14
|
const defaultBackdrop = [
|
|
@@ -32,6 +34,11 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
32
34
|
const contentEl = baseEl.querySelector('ion-content');
|
|
33
35
|
// Cache the initial value so the gesture restores it instead of forcing scrolling on.
|
|
34
36
|
const initialContentScrollY = contentEl?.scrollY ?? true;
|
|
37
|
+
/**
|
|
38
|
+
* The height of the sheet the user actually sees. This comes from the wrapper
|
|
39
|
+
* rather than the host element, which is stretched to the full viewport no
|
|
40
|
+
* matter how tall the sheet itself is.
|
|
41
|
+
*/
|
|
35
42
|
const height = wrapperEl.clientHeight;
|
|
36
43
|
let currentBreakpoint = initialBreakpoint;
|
|
37
44
|
let offset = 0;
|
|
@@ -329,18 +336,18 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
329
336
|
: step;
|
|
330
337
|
offset = clamp(0.0001, processedStep, maxStep);
|
|
331
338
|
animation.progressStep(offset);
|
|
332
|
-
const snapBreakpoint = calculateSnapBreakpoint(detail.deltaY);
|
|
339
|
+
const snapBreakpoint = calculateSnapBreakpoint(detail.deltaY, detail.velocityY);
|
|
333
340
|
const eventDetail = {
|
|
334
341
|
currentY: detail.currentY,
|
|
335
342
|
deltaY: detail.deltaY,
|
|
336
343
|
velocityY: detail.velocityY,
|
|
337
|
-
progress:
|
|
344
|
+
progress: calculateEventProgress(detail.deltaY),
|
|
338
345
|
snapBreakpoint: snapBreakpoint,
|
|
339
346
|
};
|
|
340
347
|
onDragMove(eventDetail);
|
|
341
348
|
};
|
|
342
349
|
const onEnd = (detail) => {
|
|
343
|
-
const snapBreakpoint = calculateSnapBreakpoint(detail.deltaY);
|
|
350
|
+
const snapBreakpoint = calculateSnapBreakpoint(detail.deltaY, detail.velocityY);
|
|
344
351
|
/**
|
|
345
352
|
* `snapBreakpoint === 0` is not enough on its own. `canDismiss: false`
|
|
346
353
|
* snaps to 0 but never dismisses, since `handleCanDismiss` returns early
|
|
@@ -354,7 +361,7 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
354
361
|
currentY: detail.currentY,
|
|
355
362
|
deltaY: detail.deltaY,
|
|
356
363
|
velocityY: detail.velocityY,
|
|
357
|
-
progress:
|
|
364
|
+
progress: calculateEventProgress(detail.deltaY),
|
|
358
365
|
snapBreakpoint,
|
|
359
366
|
isDismissing,
|
|
360
367
|
};
|
|
@@ -530,24 +537,15 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
530
537
|
});
|
|
531
538
|
};
|
|
532
539
|
/**
|
|
533
|
-
*
|
|
534
|
-
* This determines where the sheet should snap to when the user releases the
|
|
535
|
-
* gesture.
|
|
540
|
+
* Decides which breakpoint the sheet should settle on for the current drag.
|
|
536
541
|
*
|
|
537
|
-
* @param deltaY The change in Y position since the gesture started
|
|
538
|
-
* @
|
|
542
|
+
* @param deltaY The change in Y position since the gesture started
|
|
543
|
+
* @param velocityY The velocity in pixels per millisecond
|
|
544
|
+
* @returns The snap breakpoint value
|
|
539
545
|
*/
|
|
540
|
-
const calculateSnapBreakpoint = (deltaY) => {
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
* We combine the wrapper's current bounding box position with the
|
|
544
|
-
* gesture's deltaY to account for the physical movement during the drag.
|
|
545
|
-
*/
|
|
546
|
-
const currentY = wrapperEl.getBoundingClientRect().top + deltaY;
|
|
547
|
-
/**
|
|
548
|
-
* Convert that pixel position back into a 0 to 1 progress value.
|
|
549
|
-
*/
|
|
550
|
-
const currentProgress = calculateProgress(currentY);
|
|
546
|
+
const calculateSnapBreakpoint = (deltaY, velocityY) => {
|
|
547
|
+
// Project the drag forward so a quick flick counts.
|
|
548
|
+
const currentProgress = calculateProgress(deltaY + velocityY * FLICK_PROJECTION_MS);
|
|
551
549
|
/**
|
|
552
550
|
* Find and return the defined breakpoint that is closest to the
|
|
553
551
|
* current progress.
|
|
@@ -558,74 +556,26 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
558
556
|
return snapBreakpoint;
|
|
559
557
|
};
|
|
560
558
|
/**
|
|
561
|
-
* Calculates the
|
|
559
|
+
* Calculates how open the sheet is part way through a gesture, on the same
|
|
560
|
+
* 0 to 1 scale as the breakpoints: 1 is fully open and 0 is fully closed.
|
|
562
561
|
*
|
|
563
|
-
*
|
|
564
|
-
* the swipe has progressed towards closing the modal.
|
|
565
|
-
*
|
|
566
|
-
* A value closer to 1 means the modal is closer to being opened,
|
|
567
|
-
* while a value closer to 0 means the modal is closer to being closed.
|
|
568
|
-
*
|
|
569
|
-
* @param currentY The current Y position of the gesture
|
|
562
|
+
* @param deltaY The change in Y position since the gesture started
|
|
570
563
|
* @returns The progress of the sheet gesture
|
|
571
564
|
*/
|
|
572
|
-
const calculateProgress = (
|
|
573
|
-
|
|
574
|
-
const
|
|
575
|
-
/**
|
|
576
|
-
* The lowest point the sheet can be dragged to aka the point at which
|
|
577
|
-
* the sheet is fully closed.
|
|
578
|
-
*/
|
|
579
|
-
const maxY = convertBreakpointToY(minBreakpoint);
|
|
580
|
-
/**
|
|
581
|
-
* The highest point the sheet can be dragged to aka the point at which
|
|
582
|
-
* the sheet is fully open.
|
|
583
|
-
*/
|
|
584
|
-
const minY = convertBreakpointToY(maxBreakpoint);
|
|
585
|
-
// The total distance between the fully open and fully closed positions.
|
|
586
|
-
const totalDistance = maxY - minY;
|
|
587
|
-
// The distance from the current position to the fully closed position.
|
|
588
|
-
const distanceFromBottom = maxY - currentY;
|
|
589
|
-
/**
|
|
590
|
-
* The progress represents how far the sheet is from the bottom relative
|
|
591
|
-
* to the total distance. When the user starts swiping up, the progress
|
|
592
|
-
* should be close to 1, and when the user has swiped all the way down,
|
|
593
|
-
* the progress should be close to 0.
|
|
594
|
-
*/
|
|
595
|
-
const progress = distanceFromBottom / totalDistance;
|
|
565
|
+
const calculateProgress = (deltaY) => {
|
|
566
|
+
// Mirrors the animation step in onMove, so the snap matches where the sheet is drawn.
|
|
567
|
+
const progress = currentBreakpoint - deltaY / height;
|
|
596
568
|
// Round to the nearest thousandth to avoid returning very small decimal
|
|
597
569
|
const roundedProgress = Math.round(progress * 1000) / 1000;
|
|
598
|
-
return
|
|
570
|
+
return clamp(0, roundedProgress, 1);
|
|
599
571
|
};
|
|
600
572
|
/**
|
|
601
|
-
*
|
|
602
|
-
*
|
|
603
|
-
*
|
|
604
|
-
* @param breakpoint The breakpoint value (e.g., 0.5 for half-open)
|
|
605
|
-
* @returns The pixel Y coordinate on the screen
|
|
573
|
+
* Scales the progress from the lowest to the highest breakpoint, so the
|
|
574
|
+
* drag events report 0 at the lowest breakpoint and 1 at the highest.
|
|
606
575
|
*/
|
|
607
|
-
const
|
|
608
|
-
const
|
|
609
|
-
|
|
610
|
-
// The bottom of the screen.
|
|
611
|
-
const viewportBottom = window.innerHeight;
|
|
612
|
-
/**
|
|
613
|
-
* The active height is how much of the modal is actually showing
|
|
614
|
-
* on the screen for this specific breakpoint.
|
|
615
|
-
*/
|
|
616
|
-
const activeHeight = modalHeight * breakpoint;
|
|
617
|
-
/**
|
|
618
|
-
* To find the Y coordinate, start at the bottom of the screen
|
|
619
|
-
* and move up by the active height of the modal.
|
|
620
|
-
*
|
|
621
|
-
* A breakpoint of 1.0 means the active height is the full modal height
|
|
622
|
-
* (fully open). A breakpoint of 0.0 means the active height is 0
|
|
623
|
-
* (fully closed).
|
|
624
|
-
*
|
|
625
|
-
* Since screen Y coordinates get smaller as you go up, we subtract the
|
|
626
|
-
* active height from the viewport bottom.
|
|
627
|
-
*/
|
|
628
|
-
return viewportBottom - activeHeight;
|
|
576
|
+
const calculateEventProgress = (deltaY) => {
|
|
577
|
+
const progress = (calculateProgress(deltaY) - minBreakpoint) / (maxBreakpoint - minBreakpoint);
|
|
578
|
+
return clamp(0, progress, 1);
|
|
629
579
|
};
|
|
630
580
|
const gesture = createGesture({
|
|
631
581
|
el: wrapperEl,
|
|
@@ -5,7 +5,7 @@ import { h } from "@stencil/core";
|
|
|
5
5
|
import { getTimeGivenProgression } from "../../utils/animation/cubic-bezier";
|
|
6
6
|
import { assert } from "../../utils/helpers";
|
|
7
7
|
import { printIonWarning } from "../../utils/logging/index";
|
|
8
|
-
import { lifecycle, setPageHidden, transition } from "../../utils/transition/index";
|
|
8
|
+
import { blockSwipeClicks, lifecycle, setPageHidden, transition } from "../../utils/transition/index";
|
|
9
9
|
import { config } from "../../global/config";
|
|
10
10
|
import { getIonMode } from "../../global/ionic-global";
|
|
11
11
|
import { LIFECYCLE_DID_LEAVE, LIFECYCLE_WILL_LEAVE, LIFECYCLE_WILL_UNLOAD } from "./constants";
|
|
@@ -68,6 +68,12 @@ export class Nav {
|
|
|
68
68
|
this.gesture.destroy();
|
|
69
69
|
this.gesture = undefined;
|
|
70
70
|
}
|
|
71
|
+
// Destroying the gesture skips onEnd, so end a deferred swipe here.
|
|
72
|
+
if (this.unblockSwipeClicks) {
|
|
73
|
+
this.unblockSwipeClicks();
|
|
74
|
+
this.unblockSwipeClicks = undefined;
|
|
75
|
+
this.gestureOrAnimationInProgress = false;
|
|
76
|
+
}
|
|
71
77
|
this.transInstr.length = 0;
|
|
72
78
|
this.views.length = 0;
|
|
73
79
|
this.destroyed = true;
|
|
@@ -688,6 +694,14 @@ export class Nav {
|
|
|
688
694
|
}
|
|
689
695
|
onStart() {
|
|
690
696
|
this.gestureOrAnimationInProgress = true;
|
|
697
|
+
/**
|
|
698
|
+
* Without animations there's nothing for the swipe to drive, so
|
|
699
|
+
* wait until the gesture ends to decide whether to go back.
|
|
700
|
+
*/
|
|
701
|
+
if (!(this.animated && config.getBoolean('animated', true))) {
|
|
702
|
+
this.unblockSwipeClicks = blockSwipeClicks(this.el);
|
|
703
|
+
return;
|
|
704
|
+
}
|
|
691
705
|
this.pop({ direction: 'back', progressAnimation: true });
|
|
692
706
|
}
|
|
693
707
|
onMove(stepValue) {
|
|
@@ -721,10 +735,18 @@ export class Nav {
|
|
|
721
735
|
}
|
|
722
736
|
else {
|
|
723
737
|
this.gestureOrAnimationInProgress = false;
|
|
738
|
+
const { unblockSwipeClicks } = this;
|
|
739
|
+
if (unblockSwipeClicks) {
|
|
740
|
+
this.unblockSwipeClicks = undefined;
|
|
741
|
+
if (shouldComplete) {
|
|
742
|
+
this.pop({ direction: 'back' });
|
|
743
|
+
}
|
|
744
|
+
unblockSwipeClicks();
|
|
745
|
+
}
|
|
724
746
|
}
|
|
725
747
|
}
|
|
726
748
|
render() {
|
|
727
|
-
return h("slot", { key: '
|
|
749
|
+
return h("slot", { key: '0aea554c0cf00dd3829757ec74c3855eccf1e068' });
|
|
728
750
|
}
|
|
729
751
|
static get is() { return "ion-nav"; }
|
|
730
752
|
static get encapsulation() { return "shadow"; }
|
|
@@ -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 { transition } from "../../utils/transition/index";
|
|
10
|
+
import { blockSwipeClicks, 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,6 +32,14 @@ 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
|
+
}
|
|
35
43
|
if (this.swipeHandler) {
|
|
36
44
|
this.swipeHandler.onStart();
|
|
37
45
|
}
|
|
@@ -65,7 +73,21 @@ export class RouterOutlet {
|
|
|
65
73
|
this.ani.progressEnd(shouldComplete ? 1 : 0, newStepValue, dur);
|
|
66
74
|
}
|
|
67
75
|
else {
|
|
68
|
-
|
|
76
|
+
const { swipeHandler, unblockSwipeClicks: unblock } = this;
|
|
77
|
+
this.unblockSwipeClicks = undefined;
|
|
78
|
+
// The stack can change during the swipe, so check that going back is still possible.
|
|
79
|
+
if (unblock && shouldComplete && swipeHandler?.canStart()) {
|
|
80
|
+
new Promise((resolve) => resolve(swipeHandler.onStart()))
|
|
81
|
+
.then(() => swipeHandler.onEnd(true))
|
|
82
|
+
.finally(() => {
|
|
83
|
+
this.gestureOrAnimationInProgress = false;
|
|
84
|
+
unblock();
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
this.gestureOrAnimationInProgress = false;
|
|
89
|
+
unblock?.();
|
|
90
|
+
}
|
|
69
91
|
}
|
|
70
92
|
});
|
|
71
93
|
if (this.swipeGesture === undefined) {
|
|
@@ -88,6 +110,12 @@ export class RouterOutlet {
|
|
|
88
110
|
this.gesture.destroy();
|
|
89
111
|
this.gesture = undefined;
|
|
90
112
|
}
|
|
113
|
+
// Destroying the gesture skips onEnd, so end a deferred swipe here.
|
|
114
|
+
if (this.unblockSwipeClicks) {
|
|
115
|
+
this.unblockSwipeClicks();
|
|
116
|
+
this.unblockSwipeClicks = undefined;
|
|
117
|
+
this.gestureOrAnimationInProgress = false;
|
|
118
|
+
}
|
|
91
119
|
}
|
|
92
120
|
/** @internal */
|
|
93
121
|
async commit(enteringEl, leavingEl, opts) {
|
|
@@ -199,7 +227,7 @@ export class RouterOutlet {
|
|
|
199
227
|
return true;
|
|
200
228
|
}
|
|
201
229
|
render() {
|
|
202
|
-
return h("slot", { key: '
|
|
230
|
+
return h("slot", { key: '811f32d8794e58fcc79deef1e217c4d419778742' });
|
|
203
231
|
}
|
|
204
232
|
static get is() { return "ion-router-outlet"; }
|
|
205
233
|
static get encapsulation() { return "shadow"; }
|
|
@@ -390,7 +390,11 @@ button {
|
|
|
390
390
|
* would not be able to see what they are typing.
|
|
391
391
|
*/
|
|
392
392
|
max-width: 200px;
|
|
393
|
-
|
|
393
|
+
/**
|
|
394
|
+
* The max-width animates with the transform so the label does not
|
|
395
|
+
* reveal its full floating width while it is still at full size.
|
|
396
|
+
*/
|
|
397
|
+
transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1), max-width 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
394
398
|
/**
|
|
395
399
|
* This ensures that double tapping this text
|
|
396
400
|
* clicks the <label> and focuses the input
|
|
@@ -404,8 +408,8 @@ button {
|
|
|
404
408
|
* disable the label transition to prevent the floating label
|
|
405
409
|
* from animating as its position is adjusted.
|
|
406
410
|
*
|
|
407
|
-
* This class is applied by the start container controller,
|
|
408
|
-
* renaming it here requires renaming it there too.
|
|
411
|
+
* This class is applied by the start and end container controller,
|
|
412
|
+
* so renaming it here requires renaming it there too.
|
|
409
413
|
*/
|
|
410
414
|
:host(.skip-label-transition) .label-text-wrapper {
|
|
411
415
|
transition: none;
|