@ionic/core 7.5.8 → 7.6.1-dev.11701921257.1d512d3c
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 +12 -11
- package/components/checkbox.js +5 -3
- package/components/index4.js +10 -12
- package/components/index5.js +0 -22
- package/components/input-shims.js +12 -7
- package/components/input.utils.js +3 -2
- package/components/ion-datetime.js +2 -2
- package/components/ion-infinite-scroll.js +11 -3
- package/components/ion-input.js +31 -8
- package/components/ion-modal.js +2 -2
- package/components/ion-range.js +5 -3
- package/components/ion-select.js +44 -29
- package/components/ion-skeleton-text.js +14 -1
- package/components/ion-textarea.js +30 -7
- package/components/ion-toast.js +419 -74
- package/components/ion-toggle.js +5 -3
- package/components/item.js +2 -2
- package/components/label.js +2 -2
- package/components/overlays.js +2 -1
- package/components/radio-group.js +2 -0
- package/components/radio.js +45 -5
- package/dist/cjs/{animation-cc40e39c.js → animation-9b401d39.js} +13 -12
- package/dist/cjs/{button-active-417ccdcb.js → button-active-a5185907.js} +1 -1
- package/dist/cjs/{capacitor-46980811.js → capacitor-c04564bf.js} +1 -1
- package/dist/cjs/compare-with-utils-df1001d7.js +44 -0
- package/dist/cjs/{haptic-216df36c.js → haptic-b882e0bb.js} +1 -1
- package/dist/cjs/{index-8c1e77d6.js → index-b4f986cd.js} +1 -1
- package/dist/cjs/index-c8d52405.js +10 -0
- package/dist/cjs/{index-5cbb20f9.js → index-ce101dc9.js} +11 -13
- package/dist/cjs/{index-d4c2e02c.js → index-f8f13389.js} +2 -2
- package/dist/cjs/index.cjs.js +8 -8
- package/dist/cjs/{input-shims-87102b6a.js → input-shims-a23bb0f4.js} +15 -10
- package/dist/cjs/{input.utils-2a11c1fe.js → input.utils-3d0166a2.js} +4 -3
- 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 +5 -3
- package/dist/cjs/ion-datetime_3.cjs.entry.js +7 -7
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +11 -3
- package/dist/cjs/ion-input.cjs.entry.js +34 -11
- package/dist/cjs/ion-item_8.cjs.entry.js +17 -4
- 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 +3 -3
- package/dist/cjs/ion-popover.cjs.entry.js +4 -4
- package/dist/cjs/ion-radio_2.cjs.entry.js +9 -4
- package/dist/cjs/ion-range.cjs.entry.js +5 -3
- 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 +51 -35
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-textarea.cjs.entry.js +33 -10
- package/dist/cjs/ion-toast.cjs.entry.js +434 -92
- package/dist/cjs/ion-toggle.cjs.entry.js +8 -6
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/{ios.transition-a4ffb5a2.js → ios.transition-6787b799.js} +3 -3
- package/dist/cjs/{keyboard-9390928c.js → keyboard-0272231f.js} +1 -1
- package/dist/cjs/{keyboard-7d621ee9.js → keyboard-af1bb365.js} +3 -3
- package/dist/cjs/{keyboard-controller-2158b478.js → keyboard-controller-c05e747a.js} +2 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{md.transition-292abe1c.js → md.transition-e033d20a.js} +3 -3
- package/dist/cjs/{notch-controller-1dce508a.js → notch-controller-9735e7ac.js} +1 -1
- package/dist/cjs/{overlays-5c379703.js → overlays-27a6fb16.js} +3 -1
- package/dist/collection/components/checkbox/checkbox.ios.css +0 -6
- package/dist/collection/components/checkbox/checkbox.js +4 -1
- package/dist/collection/components/checkbox/checkbox.md.css +0 -6
- package/dist/collection/components/checkbox/test/checkbox.spec.js +14 -0
- package/dist/collection/components/datetime/datetime.ios.css +1 -0
- package/dist/collection/components/datetime/datetime.md.css +1 -0
- package/dist/collection/components/infinite-scroll/infinite-scroll.js +11 -3
- package/dist/collection/components/infinite-scroll/test/small-dom-update/infinite-scroll.e2e.js +31 -0
- package/dist/collection/components/input/input.ios.css +10 -3
- package/dist/collection/components/input/input.js +31 -6
- package/dist/collection/components/input/input.md.css +13 -12
- package/dist/collection/components/input/test/slot/input.e2e.js +51 -0
- package/dist/collection/components/item/item.ios.css +41 -3
- package/dist/collection/components/item/item.md.css +41 -3
- package/dist/collection/components/item/test/basic/item.e2e.js +1 -1
- package/dist/collection/components/item/test/disabled/item.e2e.js +0 -1
- package/dist/collection/components/label/label.ios.css +14 -3
- package/dist/collection/components/label/label.md.css +14 -3
- package/dist/collection/components/modal/gestures/swipe-to-close.js +2 -1
- package/dist/collection/components/note/test/a11y/note.e2e.js +43 -0
- package/dist/collection/components/radio/radio.ios.css +0 -6
- package/dist/collection/components/radio/radio.js +7 -3
- package/dist/collection/components/radio/radio.md.css +0 -6
- package/dist/collection/components/radio/test/radio.spec.js +14 -0
- package/dist/collection/components/radio-group/radio-group.js +24 -0
- package/dist/collection/components/radio-group/test/radio-group.spec.js +69 -0
- package/dist/collection/components/range/range.ios.css +0 -6
- package/dist/collection/components/range/range.js +4 -1
- package/dist/collection/components/range/range.md.css +0 -6
- package/dist/collection/components/range/test/range.spec.js +16 -0
- package/dist/collection/components/select/select.ios.css +60 -7
- package/dist/collection/components/select/select.js +45 -28
- package/dist/collection/components/select/select.md.css +63 -19
- package/dist/collection/components/select/test/item/select.e2e.js +15 -0
- 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/select/test/slot/select.e2e.js +67 -0
- package/dist/collection/components/skeleton-text/skeleton-text.js +39 -0
- package/dist/collection/components/textarea/test/slot/textarea.e2e.js +51 -0
- package/dist/collection/components/textarea/textarea.ios.css +37 -5
- package/dist/collection/components/textarea/textarea.js +30 -5
- package/dist/collection/components/textarea/textarea.md.css +47 -14
- package/dist/collection/components/toast/animations/ios.enter.js +2 -1
- package/dist/collection/components/toast/animations/md.enter.js +4 -3
- package/dist/collection/components/toast/animations/utils.js +20 -14
- package/dist/collection/components/toast/gestures/swipe-to-dismiss.js +267 -0
- package/dist/collection/components/toast/test/swipe-gesture/toast.e2e.js +84 -0
- package/dist/collection/components/toast/test/toast-config.spec.js +25 -0
- package/dist/collection/components/toast/test/toast.spec.js +80 -0
- package/dist/collection/components/toast/toast.ios.css +10 -10
- package/dist/collection/components/toast/toast.js +104 -1
- package/dist/collection/components/toast/toast.md.css +10 -0
- package/dist/collection/components/toggle/test/toggle.spec.js +12 -0
- package/dist/collection/components/toggle/toggle.ios.css +0 -6
- package/dist/collection/components/toggle/toggle.js +4 -1
- package/dist/collection/components/toggle/toggle.md.css +0 -6
- package/dist/collection/utils/animation/animation.js +12 -11
- package/dist/collection/utils/animation/test/animation.spec.js +16 -0
- package/dist/collection/utils/browser/index.js +0 -22
- package/dist/collection/utils/forms/compare-with-utils.js +39 -0
- package/dist/collection/utils/forms/index.js +1 -0
- package/dist/collection/utils/input-shims/input-shims.js +12 -6
- package/dist/collection/utils/menu-controller/index.js +10 -12
- package/dist/collection/utils/overlays.js +1 -0
- package/dist/collection/utils/slot-mutation-controller.js +3 -2
- package/dist/docs.json +159 -2
- package/dist/esm/{animation-fb0e0f6f.js → animation-dde8cc0d.js} +13 -12
- package/dist/esm/{button-active-3fdf3e4f.js → button-active-c6ee4f50.js} +1 -1
- package/dist/esm/{capacitor-b0e5fe83.js → capacitor-59395cbd.js} +1 -1
- package/dist/esm/compare-with-utils-a96ff2ea.js +41 -0
- package/dist/esm/{haptic-152c4172.js → haptic-554688a5.js} +1 -1
- package/dist/esm/{index-80492ed3.js → index-0c12c22b.js} +11 -13
- package/dist/esm/{index-d8817fb0.js → index-1932b201.js} +2 -2
- package/dist/esm/{index-ba9976bb.js → index-82eeb47f.js} +1 -1
- package/dist/esm/index-a5d50daf.js +7 -0
- package/dist/esm/index.js +8 -8
- package/dist/esm/{input-shims-0a2e541d.js → input-shims-6539ce13.js} +14 -9
- package/dist/esm/{input.utils-2846d430.js → input.utils-a5a2d164.js} +4 -3
- 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 +5 -3
- package/dist/esm/ion-datetime_3.entry.js +7 -7
- package/dist/esm/ion-infinite-scroll_2.entry.js +11 -3
- package/dist/esm/ion-input.entry.js +34 -11
- package/dist/esm/ion-item_8.entry.js +17 -4
- 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 +3 -3
- package/dist/esm/ion-popover.entry.js +4 -4
- package/dist/esm/ion-radio_2.entry.js +9 -4
- package/dist/esm/ion-range.entry.js +5 -3
- 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 +47 -31
- package/dist/esm/ion-tab-bar_2.entry.js +4 -4
- package/dist/esm/ion-textarea.entry.js +33 -10
- package/dist/esm/ion-toast.entry.js +417 -75
- package/dist/esm/ion-toggle.entry.js +8 -6
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/{ios.transition-fd16bec1.js → ios.transition-802a84a6.js} +3 -3
- package/dist/esm/{keyboard-c402e885.js → keyboard-52278bd7.js} +3 -3
- package/dist/esm/{keyboard-dbb05fb9.js → keyboard-73175e24.js} +1 -1
- package/dist/esm/{keyboard-controller-5d90929a.js → keyboard-controller-ec5c2bfa.js} +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{md.transition-94ac93e1.js → md.transition-43c2874d.js} +3 -3
- package/dist/esm/{notch-controller-d09b6aca.js → notch-controller-fea7f9c5.js} +1 -1
- package/dist/esm/{overlays-abf58489.js → overlays-32ef481d.js} +3 -2
- package/dist/esm-es5/{animation-fb0e0f6f.js → animation-dde8cc0d.js} +1 -1
- package/dist/esm-es5/{button-active-3fdf3e4f.js → button-active-c6ee4f50.js} +1 -1
- package/dist/esm-es5/{capacitor-b0e5fe83.js → capacitor-59395cbd.js} +1 -1
- package/dist/esm-es5/compare-with-utils-a96ff2ea.js +4 -0
- package/dist/esm-es5/{haptic-152c4172.js → haptic-554688a5.js} +1 -1
- package/dist/esm-es5/index-0c12c22b.js +4 -0
- package/dist/esm-es5/{index-d8817fb0.js → index-1932b201.js} +1 -1
- package/dist/esm-es5/{index-ba9976bb.js → index-82eeb47f.js} +1 -1
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/input-shims-6539ce13.js +4 -0
- package/dist/esm-es5/input.utils-a5a2d164.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_3.entry.js +1 -1
- package/dist/esm-es5/ion-infinite-scroll_2.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-fd16bec1.js → ios.transition-802a84a6.js} +1 -1
- package/dist/esm-es5/{keyboard-c402e885.js → keyboard-52278bd7.js} +1 -1
- package/dist/esm-es5/{keyboard-dbb05fb9.js → keyboard-73175e24.js} +1 -1
- package/dist/esm-es5/{keyboard-controller-5d90929a.js → keyboard-controller-ec5c2bfa.js} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/md.transition-43c2874d.js +4 -0
- package/dist/esm-es5/{notch-controller-d09b6aca.js → notch-controller-fea7f9c5.js} +1 -1
- package/dist/esm-es5/{overlays-abf58489.js → overlays-32ef481d.js} +1 -1
- package/dist/html.html-data.json +14 -1
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-01d14eba.system.entry.js +4 -0
- package/dist/ionic/{p-3de71759.entry.js → p-042e6f4b.entry.js} +1 -1
- package/dist/ionic/p-05d83227.system.entry.js +4 -0
- package/dist/ionic/{p-32e19bee.system.js → p-0bd51c34.system.js} +1 -1
- package/dist/ionic/{p-73637557.system.entry.js → p-16756e94.system.entry.js} +1 -1
- package/dist/ionic/p-1b19c04b.entry.js +4 -0
- package/dist/ionic/{p-95c26010.system.js → p-1cca10d6.system.js} +1 -1
- package/dist/ionic/p-1e4371bd.js +4 -0
- package/dist/ionic/{p-0519cd21.entry.js → p-251666e2.entry.js} +1 -1
- package/dist/ionic/{p-4e8e09e1.js → p-27281edd.js} +1 -1
- package/dist/ionic/p-28249b10.system.entry.js +4 -0
- package/dist/ionic/p-28a2c2a2.entry.js +4 -0
- package/dist/ionic/p-29d03b3a.js +4 -0
- package/dist/ionic/p-2b7827c7.js +4 -0
- package/dist/ionic/p-2d3b9fa3.system.entry.js +4 -0
- package/dist/ionic/p-2d539df1.entry.js +4 -0
- package/dist/ionic/{p-a0126dd5.system.entry.js → p-3137c025.system.entry.js} +1 -1
- package/dist/ionic/{p-30029cc2.system.js → p-31fcb233.system.js} +1 -1
- package/dist/ionic/{p-b0dc1cf9.system.js → p-33a37fad.system.js} +1 -1
- package/dist/ionic/p-36d187af.js +4 -0
- package/dist/ionic/p-376a6063.js +4 -0
- package/dist/ionic/p-38f2c6bb.system.js +4 -0
- package/dist/ionic/{p-2ba0657d.system.entry.js → p-39c31982.system.entry.js} +1 -1
- package/dist/ionic/{p-75445583.js → p-3a75d7fd.js} +1 -1
- package/dist/ionic/{p-d40a974a.entry.js → p-3dd98a73.entry.js} +1 -1
- package/dist/ionic/p-3e6b47e8.system.entry.js +4 -0
- package/dist/ionic/p-3f5179b5.entry.js +4 -0
- package/dist/ionic/p-40f68333.system.js +4 -0
- package/dist/ionic/{p-643a8fae.js → p-42f189f4.js} +1 -1
- package/dist/ionic/{p-9c3b6849.entry.js → p-438e1b8a.entry.js} +1 -1
- package/dist/ionic/{p-b752714f.system.entry.js → p-46d400b4.system.entry.js} +1 -1
- package/dist/ionic/{p-61d7d7fb.js → p-47b6ba5b.js} +1 -1
- package/dist/ionic/{p-b04e4d62.entry.js → p-4d67d27a.entry.js} +1 -1
- package/dist/ionic/{p-0b1bc636.entry.js → p-4f3ae45a.entry.js} +1 -1
- package/dist/ionic/{p-18b6bd23.system.entry.js → p-517a9885.system.entry.js} +1 -1
- package/dist/ionic/p-53ec4f1c.system.js +4 -0
- package/dist/ionic/p-5e4eec2e.entry.js +4 -0
- package/dist/ionic/{p-57477107.system.js → p-5e745192.system.js} +1 -1
- package/dist/ionic/{p-ad019ef0.entry.js → p-5eda1d7d.entry.js} +1 -1
- package/dist/ionic/{p-4890093d.js → p-6de472cb.js} +1 -1
- package/dist/ionic/{p-08f196ce.system.entry.js → p-6de62649.system.entry.js} +1 -1
- package/dist/ionic/p-72f6ff89.js +4 -0
- package/dist/ionic/p-765f4dde.entry.js +4 -0
- package/dist/ionic/{p-3f6270b3.entry.js → p-78aadecb.entry.js} +1 -1
- package/dist/ionic/p-7d92bf15.system.entry.js +4 -0
- package/dist/ionic/p-7ee0f3f2.entry.js +4 -0
- package/dist/ionic/p-8314281e.system.js +4 -0
- package/dist/ionic/p-88d5fbd3.js +4 -0
- package/dist/ionic/{p-0e4f2e17.system.js → p-8985cdb6.system.js} +1 -1
- package/dist/ionic/{p-d7be6b7e.system.entry.js → p-8acae6b0.system.entry.js} +1 -1
- package/dist/ionic/p-8d69a624.entry.js +4 -0
- package/dist/ionic/p-8de17614.system.entry.js +4 -0
- package/dist/ionic/p-91d33c4a.js +4 -0
- package/dist/ionic/p-979d4f5c.system.js +4 -0
- package/dist/ionic/p-9b7f0b0f.entry.js +4 -0
- package/dist/ionic/p-9e447eb1.system.js +4 -0
- package/dist/ionic/p-9f6ee2c0.system.entry.js +4 -0
- package/dist/ionic/{p-94389114.system.entry.js → p-a0bb7b92.system.entry.js} +1 -1
- package/dist/ionic/{p-f2c21dae.system.js → p-a0d7bb5e.system.js} +1 -1
- package/dist/ionic/{p-82045bc1.entry.js → p-a3277a67.entry.js} +1 -1
- package/dist/ionic/{p-50880712.entry.js → p-a9978d08.entry.js} +1 -1
- package/dist/ionic/{p-3b686a65.system.entry.js → p-ada96dd0.system.entry.js} +1 -1
- package/dist/ionic/p-afd6ca9d.entry.js +4 -0
- package/dist/ionic/p-b56d0866.system.entry.js +4 -0
- package/dist/ionic/{p-67da080d.entry.js → p-b6f9d32a.entry.js} +1 -1
- package/dist/ionic/p-c61cc894.js +4 -0
- package/dist/ionic/{p-304383f9.system.js → p-cabad15b.system.js} +1 -1
- package/dist/ionic/{p-31158892.js → p-cdbeaadc.js} +1 -1
- package/dist/ionic/p-d032f825.system.entry.js +4 -0
- package/dist/ionic/p-d51674c5.system.js +4 -0
- package/dist/ionic/{p-98d82c73.system.js → p-ddbb2d5b.system.js} +1 -1
- package/dist/ionic/p-de6f8b28.system.js +4 -0
- package/dist/ionic/p-de756e5c.js +4 -0
- package/dist/ionic/{p-73ea8f82.system.entry.js → p-dee7c1d0.system.entry.js} +1 -1
- package/dist/ionic/p-dfd9432a.entry.js +4 -0
- package/dist/ionic/{p-af5cfad2.system.js → p-e24ce1e5.system.js} +1 -1
- package/dist/ionic/p-e3584231.system.js +1 -1
- package/dist/ionic/p-f0445d82.system.entry.js +4 -0
- package/dist/ionic/p-f656e032.system.entry.js +4 -0
- package/dist/ionic/{p-17f893be.js → p-f70970cf.js} +1 -1
- package/dist/ionic/{p-e553006f.system.entry.js → p-fba0a6e7.system.entry.js} +1 -1
- package/dist/ionic/p-feae5133.entry.js +4 -0
- package/dist/types/components/checkbox/checkbox.d.ts +1 -0
- package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +7 -0
- package/dist/types/components/input/input.d.ts +2 -0
- package/dist/types/components/radio/radio.d.ts +1 -0
- package/dist/types/components/radio-group/radio-group-interface.d.ts +1 -0
- package/dist/types/components/radio-group/radio-group.d.ts +8 -1
- package/dist/types/components/range/range.d.ts +1 -0
- package/dist/types/components/router/router.d.ts +2 -1
- package/dist/types/components/select/select.d.ts +6 -1
- package/dist/types/components/skeleton-text/skeleton-text.d.ts +9 -1
- package/dist/types/components/textarea/textarea.d.ts +2 -0
- package/dist/types/components/toast/animations/utils.d.ts +15 -4
- package/dist/types/components/toast/gestures/swipe-to-dismiss.d.ts +9 -0
- package/dist/types/components/toast/toast-interface.d.ts +2 -0
- package/dist/types/components/toast/toast.d.ts +28 -1
- package/dist/types/components/toggle/toggle.d.ts +1 -0
- package/dist/types/components.d.ts +37 -6
- package/dist/types/interface.d.ts +1 -5
- package/dist/types/jest.d.ts +5 -0
- package/dist/types/utils/animation/animation-interface.d.ts +4 -4
- package/dist/types/utils/browser/index.d.ts +11 -2
- package/dist/types/utils/forms/compare-with-utils.d.ts +18 -0
- package/dist/types/utils/forms/index.d.ts +1 -0
- package/dist/types/utils/hardware-back-button.d.ts +4 -0
- package/dist/types/utils/overlays.d.ts +1 -0
- package/dist/types/utils/slot-mutation-controller.d.ts +2 -2
- package/hydrate/index.js +643 -184
- package/package.json +1 -1
- package/dist/cjs/index-306a7476.js +0 -32
- package/dist/collection/components/item/test/text/item.e2e.js +0 -14
- package/dist/esm/index-7a14ecec.js +0 -29
- package/dist/esm-es5/index-80492ed3.js +0 -4
- package/dist/esm-es5/input-shims-0a2e541d.js +0 -4
- package/dist/esm-es5/input.utils-2846d430.js +0 -4
- package/dist/esm-es5/md.transition-94ac93e1.js +0 -4
- package/dist/ionic/p-1d17219f.entry.js +0 -4
- package/dist/ionic/p-232d1f22.entry.js +0 -4
- package/dist/ionic/p-25b32c3d.entry.js +0 -4
- package/dist/ionic/p-2ab4e925.system.entry.js +0 -4
- package/dist/ionic/p-2d5aeccc.js +0 -4
- package/dist/ionic/p-2d600c25.system.js +0 -4
- package/dist/ionic/p-308e1341.js +0 -4
- package/dist/ionic/p-32303650.system.entry.js +0 -4
- package/dist/ionic/p-34c39c48.entry.js +0 -4
- package/dist/ionic/p-3c58a71b.js +0 -4
- package/dist/ionic/p-3e960213.system.entry.js +0 -4
- package/dist/ionic/p-3fd26bd6.system.entry.js +0 -4
- package/dist/ionic/p-3fe96156.system.js +0 -4
- package/dist/ionic/p-42ba3902.entry.js +0 -4
- package/dist/ionic/p-4a31c99f.entry.js +0 -4
- package/dist/ionic/p-5a68960f.entry.js +0 -4
- package/dist/ionic/p-6470b136.entry.js +0 -4
- package/dist/ionic/p-6c37f051.js +0 -4
- package/dist/ionic/p-7b8d0af2.system.entry.js +0 -4
- package/dist/ionic/p-7faba551.system.entry.js +0 -4
- package/dist/ionic/p-83af3685.system.js +0 -4
- package/dist/ionic/p-856c430d.js +0 -4
- package/dist/ionic/p-93000a81.system.entry.js +0 -4
- package/dist/ionic/p-98b14ece.entry.js +0 -4
- package/dist/ionic/p-990ffd0e.js +0 -4
- package/dist/ionic/p-a6f9dd7b.entry.js +0 -4
- package/dist/ionic/p-a98dc0c1.entry.js +0 -4
- package/dist/ionic/p-a9e3b5be.system.entry.js +0 -4
- package/dist/ionic/p-ab9456e9.system.entry.js +0 -4
- package/dist/ionic/p-b4bad293.system.entry.js +0 -4
- package/dist/ionic/p-c3289ef2.entry.js +0 -4
- package/dist/ionic/p-c3d09cf2.system.entry.js +0 -4
- package/dist/ionic/p-d1cb29a8.system.entry.js +0 -4
- package/dist/ionic/p-d43f1f3d.system.js +0 -4
- package/dist/ionic/p-d662d908.js +0 -4
- package/dist/ionic/p-d9695ad9.system.js +0 -4
- package/dist/ionic/p-e4d90573.js +0 -4
- package/dist/ionic/p-f54c72b0.system.js +0 -4
- package/dist/ionic/p-f7a36cd0.system.js +0 -4
- package/dist/ionic/p-f967631d.js +0 -4
- /package/dist/esm-es5/{index-7a14ecec.js → index-a5d50daf.js} +0 -0
- /package/dist/ionic/{p-0e94957a.system.js → p-792919fd.system.js} +0 -0
- /package/dist/ionic/{p-b347cfd1.js → p-7b30edcc.js} +0 -0
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { h } from "@stencil/core";
|
|
5
5
|
import { newSpecPage } from "@stencil/core/testing";
|
|
6
6
|
import { config } from "../../../global/config";
|
|
7
|
+
import { createAnimation } from "../../../utils/animation/animation";
|
|
7
8
|
import { Toast } from "../toast";
|
|
8
9
|
describe('toast: custom html', () => {
|
|
9
10
|
it('should not allow for custom html by default', async () => {
|
|
@@ -118,3 +119,82 @@ describe('toast: button cancel', () => {
|
|
|
118
119
|
expect(buttonCancel.getAttribute('part')).toBe('button cancel');
|
|
119
120
|
});
|
|
120
121
|
});
|
|
122
|
+
describe('toast: swipe gesture', () => {
|
|
123
|
+
describe('prefersSwipeGesture()', () => {
|
|
124
|
+
let toast;
|
|
125
|
+
beforeEach(() => {
|
|
126
|
+
toast = new Toast();
|
|
127
|
+
});
|
|
128
|
+
it('should return true if set to a valid swipe value', () => {
|
|
129
|
+
toast.swipeGesture = 'vertical';
|
|
130
|
+
expect(toast.prefersSwipeGesture()).toBe(true);
|
|
131
|
+
});
|
|
132
|
+
it('should return false if set to undefined', () => {
|
|
133
|
+
toast.swipeGesture = undefined;
|
|
134
|
+
expect(toast.prefersSwipeGesture()).toBe(false);
|
|
135
|
+
});
|
|
136
|
+
it('should return false if set to null', () => {
|
|
137
|
+
toast.swipeGesture = null;
|
|
138
|
+
expect(toast.prefersSwipeGesture()).toBe(false);
|
|
139
|
+
});
|
|
140
|
+
it('should return false if set to invalid string', () => {
|
|
141
|
+
toast.swipeGesture = 'limit'; // `'limit'` doesn't exist
|
|
142
|
+
expect(toast.prefersSwipeGesture()).toBe(false);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe('swipeGesture property', () => {
|
|
146
|
+
let toast;
|
|
147
|
+
beforeEach(() => {
|
|
148
|
+
toast = new Toast();
|
|
149
|
+
// Stub the enter animation so we aren't querying elements in the DOM that may not exist
|
|
150
|
+
toast.enterAnimation = () => createAnimation();
|
|
151
|
+
});
|
|
152
|
+
it('should not create a swipe gesture on present if swipeGesture is undefined', async () => {
|
|
153
|
+
expect(toast.gesture).toBe(undefined);
|
|
154
|
+
await toast.present();
|
|
155
|
+
expect(toast.gesture).toBe(undefined);
|
|
156
|
+
});
|
|
157
|
+
it('should create a swipe gesture on present', async () => {
|
|
158
|
+
toast.swipeGesture = 'vertical';
|
|
159
|
+
expect(toast.gesture).toBe(undefined);
|
|
160
|
+
await toast.present();
|
|
161
|
+
expect(toast.gesture).not.toBe(undefined);
|
|
162
|
+
});
|
|
163
|
+
it('should destroy a swipe gesture on dismiss', async () => {
|
|
164
|
+
toast.swipeGesture = 'vertical';
|
|
165
|
+
await toast.present();
|
|
166
|
+
expect(toast.gesture).not.toBe(undefined);
|
|
167
|
+
await toast.dismiss();
|
|
168
|
+
expect(toast.gesture).toBe(undefined);
|
|
169
|
+
});
|
|
170
|
+
it('should create a swipe gesture if swipeGesture is set after present', async () => {
|
|
171
|
+
await toast.present();
|
|
172
|
+
expect(toast.gesture).toBe(undefined);
|
|
173
|
+
/**
|
|
174
|
+
* Manually invoke the watch
|
|
175
|
+
* callback synchronously.
|
|
176
|
+
*/
|
|
177
|
+
toast.swipeGesture = 'vertical';
|
|
178
|
+
toast.swipeGestureChanged();
|
|
179
|
+
expect(toast.gesture).not.toBe(undefined);
|
|
180
|
+
});
|
|
181
|
+
it('should destroy a swipe gesture if swipeGesture is cleared after present', async () => {
|
|
182
|
+
toast.swipeGesture = 'vertical';
|
|
183
|
+
await toast.present();
|
|
184
|
+
expect(toast.gesture).not.toBe(undefined);
|
|
185
|
+
/**
|
|
186
|
+
* Manually invoke the watch
|
|
187
|
+
* callback synchronously.
|
|
188
|
+
*/
|
|
189
|
+
toast.swipeGesture = undefined;
|
|
190
|
+
toast.swipeGestureChanged();
|
|
191
|
+
expect(toast.gesture).toBe(undefined);
|
|
192
|
+
});
|
|
193
|
+
it('should not create a swipe gesture if the toast is not presented', async () => {
|
|
194
|
+
expect(toast.gesture).toBe(undefined);
|
|
195
|
+
toast.swipeGesture = 'vertical';
|
|
196
|
+
toast.swipeGestureChanged();
|
|
197
|
+
expect(toast.gesture).toBe(undefined);
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
});
|
|
@@ -189,6 +189,16 @@
|
|
|
189
189
|
}
|
|
190
190
|
}
|
|
191
191
|
|
|
192
|
+
.toast-wrapper.toast-top {
|
|
193
|
+
transform: translate3d(0, -100%, 0);
|
|
194
|
+
top: 0;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.toast-wrapper.toast-bottom {
|
|
198
|
+
transform: translate3d(0, 100%, 0);
|
|
199
|
+
bottom: 0;
|
|
200
|
+
}
|
|
201
|
+
|
|
192
202
|
.toast-container {
|
|
193
203
|
display: flex;
|
|
194
204
|
align-items: center;
|
|
@@ -343,20 +353,10 @@
|
|
|
343
353
|
background: rgba(var(--ion-color-base-rgb), 0.8);
|
|
344
354
|
}
|
|
345
355
|
}
|
|
346
|
-
.toast-wrapper.toast-top {
|
|
347
|
-
transform: translate3d(0, -100%, 0);
|
|
348
|
-
top: 0;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
356
|
.toast-wrapper.toast-middle {
|
|
352
357
|
opacity: 0.01;
|
|
353
358
|
}
|
|
354
359
|
|
|
355
|
-
.toast-wrapper.toast-bottom {
|
|
356
|
-
transform: translate3d(0, 100%, 0);
|
|
357
|
-
bottom: 0;
|
|
358
|
-
}
|
|
359
|
-
|
|
360
360
|
.toast-content {
|
|
361
361
|
-webkit-padding-start: 15px;
|
|
362
362
|
padding-inline-start: 15px;
|
|
@@ -6,7 +6,7 @@ import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
|
|
|
6
6
|
import { raf } from "../../utils/helpers";
|
|
7
7
|
import { createLockController } from "../../utils/lock-controller";
|
|
8
8
|
import { printIonWarning } from "../../utils/logging/index";
|
|
9
|
-
import { createDelegateController, createTriggerController, dismiss, eventMethod, isCancel, prepareOverlay, present, safeCall, setOverlayId, } from "../../utils/overlays";
|
|
9
|
+
import { GESTURE, createDelegateController, createTriggerController, dismiss, eventMethod, isCancel, prepareOverlay, present, safeCall, setOverlayId, } from "../../utils/overlays";
|
|
10
10
|
import { sanitizeDOMString } from "../../utils/sanitization/index";
|
|
11
11
|
import { createColorClasses, getClassMap } from "../../utils/theme";
|
|
12
12
|
import { config } from "../../global/config";
|
|
@@ -16,6 +16,7 @@ import { iosLeaveAnimation } from "./animations/ios.leave";
|
|
|
16
16
|
import { mdEnterAnimation } from "./animations/md.enter";
|
|
17
17
|
import { mdLeaveAnimation } from "./animations/md.leave";
|
|
18
18
|
import { getAnimationPosition } from "./animations/utils";
|
|
19
|
+
import { createSwipeToDismissGesture } from "./gestures/swipe-to-dismiss";
|
|
19
20
|
// TODO(FW-2832): types
|
|
20
21
|
/**
|
|
21
22
|
* @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
|
|
@@ -41,6 +42,41 @@ export class Toast {
|
|
|
41
42
|
this.callButtonHandler(cancelButton);
|
|
42
43
|
}
|
|
43
44
|
};
|
|
45
|
+
/**
|
|
46
|
+
* Create a new swipe gesture so Toast
|
|
47
|
+
* can be swiped to dismiss.
|
|
48
|
+
*/
|
|
49
|
+
this.createSwipeGesture = (toastPosition) => {
|
|
50
|
+
const gesture = (this.gesture = createSwipeToDismissGesture(this.el, toastPosition, () => {
|
|
51
|
+
/**
|
|
52
|
+
* If the gesture completed then
|
|
53
|
+
* we should dismiss the toast.
|
|
54
|
+
*/
|
|
55
|
+
this.dismiss(undefined, GESTURE);
|
|
56
|
+
}));
|
|
57
|
+
gesture.enable(true);
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Destroy an existing swipe gesture
|
|
61
|
+
* so Toast can no longer be swiped to dismiss.
|
|
62
|
+
*/
|
|
63
|
+
this.destroySwipeGesture = () => {
|
|
64
|
+
const { gesture } = this;
|
|
65
|
+
if (gesture === undefined) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
gesture.destroy();
|
|
69
|
+
this.gesture = undefined;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Returns `true` if swipeGesture
|
|
73
|
+
* is configured to a value that enables the swipe behavior.
|
|
74
|
+
* Returns `false` otherwise.
|
|
75
|
+
*/
|
|
76
|
+
this.prefersSwipeGesture = () => {
|
|
77
|
+
const { swipeGesture } = this;
|
|
78
|
+
return swipeGesture === 'vertical';
|
|
79
|
+
};
|
|
44
80
|
this.revealContentToScreenReader = false;
|
|
45
81
|
this.overlayIndex = undefined;
|
|
46
82
|
this.delegate = undefined;
|
|
@@ -61,9 +97,37 @@ export class Toast {
|
|
|
61
97
|
this.animated = true;
|
|
62
98
|
this.icon = undefined;
|
|
63
99
|
this.htmlAttributes = undefined;
|
|
100
|
+
this.swipeGesture = undefined;
|
|
64
101
|
this.isOpen = false;
|
|
65
102
|
this.trigger = undefined;
|
|
66
103
|
}
|
|
104
|
+
swipeGestureChanged() {
|
|
105
|
+
/**
|
|
106
|
+
* If the Toast is presented, then we need to destroy
|
|
107
|
+
* any actives gestures before a new gesture is potentially
|
|
108
|
+
* created below.
|
|
109
|
+
*
|
|
110
|
+
* If the Toast is dismissed, then no gesture should be available
|
|
111
|
+
* since the Toast is not visible. This case should never
|
|
112
|
+
* happen since the "dismiss" method handles destroying
|
|
113
|
+
* any active swipe gestures, but we keep this code
|
|
114
|
+
* around to handle the first case.
|
|
115
|
+
*/
|
|
116
|
+
this.destroySwipeGesture();
|
|
117
|
+
/**
|
|
118
|
+
* A new swipe gesture should only be created
|
|
119
|
+
* if the Toast is presented. If the Toast is not
|
|
120
|
+
* yet presented then the "present" method will
|
|
121
|
+
* handle calling the swipe gesture setup function.
|
|
122
|
+
*/
|
|
123
|
+
if (this.presented && this.prefersSwipeGesture()) {
|
|
124
|
+
/**
|
|
125
|
+
* If the Toast is presented then
|
|
126
|
+
* lastPresentedPosition is defined.
|
|
127
|
+
*/
|
|
128
|
+
this.createSwipeGesture(this.lastPresentedPosition);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
67
131
|
onIsOpenChange(newValue, oldValue) {
|
|
68
132
|
if (newValue === true && oldValue === false) {
|
|
69
133
|
this.present();
|
|
@@ -135,6 +199,14 @@ export class Toast {
|
|
|
135
199
|
if (this.duration > 0) {
|
|
136
200
|
this.durationTimeout = setTimeout(() => this.dismiss(undefined, 'timeout'), this.duration);
|
|
137
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* If the Toast has a swipe gesture then we can
|
|
204
|
+
* create the gesture so users can swipe the
|
|
205
|
+
* presented Toast.
|
|
206
|
+
*/
|
|
207
|
+
if (this.prefersSwipeGesture()) {
|
|
208
|
+
this.createSwipeGesture(animationPosition);
|
|
209
|
+
}
|
|
138
210
|
unlock();
|
|
139
211
|
}
|
|
140
212
|
/**
|
|
@@ -169,6 +241,11 @@ export class Toast {
|
|
|
169
241
|
this.revealContentToScreenReader = false;
|
|
170
242
|
}
|
|
171
243
|
this.lastPresentedPosition = undefined;
|
|
244
|
+
/**
|
|
245
|
+
* If the Toast has a swipe gesture then we can
|
|
246
|
+
* safely destroy it now that it is dismissed.
|
|
247
|
+
*/
|
|
248
|
+
this.destroySwipeGesture();
|
|
172
249
|
unlock();
|
|
173
250
|
return dismissed;
|
|
174
251
|
}
|
|
@@ -709,6 +786,29 @@ export class Toast {
|
|
|
709
786
|
"text": "Additional attributes to pass to the toast."
|
|
710
787
|
}
|
|
711
788
|
},
|
|
789
|
+
"swipeGesture": {
|
|
790
|
+
"type": "string",
|
|
791
|
+
"mutable": false,
|
|
792
|
+
"complexType": {
|
|
793
|
+
"original": "ToastSwipeGestureDirection",
|
|
794
|
+
"resolved": "\"vertical\" | undefined",
|
|
795
|
+
"references": {
|
|
796
|
+
"ToastSwipeGestureDirection": {
|
|
797
|
+
"location": "import",
|
|
798
|
+
"path": "./toast-interface",
|
|
799
|
+
"id": "src/components/toast/toast-interface.ts::ToastSwipeGestureDirection"
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
},
|
|
803
|
+
"required": false,
|
|
804
|
+
"optional": true,
|
|
805
|
+
"docs": {
|
|
806
|
+
"tags": [],
|
|
807
|
+
"text": "If set to 'vertical', the Toast can be dismissed with\na swipe gesture. The swipe direction is determined by\nthe value of the `position` property:\n`top`: The Toast can be swiped up to dismiss.\n`bottom`: The Toast can be swiped down to dismiss.\n`middle`: The Toast can be swiped up or down to dismiss."
|
|
808
|
+
},
|
|
809
|
+
"attribute": "swipe-gesture",
|
|
810
|
+
"reflect": false
|
|
811
|
+
},
|
|
712
812
|
"isOpen": {
|
|
713
813
|
"type": "boolean",
|
|
714
814
|
"mutable": false,
|
|
@@ -1019,6 +1119,9 @@ export class Toast {
|
|
|
1019
1119
|
static get elementRef() { return "el"; }
|
|
1020
1120
|
static get watchers() {
|
|
1021
1121
|
return [{
|
|
1122
|
+
"propName": "swipeGesture",
|
|
1123
|
+
"methodName": "swipeGestureChanged"
|
|
1124
|
+
}, {
|
|
1022
1125
|
"propName": "isOpen",
|
|
1023
1126
|
"methodName": "onIsOpenChange"
|
|
1024
1127
|
}, {
|
|
@@ -189,6 +189,16 @@
|
|
|
189
189
|
}
|
|
190
190
|
}
|
|
191
191
|
|
|
192
|
+
.toast-wrapper.toast-top {
|
|
193
|
+
transform: translate3d(0, -100%, 0);
|
|
194
|
+
top: 0;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.toast-wrapper.toast-bottom {
|
|
198
|
+
transform: translate3d(0, 100%, 0);
|
|
199
|
+
bottom: 0;
|
|
200
|
+
}
|
|
201
|
+
|
|
192
202
|
.toast-container {
|
|
193
203
|
display: flex;
|
|
194
204
|
align-items: center;
|
|
@@ -37,6 +37,18 @@ describe('toggle', () => {
|
|
|
37
37
|
expect(t.enableOnOffLabels).toBe(true);
|
|
38
38
|
});
|
|
39
39
|
});
|
|
40
|
+
describe('shadow parts', () => {
|
|
41
|
+
it('should have shadow parts', async () => {
|
|
42
|
+
const page = await newSpecPage({
|
|
43
|
+
components: [Toggle],
|
|
44
|
+
html: `<ion-toggle>Label</ion-toggle>`,
|
|
45
|
+
});
|
|
46
|
+
const toggle = page.body.querySelector('ion-toggle');
|
|
47
|
+
expect(toggle).toHaveShadowPart('label');
|
|
48
|
+
expect(toggle).toHaveShadowPart('track');
|
|
49
|
+
expect(toggle).toHaveShadowPart('handle');
|
|
50
|
+
});
|
|
51
|
+
});
|
|
40
52
|
});
|
|
41
53
|
describe('ion-toggle: disabled', () => {
|
|
42
54
|
it('clicking disabled toggle should not toggle checked state', async () => {
|
|
@@ -184,12 +184,6 @@ input {
|
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
.label-text-wrapper {
|
|
187
|
-
/**
|
|
188
|
-
* This ensures that double tapping this text
|
|
189
|
-
* clicks the <label> and focuses the input
|
|
190
|
-
* when a screen reader is enabled.
|
|
191
|
-
*/
|
|
192
|
-
pointer-events: none;
|
|
193
187
|
text-overflow: ellipsis;
|
|
194
188
|
white-space: nowrap;
|
|
195
189
|
overflow: hidden;
|
|
@@ -18,6 +18,7 @@ import { getIonMode } from "../../global/ionic-global";
|
|
|
18
18
|
*
|
|
19
19
|
* @part track - The background track of the toggle.
|
|
20
20
|
* @part handle - The toggle handle, or knob, used to change the checked state.
|
|
21
|
+
* @part label - The label text describing the toggle.
|
|
21
22
|
*/
|
|
22
23
|
export class Toggle {
|
|
23
24
|
constructor() {
|
|
@@ -123,6 +124,8 @@ export class Toggle {
|
|
|
123
124
|
if (this.legacyFormController.hasLegacyControl()) {
|
|
124
125
|
this.ionStyle.emit({
|
|
125
126
|
'interactive-disabled': this.disabled,
|
|
127
|
+
// TODO(FW-2990): remove this
|
|
128
|
+
legacy: !!this.legacy,
|
|
126
129
|
});
|
|
127
130
|
}
|
|
128
131
|
}
|
|
@@ -190,7 +193,7 @@ export class Toggle {
|
|
|
190
193
|
}) }, h("label", { class: "toggle-wrapper" }, h("input", Object.assign({ type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, this.inheritedAttributes)), h("div", { class: {
|
|
191
194
|
'label-text-wrapper': true,
|
|
192
195
|
'label-text-wrapper-hidden': !this.hasLabel,
|
|
193
|
-
} }, h("slot", null)), h("div", { class: "native-wrapper" }, this.renderToggleControl()))));
|
|
196
|
+
}, part: "label" }, h("slot", null)), h("div", { class: "native-wrapper" }, this.renderToggleControl()))));
|
|
194
197
|
}
|
|
195
198
|
renderLegacyToggle() {
|
|
196
199
|
if (!this.hasLoggedDeprecationWarning) {
|
|
@@ -184,12 +184,6 @@ input {
|
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
.label-text-wrapper {
|
|
187
|
-
/**
|
|
188
|
-
* This ensures that double tapping this text
|
|
189
|
-
* clicks the <label> and focuses the input
|
|
190
|
-
* when a screen reader is enabled.
|
|
191
|
-
*/
|
|
192
|
-
pointer-events: none;
|
|
193
187
|
text-overflow: ellipsis;
|
|
194
188
|
white-space: nowrap;
|
|
195
189
|
overflow: hidden;
|
|
@@ -463,6 +463,16 @@ export const createAnimation = (animationId) => {
|
|
|
463
463
|
}
|
|
464
464
|
}
|
|
465
465
|
});
|
|
466
|
+
/**
|
|
467
|
+
* Clean up any value coercion before
|
|
468
|
+
* the user callbacks fire otherwise
|
|
469
|
+
* they may get stale values. For example,
|
|
470
|
+
* if someone calls progressStart(0) the
|
|
471
|
+
* animation may still be reversed.
|
|
472
|
+
*/
|
|
473
|
+
forceDurationValue = undefined;
|
|
474
|
+
forceDirectionValue = undefined;
|
|
475
|
+
forceDelayValue = undefined;
|
|
466
476
|
onFinishCallbacks.forEach((onFinishCallback) => {
|
|
467
477
|
return onFinishCallback.c(currentStep, ani);
|
|
468
478
|
});
|
|
@@ -667,17 +677,8 @@ export const createAnimation = (animationId) => {
|
|
|
667
677
|
update(false, false);
|
|
668
678
|
}
|
|
669
679
|
}
|
|
670
|
-
if (playTo !== undefined) {
|
|
671
|
-
|
|
672
|
-
forceDurationValue = undefined;
|
|
673
|
-
forceDirectionValue = undefined;
|
|
674
|
-
forceDelayValue = undefined;
|
|
675
|
-
}, {
|
|
676
|
-
oneTimeCallback: true,
|
|
677
|
-
});
|
|
678
|
-
if (!parentAnimation) {
|
|
679
|
-
play();
|
|
680
|
-
}
|
|
680
|
+
if (playTo !== undefined && !parentAnimation) {
|
|
681
|
+
play();
|
|
681
682
|
}
|
|
682
683
|
return ani;
|
|
683
684
|
};
|
|
@@ -5,6 +5,22 @@ import { createAnimation } from "../animation";
|
|
|
5
5
|
import { processKeyframes } from "../animation-utils";
|
|
6
6
|
import { getTimeGivenProgression } from "../cubic-bezier";
|
|
7
7
|
describe('Animation Class', () => {
|
|
8
|
+
describe('progressEnd callbacks', () => {
|
|
9
|
+
test('coerced state should be reset before onFinish runs', (done) => {
|
|
10
|
+
const el = document.createElement('div');
|
|
11
|
+
const animation = createAnimation()
|
|
12
|
+
.addElement(el)
|
|
13
|
+
.fromTo('transform', 'translateX(0px)', 'translateX(100px)')
|
|
14
|
+
.duration(50);
|
|
15
|
+
animation
|
|
16
|
+
.onFinish(() => {
|
|
17
|
+
expect(animation.getDirection()).toBe('normal');
|
|
18
|
+
expect(animation.getDuration()).toBe(50);
|
|
19
|
+
done();
|
|
20
|
+
})
|
|
21
|
+
.progressEnd(0, 0.5, 10);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
8
24
|
describe('play()', () => {
|
|
9
25
|
it('should resolve when the animation is cancelled', async () => {
|
|
10
26
|
// Tell Jest to expect 1 assertion for async code
|
|
@@ -1,27 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
/**
|
|
5
|
-
* When accessing the document or window, it is important
|
|
6
|
-
* to account for SSR applications where the
|
|
7
|
-
* window is not available. Code that accesses
|
|
8
|
-
* window when it is not available will crash.
|
|
9
|
-
* Even checking if `window === undefined` will cause
|
|
10
|
-
* apps to crash in SSR.
|
|
11
|
-
*
|
|
12
|
-
* Use win below to access an SSR-safe version
|
|
13
|
-
* of the window.
|
|
14
|
-
*
|
|
15
|
-
* Example 1:
|
|
16
|
-
* Before:
|
|
17
|
-
* if (window.innerWidth > 768) { ... }
|
|
18
|
-
*
|
|
19
|
-
* After:
|
|
20
|
-
* import { win } from 'path/to/this/file';
|
|
21
|
-
* if (win?.innerWidth > 768) { ... }
|
|
22
|
-
*
|
|
23
|
-
* Note: Code inside of this if-block will
|
|
24
|
-
* not run in an SSR environment.
|
|
25
|
-
*/
|
|
26
4
|
export const win = typeof window !== 'undefined' ? window : undefined;
|
|
27
5
|
export const doc = typeof document !== 'undefined' ? document : undefined;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Uses the compareWith param to compare two values to determine if they are equal.
|
|
6
|
+
*
|
|
7
|
+
* @param currentValue The current value of the control.
|
|
8
|
+
* @param compareValue The value to compare against.
|
|
9
|
+
* @param compareWith The function or property name to use to compare values.
|
|
10
|
+
*/
|
|
11
|
+
export const compareOptions = (currentValue, compareValue, compareWith) => {
|
|
12
|
+
if (typeof compareWith === 'function') {
|
|
13
|
+
return compareWith(currentValue, compareValue);
|
|
14
|
+
}
|
|
15
|
+
else if (typeof compareWith === 'string') {
|
|
16
|
+
return currentValue[compareWith] === compareValue[compareWith];
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
return Array.isArray(compareValue) ? compareValue.includes(currentValue) : currentValue === compareValue;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Compares a value against the current value(s) to determine if it is selected.
|
|
24
|
+
*
|
|
25
|
+
* @param currentValue The current value of the control.
|
|
26
|
+
* @param compareValue The value to compare against.
|
|
27
|
+
* @param compareWith The function or property name to use to compare values.
|
|
28
|
+
*/
|
|
29
|
+
export const isOptionSelected = (currentValue, compareValue, compareWith) => {
|
|
30
|
+
if (currentValue === undefined) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
if (Array.isArray(currentValue)) {
|
|
34
|
+
return currentValue.some((val) => compareOptions(val, compareValue, compareWith));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return compareOptions(currentValue, compareValue, compareWith);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
+
import { doc } from "../browser/index";
|
|
4
5
|
import { findClosestIonContent } from "../content";
|
|
5
6
|
import { componentOnReady } from "../helpers";
|
|
6
7
|
import { Keyboard } from "../native/keyboard";
|
|
@@ -11,7 +12,13 @@ const INPUT_BLURRING = true;
|
|
|
11
12
|
const SCROLL_ASSIST = true;
|
|
12
13
|
const HIDE_CARET = true;
|
|
13
14
|
export const startInputShims = async (config, platform) => {
|
|
14
|
-
|
|
15
|
+
/**
|
|
16
|
+
* If doc is undefined then we are in an SSR environment
|
|
17
|
+
* where input shims do not apply.
|
|
18
|
+
*/
|
|
19
|
+
if (doc === undefined) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
15
22
|
const isIOS = platform === 'ios';
|
|
16
23
|
const isAndroid = platform === 'android';
|
|
17
24
|
/**
|
|
@@ -90,11 +97,10 @@ export const startInputShims = async (config, platform) => {
|
|
|
90
97
|
for (const input of inputs) {
|
|
91
98
|
registerInput(input);
|
|
92
99
|
}
|
|
93
|
-
|
|
94
|
-
doc.addEventListener('ionInputDidLoad', ((ev) => {
|
|
100
|
+
doc.addEventListener('ionInputDidLoad', (ev) => {
|
|
95
101
|
registerInput(ev.detail);
|
|
96
|
-
})
|
|
97
|
-
doc.addEventListener('ionInputDidUnload', (
|
|
102
|
+
});
|
|
103
|
+
doc.addEventListener('ionInputDidUnload', (ev) => {
|
|
98
104
|
unregisterInput(ev.detail);
|
|
99
|
-
})
|
|
105
|
+
});
|
|
100
106
|
};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { doc } from "../browser/index";
|
|
5
5
|
import { MENU_BACK_BUTTON_PRIORITY } from "../hardware-back-button";
|
|
6
|
+
import { printIonWarning } from "../logging/index";
|
|
6
7
|
import { componentOnReady } from "../helpers";
|
|
7
8
|
import { menuOverlayAnimation } from "./animations/overlay";
|
|
8
9
|
import { menuPushAnimation } from "./animations/push";
|
|
@@ -184,17 +185,14 @@ const createMenuController = () => {
|
|
|
184
185
|
registerAnimation('reveal', menuRevealAnimation);
|
|
185
186
|
registerAnimation('push', menuPushAnimation);
|
|
186
187
|
registerAnimation('overlay', menuOverlayAnimation);
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
}
|
|
188
|
+
doc === null || doc === void 0 ? void 0 : doc.addEventListener('ionBackButton', (ev) => {
|
|
189
|
+
const openMenu = _getOpenSync();
|
|
190
|
+
if (openMenu) {
|
|
191
|
+
ev.detail.register(MENU_BACK_BUTTON_PRIORITY, () => {
|
|
192
|
+
return openMenu.close();
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
});
|
|
198
196
|
return {
|
|
199
197
|
registerAnimation,
|
|
200
198
|
get,
|
|
@@ -9,13 +9,14 @@ import { raf } from "./helpers";
|
|
|
9
9
|
* This is not needed for components using native slots in the Shadow DOM.
|
|
10
10
|
* @internal
|
|
11
11
|
* @param el The host element to observe
|
|
12
|
-
* @param slotName mutationCallback will fire when nodes on
|
|
12
|
+
* @param slotName mutationCallback will fire when nodes on these slot(s) change
|
|
13
13
|
* @param mutationCallback The callback to fire whenever the slotted content changes
|
|
14
14
|
*/
|
|
15
15
|
export const createSlotMutationController = (el, slotName, mutationCallback) => {
|
|
16
16
|
let hostMutationObserver;
|
|
17
17
|
let slottedContentMutationObserver;
|
|
18
18
|
if (win !== undefined && 'MutationObserver' in win) {
|
|
19
|
+
const slots = Array.isArray(slotName) ? slotName : [slotName];
|
|
19
20
|
hostMutationObserver = new MutationObserver((entries) => {
|
|
20
21
|
for (const entry of entries) {
|
|
21
22
|
for (const node of entry.addedNodes) {
|
|
@@ -23,7 +24,7 @@ export const createSlotMutationController = (el, slotName, mutationCallback) =>
|
|
|
23
24
|
* Check to see if the added node
|
|
24
25
|
* is our slotted content.
|
|
25
26
|
*/
|
|
26
|
-
if (node.nodeType === Node.ELEMENT_NODE && node.slot
|
|
27
|
+
if (node.nodeType === Node.ELEMENT_NODE && slots.includes(node.slot)) {
|
|
27
28
|
/**
|
|
28
29
|
* If so, we want to watch the slotted
|
|
29
30
|
* content itself for changes. This lets us
|