voyager-ionic-core 8.8.17 → 9.0.3
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-1sJ0ZDPe.js +4 -0
- package/components/p-5ldEpNdG.js +4 -0
- package/components/p-6ZLn6K5e.js +4 -0
- package/components/p-B1_TL6RQ.js +4 -0
- package/components/p-B4lxwJ8N.js +4 -0
- package/components/{p-rCa2eL0j.js → p-BF48Oc0v.js} +1 -1
- package/components/p-BJr2B5hZ.js +4 -0
- package/components/p-BMPN55of.js +4 -0
- package/components/{p-ChIZKXUu.js → p-BQyuFxYc.js} +1 -1
- package/components/p-BSQPZ79H.js +4 -0
- package/components/p-BT9-hMMz.js +4 -0
- package/components/p-BU8a2IhR.js +4 -0
- package/components/p-BW_SlU2D.js +4 -0
- package/components/p-BWoa-cki.js +4 -0
- package/components/p-BYJRZKHa.js +4 -0
- package/components/p-B_gJaBk0.js +4 -0
- package/components/p-BgkOsq-d.js +4 -0
- package/components/p-BhamHSw3.js +4 -0
- package/components/p-Bi-it1EH.js +4 -0
- package/components/p-C-NbvXu4.js +4 -0
- package/components/p-C09TXohi.js +4 -0
- package/components/p-C4VpVfrJ.js +4 -0
- package/components/p-C8Ck7_Eo.js +4 -0
- package/components/p-CEW4RXZO.js +4 -0
- package/components/p-CG_zZq_I.js +4 -0
- package/components/{p-B9jFTlwE.js → p-CJgnoKcN.js} +1 -1
- package/components/p-CMRYD_yR.js +4 -0
- package/components/{p-BMI53wYL.js → p-CNLioZ3B.js} +1 -1
- package/components/{p--JUspHvy.js → p-COO0eJOA.js} +1 -1
- package/components/p-CWAks_S_.js +4 -0
- package/{dist/ionic/p-KjNvRoEp.js → components/p-Cd1WaN-0.js} +1 -1
- package/components/p-CqbGBmqb.js +4 -0
- package/components/p-CrAKlX71.js +4 -0
- package/components/p-Ctop2IWW.js +4 -0
- package/components/p-Cw6WocLJ.js +4 -0
- package/components/p-D0YpjgON.js +4 -0
- package/components/{p-DJZp0KTQ.js → p-D5w_FlVa.js} +1 -1
- package/components/p-D7-vHX0A.js +4 -0
- package/components/p-D7wDJdFn.js +4 -0
- package/components/p-DFLJvuRK.js +4 -0
- package/components/p-DL13ieTa.js +4 -0
- package/components/{p-DqLB8yFQ.js → p-DM1gJSMP.js} +1 -1
- package/components/p-DMBiAyOR.js +4 -0
- package/components/p-DWCzVL3Y.js +4 -0
- package/components/p-DZRZic9C.js +4 -0
- package/components/{p-C_hpsif8.js → p-DhNuxvJH.js} +1 -1
- package/components/p-DiuOa1vw.js +4 -0
- package/components/p-Djmz-ssp.js +4 -0
- package/components/p-DnBNYc7u.js +4 -0
- package/components/p-Dojwmvde.js +4 -0
- package/components/p-DwSXbQSz.js +4 -0
- package/components/p-DxhHlJln.js +4 -0
- package/components/p-Fl7ZFU74.js +4 -0
- package/components/{p-DqZAXv2t.js → p-GGbIHyEF.js} +1 -1
- package/components/{p-j5IxBIan.js → p-Hp8t4RMX.js} +1 -1
- package/components/p-M34T2gyX.js +4 -0
- package/components/p-TWw4e4sO.js +4 -0
- package/components/{p-Cfx4M1Bn.js → p-YjMkHuvH.js} +1 -1
- package/components/p-byZM6qHV.js +4 -0
- package/components/p-cEN43Ahr.js +4 -0
- package/components/p-qAXsfUff.js +4 -0
- package/dist/cjs/{animation-BJq0kcy2.js → animation-Kd1N7WTN.js} +4 -4
- package/dist/cjs/{app-globals-BlqrqKTN.js → app-globals-b1G4t26O.js} +1 -1
- package/dist/cjs/{button-active-0mPOKmV2.js → button-active-CQCFubJJ.js} +3 -3
- package/dist/cjs/config-CjUbvdPW.js +36 -0
- package/dist/cjs/dir-zwDPRE5K.js +30 -0
- package/dist/cjs/{format-PxvGiOik.js → format-bHU8N1g5.js} +40 -30
- package/dist/cjs/{framework-delegate-BtICZDHr.js → framework-delegate-d-fWfeI6.js} +5 -7
- package/dist/cjs/{gesture-controller-dtqlP_q4.js → gesture-controller-CeJslptU.js} +1 -2
- package/dist/cjs/{haptic-ClPPQ_PS.js → haptic-Ch-X4gRx.js} +2 -3
- package/dist/cjs/{hardware-back-button-iUuF_76h.js → hardware-back-button-Bu4Dzw8l.js} +4 -4
- package/dist/cjs/{helpers-Cv23MFHM.js → helpers-7wzdhdeg.js} +15 -11
- package/dist/cjs/{index-D81eLYUM.js → index-C74Q3t6a.js} +3 -2
- package/dist/cjs/{index-BERfRao3.js → index-CQfEIyLK.js} +5 -5
- package/dist/cjs/{index-aC4x3Fk3.js → index-DFNrCX7M.js} +6 -7
- package/dist/cjs/{index-CAvQ7Tka.js → index-DRPqwSvU.js} +13 -30
- package/dist/cjs/{index-Ct7gcRif.js → index-DXoo08JC.js} +321 -26
- package/dist/cjs/{index-CIrkNXqJ.js → index-DtvKGwdh.js} +34 -2
- package/dist/cjs/index-KiSZqhYS.js +431 -0
- package/dist/cjs/{index-DqmRDbxg.js → index-wOmugbdg.js} +1 -1
- package/dist/cjs/index.cjs.js +19 -18
- package/dist/cjs/{input-shims-CFLg7uzj.js → input-shims-VJIiKBKv.js} +10 -11
- package/dist/cjs/input.utils-EHVE2RK_.js +35 -0
- package/dist/cjs/ion-accordion_2.cjs.entry.js +12 -12
- package/dist/cjs/ion-action-sheet.cjs.entry.js +92 -44
- package/dist/cjs/ion-alert.cjs.entry.js +144 -65
- package/dist/cjs/ion-app_8.cjs.entry.js +112 -40
- package/dist/cjs/ion-avatar_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-back-button.cjs.entry.js +6 -5
- package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +8 -7
- package/dist/cjs/ion-button_2.cjs.entry.js +12 -8
- package/dist/cjs/ion-card_5.cjs.entry.js +6 -5
- package/dist/cjs/ion-checkbox.cjs.entry.js +10 -7
- package/dist/cjs/ion-chip.cjs.entry.js +3 -3
- package/dist/cjs/ion-col_3.cjs.entry.js +10 -6
- package/dist/cjs/ion-datetime-button.cjs.entry.js +22 -25
- package/dist/cjs/{ion-datetime_3.cjs.entry.js → ion-datetime.cjs.entry.js} +182 -746
- package/dist/cjs/ion-fab_3.cjs.entry.js +7 -6
- package/dist/cjs/ion-img.cjs.entry.js +7 -4
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +8 -6
- package/dist/cjs/ion-input-otp.cjs.entry.js +20 -29
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +9 -10
- package/dist/cjs/ion-input.cjs.entry.js +58 -70
- package/dist/cjs/ion-item-option_3.cjs.entry.js +21 -24
- package/dist/cjs/ion-item_8.cjs.entry.js +38 -34
- package/dist/cjs/ion-loading.cjs.entry.js +29 -15
- package/dist/cjs/ion-menu_3.cjs.entry.js +23 -24
- package/dist/cjs/ion-modal.cjs.entry.js +283 -161
- package/dist/cjs/ion-nav_2.cjs.entry.js +30 -138
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +8 -13
- package/dist/cjs/ion-picker-column.cjs.entry.js +218 -62
- package/dist/cjs/ion-picker.cjs.entry.js +4 -4
- package/dist/cjs/ion-popover.cjs.entry.js +50 -30
- package/dist/cjs/ion-progress-bar.cjs.entry.js +6 -5
- package/dist/cjs/ion-radio_2.cjs.entry.js +12 -11
- package/dist/cjs/ion-range.cjs.entry.js +30 -25
- package/dist/cjs/ion-refresher_2.cjs.entry.js +34 -26
- package/dist/cjs/ion-reorder_2.cjs.entry.js +10 -9
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +3 -3
- package/dist/cjs/ion-route_4.cjs.entry.js +36 -30
- package/dist/cjs/ion-searchbar.cjs.entry.js +27 -22
- package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
- package/dist/cjs/ion-segment-view.cjs.entry.js +5 -6
- package/dist/cjs/ion-segment_2.cjs.entry.js +30 -26
- package/dist/cjs/ion-select-modal.cjs.entry.js +93 -38
- package/dist/cjs/ion-select_3.cjs.entry.js +495 -126
- package/dist/cjs/ion-spinner.cjs.entry.js +5 -6
- package/dist/cjs/ion-split-pane.cjs.entry.js +4 -4
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +15 -12
- package/dist/cjs/ion-tab_2.cjs.entry.js +8 -8
- package/dist/cjs/ion-text.cjs.entry.js +5 -5
- package/dist/cjs/ion-textarea.cjs.entry.js +56 -65
- package/dist/cjs/ion-toast.cjs.entry.js +26 -21
- package/dist/cjs/ion-toggle.cjs.entry.js +15 -13
- package/dist/cjs/{ionic-global-B-cA6LkY.js → ionic-global-CYJNT-2P.js} +13 -8
- package/dist/cjs/ionic.cjs.js +5 -5
- package/dist/cjs/{ios.transition-BOSWOaiK.js → ios.transition-DYGiD6gM.js} +14 -17
- package/dist/cjs/{item-multiple-inputs-D-gyg57c.js → item-multiple-inputs-Dv6qrMhm.js} +1 -1
- package/dist/cjs/{keyboard-hHzlEQpk.js → keyboard-Cix5TVkD.js} +2 -2
- package/dist/cjs/{keyboard-UuAS4D_9.js → keyboard-cHxZlTyz.js} +2 -2
- package/dist/cjs/{keyboard-controller-GXBiBRKS.js → keyboard-controller-PtZoN2GS.js} +6 -6
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-B8-wBZqt.js → md.transition-CrSkaoz6.js} +8 -8
- package/dist/cjs/overlay-control-label-D2sdL2O8.js +50 -0
- package/dist/cjs/{overlays-DdtIYQUH.js → overlays-BR21NUIG.js} +98 -58
- package/dist/cjs/select-option-render-D8ZEjYji.js +123 -0
- package/dist/cjs/slot-mutation-controller-D6IjSEIh.js +397 -0
- package/dist/cjs/{status-tap-BXX8H8_Y.js → status-tap-CNP5eD1R.js} +4 -3
- package/dist/cjs/{swipe-back-CCMaNiP2.js → swipe-back-CSIJQfu5.js} +5 -5
- package/dist/cjs/{theme-CeDs6Hcv.js → theme-Bw0rpaNN.js} +6 -1
- package/dist/collection/collection-manifest.json +7 -11
- package/dist/collection/components/accordion/accordion.js +5 -6
- package/dist/collection/components/accordion-group/accordion-group.js +2 -2
- package/dist/collection/components/action-sheet/action-sheet.ios.css +228 -2
- package/dist/collection/components/action-sheet/action-sheet.js +77 -31
- package/dist/collection/components/action-sheet/action-sheet.md.css +174 -2
- package/dist/collection/components/alert/alert.ios.css +279 -10
- package/dist/collection/components/alert/alert.js +127 -50
- package/dist/collection/components/alert/alert.md.css +268 -20
- package/dist/collection/components/breadcrumb/breadcrumb.js +1 -1
- package/dist/collection/components/breadcrumbs/breadcrumbs.js +1 -1
- package/dist/collection/components/button/button.js +5 -2
- package/dist/collection/components/card/card.js +1 -1
- package/dist/collection/components/checkbox/checkbox.js +4 -2
- package/dist/collection/components/col/col.js +7 -3
- package/dist/collection/components/content/content.js +56 -6
- package/dist/collection/components/datetime/datetime.ios.css +42 -2
- package/dist/collection/components/datetime/datetime.js +146 -77
- package/dist/collection/components/datetime/datetime.md.css +42 -1
- package/dist/collection/components/datetime/utils/data.js +13 -14
- package/dist/collection/components/datetime/utils/format.js +21 -11
- package/dist/collection/components/datetime/utils/manipulation.js +8 -8
- package/dist/collection/components/datetime/utils/parse.js +10 -10
- package/dist/collection/components/datetime/utils/state.js +8 -2
- package/dist/collection/components/datetime/utils/validate.js +4 -5
- package/dist/collection/components/datetime-button/datetime-button.ios.css +5 -0
- package/dist/collection/components/datetime-button/datetime-button.js +15 -20
- package/dist/collection/components/datetime-button/datetime-button.md.css +5 -0
- package/dist/collection/components/fab-button/fab-button.js +1 -1
- package/dist/collection/components/footer/footer.js +1 -1
- package/dist/collection/components/header/header.js +2 -2
- package/dist/collection/components/img/img.js +6 -1
- package/dist/collection/components/input/input.ios.css +57 -26
- package/dist/collection/components/input/input.js +51 -64
- package/dist/collection/components/input/input.md.css +79 -43
- package/dist/collection/components/input-otp/input-otp.js +15 -24
- package/dist/collection/components/input-password-toggle/input-password-toggle.js +5 -6
- package/dist/collection/components/item/item.js +19 -16
- package/dist/collection/components/item-divider/item-divider.js +2 -2
- package/dist/collection/components/item-group/item-group.js +1 -1
- package/dist/collection/components/item-option/item-option.js +2 -2
- package/dist/collection/components/item-options/item-options.js +1 -1
- package/dist/collection/components/item-sliding/item-sliding.js +12 -16
- package/dist/collection/components/label/label.js +2 -2
- package/dist/collection/components/list/list.js +2 -2
- package/dist/collection/components/list-header/list-header.js +2 -2
- package/dist/collection/components/loading/loading.js +17 -5
- package/dist/collection/components/menu/menu.js +6 -8
- package/dist/collection/components/menu-button/menu-button.js +2 -2
- package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
- package/dist/collection/components/modal/animations/ios.enter.js +1 -1
- package/dist/collection/components/modal/animations/md.enter.js +1 -1
- package/dist/collection/components/modal/gestures/sheet.js +42 -34
- package/dist/collection/components/modal/gestures/swipe-to-close.js +18 -35
- package/dist/collection/components/modal/gestures/utils.js +17 -0
- package/dist/collection/components/modal/modal.js +146 -65
- package/dist/collection/components/modal/safe-area-utils.js +39 -5
- package/dist/collection/components/nav/nav.js +24 -235
- package/dist/collection/components/nav-link/nav-link.js +1 -1
- package/dist/collection/components/note/note.js +2 -2
- package/dist/collection/components/picker/picker.js +1 -2
- package/dist/collection/components/picker-column/picker-column.css +3 -0
- package/dist/collection/components/picker-column/picker-column.js +212 -58
- package/dist/collection/components/picker-column-option/picker-column-option.js +3 -10
- package/dist/collection/components/picker-column-option/picker-column-option.md.css +6 -1
- package/dist/collection/components/popover/animations/ios.enter.js +1 -2
- package/dist/collection/components/popover/animations/md.enter.js +1 -2
- package/dist/collection/components/popover/popover.ios.css +15 -0
- package/dist/collection/components/popover/popover.js +32 -9
- package/dist/collection/components/popover/popover.md.css +15 -0
- package/dist/collection/components/popover/utils.js +4 -6
- package/dist/collection/components/progress-bar/progress-bar.js +1 -1
- package/dist/collection/components/radio/radio.js +5 -5
- package/dist/collection/components/radio-group/radio-group.js +2 -2
- package/dist/collection/components/range/range.js +24 -19
- package/dist/collection/components/refresher/refresher.js +19 -13
- package/dist/collection/components/refresher-content/refresher-content.js +1 -1
- package/dist/collection/components/reorder/reorder.js +1 -1
- package/dist/collection/components/reorder-group/reorder-group.js +1 -1
- package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
- package/dist/collection/components/route/route.js +1 -1
- package/dist/collection/components/router/router.js +2 -6
- package/dist/collection/components/router/utils/dom.js +25 -7
- package/dist/collection/components/router/utils/matching.js +6 -9
- package/dist/collection/components/router/utils/parser.js +1 -1
- package/dist/collection/components/router/utils/path.js +0 -1
- package/dist/collection/components/router-link/router-link.js +2 -2
- package/dist/collection/components/router-outlet/router-outlet.js +49 -10
- package/dist/collection/components/row/row.js +1 -1
- package/dist/collection/components/searchbar/searchbar.js +25 -20
- package/dist/collection/components/segment/segment.js +9 -11
- package/dist/collection/components/segment-button/segment-button.js +15 -9
- package/dist/collection/components/segment-content/segment-content.js +1 -1
- package/dist/collection/components/segment-view/segment-view.js +3 -4
- package/dist/collection/components/select/select.ios.css +96 -69
- package/dist/collection/components/select/select.js +405 -92
- package/dist/collection/components/select/select.md.css +118 -85
- package/dist/collection/components/select-modal/select-modal.ios.css +218 -0
- package/dist/collection/components/select-modal/select-modal.js +80 -27
- package/dist/collection/components/select-modal/select-modal.md.css +164 -0
- package/dist/collection/components/select-option/select-option.js +67 -3
- package/dist/collection/components/select-popover/select-popover.ios.css +218 -0
- package/dist/collection/components/select-popover/select-popover.js +78 -26
- package/dist/collection/components/select-popover/select-popover.md.css +164 -0
- package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
- package/dist/collection/components/spinner/spinner.js +2 -3
- package/dist/collection/components/split-pane/split-pane.js +2 -2
- package/dist/collection/components/tab/tab.js +2 -2
- package/dist/collection/components/tab-bar/tab-bar.js +2 -2
- package/dist/collection/components/tab-button/tab-button.js +6 -4
- package/dist/collection/components/tabs/tabs.js +2 -3
- package/dist/collection/components/text/text.js +2 -2
- package/dist/collection/components/textarea/textarea.ios.css +94 -62
- package/dist/collection/components/textarea/textarea.js +47 -57
- package/dist/collection/components/textarea/textarea.md.css +103 -77
- package/dist/collection/components/thumbnail/thumbnail.js +1 -1
- package/dist/collection/components/title/title.js +2 -2
- package/dist/collection/components/toast/toast.js +12 -9
- package/dist/collection/components/toggle/toggle.js +6 -4
- package/dist/collection/components/toolbar/toolbar.js +7 -4
- package/dist/collection/global/config.js +3 -3
- package/dist/collection/global/ionic-global.js +8 -2
- package/dist/collection/index.js +1 -1
- package/dist/collection/utils/animation/animation.js +3 -3
- package/dist/collection/utils/config.js +5 -4
- package/dist/collection/utils/content/index.js +30 -0
- package/dist/collection/utils/focus-controller/index.js +1 -1
- package/dist/collection/utils/focus-trap.js +3 -3
- package/dist/collection/utils/forms/index.js +1 -0
- package/dist/collection/utils/forms/start-container-controller.js +132 -0
- package/dist/collection/utils/framework-delegate.js +4 -6
- package/dist/collection/utils/gesture/gesture-controller.js +1 -2
- package/dist/collection/utils/gesture/index.js +10 -2
- package/dist/collection/utils/gesture/listener.js +4 -27
- package/dist/collection/utils/hardware-back-button.js +3 -3
- package/dist/collection/utils/helpers.js +14 -10
- package/dist/collection/utils/input-shims/hacks/scroll-assist.js +4 -5
- package/dist/collection/utils/input-shims/hacks/scroll-data.js +1 -2
- package/dist/collection/utils/keyboard/keyboard-controller.js +5 -5
- package/dist/collection/utils/keyboard/keyboard.js +1 -1
- package/dist/collection/utils/logging/index.js +23 -4
- package/dist/collection/utils/menu-controller/index.js +1 -2
- package/dist/collection/utils/native/haptic.js +2 -3
- package/dist/collection/utils/native/keyboard.js +2 -2
- package/dist/collection/utils/native/status-bar.js +1 -1
- package/dist/collection/utils/overlay-control-label.js +45 -0
- package/dist/collection/utils/overlays.js +87 -48
- package/dist/collection/utils/platform.js +4 -5
- package/dist/collection/utils/rtl/dir.js +17 -7
- package/dist/collection/utils/sanitization/index.js +283 -26
- package/dist/collection/utils/select-option-render.js +118 -0
- package/dist/collection/utils/slot-mutation-controller.js +1 -2
- package/dist/collection/utils/test/late-props/late-props.js +69 -0
- package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
- package/dist/collection/utils/test/playwright/detach-reattach.js +23 -0
- package/dist/collection/utils/test/playwright/drag-element.js +2 -3
- package/dist/collection/utils/test/playwright/generator.js +3 -4
- package/dist/collection/utils/test/playwright/index.js +1 -0
- package/dist/collection/utils/test/playwright/page/event-spy.js +2 -4
- package/dist/collection/utils/test/playwright/page/utils/goto.js +4 -5
- package/dist/collection/utils/test/playwright/page/utils/set-content.js +1 -1
- package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +2 -3
- package/dist/collection/utils/test/press-keys.js +6 -16
- package/dist/collection/utils/theme.js +6 -1
- package/dist/collection/utils/transition/ios.transition.js +9 -13
- package/dist/collection/utils/transition/md.transition.js +3 -4
- package/dist/docs.json +933 -1402
- package/dist/esm/{animation-DLJpuoEz.js → animation-BFNVlYum.js} +4 -4
- package/dist/esm/{app-globals-D0C5S4hU.js → app-globals-BgX0BGL1.js} +1 -1
- package/dist/esm/{button-active-BSpTQmS9.js → button-active-BfOvDr3b.js} +3 -3
- package/dist/esm/config-DWCzVL3Y.js +32 -0
- package/dist/esm/dir-Dojwmvde.js +28 -0
- package/dist/esm/{format-CAmvpAez.js → format-DDFE9jM5.js} +41 -31
- package/dist/esm/{framework-delegate-FnPGymXL.js → framework-delegate-BwNhx9NR.js} +5 -7
- package/dist/esm/{gesture-controller-BTEOs1at.js → gesture-controller-B_gJaBk0.js} +1 -2
- package/dist/esm/{haptic-DzAMWJuk.js → haptic-Cq4UAeka.js} +2 -3
- package/dist/esm/{hardware-back-button-B93Gru0Y.js → hardware-back-button-DmkiRgOT.js} +4 -4
- package/dist/esm/{helpers-HEqiOzXb.js → helpers-BSmc0nst.js} +15 -11
- package/dist/esm/{index-CfgBF1SE.js → index-BmLuEdV7.js} +13 -30
- package/dist/esm/{index-Q6UPU0Ay.js → index-BuPaALjU.js} +6 -7
- package/dist/esm/{index-DV3sJJW8.js → index-BvabGprD.js} +2 -2
- package/dist/esm/{index-MEDq2S8l.js → index-C1b9CLFg.js} +33 -3
- package/dist/esm/{index-tcQvqkiX.js → index-C23AVPx9.js} +303 -26
- package/dist/esm/{index-BRHzoo00.js → index-CJln0gS3.js} +3 -2
- package/dist/esm/index-D76bbuoi.js +425 -0
- package/dist/esm/{index-B_dQk_WE.js → index-DnA_7Bnx.js} +5 -5
- package/dist/esm/index.js +17 -15
- package/dist/esm/{input-shims-D10mwcw1.js → input-shims-Dqk-Ou25.js} +10 -11
- package/dist/esm/input.utils-rqoH22pW.js +33 -0
- package/dist/esm/ion-accordion_2.entry.js +12 -12
- package/dist/esm/ion-action-sheet.entry.js +92 -44
- package/dist/esm/ion-alert.entry.js +143 -64
- package/dist/esm/ion-app_8.entry.js +112 -40
- package/dist/esm/ion-avatar_3.entry.js +4 -4
- package/dist/esm/ion-back-button.entry.js +6 -5
- package/dist/esm/ion-backdrop.entry.js +2 -2
- package/dist/esm/ion-breadcrumb_2.entry.js +8 -7
- package/dist/esm/ion-button_2.entry.js +12 -8
- package/dist/esm/ion-card_5.entry.js +6 -5
- package/dist/esm/ion-checkbox.entry.js +10 -7
- package/dist/esm/ion-chip.entry.js +3 -3
- package/dist/esm/ion-col_3.entry.js +10 -6
- package/dist/esm/ion-datetime-button.entry.js +22 -25
- package/dist/esm/{ion-datetime_3.entry.js → ion-datetime.entry.js} +183 -745
- package/dist/esm/ion-fab_3.entry.js +7 -6
- package/dist/esm/ion-img.entry.js +7 -4
- package/dist/esm/ion-infinite-scroll_2.entry.js +7 -5
- package/dist/esm/ion-input-otp.entry.js +20 -29
- package/dist/esm/ion-input-password-toggle.entry.js +9 -10
- package/dist/esm/ion-input.entry.js +56 -68
- package/dist/esm/ion-item-option_3.entry.js +21 -24
- package/dist/esm/ion-item_8.entry.js +38 -34
- package/dist/esm/ion-loading.entry.js +28 -14
- package/dist/esm/ion-menu_3.entry.js +23 -24
- package/dist/esm/ion-modal.entry.js +271 -149
- package/dist/esm/ion-nav_2.entry.js +30 -138
- package/dist/esm/ion-picker-column-option.entry.js +8 -13
- package/dist/esm/ion-picker-column.entry.js +218 -62
- package/dist/esm/ion-picker.entry.js +4 -4
- package/dist/esm/ion-popover.entry.js +50 -30
- package/dist/esm/ion-progress-bar.entry.js +6 -5
- package/dist/esm/ion-radio_2.entry.js +12 -11
- package/dist/esm/ion-range.entry.js +30 -25
- package/dist/esm/ion-refresher_2.entry.js +32 -24
- package/dist/esm/ion-reorder_2.entry.js +10 -9
- package/dist/esm/ion-ripple-effect.entry.js +3 -3
- package/dist/esm/ion-route_4.entry.js +36 -30
- package/dist/esm/ion-searchbar.entry.js +27 -22
- package/dist/esm/ion-segment-content.entry.js +2 -2
- package/dist/esm/ion-segment-view.entry.js +5 -6
- package/dist/esm/ion-segment_2.entry.js +30 -26
- package/dist/esm/ion-select-modal.entry.js +93 -38
- package/dist/esm/ion-select_3.entry.js +495 -126
- package/dist/esm/ion-spinner.entry.js +5 -6
- package/dist/esm/ion-split-pane.entry.js +4 -4
- package/dist/esm/ion-tab-bar_2.entry.js +15 -12
- package/dist/esm/ion-tab_2.entry.js +8 -8
- package/dist/esm/ion-text.entry.js +5 -5
- package/dist/esm/ion-textarea.entry.js +55 -64
- package/dist/esm/ion-toast.entry.js +25 -20
- package/dist/esm/ion-toggle.entry.js +15 -13
- package/dist/esm/{ionic-global-Cp_eT4sZ.js → ionic-global-ZXjCXKH0.js} +13 -8
- package/dist/esm/ionic.js +6 -6
- package/dist/esm/{ios.transition-ClFrsIrS.js → ios.transition-CWAgfQ1r.js} +14 -17
- package/dist/esm/{item-multiple-inputs-DlNuqNJm.js → item-multiple-inputs-DZnIiOO_.js} +1 -1
- package/dist/esm/{keyboard-ywgs5efA.js → keyboard-Cj8mLJeq.js} +2 -2
- package/dist/esm/{keyboard-CUw4ekVy.js → keyboard-DAF8GNJ9.js} +2 -2
- package/dist/esm/{keyboard-controller-BaaVITYt.js → keyboard-controller-DEwoa1ev.js} +6 -6
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-D0msQmzI.js → md.transition-ZuqDDdDW.js} +8 -8
- package/dist/esm/overlay-control-label-BSQPZ79H.js +47 -0
- package/dist/esm/{overlays-Dg0q2_tJ.js → overlays-DKE0DgvE.js} +97 -58
- package/dist/esm/select-option-render-CRP_teb1.js +121 -0
- package/dist/esm/slot-mutation-controller-B5NpUZ-N.js +393 -0
- package/dist/esm/{status-tap-Kan2W7sh.js → status-tap-Cv9gb3ja.js} +4 -3
- package/dist/esm/{swipe-back-ZUWwA-KF.js → swipe-back-De5HlmeM.js} +5 -5
- package/dist/esm/{theme-DiVJyqlX.js → theme-byZM6qHV.js} +6 -1
- package/dist/html.html-data.json +54 -82
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-099b7f9f.entry.js +4 -0
- package/dist/ionic/p-0dcb7bb6.entry.js +4 -0
- package/dist/ionic/p-1347880c.entry.js +4 -0
- package/dist/ionic/p-191a651e.entry.js +4 -0
- package/dist/ionic/p-1f24cb24.entry.js +4 -0
- package/dist/ionic/p-271c3640.entry.js +4 -0
- package/dist/ionic/p-2ea4bb36.entry.js +4 -0
- package/dist/ionic/p-338a02e0.entry.js +4 -0
- package/dist/ionic/p-38b9375b.entry.js +4 -0
- package/dist/ionic/p-3bba83ee.entry.js +4 -0
- package/dist/ionic/p-3e01c744.entry.js +4 -0
- package/dist/ionic/p-458715a9.entry.js +4 -0
- package/dist/ionic/p-4712a8a9.entry.js +4 -0
- package/dist/ionic/p-4c3e50f8.entry.js +4 -0
- package/dist/ionic/p-54cbb0a7.entry.js +4 -0
- package/dist/ionic/{p-2bb2cb18.entry.js → p-561af487.entry.js} +1 -1
- package/dist/ionic/p-5906ea6f.entry.js +4 -0
- package/dist/ionic/p-5cc09b40.entry.js +4 -0
- package/dist/ionic/p-5d9094ac.entry.js +4 -0
- package/dist/ionic/p-612ea3b1.entry.js +4 -0
- package/dist/ionic/p-68cc89a6.entry.js +4 -0
- package/dist/ionic/{p-dfa8d673.entry.js → p-6e386853.entry.js} +1 -1
- package/dist/ionic/p-77c96e08.entry.js +4 -0
- package/dist/ionic/p-7bfeccb3.entry.js +4 -0
- package/dist/ionic/p-7e394cc3.entry.js +4 -0
- package/dist/ionic/{p-0fa9c382.entry.js → p-7fbb3319.entry.js} +1 -1
- package/dist/ionic/p-803059b6.entry.js +4 -0
- package/dist/ionic/p-837db1b9.entry.js +4 -0
- package/dist/ionic/p-85599fe3.entry.js +4 -0
- package/dist/ionic/p-8b80d9f9.entry.js +4 -0
- package/dist/ionic/p-90f50a65.entry.js +4 -0
- package/dist/ionic/p-9595e305.entry.js +4 -0
- package/dist/ionic/p-9c5f2691.entry.js +4 -0
- package/dist/ionic/p-9ee9c5b6.entry.js +4 -0
- package/dist/ionic/p-BMPN55of.js +4 -0
- package/dist/ionic/p-BMiZX1LT.js +4 -0
- package/dist/ionic/p-BSQPZ79H.js +4 -0
- package/dist/ionic/p-BY6BzzPF.js +4 -0
- package/dist/ionic/p-B_gJaBk0.js +4 -0
- package/dist/ionic/p-BaeKWZ-a.js +4 -0
- package/dist/ionic/p-Bd72UYI2.js +4 -0
- package/dist/ionic/p-BgOvhHy_.js +4 -0
- package/dist/ionic/p-BhamHSw3.js +4 -0
- package/dist/ionic/p-BijjLYjT.js +4 -0
- package/dist/ionic/{p-DV3sJJW8.js → p-BvabGprD.js} +1 -1
- package/dist/ionic/p-C23AVPx9.js +6 -0
- package/dist/ionic/p-C8XilMh0.js +4 -0
- package/dist/ionic/p-CER8qW8Y.js +4 -0
- package/dist/ionic/p-CFuOr1Tu.js +4 -0
- package/dist/ionic/p-CM5OBjTW.js +4 -0
- package/dist/ionic/p-CMZYmFb4.js +4 -0
- package/dist/ionic/p-CkxVYPtX.js +4 -0
- package/dist/ionic/p-CmXuiRT6.js +4 -0
- package/dist/ionic/p-D0YpjgON.js +4 -0
- package/dist/ionic/p-D5t_-oMk.js +4 -0
- package/dist/ionic/p-D6rHcCvc.js +4 -0
- package/dist/ionic/p-D7jHfs0Y.js +4 -0
- package/dist/ionic/p-DLM95R4x.js +4 -0
- package/dist/ionic/p-DTxBioUO.js +4 -0
- package/dist/ionic/p-DWCzVL3Y.js +4 -0
- package/dist/ionic/p-DYUjHcuH.js +4 -0
- package/{components/p-BkKAANMJ.js → dist/ionic/p-DZ6Hmc-8.js} +1 -1
- package/dist/ionic/p-D_gb-kdd.js +4 -0
- package/dist/ionic/p-DajLgJ4d.js +4 -0
- package/dist/ionic/p-Do3zTvCA.js +4 -0
- package/dist/ionic/p-Dojwmvde.js +4 -0
- package/dist/ionic/p-T71k3C35.js +4 -0
- package/dist/ionic/p-a8df96c8.entry.js +4 -0
- package/dist/ionic/p-a8ff2489.entry.js +4 -0
- package/dist/ionic/p-aff52029.entry.js +4 -0
- package/dist/ionic/p-b3532b8d.entry.js +4 -0
- package/dist/ionic/p-b9b4e85d.entry.js +4 -0
- package/dist/ionic/p-byZM6qHV.js +4 -0
- package/dist/ionic/{p-c6e49f3f.entry.js → p-ca1b8865.entry.js} +1 -1
- package/dist/ionic/p-cc4320d3.entry.js +4 -0
- package/dist/ionic/p-d526798a.entry.js +4 -0
- package/dist/ionic/p-d6755739.entry.js +4 -0
- package/dist/ionic/p-d8c138d9.entry.js +4 -0
- package/dist/ionic/p-db449915.entry.js +4 -0
- package/dist/ionic/p-dd01be0a.entry.js +4 -0
- package/dist/ionic/p-ec00fd0d.entry.js +4 -0
- package/dist/ionic/p-ee09ac9d.entry.js +4 -0
- package/dist/ionic/{p-37e720da.entry.js → p-efc0cf82.entry.js} +1 -1
- package/dist/ionic/p-f0fb23c1.entry.js +4 -0
- package/dist/ionic/p-f83b3e0c.entry.js +4 -0
- package/dist/ionic/p-fa50d493.entry.js +4 -0
- package/dist/ionic/p-zWf7R2xV.js +4 -0
- package/dist/types/components/action-sheet/action-sheet.d.ts +10 -0
- package/dist/types/components/alert/alert.d.ts +7 -0
- package/dist/types/components/content/content.d.ts +12 -0
- package/dist/types/components/datetime/datetime.d.ts +5 -1
- package/dist/types/components/img/img.d.ts +2 -0
- package/dist/types/components/input/input.d.ts +12 -6
- package/dist/types/components/modal/gestures/sheet.d.ts +1 -0
- package/dist/types/components/modal/gestures/utils.d.ts +11 -0
- package/dist/types/components/modal/modal-interface.d.ts +9 -0
- package/dist/types/components/modal/modal.d.ts +25 -7
- package/dist/types/components/modal/safe-area-utils.d.ts +6 -0
- package/dist/types/components/nav/nav-interface.d.ts +0 -1
- package/dist/types/components/nav/nav.d.ts +2 -22
- package/dist/types/components/picker-column/picker-column.d.ts +42 -0
- package/dist/types/components/range/range.d.ts +4 -1
- package/dist/types/components/refresher/refresher.d.ts +7 -0
- package/dist/types/components/route/route.d.ts +1 -1
- package/dist/types/components/router-outlet/router-outlet.d.ts +7 -0
- package/dist/types/components/searchbar/searchbar.d.ts +1 -1
- package/dist/types/components/select/select-interface.d.ts +31 -0
- package/dist/types/components/select/select.d.ts +30 -6
- package/dist/types/components/select-option/select-option.d.ts +42 -1
- package/dist/types/components/textarea/textarea.d.ts +12 -5
- package/dist/types/components.d.ts +79 -316
- package/dist/types/index.d.ts +1 -1
- package/dist/types/interface.d.ts +0 -1
- package/dist/types/stencil-public-runtime.d.ts +12 -0
- package/dist/types/utils/config.d.ts +1 -8
- package/dist/types/utils/content/index.d.ts +12 -0
- package/dist/types/utils/forms/index.d.ts +1 -0
- package/dist/types/utils/forms/start-container-controller.d.ts +34 -0
- package/dist/types/utils/helpers.d.ts +8 -5
- package/dist/types/utils/logging/index.d.ts +2 -1
- package/dist/types/utils/overlay-control-label.d.ts +32 -0
- package/dist/types/utils/overlays.d.ts +20 -9
- package/dist/types/utils/rtl/dir.d.ts +10 -4
- package/dist/types/utils/sanitization/index.d.ts +58 -2
- package/dist/types/utils/select-option-render.d.ts +53 -0
- package/dist/types/utils/test/playwright/detach-reattach.d.ts +13 -0
- package/dist/types/utils/test/playwright/index.d.ts +1 -0
- package/dist/types/utils/test/playwright/playwright-page.d.ts +1 -1
- package/dist/types/utils/test/playwright/testExpect.d.ts +1 -1
- package/hydrate/index.js +2998 -2155
- package/hydrate/index.mjs +2998 -2155
- package/loader/index.d.ts +1 -1
- package/package.json +58 -14
- package/components/ion-picker-legacy-column.d.ts +0 -11
- package/components/ion-picker-legacy-column.js +0 -4
- package/components/ion-picker-legacy.d.ts +0 -11
- package/components/ion-picker-legacy.js +0 -4
- package/components/p-A3O24YmY.js +0 -4
- package/components/p-ABkNVeU9.js +0 -4
- package/components/p-B-JJgYSG.js +0 -4
- package/components/p-BB42Mlnr.js +0 -4
- package/components/p-BLmJ0zRm.js +0 -4
- package/components/p-BSEgsdFI.js +0 -4
- package/components/p-BTEOs1at.js +0 -4
- package/components/p-BlIAuGv2.js +0 -4
- package/components/p-Bnsn6KaP.js +0 -4
- package/components/p-BsBCoGa-.js +0 -4
- package/components/p-Bz0dSlXZ.js +0 -4
- package/components/p-C53feagD.js +0 -4
- package/components/p-CHqRYvYm.js +0 -4
- package/components/p-CQGnMY3n.js +0 -4
- package/components/p-CSZf8_j0.js +0 -4
- package/components/p-C_xFdyXe.js +0 -4
- package/components/p-Cf2jSDS8.js +0 -4
- package/components/p-CkMSOsFF.js +0 -4
- package/components/p-Cl0B-RWe.js +0 -4
- package/components/p-CmR5uXej.js +0 -4
- package/components/p-CsNJ1ULL.js +0 -4
- package/components/p-CtWGkNnJ.js +0 -4
- package/components/p-CzCbeKys.js +0 -4
- package/components/p-D-aHdMxW.js +0 -4
- package/components/p-D0d8qTwj.js +0 -4
- package/components/p-D13Eaw-8.js +0 -4
- package/components/p-D3xo7hqU.js +0 -4
- package/components/p-D6Ynv7Xh.js +0 -4
- package/components/p-DCnGU1fF.js +0 -4
- package/components/p-DGZpx6KJ.js +0 -4
- package/components/p-DGvrK8dD.js +0 -4
- package/components/p-DHTSTb52.js +0 -4
- package/components/p-DOFCbuQR.js +0 -4
- package/components/p-DRugphUN.js +0 -4
- package/components/p-DV5mPYQS.js +0 -4
- package/components/p-DWkAgceV.js +0 -4
- package/components/p-DiVJyqlX.js +0 -4
- package/components/p-KEFO0w3i.js +0 -4
- package/components/p-Osve4qkc.js +0 -4
- package/components/p-SLS1rDZM.js +0 -4
- package/components/p-VWbRkLT7.js +0 -4
- package/components/p-aJ6PBUvj.js +0 -4
- package/components/p-cyNmxje6.js +0 -4
- package/components/p-k_E4tX5Z.js +0 -4
- package/components/p-oD4kcBRX.js +0 -4
- package/components/p-scxfI1Dd.js +0 -4
- package/components/p-yzCsOZE2.js +0 -4
- package/dist/cjs/config-xninhj0J.js +0 -201
- package/dist/cjs/dir-Cn0z1rJH.js +0 -20
- package/dist/cjs/input.utils-DetjmtH2.js +0 -150
- package/dist/cjs/notch-controller-18PzRGXd.js +0 -155
- package/dist/collection/components/picker-legacy/animations/ios.enter.js +0 -27
- package/dist/collection/components/picker-legacy/animations/ios.leave.js +0 -23
- package/dist/collection/components/picker-legacy/picker-interface.js +0 -1
- package/dist/collection/components/picker-legacy/picker.ios.css +0 -300
- package/dist/collection/components/picker-legacy/picker.js +0 -890
- package/dist/collection/components/picker-legacy/picker.md.css +0 -287
- package/dist/collection/components/picker-legacy-column/picker-column.ios.css +0 -231
- package/dist/collection/components/picker-legacy-column/picker-column.js +0 -422
- package/dist/collection/components/picker-legacy-column/picker-column.md.css +0 -222
- package/dist/collection/components/picker-legacy-column/test/test.utils.js +0 -43
- package/dist/esm/config-DQCONYYp.js +0 -195
- package/dist/esm/dir-C53feagD.js +0 -18
- package/dist/esm/input.utils-Y6NgW8bw.js +0 -147
- package/dist/esm/notch-controller-DKDjU_O7.js +0 -153
- package/dist/ionic/p-01f81ea5.entry.js +0 -4
- package/dist/ionic/p-06c232a4.entry.js +0 -4
- package/dist/ionic/p-0dc33652.entry.js +0 -4
- package/dist/ionic/p-10e833ef.entry.js +0 -4
- package/dist/ionic/p-20b1a044.entry.js +0 -4
- package/dist/ionic/p-21eb76d5.entry.js +0 -4
- package/dist/ionic/p-2394a9a6.entry.js +0 -4
- package/dist/ionic/p-27d30585.entry.js +0 -4
- package/dist/ionic/p-2a05aa64.entry.js +0 -4
- package/dist/ionic/p-2b204c59.entry.js +0 -4
- package/dist/ionic/p-2fa58e80.entry.js +0 -4
- package/dist/ionic/p-3353c229.entry.js +0 -4
- package/dist/ionic/p-33704f20.entry.js +0 -4
- package/dist/ionic/p-34586ead.entry.js +0 -4
- package/dist/ionic/p-390ca786.entry.js +0 -4
- package/dist/ionic/p-3ae5f277.entry.js +0 -4
- package/dist/ionic/p-4654ae1c.entry.js +0 -4
- package/dist/ionic/p-4745f534.entry.js +0 -4
- package/dist/ionic/p-4858af1f.entry.js +0 -4
- package/dist/ionic/p-4ac4f3d6.entry.js +0 -4
- package/dist/ionic/p-4baa5b82.entry.js +0 -4
- package/dist/ionic/p-4e92a11f.entry.js +0 -4
- package/dist/ionic/p-5018dfc8.entry.js +0 -4
- package/dist/ionic/p-50e1194a.entry.js +0 -4
- package/dist/ionic/p-5d1da0a2.entry.js +0 -4
- package/dist/ionic/p-5eb8e86d.entry.js +0 -4
- package/dist/ionic/p-65ebdf1b.entry.js +0 -4
- package/dist/ionic/p-75dc25ba.entry.js +0 -4
- package/dist/ionic/p-7c319341.entry.js +0 -4
- package/dist/ionic/p-829367ed.entry.js +0 -4
- package/dist/ionic/p-84d5ce05.entry.js +0 -4
- package/dist/ionic/p-874b4bd8.entry.js +0 -4
- package/dist/ionic/p-8eb8ee76.entry.js +0 -4
- package/dist/ionic/p-8fce95d5.entry.js +0 -4
- package/dist/ionic/p-9eeaBrnk.js +0 -4
- package/dist/ionic/p-9f1103ce.entry.js +0 -4
- package/dist/ionic/p-9f9db3a2.entry.js +0 -4
- package/dist/ionic/p-BGqMS-oh.js +0 -4
- package/dist/ionic/p-BTEOs1at.js +0 -4
- package/dist/ionic/p-BUFIpxKM.js +0 -4
- package/dist/ionic/p-C0eMdTCW.js +0 -4
- package/dist/ionic/p-C53feagD.js +0 -4
- package/dist/ionic/p-CFlfIb2g.js +0 -4
- package/dist/ionic/p-CKvCXMs9.js +0 -4
- package/dist/ionic/p-Cl0B-RWe.js +0 -4
- package/dist/ionic/p-CtWGkNnJ.js +0 -4
- package/dist/ionic/p-CwdymDLH.js +0 -4
- package/dist/ionic/p-Cx3IXROA.js +0 -4
- package/dist/ionic/p-D-3ycHmd.js +0 -4
- package/dist/ionic/p-D13Eaw-8.js +0 -4
- package/dist/ionic/p-DC3RagnA.js +0 -4
- package/dist/ionic/p-DIuEbVLu.js +0 -4
- package/dist/ionic/p-DSG2s2Eb.js +0 -4
- package/dist/ionic/p-Dfbt-q2k.js +0 -4
- package/dist/ionic/p-DiVJyqlX.js +0 -4
- package/dist/ionic/p-DoJvtrbw.js +0 -4
- package/dist/ionic/p-DqN5EA2O.js +0 -4
- package/dist/ionic/p-DzWaWHGc.js +0 -4
- package/dist/ionic/p-Nqf6uvGh.js +0 -4
- package/dist/ionic/p-SNAkTDfm.js +0 -4
- package/dist/ionic/p-VAemlbDS.js +0 -4
- package/dist/ionic/p-Wk5HzclC.js +0 -4
- package/dist/ionic/p-a3bdcae6.entry.js +0 -4
- package/dist/ionic/p-aaeedb6b.entry.js +0 -4
- package/dist/ionic/p-bfc9bb0f.entry.js +0 -4
- package/dist/ionic/p-c0fb8edd.entry.js +0 -4
- package/dist/ionic/p-c38b648e.entry.js +0 -4
- package/dist/ionic/p-c4d8641b.entry.js +0 -4
- package/dist/ionic/p-ca2ab74d.entry.js +0 -4
- package/dist/ionic/p-d889ff6d.entry.js +0 -4
- package/dist/ionic/p-e0be05c5.entry.js +0 -4
- package/dist/ionic/p-ef4c3bee.entry.js +0 -4
- package/dist/ionic/p-fd7eebc4.entry.js +0 -4
- package/dist/ionic/p-mjKAFv89.js +0 -4
- package/dist/ionic/p-tcQvqkiX.js +0 -5
- package/dist/ionic/p-viFHDgRs.js +0 -4
- package/dist/ionic/p-xWb6fgfq.js +0 -4
- package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +0 -5
- package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +0 -5
- package/dist/types/components/picker-legacy/picker-interface.d.ts +0 -52
- package/dist/types/components/picker-legacy/picker.d.ts +0 -158
- package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
- package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +0 -9
- /package/components/{p-CO7fmmxt.js → p-LpMHEu3v.js} +0 -0
|
@@ -3,24 +3,25 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
var index$3 = require('./index-
|
|
7
|
-
var index$
|
|
8
|
-
var frameworkDelegate = require('./framework-delegate-
|
|
9
|
-
var helpers = require('./helpers-
|
|
6
|
+
var index$3 = require('./index-DXoo08JC.js');
|
|
7
|
+
var index$1 = require('./index-DtvKGwdh.js');
|
|
8
|
+
var frameworkDelegate = require('./framework-delegate-d-fWfeI6.js');
|
|
9
|
+
var helpers = require('./helpers-7wzdhdeg.js');
|
|
10
10
|
var lockController = require('./lock-controller-aDB9wrEf.js');
|
|
11
11
|
var capacitor = require('./capacitor-DmA66EwP.js');
|
|
12
|
-
var overlays = require('./overlays-
|
|
13
|
-
var theme = require('./theme-
|
|
14
|
-
var index$4 = require('./index-
|
|
15
|
-
var ionicGlobal = require('./ionic-global-
|
|
16
|
-
var keyboard = require('./keyboard-
|
|
17
|
-
var animation = require('./animation-
|
|
12
|
+
var overlays = require('./overlays-BR21NUIG.js');
|
|
13
|
+
var theme = require('./theme-Bw0rpaNN.js');
|
|
14
|
+
var index$4 = require('./index-CQfEIyLK.js');
|
|
15
|
+
var ionicGlobal = require('./ionic-global-CYJNT-2P.js');
|
|
16
|
+
var keyboard = require('./keyboard-Cix5TVkD.js');
|
|
17
|
+
var animation = require('./animation-Kd1N7WTN.js');
|
|
18
18
|
var cubicBezier = require('./cubic-bezier-DAjy1V-e.js');
|
|
19
|
-
var index$
|
|
19
|
+
var index$2 = require('./index-DRPqwSvU.js');
|
|
20
20
|
var index = require('./index-DkNv4J_i.js');
|
|
21
|
-
require('./
|
|
22
|
-
require('./
|
|
23
|
-
require('./
|
|
21
|
+
require('./dir-zwDPRE5K.js');
|
|
22
|
+
require('./hardware-back-button-Bu4Dzw8l.js');
|
|
23
|
+
require('./gesture-controller-CeJslptU.js');
|
|
24
|
+
require('./keyboard-cHxZlTyz.js');
|
|
24
25
|
|
|
25
26
|
var Style;
|
|
26
27
|
(function (Style) {
|
|
@@ -31,7 +32,7 @@ var Style;
|
|
|
31
32
|
const StatusBar = {
|
|
32
33
|
getEngine() {
|
|
33
34
|
const capacitor$1 = capacitor.getCapacitor();
|
|
34
|
-
if (capacitor$1
|
|
35
|
+
if (capacitor$1?.isPluginAvailable('StatusBar')) {
|
|
35
36
|
return capacitor$1.Plugins.StatusBar;
|
|
36
37
|
}
|
|
37
38
|
return undefined;
|
|
@@ -129,6 +130,21 @@ const setCardStatusBarDefault = (defaultStyle = Style.Default) => {
|
|
|
129
130
|
StatusBar.setStyle({ style: defaultStyle });
|
|
130
131
|
};
|
|
131
132
|
|
|
133
|
+
/**
|
|
134
|
+
* Swiping is only possible when the content is scrolled to the top, so that we
|
|
135
|
+
* do not interfere with scrolling, and never on content with a refresher.
|
|
136
|
+
*
|
|
137
|
+
* Note: We cannot solve the refresher case with gesture priority as the iOS
|
|
138
|
+
* native refresh gesture uses a scroll listener in addition to a gesture.
|
|
139
|
+
*
|
|
140
|
+
* Note: Do not use `getScrollElement` here because we need this to be a
|
|
141
|
+
* synchronous operation, and `getScrollElement` is asynchronous.
|
|
142
|
+
*/
|
|
143
|
+
const canSwipeOnContent = (contentEl) => {
|
|
144
|
+
const scrollEl = index$1.isIonContent(contentEl) ? helpers.getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
|
|
145
|
+
const hasRefresherInContent = !!index$1.findRefresherInContent(contentEl);
|
|
146
|
+
return !hasRefresherInContent && scrollEl.scrollTop === 0;
|
|
147
|
+
};
|
|
132
148
|
const handleCanDismiss = async (el, animation) => {
|
|
133
149
|
/**
|
|
134
150
|
* If canDismiss is not a function
|
|
@@ -259,12 +275,11 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
|
|
|
259
275
|
let isOpen = false;
|
|
260
276
|
let canDismissBlocksGesture = false;
|
|
261
277
|
let contentEl = null;
|
|
262
|
-
let scrollEl = null;
|
|
263
278
|
const canDismissMaxStep = 0.2;
|
|
264
279
|
let initialScrollY = true;
|
|
265
280
|
let lastStep = 0;
|
|
266
281
|
const getScrollY = () => {
|
|
267
|
-
if (contentEl && index$
|
|
282
|
+
if (contentEl && index$1.isIonContent(contentEl)) {
|
|
268
283
|
return contentEl.scrollY;
|
|
269
284
|
/**
|
|
270
285
|
* Custom scroll containers are intended to be
|
|
@@ -282,12 +297,6 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
|
|
|
282
297
|
return true;
|
|
283
298
|
}
|
|
284
299
|
/**
|
|
285
|
-
* If we are swiping on the content,
|
|
286
|
-
* swiping should only be possible if
|
|
287
|
-
* the content is scrolled all the way
|
|
288
|
-
* to the top so that we do not interfere
|
|
289
|
-
* with scrolling.
|
|
290
|
-
*
|
|
291
300
|
* We cannot assume that the `ion-content`
|
|
292
301
|
* target will remain consistent between
|
|
293
302
|
* swipes. For example, when using
|
|
@@ -296,31 +305,9 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
|
|
|
296
305
|
* swipe again. The target content will not
|
|
297
306
|
* be the same between swipes.
|
|
298
307
|
*/
|
|
299
|
-
contentEl = index$
|
|
308
|
+
contentEl = index$1.findClosestIonContent(target);
|
|
300
309
|
if (contentEl) {
|
|
301
|
-
|
|
302
|
-
* The card should never swipe to close
|
|
303
|
-
* on the content with a refresher.
|
|
304
|
-
* Note: We cannot solve this by making the
|
|
305
|
-
* swipeToClose gesture have a higher priority
|
|
306
|
-
* than the refresher gesture as the iOS native
|
|
307
|
-
* refresh gesture uses a scroll listener in
|
|
308
|
-
* addition to a gesture.
|
|
309
|
-
*
|
|
310
|
-
* Note: Do not use getScrollElement here
|
|
311
|
-
* because we need this to be a synchronous
|
|
312
|
-
* operation, and getScrollElement is
|
|
313
|
-
* asynchronous.
|
|
314
|
-
*/
|
|
315
|
-
if (index$2.isIonContent(contentEl)) {
|
|
316
|
-
const root = helpers.getElementRoot(contentEl);
|
|
317
|
-
scrollEl = root.querySelector('.inner-scroll');
|
|
318
|
-
}
|
|
319
|
-
else {
|
|
320
|
-
scrollEl = contentEl;
|
|
321
|
-
}
|
|
322
|
-
const hasRefresherInContent = !!contentEl.querySelector('ion-refresher');
|
|
323
|
-
return !hasRefresherInContent && scrollEl.scrollTop === 0;
|
|
310
|
+
return canSwipeOnContent(contentEl);
|
|
324
311
|
}
|
|
325
312
|
/**
|
|
326
313
|
* Card should be swipeable on all
|
|
@@ -333,14 +320,13 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
|
|
|
333
320
|
return false;
|
|
334
321
|
};
|
|
335
322
|
const onStart = (detail) => {
|
|
336
|
-
var _a;
|
|
337
323
|
const { deltaY } = detail;
|
|
338
324
|
/**
|
|
339
325
|
* Firefox automatically selects the header text during drag
|
|
340
326
|
* due to the focusable wrapper (tabindex="-1"). Remove any
|
|
341
327
|
* selection that may have occurred.
|
|
342
328
|
*/
|
|
343
|
-
|
|
329
|
+
window.getSelection()?.removeAllRanges();
|
|
344
330
|
/**
|
|
345
331
|
* Get the initial scrollY value so
|
|
346
332
|
* that we can correctly reset the scrollY
|
|
@@ -363,7 +349,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
|
|
|
363
349
|
* happen at the same time as the gesture.
|
|
364
350
|
*/
|
|
365
351
|
if (deltaY > 0 && contentEl) {
|
|
366
|
-
index$
|
|
352
|
+
index$1.disableContentScrollY(contentEl);
|
|
367
353
|
}
|
|
368
354
|
animation.progressStart(true, isOpen ? 1 : 0);
|
|
369
355
|
onDragStart();
|
|
@@ -377,7 +363,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
|
|
|
377
363
|
* happen at the same time as the gesture.
|
|
378
364
|
*/
|
|
379
365
|
if (deltaY > 0 && contentEl) {
|
|
380
|
-
index$
|
|
366
|
+
index$1.disableContentScrollY(contentEl);
|
|
381
367
|
}
|
|
382
368
|
/**
|
|
383
369
|
* If we are swiping on the content
|
|
@@ -472,7 +458,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
|
|
|
472
458
|
isOpen = shouldComplete;
|
|
473
459
|
gesture.enable(false);
|
|
474
460
|
if (contentEl) {
|
|
475
|
-
index$
|
|
461
|
+
index$1.resetContentScrollY(contentEl, initialScrollY);
|
|
476
462
|
}
|
|
477
463
|
animation
|
|
478
464
|
.onFinish(() => {
|
|
@@ -493,22 +479,35 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
|
|
|
493
479
|
* check canDismiss. 25% was chosen
|
|
494
480
|
* to avoid accidental swipes.
|
|
495
481
|
*/
|
|
496
|
-
|
|
482
|
+
const isAttemptingCanDismiss = isAttemptingDismissWithCanDismiss && clampedStep > maxStep / 4;
|
|
483
|
+
if (isAttemptingCanDismiss) {
|
|
497
484
|
handleCanDismiss(el, animation);
|
|
498
485
|
}
|
|
499
486
|
else if (shouldComplete) {
|
|
500
487
|
onDismiss();
|
|
501
488
|
}
|
|
489
|
+
/**
|
|
490
|
+
* `shouldComplete` is not enough on its own, since it is always `false`
|
|
491
|
+
* when canDismiss blocks the gesture. `canDismiss: false` blocks it and
|
|
492
|
+
* never dismisses, because `handleCanDismiss` returns early when
|
|
493
|
+
* canDismiss is not a function. A canDismiss function dismisses through
|
|
494
|
+
* `handleCanDismiss`, which awaits the callback, so the outcome is not
|
|
495
|
+
* known when this event is emitted.
|
|
496
|
+
*/
|
|
497
|
+
const isDismissing = isAttemptingDismissWithCanDismiss
|
|
498
|
+
? isAttemptingCanDismiss && typeof el.canDismiss === 'function'
|
|
499
|
+
: shouldComplete;
|
|
502
500
|
const eventDetail = {
|
|
503
501
|
currentY: detail.currentY,
|
|
504
502
|
deltaY: detail.deltaY,
|
|
505
503
|
velocityY: detail.velocityY,
|
|
506
504
|
progress: calculateProgress(el, detail.deltaY),
|
|
505
|
+
isDismissing,
|
|
507
506
|
snapBreakpoint: shouldComplete ? 0 : 1,
|
|
508
507
|
};
|
|
509
508
|
onDragEnd(eventDetail);
|
|
510
509
|
};
|
|
511
|
-
const gesture = index$
|
|
510
|
+
const gesture = index$2.createGesture({
|
|
512
511
|
el,
|
|
513
512
|
gestureName: 'modalSwipeToClose',
|
|
514
513
|
gesturePriority: overlays.OVERLAY_GESTURE_PRIORITY,
|
|
@@ -641,7 +640,7 @@ const iosEnterAnimation = (baseEl, opts) => {
|
|
|
641
640
|
wrapperAnimation.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')).beforeStyles({ opacity: 1 });
|
|
642
641
|
// The content animation is only added if scrolling is enabled for
|
|
643
642
|
// all the breakpoints.
|
|
644
|
-
!expandToScroll &&
|
|
643
|
+
!expandToScroll && contentAnimation?.addElement(baseEl.querySelector('.ion-page'));
|
|
645
644
|
const baseAnimation = animation.createAnimation('entering-base')
|
|
646
645
|
.addElement(baseEl)
|
|
647
646
|
.easing('cubic-bezier(0.32,0.72,0,1)')
|
|
@@ -974,7 +973,7 @@ const mdEnterAnimation = (baseEl, opts) => {
|
|
|
974
973
|
wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
|
|
975
974
|
// The content animation is only added if scrolling is enabled for
|
|
976
975
|
// all the breakpoints.
|
|
977
|
-
!expandToScroll &&
|
|
976
|
+
!expandToScroll && contentAnimation?.addElement(baseEl.querySelector('.ion-page'));
|
|
978
977
|
const baseAnimation = animation.createAnimation()
|
|
979
978
|
.addElement(baseEl)
|
|
980
979
|
.easing('cubic-bezier(0.36,0.66,0.04,1)')
|
|
@@ -1033,6 +1032,8 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1033
1032
|
],
|
|
1034
1033
|
};
|
|
1035
1034
|
const contentEl = baseEl.querySelector('ion-content');
|
|
1035
|
+
// Cache the initial value so the gesture restores it instead of forcing scrolling on.
|
|
1036
|
+
const initialContentScrollY = contentEl?.scrollY ?? true;
|
|
1036
1037
|
const height = wrapperEl.clientHeight;
|
|
1037
1038
|
let currentBreakpoint = initialBreakpoint;
|
|
1038
1039
|
let offset = 0;
|
|
@@ -1098,9 +1099,9 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1098
1099
|
cachedFooterEl.style.removeProperty('height');
|
|
1099
1100
|
cachedFooterEl.style.removeProperty('top');
|
|
1100
1101
|
cachedFooterEl.style.removeProperty('left');
|
|
1101
|
-
page
|
|
1102
|
+
page?.style.removeProperty('padding-bottom');
|
|
1102
1103
|
// Move to page
|
|
1103
|
-
page
|
|
1104
|
+
page?.appendChild(cachedFooterEl);
|
|
1104
1105
|
});
|
|
1105
1106
|
}
|
|
1106
1107
|
else {
|
|
@@ -1144,7 +1145,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1144
1145
|
// when the footer is positioned absolutely. This has to be done before we
|
|
1145
1146
|
// make the footer absolutely positioned or we may accidentally cause the
|
|
1146
1147
|
// sheet to scroll.
|
|
1147
|
-
page
|
|
1148
|
+
page?.style.setProperty('padding-bottom', `${footerHeights}px`);
|
|
1148
1149
|
// Apply positioning styles to keep footer at bottom
|
|
1149
1150
|
cachedFooterEl.classList.add('modal-footer-moving');
|
|
1150
1151
|
// Apply our preserved styles to pin the footer
|
|
@@ -1169,7 +1170,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1169
1170
|
if (wrapperAnimation && backdropAnimation) {
|
|
1170
1171
|
wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
|
|
1171
1172
|
backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
|
|
1172
|
-
contentAnimation
|
|
1173
|
+
contentAnimation?.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
|
|
1173
1174
|
animation.progressStart(true, 1 - currentBreakpoint);
|
|
1174
1175
|
/**
|
|
1175
1176
|
* If backdrop is not enabled, then content
|
|
@@ -1193,47 +1194,28 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1193
1194
|
}
|
|
1194
1195
|
const canStart = (detail) => {
|
|
1195
1196
|
/**
|
|
1196
|
-
* If we are swiping on the content, swiping should only be possible if the content
|
|
1197
|
-
* is scrolled all the way to the top so that we do not interfere with scrolling.
|
|
1198
|
-
*
|
|
1199
1197
|
* We cannot assume that the `ion-content` target will remain consistent between swipes.
|
|
1200
1198
|
* For example, when using ion-nav within a modal it is possible to swipe, push a view,
|
|
1201
1199
|
* and then swipe again. The target content will not be the same between swipes.
|
|
1202
1200
|
*/
|
|
1203
|
-
const contentEl = index$
|
|
1201
|
+
const contentEl = index$1.findClosestIonContent(detail.event.target);
|
|
1204
1202
|
currentBreakpoint = getCurrentBreakpoint();
|
|
1205
1203
|
/**
|
|
1206
|
-
*
|
|
1207
|
-
*
|
|
1204
|
+
* Upwards swipes on the content cannot move the sheet anyway, so this only
|
|
1205
|
+
* blocks swiping the sheet down from the content.
|
|
1208
1206
|
*/
|
|
1209
|
-
if (!expandToScroll
|
|
1210
|
-
|
|
1211
|
-
return scrollEl.scrollTop === 0;
|
|
1212
|
-
}
|
|
1213
|
-
if (currentBreakpoint === 1 && contentEl) {
|
|
1214
|
-
/**
|
|
1215
|
-
* The modal should never swipe to close on the content with a refresher.
|
|
1216
|
-
* Note 1: We cannot solve this by making this gesture have a higher priority than
|
|
1217
|
-
* the refresher gesture as the iOS native refresh gesture uses a scroll listener in
|
|
1218
|
-
* addition to a gesture.
|
|
1219
|
-
*
|
|
1220
|
-
* Note 2: Do not use getScrollElement here because we need this to be a synchronous
|
|
1221
|
-
* operation, and getScrollElement is asynchronous.
|
|
1222
|
-
*/
|
|
1223
|
-
const scrollEl = index$2.isIonContent(contentEl) ? helpers.getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
|
|
1224
|
-
const hasRefresherInContent = !!contentEl.querySelector('ion-refresher');
|
|
1225
|
-
return !hasRefresherInContent && scrollEl.scrollTop === 0;
|
|
1207
|
+
if (contentEl && (!expandToScroll || currentBreakpoint === 1)) {
|
|
1208
|
+
return canSwipeOnContent(contentEl);
|
|
1226
1209
|
}
|
|
1227
1210
|
return true;
|
|
1228
1211
|
};
|
|
1229
1212
|
const onStart = (detail) => {
|
|
1230
|
-
var _a;
|
|
1231
1213
|
/**
|
|
1232
1214
|
* Firefox automatically selects the header text during drag
|
|
1233
1215
|
* due to the focusable wrapper (tabindex="-1"). Remove any
|
|
1234
1216
|
* selection that may have occurred.
|
|
1235
1217
|
*/
|
|
1236
|
-
|
|
1218
|
+
window.getSelection()?.removeAllRanges();
|
|
1237
1219
|
/**
|
|
1238
1220
|
* If canDismiss is anything other than `true`
|
|
1239
1221
|
* then users should be able to swipe down
|
|
@@ -1253,9 +1235,9 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1253
1235
|
* which would impact performance significantly.
|
|
1254
1236
|
*/
|
|
1255
1237
|
if (!expandToScroll) {
|
|
1256
|
-
const targetEl = index$
|
|
1238
|
+
const targetEl = index$1.findClosestIonContent(detail.event.target);
|
|
1257
1239
|
cachedScrollEl =
|
|
1258
|
-
targetEl && index$
|
|
1240
|
+
targetEl && index$1.isIonContent(targetEl) ? helpers.getElementRoot(targetEl).querySelector('.inner-scroll') : targetEl;
|
|
1259
1241
|
}
|
|
1260
1242
|
/**
|
|
1261
1243
|
* If expandToScroll is disabled, we need to swap
|
|
@@ -1361,12 +1343,22 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1361
1343
|
};
|
|
1362
1344
|
const onEnd = (detail) => {
|
|
1363
1345
|
const snapBreakpoint = calculateSnapBreakpoint(detail.deltaY);
|
|
1346
|
+
/**
|
|
1347
|
+
* `snapBreakpoint === 0` is not enough on its own. `canDismiss: false`
|
|
1348
|
+
* snaps to 0 but never dismisses, since `handleCanDismiss` returns early
|
|
1349
|
+
* when canDismiss is not a function. A canDismiss function dismisses
|
|
1350
|
+
* through `handleCanDismiss`, which awaits the callback, so the outcome
|
|
1351
|
+
* is not known when this event is emitted.
|
|
1352
|
+
*/
|
|
1353
|
+
const shouldPreventDismiss = canDismissBlocksGesture && snapBreakpoint === 0;
|
|
1354
|
+
const isDismissing = shouldPreventDismiss ? typeof baseEl.canDismiss === 'function' : snapBreakpoint === 0;
|
|
1364
1355
|
const eventDetail = {
|
|
1365
1356
|
currentY: detail.currentY,
|
|
1366
1357
|
deltaY: detail.deltaY,
|
|
1367
1358
|
velocityY: detail.velocityY,
|
|
1368
1359
|
progress: calculateProgress(detail.currentY),
|
|
1369
1360
|
snapBreakpoint,
|
|
1361
|
+
isDismissing,
|
|
1370
1362
|
};
|
|
1371
1363
|
/**
|
|
1372
1364
|
* If expandToScroll is disabled, we should not allow the moveSheetToBreakpoint
|
|
@@ -1382,7 +1374,11 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1382
1374
|
* swap to moving on drag and if we don't swap back here then the footer will get stuck.
|
|
1383
1375
|
*/
|
|
1384
1376
|
swapFooterPosition('stationary');
|
|
1385
|
-
|
|
1377
|
+
/**
|
|
1378
|
+
* The sheet does not move in this case, so the gesture
|
|
1379
|
+
* never dismisses the modal.
|
|
1380
|
+
*/
|
|
1381
|
+
onDragEnd({ ...eventDetail, isDismissing: false });
|
|
1386
1382
|
return;
|
|
1387
1383
|
}
|
|
1388
1384
|
moveSheetToBreakpoint({
|
|
@@ -1455,14 +1451,14 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1455
1451
|
onDismiss();
|
|
1456
1452
|
}
|
|
1457
1453
|
/**
|
|
1458
|
-
*
|
|
1459
|
-
* or if it allows scrolling at any breakpoint. Without this, there would
|
|
1454
|
+
* Restores the content's scroll setting immediately if the sheet is about to
|
|
1455
|
+
* fully expand or if it allows scrolling at any breakpoint. Without this, there would
|
|
1460
1456
|
* be a ~500ms delay while the modal animation completes, causing a
|
|
1461
1457
|
* noticeable lag. Native iOS allows scrolling as soon as the gesture is
|
|
1462
1458
|
* released, so we align with that behavior.
|
|
1463
1459
|
*/
|
|
1464
1460
|
if (contentEl && (snapToBreakpoint === breakpoints[breakpoints.length - 1] || !expandToScroll)) {
|
|
1465
|
-
contentEl.scrollY =
|
|
1461
|
+
contentEl.scrollY = initialContentScrollY;
|
|
1466
1462
|
}
|
|
1467
1463
|
/**
|
|
1468
1464
|
* If expandToScroll is disabled and we're animating
|
|
@@ -1497,7 +1493,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1497
1493
|
helpers.raf(() => {
|
|
1498
1494
|
wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
|
|
1499
1495
|
backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
|
|
1500
|
-
contentAnimation
|
|
1496
|
+
contentAnimation?.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
|
|
1501
1497
|
animation.progressStart(true, 1 - snapToBreakpoint);
|
|
1502
1498
|
currentBreakpoint = snapToBreakpoint;
|
|
1503
1499
|
onBreakpointChange(currentBreakpoint);
|
|
@@ -1633,7 +1629,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1633
1629
|
*/
|
|
1634
1630
|
return viewportBottom - activeHeight;
|
|
1635
1631
|
};
|
|
1636
|
-
const gesture = index$
|
|
1632
|
+
const gesture = index$2.createGesture({
|
|
1637
1633
|
el: wrapperEl,
|
|
1638
1634
|
gestureName: 'modalSheet',
|
|
1639
1635
|
gesturePriority: 40,
|
|
@@ -1644,9 +1640,20 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1644
1640
|
onMove,
|
|
1645
1641
|
onEnd,
|
|
1646
1642
|
});
|
|
1643
|
+
/**
|
|
1644
|
+
* Puts the content back the way the app declared it. A sheet can dismiss
|
|
1645
|
+
* without going through moveSheetToBreakpoint, and an inline modal reuses
|
|
1646
|
+
* the same element on the next present.
|
|
1647
|
+
*/
|
|
1648
|
+
const resetContentScroll = () => {
|
|
1649
|
+
if (contentEl) {
|
|
1650
|
+
contentEl.scrollY = initialContentScrollY;
|
|
1651
|
+
}
|
|
1652
|
+
};
|
|
1647
1653
|
return {
|
|
1648
1654
|
gesture,
|
|
1649
1655
|
moveSheetToBreakpoint,
|
|
1656
|
+
resetContentScroll,
|
|
1650
1657
|
};
|
|
1651
1658
|
};
|
|
1652
1659
|
|
|
@@ -1696,8 +1703,8 @@ const getRootSafeAreaTop = () => {
|
|
|
1696
1703
|
if (cachedRootSafeAreaTop !== null) {
|
|
1697
1704
|
return cachedRootSafeAreaTop;
|
|
1698
1705
|
}
|
|
1699
|
-
const doc = index.win
|
|
1700
|
-
if (!
|
|
1706
|
+
const doc = index.win?.document;
|
|
1707
|
+
if (!doc?.body) {
|
|
1701
1708
|
return 0;
|
|
1702
1709
|
}
|
|
1703
1710
|
const el = doc.createElement('div');
|
|
@@ -1716,6 +1723,41 @@ const getRootSafeAreaTop = () => {
|
|
|
1716
1723
|
}
|
|
1717
1724
|
return value;
|
|
1718
1725
|
};
|
|
1726
|
+
/**
|
|
1727
|
+
* Calls back when the resolved root `--ion-safe-area-top` changes, which no
|
|
1728
|
+
* event and no window resize covers. The probe's height tracks the variable, so
|
|
1729
|
+
* a change to it becomes a size change the observer can see.
|
|
1730
|
+
*/
|
|
1731
|
+
const onRootSafeAreaTopChange = (callback) => {
|
|
1732
|
+
const doc = index.win?.document;
|
|
1733
|
+
if (!doc?.body || typeof ResizeObserver === 'undefined') {
|
|
1734
|
+
return () => undefined;
|
|
1735
|
+
}
|
|
1736
|
+
const probe = doc.createElement('div');
|
|
1737
|
+
probe.style.cssText =
|
|
1738
|
+
'position:fixed;visibility:hidden;pointer-events:none;top:0;left:0;width:0;' +
|
|
1739
|
+
'height:var(--ion-safe-area-top,0px);';
|
|
1740
|
+
doc.body.appendChild(probe);
|
|
1741
|
+
/**
|
|
1742
|
+
* Seeded with the value the caller has already applied, so a change that
|
|
1743
|
+
* lands before the observer's first delivery still gets reported. Comparing
|
|
1744
|
+
* against an unset value instead would consume that first delivery and treat
|
|
1745
|
+
* the new inset as the baseline.
|
|
1746
|
+
*/
|
|
1747
|
+
let lastHeight = getRootSafeAreaTop();
|
|
1748
|
+
const observer = new ResizeObserver((entries) => {
|
|
1749
|
+
const { height } = entries[0].contentRect;
|
|
1750
|
+
if (height !== lastHeight) {
|
|
1751
|
+
lastHeight = height;
|
|
1752
|
+
callback(height);
|
|
1753
|
+
}
|
|
1754
|
+
});
|
|
1755
|
+
observer.observe(probe);
|
|
1756
|
+
return () => {
|
|
1757
|
+
observer.disconnect();
|
|
1758
|
+
probe.remove();
|
|
1759
|
+
};
|
|
1760
|
+
};
|
|
1719
1761
|
/**
|
|
1720
1762
|
* True when the modal host declares BOTH a non-fullscreen `--width` AND a
|
|
1721
1763
|
* non-fullscreen `--height` (i.e. a centered-dialog-like modal that doesn't
|
|
@@ -1800,10 +1842,9 @@ const getInitialSafeAreaConfig = (context) => {
|
|
|
1800
1842
|
* @returns SafeAreaConfig based on position
|
|
1801
1843
|
*/
|
|
1802
1844
|
const getPositionBasedSafeAreaConfig = (wrapperEl) => {
|
|
1803
|
-
var _a, _b;
|
|
1804
1845
|
const rect = wrapperEl.getBoundingClientRect();
|
|
1805
|
-
const vh =
|
|
1806
|
-
const vw =
|
|
1846
|
+
const vh = index.win?.innerHeight ?? 0;
|
|
1847
|
+
const vw = index.win?.innerWidth ?? 0;
|
|
1807
1848
|
// Only apply safe-area to sides where modal overlaps with screen edge
|
|
1808
1849
|
return {
|
|
1809
1850
|
top: rect.top <= EDGE_THRESHOLD ? 'inherit' : '0px',
|
|
@@ -1864,6 +1905,9 @@ const Modal = class {
|
|
|
1864
1905
|
this.inline = false;
|
|
1865
1906
|
// Whether or not modal is being dismissed via gesture
|
|
1866
1907
|
this.gestureAnimationDismissing = false;
|
|
1908
|
+
// True from the first safe-area write in `present()` until the enter
|
|
1909
|
+
// animation settles. A position-based read in that window is not the rest position.
|
|
1910
|
+
this.isPresenting = false;
|
|
1867
1911
|
this.presented = false;
|
|
1868
1912
|
/** @internal */
|
|
1869
1913
|
this.hasController = false;
|
|
@@ -1898,13 +1942,20 @@ const Modal = class {
|
|
|
1898
1942
|
/**
|
|
1899
1943
|
* The interaction behavior for the sheet modal when the handle is pressed.
|
|
1900
1944
|
*
|
|
1901
|
-
*
|
|
1902
|
-
*
|
|
1945
|
+
* Handle behavior is unavailable when the `handle` property is set to
|
|
1946
|
+
* `false` or when the `breakpoints` property is not set (using a
|
|
1947
|
+
* fullscreen or card modal).
|
|
1948
|
+
*
|
|
1949
|
+
* Set to `"cycle"` to make the handle focusable and let the sheet modal
|
|
1950
|
+
* cycle between available breakpoints when pressed. This keeps the sheet
|
|
1951
|
+
* operable with assistive technology.
|
|
1952
|
+
*
|
|
1953
|
+
* Set to `"none"` to make the handle purely decorative when pressed and
|
|
1954
|
+
* removed from the tab order.
|
|
1903
1955
|
*
|
|
1904
|
-
*
|
|
1905
|
-
* when the `breakpoints` property is not set (using a fullscreen or card modal).
|
|
1956
|
+
* Defaults to `"cycle"`.
|
|
1906
1957
|
*/
|
|
1907
|
-
this.handleBehavior = '
|
|
1958
|
+
this.handleBehavior = 'cycle';
|
|
1908
1959
|
/**
|
|
1909
1960
|
* If `true`, the modal will be dismissed when the backdrop is clicked.
|
|
1910
1961
|
*/
|
|
@@ -2012,7 +2063,6 @@ const Modal = class {
|
|
|
2012
2063
|
* if it exists and is focusable, otherwise let the focus trap handle it.
|
|
2013
2064
|
*/
|
|
2014
2065
|
this.onModalFocus = (ev) => {
|
|
2015
|
-
var _a;
|
|
2016
2066
|
const { dragHandleEl, el } = this;
|
|
2017
2067
|
/**
|
|
2018
2068
|
* Shadow DOM focus is retargeted to the host, so `ev.target === el` is also
|
|
@@ -2020,7 +2070,7 @@ const Modal = class {
|
|
|
2020
2070
|
* shadowRoot's activeElement is null only when the host was focused directly,
|
|
2021
2071
|
* so redirect to the handle only then and leave present()'s wrapper focus intact.
|
|
2022
2072
|
*/
|
|
2023
|
-
if (ev.target === el &&
|
|
2073
|
+
if (ev.target === el && el.shadowRoot?.activeElement == null && dragHandleEl && dragHandleEl.tabIndex !== -1) {
|
|
2024
2074
|
dragHandleEl.focus();
|
|
2025
2075
|
}
|
|
2026
2076
|
};
|
|
@@ -2094,6 +2144,17 @@ const Modal = class {
|
|
|
2094
2144
|
const { el } = this;
|
|
2095
2145
|
overlays.prepareOverlay(el);
|
|
2096
2146
|
this.triggerChanged();
|
|
2147
|
+
// A disconnect tears down state this presentation still needs and cannot
|
|
2148
|
+
// tell a re-insert from a removal, so put it back.
|
|
2149
|
+
if (this.presented || this.isPresenting) {
|
|
2150
|
+
this.restoreSafeAreaOverrides();
|
|
2151
|
+
}
|
|
2152
|
+
// A relocation from `willPresent` reaches these before `present()` has
|
|
2153
|
+
// applied the lock, so they apply it instead. Both are idempotent.
|
|
2154
|
+
if (this.presented) {
|
|
2155
|
+
overlays.restoreRootFocusTrapAccessibility(el);
|
|
2156
|
+
this.initParentRemovalObserver();
|
|
2157
|
+
}
|
|
2097
2158
|
}
|
|
2098
2159
|
disconnectedCallback() {
|
|
2099
2160
|
this.triggerController.removeClickListener();
|
|
@@ -2102,9 +2163,12 @@ const Modal = class {
|
|
|
2102
2163
|
// Also called in dismiss() — intentional dual cleanup covers both
|
|
2103
2164
|
// dismiss-then-remove and direct DOM removal without dismiss.
|
|
2104
2165
|
this.cleanupSafeAreaOverrides();
|
|
2166
|
+
// Clean up aria-hidden if removed without dismiss() being called
|
|
2167
|
+
if (this.presented) {
|
|
2168
|
+
overlays.cleanupRootFocusTrapAccessibility();
|
|
2169
|
+
}
|
|
2105
2170
|
}
|
|
2106
2171
|
componentWillLoad() {
|
|
2107
|
-
var _a;
|
|
2108
2172
|
const { breakpoints, initialBreakpoint, el, htmlAttributes } = this;
|
|
2109
2173
|
const isSheetModal = (this.isSheetModal = breakpoints !== undefined && initialBreakpoint !== undefined);
|
|
2110
2174
|
const attributesToInherit = ['aria-label', 'role'];
|
|
@@ -2139,7 +2203,10 @@ const Modal = class {
|
|
|
2139
2203
|
* htmlAttributes wins, but that's not a pattern that we recommend.
|
|
2140
2204
|
* The only time you'd need htmlAttributes is when using modalController.
|
|
2141
2205
|
*/
|
|
2142
|
-
this.inheritedAttributes =
|
|
2206
|
+
this.inheritedAttributes = {
|
|
2207
|
+
...this.inheritedAttributes,
|
|
2208
|
+
[attribute]: htmlAttributes[attribute],
|
|
2209
|
+
};
|
|
2143
2210
|
delete htmlAttributes[attribute];
|
|
2144
2211
|
}
|
|
2145
2212
|
});
|
|
@@ -2150,7 +2217,7 @@ const Modal = class {
|
|
|
2150
2217
|
if (breakpoints !== undefined && initialBreakpoint !== undefined && !breakpoints.includes(initialBreakpoint)) {
|
|
2151
2218
|
index$3.printIonWarning('[ion-modal] - Your breakpoints array must include the initialBreakpoint value.');
|
|
2152
2219
|
}
|
|
2153
|
-
if (!
|
|
2220
|
+
if (!this.htmlAttributes?.id) {
|
|
2154
2221
|
overlays.setOverlayId(this.el);
|
|
2155
2222
|
}
|
|
2156
2223
|
}
|
|
@@ -2265,25 +2332,33 @@ const Modal = class {
|
|
|
2265
2332
|
// Recalculate isSheetModal before safe-area setup because framework
|
|
2266
2333
|
// bindings (e.g., Angular) may not have been applied when componentWillLoad ran.
|
|
2267
2334
|
this.isSheetModal = this.breakpoints !== undefined && this.initialBreakpoint !== undefined;
|
|
2268
|
-
|
|
2269
|
-
this.setInitialSafeAreaOverrides();
|
|
2335
|
+
this.isPresenting = true;
|
|
2270
2336
|
const hasCardModal = presentingElement !== undefined;
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2279
|
-
|
|
2337
|
+
// Wrapped so a throw cannot strand `isPresenting`, which would suppress
|
|
2338
|
+
// the position-based correction for the life of this instance.
|
|
2339
|
+
try {
|
|
2340
|
+
// Set initial safe-area overrides before animation
|
|
2341
|
+
this.setInitialSafeAreaOverrides();
|
|
2342
|
+
/**
|
|
2343
|
+
* We need to change the status bar at the
|
|
2344
|
+
* start of the animation so that it completes
|
|
2345
|
+
* by the time the card animation is done.
|
|
2346
|
+
*/
|
|
2347
|
+
if (hasCardModal && ionicGlobal.getIonMode(this) === 'ios') {
|
|
2348
|
+
// Cache the original status bar color before the modal is presented
|
|
2349
|
+
this.statusBarStyle = await StatusBar.getStyle();
|
|
2350
|
+
setCardStatusBarDark();
|
|
2351
|
+
}
|
|
2352
|
+
await overlays.present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
|
|
2353
|
+
presentingEl: presentingElement,
|
|
2354
|
+
currentBreakpoint: this.initialBreakpoint,
|
|
2355
|
+
backdropBreakpoint: this.backdropBreakpoint,
|
|
2356
|
+
expandToScroll: this.expandToScroll,
|
|
2357
|
+
});
|
|
2358
|
+
}
|
|
2359
|
+
finally {
|
|
2360
|
+
this.isPresenting = false;
|
|
2280
2361
|
}
|
|
2281
|
-
await overlays.present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
|
|
2282
|
-
presentingEl: presentingElement,
|
|
2283
|
-
currentBreakpoint: this.initialBreakpoint,
|
|
2284
|
-
backdropBreakpoint: this.backdropBreakpoint,
|
|
2285
|
-
expandToScroll: this.expandToScroll,
|
|
2286
|
-
});
|
|
2287
2362
|
// Update safe-area based on actual position after animation
|
|
2288
2363
|
this.updateSafeAreaOverrides();
|
|
2289
2364
|
// Apply fullscreen safe-area padding if needed
|
|
@@ -2332,7 +2407,6 @@ const Modal = class {
|
|
|
2332
2407
|
unlock();
|
|
2333
2408
|
}
|
|
2334
2409
|
initSwipeToClose() {
|
|
2335
|
-
var _a;
|
|
2336
2410
|
if (ionicGlobal.getIonMode(this) !== 'ios') {
|
|
2337
2411
|
return;
|
|
2338
2412
|
}
|
|
@@ -2345,12 +2419,12 @@ const Modal = class {
|
|
|
2345
2419
|
presentingEl: this.presentingElement,
|
|
2346
2420
|
expandToScroll: this.expandToScroll,
|
|
2347
2421
|
}));
|
|
2348
|
-
const contentEl = index$
|
|
2422
|
+
const contentEl = index$1.findIonContent(el);
|
|
2349
2423
|
if (!contentEl) {
|
|
2350
|
-
index$
|
|
2424
|
+
index$1.printIonContentErrorMsg(el);
|
|
2351
2425
|
return;
|
|
2352
2426
|
}
|
|
2353
|
-
const statusBarStyle =
|
|
2427
|
+
const statusBarStyle = this.statusBarStyle ?? Style.Default;
|
|
2354
2428
|
this.gesture = createSwipeToCloseGesture(el, ani, statusBarStyle, () => this.cardOnDismiss(), () => this.onDragStart(), (detail) => this.onDragMove(detail), (detail) => this.onDragEnd(detail));
|
|
2355
2429
|
this.gesture.enable(true);
|
|
2356
2430
|
}
|
|
@@ -2367,7 +2441,7 @@ const Modal = class {
|
|
|
2367
2441
|
expandToScroll: this.expandToScroll,
|
|
2368
2442
|
}));
|
|
2369
2443
|
ani.progressStart(true, 1);
|
|
2370
|
-
const { gesture, moveSheetToBreakpoint } = createSheetGesture(this.el, this.backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, ani, this.sortedBreakpoints, this.expandToScroll, () =>
|
|
2444
|
+
const { gesture, moveSheetToBreakpoint, resetContentScroll } = createSheetGesture(this.el, this.backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, ani, this.sortedBreakpoints, this.expandToScroll, () => this.currentBreakpoint ?? 0, () => this.sheetOnDismiss(), (breakpoint) => {
|
|
2371
2445
|
if (this.currentBreakpoint !== breakpoint) {
|
|
2372
2446
|
this.currentBreakpoint = breakpoint;
|
|
2373
2447
|
this.ionBreakpointDidChange.emit({ breakpoint });
|
|
@@ -2375,6 +2449,7 @@ const Modal = class {
|
|
|
2375
2449
|
}, () => this.onDragStart(), (detail) => this.onDragMove(detail), (detail) => this.onDragEnd(detail));
|
|
2376
2450
|
this.gesture = gesture;
|
|
2377
2451
|
this.moveSheetToBreakpoint = moveSheetToBreakpoint;
|
|
2452
|
+
this.resetSheetContentScroll = resetContentScroll;
|
|
2378
2453
|
this.gesture.enable(true);
|
|
2379
2454
|
/**
|
|
2380
2455
|
* When backdrop interaction is allowed, nested router outlets from child routes
|
|
@@ -2392,7 +2467,6 @@ const Modal = class {
|
|
|
2392
2467
|
* passthrough on child route page wrappers and nested router outlets.
|
|
2393
2468
|
*/
|
|
2394
2469
|
setupChildRoutePassthrough() {
|
|
2395
|
-
var _a;
|
|
2396
2470
|
// Cache the page parent for cleanup
|
|
2397
2471
|
this.cachedPageParent = this.getOriginalPageParent();
|
|
2398
2472
|
const pageParent = this.cachedPageParent;
|
|
@@ -2400,14 +2474,11 @@ const Modal = class {
|
|
|
2400
2474
|
if (!pageParent || pageParent.tagName === 'ION-APP') {
|
|
2401
2475
|
return;
|
|
2402
2476
|
}
|
|
2403
|
-
const hasVisibleContent = Array.from(pageParent.children).some((child) =>
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
|
|
2407
|
-
|
|
2408
|
-
child.tagName !== 'SLOT' &&
|
|
2409
|
-
!(child.nodeType === Node.TEXT_NODE && !((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()));
|
|
2410
|
-
});
|
|
2477
|
+
const hasVisibleContent = Array.from(pageParent.children).some((child) => child !== this.el &&
|
|
2478
|
+
!(child instanceof HTMLElement && window.getComputedStyle(child).display === 'none') &&
|
|
2479
|
+
child.tagName !== 'TEMPLATE' &&
|
|
2480
|
+
child.tagName !== 'SLOT' &&
|
|
2481
|
+
!(child.nodeType === Node.TEXT_NODE && !child.textContent?.trim()));
|
|
2411
2482
|
if (hasVisibleContent) {
|
|
2412
2483
|
return;
|
|
2413
2484
|
}
|
|
@@ -2415,7 +2486,7 @@ const Modal = class {
|
|
|
2415
2486
|
pageParent.classList.add('ion-page-overlay-passthrough');
|
|
2416
2487
|
// Also make nested router outlets passthrough
|
|
2417
2488
|
const routerOutlet = pageParent.parentElement;
|
|
2418
|
-
if (
|
|
2489
|
+
if (routerOutlet?.tagName === 'ION-ROUTER-OUTLET' && routerOutlet.parentElement?.tagName !== 'ION-APP') {
|
|
2419
2490
|
routerOutlet.style.setProperty('pointer-events', 'none');
|
|
2420
2491
|
routerOutlet.setAttribute('data-overlay-passthrough', 'true');
|
|
2421
2492
|
}
|
|
@@ -2443,7 +2514,7 @@ const Modal = class {
|
|
|
2443
2514
|
}
|
|
2444
2515
|
pageParent.classList.remove('ion-page-overlay-passthrough');
|
|
2445
2516
|
const routerOutlet = pageParent.parentElement;
|
|
2446
|
-
if (routerOutlet
|
|
2517
|
+
if (routerOutlet?.hasAttribute('data-overlay-passthrough')) {
|
|
2447
2518
|
routerOutlet.style.removeProperty('pointer-events');
|
|
2448
2519
|
routerOutlet.removeAttribute('data-overlay-passthrough');
|
|
2449
2520
|
}
|
|
@@ -2506,7 +2577,6 @@ const Modal = class {
|
|
|
2506
2577
|
* For example, `cancel` or `backdrop`.
|
|
2507
2578
|
*/
|
|
2508
2579
|
async dismiss(data, role) {
|
|
2509
|
-
var _a;
|
|
2510
2580
|
if (this.gestureAnimationDismissing && role !== overlays.GESTURE) {
|
|
2511
2581
|
return false;
|
|
2512
2582
|
}
|
|
@@ -2551,7 +2621,7 @@ const Modal = class {
|
|
|
2551
2621
|
}
|
|
2552
2622
|
const dismissed = await overlays.dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, {
|
|
2553
2623
|
presentingEl: presentingElement,
|
|
2554
|
-
currentBreakpoint:
|
|
2624
|
+
currentBreakpoint: this.currentBreakpoint ?? this.initialBreakpoint,
|
|
2555
2625
|
backdropBreakpoint: this.backdropBreakpoint,
|
|
2556
2626
|
expandToScroll: this.expandToScroll,
|
|
2557
2627
|
});
|
|
@@ -2565,6 +2635,13 @@ const Modal = class {
|
|
|
2565
2635
|
if (this.gesture) {
|
|
2566
2636
|
this.gesture.destroy();
|
|
2567
2637
|
}
|
|
2638
|
+
/**
|
|
2639
|
+
* The sheet gesture turns content scrolling off while the sheet sits below
|
|
2640
|
+
* the top breakpoint. Inline modals reuse the same content on the next
|
|
2641
|
+
* present, so hand it back before the gesture goes away.
|
|
2642
|
+
*/
|
|
2643
|
+
this.resetSheetContentScroll?.();
|
|
2644
|
+
this.resetSheetContentScroll = undefined;
|
|
2568
2645
|
this.cleanupViewTransitionListener();
|
|
2569
2646
|
this.cleanupParentRemovalObserver();
|
|
2570
2647
|
this.cleanupSafeAreaOverrides();
|
|
@@ -2739,7 +2816,7 @@ const Modal = class {
|
|
|
2739
2816
|
wrapperEl.style.transform = 'translateY(0vh)';
|
|
2740
2817
|
wrapperEl.style.opacity = '1';
|
|
2741
2818
|
}
|
|
2742
|
-
if (
|
|
2819
|
+
if (presentingElement?.tagName === 'ION-MODAL') {
|
|
2743
2820
|
const isPortrait = window.innerWidth < 768;
|
|
2744
2821
|
if (isPortrait) {
|
|
2745
2822
|
const transformOffset = !CSS.supports('width', 'max(0px, 1px)')
|
|
@@ -2755,7 +2832,7 @@ const Modal = class {
|
|
|
2755
2832
|
}
|
|
2756
2833
|
async dismissNestedModals() {
|
|
2757
2834
|
const nestedModals = document.querySelectorAll(`ion-modal[data-parent-ion-modal="${this.el.id}"]`);
|
|
2758
|
-
nestedModals
|
|
2835
|
+
nestedModals?.forEach(async (modal) => {
|
|
2759
2836
|
await modal.dismiss(undefined, 'parent-dismissed');
|
|
2760
2837
|
});
|
|
2761
2838
|
}
|
|
@@ -2783,15 +2860,17 @@ const Modal = class {
|
|
|
2783
2860
|
this.cachedOriginalParent.tagName === 'ION-APP') {
|
|
2784
2861
|
return;
|
|
2785
2862
|
}
|
|
2863
|
+
// Both `present()` and a reconnect call this, so drop any existing
|
|
2864
|
+
// observer. Below the guards, so a call that bails cannot leave none.
|
|
2865
|
+
this.cleanupParentRemovalObserver();
|
|
2786
2866
|
this.parentRemovalObserver = new MutationObserver((mutations) => {
|
|
2787
2867
|
mutations.forEach((mutation) => {
|
|
2788
2868
|
if (mutation.type === 'childList' && mutation.removedNodes.length > 0) {
|
|
2789
2869
|
// Check if our cached original parent was removed
|
|
2790
2870
|
const cachedParentWasRemoved = Array.from(mutation.removedNodes).some((node) => {
|
|
2791
|
-
var _a, _b;
|
|
2792
2871
|
const isDirectMatch = node === this.cachedOriginalParent;
|
|
2793
2872
|
const isContainedMatch = this.cachedOriginalParent
|
|
2794
|
-
?
|
|
2873
|
+
? node.contains?.(this.cachedOriginalParent)
|
|
2795
2874
|
: false;
|
|
2796
2875
|
return isDirectMatch || isContainedMatch;
|
|
2797
2876
|
});
|
|
@@ -2813,8 +2892,7 @@ const Modal = class {
|
|
|
2813
2892
|
});
|
|
2814
2893
|
}
|
|
2815
2894
|
cleanupParentRemovalObserver() {
|
|
2816
|
-
|
|
2817
|
-
(_a = this.parentRemovalObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
2895
|
+
this.parentRemovalObserver?.disconnect();
|
|
2818
2896
|
this.parentRemovalObserver = undefined;
|
|
2819
2897
|
}
|
|
2820
2898
|
onDragStart() {
|
|
@@ -2854,22 +2932,30 @@ const Modal = class {
|
|
|
2854
2932
|
* sheets to prevent header content from getting double-offset padding).
|
|
2855
2933
|
*/
|
|
2856
2934
|
setInitialSafeAreaOverrides() {
|
|
2857
|
-
const context =
|
|
2935
|
+
const context = {
|
|
2936
|
+
...this.getSafeAreaContext(),
|
|
2937
|
+
hasCustomDimensions: hasCustomModalDimensions(this.el),
|
|
2938
|
+
};
|
|
2858
2939
|
const safeAreaConfig = getInitialSafeAreaConfig(context);
|
|
2859
2940
|
applySafeAreaOverrides(this.el, safeAreaConfig);
|
|
2860
2941
|
// Set the internal offset property with the resolved root safe-area-top value
|
|
2861
2942
|
if (context.isSheetModal) {
|
|
2862
2943
|
this.updateSheetOffsetTop();
|
|
2944
|
+
// A restore after a DOM move runs this a second time for the same
|
|
2945
|
+
// modal, so drop the previous subscription rather than stacking one.
|
|
2946
|
+
this.unsubscribeRootSafeAreaTop?.();
|
|
2947
|
+
this.unsubscribeRootSafeAreaTop = onRootSafeAreaTopChange((safeAreaTop) => this.updateSheetOffsetTop(safeAreaTop));
|
|
2863
2948
|
}
|
|
2864
2949
|
}
|
|
2865
2950
|
/**
|
|
2866
|
-
*
|
|
2867
|
-
*
|
|
2868
|
-
* Called on present
|
|
2951
|
+
* Sets the internal --ion-modal-offset-top property on the host element,
|
|
2952
|
+
* resolving the current root --ion-safe-area-top when no value is given.
|
|
2953
|
+
* Called on present, on resize (e.g., device rotation changes safe-area),
|
|
2954
|
+
* and whenever the root safe-area value itself changes.
|
|
2869
2955
|
*/
|
|
2870
|
-
updateSheetOffsetTop() {
|
|
2871
|
-
const
|
|
2872
|
-
this.el.style.setProperty('--ion-modal-offset-top', `${
|
|
2956
|
+
updateSheetOffsetTop(safeAreaTop) {
|
|
2957
|
+
const value = safeAreaTop ?? getRootSafeAreaTop();
|
|
2958
|
+
this.el.style.setProperty('--ion-modal-offset-top', `${value}px`);
|
|
2873
2959
|
}
|
|
2874
2960
|
/**
|
|
2875
2961
|
* Updates safe-area overrides during dynamic state changes.
|
|
@@ -2969,11 +3055,38 @@ const Modal = class {
|
|
|
2969
3055
|
*/
|
|
2970
3056
|
cleanupSafeAreaOverrides() {
|
|
2971
3057
|
clearSafeAreaOverrides(this.el);
|
|
3058
|
+
this.unsubscribeRootSafeAreaTop?.();
|
|
3059
|
+
this.unsubscribeRootSafeAreaTop = undefined;
|
|
2972
3060
|
// Remove internal sheet offset property
|
|
2973
3061
|
this.el.style.removeProperty('--ion-modal-offset-top');
|
|
2974
3062
|
const { contentEl } = this.findContentAndFooter();
|
|
2975
3063
|
this.clearContentSafeAreaPadding(contentEl);
|
|
2976
3064
|
}
|
|
3065
|
+
/**
|
|
3066
|
+
* Re-applies what `cleanupSafeAreaOverrides()` removed for a modal moved
|
|
3067
|
+
* while presented. Anything needing no measurement goes on synchronously so
|
|
3068
|
+
* the modal is never painted without safe-area. The position-based
|
|
3069
|
+
* correction waits a frame for the layout pass it reads.
|
|
3070
|
+
*/
|
|
3071
|
+
restoreSafeAreaOverrides() {
|
|
3072
|
+
this.setInitialSafeAreaOverrides();
|
|
3073
|
+
this.applyFullscreenSafeArea();
|
|
3074
|
+
helpers.raf(() => {
|
|
3075
|
+
// A dismiss or another move can land first, and a read before the enter
|
|
3076
|
+
// animation settles is not the rest position. `present()` redoes it.
|
|
3077
|
+
if (!this.presented || !this.el.isConnected || this.isPresenting) {
|
|
3078
|
+
return;
|
|
3079
|
+
}
|
|
3080
|
+
// A hidden subtree carries `display: none`, so there is no box and the
|
|
3081
|
+
// read would write the safe-area for a modal touching no edge. The
|
|
3082
|
+
// prediction applied above holds until the modal is shown again.
|
|
3083
|
+
const { width, height } = this.el.getBoundingClientRect();
|
|
3084
|
+
if (width === 0 && height === 0) {
|
|
3085
|
+
return;
|
|
3086
|
+
}
|
|
3087
|
+
this.updateSafeAreaOverrides();
|
|
3088
|
+
});
|
|
3089
|
+
}
|
|
2977
3090
|
render() {
|
|
2978
3091
|
const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap, expandToScroll, } = this;
|
|
2979
3092
|
const showHandle = handle !== false && isSheetModal;
|
|
@@ -2981,11 +3094,20 @@ const Modal = class {
|
|
|
2981
3094
|
const isCardModal = presentingElement !== undefined && mode === 'ios';
|
|
2982
3095
|
const isHandleCycle = handleBehavior === 'cycle';
|
|
2983
3096
|
const isSheetModalWithHandle = isSheetModal && showHandle;
|
|
2984
|
-
return (index$3.h(index$3.Host,
|
|
3097
|
+
return (index$3.h(index$3.Host, { key: '7c9c736052c5a788cf31040b6b2386dd9ea7454b', "no-router": true,
|
|
2985
3098
|
// Allow the modal to be navigable when the handle is focusable
|
|
2986
|
-
tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1
|
|
3099
|
+
tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1, ...htmlAttributes, style: {
|
|
2987
3100
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
2988
|
-
}, class:
|
|
3101
|
+
}, class: {
|
|
3102
|
+
[mode]: true,
|
|
3103
|
+
['modal-default']: !isCardModal && !isSheetModal,
|
|
3104
|
+
[`modal-card`]: isCardModal,
|
|
3105
|
+
[`modal-sheet`]: isSheetModal,
|
|
3106
|
+
[`modal-no-expand-scroll`]: isSheetModal && !expandToScroll,
|
|
3107
|
+
'overlay-hidden': true,
|
|
3108
|
+
[overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false,
|
|
3109
|
+
...theme.getClassMap(this.cssClass),
|
|
3110
|
+
}, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, index$3.h("ion-backdrop", { key: '01b5b5765fb3a32393c736065c824bf760728823', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && index$3.h("div", { key: '40fa7727a0923f7d7461dd027f1511a6a148d84a', class: "modal-shadow" }), index$3.h("div", { key: '9af934b607f60795bd5bff7bee6eacfc9b14fa35',
|
|
2989
3111
|
/*
|
|
2990
3112
|
role and aria-modal must be used on the
|
|
2991
3113
|
same element. They must also be set inside the
|
|
@@ -2998,9 +3120,9 @@ const Modal = class {
|
|
|
2998
3120
|
without the tabindex focus() would be a no-op and screen readers
|
|
2999
3121
|
may not properly announce the dialog and its content when it opens.
|
|
3000
3122
|
*/
|
|
3001
|
-
role: "dialog"
|
|
3123
|
+
role: "dialog", ...inheritedAttributes, "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }, showHandle && (index$3.h("button", { key: 'df84a6806413b13efc5b03c862edde83151579a7', class: "modal-handle",
|
|
3002
3124
|
// Prevents the handle from receiving keyboard focus when it does not cycle
|
|
3003
|
-
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) })), index$3.h("slot", { key: '
|
|
3125
|
+
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) })), index$3.h("slot", { key: '072d3929ec6f25481946b184d8ac24219011e783', onSlotchange: this.onSlotChange }))));
|
|
3004
3126
|
}
|
|
3005
3127
|
get el() { return index$3.getElement(this); }
|
|
3006
3128
|
static get watchers() { return {
|