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
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { r as registerInstance, c as createEvent, f as printIonWarning, w as writeTask, e as config, h, d as Host, g as getElement } from './index-
|
|
5
|
-
import { f as
|
|
6
|
-
import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-
|
|
7
|
-
import {
|
|
4
|
+
import { r as registerInstance, c as createEvent, f as printIonWarning, w as writeTask, e as config, h, d as Host, g as getElement } from './index-C23AVPx9.js';
|
|
5
|
+
import { i as isIonContent, f as findRefresherInContent, a as findClosestIonContent, d as disableContentScrollY, r as resetContentScrollY, b as findIonContent, p as printIonContentErrorMsg } from './index-C1b9CLFg.js';
|
|
6
|
+
import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-BwNhx9NR.js';
|
|
7
|
+
import { g as getElementRoot, e as clamp, r as raf, b as inheritAttributes, h as hasLazyBuild } from './helpers-BSmc0nst.js';
|
|
8
8
|
import { c as createLockController } from './lock-controller-B-hirT0v.js';
|
|
9
9
|
import { g as getCapacitor } from './capacitor-CFERIeaU.js';
|
|
10
|
-
import { G as GESTURE, O as OVERLAY_GESTURE_PRIORITY, F as FOCUS_TRAP_DISABLE_CLASS,
|
|
11
|
-
import { g as getClassMap } from './theme-
|
|
12
|
-
import { e as deepReady, w as waitForMount } from './index-
|
|
13
|
-
import { b as getIonMode } from './ionic-global-
|
|
14
|
-
import { KEYBOARD_DID_OPEN } from './keyboard-
|
|
15
|
-
import { c as createAnimation } from './animation-
|
|
10
|
+
import { G as GESTURE, O as OVERLAY_GESTURE_PRIORITY, F as FOCUS_TRAP_DISABLE_CLASS, d as createTriggerController, B as BACKDROP, h as prepareOverlay, r as restoreRootFocusTrapAccessibility, j as cleanupRootFocusTrapAccessibility, k as setOverlayId, e as present, f as dismiss, g as eventMethod } from './overlays-DKE0DgvE.js';
|
|
11
|
+
import { g as getClassMap } from './theme-byZM6qHV.js';
|
|
12
|
+
import { e as deepReady, w as waitForMount } from './index-DnA_7Bnx.js';
|
|
13
|
+
import { b as getIonMode } from './ionic-global-ZXjCXKH0.js';
|
|
14
|
+
import { KEYBOARD_DID_OPEN } from './keyboard-Cj8mLJeq.js';
|
|
15
|
+
import { c as createAnimation } from './animation-BFNVlYum.js';
|
|
16
16
|
import { g as getTimeGivenProgression } from './cubic-bezier-hHmYLOfE.js';
|
|
17
|
-
import { createGesture } from './index-
|
|
17
|
+
import { createGesture } from './index-BmLuEdV7.js';
|
|
18
18
|
import { w as win } from './index-ZjP4CjeZ.js';
|
|
19
|
-
import './
|
|
20
|
-
import './
|
|
21
|
-
import './
|
|
19
|
+
import './dir-Dojwmvde.js';
|
|
20
|
+
import './hardware-back-button-DmkiRgOT.js';
|
|
21
|
+
import './gesture-controller-B_gJaBk0.js';
|
|
22
|
+
import './keyboard-DAF8GNJ9.js';
|
|
22
23
|
|
|
23
24
|
var Style;
|
|
24
25
|
(function (Style) {
|
|
@@ -29,7 +30,7 @@ var Style;
|
|
|
29
30
|
const StatusBar = {
|
|
30
31
|
getEngine() {
|
|
31
32
|
const capacitor = getCapacitor();
|
|
32
|
-
if (capacitor
|
|
33
|
+
if (capacitor?.isPluginAvailable('StatusBar')) {
|
|
33
34
|
return capacitor.Plugins.StatusBar;
|
|
34
35
|
}
|
|
35
36
|
return undefined;
|
|
@@ -127,6 +128,21 @@ const setCardStatusBarDefault = (defaultStyle = Style.Default) => {
|
|
|
127
128
|
StatusBar.setStyle({ style: defaultStyle });
|
|
128
129
|
};
|
|
129
130
|
|
|
131
|
+
/**
|
|
132
|
+
* Swiping is only possible when the content is scrolled to the top, so that we
|
|
133
|
+
* do not interfere with scrolling, and never on content with a refresher.
|
|
134
|
+
*
|
|
135
|
+
* Note: We cannot solve the refresher case with gesture priority as the iOS
|
|
136
|
+
* native refresh gesture uses a scroll listener in addition to a gesture.
|
|
137
|
+
*
|
|
138
|
+
* Note: Do not use `getScrollElement` here because we need this to be a
|
|
139
|
+
* synchronous operation, and `getScrollElement` is asynchronous.
|
|
140
|
+
*/
|
|
141
|
+
const canSwipeOnContent = (contentEl) => {
|
|
142
|
+
const scrollEl = isIonContent(contentEl) ? getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
|
|
143
|
+
const hasRefresherInContent = !!findRefresherInContent(contentEl);
|
|
144
|
+
return !hasRefresherInContent && scrollEl.scrollTop === 0;
|
|
145
|
+
};
|
|
130
146
|
const handleCanDismiss = async (el, animation) => {
|
|
131
147
|
/**
|
|
132
148
|
* If canDismiss is not a function
|
|
@@ -257,7 +273,6 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
|
|
|
257
273
|
let isOpen = false;
|
|
258
274
|
let canDismissBlocksGesture = false;
|
|
259
275
|
let contentEl = null;
|
|
260
|
-
let scrollEl = null;
|
|
261
276
|
const canDismissMaxStep = 0.2;
|
|
262
277
|
let initialScrollY = true;
|
|
263
278
|
let lastStep = 0;
|
|
@@ -280,12 +295,6 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
|
|
|
280
295
|
return true;
|
|
281
296
|
}
|
|
282
297
|
/**
|
|
283
|
-
* If we are swiping on the content,
|
|
284
|
-
* swiping should only be possible if
|
|
285
|
-
* the content is scrolled all the way
|
|
286
|
-
* to the top so that we do not interfere
|
|
287
|
-
* with scrolling.
|
|
288
|
-
*
|
|
289
298
|
* We cannot assume that the `ion-content`
|
|
290
299
|
* target will remain consistent between
|
|
291
300
|
* swipes. For example, when using
|
|
@@ -296,29 +305,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
|
|
|
296
305
|
*/
|
|
297
306
|
contentEl = findClosestIonContent(target);
|
|
298
307
|
if (contentEl) {
|
|
299
|
-
|
|
300
|
-
* The card should never swipe to close
|
|
301
|
-
* on the content with a refresher.
|
|
302
|
-
* Note: We cannot solve this by making the
|
|
303
|
-
* swipeToClose gesture have a higher priority
|
|
304
|
-
* than the refresher gesture as the iOS native
|
|
305
|
-
* refresh gesture uses a scroll listener in
|
|
306
|
-
* addition to a gesture.
|
|
307
|
-
*
|
|
308
|
-
* Note: Do not use getScrollElement here
|
|
309
|
-
* because we need this to be a synchronous
|
|
310
|
-
* operation, and getScrollElement is
|
|
311
|
-
* asynchronous.
|
|
312
|
-
*/
|
|
313
|
-
if (isIonContent(contentEl)) {
|
|
314
|
-
const root = getElementRoot(contentEl);
|
|
315
|
-
scrollEl = root.querySelector('.inner-scroll');
|
|
316
|
-
}
|
|
317
|
-
else {
|
|
318
|
-
scrollEl = contentEl;
|
|
319
|
-
}
|
|
320
|
-
const hasRefresherInContent = !!contentEl.querySelector('ion-refresher');
|
|
321
|
-
return !hasRefresherInContent && scrollEl.scrollTop === 0;
|
|
308
|
+
return canSwipeOnContent(contentEl);
|
|
322
309
|
}
|
|
323
310
|
/**
|
|
324
311
|
* Card should be swipeable on all
|
|
@@ -331,14 +318,13 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
|
|
|
331
318
|
return false;
|
|
332
319
|
};
|
|
333
320
|
const onStart = (detail) => {
|
|
334
|
-
var _a;
|
|
335
321
|
const { deltaY } = detail;
|
|
336
322
|
/**
|
|
337
323
|
* Firefox automatically selects the header text during drag
|
|
338
324
|
* due to the focusable wrapper (tabindex="-1"). Remove any
|
|
339
325
|
* selection that may have occurred.
|
|
340
326
|
*/
|
|
341
|
-
|
|
327
|
+
window.getSelection()?.removeAllRanges();
|
|
342
328
|
/**
|
|
343
329
|
* Get the initial scrollY value so
|
|
344
330
|
* that we can correctly reset the scrollY
|
|
@@ -491,17 +477,30 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onD
|
|
|
491
477
|
* check canDismiss. 25% was chosen
|
|
492
478
|
* to avoid accidental swipes.
|
|
493
479
|
*/
|
|
494
|
-
|
|
480
|
+
const isAttemptingCanDismiss = isAttemptingDismissWithCanDismiss && clampedStep > maxStep / 4;
|
|
481
|
+
if (isAttemptingCanDismiss) {
|
|
495
482
|
handleCanDismiss(el, animation);
|
|
496
483
|
}
|
|
497
484
|
else if (shouldComplete) {
|
|
498
485
|
onDismiss();
|
|
499
486
|
}
|
|
487
|
+
/**
|
|
488
|
+
* `shouldComplete` is not enough on its own, since it is always `false`
|
|
489
|
+
* when canDismiss blocks the gesture. `canDismiss: false` blocks it and
|
|
490
|
+
* never dismisses, because `handleCanDismiss` returns early when
|
|
491
|
+
* canDismiss is not a function. A canDismiss function dismisses through
|
|
492
|
+
* `handleCanDismiss`, which awaits the callback, so the outcome is not
|
|
493
|
+
* known when this event is emitted.
|
|
494
|
+
*/
|
|
495
|
+
const isDismissing = isAttemptingDismissWithCanDismiss
|
|
496
|
+
? isAttemptingCanDismiss && typeof el.canDismiss === 'function'
|
|
497
|
+
: shouldComplete;
|
|
500
498
|
const eventDetail = {
|
|
501
499
|
currentY: detail.currentY,
|
|
502
500
|
deltaY: detail.deltaY,
|
|
503
501
|
velocityY: detail.velocityY,
|
|
504
502
|
progress: calculateProgress(el, detail.deltaY),
|
|
503
|
+
isDismissing,
|
|
505
504
|
snapBreakpoint: shouldComplete ? 0 : 1,
|
|
506
505
|
};
|
|
507
506
|
onDragEnd(eventDetail);
|
|
@@ -639,7 +638,7 @@ const iosEnterAnimation = (baseEl, opts) => {
|
|
|
639
638
|
wrapperAnimation.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')).beforeStyles({ opacity: 1 });
|
|
640
639
|
// The content animation is only added if scrolling is enabled for
|
|
641
640
|
// all the breakpoints.
|
|
642
|
-
!expandToScroll &&
|
|
641
|
+
!expandToScroll && contentAnimation?.addElement(baseEl.querySelector('.ion-page'));
|
|
643
642
|
const baseAnimation = createAnimation('entering-base')
|
|
644
643
|
.addElement(baseEl)
|
|
645
644
|
.easing('cubic-bezier(0.32,0.72,0,1)')
|
|
@@ -972,7 +971,7 @@ const mdEnterAnimation = (baseEl, opts) => {
|
|
|
972
971
|
wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
|
|
973
972
|
// The content animation is only added if scrolling is enabled for
|
|
974
973
|
// all the breakpoints.
|
|
975
|
-
!expandToScroll &&
|
|
974
|
+
!expandToScroll && contentAnimation?.addElement(baseEl.querySelector('.ion-page'));
|
|
976
975
|
const baseAnimation = createAnimation()
|
|
977
976
|
.addElement(baseEl)
|
|
978
977
|
.easing('cubic-bezier(0.36,0.66,0.04,1)')
|
|
@@ -1031,6 +1030,8 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1031
1030
|
],
|
|
1032
1031
|
};
|
|
1033
1032
|
const contentEl = baseEl.querySelector('ion-content');
|
|
1033
|
+
// Cache the initial value so the gesture restores it instead of forcing scrolling on.
|
|
1034
|
+
const initialContentScrollY = contentEl?.scrollY ?? true;
|
|
1034
1035
|
const height = wrapperEl.clientHeight;
|
|
1035
1036
|
let currentBreakpoint = initialBreakpoint;
|
|
1036
1037
|
let offset = 0;
|
|
@@ -1096,9 +1097,9 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1096
1097
|
cachedFooterEl.style.removeProperty('height');
|
|
1097
1098
|
cachedFooterEl.style.removeProperty('top');
|
|
1098
1099
|
cachedFooterEl.style.removeProperty('left');
|
|
1099
|
-
page
|
|
1100
|
+
page?.style.removeProperty('padding-bottom');
|
|
1100
1101
|
// Move to page
|
|
1101
|
-
page
|
|
1102
|
+
page?.appendChild(cachedFooterEl);
|
|
1102
1103
|
});
|
|
1103
1104
|
}
|
|
1104
1105
|
else {
|
|
@@ -1142,7 +1143,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1142
1143
|
// when the footer is positioned absolutely. This has to be done before we
|
|
1143
1144
|
// make the footer absolutely positioned or we may accidentally cause the
|
|
1144
1145
|
// sheet to scroll.
|
|
1145
|
-
page
|
|
1146
|
+
page?.style.setProperty('padding-bottom', `${footerHeights}px`);
|
|
1146
1147
|
// Apply positioning styles to keep footer at bottom
|
|
1147
1148
|
cachedFooterEl.classList.add('modal-footer-moving');
|
|
1148
1149
|
// Apply our preserved styles to pin the footer
|
|
@@ -1167,7 +1168,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1167
1168
|
if (wrapperAnimation && backdropAnimation) {
|
|
1168
1169
|
wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
|
|
1169
1170
|
backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
|
|
1170
|
-
contentAnimation
|
|
1171
|
+
contentAnimation?.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
|
|
1171
1172
|
animation.progressStart(true, 1 - currentBreakpoint);
|
|
1172
1173
|
/**
|
|
1173
1174
|
* If backdrop is not enabled, then content
|
|
@@ -1191,9 +1192,6 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1191
1192
|
}
|
|
1192
1193
|
const canStart = (detail) => {
|
|
1193
1194
|
/**
|
|
1194
|
-
* If we are swiping on the content, swiping should only be possible if the content
|
|
1195
|
-
* is scrolled all the way to the top so that we do not interfere with scrolling.
|
|
1196
|
-
*
|
|
1197
1195
|
* We cannot assume that the `ion-content` target will remain consistent between swipes.
|
|
1198
1196
|
* For example, when using ion-nav within a modal it is possible to swipe, push a view,
|
|
1199
1197
|
* and then swipe again. The target content will not be the same between swipes.
|
|
@@ -1201,37 +1199,21 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1201
1199
|
const contentEl = findClosestIonContent(detail.event.target);
|
|
1202
1200
|
currentBreakpoint = getCurrentBreakpoint();
|
|
1203
1201
|
/**
|
|
1204
|
-
*
|
|
1205
|
-
*
|
|
1202
|
+
* Upwards swipes on the content cannot move the sheet anyway, so this only
|
|
1203
|
+
* blocks swiping the sheet down from the content.
|
|
1206
1204
|
*/
|
|
1207
|
-
if (!expandToScroll
|
|
1208
|
-
|
|
1209
|
-
return scrollEl.scrollTop === 0;
|
|
1210
|
-
}
|
|
1211
|
-
if (currentBreakpoint === 1 && contentEl) {
|
|
1212
|
-
/**
|
|
1213
|
-
* The modal should never swipe to close on the content with a refresher.
|
|
1214
|
-
* Note 1: We cannot solve this by making this gesture have a higher priority than
|
|
1215
|
-
* the refresher gesture as the iOS native refresh gesture uses a scroll listener in
|
|
1216
|
-
* addition to a gesture.
|
|
1217
|
-
*
|
|
1218
|
-
* Note 2: Do not use getScrollElement here because we need this to be a synchronous
|
|
1219
|
-
* operation, and getScrollElement is asynchronous.
|
|
1220
|
-
*/
|
|
1221
|
-
const scrollEl = isIonContent(contentEl) ? getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
|
|
1222
|
-
const hasRefresherInContent = !!contentEl.querySelector('ion-refresher');
|
|
1223
|
-
return !hasRefresherInContent && scrollEl.scrollTop === 0;
|
|
1205
|
+
if (contentEl && (!expandToScroll || currentBreakpoint === 1)) {
|
|
1206
|
+
return canSwipeOnContent(contentEl);
|
|
1224
1207
|
}
|
|
1225
1208
|
return true;
|
|
1226
1209
|
};
|
|
1227
1210
|
const onStart = (detail) => {
|
|
1228
|
-
var _a;
|
|
1229
1211
|
/**
|
|
1230
1212
|
* Firefox automatically selects the header text during drag
|
|
1231
1213
|
* due to the focusable wrapper (tabindex="-1"). Remove any
|
|
1232
1214
|
* selection that may have occurred.
|
|
1233
1215
|
*/
|
|
1234
|
-
|
|
1216
|
+
window.getSelection()?.removeAllRanges();
|
|
1235
1217
|
/**
|
|
1236
1218
|
* If canDismiss is anything other than `true`
|
|
1237
1219
|
* then users should be able to swipe down
|
|
@@ -1359,12 +1341,22 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1359
1341
|
};
|
|
1360
1342
|
const onEnd = (detail) => {
|
|
1361
1343
|
const snapBreakpoint = calculateSnapBreakpoint(detail.deltaY);
|
|
1344
|
+
/**
|
|
1345
|
+
* `snapBreakpoint === 0` is not enough on its own. `canDismiss: false`
|
|
1346
|
+
* snaps to 0 but never dismisses, since `handleCanDismiss` returns early
|
|
1347
|
+
* when canDismiss is not a function. A canDismiss function dismisses
|
|
1348
|
+
* through `handleCanDismiss`, which awaits the callback, so the outcome
|
|
1349
|
+
* is not known when this event is emitted.
|
|
1350
|
+
*/
|
|
1351
|
+
const shouldPreventDismiss = canDismissBlocksGesture && snapBreakpoint === 0;
|
|
1352
|
+
const isDismissing = shouldPreventDismiss ? typeof baseEl.canDismiss === 'function' : snapBreakpoint === 0;
|
|
1362
1353
|
const eventDetail = {
|
|
1363
1354
|
currentY: detail.currentY,
|
|
1364
1355
|
deltaY: detail.deltaY,
|
|
1365
1356
|
velocityY: detail.velocityY,
|
|
1366
1357
|
progress: calculateProgress(detail.currentY),
|
|
1367
1358
|
snapBreakpoint,
|
|
1359
|
+
isDismissing,
|
|
1368
1360
|
};
|
|
1369
1361
|
/**
|
|
1370
1362
|
* If expandToScroll is disabled, we should not allow the moveSheetToBreakpoint
|
|
@@ -1380,7 +1372,11 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1380
1372
|
* swap to moving on drag and if we don't swap back here then the footer will get stuck.
|
|
1381
1373
|
*/
|
|
1382
1374
|
swapFooterPosition('stationary');
|
|
1383
|
-
|
|
1375
|
+
/**
|
|
1376
|
+
* The sheet does not move in this case, so the gesture
|
|
1377
|
+
* never dismisses the modal.
|
|
1378
|
+
*/
|
|
1379
|
+
onDragEnd({ ...eventDetail, isDismissing: false });
|
|
1384
1380
|
return;
|
|
1385
1381
|
}
|
|
1386
1382
|
moveSheetToBreakpoint({
|
|
@@ -1453,14 +1449,14 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1453
1449
|
onDismiss();
|
|
1454
1450
|
}
|
|
1455
1451
|
/**
|
|
1456
|
-
*
|
|
1457
|
-
* or if it allows scrolling at any breakpoint. Without this, there would
|
|
1452
|
+
* Restores the content's scroll setting immediately if the sheet is about to
|
|
1453
|
+
* fully expand or if it allows scrolling at any breakpoint. Without this, there would
|
|
1458
1454
|
* be a ~500ms delay while the modal animation completes, causing a
|
|
1459
1455
|
* noticeable lag. Native iOS allows scrolling as soon as the gesture is
|
|
1460
1456
|
* released, so we align with that behavior.
|
|
1461
1457
|
*/
|
|
1462
1458
|
if (contentEl && (snapToBreakpoint === breakpoints[breakpoints.length - 1] || !expandToScroll)) {
|
|
1463
|
-
contentEl.scrollY =
|
|
1459
|
+
contentEl.scrollY = initialContentScrollY;
|
|
1464
1460
|
}
|
|
1465
1461
|
/**
|
|
1466
1462
|
* If expandToScroll is disabled and we're animating
|
|
@@ -1495,7 +1491,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1495
1491
|
raf(() => {
|
|
1496
1492
|
wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
|
|
1497
1493
|
backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
|
|
1498
|
-
contentAnimation
|
|
1494
|
+
contentAnimation?.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
|
|
1499
1495
|
animation.progressStart(true, 1 - snapToBreakpoint);
|
|
1500
1496
|
currentBreakpoint = snapToBreakpoint;
|
|
1501
1497
|
onBreakpointChange(currentBreakpoint);
|
|
@@ -1642,9 +1638,20 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1642
1638
|
onMove,
|
|
1643
1639
|
onEnd,
|
|
1644
1640
|
});
|
|
1641
|
+
/**
|
|
1642
|
+
* Puts the content back the way the app declared it. A sheet can dismiss
|
|
1643
|
+
* without going through moveSheetToBreakpoint, and an inline modal reuses
|
|
1644
|
+
* the same element on the next present.
|
|
1645
|
+
*/
|
|
1646
|
+
const resetContentScroll = () => {
|
|
1647
|
+
if (contentEl) {
|
|
1648
|
+
contentEl.scrollY = initialContentScrollY;
|
|
1649
|
+
}
|
|
1650
|
+
};
|
|
1645
1651
|
return {
|
|
1646
1652
|
gesture,
|
|
1647
1653
|
moveSheetToBreakpoint,
|
|
1654
|
+
resetContentScroll,
|
|
1648
1655
|
};
|
|
1649
1656
|
};
|
|
1650
1657
|
|
|
@@ -1694,8 +1701,8 @@ const getRootSafeAreaTop = () => {
|
|
|
1694
1701
|
if (cachedRootSafeAreaTop !== null) {
|
|
1695
1702
|
return cachedRootSafeAreaTop;
|
|
1696
1703
|
}
|
|
1697
|
-
const doc = win
|
|
1698
|
-
if (!
|
|
1704
|
+
const doc = win?.document;
|
|
1705
|
+
if (!doc?.body) {
|
|
1699
1706
|
return 0;
|
|
1700
1707
|
}
|
|
1701
1708
|
const el = doc.createElement('div');
|
|
@@ -1714,6 +1721,41 @@ const getRootSafeAreaTop = () => {
|
|
|
1714
1721
|
}
|
|
1715
1722
|
return value;
|
|
1716
1723
|
};
|
|
1724
|
+
/**
|
|
1725
|
+
* Calls back when the resolved root `--ion-safe-area-top` changes, which no
|
|
1726
|
+
* event and no window resize covers. The probe's height tracks the variable, so
|
|
1727
|
+
* a change to it becomes a size change the observer can see.
|
|
1728
|
+
*/
|
|
1729
|
+
const onRootSafeAreaTopChange = (callback) => {
|
|
1730
|
+
const doc = win?.document;
|
|
1731
|
+
if (!doc?.body || typeof ResizeObserver === 'undefined') {
|
|
1732
|
+
return () => undefined;
|
|
1733
|
+
}
|
|
1734
|
+
const probe = doc.createElement('div');
|
|
1735
|
+
probe.style.cssText =
|
|
1736
|
+
'position:fixed;visibility:hidden;pointer-events:none;top:0;left:0;width:0;' +
|
|
1737
|
+
'height:var(--ion-safe-area-top,0px);';
|
|
1738
|
+
doc.body.appendChild(probe);
|
|
1739
|
+
/**
|
|
1740
|
+
* Seeded with the value the caller has already applied, so a change that
|
|
1741
|
+
* lands before the observer's first delivery still gets reported. Comparing
|
|
1742
|
+
* against an unset value instead would consume that first delivery and treat
|
|
1743
|
+
* the new inset as the baseline.
|
|
1744
|
+
*/
|
|
1745
|
+
let lastHeight = getRootSafeAreaTop();
|
|
1746
|
+
const observer = new ResizeObserver((entries) => {
|
|
1747
|
+
const { height } = entries[0].contentRect;
|
|
1748
|
+
if (height !== lastHeight) {
|
|
1749
|
+
lastHeight = height;
|
|
1750
|
+
callback(height);
|
|
1751
|
+
}
|
|
1752
|
+
});
|
|
1753
|
+
observer.observe(probe);
|
|
1754
|
+
return () => {
|
|
1755
|
+
observer.disconnect();
|
|
1756
|
+
probe.remove();
|
|
1757
|
+
};
|
|
1758
|
+
};
|
|
1717
1759
|
/**
|
|
1718
1760
|
* True when the modal host declares BOTH a non-fullscreen `--width` AND a
|
|
1719
1761
|
* non-fullscreen `--height` (i.e. a centered-dialog-like modal that doesn't
|
|
@@ -1798,10 +1840,9 @@ const getInitialSafeAreaConfig = (context) => {
|
|
|
1798
1840
|
* @returns SafeAreaConfig based on position
|
|
1799
1841
|
*/
|
|
1800
1842
|
const getPositionBasedSafeAreaConfig = (wrapperEl) => {
|
|
1801
|
-
var _a, _b;
|
|
1802
1843
|
const rect = wrapperEl.getBoundingClientRect();
|
|
1803
|
-
const vh =
|
|
1804
|
-
const vw =
|
|
1844
|
+
const vh = win?.innerHeight ?? 0;
|
|
1845
|
+
const vw = win?.innerWidth ?? 0;
|
|
1805
1846
|
// Only apply safe-area to sides where modal overlaps with screen edge
|
|
1806
1847
|
return {
|
|
1807
1848
|
top: rect.top <= EDGE_THRESHOLD ? 'inherit' : '0px',
|
|
@@ -1862,6 +1903,9 @@ const Modal = class {
|
|
|
1862
1903
|
this.inline = false;
|
|
1863
1904
|
// Whether or not modal is being dismissed via gesture
|
|
1864
1905
|
this.gestureAnimationDismissing = false;
|
|
1906
|
+
// True from the first safe-area write in `present()` until the enter
|
|
1907
|
+
// animation settles. A position-based read in that window is not the rest position.
|
|
1908
|
+
this.isPresenting = false;
|
|
1865
1909
|
this.presented = false;
|
|
1866
1910
|
/** @internal */
|
|
1867
1911
|
this.hasController = false;
|
|
@@ -1896,13 +1940,20 @@ const Modal = class {
|
|
|
1896
1940
|
/**
|
|
1897
1941
|
* The interaction behavior for the sheet modal when the handle is pressed.
|
|
1898
1942
|
*
|
|
1899
|
-
*
|
|
1900
|
-
*
|
|
1943
|
+
* Handle behavior is unavailable when the `handle` property is set to
|
|
1944
|
+
* `false` or when the `breakpoints` property is not set (using a
|
|
1945
|
+
* fullscreen or card modal).
|
|
1946
|
+
*
|
|
1947
|
+
* Set to `"cycle"` to make the handle focusable and let the sheet modal
|
|
1948
|
+
* cycle between available breakpoints when pressed. This keeps the sheet
|
|
1949
|
+
* operable with assistive technology.
|
|
1950
|
+
*
|
|
1951
|
+
* Set to `"none"` to make the handle purely decorative when pressed and
|
|
1952
|
+
* removed from the tab order.
|
|
1901
1953
|
*
|
|
1902
|
-
*
|
|
1903
|
-
* when the `breakpoints` property is not set (using a fullscreen or card modal).
|
|
1954
|
+
* Defaults to `"cycle"`.
|
|
1904
1955
|
*/
|
|
1905
|
-
this.handleBehavior = '
|
|
1956
|
+
this.handleBehavior = 'cycle';
|
|
1906
1957
|
/**
|
|
1907
1958
|
* If `true`, the modal will be dismissed when the backdrop is clicked.
|
|
1908
1959
|
*/
|
|
@@ -2010,7 +2061,6 @@ const Modal = class {
|
|
|
2010
2061
|
* if it exists and is focusable, otherwise let the focus trap handle it.
|
|
2011
2062
|
*/
|
|
2012
2063
|
this.onModalFocus = (ev) => {
|
|
2013
|
-
var _a;
|
|
2014
2064
|
const { dragHandleEl, el } = this;
|
|
2015
2065
|
/**
|
|
2016
2066
|
* Shadow DOM focus is retargeted to the host, so `ev.target === el` is also
|
|
@@ -2018,7 +2068,7 @@ const Modal = class {
|
|
|
2018
2068
|
* shadowRoot's activeElement is null only when the host was focused directly,
|
|
2019
2069
|
* so redirect to the handle only then and leave present()'s wrapper focus intact.
|
|
2020
2070
|
*/
|
|
2021
|
-
if (ev.target === el &&
|
|
2071
|
+
if (ev.target === el && el.shadowRoot?.activeElement == null && dragHandleEl && dragHandleEl.tabIndex !== -1) {
|
|
2022
2072
|
dragHandleEl.focus();
|
|
2023
2073
|
}
|
|
2024
2074
|
};
|
|
@@ -2092,6 +2142,17 @@ const Modal = class {
|
|
|
2092
2142
|
const { el } = this;
|
|
2093
2143
|
prepareOverlay(el);
|
|
2094
2144
|
this.triggerChanged();
|
|
2145
|
+
// A disconnect tears down state this presentation still needs and cannot
|
|
2146
|
+
// tell a re-insert from a removal, so put it back.
|
|
2147
|
+
if (this.presented || this.isPresenting) {
|
|
2148
|
+
this.restoreSafeAreaOverrides();
|
|
2149
|
+
}
|
|
2150
|
+
// A relocation from `willPresent` reaches these before `present()` has
|
|
2151
|
+
// applied the lock, so they apply it instead. Both are idempotent.
|
|
2152
|
+
if (this.presented) {
|
|
2153
|
+
restoreRootFocusTrapAccessibility(el);
|
|
2154
|
+
this.initParentRemovalObserver();
|
|
2155
|
+
}
|
|
2095
2156
|
}
|
|
2096
2157
|
disconnectedCallback() {
|
|
2097
2158
|
this.triggerController.removeClickListener();
|
|
@@ -2100,9 +2161,12 @@ const Modal = class {
|
|
|
2100
2161
|
// Also called in dismiss() — intentional dual cleanup covers both
|
|
2101
2162
|
// dismiss-then-remove and direct DOM removal without dismiss.
|
|
2102
2163
|
this.cleanupSafeAreaOverrides();
|
|
2164
|
+
// Clean up aria-hidden if removed without dismiss() being called
|
|
2165
|
+
if (this.presented) {
|
|
2166
|
+
cleanupRootFocusTrapAccessibility();
|
|
2167
|
+
}
|
|
2103
2168
|
}
|
|
2104
2169
|
componentWillLoad() {
|
|
2105
|
-
var _a;
|
|
2106
2170
|
const { breakpoints, initialBreakpoint, el, htmlAttributes } = this;
|
|
2107
2171
|
const isSheetModal = (this.isSheetModal = breakpoints !== undefined && initialBreakpoint !== undefined);
|
|
2108
2172
|
const attributesToInherit = ['aria-label', 'role'];
|
|
@@ -2137,7 +2201,10 @@ const Modal = class {
|
|
|
2137
2201
|
* htmlAttributes wins, but that's not a pattern that we recommend.
|
|
2138
2202
|
* The only time you'd need htmlAttributes is when using modalController.
|
|
2139
2203
|
*/
|
|
2140
|
-
this.inheritedAttributes =
|
|
2204
|
+
this.inheritedAttributes = {
|
|
2205
|
+
...this.inheritedAttributes,
|
|
2206
|
+
[attribute]: htmlAttributes[attribute],
|
|
2207
|
+
};
|
|
2141
2208
|
delete htmlAttributes[attribute];
|
|
2142
2209
|
}
|
|
2143
2210
|
});
|
|
@@ -2148,7 +2215,7 @@ const Modal = class {
|
|
|
2148
2215
|
if (breakpoints !== undefined && initialBreakpoint !== undefined && !breakpoints.includes(initialBreakpoint)) {
|
|
2149
2216
|
printIonWarning('[ion-modal] - Your breakpoints array must include the initialBreakpoint value.');
|
|
2150
2217
|
}
|
|
2151
|
-
if (!
|
|
2218
|
+
if (!this.htmlAttributes?.id) {
|
|
2152
2219
|
setOverlayId(this.el);
|
|
2153
2220
|
}
|
|
2154
2221
|
}
|
|
@@ -2263,25 +2330,33 @@ const Modal = class {
|
|
|
2263
2330
|
// Recalculate isSheetModal before safe-area setup because framework
|
|
2264
2331
|
// bindings (e.g., Angular) may not have been applied when componentWillLoad ran.
|
|
2265
2332
|
this.isSheetModal = this.breakpoints !== undefined && this.initialBreakpoint !== undefined;
|
|
2266
|
-
|
|
2267
|
-
this.setInitialSafeAreaOverrides();
|
|
2333
|
+
this.isPresenting = true;
|
|
2268
2334
|
const hasCardModal = presentingElement !== undefined;
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2335
|
+
// Wrapped so a throw cannot strand `isPresenting`, which would suppress
|
|
2336
|
+
// the position-based correction for the life of this instance.
|
|
2337
|
+
try {
|
|
2338
|
+
// Set initial safe-area overrides before animation
|
|
2339
|
+
this.setInitialSafeAreaOverrides();
|
|
2340
|
+
/**
|
|
2341
|
+
* We need to change the status bar at the
|
|
2342
|
+
* start of the animation so that it completes
|
|
2343
|
+
* by the time the card animation is done.
|
|
2344
|
+
*/
|
|
2345
|
+
if (hasCardModal && getIonMode(this) === 'ios') {
|
|
2346
|
+
// Cache the original status bar color before the modal is presented
|
|
2347
|
+
this.statusBarStyle = await StatusBar.getStyle();
|
|
2348
|
+
setCardStatusBarDark();
|
|
2349
|
+
}
|
|
2350
|
+
await present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
|
|
2351
|
+
presentingEl: presentingElement,
|
|
2352
|
+
currentBreakpoint: this.initialBreakpoint,
|
|
2353
|
+
backdropBreakpoint: this.backdropBreakpoint,
|
|
2354
|
+
expandToScroll: this.expandToScroll,
|
|
2355
|
+
});
|
|
2356
|
+
}
|
|
2357
|
+
finally {
|
|
2358
|
+
this.isPresenting = false;
|
|
2278
2359
|
}
|
|
2279
|
-
await present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, {
|
|
2280
|
-
presentingEl: presentingElement,
|
|
2281
|
-
currentBreakpoint: this.initialBreakpoint,
|
|
2282
|
-
backdropBreakpoint: this.backdropBreakpoint,
|
|
2283
|
-
expandToScroll: this.expandToScroll,
|
|
2284
|
-
});
|
|
2285
2360
|
// Update safe-area based on actual position after animation
|
|
2286
2361
|
this.updateSafeAreaOverrides();
|
|
2287
2362
|
// Apply fullscreen safe-area padding if needed
|
|
@@ -2330,7 +2405,6 @@ const Modal = class {
|
|
|
2330
2405
|
unlock();
|
|
2331
2406
|
}
|
|
2332
2407
|
initSwipeToClose() {
|
|
2333
|
-
var _a;
|
|
2334
2408
|
if (getIonMode(this) !== 'ios') {
|
|
2335
2409
|
return;
|
|
2336
2410
|
}
|
|
@@ -2348,7 +2422,7 @@ const Modal = class {
|
|
|
2348
2422
|
printIonContentErrorMsg(el);
|
|
2349
2423
|
return;
|
|
2350
2424
|
}
|
|
2351
|
-
const statusBarStyle =
|
|
2425
|
+
const statusBarStyle = this.statusBarStyle ?? Style.Default;
|
|
2352
2426
|
this.gesture = createSwipeToCloseGesture(el, ani, statusBarStyle, () => this.cardOnDismiss(), () => this.onDragStart(), (detail) => this.onDragMove(detail), (detail) => this.onDragEnd(detail));
|
|
2353
2427
|
this.gesture.enable(true);
|
|
2354
2428
|
}
|
|
@@ -2365,7 +2439,7 @@ const Modal = class {
|
|
|
2365
2439
|
expandToScroll: this.expandToScroll,
|
|
2366
2440
|
}));
|
|
2367
2441
|
ani.progressStart(true, 1);
|
|
2368
|
-
const { gesture, moveSheetToBreakpoint } = createSheetGesture(this.el, this.backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, ani, this.sortedBreakpoints, this.expandToScroll, () =>
|
|
2442
|
+
const { gesture, moveSheetToBreakpoint, resetContentScroll } = createSheetGesture(this.el, this.backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, ani, this.sortedBreakpoints, this.expandToScroll, () => this.currentBreakpoint ?? 0, () => this.sheetOnDismiss(), (breakpoint) => {
|
|
2369
2443
|
if (this.currentBreakpoint !== breakpoint) {
|
|
2370
2444
|
this.currentBreakpoint = breakpoint;
|
|
2371
2445
|
this.ionBreakpointDidChange.emit({ breakpoint });
|
|
@@ -2373,6 +2447,7 @@ const Modal = class {
|
|
|
2373
2447
|
}, () => this.onDragStart(), (detail) => this.onDragMove(detail), (detail) => this.onDragEnd(detail));
|
|
2374
2448
|
this.gesture = gesture;
|
|
2375
2449
|
this.moveSheetToBreakpoint = moveSheetToBreakpoint;
|
|
2450
|
+
this.resetSheetContentScroll = resetContentScroll;
|
|
2376
2451
|
this.gesture.enable(true);
|
|
2377
2452
|
/**
|
|
2378
2453
|
* When backdrop interaction is allowed, nested router outlets from child routes
|
|
@@ -2390,7 +2465,6 @@ const Modal = class {
|
|
|
2390
2465
|
* passthrough on child route page wrappers and nested router outlets.
|
|
2391
2466
|
*/
|
|
2392
2467
|
setupChildRoutePassthrough() {
|
|
2393
|
-
var _a;
|
|
2394
2468
|
// Cache the page parent for cleanup
|
|
2395
2469
|
this.cachedPageParent = this.getOriginalPageParent();
|
|
2396
2470
|
const pageParent = this.cachedPageParent;
|
|
@@ -2398,14 +2472,11 @@ const Modal = class {
|
|
|
2398
2472
|
if (!pageParent || pageParent.tagName === 'ION-APP') {
|
|
2399
2473
|
return;
|
|
2400
2474
|
}
|
|
2401
|
-
const hasVisibleContent = Array.from(pageParent.children).some((child) =>
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
child.tagName !== 'SLOT' &&
|
|
2407
|
-
!(child.nodeType === Node.TEXT_NODE && !((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()));
|
|
2408
|
-
});
|
|
2475
|
+
const hasVisibleContent = Array.from(pageParent.children).some((child) => child !== this.el &&
|
|
2476
|
+
!(child instanceof HTMLElement && window.getComputedStyle(child).display === 'none') &&
|
|
2477
|
+
child.tagName !== 'TEMPLATE' &&
|
|
2478
|
+
child.tagName !== 'SLOT' &&
|
|
2479
|
+
!(child.nodeType === Node.TEXT_NODE && !child.textContent?.trim()));
|
|
2409
2480
|
if (hasVisibleContent) {
|
|
2410
2481
|
return;
|
|
2411
2482
|
}
|
|
@@ -2413,7 +2484,7 @@ const Modal = class {
|
|
|
2413
2484
|
pageParent.classList.add('ion-page-overlay-passthrough');
|
|
2414
2485
|
// Also make nested router outlets passthrough
|
|
2415
2486
|
const routerOutlet = pageParent.parentElement;
|
|
2416
|
-
if (
|
|
2487
|
+
if (routerOutlet?.tagName === 'ION-ROUTER-OUTLET' && routerOutlet.parentElement?.tagName !== 'ION-APP') {
|
|
2417
2488
|
routerOutlet.style.setProperty('pointer-events', 'none');
|
|
2418
2489
|
routerOutlet.setAttribute('data-overlay-passthrough', 'true');
|
|
2419
2490
|
}
|
|
@@ -2441,7 +2512,7 @@ const Modal = class {
|
|
|
2441
2512
|
}
|
|
2442
2513
|
pageParent.classList.remove('ion-page-overlay-passthrough');
|
|
2443
2514
|
const routerOutlet = pageParent.parentElement;
|
|
2444
|
-
if (routerOutlet
|
|
2515
|
+
if (routerOutlet?.hasAttribute('data-overlay-passthrough')) {
|
|
2445
2516
|
routerOutlet.style.removeProperty('pointer-events');
|
|
2446
2517
|
routerOutlet.removeAttribute('data-overlay-passthrough');
|
|
2447
2518
|
}
|
|
@@ -2504,7 +2575,6 @@ const Modal = class {
|
|
|
2504
2575
|
* For example, `cancel` or `backdrop`.
|
|
2505
2576
|
*/
|
|
2506
2577
|
async dismiss(data, role) {
|
|
2507
|
-
var _a;
|
|
2508
2578
|
if (this.gestureAnimationDismissing && role !== GESTURE) {
|
|
2509
2579
|
return false;
|
|
2510
2580
|
}
|
|
@@ -2549,7 +2619,7 @@ const Modal = class {
|
|
|
2549
2619
|
}
|
|
2550
2620
|
const dismissed = await dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, {
|
|
2551
2621
|
presentingEl: presentingElement,
|
|
2552
|
-
currentBreakpoint:
|
|
2622
|
+
currentBreakpoint: this.currentBreakpoint ?? this.initialBreakpoint,
|
|
2553
2623
|
backdropBreakpoint: this.backdropBreakpoint,
|
|
2554
2624
|
expandToScroll: this.expandToScroll,
|
|
2555
2625
|
});
|
|
@@ -2563,6 +2633,13 @@ const Modal = class {
|
|
|
2563
2633
|
if (this.gesture) {
|
|
2564
2634
|
this.gesture.destroy();
|
|
2565
2635
|
}
|
|
2636
|
+
/**
|
|
2637
|
+
* The sheet gesture turns content scrolling off while the sheet sits below
|
|
2638
|
+
* the top breakpoint. Inline modals reuse the same content on the next
|
|
2639
|
+
* present, so hand it back before the gesture goes away.
|
|
2640
|
+
*/
|
|
2641
|
+
this.resetSheetContentScroll?.();
|
|
2642
|
+
this.resetSheetContentScroll = undefined;
|
|
2566
2643
|
this.cleanupViewTransitionListener();
|
|
2567
2644
|
this.cleanupParentRemovalObserver();
|
|
2568
2645
|
this.cleanupSafeAreaOverrides();
|
|
@@ -2737,7 +2814,7 @@ const Modal = class {
|
|
|
2737
2814
|
wrapperEl.style.transform = 'translateY(0vh)';
|
|
2738
2815
|
wrapperEl.style.opacity = '1';
|
|
2739
2816
|
}
|
|
2740
|
-
if (
|
|
2817
|
+
if (presentingElement?.tagName === 'ION-MODAL') {
|
|
2741
2818
|
const isPortrait = window.innerWidth < 768;
|
|
2742
2819
|
if (isPortrait) {
|
|
2743
2820
|
const transformOffset = !CSS.supports('width', 'max(0px, 1px)')
|
|
@@ -2753,7 +2830,7 @@ const Modal = class {
|
|
|
2753
2830
|
}
|
|
2754
2831
|
async dismissNestedModals() {
|
|
2755
2832
|
const nestedModals = document.querySelectorAll(`ion-modal[data-parent-ion-modal="${this.el.id}"]`);
|
|
2756
|
-
nestedModals
|
|
2833
|
+
nestedModals?.forEach(async (modal) => {
|
|
2757
2834
|
await modal.dismiss(undefined, 'parent-dismissed');
|
|
2758
2835
|
});
|
|
2759
2836
|
}
|
|
@@ -2781,15 +2858,17 @@ const Modal = class {
|
|
|
2781
2858
|
this.cachedOriginalParent.tagName === 'ION-APP') {
|
|
2782
2859
|
return;
|
|
2783
2860
|
}
|
|
2861
|
+
// Both `present()` and a reconnect call this, so drop any existing
|
|
2862
|
+
// observer. Below the guards, so a call that bails cannot leave none.
|
|
2863
|
+
this.cleanupParentRemovalObserver();
|
|
2784
2864
|
this.parentRemovalObserver = new MutationObserver((mutations) => {
|
|
2785
2865
|
mutations.forEach((mutation) => {
|
|
2786
2866
|
if (mutation.type === 'childList' && mutation.removedNodes.length > 0) {
|
|
2787
2867
|
// Check if our cached original parent was removed
|
|
2788
2868
|
const cachedParentWasRemoved = Array.from(mutation.removedNodes).some((node) => {
|
|
2789
|
-
var _a, _b;
|
|
2790
2869
|
const isDirectMatch = node === this.cachedOriginalParent;
|
|
2791
2870
|
const isContainedMatch = this.cachedOriginalParent
|
|
2792
|
-
?
|
|
2871
|
+
? node.contains?.(this.cachedOriginalParent)
|
|
2793
2872
|
: false;
|
|
2794
2873
|
return isDirectMatch || isContainedMatch;
|
|
2795
2874
|
});
|
|
@@ -2811,8 +2890,7 @@ const Modal = class {
|
|
|
2811
2890
|
});
|
|
2812
2891
|
}
|
|
2813
2892
|
cleanupParentRemovalObserver() {
|
|
2814
|
-
|
|
2815
|
-
(_a = this.parentRemovalObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
2893
|
+
this.parentRemovalObserver?.disconnect();
|
|
2816
2894
|
this.parentRemovalObserver = undefined;
|
|
2817
2895
|
}
|
|
2818
2896
|
onDragStart() {
|
|
@@ -2852,22 +2930,30 @@ const Modal = class {
|
|
|
2852
2930
|
* sheets to prevent header content from getting double-offset padding).
|
|
2853
2931
|
*/
|
|
2854
2932
|
setInitialSafeAreaOverrides() {
|
|
2855
|
-
const context =
|
|
2933
|
+
const context = {
|
|
2934
|
+
...this.getSafeAreaContext(),
|
|
2935
|
+
hasCustomDimensions: hasCustomModalDimensions(this.el),
|
|
2936
|
+
};
|
|
2856
2937
|
const safeAreaConfig = getInitialSafeAreaConfig(context);
|
|
2857
2938
|
applySafeAreaOverrides(this.el, safeAreaConfig);
|
|
2858
2939
|
// Set the internal offset property with the resolved root safe-area-top value
|
|
2859
2940
|
if (context.isSheetModal) {
|
|
2860
2941
|
this.updateSheetOffsetTop();
|
|
2942
|
+
// A restore after a DOM move runs this a second time for the same
|
|
2943
|
+
// modal, so drop the previous subscription rather than stacking one.
|
|
2944
|
+
this.unsubscribeRootSafeAreaTop?.();
|
|
2945
|
+
this.unsubscribeRootSafeAreaTop = onRootSafeAreaTopChange((safeAreaTop) => this.updateSheetOffsetTop(safeAreaTop));
|
|
2861
2946
|
}
|
|
2862
2947
|
}
|
|
2863
2948
|
/**
|
|
2864
|
-
*
|
|
2865
|
-
*
|
|
2866
|
-
* Called on present
|
|
2949
|
+
* Sets the internal --ion-modal-offset-top property on the host element,
|
|
2950
|
+
* resolving the current root --ion-safe-area-top when no value is given.
|
|
2951
|
+
* Called on present, on resize (e.g., device rotation changes safe-area),
|
|
2952
|
+
* and whenever the root safe-area value itself changes.
|
|
2867
2953
|
*/
|
|
2868
|
-
updateSheetOffsetTop() {
|
|
2869
|
-
const
|
|
2870
|
-
this.el.style.setProperty('--ion-modal-offset-top', `${
|
|
2954
|
+
updateSheetOffsetTop(safeAreaTop) {
|
|
2955
|
+
const value = safeAreaTop ?? getRootSafeAreaTop();
|
|
2956
|
+
this.el.style.setProperty('--ion-modal-offset-top', `${value}px`);
|
|
2871
2957
|
}
|
|
2872
2958
|
/**
|
|
2873
2959
|
* Updates safe-area overrides during dynamic state changes.
|
|
@@ -2967,11 +3053,38 @@ const Modal = class {
|
|
|
2967
3053
|
*/
|
|
2968
3054
|
cleanupSafeAreaOverrides() {
|
|
2969
3055
|
clearSafeAreaOverrides(this.el);
|
|
3056
|
+
this.unsubscribeRootSafeAreaTop?.();
|
|
3057
|
+
this.unsubscribeRootSafeAreaTop = undefined;
|
|
2970
3058
|
// Remove internal sheet offset property
|
|
2971
3059
|
this.el.style.removeProperty('--ion-modal-offset-top');
|
|
2972
3060
|
const { contentEl } = this.findContentAndFooter();
|
|
2973
3061
|
this.clearContentSafeAreaPadding(contentEl);
|
|
2974
3062
|
}
|
|
3063
|
+
/**
|
|
3064
|
+
* Re-applies what `cleanupSafeAreaOverrides()` removed for a modal moved
|
|
3065
|
+
* while presented. Anything needing no measurement goes on synchronously so
|
|
3066
|
+
* the modal is never painted without safe-area. The position-based
|
|
3067
|
+
* correction waits a frame for the layout pass it reads.
|
|
3068
|
+
*/
|
|
3069
|
+
restoreSafeAreaOverrides() {
|
|
3070
|
+
this.setInitialSafeAreaOverrides();
|
|
3071
|
+
this.applyFullscreenSafeArea();
|
|
3072
|
+
raf(() => {
|
|
3073
|
+
// A dismiss or another move can land first, and a read before the enter
|
|
3074
|
+
// animation settles is not the rest position. `present()` redoes it.
|
|
3075
|
+
if (!this.presented || !this.el.isConnected || this.isPresenting) {
|
|
3076
|
+
return;
|
|
3077
|
+
}
|
|
3078
|
+
// A hidden subtree carries `display: none`, so there is no box and the
|
|
3079
|
+
// read would write the safe-area for a modal touching no edge. The
|
|
3080
|
+
// prediction applied above holds until the modal is shown again.
|
|
3081
|
+
const { width, height } = this.el.getBoundingClientRect();
|
|
3082
|
+
if (width === 0 && height === 0) {
|
|
3083
|
+
return;
|
|
3084
|
+
}
|
|
3085
|
+
this.updateSafeAreaOverrides();
|
|
3086
|
+
});
|
|
3087
|
+
}
|
|
2975
3088
|
render() {
|
|
2976
3089
|
const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap, expandToScroll, } = this;
|
|
2977
3090
|
const showHandle = handle !== false && isSheetModal;
|
|
@@ -2979,11 +3092,20 @@ const Modal = class {
|
|
|
2979
3092
|
const isCardModal = presentingElement !== undefined && mode === 'ios';
|
|
2980
3093
|
const isHandleCycle = handleBehavior === 'cycle';
|
|
2981
3094
|
const isSheetModalWithHandle = isSheetModal && showHandle;
|
|
2982
|
-
return (h(Host,
|
|
3095
|
+
return (h(Host, { key: '7c9c736052c5a788cf31040b6b2386dd9ea7454b', "no-router": true,
|
|
2983
3096
|
// Allow the modal to be navigable when the handle is focusable
|
|
2984
|
-
tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1
|
|
3097
|
+
tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1, ...htmlAttributes, style: {
|
|
2985
3098
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
2986
|
-
}, class:
|
|
3099
|
+
}, class: {
|
|
3100
|
+
[mode]: true,
|
|
3101
|
+
['modal-default']: !isCardModal && !isSheetModal,
|
|
3102
|
+
[`modal-card`]: isCardModal,
|
|
3103
|
+
[`modal-sheet`]: isSheetModal,
|
|
3104
|
+
[`modal-no-expand-scroll`]: isSheetModal && !expandToScroll,
|
|
3105
|
+
'overlay-hidden': true,
|
|
3106
|
+
[FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false,
|
|
3107
|
+
...getClassMap(this.cssClass),
|
|
3108
|
+
}, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, h("ion-backdrop", { key: '01b5b5765fb3a32393c736065c824bf760728823', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '40fa7727a0923f7d7461dd027f1511a6a148d84a', class: "modal-shadow" }), h("div", { key: '9af934b607f60795bd5bff7bee6eacfc9b14fa35',
|
|
2987
3109
|
/*
|
|
2988
3110
|
role and aria-modal must be used on the
|
|
2989
3111
|
same element. They must also be set inside the
|
|
@@ -2996,9 +3118,9 @@ const Modal = class {
|
|
|
2996
3118
|
without the tabindex focus() would be a no-op and screen readers
|
|
2997
3119
|
may not properly announce the dialog and its content when it opens.
|
|
2998
3120
|
*/
|
|
2999
|
-
role: "dialog"
|
|
3121
|
+
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: 'df84a6806413b13efc5b03c862edde83151579a7', class: "modal-handle",
|
|
3000
3122
|
// Prevents the handle from receiving keyboard focus when it does not cycle
|
|
3001
|
-
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: '
|
|
3123
|
+
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: '072d3929ec6f25481946b184d8ac24219011e783', onSlotchange: this.onSlotChange }))));
|
|
3002
3124
|
}
|
|
3003
3125
|
get el() { return getElement(this); }
|
|
3004
3126
|
static get watchers() { return {
|