@ionic/core 9.0.1-dev.11788212611.154b1596 → 9.0.1-dev.11788285010.17561004
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/{dist/ionic/p-BpG7jkT9.js → components/p-66ogmUZU.js} +1 -1
- package/components/p-6Vp915Y7.js +4 -0
- package/components/{p-B2L09UOs.js → p-7PNwKFZi.js} +1 -1
- package/components/{p-C8mPeq0D.js → p-A8MJRBIY.js} +1 -1
- package/components/p-AQcCdH2_.js +4 -0
- package/components/{p-DkEb3SCT.js → p-B6x5_b9w.js} +1 -1
- package/components/{p-CDKY4TZ_.js → p-B8MQjdvk.js} +1 -1
- package/components/{p-CLZPNP7x.js → p-BA_4ZIEg.js} +1 -1
- package/components/{p-CyKlfXdt.js → p-BFtL8t1r.js} +1 -1
- package/components/{p-RRH-7cpd.js → p-BMfgF-Tv.js} +1 -1
- package/components/{p-l-zxxFre.js → p-BPDxVIRr.js} +1 -1
- package/{dist/ionic/p-BC17SPKH.js → components/p-BSARlp49.js} +1 -1
- package/components/p-BdwCtX8Y.js +4 -0
- package/components/p-Bg4OwDwb.js +4 -0
- package/components/{p-CBhGZ6rF.js → p-BgUIV8NQ.js} +1 -1
- package/components/{p-CxiXpCtB.js → p-Bnc0m4SW.js} +1 -1
- package/components/{p-7qDu1bID.js → p-BpLt_Ptn.js} +1 -1
- package/components/{p-C12SAK00.js → p-BqBDq1Ma.js} +1 -1
- package/components/{p-mXsQnyWB.js → p-BrFaQbGY.js} +1 -1
- package/{dist/ionic/p-CoEa7CiN.js → components/p-BuPAFTWI.js} +1 -1
- package/components/{p-CB06XtlF.js → p-Bx2saTHs.js} +1 -1
- package/components/p-BxhE2W85.js +4 -0
- package/components/p-CHswSpKy.js +4 -0
- package/components/p-CQAjyETU.js +4 -0
- package/components/p-CR9OgE6N.js +4 -0
- package/components/{p-CEkamjav.js → p-CWETxTjE.js} +1 -1
- package/components/p-CaZeZIL2.js +4 -0
- package/components/{p-Dq1-WhnV.js → p-CaiZOhfC.js} +1 -1
- package/components/{p-BFwL2yyK.js → p-CgvDC7hC.js} +1 -1
- package/components/p-CqyGR9Aq.js +4 -0
- package/components/{p-DMkSsriG.js → p-D7ysFE2B.js} +1 -1
- package/components/p-DCWfzDM8.js +4 -0
- package/{dist/ionic/p-DA88iqXQ.js → components/p-DDdkefwf.js} +1 -1
- package/components/{p-CJTKYpZv.js → p-DEW7CnUc.js} +1 -1
- package/components/p-DQ1IPvZO.js +4 -0
- package/components/{p-BAJ7NctL.js → p-DcOH6-o5.js} +1 -1
- package/components/p-DfdYCsov.js +4 -0
- package/{dist/ionic/p-DoUx_N0R.js → components/p-DhOoEIAs.js} +1 -1
- package/components/p-Dl_7b_UJ.js +4 -0
- package/components/p-DqAI6tg7.js +4 -0
- package/components/p-DrehWDfv.js +4 -0
- package/components/{p-BWHBdLfY.js → p-DysqCsJu.js} +1 -1
- package/components/{p-BqE7e5gH.js → p-H1f2qsk4.js} +1 -1
- package/components/p-HVYBAhFx.js +4 -0
- package/components/{p-BE9noJ1O.js → p-Kmrg3Fed.js} +1 -1
- package/{dist/ionic/p-wdSUbx5C.js → components/p-RFfE9hF6.js} +1 -1
- package/components/{p-Bcm-GVQM.js → p-SR-LLqp_.js} +1 -1
- package/components/p-eFI3mtEX.js +4 -0
- package/components/{p-5rFO7X8J.js → p-gFwXiYC_.js} +1 -1
- package/components/{p-COxY7PLK.js → p-tX3UxCnU.js} +1 -1
- package/components/{p-VTfnz_8u.js → p-v2NpoOHp.js} +1 -1
- package/css/core.css +1 -1
- package/css/core.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/dist/cjs/{animation-ihPP_z2n.js → animation-D-OqR4a4.js} +1 -1
- package/dist/cjs/{app-globals-BlkzA410.js → app-globals-BzgwARwJ.js} +1 -1
- package/dist/cjs/{button-active-ItGBjzmO.js → button-active-BlWSD7uK.js} +1 -1
- package/dist/cjs/{format-CPIqtp4x.js → format-D7ig6Vm0.js} +1 -1
- package/dist/cjs/{framework-delegate-DhyWUPGg.js → framework-delegate-BZUx4TnE.js} +1 -1
- package/dist/cjs/{hardware-back-button-D5f_kASb.js → hardware-back-button-JOAEFSzc.js} +1 -1
- package/dist/cjs/{helpers-BCLkFTTd.js → helpers-Dj5o76mq.js} +1 -1
- package/dist/cjs/{index-CldjPPyP.js → index-2sO-zkZ2.js} +4 -4
- package/dist/cjs/{index-Bgz6BcKx.js → index-BrVMoqUk.js} +16 -50
- package/dist/cjs/{index-49DTLc_Z.js → index-C8zH6b3d.js} +2 -2
- package/dist/cjs/{index-BcyiqD6R.js → index-CZ6vzt_q.js} +5 -5
- package/dist/cjs/{index-xum7jdbq.js → index-Csue6G3m.js} +2 -2
- package/dist/cjs/{index-BocV_y-c.js → index-EJLjthTK.js} +1 -2
- package/dist/cjs/index.cjs.js +12 -12
- package/dist/cjs/{input-shims-Jisy7U7-.js → input-shims-Bh7bnt2v.js} +3 -3
- package/dist/cjs/{input.utils-BDTpGrfn.js → input.utils-Cq3g9uHy.js} +1 -1
- package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-action-sheet.cjs.entry.js +29 -45
- package/dist/cjs/ion-alert.cjs.entry.js +21 -29
- package/dist/cjs/ion-app_8.cjs.entry.js +16 -93
- package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-back-button.cjs.entry.js +3 -3
- package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-button_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-card_5.cjs.entry.js +3 -3
- package/dist/cjs/ion-checkbox.cjs.entry.js +4 -4
- package/dist/cjs/ion-chip.cjs.entry.js +2 -2
- package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
- package/dist/cjs/ion-datetime.cjs.entry.js +24 -32
- package/dist/cjs/ion-fab_3.cjs.entry.js +3 -3
- package/dist/cjs/ion-img.cjs.entry.js +3 -3
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +5 -5
- package/dist/cjs/ion-input-otp.cjs.entry.js +3 -3
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +2 -2
- package/dist/cjs/ion-input.cjs.entry.js +5 -5
- package/dist/cjs/ion-item-option_3.cjs.entry.js +15 -13
- package/dist/cjs/ion-item_8.cjs.entry.js +3 -3
- package/dist/cjs/ion-loading.cjs.entry.js +10 -14
- package/dist/cjs/ion-menu_3.cjs.entry.js +8 -8
- package/dist/cjs/ion-modal.cjs.entry.js +32 -85
- package/dist/cjs/ion-nav_2.cjs.entry.js +6 -6
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +3 -3
- package/dist/cjs/ion-picker-column.cjs.entry.js +46 -210
- package/dist/cjs/ion-picker.cjs.entry.js +2 -2
- package/dist/cjs/ion-popover.cjs.entry.js +10 -23
- package/dist/cjs/ion-progress-bar.cjs.entry.js +3 -3
- package/dist/cjs/ion-radio_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-range.cjs.entry.js +4 -4
- package/dist/cjs/ion-refresher_2.cjs.entry.js +6 -6
- package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
- package/dist/cjs/ion-route_4.cjs.entry.js +4 -4
- package/dist/cjs/ion-searchbar.cjs.entry.js +3 -3
- package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
- package/dist/cjs/ion-segment-view.cjs.entry.js +1 -1
- package/dist/cjs/ion-segment_2.cjs.entry.js +10 -14
- package/dist/cjs/ion-select-modal.cjs.entry.js +8 -8
- package/dist/cjs/ion-select_3.cjs.entry.js +47 -57
- package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
- package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-text.cjs.entry.js +2 -2
- package/dist/cjs/ion-textarea.cjs.entry.js +5 -5
- package/dist/cjs/ion-toast.cjs.entry.js +8 -8
- package/dist/cjs/ion-toggle.cjs.entry.js +4 -4
- package/dist/cjs/{ionic-global-BMU-Us1Q.js → ionic-global-DvgIzM2F.js} +1 -1
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-OCcCN--B.js → ios.transition-zIgdoSYe.js} +4 -4
- package/dist/cjs/{item-multiple-inputs-BH9yPC66.js → item-multiple-inputs-DG-ZGm6j.js} +1 -1
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/{md.transition-D0o2IIbo.js → md.transition-CXeJ9rfh.js} +4 -4
- package/dist/cjs/{overlays-HN9joo1Z.js → overlays-Bg0auTQa.js} +34 -59
- package/dist/cjs/{select-option-render-BPjGDlsG.js → select-option-render-7m1WdFzF.js} +2 -2
- package/dist/cjs/{slot-mutation-controller-IQ250LoG.js → slot-mutation-controller-BJEJzx_e.js} +1 -1
- package/dist/cjs/{status-tap-Bakl9czs.js → status-tap-DxbUM5XX.js} +3 -3
- package/dist/cjs/{swipe-back-Cv4OZVJ5.js → swipe-back-F_DBt-Aw.js} +2 -2
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/action-sheet/action-sheet.js +20 -36
- package/dist/collection/components/alert/alert.js +12 -20
- package/dist/collection/components/content/content.js +4 -81
- package/dist/collection/components/datetime/datetime.js +17 -25
- package/dist/collection/components/item-sliding/item-sliding.js +12 -10
- package/dist/collection/components/loading/loading.js +3 -7
- package/dist/collection/components/modal/modal.ios.css +1 -12
- package/dist/collection/components/modal/modal.js +22 -75
- package/dist/collection/components/modal/modal.md.css +1 -12
- package/dist/collection/components/picker-column/picker-column.js +43 -207
- package/dist/collection/components/popover/popover.js +3 -16
- package/dist/collection/components/segment-button/segment-button.js +7 -11
- package/dist/collection/components/select/select.js +39 -49
- package/dist/collection/utils/overlays.js +29 -53
- package/dist/collection/utils/test/playwright/index.js +0 -1
- package/dist/docs.json +48 -279
- package/dist/esm/{animation-B6KGUJwl.js → animation-TxGPYeDn.js} +1 -1
- package/dist/esm/{app-globals-BvutUX8P.js → app-globals-Do8rJest.js} +1 -1
- package/dist/esm/{button-active-DRNebs9r.js → button-active-ChA4D-ml.js} +1 -1
- package/dist/esm/{format-BF3btM7P.js → format-CVk5e_GP.js} +1 -1
- package/dist/esm/{framework-delegate-60cEIAgt.js → framework-delegate-DaLWnISz.js} +1 -1
- package/dist/esm/{hardware-back-button-rhkwRNk2.js → hardware-back-button-D8W4L0JP.js} +1 -1
- package/dist/esm/{helpers-DLLANtRS.js → helpers-BIgoInJU.js} +1 -1
- package/dist/esm/{index-DOrtAUWV.js → index-BmOR8tCv.js} +2 -2
- package/dist/esm/{index-D_7MeuVD.js → index-C5ZdL0qp.js} +5 -5
- package/dist/esm/{index-BZHVn0iF.js → index-C8Dsa6li.js} +4 -4
- package/dist/esm/{index-h81G-QbJ.js → index-CKYcsw8f.js} +16 -50
- package/dist/esm/{index-Bl4BUvBL.js → index-DHw2lZxe.js} +2 -2
- package/dist/esm/{index-JgU5uTSY.js → index-elneMH8y.js} +2 -2
- package/dist/esm/index.js +12 -12
- package/dist/esm/{input-shims-C2ipc_XX.js → input-shims-09NN97kF.js} +3 -3
- package/dist/esm/{input.utils-D-qoPjqr.js → input.utils-BxyH9l1w.js} +1 -1
- package/dist/esm/ion-accordion_2.entry.js +3 -3
- package/dist/esm/ion-action-sheet.entry.js +29 -45
- package/dist/esm/ion-alert.entry.js +21 -29
- package/dist/esm/ion-app_8.entry.js +16 -93
- package/dist/esm/ion-avatar_3.entry.js +2 -2
- package/dist/esm/ion-back-button.entry.js +3 -3
- package/dist/esm/ion-backdrop.entry.js +2 -2
- package/dist/esm/ion-breadcrumb_2.entry.js +3 -3
- package/dist/esm/ion-button_2.entry.js +3 -3
- package/dist/esm/ion-card_5.entry.js +3 -3
- package/dist/esm/ion-checkbox.entry.js +4 -4
- package/dist/esm/ion-chip.entry.js +2 -2
- package/dist/esm/ion-col_3.entry.js +2 -2
- package/dist/esm/ion-datetime-button.entry.js +4 -4
- package/dist/esm/ion-datetime.entry.js +24 -32
- package/dist/esm/ion-fab_3.entry.js +3 -3
- package/dist/esm/ion-img.entry.js +3 -3
- package/dist/esm/ion-infinite-scroll_2.entry.js +5 -5
- package/dist/esm/ion-input-otp.entry.js +3 -3
- package/dist/esm/ion-input-password-toggle.entry.js +2 -2
- package/dist/esm/ion-input.entry.js +5 -5
- package/dist/esm/ion-item-option_3.entry.js +15 -13
- package/dist/esm/ion-item_8.entry.js +3 -3
- package/dist/esm/ion-loading.entry.js +10 -14
- package/dist/esm/ion-menu_3.entry.js +8 -8
- package/dist/esm/ion-modal.entry.js +32 -85
- package/dist/esm/ion-nav_2.entry.js +6 -6
- package/dist/esm/ion-picker-column-option.entry.js +3 -3
- package/dist/esm/ion-picker-column.entry.js +47 -211
- package/dist/esm/ion-picker.entry.js +2 -2
- package/dist/esm/ion-popover.entry.js +10 -23
- package/dist/esm/ion-progress-bar.entry.js +3 -3
- package/dist/esm/ion-radio_2.entry.js +4 -4
- package/dist/esm/ion-range.entry.js +4 -4
- package/dist/esm/ion-refresher_2.entry.js +6 -6
- package/dist/esm/ion-reorder_2.entry.js +4 -4
- package/dist/esm/ion-ripple-effect.entry.js +2 -2
- package/dist/esm/ion-route_4.entry.js +4 -4
- package/dist/esm/ion-searchbar.entry.js +3 -3
- package/dist/esm/ion-segment-content.entry.js +1 -1
- package/dist/esm/ion-segment-view.entry.js +1 -1
- package/dist/esm/ion-segment_2.entry.js +10 -14
- package/dist/esm/ion-select-modal.entry.js +8 -8
- package/dist/esm/ion-select_3.entry.js +47 -57
- package/dist/esm/ion-spinner.entry.js +2 -2
- package/dist/esm/ion-split-pane.entry.js +2 -2
- package/dist/esm/ion-tab-bar_2.entry.js +3 -3
- package/dist/esm/ion-tab_2.entry.js +3 -3
- package/dist/esm/ion-text.entry.js +2 -2
- package/dist/esm/ion-textarea.entry.js +5 -5
- package/dist/esm/ion-toast.entry.js +8 -8
- package/dist/esm/ion-toggle.entry.js +4 -4
- package/dist/esm/{ionic-global-B7I1sdvg.js → ionic-global-lrowsHfi.js} +1 -1
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-C-6IaIxe.js → ios.transition-BQhADrk1.js} +4 -4
- package/dist/esm/{item-multiple-inputs-DI91syHS.js → item-multiple-inputs-D_N3fDkD.js} +1 -1
- package/dist/esm/loader.js +4 -4
- package/dist/esm/{md.transition-dyqt0t0d.js → md.transition-D58NpmRa.js} +4 -4
- package/dist/esm/{overlays-Dz2cGX5q.js → overlays-BpnIFlXI.js} +35 -59
- package/dist/esm/{select-option-render-CUJpruSC.js → select-option-render-lIuu64EV.js} +2 -2
- package/dist/esm/{slot-mutation-controller-wFuztlVD.js → slot-mutation-controller-rS_T3FDR.js} +1 -1
- package/dist/esm/{status-tap-Dn_42wiy.js → status-tap-CpFQMLl6.js} +3 -3
- package/dist/esm/{swipe-back-CqOqrHW7.js → swipe-back-rmc7zeNW.js} +2 -2
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-025763b2.entry.js → p-05800a02.entry.js} +1 -1
- package/dist/ionic/p-0eb50dca.entry.js +4 -0
- package/dist/ionic/{p-0b52d921.entry.js → p-16e9f542.entry.js} +1 -1
- package/dist/ionic/p-18d532a3.entry.js +4 -0
- package/dist/ionic/{p-a2fccdaa.entry.js → p-1db2afb4.entry.js} +1 -1
- package/dist/ionic/{p-5ed60413.entry.js → p-1df75f9e.entry.js} +1 -1
- package/dist/ionic/{p-2ff12c8a.entry.js → p-295ff427.entry.js} +1 -1
- package/dist/ionic/p-34b9379b.entry.js +4 -0
- package/dist/ionic/{p-cc749877.entry.js → p-39a8d4e0.entry.js} +1 -1
- package/dist/ionic/p-4437015c.entry.js +4 -0
- package/dist/ionic/{p-53ba5651.entry.js → p-478035a7.entry.js} +1 -1
- package/dist/ionic/{p-1a20571c.entry.js → p-485fb218.entry.js} +1 -1
- package/dist/ionic/p-48c859fe.entry.js +4 -0
- package/dist/ionic/p-49b9d405.entry.js +4 -0
- package/dist/ionic/{p-d1539609.entry.js → p-56307aea.entry.js} +1 -1
- package/dist/ionic/{p-eeb65463.entry.js → p-5ee2d7b1.entry.js} +1 -1
- package/dist/ionic/{p-ca57763d.entry.js → p-5f216b79.entry.js} +1 -1
- package/dist/ionic/{p-fb4dabbb.entry.js → p-61c799d1.entry.js} +1 -1
- package/dist/ionic/{p-fe80ebb1.entry.js → p-63bbba8d.entry.js} +1 -1
- package/dist/ionic/p-68507e70.entry.js +4 -0
- package/dist/ionic/{p-43bae3f5.entry.js → p-6f048604.entry.js} +1 -1
- package/dist/ionic/{p-dadcb3d2.entry.js → p-70ee8888.entry.js} +1 -1
- package/dist/ionic/{p-7c859f42.entry.js → p-72ad7c64.entry.js} +1 -1
- package/dist/ionic/{p-90e06e60.entry.js → p-75887ee0.entry.js} +1 -1
- package/dist/ionic/{p-bdc01880.entry.js → p-873a315a.entry.js} +1 -1
- package/dist/ionic/{p-f0645c98.entry.js → p-881b6954.entry.js} +1 -1
- package/dist/ionic/p-886d9e66.entry.js +4 -0
- package/dist/ionic/{p-5dc53bdf.entry.js → p-8dd4c026.entry.js} +1 -1
- package/dist/ionic/{p-9f2d3987.entry.js → p-8e007f11.entry.js} +1 -1
- package/dist/ionic/p-8f464a8f.entry.js +4 -0
- package/dist/ionic/p-8f51110d.entry.js +4 -0
- package/dist/ionic/{p-1f66c230.entry.js → p-90ba736e.entry.js} +1 -1
- package/dist/ionic/{p-8d72244b.entry.js → p-959df5f8.entry.js} +1 -1
- package/dist/ionic/{p-8e388a30.entry.js → p-9e455875.entry.js} +1 -1
- package/{components/p-BcuLPPAE.js → dist/ionic/p-9wczfs_v.js} +1 -1
- package/dist/ionic/{p-C10K-FJg.js → p-B1Y7LZhV.js} +1 -1
- package/dist/ionic/p-B5RyLYvl.js +4 -0
- package/dist/ionic/p-BQv5i5Kf.js +4 -0
- package/dist/ionic/{p-CH8tk7Pr.js → p-BZVE25Gu.js} +1 -1
- package/{components/p-CdSLe3Q3.js → dist/ionic/p-BZxjcGRP.js} +1 -1
- package/dist/ionic/p-BnGA34Pd.js +4 -0
- package/dist/ionic/{p-Q9w8L_Sw.js → p-ByLaqOPm.js} +1 -1
- package/dist/ionic/p-C06QNN45.js +4 -0
- package/dist/ionic/{p-KJ5pLPiN.js → p-C4IBDDj6.js} +1 -1
- package/dist/ionic/p-CCVlNZ__.js +4 -0
- package/dist/ionic/{p-CTBfxfjC.js → p-CDBop-kz.js} +1 -1
- package/dist/ionic/p-CKYcsw8f.js +5 -0
- package/dist/ionic/p-CazSodad.js +4 -0
- package/dist/ionic/{p-S1shXW5M.js → p-ClrlQU2y.js} +1 -1
- package/{components/p-DG-dUCKp.js → dist/ionic/p-D0dfUysx.js} +1 -1
- package/dist/ionic/{p-C2BY_4Wp.js → p-D9yvytgv.js} +1 -1
- package/{components/p-DH0rRXjx.js → dist/ionic/p-DF_Uqql8.js} +1 -1
- package/dist/ionic/{p-DMj-M2c4.js → p-DXJgZWgi.js} +1 -1
- package/dist/ionic/p-DdhHqKj-.js +4 -0
- package/dist/ionic/{p-BRc8gq5v.js → p-De0eY881.js} +1 -1
- package/dist/ionic/p-DgUL3JbO.js +4 -0
- package/dist/ionic/{p-06ZcwRF5.js → p-RzUn7cKs.js} +1 -1
- package/dist/ionic/p-VquyMbjp.js +4 -0
- package/dist/ionic/{p-2aabd568.entry.js → p-a0fee899.entry.js} +1 -1
- package/dist/ionic/{p-9e688396.entry.js → p-a54bcd16.entry.js} +1 -1
- package/dist/ionic/{p-eaeac54e.entry.js → p-aebc4d69.entry.js} +1 -1
- package/dist/ionic/{p-9452849d.entry.js → p-b5f37106.entry.js} +1 -1
- package/dist/ionic/{p-082b8125.entry.js → p-b62bfce8.entry.js} +1 -1
- package/dist/ionic/p-b7a11b58.entry.js +4 -0
- package/dist/ionic/{p-546b1109.entry.js → p-bbf6878c.entry.js} +1 -1
- package/dist/ionic/{p-e93cc1e1.entry.js → p-c49165af.entry.js} +1 -1
- package/dist/ionic/{p-9eba0d8a.entry.js → p-cad4eccf.entry.js} +1 -1
- package/dist/ionic/{p-d1b888de.entry.js → p-cdc5115e.entry.js} +1 -1
- package/dist/ionic/{p-47b8b59a.entry.js → p-d3384a40.entry.js} +1 -1
- package/dist/ionic/{p-f607ad4f.entry.js → p-d8bae128.entry.js} +1 -1
- package/dist/ionic/{p-026e2e4c.entry.js → p-d8deff43.entry.js} +1 -1
- package/dist/ionic/{p-6d84fa9f.entry.js → p-ddfb7e5f.entry.js} +1 -1
- package/dist/ionic/{p-ecfc9c71.entry.js → p-e538f18d.entry.js} +1 -1
- package/dist/ionic/{p-83aa7d47.entry.js → p-f376876b.entry.js} +1 -1
- package/dist/ionic/p-f521b13c.entry.js +4 -0
- package/dist/ionic/{p-ac71362a.entry.js → p-fbd83d4c.entry.js} +1 -1
- package/dist/types/components/action-sheet/action-sheet.d.ts +0 -10
- package/dist/types/components/alert/alert.d.ts +0 -7
- package/dist/types/components/content/content.d.ts +0 -24
- package/dist/types/components/modal/modal.d.ts +0 -8
- package/dist/types/components/picker-column/picker-column.d.ts +0 -42
- package/dist/types/components.d.ts +1 -1
- package/dist/types/stencil-public-runtime.d.ts +0 -12
- package/dist/types/utils/overlays.d.ts +0 -9
- package/dist/types/utils/test/playwright/index.d.ts +0 -1
- package/hydrate/index.js +213 -596
- package/hydrate/index.mjs +213 -596
- package/loader/index.d.ts +1 -1
- package/package.json +2 -2
- package/components/p-BhlP16sB.js +0 -4
- package/components/p-C8Tp0cQy.js +0 -4
- package/components/p-CFtAWaB6.js +0 -4
- package/components/p-CQxPXWNM.js +0 -4
- package/components/p-CRcX0EGs.js +0 -4
- package/components/p-CVNvmbDp.js +0 -4
- package/components/p-CXpy69Ei.js +0 -4
- package/components/p-CoGD-oMG.js +0 -4
- package/components/p-CpYeYl3u.js +0 -4
- package/components/p-D2XJVty5.js +0 -4
- package/components/p-D49fFp1g.js +0 -4
- package/components/p-DALTMT_o.js +0 -4
- package/components/p-Dr-rBSUW.js +0 -4
- package/components/p-MHpJ2A_m.js +0 -4
- package/components/p-QgdyH-Zs.js +0 -4
- package/components/p-UKksD3f9.js +0 -4
- package/components/p-fP0QF3iG.js +0 -4
- package/components/p-ntAkt4Ra.js +0 -4
- package/components/p-ufB0gCSU.js +0 -4
- package/components/p-z-BF3clL.js +0 -4
- package/dist/collection/utils/test/late-props/late-props.js +0 -69
- package/dist/collection/utils/test/playwright/detach-reattach.js +0 -23
- package/dist/ionic/p-010601fe.entry.js +0 -4
- package/dist/ionic/p-0c2b3555.entry.js +0 -4
- package/dist/ionic/p-26911da5.entry.js +0 -4
- package/dist/ionic/p-326e0d05.entry.js +0 -4
- package/dist/ionic/p-392079fa.entry.js +0 -4
- package/dist/ionic/p-4778b90f.entry.js +0 -4
- package/dist/ionic/p-7dec112e.entry.js +0 -4
- package/dist/ionic/p-9fef333a.entry.js +0 -4
- package/dist/ionic/p-BRa1Jjxr.js +0 -4
- package/dist/ionic/p-Cc-fFNy8.js +0 -4
- package/dist/ionic/p-Cc4w3fVf.js +0 -4
- package/dist/ionic/p-CvRL-Eju.js +0 -4
- package/dist/ionic/p-D_IgV7tz.js +0 -4
- package/dist/ionic/p-b8cd338d.entry.js +0 -4
- package/dist/ionic/p-d85e59b1.entry.js +0 -4
- package/dist/ionic/p-dad2f3e4.entry.js +0 -4
- package/dist/ionic/p-eab77a74.entry.js +0 -4
- package/dist/ionic/p-h81G-QbJ.js +0 -6
- package/dist/ionic/p-nxFQkv7U.js +0 -4
- package/dist/ionic/p-w3KTiug9.js +0 -4
- package/dist/types/utils/test/playwright/detach-reattach.d.ts +0 -13
package/hydrate/index.mjs
CHANGED
|
@@ -420,7 +420,7 @@ const appGlobalScript = initialize || (() => {});
|
|
|
420
420
|
const globalScripts = appGlobalScript;
|
|
421
421
|
|
|
422
422
|
/*
|
|
423
|
-
Stencil Hydrate Platform v4.
|
|
423
|
+
Stencil Hydrate Platform v4.43.5 | MIT Licensed | https://stenciljs.com
|
|
424
424
|
*/
|
|
425
425
|
var __create = Object.create;
|
|
426
426
|
var __defProp = Object.defineProperty;
|
|
@@ -755,8 +755,6 @@ var DEFAULT_DOC_DATA = {
|
|
|
755
755
|
};
|
|
756
756
|
var SLOT_FB_CSS = "slot-fb{display:contents}slot-fb[hidden]{display:none}";
|
|
757
757
|
var XLINK_NS = "http://www.w3.org/1999/xlink";
|
|
758
|
-
var MAX_LAZY_LOAD_RETRIES = 3;
|
|
759
|
-
var LAZY_LOAD_RETRY_INTERVAL_MS = 1e3;
|
|
760
758
|
|
|
761
759
|
// src/utils/style.ts
|
|
762
760
|
function createStyleSheetIfNeededAndSupported(styles2) {
|
|
@@ -820,7 +818,7 @@ function getHostSlotNodes(childNodes, hostName, slotName) {
|
|
|
820
818
|
slottedNodes.push(childNode);
|
|
821
819
|
if (typeof slotName !== "undefined") return slottedNodes;
|
|
822
820
|
}
|
|
823
|
-
slottedNodes = [...slottedNodes, ...getHostSlotNodes(
|
|
821
|
+
slottedNodes = [...slottedNodes, ...getHostSlotNodes(childNode.childNodes, hostName, slotName)];
|
|
824
822
|
}
|
|
825
823
|
return slottedNodes;
|
|
826
824
|
}
|
|
@@ -1064,11 +1062,6 @@ var h = (nodeName, vnodeData, ...children) => {
|
|
|
1064
1062
|
} else if (child != null && typeof child !== "boolean") {
|
|
1065
1063
|
if (simple = typeof nodeName !== "function" && !isComplexType(child)) {
|
|
1066
1064
|
child = String(child);
|
|
1067
|
-
} else if (typeof nodeName !== "function" && child.$flags$ === void 0) {
|
|
1068
|
-
{
|
|
1069
|
-
consoleError("Invalid vNode child");
|
|
1070
|
-
}
|
|
1071
|
-
continue;
|
|
1072
1065
|
}
|
|
1073
1066
|
if (simple && lastSimple) {
|
|
1074
1067
|
vNodeChildren[vNodeChildren.length - 1].$text$ += child;
|
|
@@ -2304,7 +2297,7 @@ var setAccessor = (elm, memberName, oldValue, newValue, isSvg, flags, initialRen
|
|
|
2304
2297
|
}
|
|
2305
2298
|
}
|
|
2306
2299
|
if (newValue == null || newValue === false) {
|
|
2307
|
-
if (newValue !== false || elm.getAttribute(memberName) === ""
|
|
2300
|
+
if (newValue !== false || elm.getAttribute(memberName) === "") {
|
|
2308
2301
|
if (xlink) {
|
|
2309
2302
|
elm.removeAttributeNS(XLINK_NS, memberName);
|
|
2310
2303
|
} else {
|
|
@@ -2321,8 +2314,6 @@ var setAccessor = (elm, memberName, oldValue, newValue, isSvg, flags, initialRen
|
|
|
2321
2314
|
}
|
|
2322
2315
|
}
|
|
2323
2316
|
};
|
|
2324
|
-
var ENUMERATED_ATTRIBUTES = /* @__PURE__ */ new Set(["draggable", "contenteditable", "spellcheck"]);
|
|
2325
|
-
var isEnumeratedAttribute = (attrName) => ENUMERATED_ATTRIBUTES.has(attrName) || attrName.startsWith("aria-");
|
|
2326
2317
|
var parseClassListRegex = /\s/;
|
|
2327
2318
|
var parseClassList = (value) => {
|
|
2328
2319
|
if (typeof value === "object" && value && "baseVal" in value) {
|
|
@@ -2725,10 +2716,7 @@ var markSlotContentForRelocation = (elm) => {
|
|
|
2725
2716
|
const slotName = childNode["s-sn"];
|
|
2726
2717
|
for (j = hostContentNodes.length - 1; j >= 0; j--) {
|
|
2727
2718
|
node = hostContentNodes[j];
|
|
2728
|
-
if (!node["s-cn"] && !node["s-nr"] && node["s-hn"] !== childNode["s-hn"] &&
|
|
2729
|
-
// `slotName === ''` itself - a matched default node's cached `s-sn` is `''` too, which
|
|
2730
|
-
// would trivially "match" on every re-render and force pointless re-insertion.
|
|
2731
|
-
(!node["s-sh"] || node["s-sh"] !== childNode["s-hn"] || slotName !== "" && getSlotName(node) === slotName)) {
|
|
2719
|
+
if (!node["s-cn"] && !node["s-nr"] && node["s-hn"] !== childNode["s-hn"] && (!node["s-sh"] || node["s-sh"] !== childNode["s-hn"])) {
|
|
2732
2720
|
if (isNodeLocatedInSlot(node, slotName)) {
|
|
2733
2721
|
let relocateNodeData = relocateNodes.find((r) => r.$nodeToRelocate$ === node);
|
|
2734
2722
|
checkSlotFallbackVisibility = true;
|
|
@@ -2798,7 +2786,7 @@ var insertBefore = (parent, newNode, reference, isInitialLoad) => {
|
|
|
2798
2786
|
return newNode;
|
|
2799
2787
|
}
|
|
2800
2788
|
}
|
|
2801
|
-
if (
|
|
2789
|
+
if (parent.__insertBefore) {
|
|
2802
2790
|
return parent.__insertBefore(newNode, reference);
|
|
2803
2791
|
} else {
|
|
2804
2792
|
return parent == null ? void 0 : parent.insertBefore(newNode, reference);
|
|
@@ -3303,12 +3291,10 @@ var proxyComponent = (Cstr, cmpMeta, flags) => {
|
|
|
3303
3291
|
|
|
3304
3292
|
// src/runtime/initialize-component.ts
|
|
3305
3293
|
var initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId) => {
|
|
3306
|
-
var _a2;
|
|
3307
3294
|
let Cstr;
|
|
3308
3295
|
try {
|
|
3309
3296
|
if ((hostRef.$flags$ & 32 /* hasInitializedComponent */) === 0) {
|
|
3310
3297
|
hostRef.$flags$ |= 32 /* hasInitializedComponent */;
|
|
3311
|
-
hostRef.$flags$ &= -1025 /* hasFailedLoad */;
|
|
3312
3298
|
const bundleId = cmpMeta.$lazyBundleId$;
|
|
3313
3299
|
if (bundleId) {
|
|
3314
3300
|
const CstrImport = loadModule(cmpMeta);
|
|
@@ -3320,11 +3306,6 @@ var initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId) => {
|
|
|
3320
3306
|
Cstr = CstrImport;
|
|
3321
3307
|
}
|
|
3322
3308
|
if (!Cstr) {
|
|
3323
|
-
hostRef.$flags$ &= -33 /* hasInitializedComponent */;
|
|
3324
|
-
hostRef.$loadRetryCount$ = ((_a2 = hostRef.$loadRetryCount$) != null ? _a2 : 0) + 1;
|
|
3325
|
-
if (hostRef.$loadRetryCount$ < MAX_LAZY_LOAD_RETRIES) {
|
|
3326
|
-
hostRef.$flags$ |= 1024 /* hasFailedLoad */;
|
|
3327
|
-
}
|
|
3328
3309
|
throw new Error(`Constructor for "${cmpMeta.$tagName$}#${hostRef.$modeName$}" was not found`);
|
|
3329
3310
|
}
|
|
3330
3311
|
if (!Cstr.isProxied) {
|
|
@@ -3404,7 +3385,7 @@ var initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId) => {
|
|
|
3404
3385
|
hostRef.$onRenderResolve$();
|
|
3405
3386
|
hostRef.$onRenderResolve$ = void 0;
|
|
3406
3387
|
}
|
|
3407
|
-
if (hostRef.$onReadyResolve$
|
|
3388
|
+
if (hostRef.$onReadyResolve$) {
|
|
3408
3389
|
hostRef.$onReadyResolve$(elm);
|
|
3409
3390
|
}
|
|
3410
3391
|
}
|
|
@@ -3463,8 +3444,6 @@ var connectedCallback = (elm) => {
|
|
|
3463
3444
|
addHostEventListeners(elm, hostRef, cmpMeta.$listeners$);
|
|
3464
3445
|
if (hostRef == null ? void 0 : hostRef.$lazyInstance$) {
|
|
3465
3446
|
fireConnectedCallback(hostRef.$lazyInstance$, elm);
|
|
3466
|
-
} else if (hostRef.$flags$ & 1024 /* hasFailedLoad */) {
|
|
3467
|
-
setTimeout(() => initializeComponent(elm, hostRef, cmpMeta), LAZY_LOAD_RETRY_INTERVAL_MS);
|
|
3468
3447
|
} else if (hostRef == null ? void 0 : hostRef.$onReadyPromise$) {
|
|
3469
3448
|
hostRef.$onReadyPromise$.then(() => fireConnectedCallback(hostRef.$lazyInstance$, elm));
|
|
3470
3449
|
}
|
|
@@ -7980,15 +7959,6 @@ const activeAnimations = new WeakMap();
|
|
|
7980
7959
|
const isBackdropAlwaysBlocking = (el) => {
|
|
7981
7960
|
return el.showBackdrop !== false && !((el.backdropBreakpoint ?? 0) > 0);
|
|
7982
7961
|
};
|
|
7983
|
-
/**
|
|
7984
|
-
* Whether the overlay takes the app root out of the accessibility tree and
|
|
7985
|
-
* blocks body scroll while presented. Toasts never do, modal and popover can
|
|
7986
|
-
* opt out with `focusTrap={false}`, and a backdrop that does not block
|
|
7987
|
-
* (`showBackdrop={false}`, or a `backdropBreakpoint` above 0) is excluded.
|
|
7988
|
-
*/
|
|
7989
|
-
const locksAppRoot = (el) => {
|
|
7990
|
-
return el.tagName !== 'ION-TOAST' && el.focusTrap !== false && isBackdropAlwaysBlocking(el);
|
|
7991
|
-
};
|
|
7992
7962
|
const createController = (tagName) => {
|
|
7993
7963
|
return {
|
|
7994
7964
|
create(options) {
|
|
@@ -8357,13 +8327,6 @@ const getPresentedOverlay = (doc, overlayTag, id) => {
|
|
|
8357
8327
|
// Otherwise, return the last overlay with the given id
|
|
8358
8328
|
return (id === undefined ? overlays : overlays.filter((o) => o.id === id)).slice(-1)[0];
|
|
8359
8329
|
};
|
|
8360
|
-
/**
|
|
8361
|
-
* The element an app nests its views under. Overlays hide this rather than the
|
|
8362
|
-
* whole root, so the overlay itself (a sibling) stays reachable.
|
|
8363
|
-
*/
|
|
8364
|
-
const getViewContainer = () => {
|
|
8365
|
-
return getAppRoot(document).querySelector('ion-router-outlet, #ion-view-container-root');
|
|
8366
|
-
};
|
|
8367
8330
|
/**
|
|
8368
8331
|
* When an overlay is presented, the main
|
|
8369
8332
|
* focus is the overlay not the page content.
|
|
@@ -8387,7 +8350,8 @@ const getViewContainer = () => {
|
|
|
8387
8350
|
* for main content.
|
|
8388
8351
|
*/
|
|
8389
8352
|
const setRootAriaHidden = (hidden = false) => {
|
|
8390
|
-
const
|
|
8353
|
+
const root = getAppRoot(document);
|
|
8354
|
+
const viewContainer = root.querySelector('ion-router-outlet, #ion-view-container-root');
|
|
8391
8355
|
if (!viewContainer) {
|
|
8392
8356
|
return;
|
|
8393
8357
|
}
|
|
@@ -8412,42 +8376,15 @@ const cleanupRootFocusTrapAccessibility = () => {
|
|
|
8412
8376
|
return;
|
|
8413
8377
|
}
|
|
8414
8378
|
const remainingOverlays = getPresentedOverlays(document);
|
|
8415
|
-
const hasRemainingLocking = remainingOverlays.some((o) =>
|
|
8379
|
+
const hasRemainingLocking = remainingOverlays.some((o) => {
|
|
8380
|
+
const el = o;
|
|
8381
|
+
return el.tagName !== 'ION-TOAST' && el.focusTrap !== false && isBackdropAlwaysBlocking(el);
|
|
8382
|
+
});
|
|
8416
8383
|
if (!hasRemainingLocking) {
|
|
8417
8384
|
setRootAriaHidden(false);
|
|
8418
8385
|
document.body.classList.remove(BACKDROP_NO_SCROLL);
|
|
8419
8386
|
}
|
|
8420
8387
|
};
|
|
8421
|
-
/**
|
|
8422
|
-
* Applies the root lock itself: `aria-hidden` on the view container, and
|
|
8423
|
-
* `backdrop-no-scroll` on the body. Shared by `present()` and the restore
|
|
8424
|
-
* below, which have to stay in lockstep.
|
|
8425
|
-
*/
|
|
8426
|
-
const applyRootLock = (el) => {
|
|
8427
|
-
// Hiding the container the overlay now sits in would hide the overlay too.
|
|
8428
|
-
if (!getViewContainer()?.contains(el)) {
|
|
8429
|
-
setRootAriaHidden(true);
|
|
8430
|
-
}
|
|
8431
|
-
document.body.classList.add(BACKDROP_NO_SCROLL);
|
|
8432
|
-
};
|
|
8433
|
-
/**
|
|
8434
|
-
* Re-applies the root lock that `cleanupRootFocusTrapAccessibility()` released.
|
|
8435
|
-
* Call from `connectedCallback` when the overlay is still presented.
|
|
8436
|
-
*
|
|
8437
|
-
* A synchronous move keeps the overlay connected, so the lock survives. A
|
|
8438
|
-
* detach with a re-insert in a later task releases it, which is the shape a
|
|
8439
|
-
* framework produces when it takes a subtree out and puts it back.
|
|
8440
|
-
*/
|
|
8441
|
-
const restoreRootFocusTrapAccessibility = (overlayEl) => {
|
|
8442
|
-
if (typeof document === 'undefined') {
|
|
8443
|
-
return;
|
|
8444
|
-
}
|
|
8445
|
-
const el = overlayEl;
|
|
8446
|
-
if (!locksAppRoot(el)) {
|
|
8447
|
-
return;
|
|
8448
|
-
}
|
|
8449
|
-
applyRootLock(el);
|
|
8450
|
-
};
|
|
8451
8388
|
const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts) => {
|
|
8452
8389
|
if (overlay.presented) {
|
|
8453
8390
|
return;
|
|
@@ -8464,7 +8401,15 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
|
|
|
8464
8401
|
restoreElementFocus(overlay.el);
|
|
8465
8402
|
}
|
|
8466
8403
|
/**
|
|
8467
|
-
*
|
|
8404
|
+
* Due to accessibility guidelines, toasts do not have
|
|
8405
|
+
* focus traps.
|
|
8406
|
+
*
|
|
8407
|
+
* All other overlays should have focus traps to prevent
|
|
8408
|
+
* the keyboard focus from leaving the overlay unless
|
|
8409
|
+
* developers explicitly opt out (for example, sheet
|
|
8410
|
+
* modals that should permit background interaction).
|
|
8411
|
+
*
|
|
8412
|
+
* Note: Some apps move inline overlays to a specific container
|
|
8468
8413
|
* during the willPresent lifecycle (e.g., React portals via
|
|
8469
8414
|
* onWillPresent). Defer applying aria-hidden/inert to the app
|
|
8470
8415
|
* root until after willPresent so we can detect where the
|
|
@@ -8473,11 +8418,18 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
|
|
|
8473
8418
|
* to avoid disabling the overlay.
|
|
8474
8419
|
*/
|
|
8475
8420
|
const overlayEl = overlay.el;
|
|
8476
|
-
const
|
|
8421
|
+
const shouldTrapFocus = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false;
|
|
8422
|
+
const shouldLockRoot = shouldTrapFocus && isBackdropAlwaysBlocking(overlayEl);
|
|
8477
8423
|
overlay.presented = true;
|
|
8478
8424
|
overlay.willPresent.emit();
|
|
8479
8425
|
if (shouldLockRoot) {
|
|
8480
|
-
|
|
8426
|
+
const root = getAppRoot(document);
|
|
8427
|
+
const viewContainer = root.querySelector('ion-router-outlet, #ion-view-container-root');
|
|
8428
|
+
const overlayInsideViewContainer = viewContainer ? viewContainer.contains(overlayEl) : false;
|
|
8429
|
+
if (!overlayInsideViewContainer) {
|
|
8430
|
+
setRootAriaHidden(true);
|
|
8431
|
+
}
|
|
8432
|
+
document.body.classList.add(BACKDROP_NO_SCROLL);
|
|
8481
8433
|
}
|
|
8482
8434
|
overlay.willPresentShorthand?.emit();
|
|
8483
8435
|
const mode = getIonMode$1(overlay);
|
|
@@ -8603,9 +8555,12 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
|
|
|
8603
8555
|
* from the root element when the last focus-trapping overlay
|
|
8604
8556
|
* is dismissed.
|
|
8605
8557
|
*/
|
|
8606
|
-
const overlaysLockingRoot = presentedOverlays.filter((o) =>
|
|
8558
|
+
const overlaysLockingRoot = presentedOverlays.filter((o) => {
|
|
8559
|
+
const el = o;
|
|
8560
|
+
return el.tagName !== 'ION-TOAST' && el.focusTrap !== false && isBackdropAlwaysBlocking(el);
|
|
8561
|
+
});
|
|
8607
8562
|
const overlayEl = overlay.el;
|
|
8608
|
-
const locksRoot =
|
|
8563
|
+
const locksRoot = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false && isBackdropAlwaysBlocking(overlayEl);
|
|
8609
8564
|
/**
|
|
8610
8565
|
* If this is the last visible overlay that is trapping focus
|
|
8611
8566
|
* then we want to re-add the root to the accessibility tree.
|
|
@@ -10601,13 +10556,6 @@ class ActionSheet {
|
|
|
10601
10556
|
connectedCallback() {
|
|
10602
10557
|
prepareOverlay(this.el);
|
|
10603
10558
|
this.triggerChanged();
|
|
10604
|
-
// `componentDidLoad` only fires once per instance, so a reconnect has to
|
|
10605
|
-
// rebuild the gesture its disconnect destroyed.
|
|
10606
|
-
this.setupButtonActiveGesture();
|
|
10607
|
-
// Re-apply the root lock if moved without dismiss() being called
|
|
10608
|
-
if (this.presented) {
|
|
10609
|
-
restoreRootFocusTrapAccessibility(this.el);
|
|
10610
|
-
}
|
|
10611
10559
|
}
|
|
10612
10560
|
disconnectedCallback() {
|
|
10613
10561
|
if (this.gesture) {
|
|
@@ -10627,33 +10575,24 @@ class ActionSheet {
|
|
|
10627
10575
|
// Initialize activeRadioId for radio buttons
|
|
10628
10576
|
this.buttonsChanged();
|
|
10629
10577
|
}
|
|
10630
|
-
|
|
10631
|
-
|
|
10632
|
-
|
|
10633
|
-
|
|
10634
|
-
|
|
10635
|
-
|
|
10636
|
-
|
|
10637
|
-
|
|
10638
|
-
*/
|
|
10639
|
-
setupButtonActiveGesture() {
|
|
10578
|
+
componentDidLoad() {
|
|
10579
|
+
/**
|
|
10580
|
+
* Only create gesture if:
|
|
10581
|
+
* 1. A gesture does not already exist
|
|
10582
|
+
* 2. App is running in iOS mode
|
|
10583
|
+
* 3. A wrapper ref exists
|
|
10584
|
+
* 4. A group ref exists
|
|
10585
|
+
*/
|
|
10640
10586
|
const { groupEl, wrapperEl } = this;
|
|
10641
|
-
if (getIonMode$1(this)
|
|
10642
|
-
|
|
10587
|
+
if (!this.gesture && getIonMode$1(this) === 'ios' && wrapperEl && groupEl) {
|
|
10588
|
+
readTask(() => {
|
|
10589
|
+
const isScrollable = groupEl.scrollHeight > groupEl.clientHeight;
|
|
10590
|
+
if (!isScrollable) {
|
|
10591
|
+
this.gesture = createButtonActiveGesture(wrapperEl, (refEl) => refEl.classList.contains('action-sheet-button'));
|
|
10592
|
+
this.gesture.enable(true);
|
|
10593
|
+
}
|
|
10594
|
+
});
|
|
10643
10595
|
}
|
|
10644
|
-
readTask(() => {
|
|
10645
|
-
// Bail if a call queued ahead of this one already built the gesture
|
|
10646
|
-
// (a second would orphan the first with its listeners still bound), if
|
|
10647
|
-
// the host disconnected while this task waited, or if the group scrolls.
|
|
10648
|
-
if (this.gesture || !this.el.isConnected || groupEl.scrollHeight > groupEl.clientHeight) {
|
|
10649
|
-
return;
|
|
10650
|
-
}
|
|
10651
|
-
this.gesture = createButtonActiveGesture(wrapperEl, (refEl) => refEl.classList.contains('action-sheet-button'));
|
|
10652
|
-
this.gesture.enable(true);
|
|
10653
|
-
});
|
|
10654
|
-
}
|
|
10655
|
-
componentDidLoad() {
|
|
10656
|
-
this.setupButtonActiveGesture();
|
|
10657
10596
|
/**
|
|
10658
10597
|
* If action sheet was rendered with isOpen="true"
|
|
10659
10598
|
* then we should open action sheet immediately.
|
|
@@ -10746,17 +10685,17 @@ class ActionSheet {
|
|
|
10746
10685
|
const cancelButton = allButtons.find((b) => b.role === 'cancel');
|
|
10747
10686
|
const buttons = allButtons.filter((b) => b.role !== 'cancel');
|
|
10748
10687
|
const headerID = `action-sheet-${overlayIndex}-header`;
|
|
10749
|
-
return (hAsync(Host, { key: '
|
|
10688
|
+
return (hAsync(Host, { key: '7685831da9a78b73473246a2cea95cefa79a53c3', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1", ...htmlAttributes, style: {
|
|
10750
10689
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
10751
10690
|
}, class: {
|
|
10752
10691
|
[mode]: true,
|
|
10753
10692
|
...getClassMap(this.cssClass),
|
|
10754
10693
|
'overlay-hidden': true,
|
|
10755
10694
|
'action-sheet-translucent': this.translucent,
|
|
10756
|
-
}, onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, hAsync("ion-backdrop", { key: '
|
|
10695
|
+
}, onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, hAsync("ion-backdrop", { key: 'c70f00e401cac99b89412d1adb867f35bc855d57', tappable: this.backdropDismiss }), hAsync("div", { key: '3332893ce3098f1435875480b1269b2821d41660', tabindex: "0", "aria-hidden": "true" }), hAsync("div", { key: 'eb406b0a9e303d6f94c5c7aa99c6f4c089bfbd41', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, hAsync("div", { key: '92ec855379f10e1e0bfce6ff68b45d3cda0c137c', class: "action-sheet-container" }, hAsync("div", { key: 'bc88a396d75396f574961471bf7e6c4edb513353', class: "action-sheet-group", ref: (el) => (this.groupEl = el), role: hasRadioButtons ? 'radiogroup' : undefined }, header !== undefined && (hAsync("div", { key: '33329e0193818888bdcaa443ff5ea301802e0787', id: headerID, class: {
|
|
10757
10696
|
'action-sheet-title': true,
|
|
10758
10697
|
'action-sheet-has-sub-title': this.subHeader !== undefined,
|
|
10759
|
-
} }, header, this.subHeader && hAsync("div", { key: '
|
|
10698
|
+
} }, header, this.subHeader && hAsync("div", { key: '92ac5a9217a12b7417f7aca9c4fdb7bf6b051364', class: "action-sheet-sub-title" }, this.subHeader))), this.renderActionSheetButtons(buttons)), cancelButton && (hAsync("div", { key: '020463b830fa48fc3ae647ea64f2aaa4d0969305', class: "action-sheet-group action-sheet-group-cancel" }, hAsync("button", { key: 'cefa9c70a2233f6652a81b1a2eae6e717712144d', ...cancelButton.htmlAttributes, type: "button", class: buttonClass$2(cancelButton), onClick: () => this.buttonClick(cancelButton) }, hAsync("span", { key: '56d7e2f8bfb3644e4476895164d334445fda9b2f', class: "action-sheet-button-inner" }, cancelButton.icon && (hAsync("ion-icon", { key: '6a4a49254ec5cd96f4e0dce9447f90d8cac81913', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && hAsync("ion-ripple-effect", { key: '7d3c6e8d70b0922ea0f75520856285ce1005c891' })))))), hAsync("div", { key: '958fc43e603c6a7f5d1e649d3326fce0f163b5d0', tabindex: "0", "aria-hidden": "true" })));
|
|
10760
10699
|
}
|
|
10761
10700
|
get el() { return getElement(this); }
|
|
10762
10701
|
static get watchers() { return {
|
|
@@ -11138,15 +11077,10 @@ class Alert {
|
|
|
11138
11077
|
this.triggerChanged();
|
|
11139
11078
|
/**
|
|
11140
11079
|
* If the alert was previously connected and is being reattached, the
|
|
11141
|
-
*
|
|
11142
|
-
*
|
|
11080
|
+
* ResizeObserver was disconnected. componentDidLoad only fires once per
|
|
11081
|
+
* instance, so re-establish the observer here on reconnect.
|
|
11143
11082
|
*/
|
|
11144
11083
|
this.setupButtonGroupResizeObserver();
|
|
11145
|
-
this.setupButtonActiveGesture();
|
|
11146
|
-
// Re-apply the root lock if moved without dismiss() being called
|
|
11147
|
-
if (this.presented) {
|
|
11148
|
-
restoreRootFocusTrapAccessibility(this.el);
|
|
11149
|
-
}
|
|
11150
11084
|
}
|
|
11151
11085
|
componentWillLoad() {
|
|
11152
11086
|
if (!this.htmlAttributes?.id) {
|
|
@@ -11168,20 +11102,17 @@ class Alert {
|
|
|
11168
11102
|
this.buttonGroupResizeObserver?.disconnect();
|
|
11169
11103
|
this.buttonGroupResizeObserver = undefined;
|
|
11170
11104
|
}
|
|
11171
|
-
|
|
11172
|
-
|
|
11173
|
-
|
|
11174
|
-
|
|
11175
|
-
|
|
11176
|
-
|
|
11177
|
-
|
|
11105
|
+
componentDidLoad() {
|
|
11106
|
+
/**
|
|
11107
|
+
* Only create gesture if:
|
|
11108
|
+
* 1. A gesture does not already exist
|
|
11109
|
+
* 2. App is running in iOS mode
|
|
11110
|
+
* 3. A wrapper ref exists
|
|
11111
|
+
*/
|
|
11178
11112
|
if (!this.gesture && getIonMode$1(this) === 'ios' && this.wrapperEl) {
|
|
11179
11113
|
this.gesture = createButtonActiveGesture(this.wrapperEl, (refEl) => refEl.classList.contains('alert-button'));
|
|
11180
11114
|
this.gesture.enable(true);
|
|
11181
11115
|
}
|
|
11182
|
-
}
|
|
11183
|
-
componentDidLoad() {
|
|
11184
|
-
this.setupButtonActiveGesture();
|
|
11185
11116
|
this.setupButtonGroupResizeObserver();
|
|
11186
11117
|
/**
|
|
11187
11118
|
* If alert was rendered with isOpen="true"
|
|
@@ -11502,14 +11433,14 @@ class Alert {
|
|
|
11502
11433
|
* If neither are defined, do not set aria-labelledby.
|
|
11503
11434
|
*/
|
|
11504
11435
|
const ariaLabelledBy = header && subHeader ? `${hdrId} ${subHdrId}` : header ? hdrId : subHeader ? subHdrId : null;
|
|
11505
|
-
return (hAsync(Host, { key: '
|
|
11436
|
+
return (hAsync(Host, { key: '022f3463b8e6c52064b90ec304c524847c3d5ad3', tabindex: "-1", style: {
|
|
11506
11437
|
zIndex: `${20000 + overlayIndex}`,
|
|
11507
11438
|
}, class: {
|
|
11508
11439
|
...getClassMap(this.cssClass),
|
|
11509
11440
|
[mode]: true,
|
|
11510
11441
|
'overlay-hidden': true,
|
|
11511
11442
|
'alert-translucent': this.translucent,
|
|
11512
|
-
}, onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, hAsync("ion-backdrop", { key: '
|
|
11443
|
+
}, onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, hAsync("ion-backdrop", { key: 'c3cd05738bc2834f54707edeb2fae06ec10d6fd2', tappable: this.backdropDismiss }), hAsync("div", { key: 'b44fadd9ba7ddf073854c5035538d11ae8e66bc2', tabindex: "0", "aria-hidden": "true" }), hAsync("div", { key: 'fafea048141a6c7957e62aef31faa8041dd610c1', class: "alert-wrapper ion-overlay-wrapper", role: role, "aria-modal": "true", "aria-labelledby": ariaLabelledBy, "aria-describedby": message !== undefined ? msgId : null, tabindex: "0", ref: (el) => (this.wrapperEl = el), ...htmlAttributes }, hAsync("div", { key: '3ad9d2d4b7cf425eab8293ddc12eff0fe8df1517', class: "alert-head" }, header && (hAsync("h2", { key: '7d9154f5ee595b7e4da6ecf3a20871f104c1256e', id: hdrId, class: "alert-title" }, header)), subHeader && !header && (hAsync("h2", { key: '1f891f38004be6964e9406b84dd580145c42516a', id: subHdrId, class: "alert-sub-title" }, subHeader)), subHeader && header && (hAsync("h3", { key: '2ab4d344ecb7e384e8f6d3d3e59ee5a1bbcc832c', id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), hAsync("div", { key: '78a4ff09aa3aaafcd0dc2a42d036767d83b3cfa2', tabindex: "0", "aria-hidden": "true" })));
|
|
11513
11444
|
}
|
|
11514
11445
|
get el() { return getElement(this); }
|
|
11515
11446
|
static get watchers() { return {
|
|
@@ -13507,7 +13438,6 @@ class Content {
|
|
|
13507
13438
|
this.cTop = -1;
|
|
13508
13439
|
this.cBottom = -1;
|
|
13509
13440
|
this.isMainContent = true;
|
|
13510
|
-
this.sizeToContent = false;
|
|
13511
13441
|
this.resizeTimeout = null;
|
|
13512
13442
|
this.inheritedAttributes = {};
|
|
13513
13443
|
this.tabsElement = null;
|
|
@@ -13604,7 +13534,6 @@ class Content {
|
|
|
13604
13534
|
}
|
|
13605
13535
|
// Re-observe on reattach, since componentDidLoad only fires once.
|
|
13606
13536
|
this.setupFullscreenResizeObserver();
|
|
13607
|
-
this.setupSizeToContentObserver();
|
|
13608
13537
|
}
|
|
13609
13538
|
componentDidLoad() {
|
|
13610
13539
|
// The custom elements build assigns fullscreen after connectedCallback.
|
|
@@ -13631,7 +13560,6 @@ class Content {
|
|
|
13631
13560
|
this.resizeTimeout = null;
|
|
13632
13561
|
}
|
|
13633
13562
|
this.destroyFullscreenResizeObserver();
|
|
13634
|
-
this.destroySizeToContentObserver();
|
|
13635
13563
|
}
|
|
13636
13564
|
/**
|
|
13637
13565
|
* Header and footer sizes can change after load without a window resize
|
|
@@ -13645,34 +13573,6 @@ class Content {
|
|
|
13645
13573
|
return;
|
|
13646
13574
|
}
|
|
13647
13575
|
}
|
|
13648
|
-
/**
|
|
13649
|
-
* A modal's `--height` can be changed at runtime with no event to react to,
|
|
13650
|
-
* either by setting the property directly or by toggling a class that changes
|
|
13651
|
-
* which rule wins. Both of those mutate an attribute on the modal, so watch
|
|
13652
|
-
* for that and re-evaluate. Viewport driven changes are already covered by
|
|
13653
|
-
* the `resize` listener.
|
|
13654
|
-
*/
|
|
13655
|
-
setupSizeToContentObserver() {
|
|
13656
|
-
{
|
|
13657
|
-
return;
|
|
13658
|
-
}
|
|
13659
|
-
}
|
|
13660
|
-
destroySizeToContentObserver() {
|
|
13661
|
-
if (this.sizeToContentObserver !== undefined) {
|
|
13662
|
-
this.sizeToContentObserver.disconnect();
|
|
13663
|
-
this.sizeToContentObserver = undefined;
|
|
13664
|
-
}
|
|
13665
|
-
}
|
|
13666
|
-
/**
|
|
13667
|
-
* Re-renders when the overlay is no longer sized the way the last render
|
|
13668
|
-
* assumed. Read in a `readTask` because resolving the custom property forces
|
|
13669
|
-
* a style recalculation.
|
|
13670
|
-
*/
|
|
13671
|
-
updateSizeToContent() {
|
|
13672
|
-
readTask(() => {
|
|
13673
|
-
if (this.shouldSizeToContent() !== this.sizeToContent) ;
|
|
13674
|
-
});
|
|
13675
|
-
}
|
|
13676
13576
|
destroyFullscreenResizeObserver() {
|
|
13677
13577
|
if (this.fullscreenResizeObserver !== undefined) {
|
|
13678
13578
|
this.fullscreenResizeObserver.disconnect();
|
|
@@ -13719,30 +13619,6 @@ class Content {
|
|
|
13719
13619
|
const mode = getIonMode$1(this);
|
|
13720
13620
|
return forceOverscroll === undefined ? mode === 'ios' && isPlatform('ios') : forceOverscroll;
|
|
13721
13621
|
}
|
|
13722
|
-
/**
|
|
13723
|
-
* Whether this component should size itself to its contents height, which
|
|
13724
|
-
* is the case inside any popover and inside a modal whose `--height` is a
|
|
13725
|
-
* content-based value. Those overlays give the content no definite height
|
|
13726
|
-
* to fill.
|
|
13727
|
-
*/
|
|
13728
|
-
shouldSizeToContent() {
|
|
13729
|
-
if (hostContext('ion-popover', this.el)) {
|
|
13730
|
-
return true;
|
|
13731
|
-
}
|
|
13732
|
-
const modal = this.el.closest('ion-modal');
|
|
13733
|
-
if (modal === null) {
|
|
13734
|
-
return false;
|
|
13735
|
-
}
|
|
13736
|
-
const height = getComputedStyle(modal).getPropertyValue('--height').trim();
|
|
13737
|
-
/**
|
|
13738
|
-
* Compared as a suffix so a value carrying only a vendor prefix is still
|
|
13739
|
-
* recognized, such as the `-moz-fit-content` that Firefox needs before 94.
|
|
13740
|
-
*
|
|
13741
|
-
* TODO: replace with `CONTENT_SIZED_HEIGHTS.includes(height)` once the
|
|
13742
|
-
* oldest supported Firefox is 94 or higher.
|
|
13743
|
-
*/
|
|
13744
|
-
return CONTENT_SIZED_HEIGHTS.some((value) => height.endsWith(value));
|
|
13745
|
-
}
|
|
13746
13622
|
resize() {
|
|
13747
13623
|
}
|
|
13748
13624
|
/**
|
|
@@ -13922,21 +13798,21 @@ class Content {
|
|
|
13922
13798
|
const forceOverscroll = this.shouldForceOverscroll();
|
|
13923
13799
|
const transitionShadow = mode === 'ios';
|
|
13924
13800
|
this.resize();
|
|
13925
|
-
return (hAsync(Host, { key: '
|
|
13801
|
+
return (hAsync(Host, { key: '9551c759df407b10d809171641fc6e8f14d92219', role: isMainContent ? 'main' : undefined, class: createColorClasses$1(this.color, {
|
|
13926
13802
|
[mode]: true,
|
|
13927
13803
|
'content-fullscreen': this.fullscreen,
|
|
13928
|
-
'content-sizing': (
|
|
13804
|
+
'content-sizing': hostContext('ion-popover', this.el),
|
|
13929
13805
|
overscroll: forceOverscroll,
|
|
13930
13806
|
[`content-${rtl}`]: true,
|
|
13931
13807
|
}), style: {
|
|
13932
13808
|
'--offset-top': `${this.cTop}px`,
|
|
13933
13809
|
'--offset-bottom': `${this.cBottom}px`,
|
|
13934
|
-
}, ...inheritedAttributes }, hAsync("div", { key: '
|
|
13810
|
+
}, ...inheritedAttributes }, hAsync("div", { key: 'c6de8fd226f0d10a534eb107fe032ac155fbe68e', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? hAsync("slot", { name: "fixed" }) : null, hAsync("div", { key: '082fc2936061360060b48221ecb1c864a3711fa0', class: {
|
|
13935
13811
|
'inner-scroll': true,
|
|
13936
13812
|
'scroll-x': scrollX,
|
|
13937
13813
|
'scroll-y': scrollY,
|
|
13938
13814
|
overscroll: (scrollX || scrollY) && forceOverscroll,
|
|
13939
|
-
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, hAsync("slot", { key: '
|
|
13815
|
+
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, hAsync("slot", { key: '0d2286206facb22696a9ca7e74a3f6b7d2397aab' })), transitionShadow ? (hAsync("div", { class: "transition-effect" }, hAsync("div", { class: "transition-cover" }), hAsync("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? hAsync("slot", { name: "fixed" }) : null));
|
|
13940
13816
|
}
|
|
13941
13817
|
get el() { return getElement(this); }
|
|
13942
13818
|
static get watchers() { return {
|
|
@@ -13969,11 +13845,6 @@ class Content {
|
|
|
13969
13845
|
"$attrsToReflect$": [["color", "color"]]
|
|
13970
13846
|
}; }
|
|
13971
13847
|
}
|
|
13972
|
-
/**
|
|
13973
|
-
* `ion-modal` `--height` values that size the modal to its contents, leaving
|
|
13974
|
-
* children an indefinite height to resolve against.
|
|
13975
|
-
*/
|
|
13976
|
-
const CONTENT_SIZED_HEIGHTS = ['auto', 'fit-content', 'min-content', 'max-content'];
|
|
13977
13848
|
const getParentElement = (el) => {
|
|
13978
13849
|
if (el.parentElement) {
|
|
13979
13850
|
// normal element with a parent element
|
|
@@ -17155,6 +17026,7 @@ class Datetime {
|
|
|
17155
17026
|
}
|
|
17156
17027
|
renderCombinedDatePickerColumn() {
|
|
17157
17028
|
const { defaultParts, disabled, workingParts, locale, minParts, maxParts, todayParts, isDateEnabled } = this;
|
|
17029
|
+
const activePart = this.getActivePartsWithFallback();
|
|
17158
17030
|
/**
|
|
17159
17031
|
* By default, generate a range of 3 months:
|
|
17160
17032
|
* Previous month, current month, and next month
|
|
@@ -17210,10 +17082,8 @@ class Datetime {
|
|
|
17210
17082
|
return (hAsync("ion-picker-column", { part: WHEEL_PART, "aria-label": "Select a date", class: "date-column", color: this.color, disabled: disabled, value: todayString, onIonChange: (ev) => {
|
|
17211
17083
|
const { value } = ev.detail;
|
|
17212
17084
|
const findPart = parts.find(({ month, day, year }) => value === `${year}-${month}-${day}`);
|
|
17213
|
-
// Read live so parts a sibling column just committed are included.
|
|
17214
|
-
const activePart = this.getActivePartsWithFallback();
|
|
17215
17085
|
this.setWorkingParts({
|
|
17216
|
-
...
|
|
17086
|
+
...workingParts,
|
|
17217
17087
|
...findPart,
|
|
17218
17088
|
});
|
|
17219
17089
|
this.setActiveParts({
|
|
@@ -17290,12 +17160,11 @@ class Datetime {
|
|
|
17290
17160
|
return [];
|
|
17291
17161
|
}
|
|
17292
17162
|
const { disabled, workingParts } = this;
|
|
17163
|
+
const activePart = this.getActivePartsWithFallback();
|
|
17293
17164
|
const pickerColumnValue = (workingParts.day !== null ? workingParts.day : this.defaultParts.day) ?? undefined;
|
|
17294
17165
|
return (hAsync("ion-picker-column", { part: WHEEL_PART, "aria-label": "Select a day", class: "day-column", color: this.color, disabled: disabled, value: pickerColumnValue, onIonChange: (ev) => {
|
|
17295
|
-
// Read live so parts a sibling column just committed are included.
|
|
17296
|
-
const activePart = this.getActivePartsWithFallback();
|
|
17297
17166
|
this.setWorkingParts({
|
|
17298
|
-
...
|
|
17167
|
+
...workingParts,
|
|
17299
17168
|
day: ev.detail.value,
|
|
17300
17169
|
});
|
|
17301
17170
|
this.setActiveParts({
|
|
@@ -17310,11 +17179,10 @@ class Datetime {
|
|
|
17310
17179
|
return [];
|
|
17311
17180
|
}
|
|
17312
17181
|
const { disabled, workingParts } = this;
|
|
17182
|
+
const activePart = this.getActivePartsWithFallback();
|
|
17313
17183
|
return (hAsync("ion-picker-column", { part: WHEEL_PART, "aria-label": "Select a month", class: "month-column", color: this.color, disabled: disabled, value: workingParts.month, onIonChange: (ev) => {
|
|
17314
|
-
// Read live so parts a sibling column just committed are included.
|
|
17315
|
-
const activePart = this.getActivePartsWithFallback();
|
|
17316
17184
|
this.setWorkingParts({
|
|
17317
|
-
...
|
|
17185
|
+
...workingParts,
|
|
17318
17186
|
month: ev.detail.value,
|
|
17319
17187
|
});
|
|
17320
17188
|
// Month wheel is navigation-only in multi-select mode as a fix for https://github.com/ionic-team/ionic-framework/issues/29673
|
|
@@ -17332,11 +17200,10 @@ class Datetime {
|
|
|
17332
17200
|
return [];
|
|
17333
17201
|
}
|
|
17334
17202
|
const { disabled, workingParts } = this;
|
|
17203
|
+
const activePart = this.getActivePartsWithFallback();
|
|
17335
17204
|
return (hAsync("ion-picker-column", { part: WHEEL_PART, "aria-label": "Select a year", class: "year-column", color: this.color, disabled: disabled, value: workingParts.year, onIonChange: (ev) => {
|
|
17336
|
-
// Read live so parts a sibling column just committed are included.
|
|
17337
|
-
const activePart = this.getActivePartsWithFallback();
|
|
17338
17205
|
this.setWorkingParts({
|
|
17339
|
-
...
|
|
17206
|
+
...workingParts,
|
|
17340
17207
|
year: ev.detail.value,
|
|
17341
17208
|
});
|
|
17342
17209
|
// Year wheel is navigation-only in multi-select mode as a fix for https://github.com/ionic-team/ionic-framework/issues/29673
|
|
@@ -17372,14 +17239,13 @@ class Datetime {
|
|
|
17372
17239
|
];
|
|
17373
17240
|
}
|
|
17374
17241
|
renderHourPickerColumn(hoursData) {
|
|
17375
|
-
const { disabled } = this;
|
|
17242
|
+
const { disabled, workingParts } = this;
|
|
17376
17243
|
if (hoursData.length === 0)
|
|
17377
17244
|
return [];
|
|
17378
17245
|
const activePart = this.getActivePartsWithFallback();
|
|
17379
17246
|
return (hAsync("ion-picker-column", { part: WHEEL_PART, "aria-label": "Select an hour", color: this.color, disabled: disabled, value: activePart.hour, numericInput: true, onIonChange: (ev) => {
|
|
17380
|
-
// Read live so parts a sibling column just committed are included.
|
|
17381
17247
|
this.setWorkingParts({
|
|
17382
|
-
...
|
|
17248
|
+
...workingParts,
|
|
17383
17249
|
hour: ev.detail.value,
|
|
17384
17250
|
});
|
|
17385
17251
|
this.setActiveParts({
|
|
@@ -17390,14 +17256,13 @@ class Datetime {
|
|
|
17390
17256
|
} }, hoursData.map((hour) => (hAsync("ion-picker-column-option", { color: this.color, part: hour.value === activePart.hour ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: hour.value, disabled: hour.disabled, value: hour.value }, hour.text)))));
|
|
17391
17257
|
}
|
|
17392
17258
|
renderMinutePickerColumn(minutesData) {
|
|
17393
|
-
const { disabled } = this;
|
|
17259
|
+
const { disabled, workingParts } = this;
|
|
17394
17260
|
if (minutesData.length === 0)
|
|
17395
17261
|
return [];
|
|
17396
17262
|
const activePart = this.getActivePartsWithFallback();
|
|
17397
17263
|
return (hAsync("ion-picker-column", { part: WHEEL_PART, "aria-label": "Select a minute", color: this.color, disabled: disabled, value: activePart.minute, numericInput: true, onIonChange: (ev) => {
|
|
17398
|
-
// Read live so parts a sibling column just committed are included.
|
|
17399
17264
|
this.setWorkingParts({
|
|
17400
|
-
...
|
|
17265
|
+
...workingParts,
|
|
17401
17266
|
minute: ev.detail.value,
|
|
17402
17267
|
});
|
|
17403
17268
|
this.setActiveParts({
|
|
@@ -17408,18 +17273,16 @@ class Datetime {
|
|
|
17408
17273
|
} }, minutesData.map((minute) => (hAsync("ion-picker-column-option", { color: this.color, part: minute.value === activePart.minute ? `${WHEEL_ITEM_PART} ${WHEEL_ITEM_ACTIVE_PART}` : WHEEL_ITEM_PART, key: minute.value, disabled: minute.disabled, value: minute.value }, minute.text)))));
|
|
17409
17274
|
}
|
|
17410
17275
|
renderDayPeriodPickerColumn(dayPeriodData) {
|
|
17411
|
-
const { disabled } = this;
|
|
17276
|
+
const { disabled, workingParts } = this;
|
|
17412
17277
|
if (dayPeriodData.length === 0) {
|
|
17413
17278
|
return [];
|
|
17414
17279
|
}
|
|
17415
17280
|
const activePart = this.getActivePartsWithFallback();
|
|
17416
17281
|
const isDayPeriodRTL = isLocaleDayPeriodRTL(this.locale);
|
|
17417
17282
|
return (hAsync("ion-picker-column", { part: WHEEL_PART, "aria-label": "Select a day period", style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, disabled: disabled, value: activePart.ampm, onIonChange: (ev) => {
|
|
17418
|
-
|
|
17419
|
-
const currentParts = this.workingParts;
|
|
17420
|
-
const hour = calculateHourFromAMPM(currentParts, ev.detail.value);
|
|
17283
|
+
const hour = calculateHourFromAMPM(workingParts, ev.detail.value);
|
|
17421
17284
|
this.setWorkingParts({
|
|
17422
|
-
...
|
|
17285
|
+
...workingParts,
|
|
17423
17286
|
ampm: ev.detail.value,
|
|
17424
17287
|
hour,
|
|
17425
17288
|
});
|
|
@@ -17771,7 +17634,7 @@ class Datetime {
|
|
|
17771
17634
|
const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
|
|
17772
17635
|
const hasWheelVariant = hasDatePresentation && preferWheel;
|
|
17773
17636
|
renderHiddenInput(true, el, name, formatValue(value), disabled);
|
|
17774
|
-
return (hAsync(Host, { key: '
|
|
17637
|
+
return (hAsync(Host, { key: 'd8e6dfe5e3bffb1c38a3e37b63b3aec099f40d29', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: {
|
|
17775
17638
|
...createColorClasses$1(color, {
|
|
17776
17639
|
[mode]: true,
|
|
17777
17640
|
['datetime-readonly']: readonly,
|
|
@@ -17783,7 +17646,7 @@ class Datetime {
|
|
|
17783
17646
|
[`datetime-prefer-wheel`]: hasWheelVariant,
|
|
17784
17647
|
[`datetime-grid`]: isGridStyle,
|
|
17785
17648
|
}),
|
|
17786
|
-
} }, hAsync("div", { key: '
|
|
17649
|
+
} }, hAsync("div", { key: '20889d3c68dd5109633c0e214411a63d6f3025bb', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
|
|
17787
17650
|
}
|
|
17788
17651
|
get el() { return getElement(this); }
|
|
17789
17652
|
static get watchers() { return {
|
|
@@ -22465,17 +22328,19 @@ class ItemSliding {
|
|
|
22465
22328
|
}
|
|
22466
22329
|
}
|
|
22467
22330
|
async updateOptions() {
|
|
22468
|
-
const options =
|
|
22469
|
-
/**
|
|
22470
|
-
* Frameworks that assign element props after inserting the element haven't set
|
|
22471
|
-
* `side` while `connectedCallback` runs, so reading it any earlier reports every
|
|
22472
|
-
* option as `end`.
|
|
22473
|
-
*/
|
|
22474
|
-
await Promise.all(options.map((option) => new Promise((resolve) => componentOnReady(option, resolve))));
|
|
22331
|
+
const options = this.el.querySelectorAll('ion-item-options');
|
|
22475
22332
|
let sides = 0;
|
|
22476
22333
|
// Reset left and right options in case they were removed
|
|
22477
22334
|
this.leftOptions = this.rightOptions = undefined;
|
|
22478
|
-
for (
|
|
22335
|
+
for (let i = 0; i < options.length; i++) {
|
|
22336
|
+
const item = options.item(i);
|
|
22337
|
+
/**
|
|
22338
|
+
* We cannot use the componentOnReady helper
|
|
22339
|
+
* util here since we need to wait for all of these items
|
|
22340
|
+
* to be ready before we set `this.sides` and `this.optsDirty`.
|
|
22341
|
+
*/
|
|
22342
|
+
// eslint-disable-next-line custom-rules/no-component-on-ready-method
|
|
22343
|
+
const option = item.componentOnReady !== undefined ? await item.componentOnReady() : item;
|
|
22479
22344
|
const side = isEndSide(option.side ?? option.getAttribute('side')) ? 'end' : 'start';
|
|
22480
22345
|
if (side === 'start') {
|
|
22481
22346
|
this.leftOptions = option;
|
|
@@ -22674,7 +22539,7 @@ class ItemSliding {
|
|
|
22674
22539
|
}
|
|
22675
22540
|
render() {
|
|
22676
22541
|
const mode = getIonMode$1(this);
|
|
22677
|
-
return (hAsync(Host, { key: '
|
|
22542
|
+
return (hAsync(Host, { key: '15f6a98f8c888e86c29827cdf55d98ace08699dd', class: {
|
|
22678
22543
|
[mode]: true,
|
|
22679
22544
|
'item-sliding-active-slide': this.state !== 2 /* SlidingState.Disabled */,
|
|
22680
22545
|
'item-sliding-active-options-end': (this.state & 8 /* SlidingState.End */) !== 0,
|
|
@@ -23087,10 +22952,6 @@ class Loading {
|
|
|
23087
22952
|
connectedCallback() {
|
|
23088
22953
|
prepareOverlay(this.el);
|
|
23089
22954
|
this.triggerChanged();
|
|
23090
|
-
// Re-apply the root lock if moved without dismiss() being called
|
|
23091
|
-
if (this.presented) {
|
|
23092
|
-
restoreRootFocusTrapAccessibility(this.el);
|
|
23093
|
-
}
|
|
23094
22955
|
}
|
|
23095
22956
|
componentWillLoad() {
|
|
23096
22957
|
if (this.spinner === undefined) {
|
|
@@ -23191,14 +23052,14 @@ class Loading {
|
|
|
23191
23052
|
* Otherwise, don't set aria-labelledby.
|
|
23192
23053
|
*/
|
|
23193
23054
|
const ariaLabelledBy = message !== undefined ? msgId : null;
|
|
23194
|
-
return (hAsync(Host, { key: '
|
|
23055
|
+
return (hAsync(Host, { key: '2d14122ff3081de73631a7fdd4affdd5c73b8618', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1", ...htmlAttributes, style: {
|
|
23195
23056
|
zIndex: `${40000 + this.overlayIndex}`,
|
|
23196
23057
|
}, onIonBackdropTap: this.onBackdropTap, class: {
|
|
23197
23058
|
...getClassMap(this.cssClass),
|
|
23198
23059
|
[mode]: true,
|
|
23199
23060
|
'overlay-hidden': true,
|
|
23200
23061
|
'loading-translucent': this.translucent,
|
|
23201
|
-
} }, hAsync("ion-backdrop", { key: '
|
|
23062
|
+
} }, hAsync("ion-backdrop", { key: 'b7d5bb0d670a20c159d7f67327bf3b1489449188', visible: this.showBackdrop, tappable: this.backdropDismiss }), hAsync("div", { key: '085ce92bd2004d323ab47eb472b83826e48dc619', tabindex: "0", "aria-hidden": "true" }), hAsync("div", { key: '4ecd5bfc0bbd3da434d32f0f319f867a44c5e1f1', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (hAsync("div", { key: '5a4498e1421e09d01c0ee4312eae5272e95c3127', class: "loading-spinner" }, hAsync("ion-spinner", { key: '1b3bc7d45d775195657ead3535f65e6b79f37e84', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), hAsync("div", { key: 'bc7c5467b9f1c6ab957f79934e97acc713bdec37', tabindex: "0", "aria-hidden": "true" })));
|
|
23202
23063
|
}
|
|
23203
23064
|
get el() { return getElement(this); }
|
|
23204
23065
|
static get watchers() { return {
|
|
@@ -26719,9 +26580,9 @@ const clearSafeAreaOverrides = (hostEl) => {
|
|
|
26719
26580
|
hostEl.style.removeProperty('--ion-safe-area-right');
|
|
26720
26581
|
};
|
|
26721
26582
|
|
|
26722
|
-
const modalIosCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:
|
|
26583
|
+
const modalIosCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-wrapper{outline:none}.modal-shadow{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:""}:host(.modal-sheet){--height:calc(100% - (var(--ion-modal-offset-top, 0px) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.4)}:host(.modal-card),:host(.modal-sheet){--border-radius:10px}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:10px}}.modal-wrapper{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}@media screen and (max-width: 767px){@supports (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - max(30px, var(--ion-safe-area-top)) - 10px)}}@supports not (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - 40px)}}:host(.modal-card) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-card){--backdrop-opacity:0;--width:100%;-ms-flex-align:end;align-items:flex-end}:host(.modal-card) .modal-shadow{display:none}:host(.modal-card) ion-backdrop{pointer-events:none}}@media screen and (min-width: 768px){:host(.modal-card){--width:calc(100% - 120px);--height:calc(100% - (120px + var(--ion-safe-area-top) + var(--ion-safe-area-bottom)));--max-width:720px;--max-height:1000px;--backdrop-opacity:0;--box-shadow:0px 0px 30px 10px rgba(0, 0, 0, 0.1);-webkit-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out}:host(.modal-card) .modal-wrapper{-webkit-box-shadow:none;box-shadow:none}:host(.modal-card) .modal-shadow{-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}}:host(.modal-sheet) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}`;
|
|
26723
26584
|
|
|
26724
|
-
const modalMdCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:
|
|
26585
|
+
const modalMdCss = () => `:host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-wrapper{outline:none}.modal-shadow{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:""}:host(.modal-sheet){--height:calc(100% - (var(--ion-modal-offset-top, 0px) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.32)}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:2px;--box-shadow:0 28px 48px rgba(0, 0, 0, 0.4)}}.modal-wrapper{-webkit-transform:translate3d(0, 40px, 0);transform:translate3d(0, 40px, 0);opacity:0.01}`;
|
|
26725
26586
|
|
|
26726
26587
|
// TODO(FW-2832): types
|
|
26727
26588
|
/**
|
|
@@ -26757,9 +26618,6 @@ class Modal {
|
|
|
26757
26618
|
this.inline = false;
|
|
26758
26619
|
// Whether or not modal is being dismissed via gesture
|
|
26759
26620
|
this.gestureAnimationDismissing = false;
|
|
26760
|
-
// True from the first safe-area write in `present()` until the enter
|
|
26761
|
-
// animation settles. A position-based read in that window is not the rest position.
|
|
26762
|
-
this.isPresenting = false;
|
|
26763
26621
|
this.presented = false;
|
|
26764
26622
|
/** @internal */
|
|
26765
26623
|
this.hasController = false;
|
|
@@ -26996,17 +26854,6 @@ class Modal {
|
|
|
26996
26854
|
const { el } = this;
|
|
26997
26855
|
prepareOverlay(el);
|
|
26998
26856
|
this.triggerChanged();
|
|
26999
|
-
// A disconnect tears down state this presentation still needs and cannot
|
|
27000
|
-
// tell a re-insert from a removal, so put it back.
|
|
27001
|
-
if (this.presented || this.isPresenting) {
|
|
27002
|
-
this.restoreSafeAreaOverrides();
|
|
27003
|
-
}
|
|
27004
|
-
// A relocation from `willPresent` reaches these before `present()` has
|
|
27005
|
-
// applied the lock, so they apply it instead. Both are idempotent.
|
|
27006
|
-
if (this.presented) {
|
|
27007
|
-
restoreRootFocusTrapAccessibility(el);
|
|
27008
|
-
this.initParentRemovalObserver();
|
|
27009
|
-
}
|
|
27010
26857
|
}
|
|
27011
26858
|
disconnectedCallback() {
|
|
27012
26859
|
this.triggerController.removeClickListener();
|
|
@@ -27184,33 +27031,25 @@ class Modal {
|
|
|
27184
27031
|
// Recalculate isSheetModal before safe-area setup because framework
|
|
27185
27032
|
// bindings (e.g., Angular) may not have been applied when componentWillLoad ran.
|
|
27186
27033
|
this.isSheetModal = this.breakpoints !== undefined && this.initialBreakpoint !== undefined;
|
|
27187
|
-
|
|
27034
|
+
// Set initial safe-area overrides before animation
|
|
27035
|
+
this.setInitialSafeAreaOverrides();
|
|
27188
27036
|
const hasCardModal = presentingElement !== undefined;
|
|
27189
|
-
|
|
27190
|
-
|
|
27191
|
-
|
|
27192
|
-
|
|
27193
|
-
|
|
27194
|
-
|
|
27195
|
-
|
|
27196
|
-
|
|
27197
|
-
|
|
27198
|
-
*/
|
|
27199
|
-
if (hasCardModal && getIonMode$1(this) === 'ios') {
|
|
27200
|
-
// Cache the original status bar color before the modal is presented
|
|
27201
|
-
this.statusBarStyle = await StatusBar.getStyle();
|
|
27202
|
-
setCardStatusBarDark();
|
|
27203
|
-
}
|
|
27204
|
-
await present(this, 'modalEnter', iosEnterAnimation$2, mdEnterAnimation$2, {
|
|
27205
|
-
presentingEl: presentingElement,
|
|
27206
|
-
currentBreakpoint: this.initialBreakpoint,
|
|
27207
|
-
backdropBreakpoint: this.backdropBreakpoint,
|
|
27208
|
-
expandToScroll: this.expandToScroll,
|
|
27209
|
-
});
|
|
27210
|
-
}
|
|
27211
|
-
finally {
|
|
27212
|
-
this.isPresenting = false;
|
|
27037
|
+
/**
|
|
27038
|
+
* We need to change the status bar at the
|
|
27039
|
+
* start of the animation so that it completes
|
|
27040
|
+
* by the time the card animation is done.
|
|
27041
|
+
*/
|
|
27042
|
+
if (hasCardModal && getIonMode$1(this) === 'ios') {
|
|
27043
|
+
// Cache the original status bar color before the modal is presented
|
|
27044
|
+
this.statusBarStyle = await StatusBar.getStyle();
|
|
27045
|
+
setCardStatusBarDark();
|
|
27213
27046
|
}
|
|
27047
|
+
await present(this, 'modalEnter', iosEnterAnimation$2, mdEnterAnimation$2, {
|
|
27048
|
+
presentingEl: presentingElement,
|
|
27049
|
+
currentBreakpoint: this.initialBreakpoint,
|
|
27050
|
+
backdropBreakpoint: this.backdropBreakpoint,
|
|
27051
|
+
expandToScroll: this.expandToScroll,
|
|
27052
|
+
});
|
|
27214
27053
|
// Update safe-area based on actual position after animation
|
|
27215
27054
|
this.updateSafeAreaOverrides();
|
|
27216
27055
|
// Apply fullscreen safe-area padding if needed
|
|
@@ -27712,9 +27551,6 @@ class Modal {
|
|
|
27712
27551
|
this.cachedOriginalParent.tagName === 'ION-APP') {
|
|
27713
27552
|
return;
|
|
27714
27553
|
}
|
|
27715
|
-
// Both `present()` and a reconnect call this, so drop any existing
|
|
27716
|
-
// observer. Below the guards, so a call that bails cannot leave none.
|
|
27717
|
-
this.cleanupParentRemovalObserver();
|
|
27718
27554
|
this.parentRemovalObserver = new MutationObserver((mutations) => {
|
|
27719
27555
|
mutations.forEach((mutation) => {
|
|
27720
27556
|
if (mutation.type === 'childList' && mutation.removedNodes.length > 0) {
|
|
@@ -27793,9 +27629,6 @@ class Modal {
|
|
|
27793
27629
|
// Set the internal offset property with the resolved root safe-area-top value
|
|
27794
27630
|
if (context.isSheetModal) {
|
|
27795
27631
|
this.updateSheetOffsetTop();
|
|
27796
|
-
// A restore after a DOM move runs this a second time for the same
|
|
27797
|
-
// modal, so drop the previous subscription rather than stacking one.
|
|
27798
|
-
this.unsubscribeRootSafeAreaTop?.();
|
|
27799
27632
|
this.unsubscribeRootSafeAreaTop = onRootSafeAreaTopChange((safeAreaTop) => this.updateSheetOffsetTop(safeAreaTop));
|
|
27800
27633
|
}
|
|
27801
27634
|
}
|
|
@@ -27914,31 +27747,6 @@ class Modal {
|
|
|
27914
27747
|
const { contentEl } = this.findContentAndFooter();
|
|
27915
27748
|
this.clearContentSafeAreaPadding(contentEl);
|
|
27916
27749
|
}
|
|
27917
|
-
/**
|
|
27918
|
-
* Re-applies what `cleanupSafeAreaOverrides()` removed for a modal moved
|
|
27919
|
-
* while presented. Anything needing no measurement goes on synchronously so
|
|
27920
|
-
* the modal is never painted without safe-area. The position-based
|
|
27921
|
-
* correction waits a frame for the layout pass it reads.
|
|
27922
|
-
*/
|
|
27923
|
-
restoreSafeAreaOverrides() {
|
|
27924
|
-
this.setInitialSafeAreaOverrides();
|
|
27925
|
-
this.applyFullscreenSafeArea();
|
|
27926
|
-
raf(() => {
|
|
27927
|
-
// A dismiss or another move can land first, and a read before the enter
|
|
27928
|
-
// animation settles is not the rest position. `present()` redoes it.
|
|
27929
|
-
if (!this.presented || !this.el.isConnected || this.isPresenting) {
|
|
27930
|
-
return;
|
|
27931
|
-
}
|
|
27932
|
-
// A hidden subtree carries `display: none`, so there is no box and the
|
|
27933
|
-
// read would write the safe-area for a modal touching no edge. The
|
|
27934
|
-
// prediction applied above holds until the modal is shown again.
|
|
27935
|
-
const { width, height } = this.el.getBoundingClientRect();
|
|
27936
|
-
if (width === 0 && height === 0) {
|
|
27937
|
-
return;
|
|
27938
|
-
}
|
|
27939
|
-
this.updateSafeAreaOverrides();
|
|
27940
|
-
});
|
|
27941
|
-
}
|
|
27942
27750
|
render() {
|
|
27943
27751
|
const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap, expandToScroll, } = this;
|
|
27944
27752
|
const showHandle = handle !== false && isSheetModal;
|
|
@@ -27946,7 +27754,7 @@ class Modal {
|
|
|
27946
27754
|
const isCardModal = presentingElement !== undefined && mode === 'ios';
|
|
27947
27755
|
const isHandleCycle = handleBehavior === 'cycle';
|
|
27948
27756
|
const isSheetModalWithHandle = isSheetModal && showHandle;
|
|
27949
|
-
return (hAsync(Host, { key: '
|
|
27757
|
+
return (hAsync(Host, { key: 'a471c293319cb6ee5ffb7ffafec0b8413e4289de', "no-router": true,
|
|
27950
27758
|
// Allow the modal to be navigable when the handle is focusable
|
|
27951
27759
|
tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1, ...htmlAttributes, style: {
|
|
27952
27760
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
@@ -27959,7 +27767,7 @@ class Modal {
|
|
|
27959
27767
|
'overlay-hidden': true,
|
|
27960
27768
|
[FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false,
|
|
27961
27769
|
...getClassMap(this.cssClass),
|
|
27962
|
-
}, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, hAsync("ion-backdrop", { key: '
|
|
27770
|
+
}, onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }, hAsync("ion-backdrop", { key: 'f67934afd4ddad64623856fb641cb6db846df428', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && hAsync("div", { key: 'a23f5cb6cf60c8f717c1dd556bce375829c80a43', class: "modal-shadow" }), hAsync("div", { key: '51eb6cd1070e4b7e49840a78dc7437238c867a01',
|
|
27963
27771
|
/*
|
|
27964
27772
|
role and aria-modal must be used on the
|
|
27965
27773
|
same element. They must also be set inside the
|
|
@@ -27972,9 +27780,9 @@ class Modal {
|
|
|
27972
27780
|
without the tabindex focus() would be a no-op and screen readers
|
|
27973
27781
|
may not properly announce the dialog and its content when it opens.
|
|
27974
27782
|
*/
|
|
27975
|
-
role: "dialog", ...inheritedAttributes, "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }, showHandle && (hAsync("button", { key: '
|
|
27783
|
+
role: "dialog", ...inheritedAttributes, "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }, showHandle && (hAsync("button", { key: 'f49a144642b5c227c0c2b00b33f4c7e37a2bf088', class: "modal-handle",
|
|
27976
27784
|
// Prevents the handle from receiving keyboard focus when it does not cycle
|
|
27977
|
-
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) })), hAsync("slot", { key: '
|
|
27785
|
+
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) })), hAsync("slot", { key: 'e781c0d5881762c6b61aa432721a38b49580ff64', onSlotchange: this.onSlotChange }))));
|
|
27978
27786
|
}
|
|
27979
27787
|
get el() { return getElement(this); }
|
|
27980
27788
|
static get watchers() { return {
|
|
@@ -29449,12 +29257,6 @@ class PickerColumn {
|
|
|
29449
29257
|
this.isColumnVisible = false;
|
|
29450
29258
|
this.canExitInputMode = true;
|
|
29451
29259
|
this.updateValueTextOnScroll = false;
|
|
29452
|
-
this.isUserScroll = false;
|
|
29453
|
-
/**
|
|
29454
|
-
* The haptics for the wheel picker are an iOS-only feature. As a result,
|
|
29455
|
-
* they should be disabled on Android.
|
|
29456
|
-
*/
|
|
29457
|
-
this.enableHaptics = false;
|
|
29458
29260
|
this.ariaLabel = null;
|
|
29459
29261
|
this.isActive = false;
|
|
29460
29262
|
/**
|
|
@@ -29486,12 +29288,6 @@ class PickerColumn {
|
|
|
29486
29288
|
*/
|
|
29487
29289
|
this.canExitInputMode = canExitInputMode;
|
|
29488
29290
|
this.updateValueTextOnScroll = false;
|
|
29489
|
-
/**
|
|
29490
|
-
* This scroll takes over from whatever the user was doing, so an outside
|
|
29491
|
-
* press must not commit an option the column is only passing through.
|
|
29492
|
-
*/
|
|
29493
|
-
this.isUserScroll = false;
|
|
29494
|
-
this.stopWatchingForOutsidePress();
|
|
29495
29291
|
scrollEl.scroll({
|
|
29496
29292
|
top,
|
|
29497
29293
|
left: 0,
|
|
@@ -29546,117 +29342,6 @@ class PickerColumn {
|
|
|
29546
29342
|
}
|
|
29547
29343
|
this.isActive = state;
|
|
29548
29344
|
};
|
|
29549
|
-
this.clearScrollEndTimeout = () => {
|
|
29550
|
-
if (this.scrollEndTimeout) {
|
|
29551
|
-
clearTimeout(this.scrollEndTimeout);
|
|
29552
|
-
this.scrollEndTimeout = undefined;
|
|
29553
|
-
}
|
|
29554
|
-
};
|
|
29555
|
-
/**
|
|
29556
|
-
* Resets the idle timer that commits the centered option.
|
|
29557
|
-
*/
|
|
29558
|
-
this.resetScrollEndTimeout = () => {
|
|
29559
|
-
this.clearScrollEndTimeout();
|
|
29560
|
-
this.scrollEndTimeout = setTimeout(this.settle, SCROLL_END_DELAY);
|
|
29561
|
-
};
|
|
29562
|
-
/**
|
|
29563
|
-
* Capture so the column still commits if an application's own pointerdown
|
|
29564
|
-
* handler stops the event before it reaches the document.
|
|
29565
|
-
*/
|
|
29566
|
-
this.watchForOutsidePress = () => {
|
|
29567
|
-
doc?.addEventListener('pointerdown', this.onPointerDownOutside, { capture: true });
|
|
29568
|
-
};
|
|
29569
|
-
this.stopWatchingForOutsidePress = () => {
|
|
29570
|
-
doc?.removeEventListener('pointerdown', this.onPointerDownOutside, { capture: true });
|
|
29571
|
-
};
|
|
29572
|
-
/**
|
|
29573
|
-
* Resets everything the current scroll interaction is holding, so nothing
|
|
29574
|
-
* pending on it can commit later.
|
|
29575
|
-
*/
|
|
29576
|
-
this.discardScroll = () => {
|
|
29577
|
-
this.stopWatchingForOutsidePress();
|
|
29578
|
-
this.clearScrollEndTimeout();
|
|
29579
|
-
this.scrollEndCallback = undefined;
|
|
29580
|
-
this.centeredOption = undefined;
|
|
29581
|
-
this.haltedAtScrollTop = undefined;
|
|
29582
|
-
this.isScrolling = false;
|
|
29583
|
-
this.isUserScroll = false;
|
|
29584
|
-
this.canExitInputMode = true;
|
|
29585
|
-
};
|
|
29586
|
-
/**
|
|
29587
|
-
* Commits the option that is currently centered under the highlight and ends
|
|
29588
|
-
* the scroll interaction.
|
|
29589
|
-
*/
|
|
29590
|
-
this.settle = () => {
|
|
29591
|
-
const { centeredOption } = this;
|
|
29592
|
-
this.clearScrollEndTimeout();
|
|
29593
|
-
this.stopWatchingForOutsidePress();
|
|
29594
|
-
this.isUserScroll = false;
|
|
29595
|
-
this.isScrolling = false;
|
|
29596
|
-
this.updateValueTextOnScroll = true;
|
|
29597
|
-
this.enableHaptics && hapticSelectionEnd();
|
|
29598
|
-
/**
|
|
29599
|
-
* Certain tasks (such as those that
|
|
29600
|
-
* cause re-renders) should only be done
|
|
29601
|
-
* once scrolling has finished, otherwise
|
|
29602
|
-
* flickering may occur.
|
|
29603
|
-
*/
|
|
29604
|
-
const { scrollEndCallback } = this;
|
|
29605
|
-
if (scrollEndCallback) {
|
|
29606
|
-
scrollEndCallback();
|
|
29607
|
-
this.scrollEndCallback = undefined;
|
|
29608
|
-
}
|
|
29609
|
-
/**
|
|
29610
|
-
* Reset this flag as the
|
|
29611
|
-
* next scroll interaction could
|
|
29612
|
-
* be a scroll from the user. In this
|
|
29613
|
-
* case, we should exit input mode.
|
|
29614
|
-
*/
|
|
29615
|
-
this.canExitInputMode = true;
|
|
29616
|
-
if (centeredOption !== undefined) {
|
|
29617
|
-
// Cleared here so a later scroll that centers nothing cannot fall back on it.
|
|
29618
|
-
this.centeredOption = undefined;
|
|
29619
|
-
if (centeredOption.isConnected) {
|
|
29620
|
-
this.setValue(centeredOption.value);
|
|
29621
|
-
}
|
|
29622
|
-
}
|
|
29623
|
-
};
|
|
29624
|
-
/**
|
|
29625
|
-
* Commits the option the user can see when they press anything outside of the
|
|
29626
|
-
* column during a scroll they started. This runs on pointerdown rather than
|
|
29627
|
-
* click so the value is up to date by the time an application's own click
|
|
29628
|
-
* handler (a Save button, for example) reads it.
|
|
29629
|
-
*/
|
|
29630
|
-
this.onPointerDownOutside = (ev) => {
|
|
29631
|
-
const { centeredOption, parentEl, scrollEl } = this;
|
|
29632
|
-
if (!this.isScrolling) {
|
|
29633
|
-
return;
|
|
29634
|
-
}
|
|
29635
|
-
/**
|
|
29636
|
-
* The column can live in another component's Shadow DOM, where a document
|
|
29637
|
-
* listener sees the target retargeted to the outer host. The composed path
|
|
29638
|
-
* is the only reliable way to tell a press on the column apart.
|
|
29639
|
-
*/
|
|
29640
|
-
const path = ev.composedPath();
|
|
29641
|
-
/**
|
|
29642
|
-
* A press anywhere in the parent picker counts as inside, so reaching for a
|
|
29643
|
-
* sibling wheel leaves this column coasting.
|
|
29644
|
-
*/
|
|
29645
|
-
if (path.includes(this.el) || (parentEl != null && path.includes(parentEl))) {
|
|
29646
|
-
return;
|
|
29647
|
-
}
|
|
29648
|
-
/**
|
|
29649
|
-
* Landing on the centered option halts the in-flight momentum scroll, so the
|
|
29650
|
-
* committed value and the option the user is left looking at agree. The
|
|
29651
|
-
* option list can be replaced mid-scroll, and a detached option has no
|
|
29652
|
-
* offset to center on.
|
|
29653
|
-
*/
|
|
29654
|
-
if (centeredOption !== undefined && centeredOption.isConnected) {
|
|
29655
|
-
this.centerPickerItemInView(centeredOption, false, false);
|
|
29656
|
-
this.haltedAtScrollTop = scrollEl?.scrollTop;
|
|
29657
|
-
}
|
|
29658
|
-
this.settle();
|
|
29659
|
-
};
|
|
29660
29345
|
/**
|
|
29661
29346
|
* When the column scrolls, the component
|
|
29662
29347
|
* needs to determine which item is centered
|
|
@@ -29664,42 +29349,27 @@ class PickerColumn {
|
|
|
29664
29349
|
* the item object.
|
|
29665
29350
|
*/
|
|
29666
29351
|
this.initializeScrollListener = () => {
|
|
29667
|
-
|
|
29352
|
+
/**
|
|
29353
|
+
* The haptics for the wheel picker are
|
|
29354
|
+
* an iOS-only feature. As a result, they should
|
|
29355
|
+
* be disabled on Android.
|
|
29356
|
+
*/
|
|
29357
|
+
const enableHaptics = isPlatform('ios');
|
|
29668
29358
|
const { el, scrollEl } = this;
|
|
29359
|
+
let timeout;
|
|
29669
29360
|
let activeEl = this.activeItem;
|
|
29670
29361
|
const scrollCallback = () => {
|
|
29671
29362
|
raf(() => {
|
|
29672
|
-
|
|
29673
|
-
* This frame cannot be cancelled, and moving the column disconnects it
|
|
29674
|
-
* without the observer reporting a change, so this checks live state.
|
|
29675
|
-
*/
|
|
29676
|
-
if (!this.el.isConnected || !this.isColumnVisible || !scrollEl)
|
|
29363
|
+
if (!scrollEl)
|
|
29677
29364
|
return;
|
|
29678
|
-
|
|
29679
|
-
|
|
29680
|
-
|
|
29681
|
-
* Still at the halted position, so this frame is the halt landing
|
|
29682
|
-
* rather than the wheel moving, and re-arming would start a second
|
|
29683
|
-
* commit cycle.
|
|
29684
|
-
*/
|
|
29685
|
-
if (Math.abs(scrollEl.scrollTop - haltedAtScrollTop) <= HALT_TOLERANCE)
|
|
29686
|
-
return;
|
|
29687
|
-
this.haltedAtScrollTop = undefined;
|
|
29365
|
+
if (timeout) {
|
|
29366
|
+
clearTimeout(timeout);
|
|
29367
|
+
timeout = undefined;
|
|
29688
29368
|
}
|
|
29689
|
-
// Armed before the early returns below, so a scroll never ends uncommitted.
|
|
29690
|
-
this.resetScrollEndTimeout();
|
|
29691
29369
|
if (!this.isScrolling) {
|
|
29692
|
-
|
|
29370
|
+
enableHaptics && hapticSelectionStart();
|
|
29693
29371
|
this.isScrolling = true;
|
|
29694
29372
|
}
|
|
29695
|
-
/**
|
|
29696
|
-
* Only a user-driven scroll holds an uncommitted selection. Checked every
|
|
29697
|
-
* frame because the user can take hold of the wheel mid-scroll, and
|
|
29698
|
-
* re-adding the same listener is a no-op.
|
|
29699
|
-
*/
|
|
29700
|
-
if (this.isUserScroll) {
|
|
29701
|
-
this.watchForOutsidePress();
|
|
29702
|
-
}
|
|
29703
29373
|
/**
|
|
29704
29374
|
* Select item in the center of the column
|
|
29705
29375
|
* which is the month/year that we want to select
|
|
@@ -29759,23 +29429,18 @@ class PickerColumn {
|
|
|
29759
29429
|
newActiveElement = fallbackActiveElement;
|
|
29760
29430
|
}
|
|
29761
29431
|
}
|
|
29762
|
-
/**
|
|
29763
|
-
* A scroll can land with no selectable option centered, such as an
|
|
29764
|
-
* overscroll bounce briefly centering the empty padding rows. Keep the
|
|
29765
|
-
* current selection until an option is centered again.
|
|
29766
|
-
*/
|
|
29767
|
-
if (newActiveElement === undefined || newActiveElement.disabled) {
|
|
29768
|
-
return;
|
|
29769
|
-
}
|
|
29770
29432
|
if (activeEl !== undefined) {
|
|
29771
29433
|
this.setPickerItemActiveState(activeEl, false);
|
|
29772
29434
|
}
|
|
29435
|
+
if (newActiveElement === undefined || newActiveElement.disabled) {
|
|
29436
|
+
return;
|
|
29437
|
+
}
|
|
29773
29438
|
/**
|
|
29774
29439
|
* If we are selecting a new value,
|
|
29775
29440
|
* we need to run haptics again.
|
|
29776
29441
|
*/
|
|
29777
29442
|
if (newActiveElement !== activeEl) {
|
|
29778
|
-
|
|
29443
|
+
enableHaptics && hapticSelectionChanged();
|
|
29779
29444
|
if (this.canExitInputMode) {
|
|
29780
29445
|
/**
|
|
29781
29446
|
* The native iOS wheel picker
|
|
@@ -29807,14 +29472,32 @@ class PickerColumn {
|
|
|
29807
29472
|
if (this.updateValueTextOnScroll) {
|
|
29808
29473
|
this.assistiveFocusable?.setAttribute('aria-valuetext', this.getOptionValueText(newActiveElement));
|
|
29809
29474
|
}
|
|
29810
|
-
|
|
29475
|
+
timeout = setTimeout(() => {
|
|
29476
|
+
this.isScrolling = false;
|
|
29477
|
+
this.updateValueTextOnScroll = true;
|
|
29478
|
+
enableHaptics && hapticSelectionEnd();
|
|
29479
|
+
/**
|
|
29480
|
+
* Certain tasks (such as those that
|
|
29481
|
+
* cause re-renders) should only be done
|
|
29482
|
+
* once scrolling has finished, otherwise
|
|
29483
|
+
* flickering may occur.
|
|
29484
|
+
*/
|
|
29485
|
+
const { scrollEndCallback } = this;
|
|
29486
|
+
if (scrollEndCallback) {
|
|
29487
|
+
scrollEndCallback();
|
|
29488
|
+
this.scrollEndCallback = undefined;
|
|
29489
|
+
}
|
|
29490
|
+
/**
|
|
29491
|
+
* Reset this flag as the
|
|
29492
|
+
* next scroll interaction could
|
|
29493
|
+
* be a scroll from the user. In this
|
|
29494
|
+
* case, we should exit input mode.
|
|
29495
|
+
*/
|
|
29496
|
+
this.canExitInputMode = true;
|
|
29497
|
+
this.setValue(newActiveElement.value);
|
|
29498
|
+
}, 250);
|
|
29811
29499
|
});
|
|
29812
29500
|
};
|
|
29813
|
-
const userScrollCallback = () => {
|
|
29814
|
-
this.isUserScroll = true;
|
|
29815
|
-
// Taking hold of the wheel ends the halt even if it has not moved yet.
|
|
29816
|
-
this.haltedAtScrollTop = undefined;
|
|
29817
|
-
};
|
|
29818
29501
|
/**
|
|
29819
29502
|
* Wrap this in an raf so that the scroll callback
|
|
29820
29503
|
* does not fire when component is initially shown.
|
|
@@ -29823,19 +29506,8 @@ class PickerColumn {
|
|
|
29823
29506
|
if (!scrollEl)
|
|
29824
29507
|
return;
|
|
29825
29508
|
scrollEl.addEventListener('scroll', scrollCallback);
|
|
29826
|
-
scrollEl.addEventListener('pointerdown', userScrollCallback);
|
|
29827
|
-
scrollEl.addEventListener('wheel', userScrollCallback, { passive: true });
|
|
29828
|
-
/**
|
|
29829
|
-
* A `pointerdown` fires once per touch, so a drag that pauses long enough
|
|
29830
|
-
* to commit would look like a scroll the column started. A `touchmove`
|
|
29831
|
-
* keeps arriving while the finger moves.
|
|
29832
|
-
*/
|
|
29833
|
-
scrollEl.addEventListener('touchmove', userScrollCallback, { passive: true });
|
|
29834
29509
|
this.destroyScrollListener = () => {
|
|
29835
29510
|
scrollEl.removeEventListener('scroll', scrollCallback);
|
|
29836
|
-
scrollEl.removeEventListener('pointerdown', userScrollCallback);
|
|
29837
|
-
scrollEl.removeEventListener('wheel', userScrollCallback);
|
|
29838
|
-
scrollEl.removeEventListener('touchmove', userScrollCallback);
|
|
29839
29511
|
};
|
|
29840
29512
|
});
|
|
29841
29513
|
};
|
|
@@ -30018,14 +29690,6 @@ class PickerColumn {
|
|
|
30018
29690
|
}
|
|
30019
29691
|
else {
|
|
30020
29692
|
this.isColumnVisible = false;
|
|
30021
|
-
/**
|
|
30022
|
-
* The pending timer still runs so it resets the scroll state, but the
|
|
30023
|
-
* option it would have committed is dropped. A column the user cannot
|
|
30024
|
-
* see should not change its value.
|
|
30025
|
-
*/
|
|
30026
|
-
this.stopWatchingForOutsidePress();
|
|
30027
|
-
this.centeredOption = undefined;
|
|
30028
|
-
this.haltedAtScrollTop = undefined;
|
|
30029
29693
|
if (this.destroyScrollListener) {
|
|
30030
29694
|
this.destroyScrollListener();
|
|
30031
29695
|
this.destroyScrollListener = undefined;
|
|
@@ -30096,13 +29760,6 @@ class PickerColumn {
|
|
|
30096
29760
|
connectedCallback() {
|
|
30097
29761
|
this.ariaLabel = this.el.getAttribute('aria-label') ?? 'Select a value';
|
|
30098
29762
|
}
|
|
30099
|
-
disconnectedCallback() {
|
|
30100
|
-
/**
|
|
30101
|
-
* A pending settle would otherwise commit a value on a column that is no
|
|
30102
|
-
* longer in the DOM.
|
|
30103
|
-
*/
|
|
30104
|
-
this.discardScroll();
|
|
30105
|
-
}
|
|
30106
29763
|
get activeItem() {
|
|
30107
29764
|
const { value } = this;
|
|
30108
29765
|
const options = Array.from(this.el.querySelectorAll('ion-picker-column-option'));
|
|
@@ -30120,14 +29777,14 @@ class PickerColumn {
|
|
|
30120
29777
|
render() {
|
|
30121
29778
|
const { color, disabled, isActive, numericInput } = this;
|
|
30122
29779
|
const mode = getIonMode$1(this);
|
|
30123
|
-
return (hAsync(Host, { key: '
|
|
29780
|
+
return (hAsync(Host, { key: '78b46ad10d88ea1bb43ca8c36748767912f03224', class: createColorClasses$1(color, {
|
|
30124
29781
|
[mode]: true,
|
|
30125
29782
|
['picker-column-active']: isActive,
|
|
30126
29783
|
['picker-column-numeric-input']: numericInput,
|
|
30127
29784
|
['picker-column-disabled']: disabled,
|
|
30128
|
-
}) }, hAsync("slot", { key: '
|
|
29785
|
+
}) }, hAsync("slot", { key: '761e501df77f7de896ffb3ebb99ebf88c5c3bf70', name: "prefix" }), hAsync("div", { key: '9f4caaeef8ab704522a85f30876d371712f47c5c', class: "picker-opts", ref: (el) => {
|
|
30129
29786
|
this.scrollEl = el;
|
|
30130
|
-
}, role: "slider", tabindex: this.disabled ? undefined : 0, "aria-label": this.ariaLabel, "aria-valuemin": 0, "aria-valuemax": 0, "aria-valuenow": 0, "aria-valuetext": this.getOptionValueText(this.activeItem), "aria-orientation": "vertical", onKeyDown: (ev) => this.onKeyDown(ev) }, hAsync("div", { key: '
|
|
29787
|
+
}, role: "slider", tabindex: this.disabled ? undefined : 0, "aria-label": this.ariaLabel, "aria-valuemin": 0, "aria-valuemax": 0, "aria-valuenow": 0, "aria-valuetext": this.getOptionValueText(this.activeItem), "aria-orientation": "vertical", onKeyDown: (ev) => this.onKeyDown(ev) }, hAsync("div", { key: '9d3533436aba6c61c93f65f84a077fba832194a0', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { key: '3f18d3a47361f06f55321b65fdf5742a61722b26', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { key: 'eac0d20ab8c533ef829875e323e93e1ee2067d6d', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("slot", { key: '92e25989ef41cf6f910c73238e1a0a5ac03f1c1f' }), hAsync("div", { key: '33a84644ebdc84108b44a8e3a129b54e824939c8', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { key: '128ad61a3a68c7ff2d2e44a6e968424fcc608a15', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { key: '6e4d59a4f75befcbbf47279a263f28a69b12dbbd', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), hAsync("slot", { key: '3c6621b64438792a3024c90e3d9916a0a3614506', name: "suffix" })));
|
|
30131
29788
|
}
|
|
30132
29789
|
get el() { return getElement(this); }
|
|
30133
29790
|
static get watchers() { return {
|
|
@@ -30159,19 +29816,6 @@ class PickerColumn {
|
|
|
30159
29816
|
}; }
|
|
30160
29817
|
}
|
|
30161
29818
|
const PICKER_ITEM_ACTIVE_CLASS = 'option-active';
|
|
30162
|
-
/**
|
|
30163
|
-
* How long the column must be idle before the centered option is treated as
|
|
30164
|
-
* the user's selection. Replaceable by the `scrollend` event once that is
|
|
30165
|
-
* supported everywhere (https://caniuse.com/?search=scrollend).
|
|
30166
|
-
*/
|
|
30167
|
-
const SCROLL_END_DELAY = 250;
|
|
30168
|
-
/**
|
|
30169
|
-
* How far, in pixels, the column may report from where it was halted and still
|
|
30170
|
-
* count as having stayed there. Centering targets a position between two snap
|
|
30171
|
-
* points, so mandatory snapping corrects it by half the column height less
|
|
30172
|
-
* three option heights: 2px at the default sizes.
|
|
30173
|
-
*/
|
|
30174
|
-
const HALT_TOLERANCE = 2;
|
|
30175
29819
|
|
|
30176
29820
|
const pickerColumnOptionIosCss = () => `.picker-column-option-button{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden}:host(.option-disabled){opacity:0.4}:host(.option-disabled) .picker-column-option-button{cursor:default}`;
|
|
30177
29821
|
|
|
@@ -31574,13 +31218,6 @@ class Popover {
|
|
|
31574
31218
|
const { configureTriggerInteraction, el } = this;
|
|
31575
31219
|
prepareOverlay(el);
|
|
31576
31220
|
configureTriggerInteraction();
|
|
31577
|
-
// Re-apply the root lock if moved without dismiss() being called
|
|
31578
|
-
if (this.presented) {
|
|
31579
|
-
restoreRootFocusTrapAccessibility(el);
|
|
31580
|
-
// The disconnect tore down the header observer, and `present()` is its
|
|
31581
|
-
// only other caller, so a move mid-layout would lose the recalculation.
|
|
31582
|
-
this.recalculateContentOnHeaderReady();
|
|
31583
|
-
}
|
|
31584
31221
|
}
|
|
31585
31222
|
disconnectedCallback() {
|
|
31586
31223
|
const { destroyTriggerInteraction } = this;
|
|
@@ -31758,12 +31395,6 @@ class Popover {
|
|
|
31758
31395
|
if (!header || contentElements.length === 0) {
|
|
31759
31396
|
return;
|
|
31760
31397
|
}
|
|
31761
|
-
// Both `present()` and a reconnect call this, so drop any existing
|
|
31762
|
-
// observer. Below the guards, so a call that bails cannot leave none.
|
|
31763
|
-
if (this.headerResizeObserver) {
|
|
31764
|
-
this.headerResizeObserver.disconnect();
|
|
31765
|
-
this.headerResizeObserver = undefined;
|
|
31766
|
-
}
|
|
31767
31398
|
this.headerResizeObserver = new ResizeObserver(async () => {
|
|
31768
31399
|
if (header.offsetHeight > 0) {
|
|
31769
31400
|
this.headerResizeObserver?.disconnect();
|
|
@@ -31836,7 +31467,7 @@ class Popover {
|
|
|
31836
31467
|
const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes, focusTrap } = this;
|
|
31837
31468
|
const desktop = isPlatform('desktop');
|
|
31838
31469
|
const enableArrow = arrow && !parentPopover;
|
|
31839
|
-
return (hAsync(Host, { key: '
|
|
31470
|
+
return (hAsync(Host, { key: '52ffc7116969ae1b8b927e67f2acbfe5f5434f70', "aria-modal": "true", "no-router": true, tabindex: "-1", ...htmlAttributes, style: {
|
|
31840
31471
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
31841
31472
|
}, class: {
|
|
31842
31473
|
...getClassMap(this.cssClass),
|
|
@@ -31847,7 +31478,7 @@ class Popover {
|
|
|
31847
31478
|
[`popover-side-${side}`]: true,
|
|
31848
31479
|
[FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false,
|
|
31849
31480
|
'popover-nested': !!parentPopover,
|
|
31850
|
-
}, onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }, !parentPopover && hAsync("ion-backdrop", { key: '
|
|
31481
|
+
}, onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }, !parentPopover && hAsync("ion-backdrop", { key: '79a8e851dbd22119e21ffb2f4709c555251045c8', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), hAsync("div", { key: 'c46c9f62c3ef3f902e23f27404eaa446a5d8cf88', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && hAsync("div", { key: '9fdcbbc4ea6c7bde74f646d48eb77296b2c9dd83', class: "popover-arrow", part: "arrow" }), hAsync("div", { key: '138e56bb83462ebb0908edb522b45ecf94b82aeb', class: "popover-content", part: "content" }, hAsync("slot", { key: 'daeefcf002e8d89e91d6e0faf7f63f75b68a2dbe' })))));
|
|
31851
31482
|
}
|
|
31852
31483
|
get el() { return getElement(this); }
|
|
31853
31484
|
static get watchers() { return {
|
|
@@ -37642,6 +37273,11 @@ class SegmentButton {
|
|
|
37642
37273
|
addEventListener$1(segmentEl, 'ionSelect', this.updateState);
|
|
37643
37274
|
addEventListener$1(segmentEl, 'ionStyle', this.updateStyle);
|
|
37644
37275
|
}
|
|
37276
|
+
// Prevent buttons from being disabled when associated with segment content
|
|
37277
|
+
if (this.contentId && this.disabled) {
|
|
37278
|
+
printIonWarning(`[ion-segment-button] - Segment buttons cannot be disabled when associated with an <ion-segment-content>.`);
|
|
37279
|
+
this.disabled = false;
|
|
37280
|
+
}
|
|
37645
37281
|
}
|
|
37646
37282
|
disconnectedCallback() {
|
|
37647
37283
|
const segmentEl = this.segmentEl;
|
|
@@ -37658,15 +37294,6 @@ class SegmentButton {
|
|
|
37658
37294
|
// Return if there is no contentId defined
|
|
37659
37295
|
if (!this.contentId)
|
|
37660
37296
|
return;
|
|
37661
|
-
/**
|
|
37662
|
-
* Checked here rather than in `connectedCallback` so frameworks that assign element
|
|
37663
|
-
* props after inserting the element have set `disabled` by now. A disabled ion-segment
|
|
37664
|
-
* pushes that onto its buttons too, which this guard should not undo.
|
|
37665
|
-
*/
|
|
37666
|
-
if (this.disabled && this.segmentEl?.disabled !== true) {
|
|
37667
|
-
printIonWarning(`[ion-segment-button] - Segment buttons cannot be disabled when associated with an <ion-segment-content>.`);
|
|
37668
|
-
this.disabled = false;
|
|
37669
|
-
}
|
|
37670
37297
|
// Attempt to find the Segment Content by its contentId
|
|
37671
37298
|
const segmentContent = document.getElementById(this.contentId);
|
|
37672
37299
|
// If no associated Segment Content exists, log an error and return
|
|
@@ -37701,7 +37328,7 @@ class SegmentButton {
|
|
|
37701
37328
|
const { checked, type, disabled, hasIcon, hasLabel, layout, segmentEl } = this;
|
|
37702
37329
|
const mode = getIonMode$1(this);
|
|
37703
37330
|
const hasSegmentColor = () => segmentEl?.color !== undefined;
|
|
37704
|
-
return (hAsync(Host, { key: '
|
|
37331
|
+
return (hAsync(Host, { key: '2b4b7ad8b981d2ee39aba5b9c734de8a5bd045ba', class: {
|
|
37705
37332
|
[mode]: true,
|
|
37706
37333
|
'in-toolbar': hostContext('ion-toolbar', this.el),
|
|
37707
37334
|
'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
|
|
@@ -37717,7 +37344,7 @@ class SegmentButton {
|
|
|
37717
37344
|
'ion-activatable': true,
|
|
37718
37345
|
'ion-activatable-instant': true,
|
|
37719
37346
|
'ion-focusable': true,
|
|
37720
|
-
} }, hAsync("button", { key: '
|
|
37347
|
+
} }, hAsync("button", { key: '9cc58cfbe70844a0f5e1a307002e0d04e044be99', "aria-selected": checked ? 'true' : 'false', role: "tab", ref: (el) => (this.nativeEl = el), type: type, class: "button-native", part: "native", disabled: disabled, ...this.inheritedAttributes }, hAsync("span", { key: '6443551951ce589efdb2d0e1fd1a14e35b82ed19', class: "button-inner" }, hAsync("slot", { key: 'c3548b469ae6e5477d8372cb28bc70dff3a24d18' })), mode === 'md' && hAsync("ion-ripple-effect", { key: 'fb176415ca1702766c4d7a5964ec0bb467bdcb55' })), hAsync("div", { key: 'aa22b4752f8336d0e232a1e0894e87023b284a08', part: "indicator", class: "segment-button-indicator segment-button-indicator-animated" }, hAsync("div", { key: '61e29ea52048fa0583fce6c20c81614a4d0199cb', part: "indicator-background", class: "segment-button-indicator-background" }))));
|
|
37721
37348
|
}
|
|
37722
37349
|
get el() { return getElement(this); }
|
|
37723
37350
|
static get watchers() { return {
|
|
@@ -38761,7 +38388,7 @@ class Select {
|
|
|
38761
38388
|
const hasOutlineFill = mode === 'md' && fill === 'outline';
|
|
38762
38389
|
renderHiddenInput(true, el, name, parseValue(value), disabled);
|
|
38763
38390
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || isExpanded));
|
|
38764
|
-
return (hAsync(Host, { key: '
|
|
38391
|
+
return (hAsync(Host, { key: '5d1e5bf46d0f204efdcb55cc42cfde52e6db304b', onClick: this.onClick, class: createColorClasses$1(this.color, {
|
|
38765
38392
|
[mode]: true,
|
|
38766
38393
|
'in-item': inItem,
|
|
38767
38394
|
'in-item-color': hostContext('ion-item.ion-color', el),
|
|
@@ -38779,7 +38406,7 @@ class Select {
|
|
|
38779
38406
|
[`select-justify-${justify}`]: justifyEnabled,
|
|
38780
38407
|
[`select-shape-${shape}`]: shape !== undefined,
|
|
38781
38408
|
[`select-label-placement-${labelPlacement}`]: true,
|
|
38782
|
-
}) }, hAsync("label", { key: '
|
|
38409
|
+
}) }, hAsync("label", { key: '15fd1f8e06510ae8472c621cf8cf90e51172e0be', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, hasOutlineFill && this.renderOutlineContainer(), hAsync("div", { key: '7964e3d9351671899793b117896acdda25ec24c4', class: "select-start", part: "start", ref: (el) => (this.startContainerEl = el) }, hAsync("slot", { key: 'aa309ef155c4025acfd7ed5739b5221c85097b36', name: "start" })), hAsync("div", { key: '23d5a9dfea64a9d81b0b36d9426b15bed98901b9', class: "select-control", part: "control" }, this.renderLabel(), hAsync("div", { key: '810da9fbfa8771e09b5fb768d64e5f04858b5833', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox(), !hasFloatingOrStackedLabel && this.renderSelectIcon())), hAsync("div", { key: 'bf1c04704326ecfa14cf2e49bb76d3fb45beb08d', class: "select-end", part: "end" }, hasFloatingOrStackedLabel && this.renderSelectIcon(), hAsync("slot", { key: '76a8bcaeefdcaa908aebd820d93171b08165cee3', name: "end" })), shouldRenderHighlight && hAsync("div", { key: '55a9c417a82323a44e16328fd62a634d9d7c558b', class: "select-highlight" })), this.renderBottomContent()));
|
|
38783
38410
|
}
|
|
38784
38411
|
get el() { return getElement(this); }
|
|
38785
38412
|
static get watchers() { return {
|
|
@@ -38888,14 +38515,29 @@ const textForValue = (opts, value, compareWith, useHTML = false) => {
|
|
|
38888
38515
|
return getOptionContent(selectOpt, undefined, true);
|
|
38889
38516
|
}
|
|
38890
38517
|
/**
|
|
38891
|
-
*
|
|
38892
|
-
*
|
|
38893
|
-
*
|
|
38894
|
-
* cannot disagree about what an option's text is. `null` marks an
|
|
38895
|
-
* option with no text, which is dropped from the joined text of a
|
|
38896
|
-
* `multiple` select rather than joined in as an empty entry.
|
|
38518
|
+
* When custom HTML is enabled, extract only the default slot content.
|
|
38519
|
+
* This ensures aria-label and other text-only contexts read only
|
|
38520
|
+
* the relevant option text.
|
|
38897
38521
|
*/
|
|
38898
|
-
|
|
38522
|
+
if (customHTMLEnabled) {
|
|
38523
|
+
const content = getOptionContent(selectOpt);
|
|
38524
|
+
if (typeof content === 'string') {
|
|
38525
|
+
return content;
|
|
38526
|
+
}
|
|
38527
|
+
/**
|
|
38528
|
+
* Elements were found in the default slot, extract and concatenate
|
|
38529
|
+
* their text content while trimming whitespace.
|
|
38530
|
+
*/
|
|
38531
|
+
if (content) {
|
|
38532
|
+
const texts = Array.from(content.childNodes)
|
|
38533
|
+
.map((n) => n.textContent?.trim())
|
|
38534
|
+
.filter((t) => t);
|
|
38535
|
+
return texts.join(' ') || null;
|
|
38536
|
+
}
|
|
38537
|
+
// Empty option
|
|
38538
|
+
return null;
|
|
38539
|
+
}
|
|
38540
|
+
return getDefaultSlotPlainText(selectOpt);
|
|
38899
38541
|
};
|
|
38900
38542
|
/**
|
|
38901
38543
|
* Trims whitespace from all text nodes within a DOM tree.
|
|
@@ -38951,13 +38593,9 @@ const getOptionContent = (option, slotName, useHTML = false) => {
|
|
|
38951
38593
|
if (nodes.length === 0) {
|
|
38952
38594
|
return null;
|
|
38953
38595
|
}
|
|
38954
|
-
|
|
38955
|
-
* Return plain text if no elements are found. This reads the option the
|
|
38956
|
-
* same way the non-custom-HTML path does, so the two do not disagree
|
|
38957
|
-
* about what an option's text is.
|
|
38958
|
-
*/
|
|
38596
|
+
// Return plain text if no elements are found
|
|
38959
38597
|
if (!slotName && nodes.every((n) => n.nodeType === Node.TEXT_NODE)) {
|
|
38960
|
-
return
|
|
38598
|
+
return nodes.map((n) => n.textContent?.trim()).join(' ') || null;
|
|
38961
38599
|
}
|
|
38962
38600
|
/**
|
|
38963
38601
|
* Mirror known custom-element properties (e.g. ion-icon's `icon`)
|
|
@@ -39013,43 +38651,22 @@ const getOptionDefaultSlot = (option) => {
|
|
|
39013
38651
|
}
|
|
39014
38652
|
return defaultSlotNodes;
|
|
39015
38653
|
};
|
|
39016
|
-
/**
|
|
39017
|
-
* Concatenates the text a node renders, skipping the subtrees of tags
|
|
39018
|
-
* whose contents the browser never paints (`script`, `style`, and the
|
|
39019
|
-
* rest of `blockedTags`). `textContent` includes those, so reading it
|
|
39020
|
-
* directly would put stylesheet or script source into the select text
|
|
39021
|
-
* and the `aria-label`.
|
|
39022
|
-
*
|
|
39023
|
-
* @param node - The node to read text from.
|
|
39024
|
-
* @returns The node's rendered text.
|
|
39025
|
-
*/
|
|
39026
|
-
const getRenderedTextContent = (node) => {
|
|
39027
|
-
if (node.nodeType === Node.TEXT_NODE) {
|
|
39028
|
-
return node.textContent ?? '';
|
|
39029
|
-
}
|
|
39030
|
-
if (node.nodeType !== Node.ELEMENT_NODE) {
|
|
39031
|
-
return '';
|
|
39032
|
-
}
|
|
39033
|
-
if (blockedTags.includes(node.tagName.toLowerCase())) {
|
|
39034
|
-
return '';
|
|
39035
|
-
}
|
|
39036
|
-
return Array.from(node.childNodes)
|
|
39037
|
-
.map((child) => getRenderedTextContent(child))
|
|
39038
|
-
.join('');
|
|
39039
|
-
};
|
|
39040
38654
|
/**
|
|
39041
38655
|
* Extracts plain text from only the default slot of an option,
|
|
39042
|
-
* excluding content assigned to named slots (start/end).
|
|
39043
|
-
* concatenated with no separator and collapsible whitespace is
|
|
39044
|
-
* collapsed, approximating how the browser renders the option.
|
|
39045
|
-
* NBSP is not collapsible, so it is preserved.
|
|
39046
|
-
*
|
|
39047
|
-
* @param option - The `ion-select-option` element to read text from.
|
|
39048
|
-
* @returns The option's default slot text.
|
|
38656
|
+
* excluding content assigned to named slots (start/end).
|
|
39049
38657
|
*/
|
|
39050
38658
|
const getDefaultSlotPlainText = (option) => {
|
|
39051
|
-
const
|
|
39052
|
-
|
|
38659
|
+
const texts = Array.from(option.childNodes)
|
|
38660
|
+
.filter((node) => {
|
|
38661
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
38662
|
+
return !node.hasAttribute('slot');
|
|
38663
|
+
}
|
|
38664
|
+
return node.nodeType === Node.TEXT_NODE;
|
|
38665
|
+
})
|
|
38666
|
+
.filter((node) => node.nodeType === Node.TEXT_NODE)
|
|
38667
|
+
.map((n) => n.textContent?.trim())
|
|
38668
|
+
.filter((t) => t);
|
|
38669
|
+
return texts.join(' ');
|
|
39053
38670
|
};
|
|
39054
38671
|
/**
|
|
39055
38672
|
* Extracts the rich content from an `ion-select-option`.
|
|
@@ -43125,7 +42742,7 @@ var NAMESPACE = (
|
|
|
43125
42742
|
);
|
|
43126
42743
|
|
|
43127
42744
|
/*
|
|
43128
|
-
Stencil Hydrate Runner v4.
|
|
42745
|
+
Stencil Hydrate Runner v4.43.5 | MIT Licensed | https://stenciljs.com
|
|
43129
42746
|
*/
|
|
43130
42747
|
var __create = Object.create;
|
|
43131
42748
|
var __defProp = Object.defineProperty;
|