voyager-ionic-core 9.0.3 → 9.0.7
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--cshUOAU.js +4 -0
- package/components/{p-BF48Oc0v.js → p-7KepMw9O.js} +1 -1
- package/components/p-B-5Z9djt.js +4 -0
- package/components/p-B02CcbPD.js +4 -0
- package/components/p-B4IBdPVJ.js +4 -0
- package/components/{p-BYJRZKHa.js → p-BMHdI-wb.js} +1 -1
- package/components/p-BODcC-C0.js +4 -0
- package/components/{p-D7wDJdFn.js → p-Ba9_OzSY.js} +1 -1
- package/components/{p-DMBiAyOR.js → p-BqyLLYLm.js} +1 -1
- package/components/{p-BQyuFxYc.js → p-C1AxSUnp.js} +1 -1
- package/components/p-C7r5Gja6.js +4 -0
- package/components/{p-D5w_FlVa.js → p-CKiqp4Vl.js} +1 -1
- package/components/{p-C8Ck7_Eo.js → p-C_gnmBt2.js} +1 -1
- package/{dist/ionic/p-DTxBioUO.js → components/p-CdrNHfZl.js} +1 -1
- package/components/{p-DM1gJSMP.js → p-ChkSQqfP.js} +1 -1
- package/components/p-ChsJlFCQ.js +4 -0
- package/components/{p-cEN43Ahr.js → p-CjPRDxby.js} +1 -1
- package/components/p-CohRJRIu.js +4 -0
- package/components/{p-DxhHlJln.js → p-CqvARtmt.js} +1 -1
- package/components/p-Ct2aBEue.js +4 -0
- package/components/p-CtiO6_sC.js +4 -0
- package/components/{p-Hp8t4RMX.js → p-CvyvLbPe.js} +1 -1
- package/{dist/ionic/p-BMiZX1LT.js → components/p-CwEis84J.js} +1 -1
- package/components/p-CxEV3Vwy.js +4 -0
- package/components/p-Cyajikho.js +4 -0
- package/components/p-D64Tyi-z.js +4 -0
- package/components/{p-B4lxwJ8N.js → p-DBtFJlTi.js} +1 -1
- package/components/p-DD92Fw3n.js +4 -0
- package/components/p-DDI6VLW9.js +4 -0
- package/components/{p-Fl7ZFU74.js → p-DHo45oj7.js} +1 -1
- package/components/{p-COO0eJOA.js → p-DMPsc_0r.js} +1 -1
- package/{dist/ionic/p-DZ6Hmc-8.js → components/p-Dbi3KqKm.js} +1 -1
- package/components/p-DhfJAkyd.js +4 -0
- package/components/p-DnGlmM4u.js +4 -0
- package/components/{p-CJgnoKcN.js → p-Drpw2dyl.js} +1 -1
- package/components/{p-5ldEpNdG.js → p-Dvyv9SMk.js} +1 -1
- package/components/p-GpqwNbxf.js +4 -0
- package/components/{p-BJr2B5hZ.js → p-HthJZjZ6.js} +1 -1
- package/components/p-IQN1T5zw.js +4 -0
- package/components/{p-DL13ieTa.js → p-KbMCbGRA.js} +1 -1
- package/components/p-ODGeXc3M.js +4 -0
- package/components/p-R4UxBukQ.js +4 -0
- package/components/p-TLtgwTFF.js +4 -0
- package/components/p-Uk13YgEc.js +4 -0
- package/components/{p-qAXsfUff.js → p-V1THdfzs.js} +1 -1
- package/components/{p-C-NbvXu4.js → p-YNnH1_Hs.js} +1 -1
- package/components/{p-CqbGBmqb.js → p-ZrYBjOcc.js} +1 -1
- package/components/p-_y7kwBO8.js +4 -0
- package/components/{p-GGbIHyEF.js → p-hLu-eIbb.js} +1 -1
- package/components/p-jsVMT15X.js +4 -0
- package/components/{p-TWw4e4sO.js → p-r59A3wQk.js} +1 -1
- package/components/p-yGD6MBgf.js +4 -0
- package/css/core.css +1 -1
- package/css/core.css.map +1 -1
- package/css/display.css.map +1 -1
- package/css/flex-utils.css.map +1 -1
- package/css/float-elements.css +1 -1
- package/css/float-elements.css.map +1 -1
- package/css/global.bundle.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/css/padding.css.map +1 -1
- package/css/structure.css.map +1 -1
- package/css/text-alignment.css.map +1 -1
- package/css/text-transformation.css.map +1 -1
- package/css/typography.css.map +1 -1
- package/css/utils.bundle.css +1 -1
- package/css/utils.bundle.css.map +1 -1
- package/dist/cjs/{animation-Kd1N7WTN.js → animation-DcgLg_PI.js} +3 -3
- package/dist/cjs/{app-globals-b1G4t26O.js → app-globals-BoFCZq0K.js} +1 -1
- package/dist/cjs/attribute-controller-BjTE2TOf.js +131 -0
- package/dist/cjs/{button-active-CQCFubJJ.js → button-active-FdsfRDY_.js} +2 -2
- package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-C6Pp4Z7A.js} +3 -3
- package/dist/cjs/{format-bHU8N1g5.js → format-CVjpvAl1.js} +1 -1
- package/dist/cjs/{framework-delegate-d-fWfeI6.js → framework-delegate-JbKIVMzR.js} +1 -1
- package/dist/cjs/{haptic-Ch-X4gRx.js → haptic--4QteuuM.js} +1 -1
- package/dist/cjs/{helpers-7wzdhdeg.js → helpers-Cqr69qxA.js} +50 -3
- package/dist/cjs/{index-KiSZqhYS.js → index-B4ONUQRp.js} +1 -1
- package/dist/cjs/{index-C74Q3t6a.js → index-BQpSekmz.js} +7 -8
- package/dist/cjs/{index-DFNrCX7M.js → index-BhWiDK25.js} +9 -9
- package/dist/cjs/{index-DXoo08JC.js → index-BiQyIvoc.js} +54 -28
- package/dist/cjs/{index-DtvKGwdh.js → index-CNaZ6SYM.js} +2 -2
- package/dist/cjs/{index-CQfEIyLK.js → index-DUiuw_fH.js} +4 -4
- package/dist/cjs/index.cjs.js +19 -19
- package/dist/cjs/{input-shims-VJIiKBKv.js → input-shims-2AsXPZ5m.js} +16 -17
- package/dist/cjs/{input.utils-EHVE2RK_.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 +26 -28
- package/dist/cjs/ion-alert.cjs.entry.js +27 -29
- package/dist/cjs/ion-app_8.cjs.entry.js +72 -24
- package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-back-button.cjs.entry.js +3 -3
- package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-button_2.cjs.entry.js +23 -34
- package/dist/cjs/ion-card_5.cjs.entry.js +19 -7
- 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 +34 -29
- 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 +12 -16
- package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-item_8.cjs.entry.js +17 -8
- package/dist/cjs/ion-loading.cjs.entry.js +18 -20
- package/dist/cjs/ion-menu_3.cjs.entry.js +18 -19
- package/dist/cjs/ion-modal.cjs.entry.js +177 -172
- package/dist/cjs/ion-nav_2.cjs.entry.js +6 -6
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +3 -3
- package/dist/cjs/ion-picker-column.cjs.entry.js +8 -9
- package/dist/cjs/ion-picker.cjs.entry.js +2 -2
- package/dist/cjs/ion-popover.cjs.entry.js +119 -42
- package/dist/cjs/ion-progress-bar.cjs.entry.js +3 -3
- package/dist/cjs/ion-radio_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-range.cjs.entry.js +4 -4
- package/dist/cjs/ion-refresher_2.cjs.entry.js +8 -9
- package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -7
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
- package/dist/cjs/ion-route_4.cjs.entry.js +4 -4
- package/dist/cjs/ion-searchbar.cjs.entry.js +3 -3
- package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
- package/dist/cjs/ion-segment-view.cjs.entry.js +1 -1
- package/dist/cjs/ion-segment_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-select-modal.cjs.entry.js +8 -10
- package/dist/cjs/ion-select_3.cjs.entry.js +71 -53
- package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
- package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +6 -7
- package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-text.cjs.entry.js +2 -2
- package/dist/cjs/ion-textarea.cjs.entry.js +11 -15
- package/dist/cjs/ion-toast.cjs.entry.js +49 -51
- package/dist/cjs/ion-toggle.cjs.entry.js +6 -7
- package/dist/cjs/{ionic-global-CYJNT-2P.js → ionic-global-48ceLiJ6.js} +1 -1
- package/dist/cjs/ionic.cjs.js +5 -5
- package/dist/cjs/{ios.transition-DYGiD6gM.js → ios.transition-D85_rHf5.js} +4 -5
- package/dist/cjs/{item-multiple-inputs-Dv6qrMhm.js → item-multiple-inputs-C-hz7xrh.js} +1 -1
- package/dist/cjs/{keyboard-cHxZlTyz.js → keyboard-BlHp4a_c.js} +1 -1
- package/dist/cjs/{keyboard-Cix5TVkD.js → keyboard-c2_I35b-.js} +5 -3
- package/dist/cjs/{keyboard-controller-PtZoN2GS.js → keyboard-controller-DHS0BgXp.js} +9 -9
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-CrSkaoz6.js → md.transition-Ce9X1WXr.js} +4 -5
- package/dist/cjs/{overlays-BR21NUIG.js → overlays-CLld3axA.js} +224 -12
- package/dist/cjs/{select-option-render-D8ZEjYji.js → select-option-render-CzyhrkOu.js} +2 -2
- package/dist/cjs/{slot-mutation-controller-D6IjSEIh.js → slot-mutation-controller-ClDxh3EK.js} +73 -5
- package/dist/cjs/{status-tap-CNP5eD1R.js → status-tap-CDA0Y3Ad.js} +3 -3
- package/dist/cjs/{swipe-back-CSIJQfu5.js → swipe-back-Dy8pxJCF.js} +2 -2
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/button/button.js +21 -32
- package/dist/collection/components/card/card.js +17 -6
- package/dist/collection/components/content/content.js +62 -8
- package/dist/collection/components/datetime/datetime.js +27 -20
- package/dist/collection/components/input/input.ios.css +6 -0
- package/dist/collection/components/input/input.js +6 -9
- package/dist/collection/components/input/input.md.css +6 -0
- package/dist/collection/components/input-otp/input-otp.js +29 -3
- package/dist/collection/components/item/item.js +15 -6
- package/dist/collection/components/menu/menu.js +4 -3
- package/dist/collection/components/modal/modal.ios.css +12 -1
- package/dist/collection/components/modal/modal.js +31 -8
- package/dist/collection/components/modal/modal.md.css +12 -1
- package/dist/collection/components/modal/safe-area-utils.js +69 -90
- package/dist/collection/components/modal/utils.js +7 -0
- package/dist/collection/components/popover/animations/ios.enter.js +20 -6
- package/dist/collection/components/popover/animations/md.enter.js +19 -5
- package/dist/collection/components/popover/utils.js +64 -13
- package/dist/collection/components/select/select.ios.css +1 -1
- package/dist/collection/components/select/select.js +67 -38
- package/dist/collection/components/select/select.md.css +1 -1
- package/dist/collection/components/textarea/textarea.ios.css +15 -1
- package/dist/collection/components/textarea/textarea.js +5 -8
- package/dist/collection/components/textarea/textarea.md.css +15 -1
- package/dist/collection/index.js +1 -1
- package/dist/collection/utils/attribute-controller.js +126 -0
- package/dist/collection/utils/forms/click-controller.js +70 -0
- package/dist/collection/utils/forms/index.js +1 -0
- package/dist/collection/utils/hardware-back-button.js +41 -12
- package/dist/collection/utils/helpers.js +44 -3
- package/dist/collection/utils/logging/index.js +4 -0
- package/dist/collection/utils/menu-controller/index.js +2 -1
- package/dist/collection/utils/overlays.js +64 -4
- package/dist/docs.json +9 -3
- package/dist/esm/{animation-BFNVlYum.js → animation-DmtJpz89.js} +2 -2
- package/dist/esm/{app-globals-BgX0BGL1.js → app-globals-CNfpAPW6.js} +1 -1
- package/dist/esm/attribute-controller-DPMIcbef.js +128 -0
- package/dist/esm/{button-active-BfOvDr3b.js → button-active-DVk40Sjl.js} +2 -2
- package/dist/esm/{capacitor-CFERIeaU.js → capacitor-CHJaJ9aX.js} +1 -1
- package/dist/esm/{format-DDFE9jM5.js → format-Ck1cw5z7.js} +1 -1
- package/dist/esm/{framework-delegate-BwNhx9NR.js → framework-delegate-CDjM1vRH.js} +1 -1
- package/dist/esm/{haptic-Cq4UAeka.js → haptic-WXfMCob9.js} +1 -1
- package/dist/esm/{helpers-BSmc0nst.js → helpers-BJqKF1pr.js} +47 -4
- package/dist/esm/{index-DnA_7Bnx.js → index-BBASprVu.js} +4 -4
- package/dist/esm/{index-C23AVPx9.js → index-BpRUsN_W.js} +55 -29
- package/dist/esm/{index-D76bbuoi.js → index-CK8uF0iB.js} +1 -1
- package/dist/esm/{index-CJln0gS3.js → index-Clv8QC5L.js} +2 -3
- package/dist/esm/{index-BuPaALjU.js → index-DIouXecD.js} +6 -6
- package/dist/esm/{index-C1b9CLFg.js → index-TkLga3ma.js} +2 -2
- package/dist/esm/index.js +11 -13
- package/dist/esm/{input-shims-Dqk-Ou25.js → input-shims-C1iYF5JK.js} +5 -6
- package/dist/esm/{input.utils-rqoH22pW.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 -13
- package/dist/esm/ion-alert.entry.js +11 -13
- package/dist/esm/ion-app_8.entry.js +72 -24
- package/dist/esm/ion-avatar_3.entry.js +2 -2
- package/dist/esm/ion-back-button.entry.js +3 -3
- package/dist/esm/ion-backdrop.entry.js +2 -2
- package/dist/esm/ion-breadcrumb_2.entry.js +3 -3
- package/dist/esm/ion-button_2.entry.js +23 -34
- package/dist/esm/ion-card_5.entry.js +19 -7
- 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 +33 -28
- 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 +12 -16
- package/dist/esm/ion-item-option_3.entry.js +4 -4
- package/dist/esm/ion-item_8.entry.js +17 -8
- package/dist/esm/ion-loading.entry.js +7 -9
- package/dist/esm/ion-menu_3.entry.js +10 -11
- package/dist/esm/ion-modal.entry.js +115 -110
- package/dist/esm/ion-nav_2.entry.js +6 -6
- package/dist/esm/ion-picker-column-option.entry.js +3 -3
- package/dist/esm/ion-picker-column.entry.js +5 -6
- package/dist/esm/ion-picker.entry.js +2 -2
- package/dist/esm/ion-popover.entry.js +108 -31
- package/dist/esm/ion-progress-bar.entry.js +3 -3
- package/dist/esm/ion-radio_2.entry.js +4 -4
- package/dist/esm/ion-range.entry.js +4 -4
- package/dist/esm/ion-refresher_2.entry.js +8 -9
- package/dist/esm/ion-reorder_2.entry.js +6 -7
- package/dist/esm/ion-ripple-effect.entry.js +2 -2
- package/dist/esm/ion-route_4.entry.js +4 -4
- package/dist/esm/ion-searchbar.entry.js +3 -3
- package/dist/esm/ion-segment-content.entry.js +1 -1
- package/dist/esm/ion-segment-view.entry.js +1 -1
- package/dist/esm/ion-segment_2.entry.js +3 -3
- package/dist/esm/ion-select-modal.entry.js +7 -9
- package/dist/esm/ion-select_3.entry.js +66 -48
- package/dist/esm/ion-spinner.entry.js +2 -2
- package/dist/esm/ion-split-pane.entry.js +2 -2
- package/dist/esm/ion-tab-bar_2.entry.js +6 -7
- package/dist/esm/ion-tab_2.entry.js +3 -3
- package/dist/esm/ion-text.entry.js +2 -2
- package/dist/esm/ion-textarea.entry.js +11 -15
- package/dist/esm/ion-toast.entry.js +7 -9
- package/dist/esm/ion-toggle.entry.js +6 -7
- package/dist/esm/{ionic-global-ZXjCXKH0.js → ionic-global-Cep6oYzK.js} +1 -1
- package/dist/esm/ionic.js +6 -6
- package/dist/esm/{ios.transition-CWAgfQ1r.js → ios.transition-B8netzsb.js} +4 -5
- package/dist/esm/{item-multiple-inputs-DZnIiOO_.js → item-multiple-inputs-Bd2LO7qK.js} +1 -1
- package/dist/esm/{keyboard-Cj8mLJeq.js → keyboard-B4Y-Gph8.js} +5 -3
- package/dist/esm/{keyboard-DAF8GNJ9.js → keyboard-Cmqp5iZD.js} +1 -1
- package/dist/esm/{keyboard-controller-DEwoa1ev.js → keyboard-controller-B2NoF7bV.js} +2 -2
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-ZuqDDdDW.js → md.transition-DNCSSiXk.js} +4 -5
- package/dist/esm/{overlays-DKE0DgvE.js → overlays-DmDY-El7.js} +216 -10
- package/dist/esm/{select-option-render-CRP_teb1.js → select-option-render-BSDT9oSA.js} +2 -2
- package/dist/esm/{slot-mutation-controller-B5NpUZ-N.js → slot-mutation-controller-hAS2uJ7c.js} +69 -3
- package/dist/esm/{status-tap-Cv9gb3ja.js → status-tap-VGRBYwiC.js} +3 -3
- package/dist/esm/{swipe-back-De5HlmeM.js → swipe-back-tCNYR9ZM.js} +2 -2
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-b9b4e85d.entry.js → p-00cd107d.entry.js} +1 -1
- package/dist/ionic/p-01b7e3f2.entry.js +4 -0
- package/dist/ionic/{p-9c5f2691.entry.js → p-0a789930.entry.js} +1 -1
- package/dist/ionic/p-0b09c60e.entry.js +4 -0
- package/dist/ionic/p-0c32c626.entry.js +4 -0
- package/dist/ionic/p-0f97175e.entry.js +4 -0
- package/dist/ionic/p-107a81a6.entry.js +4 -0
- package/dist/ionic/{p-ca1b8865.entry.js → p-230f510c.entry.js} +1 -1
- package/dist/ionic/p-27d96a9b.entry.js +4 -0
- package/dist/ionic/{p-db449915.entry.js → p-28251c5c.entry.js} +1 -1
- package/dist/ionic/{p-099b7f9f.entry.js → p-362dcd86.entry.js} +1 -1
- package/dist/ionic/p-4bd80334.entry.js +4 -0
- package/dist/ionic/p-4d785062.entry.js +4 -0
- package/dist/ionic/{p-efc0cf82.entry.js → p-4e4e5919.entry.js} +1 -1
- package/dist/ionic/{p-837db1b9.entry.js → p-4ed3c460.entry.js} +1 -1
- package/dist/ionic/{p-d8c138d9.entry.js → p-4f25b926.entry.js} +1 -1
- package/dist/ionic/{p-271c3640.entry.js → p-539d6c8e.entry.js} +1 -1
- package/dist/ionic/p-5bb24bce.entry.js +4 -0
- package/dist/ionic/p-60780b88.entry.js +4 -0
- package/dist/ionic/{p-54cbb0a7.entry.js → p-62c87f3d.entry.js} +1 -1
- package/dist/ionic/p-6317d620.entry.js +4 -0
- package/dist/ionic/{p-85599fe3.entry.js → p-64ac3864.entry.js} +1 -1
- package/dist/ionic/{p-191a651e.entry.js → p-6c7b5930.entry.js} +1 -1
- package/dist/ionic/{p-7fbb3319.entry.js → p-77252596.entry.js} +1 -1
- package/dist/ionic/p-7ce9c6f8.entry.js +4 -0
- package/dist/ionic/{p-8b80d9f9.entry.js → p-7db20410.entry.js} +1 -1
- package/dist/ionic/{p-5d9094ac.entry.js → p-7e9c2a97.entry.js} +1 -1
- package/dist/ionic/p-7l6ENjIV.js +4 -0
- package/dist/ionic/p-82abf431.entry.js +4 -0
- package/dist/ionic/p-8b79061e.entry.js +4 -0
- package/dist/ionic/{p-6e386853.entry.js → p-8c85e250.entry.js} +1 -1
- package/dist/ionic/{p-90f50a65.entry.js → p-8d651adb.entry.js} +1 -1
- package/dist/ionic/{p-dd01be0a.entry.js → p-8db08782.entry.js} +1 -1
- package/dist/ionic/p-91f3cd8b.entry.js +4 -0
- package/dist/ionic/{p-f0fb23c1.entry.js → p-930c3538.entry.js} +1 -1
- package/dist/ionic/{p-ee09ac9d.entry.js → p-9ffccbf1.entry.js} +1 -1
- package/dist/ionic/{p-CM5OBjTW.js → p-B0jcOZOE.js} +1 -1
- package/dist/ionic/p-B8IuTu_r.js +4 -0
- package/dist/ionic/p-BNXIurCt.js +4 -0
- package/{components/p-6ZLn6K5e.js → dist/ionic/p-BO10QT9r.js} +1 -1
- package/dist/ionic/p-BOLqP2-V.js +4 -0
- package/dist/ionic/{p-BMPN55of.js → p-BY4FwwBp.js} +1 -1
- package/dist/ionic/p-BdHBcCZF.js +4 -0
- package/{components/p-DiuOa1vw.js → dist/ionic/p-BexAj0yw.js} +1 -1
- package/dist/ionic/p-Bnc1L7Rk.js +4 -0
- package/dist/ionic/p-BpRUsN_W.js +6 -0
- package/dist/ionic/p-Bppj2PE0.js +4 -0
- package/dist/ionic/p-BuLlVedw.js +4 -0
- package/dist/ionic/p-Bx5x5GJV.js +4 -0
- package/dist/ionic/p-C1WYZOZj.js +4 -0
- package/dist/ionic/p-C2LaBx3E.js +4 -0
- package/dist/ionic/{p-Bd72UYI2.js → p-CXs4J83x.js} +1 -1
- package/dist/ionic/p-Co7eql8D.js +4 -0
- package/dist/ionic/p-D13gXhdC.js +4 -0
- package/dist/ionic/p-D926OmIX.js +4 -0
- package/dist/ionic/{p-T71k3C35.js → p-DPNVo1nr.js} +1 -1
- package/{components/p-C4VpVfrJ.js → dist/ionic/p-DQXtveHv.js} +1 -1
- package/dist/ionic/p-DXXGkPA8.js +4 -0
- package/dist/ionic/{p-C8XilMh0.js → p-DfvWlTdB.js} +1 -1
- package/dist/ionic/p-DriE1ZAo.js +4 -0
- package/dist/ionic/{p-D7jHfs0Y.js → p-DxftXYZp.js} +1 -1
- package/dist/ionic/{p-Do3zTvCA.js → p-SEecsUh7.js} +1 -1
- package/dist/ionic/p-a4389f13.entry.js +4 -0
- package/dist/ionic/p-af11d3c6.entry.js +4 -0
- package/dist/ionic/p-af56702e.entry.js +4 -0
- package/dist/ionic/{p-561af487.entry.js → p-b3aadfe8.entry.js} +1 -1
- package/dist/ionic/p-b5bcbbc1.entry.js +4 -0
- package/dist/ionic/p-b9ed3a52.entry.js +4 -0
- package/dist/ionic/{p-3bba83ee.entry.js → p-bfdbe24b.entry.js} +1 -1
- package/dist/ionic/{p-4712a8a9.entry.js → p-c250b6b0.entry.js} +1 -1
- package/dist/ionic/{p-38b9375b.entry.js → p-c293f854.entry.js} +1 -1
- package/dist/ionic/p-c81ec0e8.entry.js +4 -0
- package/dist/ionic/p-c83dbc12.entry.js +4 -0
- package/dist/ionic/p-d0e374f8.entry.js +4 -0
- package/dist/ionic/p-d72accc4.entry.js +4 -0
- package/dist/ionic/p-d9a3dfd1.entry.js +4 -0
- package/dist/ionic/p-e1haAYzm.js +4 -0
- package/dist/ionic/p-e7ab4def.entry.js +4 -0
- package/dist/ionic/{p-d6755739.entry.js → p-eb989dc9.entry.js} +1 -1
- package/dist/ionic/p-ec259ac5.entry.js +4 -0
- package/dist/ionic/{p-DYUjHcuH.js → p-nCAPr1Ah.js} +1 -1
- package/dist/types/components/button/button.d.ts +3 -12
- package/dist/types/components/card/card.d.ts +3 -1
- package/dist/types/components/content/content.d.ts +28 -3
- package/dist/types/components/datetime/datetime.d.ts +5 -10
- package/dist/types/components/input/input.d.ts +1 -0
- package/dist/types/components/input-otp/input-otp.d.ts +7 -0
- package/dist/types/components/item/item.d.ts +1 -1
- package/dist/types/components/modal/modal.d.ts +9 -1
- package/dist/types/components/modal/safe-area-utils.d.ts +28 -14
- package/dist/types/components/modal/utils.d.ts +4 -0
- package/dist/types/components/popover/utils.d.ts +16 -3
- package/dist/types/components/select/select.d.ts +11 -0
- package/dist/types/components/textarea/textarea.d.ts +1 -0
- package/dist/types/components.d.ts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/stencil-public-runtime.d.ts +61 -55
- package/dist/types/utils/attribute-controller.d.ts +56 -0
- package/dist/types/utils/config.d.ts +4 -1
- package/dist/types/utils/forms/click-controller.d.ts +36 -0
- package/dist/types/utils/forms/index.d.ts +1 -0
- package/dist/types/utils/hardware-back-button.d.ts +11 -0
- package/dist/types/utils/helpers.d.ts +27 -2
- package/dist/types/utils/logging/index.d.ts +4 -0
- package/dist/types/utils/overlays.d.ts +20 -2
- package/hydrate/index.js +1249 -484
- package/hydrate/index.mjs +1249 -484
- package/package.json +3 -3
- package/components/p-1sJ0ZDPe.js +0 -4
- package/components/p-B1_TL6RQ.js +0 -4
- package/components/p-BT9-hMMz.js +0 -4
- package/components/p-BU8a2IhR.js +0 -4
- package/components/p-BW_SlU2D.js +0 -4
- package/components/p-BWoa-cki.js +0 -4
- package/components/p-BgkOsq-d.js +0 -4
- package/components/p-Bi-it1EH.js +0 -4
- package/components/p-C09TXohi.js +0 -4
- package/components/p-CG_zZq_I.js +0 -4
- package/components/p-CMRYD_yR.js +0 -4
- package/components/p-CNLioZ3B.js +0 -4
- package/components/p-CWAks_S_.js +0 -4
- package/components/p-Cd1WaN-0.js +0 -4
- package/components/p-CrAKlX71.js +0 -4
- package/components/p-Ctop2IWW.js +0 -4
- package/components/p-Cw6WocLJ.js +0 -4
- package/components/p-DFLJvuRK.js +0 -4
- package/components/p-DZRZic9C.js +0 -4
- package/components/p-DhNuxvJH.js +0 -4
- package/components/p-Djmz-ssp.js +0 -4
- package/components/p-DnBNYc7u.js +0 -4
- package/components/p-DwSXbQSz.js +0 -4
- package/components/p-M34T2gyX.js +0 -4
- package/components/p-YjMkHuvH.js +0 -4
- package/dist/cjs/hardware-back-button-Bu4Dzw8l.js +0 -121
- package/dist/cjs/index-DkNv4J_i.js +0 -10
- package/dist/esm/hardware-back-button-DmkiRgOT.js +0 -115
- package/dist/esm/index-ZjP4CjeZ.js +0 -7
- package/dist/ionic/p-0dcb7bb6.entry.js +0 -4
- package/dist/ionic/p-1347880c.entry.js +0 -4
- package/dist/ionic/p-1f24cb24.entry.js +0 -4
- package/dist/ionic/p-2ea4bb36.entry.js +0 -4
- package/dist/ionic/p-338a02e0.entry.js +0 -4
- package/dist/ionic/p-3e01c744.entry.js +0 -4
- package/dist/ionic/p-458715a9.entry.js +0 -4
- package/dist/ionic/p-4c3e50f8.entry.js +0 -4
- package/dist/ionic/p-5906ea6f.entry.js +0 -4
- package/dist/ionic/p-5cc09b40.entry.js +0 -4
- package/dist/ionic/p-612ea3b1.entry.js +0 -4
- package/dist/ionic/p-68cc89a6.entry.js +0 -4
- package/dist/ionic/p-77c96e08.entry.js +0 -4
- package/dist/ionic/p-7bfeccb3.entry.js +0 -4
- package/dist/ionic/p-7e394cc3.entry.js +0 -4
- package/dist/ionic/p-803059b6.entry.js +0 -4
- package/dist/ionic/p-9595e305.entry.js +0 -4
- package/dist/ionic/p-9ee9c5b6.entry.js +0 -4
- package/dist/ionic/p-BY6BzzPF.js +0 -4
- package/dist/ionic/p-BaeKWZ-a.js +0 -4
- package/dist/ionic/p-BgOvhHy_.js +0 -4
- package/dist/ionic/p-BhamHSw3.js +0 -4
- package/dist/ionic/p-BijjLYjT.js +0 -4
- package/dist/ionic/p-C23AVPx9.js +0 -6
- package/dist/ionic/p-CER8qW8Y.js +0 -4
- package/dist/ionic/p-CFuOr1Tu.js +0 -4
- package/dist/ionic/p-CIGNaXM1.js +0 -4
- package/dist/ionic/p-CMZYmFb4.js +0 -4
- package/dist/ionic/p-CkxVYPtX.js +0 -4
- package/dist/ionic/p-CmXuiRT6.js +0 -4
- package/dist/ionic/p-D5t_-oMk.js +0 -4
- package/dist/ionic/p-D6rHcCvc.js +0 -4
- package/dist/ionic/p-DLM95R4x.js +0 -4
- package/dist/ionic/p-D_gb-kdd.js +0 -4
- package/dist/ionic/p-DajLgJ4d.js +0 -4
- package/dist/ionic/p-ZjP4CjeZ.js +0 -4
- package/dist/ionic/p-a8df96c8.entry.js +0 -4
- package/dist/ionic/p-a8ff2489.entry.js +0 -4
- package/dist/ionic/p-aff52029.entry.js +0 -4
- package/dist/ionic/p-b3532b8d.entry.js +0 -4
- package/dist/ionic/p-cc4320d3.entry.js +0 -4
- package/dist/ionic/p-d526798a.entry.js +0 -4
- package/dist/ionic/p-ec00fd0d.entry.js +0 -4
- package/dist/ionic/p-f83b3e0c.entry.js +0 -4
- package/dist/ionic/p-fa50d493.entry.js +0 -4
- package/dist/ionic/p-zWf7R2xV.js +0 -4
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Build, Host, forceUpdate, h, readTask, } from "@stencil/core";
|
|
5
5
|
import { componentOnReady, hasLazyBuild, inheritAriaAttributes } from "../../utils/helpers";
|
|
6
|
+
import { getOverlaySizeType } from "../../utils/overlays";
|
|
6
7
|
import { isPlatform } from "../../utils/platform";
|
|
7
8
|
import { isRTL } from "../../utils/rtl/index";
|
|
8
9
|
import { createColorClasses, hostContext } from "../../utils/theme";
|
|
@@ -47,6 +48,10 @@ export class Content {
|
|
|
47
48
|
data: undefined,
|
|
48
49
|
isScrolling: true,
|
|
49
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* Whether the host is sized to its content.
|
|
53
|
+
*/
|
|
54
|
+
this.sizeToContent = false;
|
|
50
55
|
/**
|
|
51
56
|
* If `true`, the content will scroll behind the headers
|
|
52
57
|
* and footers. This effect can easily be seen by setting the toolbar
|
|
@@ -80,6 +85,7 @@ export class Content {
|
|
|
80
85
|
}
|
|
81
86
|
componentWillLoad() {
|
|
82
87
|
this.inheritedAttributes = inheritAriaAttributes(this.el);
|
|
88
|
+
this.sizeToContent = this.readSizeToContent();
|
|
83
89
|
}
|
|
84
90
|
connectedCallback() {
|
|
85
91
|
this.isMainContent = this.el.closest('ion-menu, ion-popover, ion-modal') === null;
|
|
@@ -119,6 +125,7 @@ export class Content {
|
|
|
119
125
|
}
|
|
120
126
|
// Re-observe on reattach, since componentDidLoad only fires once.
|
|
121
127
|
this.setupFullscreenResizeObserver();
|
|
128
|
+
this.updateSizeToContent();
|
|
122
129
|
}
|
|
123
130
|
componentDidLoad() {
|
|
124
131
|
// The custom elements build assigns fullscreen after connectedCallback.
|
|
@@ -175,6 +182,16 @@ export class Content {
|
|
|
175
182
|
});
|
|
176
183
|
this.fullscreenResizeObserver.observe(this.el);
|
|
177
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Picks up an overlay that is no longer sized the way the last render
|
|
187
|
+
* assumed, re-rendering only when the answer changes. Read in a `readTask`
|
|
188
|
+
* because resolving the custom property forces a style recalculation.
|
|
189
|
+
*/
|
|
190
|
+
updateSizeToContent() {
|
|
191
|
+
readTask(() => {
|
|
192
|
+
this.sizeToContent = this.readSizeToContent();
|
|
193
|
+
});
|
|
194
|
+
}
|
|
178
195
|
destroyFullscreenResizeObserver() {
|
|
179
196
|
if (this.fullscreenResizeObserver !== undefined) {
|
|
180
197
|
this.fullscreenResizeObserver.disconnect();
|
|
@@ -221,6 +238,30 @@ export class Content {
|
|
|
221
238
|
const mode = getIonMode(this);
|
|
222
239
|
return forceOverscroll === undefined ? mode === 'ios' && isPlatform('ios') : forceOverscroll;
|
|
223
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* Reads whether to size the component to its content height. Forces a style
|
|
243
|
+
* recalculation, so it belongs in a read task or before the first render.
|
|
244
|
+
*
|
|
245
|
+
* This applies inside popovers and modals with a content-based `--height`,
|
|
246
|
+
* where the overlay does not provide the content with a definite height
|
|
247
|
+
* to fill.
|
|
248
|
+
*
|
|
249
|
+
* Only `--height` is consulted. Styling the wrapper directly, such as
|
|
250
|
+
* `ion-modal::part(content) { height: fit-content; }`, does not change
|
|
251
|
+
* `--height` and therefore cannot be observed. `--height` is the only
|
|
252
|
+
* supported way to opt into content-based sizing.
|
|
253
|
+
*/
|
|
254
|
+
readSizeToContent() {
|
|
255
|
+
if (hostContext('ion-popover', this.el)) {
|
|
256
|
+
return true;
|
|
257
|
+
}
|
|
258
|
+
const modal = this.el.closest('ion-modal');
|
|
259
|
+
if (modal === null) {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
const height = getComputedStyle(modal).getPropertyValue('--height');
|
|
263
|
+
return getOverlaySizeType(height) === 'content';
|
|
264
|
+
}
|
|
224
265
|
resize() {
|
|
225
266
|
/**
|
|
226
267
|
* Only force update if the component is rendered in a browser context.
|
|
@@ -231,6 +272,12 @@ export class Content {
|
|
|
231
272
|
* TODO: Remove if STENCIL-834 determines Stencil will account for this.
|
|
232
273
|
*/
|
|
233
274
|
if (Build.isBrowser) {
|
|
275
|
+
/**
|
|
276
|
+
* A window resize can cross a media query that changes the modal's
|
|
277
|
+
* `--height`. The content's own offsets are unchanged, so neither branch
|
|
278
|
+
* below re-renders and the class from the last render would go stale.
|
|
279
|
+
*/
|
|
280
|
+
this.updateSizeToContent();
|
|
234
281
|
if (this.fullscreen) {
|
|
235
282
|
readTask(() => this.readDimensions());
|
|
236
283
|
}
|
|
@@ -241,13 +288,15 @@ export class Content {
|
|
|
241
288
|
}
|
|
242
289
|
}
|
|
243
290
|
/**
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
291
|
+
* Recalculates the content dimensions and whether it should size itself to
|
|
292
|
+
* its content. Called by overlays when something they own changes, such as
|
|
293
|
+
* a header finishing its render or `--height` being updated.
|
|
294
|
+
*
|
|
247
295
|
* @internal
|
|
248
296
|
*/
|
|
249
297
|
async recalculateDimensions() {
|
|
250
298
|
readTask(() => this.readDimensions());
|
|
299
|
+
this.updateSizeToContent();
|
|
251
300
|
}
|
|
252
301
|
readDimensions() {
|
|
253
302
|
const page = getPageElement(this.el);
|
|
@@ -418,21 +467,21 @@ export class Content {
|
|
|
418
467
|
const forceOverscroll = this.shouldForceOverscroll();
|
|
419
468
|
const transitionShadow = mode === 'ios';
|
|
420
469
|
this.resize();
|
|
421
|
-
return (h(Host, { key: '
|
|
470
|
+
return (h(Host, { key: 'e1013621096729354ef92915af52dd823e69fdff', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
|
|
422
471
|
[mode]: true,
|
|
423
472
|
'content-fullscreen': this.fullscreen,
|
|
424
|
-
'content-sizing':
|
|
473
|
+
'content-sizing': this.sizeToContent,
|
|
425
474
|
overscroll: forceOverscroll,
|
|
426
475
|
[`content-${rtl}`]: true,
|
|
427
476
|
}), style: {
|
|
428
477
|
'--offset-top': `${this.cTop}px`,
|
|
429
478
|
'--offset-bottom': `${this.cBottom}px`,
|
|
430
|
-
}, ...inheritedAttributes }, h("div", { key: '
|
|
479
|
+
}, ...inheritedAttributes }, h("div", { key: '3d8649b164d6324beaa1bc50e1d204ad06c2ec1a', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: 'dd2d3bed8690b4f5027a43f5ec60e7e7df18106d', class: {
|
|
431
480
|
'inner-scroll': true,
|
|
432
481
|
'scroll-x': scrollX,
|
|
433
482
|
'scroll-y': scrollY,
|
|
434
483
|
overscroll: (scrollX || scrollY) && forceOverscroll,
|
|
435
|
-
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '
|
|
484
|
+
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: 'dc3d4584d9e9afd43699525a619b8e873078fbbf' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
|
|
436
485
|
}
|
|
437
486
|
static get is() { return "ion-content"; }
|
|
438
487
|
static get encapsulation() { return "shadow"; }
|
|
@@ -595,6 +644,11 @@ export class Content {
|
|
|
595
644
|
}
|
|
596
645
|
};
|
|
597
646
|
}
|
|
647
|
+
static get states() {
|
|
648
|
+
return {
|
|
649
|
+
"sizeToContent": {}
|
|
650
|
+
};
|
|
651
|
+
}
|
|
598
652
|
static get events() {
|
|
599
653
|
return [{
|
|
600
654
|
"method": "ionScrollStart",
|
|
@@ -679,7 +733,7 @@ export class Content {
|
|
|
679
733
|
"return": "Promise<void>"
|
|
680
734
|
},
|
|
681
735
|
"docs": {
|
|
682
|
-
"text": "
|
|
736
|
+
"text": "Recalculates the content dimensions and whether it should size itself to\nits content. Called by overlays when something they own changes, such as\na header finishing its render or `--height` being updated.",
|
|
683
737
|
"tags": [{
|
|
684
738
|
"name": "internal",
|
|
685
739
|
"text": undefined
|
|
@@ -56,16 +56,6 @@ import { checkForPresentationFormatMismatch, warnIfTimeZoneProvided } from "./ut
|
|
|
56
56
|
export class Datetime {
|
|
57
57
|
constructor() {
|
|
58
58
|
this.inputId = `ion-dt-${datetimeIds++}`;
|
|
59
|
-
/**
|
|
60
|
-
* Set true only by `visibleCallback`. Lets `hiddenCallback` ignore the
|
|
61
|
-
* synthetic "not intersecting" entry IntersectionObserver fires on
|
|
62
|
-
* `observe()` when the host mounts offscreen.
|
|
63
|
-
*
|
|
64
|
-
* Don't reset this in `disconnectedCallback`. Overlays disconnect and
|
|
65
|
-
* reconnect the host without re-creating the observers, so a reset there
|
|
66
|
-
* makes `hiddenCallback` miss the dismissal.
|
|
67
|
-
*/
|
|
68
|
-
this.hasBeenIntersecting = false;
|
|
69
59
|
this.prevPresentation = null;
|
|
70
60
|
this.showMonthAndYear = false;
|
|
71
61
|
this.activeParts = [];
|
|
@@ -627,12 +617,19 @@ export class Datetime {
|
|
|
627
617
|
if (this.el.classList.contains('datetime-ready')) {
|
|
628
618
|
return;
|
|
629
619
|
}
|
|
630
|
-
|
|
631
|
-
if (rect.width === 0 || rect.height === 0) {
|
|
620
|
+
if (!this.hasLayoutBox()) {
|
|
632
621
|
return;
|
|
633
622
|
}
|
|
634
623
|
this.markReady();
|
|
635
624
|
};
|
|
625
|
+
/**
|
|
626
|
+
* Whether the datetime is on screen. A modal or popover hides its contents
|
|
627
|
+
* with `display: none`, which leaves the host without a layout box.
|
|
628
|
+
*/
|
|
629
|
+
this.hasLayoutBox = () => {
|
|
630
|
+
const { width, height } = this.el.getBoundingClientRect();
|
|
631
|
+
return width > 0 && height > 0;
|
|
632
|
+
};
|
|
636
633
|
this.markReady = () => {
|
|
637
634
|
if (this.el.classList.contains('datetime-ready')) {
|
|
638
635
|
return;
|
|
@@ -965,11 +962,14 @@ export class Datetime {
|
|
|
965
962
|
* areas will not have the correct values snapped into place.
|
|
966
963
|
*/
|
|
967
964
|
const visibleCallback = (entries) => {
|
|
968
|
-
|
|
965
|
+
/**
|
|
966
|
+
* The browser can batch several observations into one callback, so
|
|
967
|
+
* only the last entry describes the datetime now.
|
|
968
|
+
*/
|
|
969
|
+
const ev = entries[entries.length - 1];
|
|
969
970
|
if (!ev.isIntersecting) {
|
|
970
971
|
return;
|
|
971
972
|
}
|
|
972
|
-
this.hasBeenIntersecting = true;
|
|
973
973
|
this.markReady();
|
|
974
974
|
};
|
|
975
975
|
const visibleIO = new IntersectionObserver(visibleCallback, { threshold: 0.01, root: el });
|
|
@@ -1002,15 +1002,22 @@ export class Datetime {
|
|
|
1002
1002
|
* we did originally has been lost.
|
|
1003
1003
|
*/
|
|
1004
1004
|
const hiddenCallback = (entries) => {
|
|
1005
|
-
const ev = entries[
|
|
1005
|
+
const ev = entries[entries.length - 1];
|
|
1006
1006
|
if (ev.isIntersecting) {
|
|
1007
1007
|
return;
|
|
1008
1008
|
}
|
|
1009
|
-
|
|
1010
|
-
|
|
1009
|
+
/**
|
|
1010
|
+
* WebKit reports a datetime that is still on screen as not
|
|
1011
|
+
* intersecting, and it doesn't deliver that entry to every observer on
|
|
1012
|
+
* the same root and target, so `visibleCallback` may never hear about
|
|
1013
|
+
* it and add `datetime-ready` back. That is what left the calendar
|
|
1014
|
+
* blank in #30933. Checking the host instead of trusting the entry
|
|
1015
|
+
* also covers the synthetic "not intersecting" entry `observe()` fires
|
|
1016
|
+
* when the datetime mounts offscreen.
|
|
1017
|
+
*/
|
|
1018
|
+
if (this.hasLayoutBox()) {
|
|
1011
1019
|
return;
|
|
1012
1020
|
}
|
|
1013
|
-
this.hasBeenIntersecting = false;
|
|
1014
1021
|
this.destroyInteractionListeners();
|
|
1015
1022
|
/**
|
|
1016
1023
|
* When datetime is hidden, we need to make sure that
|
|
@@ -1822,7 +1829,7 @@ export class Datetime {
|
|
|
1822
1829
|
const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
|
|
1823
1830
|
const hasWheelVariant = hasDatePresentation && preferWheel;
|
|
1824
1831
|
renderHiddenInput(true, el, name, formatValue(value), disabled);
|
|
1825
|
-
return (h(Host, { key: '
|
|
1832
|
+
return (h(Host, { key: 'a9128b5c55464e30a269daf9d725bf430c8c655c', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: {
|
|
1826
1833
|
...createColorClasses(color, {
|
|
1827
1834
|
[mode]: true,
|
|
1828
1835
|
['datetime-readonly']: readonly,
|
|
@@ -1834,7 +1841,7 @@ export class Datetime {
|
|
|
1834
1841
|
[`datetime-prefer-wheel`]: hasWheelVariant,
|
|
1835
1842
|
[`datetime-grid`]: isGridStyle,
|
|
1836
1843
|
}),
|
|
1837
|
-
} }, h("div", { key: '
|
|
1844
|
+
} }, h("div", { key: 'b49f3a98db2b7cf535d7ea894d518f75f8a1fefb', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
|
|
1838
1845
|
}
|
|
1839
1846
|
static get is() { return "ion-datetime"; }
|
|
1840
1847
|
static get encapsulation() { return "shadow"; }
|
|
@@ -151,6 +151,12 @@
|
|
|
151
151
|
position: relative;
|
|
152
152
|
flex: 1;
|
|
153
153
|
width: 100%;
|
|
154
|
+
/**
|
|
155
|
+
* The input keeps a minimum width so that the value stays visible
|
|
156
|
+
* when a long label or wide slotted content would otherwise shrink
|
|
157
|
+
* it to nothing.
|
|
158
|
+
*/
|
|
159
|
+
min-width: 2ch;
|
|
154
160
|
max-width: 100%;
|
|
155
161
|
height: 100%;
|
|
156
162
|
max-height: 100%;
|
|
@@ -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 { createNotchController, createStartContainerController, checkInvalidState } from "../../utils/forms/index";
|
|
5
|
+
import { createClickController, createNotchController, createStartContainerController, 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";
|
|
@@ -227,11 +227,7 @@ export class Input {
|
|
|
227
227
|
* Instead, the click event from the ion-input is emitted.
|
|
228
228
|
*/
|
|
229
229
|
onClickCapture(ev) {
|
|
230
|
-
|
|
231
|
-
if (nativeInput && ev.target === nativeInput) {
|
|
232
|
-
ev.stopPropagation();
|
|
233
|
-
this.el.click();
|
|
234
|
-
}
|
|
230
|
+
this.clickController?.handleClickCapture(ev);
|
|
235
231
|
}
|
|
236
232
|
componentWillLoad() {
|
|
237
233
|
this.inheritedAttributes = {
|
|
@@ -252,6 +248,7 @@ export class Input {
|
|
|
252
248
|
return Build.isBrowser && getIonMode(this) === 'md' && this.fill === 'outline';
|
|
253
249
|
});
|
|
254
250
|
this.startContainerController.calculateStartContainerWidth();
|
|
251
|
+
this.clickController = createClickController(el, () => this.nativeInput);
|
|
255
252
|
// Watch for class changes to update validation state
|
|
256
253
|
if (Build.isBrowser && typeof MutationObserver !== 'undefined') {
|
|
257
254
|
this.validationObserver = new MutationObserver(() => {
|
|
@@ -527,7 +524,7 @@ export class Input {
|
|
|
527
524
|
* the input has a value or is focused.
|
|
528
525
|
*/
|
|
529
526
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus));
|
|
530
|
-
return (h(Host, { key: '
|
|
527
|
+
return (h(Host, { key: '290cf987de670276bf40b9f19d35d3769d9c0540', class: createColorClasses(this.color, {
|
|
531
528
|
[mode]: true,
|
|
532
529
|
'has-value': hasValue,
|
|
533
530
|
'has-focus': hasFocus,
|
|
@@ -538,14 +535,14 @@ export class Input {
|
|
|
538
535
|
'in-item': inItem,
|
|
539
536
|
'in-item-color': hostContext('ion-item.ion-color', this.el),
|
|
540
537
|
'input-disabled': disabled,
|
|
541
|
-
}) }, h("label", { key: '
|
|
538
|
+
}) }, h("label", { key: '27f4bd671f6084a7e608e4f9442192c950879dc2', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, hasOutlineFill && this.renderOutlineContainer(), h("div", { key: '7827c61ffdd02952fc8cf2096f621b50fc51ec03', class: "input-start", ref: (el) => (this.startContainerEl = el) }, h("slot", { key: '1d8af52d3506742d87334b388859a8bf613e1be0', name: "start" })), h("div", { key: '927a412064538c00df98fabc06a32c564d05e984', class: "input-control" }, this.renderLabel(), h("div", { key: '05f80c0b11a7da57445f976bd2dbb557fa63c9bc', class: "native-wrapper", onClick: this.onLabelClick }, h("input", { key: 'cb6f5d81ba7c2a04cc4c9deb5d3f5bca8562b6db', 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: '82cd1b0458dcd491fd1a46b29764f2b79a969bc6', class: "input-end" }, this.clearInput && !readonly && !disabled && (h("button", { key: 'dfcf0ed81cf36fc61b8e12ed4605ac6b6eb50dad', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
|
|
542
539
|
/**
|
|
543
540
|
* This prevents mobile browsers from
|
|
544
541
|
* blurring the input when the clear
|
|
545
542
|
* button is activated.
|
|
546
543
|
*/
|
|
547
544
|
ev.preventDefault();
|
|
548
|
-
}, onClick: this.clearTextInput }, h("ion-icon", { key: '
|
|
545
|
+
}, onClick: this.clearTextInput }, h("ion-icon", { key: '11e2c866135f332e81b4637de178e1c5c7da0d38', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: 'afb0e75e7103b2bf925a9c7649c93eb1d5702670', name: "end" })), shouldRenderHighlight && h("div", { key: '1f305bba279e93685d7139acf0aff6bf4a77500c', class: "input-highlight" })), this.renderBottomContent()));
|
|
549
546
|
}
|
|
550
547
|
static get is() { return "ion-input"; }
|
|
551
548
|
static get encapsulation() { return "scoped"; }
|
|
@@ -151,6 +151,12 @@
|
|
|
151
151
|
position: relative;
|
|
152
152
|
flex: 1;
|
|
153
153
|
width: 100%;
|
|
154
|
+
/**
|
|
155
|
+
* The input keeps a minimum width so that the value stays visible
|
|
156
|
+
* when a long label or wide slotted content would otherwise shrink
|
|
157
|
+
* it to nothing.
|
|
158
|
+
*/
|
|
159
|
+
min-width: 2ch;
|
|
154
160
|
max-width: 100%;
|
|
155
161
|
height: 100%;
|
|
156
162
|
max-height: 100%;
|
|
@@ -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"
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { Build, Host, forceUpdate, h } from "@stencil/core";
|
|
5
|
-
import {
|
|
5
|
+
import { createAttributeController } from "../../utils/attribute-controller";
|
|
6
|
+
import { raf } from "../../utils/helpers";
|
|
6
7
|
import { createColorClasses, hostContext, openURL } from "../../utils/theme";
|
|
7
8
|
import { chevronForward } from "ionicons/icons";
|
|
8
9
|
import { getIonMode } from "../../global/ionic-global";
|
|
@@ -23,7 +24,6 @@ export class Item {
|
|
|
23
24
|
constructor() {
|
|
24
25
|
this.labelColorStyles = {};
|
|
25
26
|
this.itemStyles = new Map();
|
|
26
|
-
this.inheritedAriaAttributes = {};
|
|
27
27
|
this.didLoad = false;
|
|
28
28
|
this.multipleInputs = false;
|
|
29
29
|
this.focusable = true;
|
|
@@ -104,9 +104,16 @@ export class Item {
|
|
|
104
104
|
this.watchForIndicatorControls();
|
|
105
105
|
this.updateInteractivityOnSlotChange();
|
|
106
106
|
}
|
|
107
|
+
this.ariaController?.init();
|
|
107
108
|
}
|
|
108
109
|
componentWillLoad() {
|
|
109
|
-
|
|
110
|
+
/**
|
|
111
|
+
* Only the initial copy takes the attribute off the host, so an `aria-label` written
|
|
112
|
+
* after load names both the native element and the Host, which is a `listitem` when
|
|
113
|
+
* the item is in an `ion-list`. The two names always agree, so a screen reader just
|
|
114
|
+
* reads it twice.
|
|
115
|
+
*/
|
|
116
|
+
this.ariaController = createAttributeController(this.el, ['aria-label'], () => forceUpdate(this));
|
|
110
117
|
}
|
|
111
118
|
componentDidLoad() {
|
|
112
119
|
raf(() => {
|
|
@@ -123,6 +130,7 @@ export class Item {
|
|
|
123
130
|
this.indicatorControlObserver.disconnect();
|
|
124
131
|
this.indicatorControlObserver = undefined;
|
|
125
132
|
}
|
|
133
|
+
this.ariaController?.destroy();
|
|
126
134
|
}
|
|
127
135
|
totalNestedInputs() {
|
|
128
136
|
// The following elements have a clickable cover that is relative to the entire item
|
|
@@ -230,7 +238,8 @@ export class Item {
|
|
|
230
238
|
return controls[0];
|
|
231
239
|
}
|
|
232
240
|
render() {
|
|
233
|
-
const { detail, detailIcon, download, labelColorStyles, lines, disabled, href, rel, target, routerAnimation, routerDirection,
|
|
241
|
+
const { detail, detailIcon, download, labelColorStyles, lines, disabled, href, rel, target, routerAnimation, routerDirection, multipleInputs, } = this;
|
|
242
|
+
const inheritedAriaAttributes = this.ariaController?.attributes ?? {};
|
|
234
243
|
const childStyles = {};
|
|
235
244
|
const mode = getIonMode(this);
|
|
236
245
|
const clickable = this.isClickable();
|
|
@@ -306,7 +315,7 @@ export class Item {
|
|
|
306
315
|
* multi-input item, and in a clickable item, which is a second tab stop.
|
|
307
316
|
*/
|
|
308
317
|
const slottedIndicatorNeedsRoom = this.hasSlottedIndicatorControl && (multipleInputs || this.isClickable());
|
|
309
|
-
return (h(Host, { key: '
|
|
318
|
+
return (h(Host, { key: '7fe924642310c19f057ae1bfa29c1acdf5cc7ed6', "aria-disabled": ariaDisabled, class: {
|
|
310
319
|
...childStyles,
|
|
311
320
|
...labelColorStyles,
|
|
312
321
|
...createColorClasses(this.color, {
|
|
@@ -323,7 +332,7 @@ export class Item {
|
|
|
323
332
|
'ion-focusable': this.focusable,
|
|
324
333
|
'item-rtl': document.dir === 'rtl',
|
|
325
334
|
}),
|
|
326
|
-
}, role: inList ? 'listitem' : null }, h(TagType, { key: '
|
|
335
|
+
}, role: inList ? 'listitem' : null }, h(TagType, { key: '8fddfb2a076b4b98e45ee8b23579d011dba12acb', ...attrs, ...inheritedAriaAttributes, class: "item-native", part: "native", disabled: disabled, ...clickFn }, h("slot", { key: '7f888b62b2023cf501fd308e32629e7a291c2d05', name: "start", onSlotchange: this.updateInteractivityOnSlotChange }), h("div", { key: '6d5cdde307caa65b131edb65cb0a5f8294cf151c', class: "item-inner", part: "inner" }, h("div", { key: '9fbfffdff4cf51adf1f02d573953cf8b145574b0', class: "input-wrapper", part: "container" }, h("slot", { key: '574c7e61cdaa3959a28bad7353105ef217a76ed9', onSlotchange: this.updateInteractivityOnSlotChange })), h("slot", { key: 'ed7e211960cd65ed17f865a6d50d5bdde069416b', name: "end", onSlotchange: this.updateInteractivityOnSlotChange }), showDetail && (h("ion-icon", { key: '2847bb21f42e9d5ab8ea86262b2bc1c3b3f7c902', icon: detailIcon, lazy: false, class: "item-detail-icon", part: "detail-icon", "aria-hidden": "true", "flip-rtl": detailIcon === chevronForward }))), canActivate && mode === 'md' && h("ion-ripple-effect", { key: '55502ef394db0953144387fa3baebf9fa6a976a9' }))));
|
|
327
336
|
}
|
|
328
337
|
static get is() { return "ion-item"; }
|
|
329
338
|
static get encapsulation() { return "shadow"; }
|
|
@@ -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"; }
|
|
@@ -77,7 +77,12 @@
|
|
|
77
77
|
--max-width: auto;
|
|
78
78
|
--height: 100%;
|
|
79
79
|
--min-height: auto;
|
|
80
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Clamps a content-sized `--height` (auto, fit-content, ...) to the
|
|
82
|
+
* overlay, giving the wrapper's flex children something to shrink
|
|
83
|
+
* toward so `ion-content` scrolls instead of overflowing.
|
|
84
|
+
*/
|
|
85
|
+
--max-height: 100%;
|
|
81
86
|
--overflow: hidden;
|
|
82
87
|
--border-radius: 0;
|
|
83
88
|
--border-width: 0;
|
|
@@ -129,8 +134,14 @@ ion-backdrop {
|
|
|
129
134
|
/**
|
|
130
135
|
* The wrapper receives programmatic focus for screen readers but should not
|
|
131
136
|
* show a visible focus ring, which is meant only for keyboard navigation.
|
|
137
|
+
*
|
|
138
|
+
* A flex layout is required for the wrapper to size itself to its content
|
|
139
|
+
* when the modal is content-sized (`--height` is auto, fit-content, ...).
|
|
140
|
+
* This makes it so that the content can scroll when it overflows the wrapper.
|
|
132
141
|
*/
|
|
133
142
|
.modal-wrapper {
|
|
143
|
+
display: flex;
|
|
144
|
+
flex-direction: column;
|
|
134
145
|
outline: none;
|
|
135
146
|
}
|
|
136
147
|
|