@ionic/core 9.0.1-dev.11788285010.17561004 → 9.0.1-dev.11788375537.1f38f077
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/index.js +1 -1
- package/components/ion-accordion-group.js +1 -1
- package/components/ion-accordion.js +1 -1
- package/components/ion-action-sheet.js +1 -1
- package/components/ion-alert.js +1 -1
- package/components/ion-app.js +1 -1
- package/components/ion-avatar.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-backdrop.js +1 -1
- package/components/ion-badge.js +1 -1
- package/components/ion-breadcrumb.js +1 -1
- package/components/ion-breadcrumbs.js +1 -1
- package/components/ion-button.js +1 -1
- package/components/ion-buttons.js +1 -1
- package/components/ion-card-content.js +1 -1
- package/components/ion-card-header.js +1 -1
- package/components/ion-card-subtitle.js +1 -1
- package/components/ion-card-title.js +1 -1
- package/components/ion-card.js +1 -1
- package/components/ion-checkbox.js +1 -1
- package/components/ion-chip.js +1 -1
- package/components/ion-col.js +1 -1
- package/components/ion-content.js +1 -1
- package/components/ion-datetime-button.js +1 -1
- package/components/ion-datetime.js +1 -1
- package/components/ion-fab-button.js +1 -1
- package/components/ion-fab-list.js +1 -1
- package/components/ion-fab.js +1 -1
- package/components/ion-footer.js +1 -1
- package/components/ion-grid.js +1 -1
- package/components/ion-header.js +1 -1
- package/components/ion-icon.js +1 -1
- package/components/ion-img.js +1 -1
- package/components/ion-infinite-scroll-content.js +1 -1
- package/components/ion-infinite-scroll.js +1 -1
- package/components/ion-input-otp.js +1 -1
- package/components/ion-input-password-toggle.js +1 -1
- package/components/ion-input.js +1 -1
- package/components/ion-item-divider.js +1 -1
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +1 -1
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-item.js +1 -1
- package/components/ion-label.js +1 -1
- package/components/ion-list-header.js +1 -1
- package/components/ion-list.js +1 -1
- package/components/ion-loading.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-menu-toggle.js +1 -1
- package/components/ion-menu.js +1 -1
- package/components/ion-modal.js +1 -1
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +1 -1
- package/components/ion-picker-column-option.js +1 -1
- package/components/ion-picker-column.js +1 -1
- package/components/ion-picker.js +1 -1
- package/components/ion-popover.js +1 -1
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-radio-group.js +1 -1
- package/components/ion-radio.js +1 -1
- package/components/ion-range.js +1 -1
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-refresher.js +1 -1
- package/components/ion-reorder-group.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-ripple-effect.js +1 -1
- package/components/ion-route-redirect.js +1 -1
- package/components/ion-route.js +1 -1
- package/components/ion-router-link.js +1 -1
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-router.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +1 -1
- package/components/ion-segment-button.js +1 -1
- package/components/ion-segment-content.js +1 -1
- package/components/ion-segment-view.js +1 -1
- package/components/ion-segment.js +1 -1
- package/components/ion-select-modal.js +1 -1
- package/components/ion-select-option.js +1 -1
- package/components/ion-select-popover.js +1 -1
- package/components/ion-select.js +1 -1
- package/components/ion-skeleton-text.js +1 -1
- package/components/ion-spinner.js +1 -1
- package/components/ion-split-pane.js +1 -1
- package/components/ion-tab-bar.js +1 -1
- package/components/ion-tab-button.js +1 -1
- package/components/ion-tab.js +1 -1
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +1 -1
- package/components/ion-textarea.js +1 -1
- package/components/ion-thumbnail.js +1 -1
- package/components/ion-title.js +1 -1
- package/components/ion-toast.js +1 -1
- package/components/ion-toggle.js +1 -1
- package/components/ion-toolbar.js +1 -1
- package/components/{p-gFwXiYC_.js → p-5rFO7X8J.js} +1 -1
- package/components/{p-BpLt_Ptn.js → p-7qDu1bID.js} +1 -1
- package/components/{p-7PNwKFZi.js → p-B2L09UOs.js} +1 -1
- package/components/{p-DcOH6-o5.js → p-BAJ7NctL.js} +1 -1
- package/components/{p-Kmrg3Fed.js → p-BE9noJ1O.js} +1 -1
- package/components/{p-CgvDC7hC.js → p-BFwL2yyK.js} +1 -1
- package/components/{p-DysqCsJu.js → p-BWHBdLfY.js} +1 -1
- package/components/{p-SR-LLqp_.js → p-Bcm-GVQM.js} +1 -1
- package/{dist/ionic/p-9wczfs_v.js → components/p-BcuLPPAE.js} +1 -1
- package/components/p-BhlP16sB.js +4 -0
- package/components/{p-H1f2qsk4.js → p-BqE7e5gH.js} +1 -1
- package/components/{p-BqBDq1Ma.js → p-C12SAK00.js} +1 -1
- package/components/{p-A8MJRBIY.js → p-C8mPeq0D.js} +1 -1
- package/components/{p-Bx2saTHs.js → p-CB06XtlF.js} +1 -1
- package/components/{p-BgUIV8NQ.js → p-CBhGZ6rF.js} +1 -1
- package/components/{p-B8MQjdvk.js → p-CDKY4TZ_.js} +1 -1
- package/components/{p-CWETxTjE.js → p-CEkamjav.js} +1 -1
- package/components/p-CFtAWaB6.js +4 -0
- package/components/{p-DEW7CnUc.js → p-CJTKYpZv.js} +1 -1
- package/components/{p-BA_4ZIEg.js → p-CLZPNP7x.js} +1 -1
- package/components/{p-tX3UxCnU.js → p-COxY7PLK.js} +1 -1
- package/components/p-CQxPXWNM.js +4 -0
- package/components/{p-DDdkefwf.js → p-CRcX0EGs.js} +1 -1
- package/components/{p-Bg4OwDwb.js → p-CXQzYyda.js} +1 -1
- package/components/p-CXpy69Ei.js +4 -0
- package/{dist/ionic/p-BZxjcGRP.js → components/p-CdSLe3Q3.js} +1 -1
- package/components/p-CoGD-oMG.js +4 -0
- package/components/p-CpYeYl3u.js +4 -0
- package/components/{p-BFtL8t1r.js → p-CyKlfXdt.js} +1 -1
- package/components/{p-CHswSpKy.js → p-D6PwfJ9F.js} +1 -1
- package/components/{p-Bnc0m4SW.js → p-D6dNJoqU.js} +1 -1
- package/components/{p-eFI3mtEX.js → p-D8BOfNYz.js} +1 -1
- package/{dist/ionic/p-D0dfUysx.js → components/p-DG-dUCKp.js} +1 -1
- package/{dist/ionic/p-DF_Uqql8.js → components/p-DH0rRXjx.js} +1 -1
- package/components/{p-D7ysFE2B.js → p-DMkSsriG.js} +1 -1
- package/components/{p-CaiZOhfC.js → p-Dcxr2vKX.js} +1 -1
- package/components/{p-B6x5_b9w.js → p-DkEb3SCT.js} +1 -1
- package/components/p-Dr-rBSUW.js +4 -0
- package/components/{p-DqAI6tg7.js → p-FQTgh7aH.js} +1 -1
- package/components/{p-DrehWDfv.js → p-KusMkAnB.js} +1 -1
- package/components/p-MHpJ2A_m.js +4 -0
- package/components/p-QgdyH-Zs.js +4 -0
- package/components/{p-BMfgF-Tv.js → p-RRH-7cpd.js} +1 -1
- package/components/{p-CQAjyETU.js → p-U1X_lw_6.js} +1 -1
- package/components/p-UKksD3f9.js +4 -0
- package/components/{p-v2NpoOHp.js → p-VTfnz_8u.js} +1 -1
- package/components/p-fP0QF3iG.js +4 -0
- package/components/{p-BPDxVIRr.js → p-l-zxxFre.js} +1 -1
- package/components/{p-BrFaQbGY.js → p-mXsQnyWB.js} +1 -1
- package/components/p-ntAkt4Ra.js +4 -0
- package/components/p-ufB0gCSU.js +4 -0
- package/dist/cjs/{animation-D-OqR4a4.js → animation-ihPP_z2n.js} +1 -1
- package/dist/cjs/{app-globals-BzgwARwJ.js → app-globals-BlkzA410.js} +1 -1
- package/dist/cjs/{button-active-BlWSD7uK.js → button-active-ItGBjzmO.js} +1 -1
- package/dist/cjs/{format-D7ig6Vm0.js → format-CPIqtp4x.js} +1 -1
- package/dist/cjs/{framework-delegate-BZUx4TnE.js → framework-delegate-DhyWUPGg.js} +1 -1
- package/dist/cjs/{hardware-back-button-JOAEFSzc.js → hardware-back-button-D5f_kASb.js} +1 -1
- package/dist/cjs/{helpers-Dj5o76mq.js → helpers-BCLkFTTd.js} +1 -1
- package/dist/cjs/{index-C8zH6b3d.js → index-49DTLc_Z.js} +2 -2
- package/dist/cjs/{index-CZ6vzt_q.js → index-BcyiqD6R.js} +5 -5
- package/dist/cjs/{index-BrVMoqUk.js → index-Bgz6BcKx.js} +50 -16
- package/dist/cjs/{index-EJLjthTK.js → index-BocV_y-c.js} +2 -1
- package/dist/cjs/{index-2sO-zkZ2.js → index-CldjPPyP.js} +4 -4
- package/dist/cjs/{index-Csue6G3m.js → index-xum7jdbq.js} +2 -2
- package/dist/cjs/index.cjs.js +12 -12
- package/dist/cjs/{input-shims-Bh7bnt2v.js → input-shims-Jisy7U7-.js} +3 -3
- package/dist/cjs/{input.utils-Cq3g9uHy.js → input.utils-BDTpGrfn.js} +1 -1
- package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-action-sheet.cjs.entry.js +10 -10
- package/dist/cjs/ion-alert.cjs.entry.js +10 -10
- package/dist/cjs/ion-app_8.cjs.entry.js +12 -12
- 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 +32 -24
- 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 +13 -15
- package/dist/cjs/ion-item_8.cjs.entry.js +3 -3
- package/dist/cjs/ion-loading.cjs.entry.js +8 -8
- package/dist/cjs/ion-menu_3.cjs.entry.js +8 -8
- package/dist/cjs/ion-modal.cjs.entry.js +9 -9
- 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 +210 -46
- package/dist/cjs/ion-picker.cjs.entry.js +2 -2
- package/dist/cjs/ion-popover.cjs.entry.js +8 -8
- 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 +14 -10
- package/dist/cjs/ion-select-modal.cjs.entry.js +8 -8
- package/dist/cjs/ion-select_3.cjs.entry.js +57 -47
- 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-DvgIzM2F.js → ionic-global-BMU-Us1Q.js} +1 -1
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-zIgdoSYe.js → ios.transition-OCcCN--B.js} +4 -4
- package/dist/cjs/{item-multiple-inputs-DG-ZGm6j.js → item-multiple-inputs-BH9yPC66.js} +1 -1
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/{md.transition-CXeJ9rfh.js → md.transition-D0o2IIbo.js} +4 -4
- package/dist/cjs/{overlays-Bg0auTQa.js → overlays-hCtsdAvn.js} +5 -5
- package/dist/cjs/{select-option-render-7m1WdFzF.js → select-option-render-BPjGDlsG.js} +2 -2
- package/dist/cjs/{slot-mutation-controller-BJEJzx_e.js → slot-mutation-controller-IQ250LoG.js} +1 -1
- package/dist/cjs/{status-tap-DxbUM5XX.js → status-tap-Bakl9czs.js} +3 -3
- package/dist/cjs/{swipe-back-F_DBt-Aw.js → swipe-back-Cv4OZVJ5.js} +2 -2
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/datetime/datetime.js +25 -17
- package/dist/collection/components/item-sliding/item-sliding.js +10 -12
- package/dist/collection/components/picker-column/picker-column.js +207 -43
- package/dist/collection/components/segment-button/segment-button.js +11 -7
- package/dist/collection/components/select/select.js +49 -39
- package/dist/collection/utils/test/late-props/late-props.js +69 -0
- package/dist/docs.json +279 -48
- package/dist/esm/{animation-TxGPYeDn.js → animation-B6KGUJwl.js} +1 -1
- package/dist/esm/{app-globals-Do8rJest.js → app-globals-BvutUX8P.js} +1 -1
- package/dist/esm/{button-active-ChA4D-ml.js → button-active-DRNebs9r.js} +1 -1
- package/dist/esm/{format-CVk5e_GP.js → format-BF3btM7P.js} +1 -1
- package/dist/esm/{framework-delegate-DaLWnISz.js → framework-delegate-60cEIAgt.js} +1 -1
- package/dist/esm/{hardware-back-button-D8W4L0JP.js → hardware-back-button-rhkwRNk2.js} +1 -1
- package/dist/esm/{helpers-BIgoInJU.js → helpers-DLLANtRS.js} +1 -1
- package/dist/esm/{index-C8Dsa6li.js → index-BZHVn0iF.js} +4 -4
- package/dist/esm/{index-DHw2lZxe.js → index-Bl4BUvBL.js} +2 -2
- package/dist/esm/{index-BmOR8tCv.js → index-DOrtAUWV.js} +2 -2
- package/dist/esm/{index-C5ZdL0qp.js → index-D_7MeuVD.js} +5 -5
- package/dist/esm/{index-elneMH8y.js → index-JgU5uTSY.js} +2 -2
- package/dist/esm/{index-CKYcsw8f.js → index-h81G-QbJ.js} +50 -16
- package/dist/esm/index.js +12 -12
- package/dist/esm/{input-shims-09NN97kF.js → input-shims-C2ipc_XX.js} +3 -3
- package/dist/esm/{input.utils-BxyH9l1w.js → input.utils-D-qoPjqr.js} +1 -1
- package/dist/esm/ion-accordion_2.entry.js +3 -3
- package/dist/esm/ion-action-sheet.entry.js +10 -10
- package/dist/esm/ion-alert.entry.js +10 -10
- package/dist/esm/ion-app_8.entry.js +12 -12
- 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 +32 -24
- 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 +13 -15
- package/dist/esm/ion-item_8.entry.js +3 -3
- package/dist/esm/ion-loading.entry.js +8 -8
- package/dist/esm/ion-menu_3.entry.js +8 -8
- package/dist/esm/ion-modal.entry.js +9 -9
- 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 +211 -47
- package/dist/esm/ion-picker.entry.js +2 -2
- package/dist/esm/ion-popover.entry.js +8 -8
- 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 +14 -10
- package/dist/esm/ion-select-modal.entry.js +8 -8
- package/dist/esm/ion-select_3.entry.js +57 -47
- 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-lrowsHfi.js → ionic-global-B7I1sdvg.js} +1 -1
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-BQhADrk1.js → ios.transition-C-6IaIxe.js} +4 -4
- package/dist/esm/{item-multiple-inputs-D_N3fDkD.js → item-multiple-inputs-DI91syHS.js} +1 -1
- package/dist/esm/loader.js +4 -4
- package/dist/esm/{md.transition-D58NpmRa.js → md.transition-dyqt0t0d.js} +4 -4
- package/dist/esm/{overlays-BpnIFlXI.js → overlays-CiFoZEq1.js} +5 -5
- package/dist/esm/{select-option-render-lIuu64EV.js → select-option-render-CUJpruSC.js} +2 -2
- package/dist/esm/{slot-mutation-controller-rS_T3FDR.js → slot-mutation-controller-wFuztlVD.js} +1 -1
- package/dist/esm/{status-tap-CpFQMLl6.js → status-tap-Dn_42wiy.js} +3 -3
- package/dist/esm/{swipe-back-rmc7zeNW.js → swipe-back-CqOqrHW7.js} +2 -2
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-d8deff43.entry.js → p-026e2e4c.entry.js} +1 -1
- package/dist/ionic/{p-RzUn7cKs.js → p-06ZcwRF5.js} +1 -1
- package/dist/ionic/{p-b62bfce8.entry.js → p-082b8125.entry.js} +1 -1
- package/dist/ionic/{p-16e9f542.entry.js → p-0b52d921.entry.js} +1 -1
- package/dist/ionic/{p-485fb218.entry.js → p-1a20571c.entry.js} +1 -1
- package/dist/ionic/{p-90ba736e.entry.js → p-1f66c230.entry.js} +1 -1
- package/dist/ionic/{p-a0fee899.entry.js → p-2aabd568.entry.js} +1 -1
- package/dist/ionic/{p-295ff427.entry.js → p-2ff12c8a.entry.js} +1 -1
- package/dist/ionic/p-326e0d05.entry.js +4 -0
- package/dist/ionic/p-392079fa.entry.js +4 -0
- package/dist/ionic/{p-48c859fe.entry.js → p-39415b06.entry.js} +1 -1
- package/dist/ionic/{p-886d9e66.entry.js → p-3bad6750.entry.js} +1 -1
- package/dist/ionic/{p-6f048604.entry.js → p-43bae3f5.entry.js} +1 -1
- package/dist/ionic/{p-d3384a40.entry.js → p-47b8b59a.entry.js} +1 -1
- package/dist/ionic/p-4dcd329a.entry.js +4 -0
- package/dist/ionic/{p-478035a7.entry.js → p-53ba5651.entry.js} +1 -1
- package/dist/ionic/{p-bbf6878c.entry.js → p-546b1109.entry.js} +1 -1
- package/dist/ionic/{p-8dd4c026.entry.js → p-5dc53bdf.entry.js} +1 -1
- package/dist/ionic/{p-1df75f9e.entry.js → p-5ed60413.entry.js} +1 -1
- package/dist/ionic/{p-05800a02.entry.js → p-5fce4bf4.entry.js} +1 -1
- package/dist/ionic/{p-ddfb7e5f.entry.js → p-6d84fa9f.entry.js} +1 -1
- package/dist/ionic/{p-68507e70.entry.js → p-70334101.entry.js} +1 -1
- package/dist/ionic/{p-72ad7c64.entry.js → p-7c859f42.entry.js} +1 -1
- package/dist/ionic/{p-f376876b.entry.js → p-83aa7d47.entry.js} +1 -1
- package/dist/ionic/{p-959df5f8.entry.js → p-8d72244b.entry.js} +1 -1
- package/dist/ionic/{p-34b9379b.entry.js → p-8db6e422.entry.js} +1 -1
- package/dist/ionic/{p-9e455875.entry.js → p-8e388a30.entry.js} +1 -1
- package/dist/ionic/{p-b5f37106.entry.js → p-9452849d.entry.js} +1 -1
- package/dist/ionic/{p-75887ee0.entry.js → p-986a1db8.entry.js} +1 -1
- package/dist/ionic/{p-a54bcd16.entry.js → p-9e688396.entry.js} +1 -1
- package/dist/ionic/{p-cad4eccf.entry.js → p-9eba0d8a.entry.js} +1 -1
- package/dist/ionic/{p-8e007f11.entry.js → p-9f2d3987.entry.js} +1 -1
- package/{components/p-BSARlp49.js → dist/ionic/p-BC17SPKH.js} +1 -1
- package/dist/ionic/p-BRa1Jjxr.js +4 -0
- package/dist/ionic/{p-De0eY881.js → p-BRc8gq5v.js} +1 -1
- package/{components/p-66ogmUZU.js → dist/ionic/p-BpG7jkT9.js} +1 -1
- package/dist/ionic/{p-B1Y7LZhV.js → p-C10K-FJg.js} +1 -1
- package/dist/ionic/{p-D9yvytgv.js → p-C2BY_4Wp.js} +1 -1
- package/dist/ionic/{p-BZVE25Gu.js → p-CH8tk7Pr.js} +1 -1
- package/dist/ionic/{p-CDBop-kz.js → p-CTBfxfjC.js} +1 -1
- package/dist/ionic/p-Cc-fFNy8.js +4 -0
- package/dist/ionic/p-Cc4w3fVf.js +4 -0
- package/{components/p-BuPAFTWI.js → dist/ionic/p-CoEa7CiN.js} +1 -1
- package/dist/ionic/p-CvRL-Eju.js +4 -0
- package/dist/ionic/{p-DdhHqKj-.js → p-DA52akcQ.js} +1 -1
- package/dist/ionic/p-DA88iqXQ.js +4 -0
- package/dist/ionic/{p-DXJgZWgi.js → p-DMj-M2c4.js} +1 -1
- package/dist/ionic/p-D_IgV7tz.js +4 -0
- package/dist/ionic/{p-VquyMbjp.js → p-DoUx_N0R.js} +1 -1
- package/dist/ionic/{p-C4IBDDj6.js → p-KJ5pLPiN.js} +1 -1
- package/dist/ionic/{p-ByLaqOPm.js → p-Q9w8L_Sw.js} +1 -1
- package/dist/ionic/{p-ClrlQU2y.js → p-S1shXW5M.js} +1 -1
- package/dist/ionic/{p-1db2afb4.entry.js → p-a2fccdaa.entry.js} +1 -1
- package/dist/ionic/{p-fbd83d4c.entry.js → p-ac71362a.entry.js} +1 -1
- package/dist/ionic/{p-b7a11b58.entry.js → p-b62c04b2.entry.js} +1 -1
- package/dist/ionic/p-b8cd338d.entry.js +4 -0
- package/dist/ionic/{p-5f216b79.entry.js → p-ca57763d.entry.js} +1 -1
- package/dist/ionic/{p-39a8d4e0.entry.js → p-cc749877.entry.js} +1 -1
- package/dist/ionic/{p-56307aea.entry.js → p-d1539609.entry.js} +1 -1
- package/dist/ionic/{p-cdc5115e.entry.js → p-d1b888de.entry.js} +1 -1
- package/dist/ionic/p-da5a7bcd.entry.js +4 -0
- package/dist/ionic/{p-70ee8888.entry.js → p-dadcb3d2.entry.js} +1 -1
- package/dist/ionic/{p-0eb50dca.entry.js → p-e090eca3.entry.js} +1 -1
- package/dist/ionic/{p-873a315a.entry.js → p-e5a54d99.entry.js} +1 -1
- package/dist/ionic/{p-c49165af.entry.js → p-e93cc1e1.entry.js} +1 -1
- package/dist/ionic/p-eab77a74.entry.js +4 -0
- package/dist/ionic/{p-aebc4d69.entry.js → p-eaeac54e.entry.js} +1 -1
- package/dist/ionic/{p-e538f18d.entry.js → p-ecfc9c71.entry.js} +1 -1
- package/dist/ionic/{p-5ee2d7b1.entry.js → p-eeb65463.entry.js} +1 -1
- package/dist/ionic/{p-881b6954.entry.js → p-f0645c98.entry.js} +1 -1
- package/dist/ionic/{p-d8bae128.entry.js → p-f607ad4f.entry.js} +1 -1
- package/dist/ionic/{p-61c799d1.entry.js → p-fb4dabbb.entry.js} +1 -1
- package/dist/ionic/{p-63bbba8d.entry.js → p-fe80ebb1.entry.js} +1 -1
- package/dist/ionic/p-h81G-QbJ.js +6 -0
- package/dist/ionic/p-w3KTiug9.js +4 -0
- package/{components/p-RFfE9hF6.js → dist/ionic/p-wdSUbx5C.js} +1 -1
- package/dist/types/components/picker-column/picker-column.d.ts +42 -0
- package/dist/types/components.d.ts +1 -1
- package/dist/types/stencil-public-runtime.d.ts +12 -0
- package/hydrate/index.js +328 -123
- package/hydrate/index.mjs +328 -123
- package/loader/index.d.ts +1 -1
- package/package.json +2 -2
- package/components/p-6Vp915Y7.js +0 -4
- package/components/p-AQcCdH2_.js +0 -4
- package/components/p-BdwCtX8Y.js +0 -4
- package/components/p-BxhE2W85.js +0 -4
- package/components/p-CR9OgE6N.js +0 -4
- package/components/p-CaZeZIL2.js +0 -4
- package/components/p-CqyGR9Aq.js +0 -4
- package/components/p-DCWfzDM8.js +0 -4
- package/components/p-DQ1IPvZO.js +0 -4
- package/components/p-DfdYCsov.js +0 -4
- package/components/p-DhOoEIAs.js +0 -4
- package/components/p-Dl_7b_UJ.js +0 -4
- package/components/p-HVYBAhFx.js +0 -4
- package/dist/ionic/p-18d532a3.entry.js +0 -4
- package/dist/ionic/p-4437015c.entry.js +0 -4
- package/dist/ionic/p-49b9d405.entry.js +0 -4
- package/dist/ionic/p-8f464a8f.entry.js +0 -4
- package/dist/ionic/p-8f51110d.entry.js +0 -4
- package/dist/ionic/p-B5RyLYvl.js +0 -4
- package/dist/ionic/p-BQv5i5Kf.js +0 -4
- package/dist/ionic/p-BnGA34Pd.js +0 -4
- package/dist/ionic/p-C06QNN45.js +0 -4
- package/dist/ionic/p-CCVlNZ__.js +0 -4
- package/dist/ionic/p-CKYcsw8f.js +0 -5
- package/dist/ionic/p-CazSodad.js +0 -4
- package/dist/ionic/p-DgUL3JbO.js +0 -4
- package/dist/ionic/p-f521b13c.entry.js +0 -4
|
@@ -1206,7 +1206,6 @@ export class Datetime {
|
|
|
1206
1206
|
}
|
|
1207
1207
|
renderCombinedDatePickerColumn() {
|
|
1208
1208
|
const { defaultParts, disabled, workingParts, locale, minParts, maxParts, todayParts, isDateEnabled } = this;
|
|
1209
|
-
const activePart = this.getActivePartsWithFallback();
|
|
1210
1209
|
/**
|
|
1211
1210
|
* By default, generate a range of 3 months:
|
|
1212
1211
|
* Previous month, current month, and next month
|
|
@@ -1262,8 +1261,10 @@ export class Datetime {
|
|
|
1262
1261
|
return (h("ion-picker-column", { part: WHEEL_PART, "aria-label": "Select a date", class: "date-column", color: this.color, disabled: disabled, value: todayString, onIonChange: (ev) => {
|
|
1263
1262
|
const { value } = ev.detail;
|
|
1264
1263
|
const findPart = parts.find(({ month, day, year }) => value === `${year}-${month}-${day}`);
|
|
1264
|
+
// Read live so parts a sibling column just committed are included.
|
|
1265
|
+
const activePart = this.getActivePartsWithFallback();
|
|
1265
1266
|
this.setWorkingParts({
|
|
1266
|
-
...workingParts,
|
|
1267
|
+
...this.workingParts,
|
|
1267
1268
|
...findPart,
|
|
1268
1269
|
});
|
|
1269
1270
|
this.setActiveParts({
|
|
@@ -1340,11 +1341,12 @@ export class Datetime {
|
|
|
1340
1341
|
return [];
|
|
1341
1342
|
}
|
|
1342
1343
|
const { disabled, workingParts } = this;
|
|
1343
|
-
const activePart = this.getActivePartsWithFallback();
|
|
1344
1344
|
const pickerColumnValue = (workingParts.day !== null ? workingParts.day : this.defaultParts.day) ?? undefined;
|
|
1345
1345
|
return (h("ion-picker-column", { part: WHEEL_PART, "aria-label": "Select a day", class: "day-column", color: this.color, disabled: disabled, value: pickerColumnValue, onIonChange: (ev) => {
|
|
1346
|
+
// Read live so parts a sibling column just committed are included.
|
|
1347
|
+
const activePart = this.getActivePartsWithFallback();
|
|
1346
1348
|
this.setWorkingParts({
|
|
1347
|
-
...workingParts,
|
|
1349
|
+
...this.workingParts,
|
|
1348
1350
|
day: ev.detail.value,
|
|
1349
1351
|
});
|
|
1350
1352
|
this.setActiveParts({
|
|
@@ -1359,10 +1361,11 @@ export class Datetime {
|
|
|
1359
1361
|
return [];
|
|
1360
1362
|
}
|
|
1361
1363
|
const { disabled, workingParts } = this;
|
|
1362
|
-
const activePart = this.getActivePartsWithFallback();
|
|
1363
1364
|
return (h("ion-picker-column", { part: WHEEL_PART, "aria-label": "Select a month", class: "month-column", color: this.color, disabled: disabled, value: workingParts.month, onIonChange: (ev) => {
|
|
1365
|
+
// Read live so parts a sibling column just committed are included.
|
|
1366
|
+
const activePart = this.getActivePartsWithFallback();
|
|
1364
1367
|
this.setWorkingParts({
|
|
1365
|
-
...workingParts,
|
|
1368
|
+
...this.workingParts,
|
|
1366
1369
|
month: ev.detail.value,
|
|
1367
1370
|
});
|
|
1368
1371
|
// Month wheel is navigation-only in multi-select mode as a fix for https://github.com/ionic-team/ionic-framework/issues/29673
|
|
@@ -1380,10 +1383,11 @@ export class Datetime {
|
|
|
1380
1383
|
return [];
|
|
1381
1384
|
}
|
|
1382
1385
|
const { disabled, workingParts } = this;
|
|
1383
|
-
const activePart = this.getActivePartsWithFallback();
|
|
1384
1386
|
return (h("ion-picker-column", { part: WHEEL_PART, "aria-label": "Select a year", class: "year-column", color: this.color, disabled: disabled, value: workingParts.year, onIonChange: (ev) => {
|
|
1387
|
+
// Read live so parts a sibling column just committed are included.
|
|
1388
|
+
const activePart = this.getActivePartsWithFallback();
|
|
1385
1389
|
this.setWorkingParts({
|
|
1386
|
-
...workingParts,
|
|
1390
|
+
...this.workingParts,
|
|
1387
1391
|
year: ev.detail.value,
|
|
1388
1392
|
});
|
|
1389
1393
|
// Year wheel is navigation-only in multi-select mode as a fix for https://github.com/ionic-team/ionic-framework/issues/29673
|
|
@@ -1419,13 +1423,14 @@ export class Datetime {
|
|
|
1419
1423
|
];
|
|
1420
1424
|
}
|
|
1421
1425
|
renderHourPickerColumn(hoursData) {
|
|
1422
|
-
const { disabled
|
|
1426
|
+
const { disabled } = this;
|
|
1423
1427
|
if (hoursData.length === 0)
|
|
1424
1428
|
return [];
|
|
1425
1429
|
const activePart = this.getActivePartsWithFallback();
|
|
1426
1430
|
return (h("ion-picker-column", { part: WHEEL_PART, "aria-label": "Select an hour", color: this.color, disabled: disabled, value: activePart.hour, numericInput: true, onIonChange: (ev) => {
|
|
1431
|
+
// Read live so parts a sibling column just committed are included.
|
|
1427
1432
|
this.setWorkingParts({
|
|
1428
|
-
...workingParts,
|
|
1433
|
+
...this.workingParts,
|
|
1429
1434
|
hour: ev.detail.value,
|
|
1430
1435
|
});
|
|
1431
1436
|
this.setActiveParts({
|
|
@@ -1436,13 +1441,14 @@ export class Datetime {
|
|
|
1436
1441
|
} }, hoursData.map((hour) => (h("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)))));
|
|
1437
1442
|
}
|
|
1438
1443
|
renderMinutePickerColumn(minutesData) {
|
|
1439
|
-
const { disabled
|
|
1444
|
+
const { disabled } = this;
|
|
1440
1445
|
if (minutesData.length === 0)
|
|
1441
1446
|
return [];
|
|
1442
1447
|
const activePart = this.getActivePartsWithFallback();
|
|
1443
1448
|
return (h("ion-picker-column", { part: WHEEL_PART, "aria-label": "Select a minute", color: this.color, disabled: disabled, value: activePart.minute, numericInput: true, onIonChange: (ev) => {
|
|
1449
|
+
// Read live so parts a sibling column just committed are included.
|
|
1444
1450
|
this.setWorkingParts({
|
|
1445
|
-
...workingParts,
|
|
1451
|
+
...this.workingParts,
|
|
1446
1452
|
minute: ev.detail.value,
|
|
1447
1453
|
});
|
|
1448
1454
|
this.setActiveParts({
|
|
@@ -1453,16 +1459,18 @@ export class Datetime {
|
|
|
1453
1459
|
} }, minutesData.map((minute) => (h("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)))));
|
|
1454
1460
|
}
|
|
1455
1461
|
renderDayPeriodPickerColumn(dayPeriodData) {
|
|
1456
|
-
const { disabled
|
|
1462
|
+
const { disabled } = this;
|
|
1457
1463
|
if (dayPeriodData.length === 0) {
|
|
1458
1464
|
return [];
|
|
1459
1465
|
}
|
|
1460
1466
|
const activePart = this.getActivePartsWithFallback();
|
|
1461
1467
|
const isDayPeriodRTL = isLocaleDayPeriodRTL(this.locale);
|
|
1462
1468
|
return (h("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) => {
|
|
1463
|
-
|
|
1469
|
+
// Read live so parts a sibling column just committed are included.
|
|
1470
|
+
const currentParts = this.workingParts;
|
|
1471
|
+
const hour = calculateHourFromAMPM(currentParts, ev.detail.value);
|
|
1464
1472
|
this.setWorkingParts({
|
|
1465
|
-
...
|
|
1473
|
+
...currentParts,
|
|
1466
1474
|
ampm: ev.detail.value,
|
|
1467
1475
|
hour,
|
|
1468
1476
|
});
|
|
@@ -1814,7 +1822,7 @@ export class Datetime {
|
|
|
1814
1822
|
const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
|
|
1815
1823
|
const hasWheelVariant = hasDatePresentation && preferWheel;
|
|
1816
1824
|
renderHiddenInput(true, el, name, formatValue(value), disabled);
|
|
1817
|
-
return (h(Host, { key: '
|
|
1825
|
+
return (h(Host, { key: '4e0b529a70924b065bcc6191e08550428b5a52a0', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: {
|
|
1818
1826
|
...createColorClasses(color, {
|
|
1819
1827
|
[mode]: true,
|
|
1820
1828
|
['datetime-readonly']: readonly,
|
|
@@ -1826,7 +1834,7 @@ export class Datetime {
|
|
|
1826
1834
|
[`datetime-prefer-wheel`]: hasWheelVariant,
|
|
1827
1835
|
[`datetime-grid`]: isGridStyle,
|
|
1828
1836
|
}),
|
|
1829
|
-
} }, h("div", { key: '
|
|
1837
|
+
} }, h("div", { key: 'cc9d1b92f960984cb0466d0003a240ace67da243', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
|
|
1830
1838
|
}
|
|
1831
1839
|
static get is() { return "ion-datetime"; }
|
|
1832
1840
|
static get encapsulation() { return "shadow"; }
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Host, h } from "@stencil/core";
|
|
5
5
|
import { findClosestIonContent, disableContentScrollY, resetContentScrollY } from "../../utils/content/index";
|
|
6
|
-
import { isEndSide } from "../../utils/helpers";
|
|
6
|
+
import { componentOnReady, isEndSide } from "../../utils/helpers";
|
|
7
7
|
import { printIonWarning } from "../../utils/logging/index";
|
|
8
8
|
import { watchForOptions } from "../../utils/watch-options";
|
|
9
9
|
import { getIonMode } from "../../global/ionic-global";
|
|
@@ -178,19 +178,17 @@ export class ItemSliding {
|
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
async updateOptions() {
|
|
181
|
-
const options = this.el.querySelectorAll('ion-item-options');
|
|
181
|
+
const options = Array.from(this.el.querySelectorAll('ion-item-options'));
|
|
182
|
+
/**
|
|
183
|
+
* Frameworks that assign element props after inserting the element haven't set
|
|
184
|
+
* `side` while `connectedCallback` runs, so reading it any earlier reports every
|
|
185
|
+
* option as `end`.
|
|
186
|
+
*/
|
|
187
|
+
await Promise.all(options.map((option) => new Promise((resolve) => componentOnReady(option, resolve))));
|
|
182
188
|
let sides = 0;
|
|
183
189
|
// Reset left and right options in case they were removed
|
|
184
190
|
this.leftOptions = this.rightOptions = undefined;
|
|
185
|
-
for (
|
|
186
|
-
const item = options.item(i);
|
|
187
|
-
/**
|
|
188
|
-
* We cannot use the componentOnReady helper
|
|
189
|
-
* util here since we need to wait for all of these items
|
|
190
|
-
* to be ready before we set `this.sides` and `this.optsDirty`.
|
|
191
|
-
*/
|
|
192
|
-
// eslint-disable-next-line custom-rules/no-component-on-ready-method
|
|
193
|
-
const option = item.componentOnReady !== undefined ? await item.componentOnReady() : item;
|
|
191
|
+
for (const option of options) {
|
|
194
192
|
const side = isEndSide(option.side ?? option.getAttribute('side')) ? 'end' : 'start';
|
|
195
193
|
if (side === 'start') {
|
|
196
194
|
this.leftOptions = option;
|
|
@@ -389,7 +387,7 @@ export class ItemSliding {
|
|
|
389
387
|
}
|
|
390
388
|
render() {
|
|
391
389
|
const mode = getIonMode(this);
|
|
392
|
-
return (h(Host, { key: '
|
|
390
|
+
return (h(Host, { key: '02174ca963753d3a51a4249068f3d436f8acb03d', class: {
|
|
393
391
|
[mode]: true,
|
|
394
392
|
'item-sliding-active-slide': this.state !== 2 /* SlidingState.Disabled */,
|
|
395
393
|
'item-sliding-active-options-end': (this.state & 8 /* SlidingState.End */) !== 0,
|
|
@@ -20,6 +20,12 @@ export class PickerColumn {
|
|
|
20
20
|
this.isColumnVisible = false;
|
|
21
21
|
this.canExitInputMode = true;
|
|
22
22
|
this.updateValueTextOnScroll = false;
|
|
23
|
+
this.isUserScroll = false;
|
|
24
|
+
/**
|
|
25
|
+
* The haptics for the wheel picker are an iOS-only feature. As a result,
|
|
26
|
+
* they should be disabled on Android.
|
|
27
|
+
*/
|
|
28
|
+
this.enableHaptics = false;
|
|
23
29
|
this.ariaLabel = null;
|
|
24
30
|
this.isActive = false;
|
|
25
31
|
/**
|
|
@@ -51,6 +57,12 @@ export class PickerColumn {
|
|
|
51
57
|
*/
|
|
52
58
|
this.canExitInputMode = canExitInputMode;
|
|
53
59
|
this.updateValueTextOnScroll = false;
|
|
60
|
+
/**
|
|
61
|
+
* This scroll takes over from whatever the user was doing, so an outside
|
|
62
|
+
* press must not commit an option the column is only passing through.
|
|
63
|
+
*/
|
|
64
|
+
this.isUserScroll = false;
|
|
65
|
+
this.stopWatchingForOutsidePress();
|
|
54
66
|
scrollEl.scroll({
|
|
55
67
|
top,
|
|
56
68
|
left: 0,
|
|
@@ -105,6 +117,117 @@ export class PickerColumn {
|
|
|
105
117
|
}
|
|
106
118
|
this.isActive = state;
|
|
107
119
|
};
|
|
120
|
+
this.clearScrollEndTimeout = () => {
|
|
121
|
+
if (this.scrollEndTimeout) {
|
|
122
|
+
clearTimeout(this.scrollEndTimeout);
|
|
123
|
+
this.scrollEndTimeout = undefined;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Resets the idle timer that commits the centered option.
|
|
128
|
+
*/
|
|
129
|
+
this.resetScrollEndTimeout = () => {
|
|
130
|
+
this.clearScrollEndTimeout();
|
|
131
|
+
this.scrollEndTimeout = setTimeout(this.settle, SCROLL_END_DELAY);
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Capture so the column still commits if an application's own pointerdown
|
|
135
|
+
* handler stops the event before it reaches the document.
|
|
136
|
+
*/
|
|
137
|
+
this.watchForOutsidePress = () => {
|
|
138
|
+
doc?.addEventListener('pointerdown', this.onPointerDownOutside, { capture: true });
|
|
139
|
+
};
|
|
140
|
+
this.stopWatchingForOutsidePress = () => {
|
|
141
|
+
doc?.removeEventListener('pointerdown', this.onPointerDownOutside, { capture: true });
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Resets everything the current scroll interaction is holding, so nothing
|
|
145
|
+
* pending on it can commit later.
|
|
146
|
+
*/
|
|
147
|
+
this.discardScroll = () => {
|
|
148
|
+
this.stopWatchingForOutsidePress();
|
|
149
|
+
this.clearScrollEndTimeout();
|
|
150
|
+
this.scrollEndCallback = undefined;
|
|
151
|
+
this.centeredOption = undefined;
|
|
152
|
+
this.haltedAtScrollTop = undefined;
|
|
153
|
+
this.isScrolling = false;
|
|
154
|
+
this.isUserScroll = false;
|
|
155
|
+
this.canExitInputMode = true;
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Commits the option that is currently centered under the highlight and ends
|
|
159
|
+
* the scroll interaction.
|
|
160
|
+
*/
|
|
161
|
+
this.settle = () => {
|
|
162
|
+
const { centeredOption } = this;
|
|
163
|
+
this.clearScrollEndTimeout();
|
|
164
|
+
this.stopWatchingForOutsidePress();
|
|
165
|
+
this.isUserScroll = false;
|
|
166
|
+
this.isScrolling = false;
|
|
167
|
+
this.updateValueTextOnScroll = true;
|
|
168
|
+
this.enableHaptics && hapticSelectionEnd();
|
|
169
|
+
/**
|
|
170
|
+
* Certain tasks (such as those that
|
|
171
|
+
* cause re-renders) should only be done
|
|
172
|
+
* once scrolling has finished, otherwise
|
|
173
|
+
* flickering may occur.
|
|
174
|
+
*/
|
|
175
|
+
const { scrollEndCallback } = this;
|
|
176
|
+
if (scrollEndCallback) {
|
|
177
|
+
scrollEndCallback();
|
|
178
|
+
this.scrollEndCallback = undefined;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Reset this flag as the
|
|
182
|
+
* next scroll interaction could
|
|
183
|
+
* be a scroll from the user. In this
|
|
184
|
+
* case, we should exit input mode.
|
|
185
|
+
*/
|
|
186
|
+
this.canExitInputMode = true;
|
|
187
|
+
if (centeredOption !== undefined) {
|
|
188
|
+
// Cleared here so a later scroll that centers nothing cannot fall back on it.
|
|
189
|
+
this.centeredOption = undefined;
|
|
190
|
+
if (centeredOption.isConnected) {
|
|
191
|
+
this.setValue(centeredOption.value);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
/**
|
|
196
|
+
* Commits the option the user can see when they press anything outside of the
|
|
197
|
+
* column during a scroll they started. This runs on pointerdown rather than
|
|
198
|
+
* click so the value is up to date by the time an application's own click
|
|
199
|
+
* handler (a Save button, for example) reads it.
|
|
200
|
+
*/
|
|
201
|
+
this.onPointerDownOutside = (ev) => {
|
|
202
|
+
const { centeredOption, parentEl, scrollEl } = this;
|
|
203
|
+
if (!this.isScrolling) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* The column can live in another component's Shadow DOM, where a document
|
|
208
|
+
* listener sees the target retargeted to the outer host. The composed path
|
|
209
|
+
* is the only reliable way to tell a press on the column apart.
|
|
210
|
+
*/
|
|
211
|
+
const path = ev.composedPath();
|
|
212
|
+
/**
|
|
213
|
+
* A press anywhere in the parent picker counts as inside, so reaching for a
|
|
214
|
+
* sibling wheel leaves this column coasting.
|
|
215
|
+
*/
|
|
216
|
+
if (path.includes(this.el) || (parentEl != null && path.includes(parentEl))) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Landing on the centered option halts the in-flight momentum scroll, so the
|
|
221
|
+
* committed value and the option the user is left looking at agree. The
|
|
222
|
+
* option list can be replaced mid-scroll, and a detached option has no
|
|
223
|
+
* offset to center on.
|
|
224
|
+
*/
|
|
225
|
+
if (centeredOption !== undefined && centeredOption.isConnected) {
|
|
226
|
+
this.centerPickerItemInView(centeredOption, false, false);
|
|
227
|
+
this.haltedAtScrollTop = scrollEl?.scrollTop;
|
|
228
|
+
}
|
|
229
|
+
this.settle();
|
|
230
|
+
};
|
|
108
231
|
/**
|
|
109
232
|
* When the column scrolls, the component
|
|
110
233
|
* needs to determine which item is centered
|
|
@@ -112,27 +235,42 @@ export class PickerColumn {
|
|
|
112
235
|
* the item object.
|
|
113
236
|
*/
|
|
114
237
|
this.initializeScrollListener = () => {
|
|
115
|
-
|
|
116
|
-
* The haptics for the wheel picker are
|
|
117
|
-
* an iOS-only feature. As a result, they should
|
|
118
|
-
* be disabled on Android.
|
|
119
|
-
*/
|
|
120
|
-
const enableHaptics = isPlatform('ios');
|
|
238
|
+
this.enableHaptics = isPlatform('ios');
|
|
121
239
|
const { el, scrollEl } = this;
|
|
122
|
-
let timeout;
|
|
123
240
|
let activeEl = this.activeItem;
|
|
124
241
|
const scrollCallback = () => {
|
|
125
242
|
raf(() => {
|
|
126
|
-
|
|
243
|
+
/**
|
|
244
|
+
* This frame cannot be cancelled, and moving the column disconnects it
|
|
245
|
+
* without the observer reporting a change, so this checks live state.
|
|
246
|
+
*/
|
|
247
|
+
if (!this.el.isConnected || !this.isColumnVisible || !scrollEl)
|
|
127
248
|
return;
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
249
|
+
const { haltedAtScrollTop } = this;
|
|
250
|
+
if (haltedAtScrollTop !== undefined) {
|
|
251
|
+
/**
|
|
252
|
+
* Still at the halted position, so this frame is the halt landing
|
|
253
|
+
* rather than the wheel moving, and re-arming would start a second
|
|
254
|
+
* commit cycle.
|
|
255
|
+
*/
|
|
256
|
+
if (Math.abs(scrollEl.scrollTop - haltedAtScrollTop) <= HALT_TOLERANCE)
|
|
257
|
+
return;
|
|
258
|
+
this.haltedAtScrollTop = undefined;
|
|
131
259
|
}
|
|
260
|
+
// Armed before the early returns below, so a scroll never ends uncommitted.
|
|
261
|
+
this.resetScrollEndTimeout();
|
|
132
262
|
if (!this.isScrolling) {
|
|
133
|
-
enableHaptics && hapticSelectionStart();
|
|
263
|
+
this.enableHaptics && hapticSelectionStart();
|
|
134
264
|
this.isScrolling = true;
|
|
135
265
|
}
|
|
266
|
+
/**
|
|
267
|
+
* Only a user-driven scroll holds an uncommitted selection. Checked every
|
|
268
|
+
* frame because the user can take hold of the wheel mid-scroll, and
|
|
269
|
+
* re-adding the same listener is a no-op.
|
|
270
|
+
*/
|
|
271
|
+
if (this.isUserScroll) {
|
|
272
|
+
this.watchForOutsidePress();
|
|
273
|
+
}
|
|
136
274
|
/**
|
|
137
275
|
* Select item in the center of the column
|
|
138
276
|
* which is the month/year that we want to select
|
|
@@ -192,18 +330,23 @@ export class PickerColumn {
|
|
|
192
330
|
newActiveElement = fallbackActiveElement;
|
|
193
331
|
}
|
|
194
332
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
333
|
+
/**
|
|
334
|
+
* A scroll can land with no selectable option centered, such as an
|
|
335
|
+
* overscroll bounce briefly centering the empty padding rows. Keep the
|
|
336
|
+
* current selection until an option is centered again.
|
|
337
|
+
*/
|
|
198
338
|
if (newActiveElement === undefined || newActiveElement.disabled) {
|
|
199
339
|
return;
|
|
200
340
|
}
|
|
341
|
+
if (activeEl !== undefined) {
|
|
342
|
+
this.setPickerItemActiveState(activeEl, false);
|
|
343
|
+
}
|
|
201
344
|
/**
|
|
202
345
|
* If we are selecting a new value,
|
|
203
346
|
* we need to run haptics again.
|
|
204
347
|
*/
|
|
205
348
|
if (newActiveElement !== activeEl) {
|
|
206
|
-
enableHaptics && hapticSelectionChanged();
|
|
349
|
+
this.enableHaptics && hapticSelectionChanged();
|
|
207
350
|
if (this.canExitInputMode) {
|
|
208
351
|
/**
|
|
209
352
|
* The native iOS wheel picker
|
|
@@ -235,32 +378,14 @@ export class PickerColumn {
|
|
|
235
378
|
if (this.updateValueTextOnScroll) {
|
|
236
379
|
this.assistiveFocusable?.setAttribute('aria-valuetext', this.getOptionValueText(newActiveElement));
|
|
237
380
|
}
|
|
238
|
-
|
|
239
|
-
this.isScrolling = false;
|
|
240
|
-
this.updateValueTextOnScroll = true;
|
|
241
|
-
enableHaptics && hapticSelectionEnd();
|
|
242
|
-
/**
|
|
243
|
-
* Certain tasks (such as those that
|
|
244
|
-
* cause re-renders) should only be done
|
|
245
|
-
* once scrolling has finished, otherwise
|
|
246
|
-
* flickering may occur.
|
|
247
|
-
*/
|
|
248
|
-
const { scrollEndCallback } = this;
|
|
249
|
-
if (scrollEndCallback) {
|
|
250
|
-
scrollEndCallback();
|
|
251
|
-
this.scrollEndCallback = undefined;
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Reset this flag as the
|
|
255
|
-
* next scroll interaction could
|
|
256
|
-
* be a scroll from the user. In this
|
|
257
|
-
* case, we should exit input mode.
|
|
258
|
-
*/
|
|
259
|
-
this.canExitInputMode = true;
|
|
260
|
-
this.setValue(newActiveElement.value);
|
|
261
|
-
}, 250);
|
|
381
|
+
this.centeredOption = newActiveElement;
|
|
262
382
|
});
|
|
263
383
|
};
|
|
384
|
+
const userScrollCallback = () => {
|
|
385
|
+
this.isUserScroll = true;
|
|
386
|
+
// Taking hold of the wheel ends the halt even if it has not moved yet.
|
|
387
|
+
this.haltedAtScrollTop = undefined;
|
|
388
|
+
};
|
|
264
389
|
/**
|
|
265
390
|
* Wrap this in an raf so that the scroll callback
|
|
266
391
|
* does not fire when component is initially shown.
|
|
@@ -269,8 +394,19 @@ export class PickerColumn {
|
|
|
269
394
|
if (!scrollEl)
|
|
270
395
|
return;
|
|
271
396
|
scrollEl.addEventListener('scroll', scrollCallback);
|
|
397
|
+
scrollEl.addEventListener('pointerdown', userScrollCallback);
|
|
398
|
+
scrollEl.addEventListener('wheel', userScrollCallback, { passive: true });
|
|
399
|
+
/**
|
|
400
|
+
* A `pointerdown` fires once per touch, so a drag that pauses long enough
|
|
401
|
+
* to commit would look like a scroll the column started. A `touchmove`
|
|
402
|
+
* keeps arriving while the finger moves.
|
|
403
|
+
*/
|
|
404
|
+
scrollEl.addEventListener('touchmove', userScrollCallback, { passive: true });
|
|
272
405
|
this.destroyScrollListener = () => {
|
|
273
406
|
scrollEl.removeEventListener('scroll', scrollCallback);
|
|
407
|
+
scrollEl.removeEventListener('pointerdown', userScrollCallback);
|
|
408
|
+
scrollEl.removeEventListener('wheel', userScrollCallback);
|
|
409
|
+
scrollEl.removeEventListener('touchmove', userScrollCallback);
|
|
274
410
|
};
|
|
275
411
|
});
|
|
276
412
|
};
|
|
@@ -455,6 +591,14 @@ export class PickerColumn {
|
|
|
455
591
|
}
|
|
456
592
|
else {
|
|
457
593
|
this.isColumnVisible = false;
|
|
594
|
+
/**
|
|
595
|
+
* The pending timer still runs so it resets the scroll state, but the
|
|
596
|
+
* option it would have committed is dropped. A column the user cannot
|
|
597
|
+
* see should not change its value.
|
|
598
|
+
*/
|
|
599
|
+
this.stopWatchingForOutsidePress();
|
|
600
|
+
this.centeredOption = undefined;
|
|
601
|
+
this.haltedAtScrollTop = undefined;
|
|
458
602
|
if (this.destroyScrollListener) {
|
|
459
603
|
this.destroyScrollListener();
|
|
460
604
|
this.destroyScrollListener = undefined;
|
|
@@ -525,6 +669,13 @@ export class PickerColumn {
|
|
|
525
669
|
connectedCallback() {
|
|
526
670
|
this.ariaLabel = this.el.getAttribute('aria-label') ?? 'Select a value';
|
|
527
671
|
}
|
|
672
|
+
disconnectedCallback() {
|
|
673
|
+
/**
|
|
674
|
+
* A pending settle would otherwise commit a value on a column that is no
|
|
675
|
+
* longer in the DOM.
|
|
676
|
+
*/
|
|
677
|
+
this.discardScroll();
|
|
678
|
+
}
|
|
528
679
|
get activeItem() {
|
|
529
680
|
const { value } = this;
|
|
530
681
|
const options = Array.from(this.el.querySelectorAll('ion-picker-column-option'));
|
|
@@ -542,14 +693,14 @@ export class PickerColumn {
|
|
|
542
693
|
render() {
|
|
543
694
|
const { color, disabled, isActive, numericInput } = this;
|
|
544
695
|
const mode = getIonMode(this);
|
|
545
|
-
return (h(Host, { key: '
|
|
696
|
+
return (h(Host, { key: '60a893619d0b01fba53fbccef67a10d533a22657', class: createColorClasses(color, {
|
|
546
697
|
[mode]: true,
|
|
547
698
|
['picker-column-active']: isActive,
|
|
548
699
|
['picker-column-numeric-input']: numericInput,
|
|
549
700
|
['picker-column-disabled']: disabled,
|
|
550
|
-
}) }, h("slot", { key: '
|
|
701
|
+
}) }, h("slot", { key: '79f1e047f89c5ec916ed02efaac56ef3f73b8969', name: "prefix" }), h("div", { key: 'c45c86e88353a196ff38159f40f390bc27852c9e', class: "picker-opts", ref: (el) => {
|
|
551
702
|
this.scrollEl = el;
|
|
552
|
-
}, 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) }, h("div", { key: '
|
|
703
|
+
}, 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) }, h("div", { key: 'e02d76752f5d3dd4cd2846fbc28645f1508a4b49', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: 'd577bcbadc530970b2781692b050811633625c5a', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: 'c89e78c3a896bc1f55b922d01df16fdbb1259bdd', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("slot", { key: '6c597ff899692597432ee2aa0b42de53b86deed4' }), h("div", { key: '91686ed94f14c47647836ed4d63e54b5c54ee3b9', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '2ff058c6d0e8cef4e143c2d848f9a52684579af1', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: 'bc7386bec6fced36e44084a7a137b3fe6506c996', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), h("slot", { key: '8835fd3f4e025bce964e6f05984c9aaadc20d7fb', name: "suffix" })));
|
|
553
704
|
}
|
|
554
705
|
static get is() { return "ion-picker-column"; }
|
|
555
706
|
static get encapsulation() { return "shadow"; }
|
|
@@ -773,3 +924,16 @@ export class PickerColumn {
|
|
|
773
924
|
}
|
|
774
925
|
}
|
|
775
926
|
const PICKER_ITEM_ACTIVE_CLASS = 'option-active';
|
|
927
|
+
/**
|
|
928
|
+
* How long the column must be idle before the centered option is treated as
|
|
929
|
+
* the user's selection. Replaceable by the `scrollend` event once that is
|
|
930
|
+
* supported everywhere (https://caniuse.com/?search=scrollend).
|
|
931
|
+
*/
|
|
932
|
+
const SCROLL_END_DELAY = 250;
|
|
933
|
+
/**
|
|
934
|
+
* How far, in pixels, the column may report from where it was halted and still
|
|
935
|
+
* count as having stayed there. Centering targets a position between two snap
|
|
936
|
+
* points, so mandatory snapping corrects it by half the column height less
|
|
937
|
+
* three option heights: 2px at the default sizes.
|
|
938
|
+
*/
|
|
939
|
+
const HALT_TOLERANCE = 2;
|
|
@@ -58,11 +58,6 @@ export class SegmentButton {
|
|
|
58
58
|
addEventListener(segmentEl, 'ionSelect', this.updateState);
|
|
59
59
|
addEventListener(segmentEl, 'ionStyle', this.updateStyle);
|
|
60
60
|
}
|
|
61
|
-
// Prevent buttons from being disabled when associated with segment content
|
|
62
|
-
if (this.contentId && this.disabled) {
|
|
63
|
-
printIonWarning(`[ion-segment-button] - Segment buttons cannot be disabled when associated with an <ion-segment-content>.`);
|
|
64
|
-
this.disabled = false;
|
|
65
|
-
}
|
|
66
61
|
}
|
|
67
62
|
disconnectedCallback() {
|
|
68
63
|
const segmentEl = this.segmentEl;
|
|
@@ -79,6 +74,15 @@ export class SegmentButton {
|
|
|
79
74
|
// Return if there is no contentId defined
|
|
80
75
|
if (!this.contentId)
|
|
81
76
|
return;
|
|
77
|
+
/**
|
|
78
|
+
* Checked here rather than in `connectedCallback` so frameworks that assign element
|
|
79
|
+
* props after inserting the element have set `disabled` by now. A disabled ion-segment
|
|
80
|
+
* pushes that onto its buttons too, which this guard should not undo.
|
|
81
|
+
*/
|
|
82
|
+
if (this.disabled && this.segmentEl?.disabled !== true) {
|
|
83
|
+
printIonWarning(`[ion-segment-button] - Segment buttons cannot be disabled when associated with an <ion-segment-content>.`);
|
|
84
|
+
this.disabled = false;
|
|
85
|
+
}
|
|
82
86
|
// Attempt to find the Segment Content by its contentId
|
|
83
87
|
const segmentContent = document.getElementById(this.contentId);
|
|
84
88
|
// If no associated Segment Content exists, log an error and return
|
|
@@ -113,7 +117,7 @@ export class SegmentButton {
|
|
|
113
117
|
const { checked, type, disabled, hasIcon, hasLabel, layout, segmentEl } = this;
|
|
114
118
|
const mode = getIonMode(this);
|
|
115
119
|
const hasSegmentColor = () => segmentEl?.color !== undefined;
|
|
116
|
-
return (h(Host, { key: '
|
|
120
|
+
return (h(Host, { key: 'd8acc71d87e26b32f20b2d0f9a6acc9f0dab0dee', class: {
|
|
117
121
|
[mode]: true,
|
|
118
122
|
'in-toolbar': hostContext('ion-toolbar', this.el),
|
|
119
123
|
'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
|
|
@@ -129,7 +133,7 @@ export class SegmentButton {
|
|
|
129
133
|
'ion-activatable': true,
|
|
130
134
|
'ion-activatable-instant': true,
|
|
131
135
|
'ion-focusable': true,
|
|
132
|
-
} }, h("button", { key: '
|
|
136
|
+
} }, h("button", { key: 'ce65da07b1a012bce353b3c6c24eecfbd4071d54', "aria-selected": checked ? 'true' : 'false', role: "tab", ref: (el) => (this.nativeEl = el), type: type, class: "button-native", part: "native", disabled: disabled, ...this.inheritedAttributes }, h("span", { key: '6c4b4dcd20e407e5dc31674bea23633d8a09187a', class: "button-inner" }, h("slot", { key: '817145ae77a3c5ada88ab95723d881f1bde96b2a' })), mode === 'md' && h("ion-ripple-effect", { key: '054d7e5e2a13013914fac6bbde8efdb28d9b459e' })), h("div", { key: 'c48074881a302510ad4752eeb9383222cd3a54cb', part: "indicator", class: "segment-button-indicator segment-button-indicator-animated" }, h("div", { key: '7672a6b10ee18ad026b798fbd8207dc3cd5683f9', part: "indicator-background", class: "segment-button-indicator-background" }))));
|
|
133
137
|
}
|
|
134
138
|
static get is() { return "ion-segment-button"; }
|
|
135
139
|
static get encapsulation() { return "shadow"; }
|