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
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Build, Host, h, forceUpdate, } from "@stencil/core";
|
|
5
5
|
import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
|
|
6
|
-
import { compareOptions, createClickController, createNotchController,
|
|
6
|
+
import { compareOptions, createClickController, createNotchController, createStartEndContainerController, getSlottedClickContent, isOptionSelected, checkInvalidState, } from "../../utils/forms/index";
|
|
7
7
|
import { focusVisibleElement, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
|
|
8
8
|
import { printIonWarning } from "../../utils/logging/index";
|
|
9
9
|
import { actionSheetController, alertController, popoverController, modalController } from "../../utils/overlays";
|
|
@@ -186,14 +186,14 @@ export class Select {
|
|
|
186
186
|
async connectedCallback() {
|
|
187
187
|
const { el } = this;
|
|
188
188
|
this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => {
|
|
189
|
-
this.
|
|
189
|
+
this.startEndContainerController?.calculateContainerWidths();
|
|
190
190
|
forceUpdate(this);
|
|
191
191
|
});
|
|
192
192
|
this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
|
|
193
|
-
this.
|
|
193
|
+
this.startEndContainerController = createStartEndContainerController(el, () => this.startContainerEl, () => this.endContainerEl, () => {
|
|
194
194
|
return Build.isBrowser && getIonMode(this) === 'md' && this.fill === 'outline';
|
|
195
195
|
});
|
|
196
|
-
this.
|
|
196
|
+
this.startEndContainerController.calculateContainerWidths();
|
|
197
197
|
this.clickController = createClickController(el);
|
|
198
198
|
this.updateOverlayOptions();
|
|
199
199
|
this.emitStyle();
|
|
@@ -274,9 +274,9 @@ export class Select {
|
|
|
274
274
|
this.notchController.destroy();
|
|
275
275
|
this.notchController = undefined;
|
|
276
276
|
}
|
|
277
|
-
if (this.
|
|
278
|
-
this.
|
|
279
|
-
this.
|
|
277
|
+
if (this.startEndContainerController) {
|
|
278
|
+
this.startEndContainerController.destroy();
|
|
279
|
+
this.startEndContainerController = undefined;
|
|
280
280
|
}
|
|
281
281
|
// Clean up validation observer to prevent memory leaks.
|
|
282
282
|
if (this.validationObserver) {
|
|
@@ -752,7 +752,7 @@ export class Select {
|
|
|
752
752
|
}
|
|
753
753
|
componentDidRender() {
|
|
754
754
|
this.notchController?.calculateNotchWidth();
|
|
755
|
-
this.
|
|
755
|
+
this.startEndContainerController?.calculateContainerWidths();
|
|
756
756
|
}
|
|
757
757
|
/**
|
|
758
758
|
* Gets any content passed into the `label` slot,
|
|
@@ -940,7 +940,7 @@ export class Select {
|
|
|
940
940
|
const hasOutlineFill = mode === 'md' && fill === 'outline';
|
|
941
941
|
renderHiddenInput(true, el, name, parseValue(value), disabled);
|
|
942
942
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || isExpanded));
|
|
943
|
-
return (h(Host, { key: '
|
|
943
|
+
return (h(Host, { key: 'c1949b8a58c5bde1cc7627d3b32c54bcb46a4752', onClick: this.onClick, class: createColorClasses(this.color, {
|
|
944
944
|
[mode]: true,
|
|
945
945
|
'in-item': inItem,
|
|
946
946
|
'in-item-color': hostContext('ion-item.ion-color', el),
|
|
@@ -958,7 +958,7 @@ export class Select {
|
|
|
958
958
|
[`select-justify-${justify}`]: justifyEnabled,
|
|
959
959
|
[`select-shape-${shape}`]: shape !== undefined,
|
|
960
960
|
[`select-label-placement-${labelPlacement}`]: true,
|
|
961
|
-
}) }, h("label", { key: '
|
|
961
|
+
}) }, h("label", { key: 'af4521a3679d9e4e08511e205f53663d8d5b6701', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, hasOutlineFill && this.renderOutlineContainer(), h("div", { key: '73e13f28ed4c2b0e9115f3d1b86934b84f8c5bc0', class: "select-start", part: "start", ref: (el) => (this.startContainerEl = el) }, h("slot", { key: 'ce88e5bbb15a4cde6a5f8580a35d7099e315e9e6', name: "start" })), h("div", { key: 'd1557c3d0ff41f5070a27b719fbfaf18eafa9052', class: "select-control", part: "control" }, this.renderLabel(), h("div", { key: 'bcd03ac6c6d72ab76a4344069d83c29a2cdaabf0', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox(), !hasFloatingOrStackedLabel && this.renderSelectIcon())), h("div", { key: '9be05035c1efb5c332a0044c81e032215c81278b', class: "select-end", part: "end", ref: (el) => (this.endContainerEl = el) }, hasFloatingOrStackedLabel && this.renderSelectIcon(), h("slot", { key: '551ab0cf3594805caaf14f36197f9cc56b9ee46a', name: "end" })), shouldRenderHighlight && h("div", { key: 'dd500fb4ae7d91d1733fec521dac9baaef6654a0', class: "select-highlight" })), this.renderBottomContent()));
|
|
962
962
|
}
|
|
963
963
|
static get is() { return "ion-select"; }
|
|
964
964
|
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;
|
|
@@ -981,12 +985,20 @@ button {
|
|
|
981
985
|
--padding-end: 16px;
|
|
982
986
|
/**
|
|
983
987
|
* The measured width of the start container, as a negative offset
|
|
984
|
-
* in LTR and a positive one in RTL. Written to the host by the
|
|
985
|
-
*
|
|
988
|
+
* in LTR and a positive one in RTL. Written to the host by the start
|
|
989
|
+
* and end container controller, so renaming it here requires renaming
|
|
986
990
|
* it there too. Declared with a default so the label is positioned
|
|
987
991
|
* correctly before the first measurement runs.
|
|
988
992
|
*/
|
|
989
993
|
--internal-start-container-adjustment: 0px;
|
|
994
|
+
/**
|
|
995
|
+
* The measured combined width of the start and end containers.
|
|
996
|
+
* Written to the host by the start and end container controller, so
|
|
997
|
+
* renaming it here requires renaming it there too. Declared with a
|
|
998
|
+
* default so the floating label falls back to the width of the
|
|
999
|
+
* control before the first measurement runs.
|
|
1000
|
+
*/
|
|
1001
|
+
--internal-start-end-container-width: 0px;
|
|
990
1002
|
min-height: 56px;
|
|
991
1003
|
}
|
|
992
1004
|
|
|
@@ -1056,9 +1068,8 @@ button {
|
|
|
1056
1068
|
:host(.select-fill-outline.select-label-placement-floating) .label-text-wrapper {
|
|
1057
1069
|
position: absolute;
|
|
1058
1070
|
/**
|
|
1059
|
-
*
|
|
1060
|
-
* excludes the start and end slots.
|
|
1061
|
-
* containing block becomes the wrapper and the rule below takes over.
|
|
1071
|
+
* This is the width of the select, which already
|
|
1072
|
+
* excludes the start and end slots.
|
|
1062
1073
|
*/
|
|
1063
1074
|
max-width: 100%;
|
|
1064
1075
|
}
|
|
@@ -1074,11 +1085,12 @@ button {
|
|
|
1074
1085
|
}
|
|
1075
1086
|
|
|
1076
1087
|
/**
|
|
1077
|
-
* The
|
|
1078
|
-
* the
|
|
1079
|
-
*
|
|
1088
|
+
* The label is positioned relative to the control whether it is resting
|
|
1089
|
+
* over the select or floating in the notch, so its max-width always resolves
|
|
1090
|
+
* against the same width. This lets the max-width animate between the
|
|
1091
|
+
* resting and floating values without jumping.
|
|
1080
1092
|
*/
|
|
1081
|
-
:host(.select-fill-outline
|
|
1093
|
+
:host(.select-fill-outline) .select-control {
|
|
1082
1094
|
position: relative;
|
|
1083
1095
|
}
|
|
1084
1096
|
|
|
@@ -1092,10 +1104,11 @@ button {
|
|
|
1092
1104
|
margin-top: 0;
|
|
1093
1105
|
margin-bottom: 0;
|
|
1094
1106
|
/**
|
|
1095
|
-
* Label text should not extend
|
|
1096
|
-
*
|
|
1107
|
+
* Label text should not extend beyond the bounds of the select.
|
|
1108
|
+
* The control excludes the start and end slots, but the notch spans
|
|
1109
|
+
* the full width of the outline, so their width is added back.
|
|
1097
1110
|
*/
|
|
1098
|
-
max-width: calc((100%
|
|
1111
|
+
max-width: calc((100% + var(--internal-start-end-container-width) - 8px) / 0.75);
|
|
1099
1112
|
}
|
|
1100
1113
|
|
|
1101
1114
|
/**
|
|
@@ -453,7 +453,11 @@
|
|
|
453
453
|
* would not be able to see what they are typing.
|
|
454
454
|
*/
|
|
455
455
|
max-width: 200px;
|
|
456
|
-
|
|
456
|
+
/**
|
|
457
|
+
* The max-width animates with the transform so the label does not
|
|
458
|
+
* reveal its full floating width while it is still at full size.
|
|
459
|
+
*/
|
|
460
|
+
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);
|
|
457
461
|
/**
|
|
458
462
|
* This ensures that double tapping this text
|
|
459
463
|
* clicks the <label> and focuses the textarea
|
|
@@ -467,8 +471,8 @@
|
|
|
467
471
|
* disable the label transition to prevent the floating label
|
|
468
472
|
* from animating as its position is adjusted.
|
|
469
473
|
*
|
|
470
|
-
* This class is applied by the start container controller,
|
|
471
|
-
* renaming it here requires renaming it there too.
|
|
474
|
+
* This class is applied by the start and end container controller,
|
|
475
|
+
* so renaming it here requires renaming it there too.
|
|
472
476
|
*/
|
|
473
477
|
:host(.skip-label-transition) .label-text-wrapper {
|
|
474
478
|
transition: none;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { Build, Host, forceUpdate, h, writeTask, } 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";
|
|
@@ -194,14 +194,14 @@ export class Textarea {
|
|
|
194
194
|
connectedCallback() {
|
|
195
195
|
const { el } = this;
|
|
196
196
|
this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => {
|
|
197
|
-
this.
|
|
197
|
+
this.startEndContainerController?.calculateContainerWidths();
|
|
198
198
|
forceUpdate(this);
|
|
199
199
|
});
|
|
200
200
|
this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
|
|
201
|
-
this.
|
|
201
|
+
this.startEndContainerController = createStartEndContainerController(el, () => this.startContainerEl, () => this.endContainerEl, () => {
|
|
202
202
|
return Build.isBrowser && getIonMode(this) === 'md' && this.fill === 'outline';
|
|
203
203
|
});
|
|
204
|
-
this.
|
|
204
|
+
this.startEndContainerController.calculateContainerWidths();
|
|
205
205
|
this.clickController = createClickController(el, () => this.nativeInput);
|
|
206
206
|
// Watch for class changes to update validation state
|
|
207
207
|
if (Build.isBrowser && typeof MutationObserver !== 'undefined') {
|
|
@@ -241,9 +241,9 @@ export class Textarea {
|
|
|
241
241
|
this.notchController.destroy();
|
|
242
242
|
this.notchController = undefined;
|
|
243
243
|
}
|
|
244
|
-
if (this.
|
|
245
|
-
this.
|
|
246
|
-
this.
|
|
244
|
+
if (this.startEndContainerController) {
|
|
245
|
+
this.startEndContainerController.destroy();
|
|
246
|
+
this.startEndContainerController = undefined;
|
|
247
247
|
}
|
|
248
248
|
// Clean up validation observer to prevent memory leaks
|
|
249
249
|
if (this.validationObserver) {
|
|
@@ -263,7 +263,7 @@ export class Textarea {
|
|
|
263
263
|
}
|
|
264
264
|
componentDidRender() {
|
|
265
265
|
this.notchController?.calculateNotchWidth();
|
|
266
|
-
this.
|
|
266
|
+
this.startEndContainerController?.calculateContainerWidths();
|
|
267
267
|
}
|
|
268
268
|
/**
|
|
269
269
|
* Sets focus on the native `textarea` in `ion-textarea`. Use this method instead of the global
|
|
@@ -458,7 +458,7 @@ export class Textarea {
|
|
|
458
458
|
* the textarea has a value or is focused.
|
|
459
459
|
*/
|
|
460
460
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus));
|
|
461
|
-
return (h(Host, { key: '
|
|
461
|
+
return (h(Host, { key: '59f577d7b82036d5e12d7b4e7d5f0339af1d185a', class: createColorClasses(this.color, {
|
|
462
462
|
[mode]: true,
|
|
463
463
|
'has-value': hasValue,
|
|
464
464
|
'has-focus': hasFocus,
|
|
@@ -467,7 +467,7 @@ export class Textarea {
|
|
|
467
467
|
[`textarea-shape-${shape}`]: shape !== undefined,
|
|
468
468
|
[`textarea-label-placement-${labelPlacement}`]: true,
|
|
469
469
|
'textarea-disabled': disabled,
|
|
470
|
-
}) }, h("label", { key: '
|
|
470
|
+
}) }, h("label", { key: '4684c4e760f0272d377809fcb28ed6fcad48b542', class: "textarea-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, hasOutlineFill && this.renderOutlineContainer(), h("div", { key: 'a3dd0e7b9494fce1ee33d011138600e8b697b227', class: "textarea-start", ref: (el) => (this.startContainerEl = el) }, h("slot", { key: '8f0a36f2373c859039b1437a0fdf8e7bef278272', name: "start" })), h("div", { key: '2cb3def25a6447aefb656e5fd89716be280055f1', class: "textarea-control" }, this.renderLabel(), h("div", { key: '613caadf5331ff4d9b52e1d2b22a7da36b248e76', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, h("textarea", { key: '3015a96367fa845f068118c5ae2484c4c8f30931', class: "native-textarea", ref: (el) => (this.nativeInput = el), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown, "aria-describedby": this.getHintTextID(), "aria-invalid": this.isInvalid ? 'true' : undefined, ...this.inheritedAttributes }, value))), h("div", { key: 'f97f361e9339125407b0ef5f53d8c55021f1f824', class: "textarea-end", ref: (el) => (this.endContainerEl = el) }, h("slot", { key: '032bd68ec3603f8cf598225714e02447712a283a', name: "end" })), shouldRenderHighlight && h("div", { key: '8e27cee63918d2f40a46c442a3bb2802be4cf3e4', class: "textarea-highlight" })), this.renderBottomContent()));
|
|
471
471
|
}
|
|
472
472
|
static get is() { return "ion-textarea"; }
|
|
473
473
|
static get encapsulation() { return "scoped"; }
|
|
@@ -453,7 +453,11 @@
|
|
|
453
453
|
* would not be able to see what they are typing.
|
|
454
454
|
*/
|
|
455
455
|
max-width: 200px;
|
|
456
|
-
|
|
456
|
+
/**
|
|
457
|
+
* The max-width animates with the transform so the label does not
|
|
458
|
+
* reveal its full floating width while it is still at full size.
|
|
459
|
+
*/
|
|
460
|
+
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);
|
|
457
461
|
/**
|
|
458
462
|
* This ensures that double tapping this text
|
|
459
463
|
* clicks the <label> and focuses the textarea
|
|
@@ -467,8 +471,8 @@
|
|
|
467
471
|
* disable the label transition to prevent the floating label
|
|
468
472
|
* from animating as its position is adjusted.
|
|
469
473
|
*
|
|
470
|
-
* This class is applied by the start container controller,
|
|
471
|
-
* renaming it here requires renaming it there too.
|
|
474
|
+
* This class is applied by the start and end container controller,
|
|
475
|
+
* so renaming it here requires renaming it there too.
|
|
472
476
|
*/
|
|
473
477
|
:host(.skip-label-transition) .label-text-wrapper {
|
|
474
478
|
transition: none;
|
|
@@ -1060,12 +1064,20 @@
|
|
|
1060
1064
|
--padding-end: 16px;
|
|
1061
1065
|
/**
|
|
1062
1066
|
* The measured width of the start container, as a negative offset
|
|
1063
|
-
* in LTR and a positive one in RTL. Written to the host by the
|
|
1064
|
-
*
|
|
1067
|
+
* in LTR and a positive one in RTL. Written to the host by the start
|
|
1068
|
+
* and end container controller, so renaming it here requires renaming
|
|
1065
1069
|
* it there too. Declared with a default so the label is positioned
|
|
1066
1070
|
* correctly before the first measurement runs.
|
|
1067
1071
|
*/
|
|
1068
1072
|
--internal-start-container-adjustment: 0px;
|
|
1073
|
+
/**
|
|
1074
|
+
* The measured combined width of the start and end containers.
|
|
1075
|
+
* Written to the host by the start and end container controller, so
|
|
1076
|
+
* renaming it here requires renaming it there too. Declared with a
|
|
1077
|
+
* default so the floating label falls back to the width of the
|
|
1078
|
+
* control before the first measurement runs.
|
|
1079
|
+
*/
|
|
1080
|
+
--internal-start-end-container-width: 0px;
|
|
1069
1081
|
}
|
|
1070
1082
|
|
|
1071
1083
|
:host(.textarea-fill-outline.textarea-shape-round) {
|
|
@@ -1120,11 +1132,12 @@
|
|
|
1120
1132
|
}
|
|
1121
1133
|
|
|
1122
1134
|
/**
|
|
1123
|
-
* The
|
|
1124
|
-
* the
|
|
1125
|
-
*
|
|
1135
|
+
* The label is positioned relative to the control whether it is resting
|
|
1136
|
+
* over the textarea or floating in the notch, so its max-width always resolves
|
|
1137
|
+
* against the same width. This lets the max-width animate between the
|
|
1138
|
+
* resting and floating values without jumping.
|
|
1126
1139
|
*/
|
|
1127
|
-
:host(.textarea-fill-outline
|
|
1140
|
+
:host(.textarea-fill-outline) .textarea-control {
|
|
1128
1141
|
position: relative;
|
|
1129
1142
|
}
|
|
1130
1143
|
|
|
@@ -1133,9 +1146,8 @@
|
|
|
1133
1146
|
transform-origin: left top;
|
|
1134
1147
|
position: absolute;
|
|
1135
1148
|
/**
|
|
1136
|
-
*
|
|
1137
|
-
* excludes the start and end slots.
|
|
1138
|
-
* containing block becomes the wrapper and the rule below takes over.
|
|
1149
|
+
* This is the width of the textarea, which already
|
|
1150
|
+
* excludes the start and end slots.
|
|
1139
1151
|
*/
|
|
1140
1152
|
max-width: 100%;
|
|
1141
1153
|
}
|
|
@@ -1168,12 +1180,11 @@
|
|
|
1168
1180
|
margin-top: 0;
|
|
1169
1181
|
margin-bottom: 0;
|
|
1170
1182
|
/**
|
|
1171
|
-
* Label text should not extend
|
|
1172
|
-
*
|
|
1183
|
+
* Label text should not extend beyond the bounds of the textarea.
|
|
1184
|
+
* The control excludes the start and end slots, but the notch spans
|
|
1185
|
+
* the full width of the outline, so their width is added back.
|
|
1173
1186
|
*/
|
|
1174
|
-
max-width: calc(
|
|
1175
|
-
(100% - var(--padding-start) - var(--padding-end) - 8px) / 0.75
|
|
1176
|
-
);
|
|
1187
|
+
max-width: calc((100% + var(--internal-start-end-container-width) - 8px) / 0.75);
|
|
1177
1188
|
}
|
|
1178
1189
|
|
|
1179
1190
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
export * from './notch-controller';
|
|
5
|
-
export * from './start-container-controller';
|
|
5
|
+
export * from './start-end-container-controller';
|
|
6
6
|
export * from './compare-with-utils';
|
|
7
7
|
export * from './item-multiple-inputs';
|
|
8
8
|
export * from './click-controller';
|
|
@@ -18,10 +18,19 @@ export const SKIP_LABEL_TRANSITION_CLASS = 'skip-label-transition';
|
|
|
18
18
|
*/
|
|
19
19
|
export const START_CONTAINER_ADJUSTMENT_VAR = '--internal-start-container-adjustment';
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
21
|
+
* Set on the host as an inline style. The component stylesheets declare
|
|
22
|
+
* this property and read it with `var()`, so it must stay in sync with
|
|
23
|
+
* the `--internal-start-end-container-width` references in those files.
|
|
24
|
+
* Renaming it here requires renaming it there too.
|
|
25
|
+
*/
|
|
26
|
+
export const START_END_CONTAINER_WIDTH_VAR = '--internal-start-end-container-width';
|
|
27
|
+
/**
|
|
28
|
+
* A utility to measure the start and end containers of form components
|
|
29
|
+
* (input, textarea, select) with `fill="outline"` and write the results
|
|
30
|
+
* to the host. The start container width offsets floating/stacked labels
|
|
31
|
+
* so they line up with the outline border. The combined start and end
|
|
32
|
+
* container width lets the floating label size itself to the full width
|
|
33
|
+
* of the outline while still being positioned relative to the control.
|
|
25
34
|
*
|
|
26
35
|
* Measurement is deferred with raf() to avoid forcing layout during
|
|
27
36
|
* component updates, and a ResizeObserver watches for dynamic width
|
|
@@ -30,29 +39,36 @@ export const START_CONTAINER_ADJUSTMENT_VAR = '--internal-start-container-adjust
|
|
|
30
39
|
* @internal
|
|
31
40
|
* @param el - The host element (ion-input, ion-textarea, or ion-select).
|
|
32
41
|
* @param getStartContainer - A callback that returns the start container element.
|
|
33
|
-
* @param
|
|
42
|
+
* @param getEndContainer - A callback that returns the end container element.
|
|
43
|
+
* @param shouldMeasure - A callback that determines whether the containers should be measured.
|
|
34
44
|
*/
|
|
35
|
-
export const
|
|
45
|
+
export const createStartEndContainerController = (el, getStartContainer, getEndContainer, shouldMeasure) => {
|
|
36
46
|
let resizeObserver;
|
|
37
|
-
let
|
|
47
|
+
let observedStartContainer;
|
|
48
|
+
let observedEndContainer;
|
|
38
49
|
let measurementRaf;
|
|
39
50
|
let transitionRaf;
|
|
40
51
|
let appliedAdjustment;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
52
|
+
let appliedStartEndWidth;
|
|
53
|
+
/*
|
|
54
|
+
* Round to one decimal place so fractional widths produce a stable
|
|
55
|
+
* label offset and width when a container is added, removed, or resized.
|
|
56
|
+
*/
|
|
57
|
+
const roundWidth = (width) => Math.round(width * 10) / 10;
|
|
58
|
+
const measureContainers = () => {
|
|
59
|
+
const startContainer = getStartContainer();
|
|
60
|
+
if (!startContainer || !shouldMeasure()) {
|
|
61
|
+
return { adjustment: '', startEndWidth: '' };
|
|
45
62
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
* label offset when the start container is added, removed, or resized.
|
|
49
|
-
*/
|
|
50
|
-
const startContainerWidth = startSlot.getBoundingClientRect().width;
|
|
51
|
-
const roundedWidth = Math.round(startContainerWidth * 10) / 10;
|
|
63
|
+
const startContainerWidth = roundWidth(startContainer.getBoundingClientRect().width);
|
|
64
|
+
const endContainerWidth = roundWidth(getEndContainer()?.getBoundingClientRect().width ?? 0);
|
|
52
65
|
const sign = isRTL(el) ? '' : '-';
|
|
53
|
-
return
|
|
66
|
+
return {
|
|
67
|
+
adjustment: startContainerWidth ? `${sign}${startContainerWidth}px` : '0px',
|
|
68
|
+
startEndWidth: `${roundWidth(startContainerWidth + endContainerWidth)}px`,
|
|
69
|
+
};
|
|
54
70
|
};
|
|
55
|
-
const
|
|
71
|
+
const scheduleMeasurement = () => {
|
|
56
72
|
// Return if there is already a measurement queued to avoid a flicker
|
|
57
73
|
if (measurementRaf !== undefined) {
|
|
58
74
|
return;
|
|
@@ -63,7 +79,17 @@ export const createStartContainerController = (el, getStartContainer, shouldAppl
|
|
|
63
79
|
*/
|
|
64
80
|
measurementRaf = raf(() => {
|
|
65
81
|
measurementRaf = undefined;
|
|
66
|
-
const adjustment =
|
|
82
|
+
const { adjustment, startEndWidth } = measureContainers();
|
|
83
|
+
/*
|
|
84
|
+
* The width only changes how much of the label fits, so it can
|
|
85
|
+
* animate. The transition is not suppressed here because the end
|
|
86
|
+
* container can change size while the label is floating, such as
|
|
87
|
+
* when async content loads, and that should not cut the float short.
|
|
88
|
+
*/
|
|
89
|
+
if (startEndWidth !== appliedStartEndWidth) {
|
|
90
|
+
el.style.setProperty(START_END_CONTAINER_WIDTH_VAR, startEndWidth);
|
|
91
|
+
appliedStartEndWidth = startEndWidth;
|
|
92
|
+
}
|
|
67
93
|
// Only suppress the label transition when the label has to move
|
|
68
94
|
if (adjustment !== appliedAdjustment) {
|
|
69
95
|
// Discard a removal queued by an earlier change
|
|
@@ -86,29 +112,36 @@ export const createStartContainerController = (el, getStartContainer, shouldAppl
|
|
|
86
112
|
if (resizeObserver) {
|
|
87
113
|
resizeObserver.disconnect();
|
|
88
114
|
resizeObserver = undefined;
|
|
89
|
-
|
|
115
|
+
observedStartContainer = undefined;
|
|
116
|
+
observedEndContainer = undefined;
|
|
90
117
|
}
|
|
91
118
|
};
|
|
92
119
|
const setupResizeObserver = () => {
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
120
|
+
const startContainer = getStartContainer();
|
|
121
|
+
const endContainer = getEndContainer();
|
|
122
|
+
// Stop watching once the measurements no longer apply
|
|
123
|
+
if (!startContainer || !shouldMeasure()) {
|
|
96
124
|
disconnectResizeObserver();
|
|
97
125
|
return;
|
|
98
126
|
}
|
|
99
|
-
// Return when prerendering or already watching
|
|
100
|
-
if (typeof ResizeObserver !== 'function' ||
|
|
127
|
+
// Return when prerendering or already watching these containers
|
|
128
|
+
if (typeof ResizeObserver !== 'function' ||
|
|
129
|
+
(resizeObserver && observedStartContainer === startContainer && observedEndContainer === endContainer)) {
|
|
101
130
|
return;
|
|
102
131
|
}
|
|
103
132
|
disconnectResizeObserver();
|
|
104
133
|
resizeObserver = new ResizeObserver(() => {
|
|
105
|
-
|
|
134
|
+
scheduleMeasurement();
|
|
106
135
|
});
|
|
107
|
-
|
|
108
|
-
resizeObserver.observe(
|
|
136
|
+
observedStartContainer = startContainer;
|
|
137
|
+
resizeObserver.observe(startContainer);
|
|
138
|
+
if (endContainer) {
|
|
139
|
+
observedEndContainer = endContainer;
|
|
140
|
+
resizeObserver.observe(endContainer);
|
|
141
|
+
}
|
|
109
142
|
};
|
|
110
|
-
const
|
|
111
|
-
|
|
143
|
+
const calculateContainerWidths = () => {
|
|
144
|
+
scheduleMeasurement();
|
|
112
145
|
};
|
|
113
146
|
const destroy = () => {
|
|
114
147
|
disconnectResizeObserver();
|
|
@@ -124,9 +157,10 @@ export const createStartContainerController = (el, getStartContainer, shouldAppl
|
|
|
124
157
|
}
|
|
125
158
|
// Re-apply from scratch if the element is connected again
|
|
126
159
|
appliedAdjustment = undefined;
|
|
160
|
+
appliedStartEndWidth = undefined;
|
|
127
161
|
};
|
|
128
162
|
return {
|
|
129
|
-
|
|
163
|
+
calculateContainerWidths,
|
|
130
164
|
destroy,
|
|
131
165
|
};
|
|
132
166
|
};
|
|
@@ -30,6 +30,23 @@ export const shouldUseCloseWatcher = () => config.get('experimentalCloseWatcher'
|
|
|
30
30
|
export const blockHardwareBackButton = () => {
|
|
31
31
|
document.addEventListener('backbutton', () => { });
|
|
32
32
|
};
|
|
33
|
+
const closeWatcherConditions = [];
|
|
34
|
+
let syncCloseWatcher;
|
|
35
|
+
/**
|
|
36
|
+
* Registers a check for whether the back button
|
|
37
|
+
* has something to close. The CloseWatcher is only
|
|
38
|
+
* active while one of these checks passes.
|
|
39
|
+
*/
|
|
40
|
+
export const addCloseWatcherCondition = (condition) => {
|
|
41
|
+
closeWatcherConditions.push(condition);
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Call this whenever something the back button
|
|
45
|
+
* can close opens or closes.
|
|
46
|
+
*/
|
|
47
|
+
export const updateCloseWatcher = () => {
|
|
48
|
+
syncCloseWatcher?.();
|
|
49
|
+
};
|
|
33
50
|
export const startHardwareBackButton = () => {
|
|
34
51
|
const doc = document;
|
|
35
52
|
let busy = false;
|
|
@@ -81,32 +98,44 @@ export const startHardwareBackButton = () => {
|
|
|
81
98
|
processHandlers();
|
|
82
99
|
};
|
|
83
100
|
/**
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* events firing.
|
|
101
|
+
* Android WebView never sends the hardware back
|
|
102
|
+
* button to a CloseWatcher, so hybrid apps still
|
|
103
|
+
* need this. Browsers never fire backbutton.
|
|
88
104
|
*/
|
|
105
|
+
doc.addEventListener('backbutton', backButtonCallback);
|
|
89
106
|
if (shouldUseCloseWatcher()) {
|
|
90
107
|
let watcher;
|
|
91
|
-
|
|
92
|
-
|
|
108
|
+
/**
|
|
109
|
+
* An active CloseWatcher stops the back button from
|
|
110
|
+
* navigating, so only keep one while there's something to close.
|
|
111
|
+
*/
|
|
112
|
+
syncCloseWatcher = () => {
|
|
113
|
+
const canClose = closeWatcherConditions.some((condition) => condition());
|
|
114
|
+
if (!canClose) {
|
|
115
|
+
watcher?.destroy();
|
|
116
|
+
watcher = undefined;
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (watcher !== undefined) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
93
122
|
watcher = new win.CloseWatcher();
|
|
94
123
|
/**
|
|
95
124
|
* Once a close request happens
|
|
96
125
|
* the watcher gets destroyed.
|
|
97
126
|
* As a result, we need to re-configure
|
|
98
127
|
* the watcher so we can respond to other
|
|
99
|
-
* close requests
|
|
128
|
+
* close requests, including after one that
|
|
129
|
+
* closed nothing, like a modal whose canDismiss
|
|
130
|
+
* returned false.
|
|
100
131
|
*/
|
|
101
132
|
watcher.onclose = () => {
|
|
133
|
+
watcher = undefined;
|
|
102
134
|
backButtonCallback();
|
|
103
|
-
|
|
135
|
+
syncCloseWatcher?.();
|
|
104
136
|
};
|
|
105
137
|
};
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
doc.addEventListener('backbutton', backButtonCallback);
|
|
138
|
+
syncCloseWatcher();
|
|
110
139
|
}
|
|
111
140
|
};
|
|
112
141
|
export const OVERLAY_BACK_BUTTON_PRIORITY = 100;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { doc } from "../browser/index";
|
|
5
|
-
import { MENU_BACK_BUTTON_PRIORITY } from "../hardware-back-button";
|
|
5
|
+
import { MENU_BACK_BUTTON_PRIORITY, addCloseWatcherCondition } from "../hardware-back-button";
|
|
6
6
|
import { printIonWarning } from "../logging/index";
|
|
7
7
|
import { componentOnReady } from "../helpers";
|
|
8
8
|
import { menuOverlayAnimation } from "./animations/overlay";
|
|
@@ -184,6 +184,7 @@ const createMenuController = () => {
|
|
|
184
184
|
registerAnimation('reveal', menuRevealAnimation);
|
|
185
185
|
registerAnimation('push', menuPushAnimation);
|
|
186
186
|
registerAnimation('overlay', menuOverlayAnimation);
|
|
187
|
+
addCloseWatcherCondition(() => _getOpenSync() !== undefined);
|
|
187
188
|
doc?.addEventListener('ionBackButton', (ev) => {
|
|
188
189
|
const openMenu = _getOpenSync();
|
|
189
190
|
if (openMenu) {
|