voyager-ionic-core 9.0.1 → 9.0.6
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-Hp8t4RMX.js → p-6sKRBFnK.js} +1 -1
- package/components/{p-qAXsfUff.js → p-B8HBLiYi.js} +1 -1
- package/{dist/ionic/p-Do3zTvCA.js → components/p-BEiYs-sz.js} +1 -1
- package/components/p-BKeulLTJ.js +4 -0
- package/components/{p-5ldEpNdG.js → p-BKxLivx4.js} +1 -1
- package/components/{p-BYJRZKHa.js → p-BLjEwM6v.js} +1 -1
- package/components/{p-Cd1WaN-0.js → p-BNnmwjuy.js} +1 -1
- package/components/{p-COO0eJOA.js → p-BSJriPuC.js} +1 -1
- package/components/p-BUVGbkSc.js +4 -0
- package/components/{p-DL13ieTa.js → p-B_tZQKpS.js} +1 -1
- package/components/p-BexLz2XV.js +4 -0
- package/components/p-BinR4_P7.js +4 -0
- package/components/{p-DxhHlJln.js → p-BrOSQhkA.js} +1 -1
- package/components/p-BriaEJK8.js +4 -0
- package/components/p-BsLM9eQu.js +4 -0
- package/components/{p-DhNuxvJH.js → p-Bu6O-veK.js} +1 -1
- package/components/{p-DJR0R0e1.js → p-C7rB-0-1.js} +1 -1
- package/components/{p-6ZLn6K5e.js → p-C9ioHZq-.js} +1 -1
- package/components/p-CAQG0btC.js +4 -0
- package/components/{p-DMBiAyOR.js → p-CHHkdXfP.js} +1 -1
- package/components/p-CJgshb3W.js +4 -0
- package/components/p-CQjNc-Pz.js +4 -0
- package/components/{p-CJgnoKcN.js → p-CTUMJM0R.js} +1 -1
- package/components/{p-C4VpVfrJ.js → p-CVVUo4J1.js} +1 -1
- package/components/{p-B4lxwJ8N.js → p-CXy2v7GI.js} +1 -1
- package/components/{p-BQyuFxYc.js → p-C_NQIzjP.js} +1 -1
- package/components/{p-D7wDJdFn.js → p-Canp1qah.js} +1 -1
- package/components/p-CcQQ8oRo.js +4 -0
- package/components/{p-GGbIHyEF.js → p-CiFFeRH9.js} +1 -1
- package/components/p-CiXOsJF2.js +4 -0
- package/components/p-Ctw69DyZ.js +4 -0
- package/components/{p-DngGb-NV.js → p-CvzE7FFp.js} +1 -1
- package/components/{p-TWw4e4sO.js → p-CzykzqAO.js} +1 -1
- package/components/p-D0jSx7rE.js +4 -0
- package/components/{p-C-NbvXu4.js → p-D4NOsSCE.js} +1 -1
- package/components/{p-cEN43Ahr.js → p-DGUed0uX.js} +1 -1
- package/components/p-DM2jMsSO.js +4 -0
- package/components/p-DPyjiKOq.js +4 -0
- package/components/{p-BF48Oc0v.js → p-DSmHJ2DH.js} +1 -1
- package/components/p-DWGgvN5e.js +4 -0
- package/components/p-DlUdjUlf.js +4 -0
- package/components/{p-DM1gJSMP.js → p-Dlr7b3_2.js} +1 -1
- package/components/p-F1rV0pyK.js +4 -0
- package/components/{p-DFLJvuRK.js → p-LH1I_Zhd.js} +1 -1
- package/components/p-PPagT42x.js +4 -0
- package/components/{p-CqbGBmqb.js → p-RJT5zTbD.js} +1 -1
- package/components/p-T2dnrBya.js +4 -0
- package/components/p-WMQuK_Tj.js +4 -0
- package/components/p-eJpG4UbM.js +4 -0
- package/components/p-fFx6WCTj.js +4 -0
- package/{dist/ionic/p-BgOvhHy_.js → components/p-q2WJ5Igc.js} +1 -1
- package/components/{p-D5w_FlVa.js → p-y7Nhe3de.js} +1 -1
- package/css/core.css +1 -1
- package/css/core.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/dist/cjs/{animation-Kd1N7WTN.js → animation-BFKyYY11.js} +3 -3
- package/dist/cjs/{app-globals-b1G4t26O.js → app-globals-BLTzqkrC.js} +1 -1
- package/dist/cjs/attribute-controller-CXIeB0Mn.js +131 -0
- package/dist/cjs/{button-active-CQCFubJJ.js → button-active-CEQaiV9N.js} +2 -2
- package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-BMzmHhwe.js} +3 -3
- package/dist/cjs/{format-bHU8N1g5.js → format-CdRlDqPs.js} +1 -1
- package/dist/cjs/{framework-delegate-d-fWfeI6.js → framework-delegate-DTLbqaaO.js} +1 -1
- package/dist/cjs/{haptic-Ch-X4gRx.js → haptic-CJVUv_GB.js} +1 -1
- package/dist/cjs/{helpers-7wzdhdeg.js → helpers-Crluoxqu.js} +50 -3
- package/dist/cjs/{index-DtvKGwdh.js → index-BAM4223M.js} +2 -2
- package/dist/cjs/{index-C74Q3t6a.js → index-BKpybYNI.js} +7 -8
- package/dist/cjs/{index-BbqUBe2T.js → index-BSD7toMO.js} +10 -8
- package/dist/cjs/{index-DFNrCX7M.js → index-CElfU-dK.js} +8 -9
- package/dist/cjs/{index-CQfEIyLK.js → index-CgXTRA_-.js} +4 -4
- package/dist/cjs/{index-DXoo08JC.js → index-SAR1xwtW.js} +25 -12
- package/dist/cjs/index.cjs.js +19 -19
- package/dist/cjs/{input-shims-VJIiKBKv.js → input-shims-CHghGZe-.js} +16 -17
- package/dist/cjs/{input.utils-EHVE2RK_.js → input.utils-BBZr0wjw.js} +1 -1
- package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-action-sheet.cjs.entry.js +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 +3 -3
- 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 +15 -17
- 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-C1h8Yi_K.js} +1 -1
- package/dist/cjs/ionic.cjs.js +5 -5
- package/dist/cjs/{ios.transition-DYGiD6gM.js → ios.transition-YFSxiyP_.js} +4 -5
- package/dist/cjs/{item-multiple-inputs-Dv6qrMhm.js → item-multiple-inputs-h2PyAFzG.js} +1 -1
- package/dist/cjs/{keyboard-cHxZlTyz.js → keyboard-C-C7xMKk.js} +1 -1
- package/dist/cjs/{keyboard-Cix5TVkD.js → keyboard-Cv-LNReK.js} +5 -3
- package/dist/cjs/{keyboard-controller-PtZoN2GS.js → keyboard-controller-CLcFxSnb.js} +9 -9
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-CrSkaoz6.js → md.transition-Cm8yg0UK.js} +4 -5
- package/dist/cjs/{overlays-BR21NUIG.js → overlays-C68wNDWY.js} +162 -9
- package/dist/cjs/{select-option-render-CrbLc-1j.js → select-option-render-C-Yh9yZG.js} +2 -2
- package/dist/cjs/{slot-mutation-controller-D6IjSEIh.js → slot-mutation-controller-zixZ5LyH.js} +73 -5
- package/dist/cjs/{status-tap-CNP5eD1R.js → status-tap-C3frTJ4c.js} +3 -3
- package/dist/cjs/{swipe-back-CSIJQfu5.js → swipe-back-ChrfFzIe.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/item/item.js +15 -6
- 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/helpers.js +44 -3
- package/dist/collection/utils/logging/index.js +4 -0
- package/dist/collection/utils/overlays.js +34 -0
- package/dist/collection/utils/sanitization/index.js +10 -8
- package/dist/docs.json +9 -3
- package/dist/esm/{animation-BFNVlYum.js → animation-CFd8Olt3.js} +2 -2
- package/dist/esm/{app-globals-BgX0BGL1.js → app-globals-7GHLBkwd.js} +1 -1
- package/dist/esm/attribute-controller-Cn665x42.js +128 -0
- package/dist/esm/{button-active-BfOvDr3b.js → button-active-DMuYeDQN.js} +2 -2
- package/dist/esm/{capacitor-CFERIeaU.js → capacitor-CoEgIpR9.js} +1 -1
- package/dist/esm/{format-DDFE9jM5.js → format-C9zPmwKU.js} +1 -1
- package/dist/esm/{framework-delegate-BwNhx9NR.js → framework-delegate-DeT5pmPB.js} +1 -1
- package/dist/esm/{haptic-Cq4UAeka.js → haptic-Dxm7ZmT5.js} +1 -1
- package/dist/esm/{helpers-BSmc0nst.js → helpers-B54ynME_.js} +47 -4
- package/dist/esm/{index-C1b9CLFg.js → index--21qeSt0.js} +2 -2
- package/dist/esm/{index-DnA_7Bnx.js → index-B8iieOdw.js} +4 -4
- package/dist/esm/{index-BuPaALjU.js → index-B9jhwvmO.js} +5 -6
- package/dist/esm/{index-CqoUoxgG.js → index-D4ZMZz_3.js} +10 -8
- package/dist/esm/{index-C23AVPx9.js → index-D9OR05yj.js} +26 -13
- package/dist/esm/{index-CJln0gS3.js → index-D_xZtbw6.js} +2 -3
- package/dist/esm/index.js +11 -13
- package/dist/esm/{input-shims-Dqk-Ou25.js → input-shims-MCrhq67U.js} +5 -6
- package/dist/esm/{input.utils-rqoH22pW.js → input.utils-B-IIWrwT.js} +1 -1
- package/dist/esm/ion-accordion_2.entry.js +3 -3
- package/dist/esm/ion-action-sheet.entry.js +11 -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 +3 -3
- 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 +7 -9
- 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-B-G43ddm.js} +1 -1
- package/dist/esm/ionic.js +6 -6
- package/dist/esm/{ios.transition-CWAgfQ1r.js → ios.transition-CRfGj4Mo.js} +4 -5
- package/dist/esm/{item-multiple-inputs-DZnIiOO_.js → item-multiple-inputs-BSD9wGHO.js} +1 -1
- package/dist/esm/{keyboard-Cj8mLJeq.js → keyboard-DDw62P0D.js} +5 -3
- package/dist/esm/{keyboard-controller-DEwoa1ev.js → keyboard-controller-Dzjet5wD.js} +2 -2
- package/dist/esm/{keyboard-DAF8GNJ9.js → keyboard-ly3M0GO7.js} +1 -1
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-ZuqDDdDW.js → md.transition-wqThNy_C.js} +4 -5
- package/dist/esm/{overlays-DKE0DgvE.js → overlays-BQnV0HAU.js} +156 -7
- package/dist/esm/{select-option-render-1W6W9pbC.js → select-option-render-CGxPejmz.js} +2 -2
- package/dist/esm/{slot-mutation-controller-B5NpUZ-N.js → slot-mutation-controller-C3s4-_YN.js} +69 -3
- package/dist/esm/{status-tap-Cv9gb3ja.js → status-tap-DRx9wSD_.js} +3 -3
- package/dist/esm/{swipe-back-De5HlmeM.js → swipe-back-CXmdi75W.js} +2 -2
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-8b80d9f9.entry.js → p-0517aec4.entry.js} +1 -1
- package/dist/ionic/{p-ee09ac9d.entry.js → p-083b1119.entry.js} +1 -1
- package/dist/ionic/p-0ab133d6.entry.js +4 -0
- package/dist/ionic/{p-271c3640.entry.js → p-1110da0d.entry.js} +1 -1
- package/dist/ionic/p-1213b719.entry.js +4 -0
- package/dist/ionic/p-150f350e.entry.js +4 -0
- package/dist/ionic/{p-38b9375b.entry.js → p-20d1ac29.entry.js} +1 -1
- package/dist/ionic/p-24b0a961.entry.js +4 -0
- package/dist/ionic/{p-f0fb23c1.entry.js → p-2e6e933d.entry.js} +1 -1
- package/dist/ionic/p-30dcf43b.entry.js +4 -0
- package/dist/ionic/p-336ea4b8.entry.js +4 -0
- package/dist/ionic/{p-b9b4e85d.entry.js → p-378341d1.entry.js} +1 -1
- package/dist/ionic/{p-191a651e.entry.js → p-37f46670.entry.js} +1 -1
- package/dist/ionic/p-3a5faaa8.entry.js +4 -0
- package/dist/ionic/{p-efc0cf82.entry.js → p-3c4b0ba7.entry.js} +1 -1
- package/dist/ionic/p-42b2a992.entry.js +4 -0
- package/dist/ionic/p-49a16200.entry.js +4 -0
- package/dist/ionic/{p-837db1b9.entry.js → p-4dbb2f4f.entry.js} +1 -1
- package/dist/ionic/p-52dc3309.entry.js +4 -0
- package/dist/ionic/{p-85599fe3.entry.js → p-58f914ee.entry.js} +1 -1
- package/dist/ionic/{p-561af487.entry.js → p-5b9666be.entry.js} +1 -1
- package/dist/ionic/p-5c19330c.entry.js +4 -0
- package/dist/ionic/{p-3bba83ee.entry.js → p-61b304c8.entry.js} +1 -1
- package/dist/ionic/p-624f2fa8.entry.js +4 -0
- package/dist/ionic/p-636349e2.entry.js +4 -0
- package/dist/ionic/{p-d8c138d9.entry.js → p-6865f0e1.entry.js} +1 -1
- package/dist/ionic/p-7441ed2b.entry.js +4 -0
- package/dist/ionic/p-76309bab.entry.js +4 -0
- package/dist/ionic/p-83448626.entry.js +4 -0
- package/dist/ionic/{p-5d9094ac.entry.js → p-834afcf7.entry.js} +1 -1
- package/dist/ionic/{p-099b7f9f.entry.js → p-93cd738b.entry.js} +1 -1
- package/dist/ionic/{p-d6755739.entry.js → p-9b78fedf.entry.js} +1 -1
- package/dist/ionic/p-9dd9788c.entry.js +4 -0
- package/dist/ionic/{p-DYUjHcuH.js → p-B4ELlbJE.js} +1 -1
- package/dist/ionic/p-B4wzg4z4.js +4 -0
- package/dist/ionic/p-B4xjg_Qu.js +4 -0
- package/dist/ionic/{p-T71k3C35.js → p-BCgqWm-V.js} +1 -1
- package/dist/ionic/p-BChRVdVv.js +4 -0
- package/dist/ionic/{p-DTxBioUO.js → p-BUB5OrpU.js} +1 -1
- package/dist/ionic/p-BVEsh7-M.js +4 -0
- package/dist/ionic/p-Ba6ZV-qU.js +4 -0
- package/dist/ionic/p-BhMQahM6.js +4 -0
- package/dist/ionic/p-BtHAx8im.js +4 -0
- package/dist/ionic/{p-DZ6Hmc-8.js → p-Bv-6401R.js} +1 -1
- package/dist/ionic/{p-C8XilMh0.js → p-CCik51Nv.js} +1 -1
- package/dist/ionic/p-CTmJSZcs.js +4 -0
- package/dist/ionic/{p-BaeKWZ-a.js → p-CVwXN07G.js} +1 -1
- package/dist/ionic/p-CgQdInM0.js +4 -0
- package/{components/p-BJr2B5hZ.js → dist/ionic/p-CrAPHbJ3.js} +1 -1
- package/dist/ionic/p-CsWrz1c2.js +4 -0
- package/dist/ionic/p-D5akOqD0.js +4 -0
- package/dist/ionic/{p-C23AVPx9.js → p-D9OR05yj.js} +2 -2
- package/dist/ionic/{p-D4OrdtJf.js → p-DHf9V6zI.js} +1 -1
- package/dist/ionic/{p-Bd72UYI2.js → p-DNxEB9-T.js} +1 -1
- package/dist/ionic/p-DZUqAr_6.js +4 -0
- package/dist/ionic/{p-CM5OBjTW.js → p-DffXRKHu.js} +1 -1
- package/dist/ionic/{p-BMPN55of.js → p-DxvRP6ld.js} +1 -1
- package/dist/ionic/p-Dzew6Qv7.js +4 -0
- package/dist/ionic/p-PkaVMJga.js +4 -0
- package/dist/ionic/{p-4712a8a9.entry.js → p-b0a3dd1a.entry.js} +1 -1
- package/dist/ionic/p-b1164028.entry.js +4 -0
- package/dist/ionic/{p-ca1b8865.entry.js → p-b710b4b8.entry.js} +1 -1
- package/dist/ionic/{p-6e386853.entry.js → p-b9659d21.entry.js} +1 -1
- package/dist/ionic/{p-68cc89a6.entry.js → p-ba7bd621.entry.js} +1 -1
- package/dist/ionic/{p-db449915.entry.js → p-c2a23101.entry.js} +1 -1
- package/dist/ionic/p-daaecea3.entry.js +4 -0
- package/dist/ionic/p-e05073f6.entry.js +4 -0
- package/dist/ionic/{p-90f50a65.entry.js → p-e137f724.entry.js} +1 -1
- package/dist/ionic/p-e1969fd1.entry.js +4 -0
- package/dist/ionic/{p-7fbb3319.entry.js → p-e338693a.entry.js} +1 -1
- package/dist/ionic/p-e4c3f17f.entry.js +4 -0
- package/dist/ionic/p-e7414c33.entry.js +4 -0
- package/dist/ionic/{p-dd01be0a.entry.js → p-eb762f80.entry.js} +1 -1
- package/dist/ionic/{p-ec00fd0d.entry.js → p-edcb63e5.entry.js} +1 -1
- package/dist/ionic/p-f19e50f8.entry.js +4 -0
- package/dist/ionic/p-f9057f70.entry.js +4 -0
- package/dist/ionic/{p-9c5f2691.entry.js → p-f99cf5aa.entry.js} +1 -1
- package/dist/ionic/{p-54cbb0a7.entry.js → p-fee863dc.entry.js} +1 -1
- package/dist/ionic/p-kKvGoaEe.js +4 -0
- package/dist/ionic/p-tXpzvta8.js +4 -0
- package/dist/ionic/p-vPo3vRFc.js +4 -0
- 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/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/forms/click-controller.d.ts +36 -0
- package/dist/types/utils/forms/index.d.ts +1 -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 +15 -0
- package/dist/types/utils/sanitization/index.d.ts +2 -2
- package/hydrate/index.js +817 -299
- package/hydrate/index.mjs +817 -299
- package/package.json +4 -4
- package/components/p-1sJ0ZDPe.js +0 -4
- package/components/p-BNBnVi_1.js +0 -4
- package/components/p-BT9-hMMz.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-C0493tbX.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-CrAKlX71.js +0 -4
- package/components/p-Cw6WocLJ.js +0 -4
- package/components/p-DGPjJNOU.js +0 -4
- package/components/p-DZRZic9C.js +0 -4
- package/components/p-DiuOa1vw.js +0 -4
- package/components/p-Dj40C8gm.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-06c6b540.entry.js +0 -4
- 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-2c52fe3e.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-4c3e50f8.entry.js +0 -4
- package/dist/ionic/p-4e2fef42.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-66f150ec.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-9595e305.entry.js +0 -4
- package/dist/ionic/p-BY6BzzPF.js +0 -4
- package/dist/ionic/p-BhamHSw3.js +0 -4
- package/dist/ionic/p-BijjLYjT.js +0 -4
- 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-a1cc2861.entry.js +0 -4
- package/dist/ionic/p-a20a2ebe.entry.js +0 -4
- package/dist/ionic/p-a8ff2489.entry.js +0 -4
- package/dist/ionic/p-b3532b8d.entry.js +0 -4
- package/dist/ionic/p-b80c86c4.entry.js +0 -4
- package/dist/ionic/p-c57fc396.entry.js +0 -4
- package/dist/ionic/p-cc4320d3.entry.js +0 -4
- package/dist/ionic/p-f83b3e0c.entry.js +0 -4
- package/dist/ionic/p-fU3rOYad.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%;
|
|
@@ -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"; }
|
|
@@ -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
|
|
|
@@ -21,8 +21,8 @@ import { mdEnterAnimation } from "./animations/md.enter";
|
|
|
21
21
|
import { mdLeaveAnimation } from "./animations/md.leave";
|
|
22
22
|
import { createSheetGesture } from "./gestures/sheet";
|
|
23
23
|
import { createSwipeToCloseGesture, SwipeToCloseDefaults } from "./gestures/swipe-to-close";
|
|
24
|
-
import { getInitialSafeAreaConfig, getPositionBasedSafeAreaConfig, applySafeAreaOverrides, clearSafeAreaOverrides, getRootSafeAreaTop, onRootSafeAreaTopChange,
|
|
25
|
-
import { setCardStatusBarDark, setCardStatusBarDefault } from "./utils";
|
|
24
|
+
import { getInitialSafeAreaConfig, getPositionBasedSafeAreaConfig, applySafeAreaOverrides, clearSafeAreaOverrides, getRootSafeAreaTop, onRootSafeAreaTopChange, getModalCoveredAxes, } from "./safe-area-utils";
|
|
25
|
+
import { onModalHeightChange, setCardStatusBarDark, setCardStatusBarDefault } from "./utils";
|
|
26
26
|
// TODO(FW-2832): types
|
|
27
27
|
/**
|
|
28
28
|
* @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
|
|
@@ -1053,7 +1053,7 @@ export class Modal {
|
|
|
1053
1053
|
/**
|
|
1054
1054
|
* Creates the context object for safe-area utilities.
|
|
1055
1055
|
*
|
|
1056
|
-
* `
|
|
1056
|
+
* `coveredAxes` is only set by `setInitialSafeAreaOverrides()`
|
|
1057
1057
|
* because it is only read by `getInitialSafeAreaConfig()`. Other callers
|
|
1058
1058
|
* (resize handler, post-animation update, fullscreen-padding apply) would
|
|
1059
1059
|
* pay a `getComputedStyle()` cost for a value they never consult.
|
|
@@ -1067,6 +1067,26 @@ export class Modal {
|
|
|
1067
1067
|
currentBreakpoint: this.currentBreakpoint,
|
|
1068
1068
|
};
|
|
1069
1069
|
}
|
|
1070
|
+
/**
|
|
1071
|
+
* Keeps the content's sizing in sync with `--height`. The content reads the
|
|
1072
|
+
* property to determine whether it should size itself to its content, and
|
|
1073
|
+
* changes to `--height` on an ancestor or the root can change that behavior
|
|
1074
|
+
* without changing the modal itself.
|
|
1075
|
+
*/
|
|
1076
|
+
watchHeightForContent() {
|
|
1077
|
+
/**
|
|
1078
|
+
* A sheet's height comes from its breakpoints, so its content never sizes
|
|
1079
|
+
* itself to `--height`. Watching it would cause the drag to recalculate on
|
|
1080
|
+
* every frame.
|
|
1081
|
+
*/
|
|
1082
|
+
if (this.isSheetModal) {
|
|
1083
|
+
return;
|
|
1084
|
+
}
|
|
1085
|
+
this.unsubscribeHeightChange?.();
|
|
1086
|
+
this.unsubscribeHeightChange = onModalHeightChange(this.el, () => {
|
|
1087
|
+
this.el.querySelectorAll('ion-content').forEach((contentEl) => contentEl.recalculateDimensions());
|
|
1088
|
+
});
|
|
1089
|
+
}
|
|
1070
1090
|
/**
|
|
1071
1091
|
* Sets initial safe-area overrides before modal animation.
|
|
1072
1092
|
* Called in present() before animation starts.
|
|
@@ -1080,10 +1100,11 @@ export class Modal {
|
|
|
1080
1100
|
setInitialSafeAreaOverrides() {
|
|
1081
1101
|
const context = {
|
|
1082
1102
|
...this.getSafeAreaContext(),
|
|
1083
|
-
|
|
1103
|
+
coveredAxes: getModalCoveredAxes(this.el),
|
|
1084
1104
|
};
|
|
1085
1105
|
const safeAreaConfig = getInitialSafeAreaConfig(context);
|
|
1086
1106
|
applySafeAreaOverrides(this.el, safeAreaConfig);
|
|
1107
|
+
this.watchHeightForContent();
|
|
1087
1108
|
// Set the internal offset property with the resolved root safe-area-top value
|
|
1088
1109
|
if (context.isSheetModal) {
|
|
1089
1110
|
this.updateSheetOffsetTop();
|
|
@@ -1203,6 +1224,8 @@ export class Modal {
|
|
|
1203
1224
|
clearSafeAreaOverrides(this.el);
|
|
1204
1225
|
this.unsubscribeRootSafeAreaTop?.();
|
|
1205
1226
|
this.unsubscribeRootSafeAreaTop = undefined;
|
|
1227
|
+
this.unsubscribeHeightChange?.();
|
|
1228
|
+
this.unsubscribeHeightChange = undefined;
|
|
1206
1229
|
// Remove internal sheet offset property
|
|
1207
1230
|
this.el.style.removeProperty('--ion-modal-offset-top');
|
|
1208
1231
|
const { contentEl } = this.findContentAndFooter();
|
|
@@ -1240,7 +1263,7 @@ export class Modal {
|
|
|
1240
1263
|
const isCardModal = presentingElement !== undefined && mode === 'ios';
|
|
1241
1264
|
const isHandleCycle = handleBehavior === 'cycle';
|
|
1242
1265
|
const isSheetModalWithHandle = isSheetModal && showHandle;
|
|
1243
|
-
return (h(Host, { key: '
|
|
1266
|
+
return (h(Host, { key: '17a95bd7722bac2344bea041aff97db17f55c0cf', "no-router": true,
|
|
1244
1267
|
// Allow the modal to be navigable when the handle is focusable
|
|
1245
1268
|
tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1, ...htmlAttributes, style: {
|
|
1246
1269
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
@@ -1253,7 +1276,7 @@ export class Modal {
|
|
|
1253
1276
|
'overlay-hidden': true,
|
|
1254
1277
|
[FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false,
|
|
1255
1278
|
...getClassMap(this.cssClass),
|
|
1256
|
-
}, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, h("ion-backdrop", { key: '
|
|
1279
|
+
}, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, h("ion-backdrop", { key: '9dab1ef4771c0d847ba2be8672afbaa2748517f3', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '64af7ed1c5f552b61fc4b9387b926acc76c8a99a', class: "modal-shadow" }), h("div", { key: '7e76d77d5b2e8f0467bb793facf5aa86f8d01bbe',
|
|
1257
1280
|
/*
|
|
1258
1281
|
role and aria-modal must be used on the
|
|
1259
1282
|
same element. They must also be set inside the
|
|
@@ -1266,9 +1289,9 @@ export class Modal {
|
|
|
1266
1289
|
without the tabindex focus() would be a no-op and screen readers
|
|
1267
1290
|
may not properly announce the dialog and its content when it opens.
|
|
1268
1291
|
*/
|
|
1269
|
-
role: "dialog", ...inheritedAttributes, "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }, showHandle && (h("button", { key: '
|
|
1292
|
+
role: "dialog", ...inheritedAttributes, "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }, showHandle && (h("button", { key: '5efc0bb0a59adcc594ac48da9fd90e57908a7ffb', class: "modal-handle",
|
|
1270
1293
|
// Prevents the handle from receiving keyboard focus when it does not cycle
|
|
1271
|
-
tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '
|
|
1294
|
+
tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '6175fcd0b39c086b4e9eb9e96c4d631c2a86774b', onSlotchange: this.onSlotChange }))));
|
|
1272
1295
|
}
|
|
1273
1296
|
static get is() { return "ion-modal"; }
|
|
1274
1297
|
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
|
|