@ionic/core 7.5.7-dev.11701273756.1eb73d4c → 7.5.7-dev.11701896424.13d40ac9
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/animation.js +11 -12
- package/components/checkbox.js +0 -2
- package/components/data.js +64 -14
- package/components/index4.js +12 -10
- package/components/index5.js +22 -0
- package/components/input-shims.js +7 -12
- package/components/input.utils.js +2 -3
- package/components/ion-datetime.js +38 -19
- package/components/ion-input.js +8 -31
- package/components/ion-modal.js +2 -2
- package/components/ion-range.js +0 -2
- package/components/ion-select.js +29 -44
- package/components/ion-skeleton-text.js +1 -14
- package/components/ion-textarea.js +7 -30
- package/components/ion-toast.js +74 -419
- package/components/ion-toggle.js +0 -2
- package/components/item.js +2 -2
- package/components/label.js +2 -2
- package/components/overlays.js +1 -2
- package/components/picker-column-internal.js +7 -12
- package/components/radio-group.js +0 -2
- package/components/radio.js +2 -42
- package/dist/cjs/{animation-d101aa7a.js → animation-1083855c.js} +12 -13
- package/dist/cjs/{button-active-ba107e4e.js → button-active-af897e0e.js} +1 -1
- package/dist/cjs/{capacitor-f68447d3.js → capacitor-2ffba62a.js} +1 -1
- package/dist/cjs/{data-c8d21093.js → data-912a6f37.js} +64 -14
- package/dist/cjs/{haptic-a74c2767.js → haptic-678abc9f.js} +1 -1
- package/dist/cjs/index-306a7476.js +32 -0
- package/dist/cjs/{index-56d41f51.js → index-573877f3.js} +2 -2
- package/dist/cjs/{index-e9634bc9.js → index-9f379eaa.js} +1 -1
- package/dist/cjs/{index-4f0c67e1.js → index-d7561763.js} +13 -11
- package/dist/cjs/index.cjs.js +8 -8
- package/dist/cjs/{input-shims-3e3f35b9.js → input-shims-b0a75a01.js} +10 -15
- package/dist/cjs/{input.utils-bdb6953c.js → input.utils-0fe3097c.js} +3 -4
- package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -6
- package/dist/cjs/ion-alert.cjs.entry.js +6 -6
- package/dist/cjs/ion-app_8.cjs.entry.js +8 -8
- package/dist/cjs/ion-checkbox.cjs.entry.js +0 -2
- package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
- package/dist/cjs/ion-datetime_3.cjs.entry.js +44 -25
- package/dist/cjs/ion-input.cjs.entry.js +11 -34
- package/dist/cjs/ion-item_8.cjs.entry.js +4 -17
- package/dist/cjs/ion-loading.cjs.entry.js +3 -3
- package/dist/cjs/ion-menu_3.cjs.entry.js +5 -5
- package/dist/cjs/ion-modal.cjs.entry.js +8 -8
- package/dist/cjs/ion-nav_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-picker-column-internal.cjs.entry.js +10 -14
- package/dist/cjs/ion-popover.cjs.entry.js +4 -4
- package/dist/cjs/ion-radio_2.cjs.entry.js +1 -6
- package/dist/cjs/ion-range.cjs.entry.js +0 -2
- package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-select_3.cjs.entry.js +35 -51
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-textarea.cjs.entry.js +10 -33
- package/dist/cjs/ion-toast.cjs.entry.js +92 -434
- package/dist/cjs/ion-toggle.cjs.entry.js +3 -5
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/{ios.transition-f4caf640.js → ios.transition-ac909bc8.js} +3 -3
- package/dist/cjs/{keyboard-840107b3.js → keyboard-38f2bb7b.js} +3 -3
- package/dist/cjs/{keyboard-controller-019f42df.js → keyboard-controller-50beb83a.js} +2 -2
- package/dist/cjs/{keyboard-43df0428.js → keyboard-fd7db491.js} +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{md.transition-33331e93.js → md.transition-907af519.js} +3 -3
- package/dist/cjs/{notch-controller-c22d1344.js → notch-controller-f4f6af5d.js} +1 -1
- package/dist/cjs/{overlays-4d8897dc.js → overlays-2ffc5f27.js} +1 -3
- package/dist/collection/collection-manifest.json +2 -2
- package/dist/collection/components/checkbox/checkbox.js +0 -2
- package/dist/collection/components/datetime/datetime.ios.css +0 -1
- package/dist/collection/components/datetime/datetime.js +36 -17
- package/dist/collection/components/datetime/datetime.md.css +0 -1
- package/dist/collection/components/datetime/test/manipulation.spec.js +133 -1
- package/dist/collection/components/datetime/test/prefer-wheel/datetime.spec.js +27 -0
- package/dist/collection/components/datetime/utils/manipulation.js +65 -15
- package/dist/collection/components/input/input.ios.css +3 -10
- package/dist/collection/components/input/input.js +6 -31
- package/dist/collection/components/input/input.md.css +12 -13
- package/dist/collection/components/item/item.ios.css +3 -25
- package/dist/collection/components/item/item.md.css +3 -25
- package/dist/collection/components/item/test/basic/item.e2e.js +1 -1
- package/dist/collection/components/item/test/disabled/item.e2e.js +1 -0
- package/dist/collection/components/item/test/text/item.e2e.js +14 -0
- package/dist/collection/components/label/label.ios.css +3 -14
- package/dist/collection/components/label/label.md.css +3 -14
- package/dist/collection/components/modal/gestures/swipe-to-close.js +1 -2
- package/dist/collection/components/note/test/a11y/note.e2e.js +0 -43
- package/dist/collection/components/picker-column-internal/picker-column-internal.ios.css +3 -11
- package/dist/collection/components/picker-column-internal/picker-column-internal.js +5 -27
- package/dist/collection/components/picker-column-internal/picker-column-internal.md.css +3 -11
- package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +5 -34
- package/dist/collection/components/radio/radio.js +2 -5
- package/dist/collection/components/radio-group/radio-group.js +0 -24
- package/dist/collection/components/range/range.js +0 -2
- package/dist/collection/components/select/select.ios.css +7 -61
- package/dist/collection/components/select/select.js +28 -45
- package/dist/collection/components/select/select.md.css +19 -64
- package/dist/collection/components/select/test/label/select.e2e.js +1 -1
- package/dist/collection/components/select/test/legacy/wrapping/select.e2e.js +1 -1
- package/dist/collection/components/skeleton-text/skeleton-text.js +0 -39
- package/dist/collection/components/textarea/textarea.ios.css +5 -37
- package/dist/collection/components/textarea/textarea.js +5 -30
- package/dist/collection/components/textarea/textarea.md.css +14 -47
- package/dist/collection/components/toast/animations/ios.enter.js +1 -2
- package/dist/collection/components/toast/animations/md.enter.js +3 -4
- package/dist/collection/components/toast/animations/utils.js +14 -20
- package/dist/collection/components/toast/test/toast.spec.js +0 -80
- package/dist/collection/components/toast/toast.ios.css +10 -10
- package/dist/collection/components/toast/toast.js +1 -104
- package/dist/collection/components/toast/toast.md.css +0 -10
- package/dist/collection/components/toggle/toggle.js +0 -2
- package/dist/collection/utils/animation/animation.js +11 -12
- package/dist/collection/utils/animation/test/animation.spec.js +0 -16
- package/dist/collection/utils/browser/index.js +22 -0
- package/dist/collection/utils/forms/index.js +0 -1
- package/dist/collection/utils/input-shims/input-shims.js +6 -12
- package/dist/collection/utils/menu-controller/index.js +12 -10
- package/dist/collection/utils/overlays.js +0 -1
- package/dist/collection/utils/slot-mutation-controller.js +2 -3
- package/dist/docs.json +12 -137
- package/dist/esm/{animation-cf3dd234.js → animation-8aa13916.js} +12 -13
- package/dist/esm/{button-active-47196c40.js → button-active-ce5cba4c.js} +1 -1
- package/dist/esm/{capacitor-f1f25364.js → capacitor-b4979570.js} +1 -1
- package/dist/esm/{data-44d9e816.js → data-316b33f5.js} +64 -14
- package/dist/esm/{haptic-1a66d69f.js → haptic-1243b917.js} +1 -1
- package/dist/esm/{index-23c05a55.js → index-0aa6e61f.js} +13 -11
- package/dist/esm/{index-702b3cd3.js → index-6a0ccabb.js} +2 -2
- package/dist/esm/index-7a14ecec.js +29 -0
- package/dist/esm/{index-c9e82353.js → index-f0cc4e14.js} +1 -1
- package/dist/esm/index.js +8 -8
- package/dist/esm/{input-shims-1d767845.js → input-shims-d0c93e5d.js} +9 -14
- package/dist/esm/{input.utils-2cf5e372.js → input.utils-ec063df4.js} +3 -4
- package/dist/esm/ion-action-sheet.entry.js +6 -6
- package/dist/esm/ion-alert.entry.js +6 -6
- package/dist/esm/ion-app_8.entry.js +8 -8
- package/dist/esm/ion-checkbox.entry.js +0 -2
- package/dist/esm/ion-datetime-button.entry.js +1 -1
- package/dist/esm/ion-datetime_3.entry.js +44 -25
- package/dist/esm/ion-input.entry.js +11 -34
- package/dist/esm/ion-item_8.entry.js +4 -17
- package/dist/esm/ion-loading.entry.js +3 -3
- package/dist/esm/ion-menu_3.entry.js +5 -5
- package/dist/esm/ion-modal.entry.js +8 -8
- package/dist/esm/ion-nav_2.entry.js +1 -1
- package/dist/esm/ion-picker-column-internal.entry.js +10 -14
- package/dist/esm/ion-popover.entry.js +4 -4
- package/dist/esm/ion-radio_2.entry.js +1 -6
- package/dist/esm/ion-range.entry.js +0 -2
- package/dist/esm/ion-refresher_2.entry.js +4 -4
- package/dist/esm/ion-reorder_2.entry.js +3 -3
- package/dist/esm/ion-select_3.entry.js +31 -47
- package/dist/esm/ion-tab-bar_2.entry.js +4 -4
- package/dist/esm/ion-textarea.entry.js +10 -33
- package/dist/esm/ion-toast.entry.js +75 -417
- package/dist/esm/ion-toggle.entry.js +3 -5
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/{ios.transition-c3e77862.js → ios.transition-1651c430.js} +3 -3
- package/dist/esm/{keyboard-b6230bfb.js → keyboard-b063f012.js} +1 -1
- package/dist/esm/{keyboard-9f771a04.js → keyboard-b551279d.js} +3 -3
- package/dist/esm/{keyboard-controller-3f0faa10.js → keyboard-controller-0c2dce71.js} +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{md.transition-1173eca9.js → md.transition-66f18369.js} +3 -3
- package/dist/esm/{notch-controller-3f79197e.js → notch-controller-8c9c0e54.js} +1 -1
- package/dist/esm/{overlays-34169295.js → overlays-6c9feb7e.js} +2 -3
- package/dist/esm-es5/{animation-cf3dd234.js → animation-8aa13916.js} +1 -1
- package/dist/esm-es5/{button-active-47196c40.js → button-active-ce5cba4c.js} +1 -1
- package/dist/esm-es5/{capacitor-f1f25364.js → capacitor-b4979570.js} +1 -1
- package/dist/esm-es5/data-316b33f5.js +4 -0
- package/dist/esm-es5/{haptic-1a66d69f.js → haptic-1243b917.js} +1 -1
- package/dist/esm-es5/index-0aa6e61f.js +4 -0
- package/dist/esm-es5/{index-702b3cd3.js → index-6a0ccabb.js} +1 -1
- package/dist/esm-es5/index-f0cc4e14.js +4 -0
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/input-shims-d0c93e5d.js +4 -0
- package/dist/esm-es5/input.utils-ec063df4.js +4 -0
- package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
- package/dist/esm-es5/ion-alert.entry.js +1 -1
- package/dist/esm-es5/ion-app_8.entry.js +1 -1
- package/dist/esm-es5/ion-checkbox.entry.js +1 -1
- package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
- package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
- package/dist/esm-es5/ion-input.entry.js +1 -1
- package/dist/esm-es5/ion-item_8.entry.js +1 -1
- package/dist/esm-es5/ion-loading.entry.js +1 -1
- package/dist/esm-es5/ion-menu_3.entry.js +1 -1
- package/dist/esm-es5/ion-modal.entry.js +1 -1
- package/dist/esm-es5/ion-nav_2.entry.js +1 -1
- package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
- package/dist/esm-es5/ion-popover.entry.js +1 -1
- package/dist/esm-es5/ion-radio_2.entry.js +1 -1
- package/dist/esm-es5/ion-range.entry.js +1 -1
- package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
- package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.entry.js +1 -1
- package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
- package/dist/esm-es5/ion-textarea.entry.js +1 -1
- package/dist/esm-es5/ion-toast.entry.js +1 -1
- package/dist/esm-es5/ion-toggle.entry.js +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/{ios.transition-c3e77862.js → ios.transition-1651c430.js} +1 -1
- package/dist/esm-es5/{keyboard-b6230bfb.js → keyboard-b063f012.js} +1 -1
- package/dist/esm-es5/{keyboard-9f771a04.js → keyboard-b551279d.js} +1 -1
- package/dist/esm-es5/{keyboard-controller-3f0faa10.js → keyboard-controller-0c2dce71.js} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/md.transition-66f18369.js +4 -0
- package/dist/esm-es5/{notch-controller-3f79197e.js → notch-controller-8c9c0e54.js} +1 -1
- package/dist/esm-es5/{overlays-34169295.js → overlays-6c9feb7e.js} +1 -1
- package/dist/html.html-data.json +1 -14
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-014e8840.system.js +4 -0
- package/dist/ionic/{p-83a455fd.system.js → p-09d142b3.system.js} +1 -1
- package/dist/ionic/p-0d8e9393.entry.js +4 -0
- package/dist/ionic/{p-3abf5b7a.entry.js → p-0dc0d9b5.entry.js} +1 -1
- package/dist/ionic/{p-54824705.system.entry.js → p-0e23256e.system.entry.js} +1 -1
- package/dist/ionic/{p-e9e5755c.system.js → p-14b4348c.system.js} +1 -1
- package/dist/ionic/{p-ea9addc8.system.entry.js → p-18e01b30.system.entry.js} +1 -1
- package/dist/ionic/{p-823890d5.system.entry.js → p-1cb5f2f8.system.entry.js} +1 -1
- package/dist/ionic/p-1e5165db.system.entry.js +4 -0
- package/dist/ionic/p-20cf4994.js +4 -0
- package/dist/ionic/p-276afddd.js +4 -0
- package/dist/ionic/p-2e8e0045.js +4 -0
- package/dist/ionic/{p-d61a2cee.system.entry.js → p-34d2de14.system.entry.js} +1 -1
- package/dist/ionic/p-352c0232.system.entry.js +4 -0
- package/dist/ionic/p-3602001b.system.js +4 -0
- package/dist/ionic/p-3632220b.system.js +4 -0
- package/dist/ionic/{p-37c69d34.system.entry.js → p-377c636c.system.entry.js} +1 -1
- package/dist/ionic/{p-fce6b76a.system.entry.js → p-39044fe6.system.entry.js} +1 -1
- package/dist/ionic/{p-e5fd9f10.js → p-3bad5c1a.js} +1 -1
- package/dist/ionic/p-3ce8c3e3.entry.js +4 -0
- package/dist/ionic/p-40903d34.system.js +1 -1
- package/dist/ionic/{p-958f1c70.system.js → p-41477ad9.system.js} +1 -1
- package/dist/ionic/{p-a135e3ba.js → p-419eb426.js} +1 -1
- package/dist/ionic/p-4794e0ac.system.entry.js +4 -0
- package/dist/ionic/{p-587afb80.system.entry.js → p-4a142496.system.entry.js} +1 -1
- package/dist/ionic/p-4cd588b3.system.entry.js +4 -0
- package/dist/ionic/p-4dbac22d.entry.js +4 -0
- package/dist/ionic/p-4fa201a7.entry.js +4 -0
- package/dist/ionic/{p-4c80afe1.system.entry.js → p-587be954.system.entry.js} +1 -1
- package/dist/ionic/p-5c299019.entry.js +4 -0
- package/dist/ionic/{p-f36112b4.entry.js → p-64296b15.entry.js} +1 -1
- package/dist/ionic/{p-1abc74d9.entry.js → p-64ed03a3.entry.js} +1 -1
- package/dist/ionic/p-67aab78f.js +4 -0
- package/dist/ionic/{p-03ed6107.system.entry.js → p-67e644bd.system.entry.js} +1 -1
- package/dist/ionic/{p-cc615985.system.entry.js → p-67ed452a.system.entry.js} +1 -1
- package/dist/ionic/p-67eecef4.system.js +4 -0
- package/dist/ionic/p-6d812360.system.entry.js +4 -0
- package/dist/ionic/{p-67951604.system.js → p-702d85d8.system.js} +1 -1
- package/dist/ionic/p-7176cea3.entry.js +4 -0
- package/dist/ionic/{p-8b15ca22.entry.js → p-73411c1b.entry.js} +1 -1
- package/dist/ionic/p-77e7a9c8.entry.js +4 -0
- package/dist/ionic/{p-8ad82eb3.entry.js → p-79e83e0a.entry.js} +1 -1
- package/dist/ionic/p-7f85ffa9.js +4 -0
- package/dist/ionic/{p-2a41d4d1.js → p-800ef057.js} +1 -1
- package/dist/ionic/{p-11cb4e19.js → p-81c818e7.js} +1 -1
- package/dist/ionic/p-88980f5f.system.entry.js +4 -0
- package/dist/ionic/{p-5885e9af.js → p-8cf94fc1.js} +1 -1
- package/dist/ionic/{p-3e655d4c.entry.js → p-8e1bded3.entry.js} +1 -1
- package/dist/ionic/p-97c65aa5.js +4 -0
- package/dist/ionic/{p-d48872b1.system.js → p-97e31c0a.system.js} +1 -1
- package/dist/ionic/p-9ab6f3e6.system.js +4 -0
- package/dist/ionic/p-9b89cbde.js +4 -0
- package/dist/ionic/{p-fe1f93f2.js → p-a0b6d438.js} +1 -1
- package/dist/ionic/p-a21b8d05.entry.js +4 -0
- package/dist/ionic/p-a5c1e6ce.entry.js +4 -0
- package/dist/ionic/{p-c4de53af.system.js → p-a936d224.system.js} +1 -1
- package/dist/ionic/{p-aec8a70a.system.js → p-ab4cff27.system.js} +1 -1
- package/dist/ionic/p-b0cee324.entry.js +4 -0
- package/dist/ionic/p-b1142133.entry.js +4 -0
- package/dist/ionic/p-b203659a.system.entry.js +4 -0
- package/dist/ionic/{p-6797887a.entry.js → p-b2a74a72.entry.js} +1 -1
- package/dist/ionic/{p-9292fd42.system.js → p-b4b4bb29.system.js} +1 -1
- package/dist/ionic/p-b6f8ee31.entry.js +4 -0
- package/dist/ionic/{p-31189dae.entry.js → p-b91fe549.entry.js} +1 -1
- package/dist/ionic/{p-6a309574.js → p-b923f3d7.js} +1 -1
- package/dist/ionic/{p-f9a641fa.system.js → p-bba2ce59.system.js} +1 -1
- package/dist/ionic/{p-5e6bc319.system.entry.js → p-bed722c4.system.entry.js} +1 -1
- package/dist/ionic/{p-21b4981c.system.js → p-c4042875.system.js} +1 -1
- package/dist/ionic/p-cc196b34.js +4 -0
- package/dist/ionic/{p-e7d20dfb.system.js → p-ccdcb022.system.js} +1 -1
- package/dist/ionic/{p-fcb148dc.system.entry.js → p-cf425ec5.system.entry.js} +1 -1
- package/dist/ionic/p-d1de1188.js +4 -0
- package/dist/ionic/p-d21bfe66.system.entry.js +4 -0
- package/dist/ionic/p-d3952bd5.system.entry.js +4 -0
- package/dist/ionic/{p-196f2123.system.entry.js → p-ddfc4ef4.system.entry.js} +1 -1
- package/dist/ionic/{p-c1e725db.entry.js → p-deab76dc.entry.js} +1 -1
- package/dist/ionic/p-dfa756ed.system.js +4 -0
- package/dist/ionic/p-e6b240a0.js +4 -0
- package/dist/ionic/{p-64ab3eb3.entry.js → p-f37b4b79.entry.js} +1 -1
- package/dist/ionic/{p-7047a40c.system.entry.js → p-f3c82f74.system.entry.js} +1 -1
- package/dist/ionic/{p-b673ee9b.entry.js → p-f54ddd19.entry.js} +1 -1
- package/dist/ionic/p-ff5a10f9.system.js +4 -0
- package/dist/types/components/datetime/utils/manipulation.d.ts +34 -7
- package/dist/types/components/input/input.d.ts +0 -2
- package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +0 -4
- package/dist/types/components/radio-group/radio-group-interface.d.ts +0 -1
- package/dist/types/components/radio-group/radio-group.d.ts +1 -8
- package/dist/types/components/router/router.d.ts +1 -2
- package/dist/types/components/select/select.d.ts +1 -6
- package/dist/types/components/skeleton-text/skeleton-text.d.ts +1 -9
- package/dist/types/components/textarea/textarea.d.ts +0 -2
- package/dist/types/components/toast/animations/utils.d.ts +4 -15
- package/dist/types/components/toast/toast-interface.d.ts +0 -2
- package/dist/types/components/toast/toast.d.ts +1 -28
- package/dist/types/components.d.ts +6 -45
- package/dist/types/interface.d.ts +5 -1
- package/dist/types/utils/animation/animation-interface.d.ts +4 -4
- package/dist/types/utils/browser/index.d.ts +2 -11
- package/dist/types/utils/forms/index.d.ts +0 -1
- package/dist/types/utils/hardware-back-button.d.ts +0 -4
- package/dist/types/utils/overlays.d.ts +0 -1
- package/dist/types/utils/slot-mutation-controller.d.ts +2 -2
- package/hydrate/index.js +276 -659
- package/package.json +1 -1
- package/dist/cjs/compare-with-utils-c0444525.js +0 -44
- package/dist/cjs/index-c8d52405.js +0 -10
- package/dist/collection/components/datetime/test/disabled/datetime.spec.js +0 -33
- package/dist/collection/components/input/test/slot/input.e2e.js +0 -51
- package/dist/collection/components/radio-group/test/radio-group.spec.js +0 -69
- package/dist/collection/components/select/test/slot/select.e2e.js +0 -67
- package/dist/collection/components/textarea/test/slot/textarea.e2e.js +0 -51
- package/dist/collection/components/toast/gestures/swipe-to-dismiss.js +0 -267
- package/dist/collection/components/toast/test/swipe-gesture/toast.e2e.js +0 -84
- package/dist/collection/components/toast/test/toast-config.spec.js +0 -25
- package/dist/collection/utils/forms/compare-with-utils.js +0 -39
- package/dist/esm/compare-with-utils-4928c09d.js +0 -41
- package/dist/esm/index-a5d50daf.js +0 -7
- package/dist/esm-es5/compare-with-utils-4928c09d.js +0 -4
- package/dist/esm-es5/data-44d9e816.js +0 -4
- package/dist/esm-es5/index-23c05a55.js +0 -4
- package/dist/esm-es5/index-c9e82353.js +0 -4
- package/dist/esm-es5/input-shims-1d767845.js +0 -4
- package/dist/esm-es5/input.utils-2cf5e372.js +0 -4
- package/dist/esm-es5/md.transition-1173eca9.js +0 -4
- package/dist/ionic/p-0547e914.entry.js +0 -4
- package/dist/ionic/p-131761b4.entry.js +0 -4
- package/dist/ionic/p-17240d90.js +0 -4
- package/dist/ionic/p-1cf5e8d6.entry.js +0 -4
- package/dist/ionic/p-2207f3c2.js +0 -4
- package/dist/ionic/p-27eb8a91.system.entry.js +0 -4
- package/dist/ionic/p-314c4dee.js +0 -4
- package/dist/ionic/p-385c51f8.system.entry.js +0 -4
- package/dist/ionic/p-3bc3d880.system.js +0 -4
- package/dist/ionic/p-43716898.js +0 -4
- package/dist/ionic/p-450a26bf.js +0 -4
- package/dist/ionic/p-485668f0.entry.js +0 -4
- package/dist/ionic/p-48c59094.system.entry.js +0 -4
- package/dist/ionic/p-494e75ad.js +0 -4
- package/dist/ionic/p-561cc050.system.js +0 -4
- package/dist/ionic/p-671dbd61.js +0 -4
- package/dist/ionic/p-70dcf429.js +0 -4
- package/dist/ionic/p-710cea83.system.js +0 -4
- package/dist/ionic/p-7b44e419.js +0 -4
- package/dist/ionic/p-80a9b397.entry.js +0 -4
- package/dist/ionic/p-8ddfecbf.entry.js +0 -4
- package/dist/ionic/p-9c6787e2.entry.js +0 -4
- package/dist/ionic/p-a11c1aff.system.entry.js +0 -4
- package/dist/ionic/p-a31099a4.entry.js +0 -4
- package/dist/ionic/p-a6bc00ab.entry.js +0 -4
- package/dist/ionic/p-ac668fb8.entry.js +0 -4
- package/dist/ionic/p-ad4b4f73.system.entry.js +0 -4
- package/dist/ionic/p-b8c3f071.system.js +0 -4
- package/dist/ionic/p-be0f6600.system.js +0 -4
- package/dist/ionic/p-c2db1374.system.js +0 -4
- package/dist/ionic/p-c3547c7a.system.js +0 -4
- package/dist/ionic/p-c700acef.system.js +0 -4
- package/dist/ionic/p-d4fba36b.system.entry.js +0 -4
- package/dist/ionic/p-e5b8f2f7.js +0 -4
- package/dist/ionic/p-edd07654.system.entry.js +0 -4
- package/dist/ionic/p-f43f4102.entry.js +0 -4
- package/dist/ionic/p-f5d78105.entry.js +0 -4
- package/dist/ionic/p-f7769c83.js +0 -4
- package/dist/ionic/p-fcc23f25.system.entry.js +0 -4
- package/dist/ionic/p-fdcf04c3.system.entry.js +0 -4
- package/dist/types/components/toast/gestures/swipe-to-dismiss.d.ts +0 -9
- package/dist/types/utils/forms/compare-with-utils.d.ts +0 -18
- /package/dist/esm-es5/{index-a5d50daf.js → index-7a14ecec.js} +0 -0
- /package/dist/ionic/{p-792919fd.system.js → p-0e94957a.system.js} +0 -0
- /package/dist/ionic/{p-7b30edcc.js → p-b347cfd1.js} +0 -0
|
@@ -704,14 +704,24 @@ export class Datetime {
|
|
|
704
704
|
* or modal that the datetime was presented in.
|
|
705
705
|
*/
|
|
706
706
|
async confirm(closeOverlay = false) {
|
|
707
|
-
const { isCalendarPicker, activeParts } = this;
|
|
707
|
+
const { isCalendarPicker, activeParts, preferWheel, workingParts } = this;
|
|
708
708
|
/**
|
|
709
709
|
* We only update the value if the presentation is not a calendar picker.
|
|
710
710
|
*/
|
|
711
711
|
if (activeParts !== undefined || !isCalendarPicker) {
|
|
712
712
|
const activePartsIsArray = Array.isArray(activeParts);
|
|
713
713
|
if (activePartsIsArray && activeParts.length === 0) {
|
|
714
|
-
|
|
714
|
+
if (preferWheel) {
|
|
715
|
+
/**
|
|
716
|
+
* If the datetime is using a wheel picker, but the
|
|
717
|
+
* active parts are empty, then the user has confirmed the
|
|
718
|
+
* initial value (working parts) presented to them.
|
|
719
|
+
*/
|
|
720
|
+
this.setValue(convertDataToISO(workingParts));
|
|
721
|
+
}
|
|
722
|
+
else {
|
|
723
|
+
this.setValue(undefined);
|
|
724
|
+
}
|
|
715
725
|
}
|
|
716
726
|
else {
|
|
717
727
|
this.setValue(convertDataToISO(activeParts));
|
|
@@ -915,9 +925,18 @@ export class Datetime {
|
|
|
915
925
|
const yearValues = (this.parsedYearValues = convertToArrayOfNumbers(this.yearValues));
|
|
916
926
|
const dayValues = (this.parsedDayValues = convertToArrayOfNumbers(this.dayValues));
|
|
917
927
|
const todayParts = (this.todayParts = parseDate(getToday()));
|
|
918
|
-
this.defaultParts = getClosestValidDate(todayParts, monthValues, dayValues, yearValues, hourValues, minuteValues);
|
|
919
928
|
this.processMinParts();
|
|
920
929
|
this.processMaxParts();
|
|
930
|
+
this.defaultParts = getClosestValidDate({
|
|
931
|
+
refParts: todayParts,
|
|
932
|
+
monthValues,
|
|
933
|
+
dayValues,
|
|
934
|
+
yearValues,
|
|
935
|
+
hourValues,
|
|
936
|
+
minuteValues,
|
|
937
|
+
minParts: this.minParts,
|
|
938
|
+
maxParts: this.maxParts,
|
|
939
|
+
});
|
|
921
940
|
this.processValue(this.value);
|
|
922
941
|
this.emitStyle();
|
|
923
942
|
}
|
|
@@ -985,7 +1004,7 @@ export class Datetime {
|
|
|
985
1004
|
: this.renderIndividualDatePickerColumns(forcePresentation);
|
|
986
1005
|
}
|
|
987
1006
|
renderCombinedDatePickerColumn() {
|
|
988
|
-
const { defaultParts,
|
|
1007
|
+
const { defaultParts, workingParts, locale, minParts, maxParts, todayParts, isDateEnabled } = this;
|
|
989
1008
|
const activePart = this.getActivePartsWithFallback();
|
|
990
1009
|
/**
|
|
991
1010
|
* By default, generate a range of 3 months:
|
|
@@ -1036,7 +1055,7 @@ export class Datetime {
|
|
|
1036
1055
|
const todayString = workingParts.day !== null
|
|
1037
1056
|
? `${workingParts.year}-${workingParts.month}-${workingParts.day}`
|
|
1038
1057
|
: `${defaultParts.year}-${defaultParts.month}-${defaultParts.day}`;
|
|
1039
|
-
return (h("ion-picker-column-internal", { class: "date-column", color: this.color,
|
|
1058
|
+
return (h("ion-picker-column-internal", { class: "date-column", color: this.color, items: items, value: todayString, onIonChange: (ev) => {
|
|
1040
1059
|
// TODO(FW-1823) Remove this when iOS 14 support is dropped.
|
|
1041
1060
|
// Due to a Safari 14 issue we need to destroy
|
|
1042
1061
|
// the scroll listener before we update state
|
|
@@ -1118,9 +1137,9 @@ export class Datetime {
|
|
|
1118
1137
|
if (days.length === 0) {
|
|
1119
1138
|
return [];
|
|
1120
1139
|
}
|
|
1121
|
-
const {
|
|
1140
|
+
const { workingParts } = this;
|
|
1122
1141
|
const activePart = this.getActivePartsWithFallback();
|
|
1123
|
-
return (h("ion-picker-column-internal", { class: "day-column", color: this.color,
|
|
1142
|
+
return (h("ion-picker-column-internal", { class: "day-column", color: this.color, items: days, value: (_a = (workingParts.day !== null ? workingParts.day : this.defaultParts.day)) !== null && _a !== void 0 ? _a : undefined, onIonChange: (ev) => {
|
|
1124
1143
|
// TODO(FW-1823) Remove this when iOS 14 support is dropped.
|
|
1125
1144
|
// Due to a Safari 14 issue we need to destroy
|
|
1126
1145
|
// the scroll listener before we update state
|
|
@@ -1140,9 +1159,9 @@ export class Datetime {
|
|
|
1140
1159
|
if (months.length === 0) {
|
|
1141
1160
|
return [];
|
|
1142
1161
|
}
|
|
1143
|
-
const {
|
|
1162
|
+
const { workingParts } = this;
|
|
1144
1163
|
const activePart = this.getActivePartsWithFallback();
|
|
1145
|
-
return (h("ion-picker-column-internal", { class: "month-column", color: this.color,
|
|
1164
|
+
return (h("ion-picker-column-internal", { class: "month-column", color: this.color, items: months, value: workingParts.month, onIonChange: (ev) => {
|
|
1146
1165
|
// TODO(FW-1823) Remove this when iOS 14 support is dropped.
|
|
1147
1166
|
// Due to a Safari 14 issue we need to destroy
|
|
1148
1167
|
// the scroll listener before we update state
|
|
@@ -1162,9 +1181,9 @@ export class Datetime {
|
|
|
1162
1181
|
if (years.length === 0) {
|
|
1163
1182
|
return [];
|
|
1164
1183
|
}
|
|
1165
|
-
const {
|
|
1184
|
+
const { workingParts } = this;
|
|
1166
1185
|
const activePart = this.getActivePartsWithFallback();
|
|
1167
|
-
return (h("ion-picker-column-internal", { class: "year-column", color: this.color,
|
|
1186
|
+
return (h("ion-picker-column-internal", { class: "year-column", color: this.color, items: years, value: workingParts.year, onIonChange: (ev) => {
|
|
1168
1187
|
// TODO(FW-1823) Remove this when iOS 14 support is dropped.
|
|
1169
1188
|
// Due to a Safari 14 issue we need to destroy
|
|
1170
1189
|
// the scroll listener before we update state
|
|
@@ -1203,35 +1222,35 @@ export class Datetime {
|
|
|
1203
1222
|
];
|
|
1204
1223
|
}
|
|
1205
1224
|
renderHourPickerColumn(hoursData) {
|
|
1206
|
-
const {
|
|
1225
|
+
const { workingParts } = this;
|
|
1207
1226
|
if (hoursData.length === 0)
|
|
1208
1227
|
return [];
|
|
1209
1228
|
const activePart = this.getActivePartsWithFallback();
|
|
1210
|
-
return (h("ion-picker-column-internal", { color: this.color,
|
|
1229
|
+
return (h("ion-picker-column-internal", { color: this.color, value: activePart.hour, items: hoursData, numericInput: true, onIonChange: (ev) => {
|
|
1211
1230
|
this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { hour: ev.detail.value }));
|
|
1212
1231
|
this.setActiveParts(Object.assign(Object.assign({}, activePart), { hour: ev.detail.value }));
|
|
1213
1232
|
ev.stopPropagation();
|
|
1214
1233
|
} }));
|
|
1215
1234
|
}
|
|
1216
1235
|
renderMinutePickerColumn(minutesData) {
|
|
1217
|
-
const {
|
|
1236
|
+
const { workingParts } = this;
|
|
1218
1237
|
if (minutesData.length === 0)
|
|
1219
1238
|
return [];
|
|
1220
1239
|
const activePart = this.getActivePartsWithFallback();
|
|
1221
|
-
return (h("ion-picker-column-internal", { color: this.color,
|
|
1240
|
+
return (h("ion-picker-column-internal", { color: this.color, value: activePart.minute, items: minutesData, numericInput: true, onIonChange: (ev) => {
|
|
1222
1241
|
this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { minute: ev.detail.value }));
|
|
1223
1242
|
this.setActiveParts(Object.assign(Object.assign({}, activePart), { minute: ev.detail.value }));
|
|
1224
1243
|
ev.stopPropagation();
|
|
1225
1244
|
} }));
|
|
1226
1245
|
}
|
|
1227
1246
|
renderDayPeriodPickerColumn(dayPeriodData) {
|
|
1228
|
-
const {
|
|
1247
|
+
const { workingParts } = this;
|
|
1229
1248
|
if (dayPeriodData.length === 0) {
|
|
1230
1249
|
return [];
|
|
1231
1250
|
}
|
|
1232
1251
|
const activePart = this.getActivePartsWithFallback();
|
|
1233
1252
|
const isDayPeriodRTL = isLocaleDayPeriodRTL(this.locale);
|
|
1234
|
-
return (h("ion-picker-column-internal", { style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color,
|
|
1253
|
+
return (h("ion-picker-column-internal", { style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, value: activePart.ampm, items: dayPeriodData, onIonChange: (ev) => {
|
|
1235
1254
|
const hour = calculateHourFromAMPM(workingParts, ev.detail.value);
|
|
1236
1255
|
this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { ampm: ev.detail.value, hour }));
|
|
1237
1256
|
this.setActiveParts(Object.assign(Object.assign({}, activePart), { ampm: ev.detail.value, hour }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { getPreviousYear, getNextYear, getPreviousMonth, getNextMonth, getPreviousDay, getNextDay, getPreviousWeek, getNextWeek, getEndOfWeek, getStartOfWeek, convert12HourTo24Hour, getInternalHourValue, calculateHourFromAMPM, subtractDays, addDays, validateParts, } from "../utils/manipulation";
|
|
4
|
+
import { getPreviousYear, getNextYear, getPreviousMonth, getNextMonth, getPreviousDay, getNextDay, getPreviousWeek, getNextWeek, getEndOfWeek, getStartOfWeek, convert12HourTo24Hour, getInternalHourValue, calculateHourFromAMPM, subtractDays, addDays, validateParts, getClosestValidDate, } from "../utils/manipulation";
|
|
5
5
|
describe('addDays()', () => {
|
|
6
6
|
it('should correctly add days', () => {
|
|
7
7
|
expect(addDays({
|
|
@@ -431,3 +431,135 @@ describe('validateParts()', () => {
|
|
|
431
431
|
})).toEqual({ month: 1, day: 1, year: 2022, hour: 9, minute: 30 });
|
|
432
432
|
});
|
|
433
433
|
});
|
|
434
|
+
describe('getClosestValidDate()', () => {
|
|
435
|
+
it('should match a date with only month/day/year', () => {
|
|
436
|
+
// October 10, 2023
|
|
437
|
+
const refParts = { month: 10, day: 10, year: 2023 };
|
|
438
|
+
// April 10, 2021
|
|
439
|
+
const minParts = { month: 4, day: 10, year: 2021 };
|
|
440
|
+
// September 14, 2021
|
|
441
|
+
const maxParts = { month: 9, day: 14, year: 2021 };
|
|
442
|
+
// September 4, 2021
|
|
443
|
+
const expected = { month: 9, day: 4, year: 2021, dayOfWeek: undefined };
|
|
444
|
+
expect(getClosestValidDate({
|
|
445
|
+
refParts,
|
|
446
|
+
monthValues: [2, 3, 7, 9, 10],
|
|
447
|
+
dayValues: [4, 15, 25],
|
|
448
|
+
yearValues: [2020, 2021, 2023],
|
|
449
|
+
maxParts,
|
|
450
|
+
minParts,
|
|
451
|
+
})).toEqual(expected);
|
|
452
|
+
});
|
|
453
|
+
it('should match a date when the reference date is before the min', () => {
|
|
454
|
+
// April 2, 2020 3:20 PM
|
|
455
|
+
const refParts = { month: 4, day: 2, year: 2020, hour: 15, minute: 20 };
|
|
456
|
+
// September 10, 2021 10:10 AM
|
|
457
|
+
const minParts = { month: 9, day: 10, year: 2021, hour: 10, minute: 10 };
|
|
458
|
+
// September 14, 2021 10:11 AM
|
|
459
|
+
const maxParts = { month: 9, day: 14, year: 2021, hour: 10, minute: 11 };
|
|
460
|
+
// September 11, 2021 11:15 AM
|
|
461
|
+
const expected = {
|
|
462
|
+
year: 2021,
|
|
463
|
+
day: 11,
|
|
464
|
+
month: 9,
|
|
465
|
+
hour: 11,
|
|
466
|
+
minute: 15,
|
|
467
|
+
ampm: 'am',
|
|
468
|
+
dayOfWeek: undefined,
|
|
469
|
+
};
|
|
470
|
+
expect(getClosestValidDate({
|
|
471
|
+
refParts,
|
|
472
|
+
monthValues: [4, 9, 11],
|
|
473
|
+
dayValues: [11, 12, 13, 14],
|
|
474
|
+
yearValues: [2020, 2021, 2023],
|
|
475
|
+
hourValues: [9, 10, 11],
|
|
476
|
+
minuteValues: [11, 12, 13, 14, 15],
|
|
477
|
+
maxParts,
|
|
478
|
+
minParts,
|
|
479
|
+
})).toEqual(expected);
|
|
480
|
+
});
|
|
481
|
+
it('should match a date when the reference date is before the min', () => {
|
|
482
|
+
// April 2, 2020 3:20 PM
|
|
483
|
+
const refParts = { month: 4, day: 2, year: 2020, hour: 15, minute: 20 };
|
|
484
|
+
// September 10, 2021 10:10 AM
|
|
485
|
+
const minParts = { month: 9, day: 10, year: 2021, hour: 10, minute: 10 };
|
|
486
|
+
// September 10, 2021 10:15 AM
|
|
487
|
+
const maxParts = { month: 9, day: 10, year: 2021, hour: 10, minute: 15 };
|
|
488
|
+
// September 10, 2021 10:15 AM
|
|
489
|
+
const expected = {
|
|
490
|
+
month: 9,
|
|
491
|
+
day: 10,
|
|
492
|
+
year: 2021,
|
|
493
|
+
hour: 10,
|
|
494
|
+
minute: 15,
|
|
495
|
+
ampm: 'am',
|
|
496
|
+
dayOfWeek: undefined,
|
|
497
|
+
};
|
|
498
|
+
expect(getClosestValidDate({
|
|
499
|
+
refParts,
|
|
500
|
+
monthValues: [4, 9, 11],
|
|
501
|
+
dayValues: [10, 12, 13, 14],
|
|
502
|
+
yearValues: [2020, 2021, 2023],
|
|
503
|
+
hourValues: [9, 10, 11],
|
|
504
|
+
minuteValues: [11, 12, 13, 14, 15],
|
|
505
|
+
minParts,
|
|
506
|
+
maxParts,
|
|
507
|
+
})).toEqual(expected);
|
|
508
|
+
});
|
|
509
|
+
it('should only clamp minutes if within the same day and hour as min/max', () => {
|
|
510
|
+
// April 2, 2020 9:16 AM
|
|
511
|
+
const refParts = { month: 4, day: 2, year: 2020, hour: 9, minute: 16 };
|
|
512
|
+
// September 10, 2021 10:10 AM
|
|
513
|
+
const minParts = { month: 9, day: 10, year: 2021, hour: 10, minute: 10 };
|
|
514
|
+
// September 10, 2021 11:15 AM
|
|
515
|
+
const maxParts = { month: 9, day: 10, year: 2021, hour: 11, minute: 15 };
|
|
516
|
+
// September 10, 2021 10:16 AM
|
|
517
|
+
const expected = {
|
|
518
|
+
month: 9,
|
|
519
|
+
day: 10,
|
|
520
|
+
year: 2021,
|
|
521
|
+
hour: 10,
|
|
522
|
+
minute: 16,
|
|
523
|
+
ampm: 'am',
|
|
524
|
+
dayOfWeek: undefined,
|
|
525
|
+
};
|
|
526
|
+
expect(getClosestValidDate({
|
|
527
|
+
refParts,
|
|
528
|
+
monthValues: [4, 9, 11],
|
|
529
|
+
dayValues: [10, 12, 13, 14],
|
|
530
|
+
yearValues: [2020, 2021, 2023],
|
|
531
|
+
hourValues: [9, 10, 11],
|
|
532
|
+
minuteValues: [10, 15, 16],
|
|
533
|
+
minParts,
|
|
534
|
+
maxParts,
|
|
535
|
+
})).toEqual(expected);
|
|
536
|
+
});
|
|
537
|
+
it('should return the closest valid date after adjusting the allowed year', () => {
|
|
538
|
+
// April 2, 2022 9:16 AM
|
|
539
|
+
const refParts = { month: 4, day: 2, year: 2022, hour: 9, minute: 16 };
|
|
540
|
+
// September 10, 2021 10:10 AM
|
|
541
|
+
const minParts = { month: 9, day: 10, year: 2021, hour: 10, minute: 10 };
|
|
542
|
+
// September 10, 2023 11:15 AM
|
|
543
|
+
const maxParts = { month: 9, day: 10, year: 2023, hour: 11, minute: 15 };
|
|
544
|
+
// April 2, 2022 9:16 AM
|
|
545
|
+
const expected = {
|
|
546
|
+
month: 4,
|
|
547
|
+
day: 2,
|
|
548
|
+
year: 2022,
|
|
549
|
+
hour: 9,
|
|
550
|
+
minute: 16,
|
|
551
|
+
ampm: 'am',
|
|
552
|
+
dayOfWeek: undefined,
|
|
553
|
+
};
|
|
554
|
+
expect(getClosestValidDate({
|
|
555
|
+
refParts,
|
|
556
|
+
monthValues: [4, 9, 11],
|
|
557
|
+
dayValues: [2, 10, 12, 13, 14],
|
|
558
|
+
yearValues: [2020, 2021, 2022, 2023],
|
|
559
|
+
hourValues: [9, 10, 11],
|
|
560
|
+
minuteValues: [10, 15, 16],
|
|
561
|
+
minParts,
|
|
562
|
+
maxParts,
|
|
563
|
+
})).toEqual(expected);
|
|
564
|
+
});
|
|
565
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
5
|
+
import { Datetime } from "../../datetime";
|
|
6
|
+
describe('datetime: preferWheel', () => {
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
const mockIntersectionObserver = jest.fn();
|
|
9
|
+
mockIntersectionObserver.mockReturnValue({
|
|
10
|
+
observe: () => null,
|
|
11
|
+
unobserve: () => null,
|
|
12
|
+
disconnect: () => null,
|
|
13
|
+
});
|
|
14
|
+
global.IntersectionObserver = mockIntersectionObserver;
|
|
15
|
+
});
|
|
16
|
+
it('should select the working day when clicking the confirm button', async () => {
|
|
17
|
+
const page = await newSpecPage({
|
|
18
|
+
components: [Datetime],
|
|
19
|
+
html: '<ion-datetime prefer-wheel="true" max="2021" show-default-buttons="true"></ion-datetime>',
|
|
20
|
+
});
|
|
21
|
+
const datetime = page.body.querySelector('ion-datetime');
|
|
22
|
+
const confirmButton = datetime.shadowRoot.querySelector('#confirm-button');
|
|
23
|
+
confirmButton.click();
|
|
24
|
+
await page.waitForChanges();
|
|
25
|
+
expect(datetime.value).toBe('2021-12-31T23:59:00');
|
|
26
|
+
});
|
|
27
|
+
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { isSameDay } from "./comparison";
|
|
4
|
+
import { isAfter, isBefore, isSameDay } from "./comparison";
|
|
5
5
|
import { getNumDaysInMonth } from "./helpers";
|
|
6
6
|
import { clampDate, parseAmPm } from "./parse";
|
|
7
7
|
const twoDigit = (val) => {
|
|
@@ -355,32 +355,82 @@ export const validateParts = (parts, minParts, maxParts) => {
|
|
|
355
355
|
* Returns the closest date to refParts
|
|
356
356
|
* that also meets the constraints of
|
|
357
357
|
* the *Values params.
|
|
358
|
-
* @param refParts The reference date
|
|
359
|
-
* @param monthValues The allowed month values
|
|
360
|
-
* @param dayValues The allowed day (of the month) values
|
|
361
|
-
* @param yearValues The allowed year values
|
|
362
|
-
* @param hourValues The allowed hour values
|
|
363
|
-
* @param minuteValues The allowed minute values
|
|
364
358
|
*/
|
|
365
|
-
export const getClosestValidDate = (refParts, monthValues, dayValues, yearValues, hourValues, minuteValues) => {
|
|
359
|
+
export const getClosestValidDate = ({ refParts, monthValues, dayValues, yearValues, hourValues, minuteValues, minParts, maxParts, }) => {
|
|
366
360
|
const { hour, minute, day, month, year } = refParts;
|
|
367
361
|
const copyParts = Object.assign(Object.assign({}, refParts), { dayOfWeek: undefined });
|
|
362
|
+
if (yearValues !== undefined) {
|
|
363
|
+
// Filters out years that are out of the min/max bounds
|
|
364
|
+
const filteredYears = yearValues.filter((year) => {
|
|
365
|
+
if (minParts !== undefined && year < minParts.year) {
|
|
366
|
+
return false;
|
|
367
|
+
}
|
|
368
|
+
if (maxParts !== undefined && year > maxParts.year) {
|
|
369
|
+
return false;
|
|
370
|
+
}
|
|
371
|
+
return true;
|
|
372
|
+
});
|
|
373
|
+
copyParts.year = findClosestValue(year, filteredYears);
|
|
374
|
+
}
|
|
368
375
|
if (monthValues !== undefined) {
|
|
369
|
-
|
|
376
|
+
// Filters out months that are out of the min/max bounds
|
|
377
|
+
const filteredMonths = monthValues.filter((month) => {
|
|
378
|
+
if (minParts !== undefined && copyParts.year === minParts.year && month < minParts.month) {
|
|
379
|
+
return false;
|
|
380
|
+
}
|
|
381
|
+
if (maxParts !== undefined && copyParts.year === maxParts.year && month > maxParts.month) {
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
return true;
|
|
385
|
+
});
|
|
386
|
+
copyParts.month = findClosestValue(month, filteredMonths);
|
|
370
387
|
}
|
|
371
388
|
// Day is nullable but cannot be undefined
|
|
372
389
|
if (day !== null && dayValues !== undefined) {
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
390
|
+
// Filters out days that are out of the min/max bounds
|
|
391
|
+
const filteredDays = dayValues.filter((day) => {
|
|
392
|
+
if (minParts !== undefined && isBefore(Object.assign(Object.assign({}, copyParts), { day }), minParts)) {
|
|
393
|
+
return false;
|
|
394
|
+
}
|
|
395
|
+
if (maxParts !== undefined && isAfter(Object.assign(Object.assign({}, copyParts), { day }), maxParts)) {
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
398
|
+
return true;
|
|
399
|
+
});
|
|
400
|
+
copyParts.day = findClosestValue(day, filteredDays);
|
|
377
401
|
}
|
|
378
402
|
if (hour !== undefined && hourValues !== undefined) {
|
|
379
|
-
|
|
403
|
+
// Filters out hours that are out of the min/max bounds
|
|
404
|
+
const filteredHours = hourValues.filter((hour) => {
|
|
405
|
+
if ((minParts === null || minParts === void 0 ? void 0 : minParts.hour) !== undefined && isSameDay(copyParts, minParts) && hour < minParts.hour) {
|
|
406
|
+
return false;
|
|
407
|
+
}
|
|
408
|
+
if ((maxParts === null || maxParts === void 0 ? void 0 : maxParts.hour) !== undefined && isSameDay(copyParts, maxParts) && hour > maxParts.hour) {
|
|
409
|
+
return false;
|
|
410
|
+
}
|
|
411
|
+
return true;
|
|
412
|
+
});
|
|
413
|
+
copyParts.hour = findClosestValue(hour, filteredHours);
|
|
380
414
|
copyParts.ampm = parseAmPm(copyParts.hour);
|
|
381
415
|
}
|
|
382
416
|
if (minute !== undefined && minuteValues !== undefined) {
|
|
383
|
-
|
|
417
|
+
// Filters out minutes that are out of the min/max bounds
|
|
418
|
+
const filteredMinutes = minuteValues.filter((minute) => {
|
|
419
|
+
if ((minParts === null || minParts === void 0 ? void 0 : minParts.minute) !== undefined &&
|
|
420
|
+
isSameDay(copyParts, minParts) &&
|
|
421
|
+
copyParts.hour === minParts.hour &&
|
|
422
|
+
minute < minParts.minute) {
|
|
423
|
+
return false;
|
|
424
|
+
}
|
|
425
|
+
if ((maxParts === null || maxParts === void 0 ? void 0 : maxParts.minute) !== undefined &&
|
|
426
|
+
isSameDay(copyParts, maxParts) &&
|
|
427
|
+
copyParts.hour === maxParts.hour &&
|
|
428
|
+
minute > maxParts.minute) {
|
|
429
|
+
return false;
|
|
430
|
+
}
|
|
431
|
+
return true;
|
|
432
|
+
});
|
|
433
|
+
copyParts.minute = findClosestValue(minute, filteredMinutes);
|
|
384
434
|
}
|
|
385
435
|
return copyParts;
|
|
386
436
|
};
|
|
@@ -350,7 +350,6 @@
|
|
|
350
350
|
display: flex;
|
|
351
351
|
position: relative;
|
|
352
352
|
flex-grow: 1;
|
|
353
|
-
align-items: center;
|
|
354
353
|
width: 100%;
|
|
355
354
|
}
|
|
356
355
|
|
|
@@ -655,7 +654,9 @@
|
|
|
655
654
|
/**
|
|
656
655
|
* This makes the label sit above the input.
|
|
657
656
|
*/
|
|
658
|
-
:host(.label-
|
|
657
|
+
:host(.input-label-placement-stacked) .label-text-wrapper,
|
|
658
|
+
:host(.has-focus.input-label-placement-floating) .label-text-wrapper,
|
|
659
|
+
:host(.has-value.input-label-placement-floating) .label-text-wrapper {
|
|
659
660
|
transform: translateY(50%) scale(0.75);
|
|
660
661
|
/**
|
|
661
662
|
* Label text should not extend
|
|
@@ -664,14 +665,6 @@
|
|
|
664
665
|
max-width: calc(100% / 0.75);
|
|
665
666
|
}
|
|
666
667
|
|
|
667
|
-
::slotted([slot=start]) {
|
|
668
|
-
margin-inline-end: 16px;
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
::slotted([slot=end]) {
|
|
672
|
-
margin-inline-start: 16px;
|
|
673
|
-
}
|
|
674
|
-
|
|
675
668
|
/**
|
|
676
669
|
* Convert a font size to a dynamic font size.
|
|
677
670
|
* Fonts that participate in Dynamic Type should use
|
|
@@ -14,8 +14,6 @@ import { getCounterText } from "./input.utils";
|
|
|
14
14
|
* @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
|
|
15
15
|
*
|
|
16
16
|
* @slot label - The label text to associate with the input. Use the `labelPlacement` property to control where the label is placed relative to the input. Use this if you need to render a label with custom HTML. (EXPERIMENTAL)
|
|
17
|
-
* @slot start - Content to display at the leading edge of the input. (EXPERIMENTAL)
|
|
18
|
-
* @slot end - Content to display at the trailing edge of the input. (EXPERIMENTAL)
|
|
19
17
|
*/
|
|
20
18
|
export class Input {
|
|
21
19
|
constructor() {
|
|
@@ -159,7 +157,7 @@ export class Input {
|
|
|
159
157
|
connectedCallback() {
|
|
160
158
|
const { el } = this;
|
|
161
159
|
this.legacyFormController = createLegacyFormController(el);
|
|
162
|
-
this.slotMutationController = createSlotMutationController(el,
|
|
160
|
+
this.slotMutationController = createSlotMutationController(el, 'label', () => forceUpdate(this));
|
|
163
161
|
this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
|
|
164
162
|
this.emitStyle();
|
|
165
163
|
this.debounceChanged();
|
|
@@ -258,8 +256,6 @@ export class Input {
|
|
|
258
256
|
'has-value': this.hasValue(),
|
|
259
257
|
'has-focus': this.hasFocus,
|
|
260
258
|
'interactive-disabled': this.disabled,
|
|
261
|
-
// TODO(FW-2764): remove this
|
|
262
|
-
legacy: !!this.legacy,
|
|
263
259
|
});
|
|
264
260
|
}
|
|
265
261
|
}
|
|
@@ -365,50 +361,29 @@ export class Input {
|
|
|
365
361
|
return this.renderLabel();
|
|
366
362
|
}
|
|
367
363
|
renderInput() {
|
|
368
|
-
const { disabled, fill, readonly, shape, inputId, labelPlacement
|
|
364
|
+
const { disabled, fill, readonly, shape, inputId, labelPlacement } = this;
|
|
369
365
|
const mode = getIonMode(this);
|
|
370
366
|
const value = this.getValue();
|
|
371
367
|
const inItem = hostContext('ion-item', this.el);
|
|
372
368
|
const shouldRenderHighlight = mode === 'md' && fill !== 'outline' && !inItem;
|
|
373
|
-
const hasValue = this.hasValue();
|
|
374
|
-
const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
|
|
375
|
-
/**
|
|
376
|
-
* If the label is stacked, it should always sit above the input.
|
|
377
|
-
* For floating labels, the label should move above the input if
|
|
378
|
-
* the input has a value, is focused, or has anything in either
|
|
379
|
-
* the start or end slot.
|
|
380
|
-
*
|
|
381
|
-
* If there is content in the start slot, the label would overlap
|
|
382
|
-
* it if not forced to float. This is also applied to the end slot
|
|
383
|
-
* because with the default or solid fills, the input is not
|
|
384
|
-
* vertically centered in the container, but the label is. This
|
|
385
|
-
* causes the slots and label to appear vertically offset from each
|
|
386
|
-
* other when the label isn't floating above the input. This doesn't
|
|
387
|
-
* apply to the outline fill, but this was not accounted for to keep
|
|
388
|
-
* things consistent.
|
|
389
|
-
*
|
|
390
|
-
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
391
|
-
*/
|
|
392
|
-
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
|
|
393
369
|
return (h(Host, { class: createColorClasses(this.color, {
|
|
394
370
|
[mode]: true,
|
|
395
|
-
'has-value': hasValue,
|
|
396
|
-
'has-focus': hasFocus,
|
|
397
|
-
'label-floating': labelShouldFloat,
|
|
371
|
+
'has-value': this.hasValue(),
|
|
372
|
+
'has-focus': this.hasFocus,
|
|
398
373
|
[`input-fill-${fill}`]: fill !== undefined,
|
|
399
374
|
[`input-shape-${shape}`]: shape !== undefined,
|
|
400
375
|
[`input-label-placement-${labelPlacement}`]: true,
|
|
401
376
|
'in-item': inItem,
|
|
402
377
|
'in-item-color': hostContext('ion-item.ion-color', this.el),
|
|
403
378
|
'input-disabled': disabled,
|
|
404
|
-
}) }, h("label", { class: "input-wrapper"
|
|
379
|
+
}) }, h("label", { class: "input-wrapper" }, this.renderLabelContainer(), h("div", { class: "native-wrapper" }, h("input", Object.assign({ class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, accept: this.accept, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, size: this.size, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
|
|
405
380
|
/**
|
|
406
381
|
* This prevents mobile browsers from
|
|
407
382
|
* blurring the input when the clear
|
|
408
383
|
* button is activated.
|
|
409
384
|
*/
|
|
410
385
|
ev.preventDefault();
|
|
411
|
-
}, onClick: this.clearTextInput }, h("ion-icon", { "aria-hidden": "true", icon: mode === 'ios' ? closeCircle : closeSharp })))
|
|
386
|
+
}, onClick: this.clearTextInput }, h("ion-icon", { "aria-hidden": "true", icon: mode === 'ios' ? closeCircle : closeSharp })))), shouldRenderHighlight && h("div", { class: "input-highlight" })), this.renderBottomContent()));
|
|
412
387
|
}
|
|
413
388
|
// TODO FW-2764 Remove this
|
|
414
389
|
renderLegacyInput() {
|
|
@@ -350,7 +350,6 @@
|
|
|
350
350
|
display: flex;
|
|
351
351
|
position: relative;
|
|
352
352
|
flex-grow: 1;
|
|
353
|
-
align-items: center;
|
|
354
353
|
width: 100%;
|
|
355
354
|
}
|
|
356
355
|
|
|
@@ -655,7 +654,9 @@
|
|
|
655
654
|
/**
|
|
656
655
|
* This makes the label sit above the input.
|
|
657
656
|
*/
|
|
658
|
-
:host(.label-
|
|
657
|
+
:host(.input-label-placement-stacked) .label-text-wrapper,
|
|
658
|
+
:host(.has-focus.input-label-placement-floating) .label-text-wrapper,
|
|
659
|
+
:host(.has-value.input-label-placement-floating) .label-text-wrapper {
|
|
659
660
|
transform: translateY(50%) scale(0.75);
|
|
660
661
|
/**
|
|
661
662
|
* Label text should not extend
|
|
@@ -664,14 +665,6 @@
|
|
|
664
665
|
max-width: calc(100% / 0.75);
|
|
665
666
|
}
|
|
666
667
|
|
|
667
|
-
::slotted([slot=start]) {
|
|
668
|
-
margin-inline-end: 16px;
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
::slotted([slot=end]) {
|
|
672
|
-
margin-inline-start: 16px;
|
|
673
|
-
}
|
|
674
|
-
|
|
675
668
|
/**
|
|
676
669
|
* Convert a font size to a dynamic font size.
|
|
677
670
|
* Fonts that participate in Dynamic Type should use
|
|
@@ -914,7 +907,9 @@
|
|
|
914
907
|
}
|
|
915
908
|
}
|
|
916
909
|
|
|
917
|
-
:host(.
|
|
910
|
+
:host(.input-fill-solid.input-label-placement-stacked) .label-text-wrapper,
|
|
911
|
+
:host(.has-focus.input-fill-solid.input-label-placement-floating) .label-text-wrapper,
|
|
912
|
+
:host(.has-value.input-fill-solid.input-label-placement-floating) .label-text-wrapper {
|
|
918
913
|
/**
|
|
919
914
|
* Label text should not extend
|
|
920
915
|
* beyond the bounds of the input.
|
|
@@ -1068,7 +1063,9 @@
|
|
|
1068
1063
|
/**
|
|
1069
1064
|
* This makes the label sit above the input.
|
|
1070
1065
|
*/
|
|
1071
|
-
:host(.
|
|
1066
|
+
:host(.has-focus.input-fill-outline.input-label-placement-floating) .label-text-wrapper,
|
|
1067
|
+
:host(.has-value.input-fill-outline.input-label-placement-floating) .label-text-wrapper,
|
|
1068
|
+
:host(.input-fill-outline.input-label-placement-stacked) .label-text-wrapper {
|
|
1072
1069
|
transform: translateY(-32%) scale(0.75);
|
|
1073
1070
|
margin-left: 0;
|
|
1074
1071
|
margin-right: 0;
|
|
@@ -1229,7 +1226,9 @@
|
|
|
1229
1226
|
* the floating/stacked label. We simulate this "cut out"
|
|
1230
1227
|
* by removing the top border from the notch fragment.
|
|
1231
1228
|
*/
|
|
1232
|
-
:host(.
|
|
1229
|
+
:host(.has-focus.input-fill-outline.input-label-placement-floating) .input-outline-notch,
|
|
1230
|
+
:host(.has-value.input-fill-outline.input-label-placement-floating) .input-outline-notch,
|
|
1231
|
+
:host(.input-fill-outline.input-label-placement-stacked) .input-outline-notch {
|
|
1233
1232
|
border-top: none;
|
|
1234
1233
|
}
|
|
1235
1234
|
|