@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
|
@@ -63,17 +63,24 @@
|
|
|
63
63
|
font-family: var(--ion-font-family, inherit);
|
|
64
64
|
font-size: inherit;
|
|
65
65
|
text-overflow: ellipsis;
|
|
66
|
+
box-sizing: border-box;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
:host-context(.item-legacy) {
|
|
66
70
|
white-space: nowrap;
|
|
67
71
|
overflow: hidden;
|
|
68
|
-
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
:host-context(.item:not(.item-input):not(.item-legacy)) {
|
|
75
|
+
flex-grow: 1;
|
|
69
76
|
}
|
|
70
77
|
|
|
71
78
|
:host(.ion-color) {
|
|
72
79
|
color: var(--ion-color-base);
|
|
73
80
|
}
|
|
74
81
|
|
|
75
|
-
:host(.ion-text-
|
|
76
|
-
|
|
82
|
+
:host(.ion-text-nowrap) {
|
|
83
|
+
overflow: hidden;
|
|
77
84
|
}
|
|
78
85
|
|
|
79
86
|
:host-context(.item-interactive-disabled:not(.item-multiple-inputs)) {
|
|
@@ -92,6 +99,10 @@
|
|
|
92
99
|
align-self: baseline;
|
|
93
100
|
}
|
|
94
101
|
|
|
102
|
+
:host-context(.item-skeleton-text) {
|
|
103
|
+
overflow: hidden;
|
|
104
|
+
}
|
|
105
|
+
|
|
95
106
|
:host(.label-fixed) {
|
|
96
107
|
flex: 0 0 100px;
|
|
97
108
|
width: 100px;
|
|
@@ -63,17 +63,24 @@
|
|
|
63
63
|
font-family: var(--ion-font-family, inherit);
|
|
64
64
|
font-size: inherit;
|
|
65
65
|
text-overflow: ellipsis;
|
|
66
|
+
box-sizing: border-box;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
:host-context(.item-legacy) {
|
|
66
70
|
white-space: nowrap;
|
|
67
71
|
overflow: hidden;
|
|
68
|
-
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
:host-context(.item:not(.item-input):not(.item-legacy)) {
|
|
75
|
+
flex-grow: 1;
|
|
69
76
|
}
|
|
70
77
|
|
|
71
78
|
:host(.ion-color) {
|
|
72
79
|
color: var(--ion-color-base);
|
|
73
80
|
}
|
|
74
81
|
|
|
75
|
-
:host(.ion-text-
|
|
76
|
-
|
|
82
|
+
:host(.ion-text-nowrap) {
|
|
83
|
+
overflow: hidden;
|
|
77
84
|
}
|
|
78
85
|
|
|
79
86
|
:host-context(.item-interactive-disabled:not(.item-multiple-inputs)) {
|
|
@@ -92,6 +99,10 @@
|
|
|
92
99
|
align-self: baseline;
|
|
93
100
|
}
|
|
94
101
|
|
|
102
|
+
:host-context(.item-skeleton-text) {
|
|
103
|
+
overflow: hidden;
|
|
104
|
+
}
|
|
105
|
+
|
|
95
106
|
:host(.label-fixed) {
|
|
96
107
|
flex: 0 0 100px;
|
|
97
108
|
width: 100px;
|
|
@@ -5,6 +5,7 @@ import { getTimeGivenProgression } from "../../../utils/animation/cubic-bezier";
|
|
|
5
5
|
import { isIonContent, findClosestIonContent, disableContentScrollY, resetContentScrollY } from "../../../utils/content/index";
|
|
6
6
|
import { createGesture } from "../../../utils/gesture/index";
|
|
7
7
|
import { clamp, getElementRoot } from "../../../utils/helpers";
|
|
8
|
+
import { OVERLAY_GESTURE_PRIORITY } from "../../../utils/overlays";
|
|
8
9
|
import { setCardStatusBarDark, setCardStatusBarDefault } from "../utils";
|
|
9
10
|
import { calculateSpringStep, handleCanDismiss } from "./utils";
|
|
10
11
|
// Defaults for the card swipe animation
|
|
@@ -250,7 +251,7 @@ export const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismi
|
|
|
250
251
|
const gesture = createGesture({
|
|
251
252
|
el,
|
|
252
253
|
gestureName: 'modalSwipeToClose',
|
|
253
|
-
gesturePriority:
|
|
254
|
+
gesturePriority: OVERLAY_GESTURE_PRIORITY,
|
|
254
255
|
direction: 'y',
|
|
255
256
|
threshold: 10,
|
|
256
257
|
canStart,
|
|
@@ -48,5 +48,48 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
|
48
48
|
const note = page.locator('ion-note');
|
|
49
49
|
await expect(note).toHaveScreenshot(screenshot(`note-item-divider-scale`));
|
|
50
50
|
});
|
|
51
|
+
test('should wrap label to the next line without truncating', async ({ page }) => {
|
|
52
|
+
await page.setContent(`
|
|
53
|
+
<style>
|
|
54
|
+
html {
|
|
55
|
+
font-size: 310%;
|
|
56
|
+
}
|
|
57
|
+
</style>
|
|
58
|
+
|
|
59
|
+
<ion-list>
|
|
60
|
+
<ion-item>
|
|
61
|
+
<ion-note slot="start">Really really long note</ion-note>
|
|
62
|
+
<ion-label>Label</ion-label>
|
|
63
|
+
</ion-item>
|
|
64
|
+
|
|
65
|
+
<ion-item>
|
|
66
|
+
<ion-label>Label</ion-label>
|
|
67
|
+
<ion-note slot="end">Really really long note</ion-note>
|
|
68
|
+
</ion-item>
|
|
69
|
+
|
|
70
|
+
<ion-item>
|
|
71
|
+
<ion-note slot="start">Note</ion-note>
|
|
72
|
+
<ion-label>Really really long label</ion-label>
|
|
73
|
+
</ion-item>
|
|
74
|
+
|
|
75
|
+
<ion-item>
|
|
76
|
+
<ion-label>Really really long label</ion-label>
|
|
77
|
+
<ion-note slot="end">Note</ion-note>
|
|
78
|
+
</ion-item>
|
|
79
|
+
|
|
80
|
+
<ion-item>
|
|
81
|
+
<ion-note slot="start">Really really long note</ion-note>
|
|
82
|
+
<ion-label>Really really long label</ion-label>
|
|
83
|
+
</ion-item>
|
|
84
|
+
|
|
85
|
+
<ion-item>
|
|
86
|
+
<ion-label>Really really long label</ion-label>
|
|
87
|
+
<ion-note slot="end">Really really long note</ion-note>
|
|
88
|
+
</ion-item>
|
|
89
|
+
</ion-list>
|
|
90
|
+
`, config);
|
|
91
|
+
const list = page.locator('ion-list');
|
|
92
|
+
await expect(list).toHaveScreenshot(screenshot(`note-wrapping-label-scale`));
|
|
93
|
+
});
|
|
51
94
|
});
|
|
52
95
|
});
|
|
@@ -186,12 +186,6 @@ input {
|
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
.label-text-wrapper {
|
|
189
|
-
/**
|
|
190
|
-
* This ensures that double tapping this text
|
|
191
|
-
* clicks the <label> and focuses the radio
|
|
192
|
-
* when a screen reader is enabled.
|
|
193
|
-
*/
|
|
194
|
-
pointer-events: none;
|
|
195
189
|
text-overflow: ellipsis;
|
|
196
190
|
white-space: nowrap;
|
|
197
191
|
overflow: hidden;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { Host, h } from "@stencil/core";
|
|
5
|
-
import { createLegacyFormController } from "../../utils/forms/index";
|
|
5
|
+
import { createLegacyFormController, isOptionSelected } from "../../utils/forms/index";
|
|
6
6
|
import { addEventListener, getAriaLabel, removeEventListener } from "../../utils/helpers";
|
|
7
7
|
import { printIonWarning } from "../../utils/logging/index";
|
|
8
8
|
import { createColorClasses, hostContext } from "../../utils/theme";
|
|
@@ -13,6 +13,7 @@ import { getIonMode } from "../../global/ionic-global";
|
|
|
13
13
|
* @slot - The label text to associate with the radio. Use the "labelPlacement" property to control where the label is placed relative to the radio.
|
|
14
14
|
*
|
|
15
15
|
* @part container - The container for the radio mark.
|
|
16
|
+
* @part label - The label text describing the radio.
|
|
16
17
|
* @part mark - The checkmark or dot used to indicate the checked state.
|
|
17
18
|
*/
|
|
18
19
|
export class Radio {
|
|
@@ -23,7 +24,8 @@ export class Radio {
|
|
|
23
24
|
this.hasLoggedDeprecationWarning = false;
|
|
24
25
|
this.updateState = () => {
|
|
25
26
|
if (this.radioGroup) {
|
|
26
|
-
|
|
27
|
+
const { compareWith, value: radioGroupValue } = this.radioGroup;
|
|
28
|
+
this.checked = isOptionSelected(radioGroupValue, this.value, compareWith);
|
|
27
29
|
}
|
|
28
30
|
};
|
|
29
31
|
this.onClick = () => {
|
|
@@ -120,6 +122,8 @@ export class Radio {
|
|
|
120
122
|
emitStyle() {
|
|
121
123
|
const style = {
|
|
122
124
|
'interactive-disabled': this.disabled,
|
|
125
|
+
// TODO(FW-3125): remove this
|
|
126
|
+
legacy: !!this.legacy,
|
|
123
127
|
};
|
|
124
128
|
if (this.legacyFormController.hasLegacyControl()) {
|
|
125
129
|
style['radio-checked'] = this.checked;
|
|
@@ -154,7 +158,7 @@ export class Radio {
|
|
|
154
158
|
}), role: "radio", "aria-checked": checked ? 'true' : 'false', "aria-disabled": disabled ? 'true' : null, tabindex: buttonTabindex }, h("label", { class: "radio-wrapper" }, h("div", { class: {
|
|
155
159
|
'label-text-wrapper': true,
|
|
156
160
|
'label-text-wrapper-hidden': !hasLabel,
|
|
157
|
-
} }, h("slot", null)), h("div", { class: "native-wrapper" }, this.renderRadioControl()))));
|
|
161
|
+
}, part: "label" }, h("slot", null)), h("div", { class: "native-wrapper" }, this.renderRadioControl()))));
|
|
158
162
|
}
|
|
159
163
|
renderLegacyRadio() {
|
|
160
164
|
if (!this.hasLoggedDeprecationWarning) {
|
|
@@ -186,12 +186,6 @@ input {
|
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
.label-text-wrapper {
|
|
189
|
-
/**
|
|
190
|
-
* This ensures that double tapping this text
|
|
191
|
-
* clicks the <label> and focuses the radio
|
|
192
|
-
* when a screen reader is enabled.
|
|
193
|
-
*/
|
|
194
|
-
pointer-events: none;
|
|
195
189
|
text-overflow: ellipsis;
|
|
196
190
|
white-space: nowrap;
|
|
197
191
|
overflow: hidden;
|
|
@@ -25,6 +25,20 @@ describe('ion-radio', () => {
|
|
|
25
25
|
await page.waitForChanges();
|
|
26
26
|
expect(radio.classList.contains('radio-checked')).toBe(true);
|
|
27
27
|
});
|
|
28
|
+
it('should render the radio with shadow parts', async () => {
|
|
29
|
+
const page = await newSpecPage({
|
|
30
|
+
components: [Radio, RadioGroup],
|
|
31
|
+
html: `
|
|
32
|
+
<ion-radio-group>
|
|
33
|
+
<ion-radio value="value"></ion-radio>
|
|
34
|
+
</ion-radio-group>
|
|
35
|
+
`,
|
|
36
|
+
});
|
|
37
|
+
const radio = page.body.querySelector('ion-radio');
|
|
38
|
+
expect(radio).toHaveShadowPart('container');
|
|
39
|
+
expect(radio).toHaveShadowPart('label');
|
|
40
|
+
expect(radio).toHaveShadowPart('mark');
|
|
41
|
+
});
|
|
28
42
|
});
|
|
29
43
|
describe('ion-radio: disabled', () => {
|
|
30
44
|
it('clicking disabled radio should not set checked state', async () => {
|
|
@@ -47,6 +47,7 @@ export class RadioGroup {
|
|
|
47
47
|
}
|
|
48
48
|
};
|
|
49
49
|
this.allowEmptySelection = false;
|
|
50
|
+
this.compareWith = undefined;
|
|
50
51
|
this.name = this.inputId;
|
|
51
52
|
this.value = undefined;
|
|
52
53
|
}
|
|
@@ -167,6 +168,29 @@ export class RadioGroup {
|
|
|
167
168
|
"reflect": false,
|
|
168
169
|
"defaultValue": "false"
|
|
169
170
|
},
|
|
171
|
+
"compareWith": {
|
|
172
|
+
"type": "string",
|
|
173
|
+
"mutable": false,
|
|
174
|
+
"complexType": {
|
|
175
|
+
"original": "string | RadioGroupCompareFn | null",
|
|
176
|
+
"resolved": "((currentValue: any, compareValue: any) => boolean) | null | string | undefined",
|
|
177
|
+
"references": {
|
|
178
|
+
"RadioGroupCompareFn": {
|
|
179
|
+
"location": "import",
|
|
180
|
+
"path": "./radio-group-interface",
|
|
181
|
+
"id": "src/components/radio-group/radio-group-interface.ts::RadioGroupCompareFn"
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
"required": false,
|
|
186
|
+
"optional": true,
|
|
187
|
+
"docs": {
|
|
188
|
+
"tags": [],
|
|
189
|
+
"text": "This property allows developers to specify a custom function or property\nname for comparing objects when determining the selected option in the\nion-radio-group. When not specified, the default behavior will use strict\nequality (===) for comparison."
|
|
190
|
+
},
|
|
191
|
+
"attribute": "compare-with",
|
|
192
|
+
"reflect": false
|
|
193
|
+
},
|
|
170
194
|
"name": {
|
|
171
195
|
"type": "string",
|
|
172
196
|
"mutable": false,
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { h } from "@stencil/core";
|
|
5
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
6
|
+
import { Radio } from "../../radio/radio";
|
|
7
|
+
import { RadioGroup } from "../radio-group";
|
|
8
|
+
describe('ion-radio-group', () => {
|
|
9
|
+
it('should correctly set value when using compareWith string', async () => {
|
|
10
|
+
const page = await newSpecPage({
|
|
11
|
+
components: [Radio, RadioGroup],
|
|
12
|
+
template: () => (h("ion-radio-group", { compareWith: "value", value: { label: 'Blue', value: 'blue' } }, h("ion-radio", { value: { label: 'Red', value: 'red' } }, "Red"), h("ion-radio", { value: { label: 'Blue', value: 'blue' } }, "Blue"), h("ion-radio", { value: { label: 'Green', value: 'green' } }, "Green"))),
|
|
13
|
+
});
|
|
14
|
+
const radioGroup = page.body.querySelector('ion-radio-group');
|
|
15
|
+
const radios = document.querySelectorAll('ion-radio');
|
|
16
|
+
await radios[2].click();
|
|
17
|
+
await page.waitForChanges();
|
|
18
|
+
expect(radios[2].getAttribute('aria-checked')).toBe('true');
|
|
19
|
+
expect(radioGroup.value).toEqual({
|
|
20
|
+
label: 'Green',
|
|
21
|
+
value: 'green',
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
it('should correctly set value when using compareWith function', async () => {
|
|
25
|
+
const page = await newSpecPage({
|
|
26
|
+
components: [Radio, RadioGroup],
|
|
27
|
+
template: () => (h("ion-radio-group", { value: { label: 'Blue', value: 'blue' } }, h("ion-radio", { value: { label: 'Red', value: 'red' } }, "Red"), h("ion-radio", { value: { label: 'Blue', value: 'blue' } }, "Blue"), h("ion-radio", { value: { label: 'Green', value: 'green' } }, "Green"))),
|
|
28
|
+
});
|
|
29
|
+
const radioGroup = page.body.querySelector('ion-radio-group');
|
|
30
|
+
const radios = document.querySelectorAll('ion-radio');
|
|
31
|
+
radioGroup.compareWith = (a, b) => a.value === b.value;
|
|
32
|
+
await radios[2].click();
|
|
33
|
+
await page.waitForChanges();
|
|
34
|
+
expect(radios[2].getAttribute('aria-checked')).toBe('true');
|
|
35
|
+
expect(radioGroup.value).toEqual({
|
|
36
|
+
label: 'Green',
|
|
37
|
+
value: 'green',
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
it('should correctly set value when using compareWith null', async () => {
|
|
41
|
+
const page = await newSpecPage({
|
|
42
|
+
components: [RadioGroup, Radio],
|
|
43
|
+
template: () => (h("ion-radio-group", { compareWith: null, value: "blue" }, h("ion-radio", { value: "red" }, "Red"), h("br", null), h("ion-radio", { value: "blue" }, "Blue"), h("br", null), h("ion-radio", { value: "green" }, "Green"))),
|
|
44
|
+
});
|
|
45
|
+
const radioGroup = page.body.querySelector('ion-radio-group');
|
|
46
|
+
const radios = document.querySelectorAll('ion-radio');
|
|
47
|
+
await radios[2].click();
|
|
48
|
+
await page.waitForChanges();
|
|
49
|
+
expect(radios[2].getAttribute('aria-checked')).toBe('true');
|
|
50
|
+
expect(radioGroup.value).toEqual('green');
|
|
51
|
+
});
|
|
52
|
+
it('should work with different parameter types', async () => {
|
|
53
|
+
const page = await newSpecPage({
|
|
54
|
+
components: [Radio, RadioGroup],
|
|
55
|
+
template: () => (h("ion-radio-group", { value: 2 }, h("ion-radio", { value: 1 }, "Option #1"), h("ion-radio", { value: 2 }, "Option #2"), h("ion-radio", { value: 3 }, "Option #3"))),
|
|
56
|
+
});
|
|
57
|
+
const radioGroup = page.body.querySelector('ion-radio-group');
|
|
58
|
+
radioGroup.compareWith = (val1, val2) => {
|
|
59
|
+
// convert val1 to a number
|
|
60
|
+
return +val1 === val2;
|
|
61
|
+
};
|
|
62
|
+
const radios = document.querySelectorAll('ion-radio');
|
|
63
|
+
await expect(radios[1].getAttribute('aria-checked')).toBe('true');
|
|
64
|
+
await radios[2].click();
|
|
65
|
+
await page.waitForChanges();
|
|
66
|
+
expect(radios[2].getAttribute('aria-checked')).toBe('true');
|
|
67
|
+
expect(radioGroup.value).toEqual(3);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -325,12 +325,6 @@
|
|
|
325
325
|
* would not be able to see the range.
|
|
326
326
|
*/
|
|
327
327
|
max-width: 200px;
|
|
328
|
-
/**
|
|
329
|
-
* This ensures that double tapping this text
|
|
330
|
-
* clicks the <label> and focuses the range
|
|
331
|
-
* when a screen reader is enabled.
|
|
332
|
-
*/
|
|
333
|
-
pointer-events: none;
|
|
334
328
|
text-overflow: ellipsis;
|
|
335
329
|
white-space: nowrap;
|
|
336
330
|
overflow: hidden;
|
|
@@ -24,6 +24,7 @@ import { roundToMaxDecimalPlaces } from "../../utils/floating-point";
|
|
|
24
24
|
* @part knob - The handle that is used to drag the range.
|
|
25
25
|
* @part bar - The inactive part of the bar.
|
|
26
26
|
* @part bar-active - The active part of the bar.
|
|
27
|
+
* @part label - The label text describing the range.
|
|
27
28
|
*/
|
|
28
29
|
export class Range {
|
|
29
30
|
constructor() {
|
|
@@ -226,6 +227,8 @@ export class Range {
|
|
|
226
227
|
this.ionStyle.emit({
|
|
227
228
|
interactive: true,
|
|
228
229
|
'interactive-disabled': this.disabled,
|
|
230
|
+
// TODO(FW-2997): remove this
|
|
231
|
+
legacy: !!this.legacy,
|
|
229
232
|
});
|
|
230
233
|
}
|
|
231
234
|
}
|
|
@@ -414,7 +417,7 @@ Developers can dismiss this warning by removing their usage of the "legacy" prop
|
|
|
414
417
|
}) }, h("label", { class: "range-wrapper", id: "range-label" }, h("div", { class: {
|
|
415
418
|
'label-text-wrapper': true,
|
|
416
419
|
'label-text-wrapper-hidden': !hasLabel,
|
|
417
|
-
} }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { class: "native-wrapper" }, h("slot", { name: "start" }), this.renderRangeSlider(), h("slot", { name: "end" })))));
|
|
420
|
+
}, part: "label" }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { class: "native-wrapper" }, h("slot", { name: "start" }), this.renderRangeSlider(), h("slot", { name: "end" })))));
|
|
418
421
|
}
|
|
419
422
|
get hasLabel() {
|
|
420
423
|
return this.label !== undefined || this.el.querySelector('[slot="label"]') !== null;
|
|
@@ -325,12 +325,6 @@
|
|
|
325
325
|
* would not be able to see the range.
|
|
326
326
|
*/
|
|
327
327
|
max-width: 200px;
|
|
328
|
-
/**
|
|
329
|
-
* This ensures that double tapping this text
|
|
330
|
-
* clicks the <label> and focuses the range
|
|
331
|
-
* when a screen reader is enabled.
|
|
332
|
-
*/
|
|
333
|
-
pointer-events: none;
|
|
334
328
|
text-overflow: ellipsis;
|
|
335
329
|
white-space: nowrap;
|
|
336
330
|
overflow: hidden;
|
|
@@ -202,4 +202,20 @@ describe('range: item adjustments', () => {
|
|
|
202
202
|
expect(range.classList.contains('range-item-start-adjustment')).toBe(false);
|
|
203
203
|
expect(range.classList.contains('range-item-end-adjustment')).toBe(false);
|
|
204
204
|
});
|
|
205
|
+
describe('shadow parts', () => {
|
|
206
|
+
it('should have shadow parts', async () => {
|
|
207
|
+
const page = await newSpecPage({
|
|
208
|
+
components: [Range],
|
|
209
|
+
html: `<ion-range pin="true" snaps="true" value="50" label="Label"></ion-range>`,
|
|
210
|
+
});
|
|
211
|
+
const range = page.body.querySelector('ion-range');
|
|
212
|
+
expect(range).toHaveShadowPart('label');
|
|
213
|
+
expect(range).toHaveShadowPart('pin');
|
|
214
|
+
expect(range).toHaveShadowPart('knob');
|
|
215
|
+
expect(range).toHaveShadowPart('bar');
|
|
216
|
+
expect(range).toHaveShadowPart('bar-active');
|
|
217
|
+
expect(range).toHaveShadowPart('tick');
|
|
218
|
+
expect(range).toHaveShadowPart('tick-active');
|
|
219
|
+
});
|
|
220
|
+
});
|
|
205
221
|
});
|
|
@@ -132,6 +132,10 @@
|
|
|
132
132
|
overflow: hidden;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
+
:host(.in-item:not(.legacy-select)) {
|
|
136
|
+
flex: 1 1 0;
|
|
137
|
+
}
|
|
138
|
+
|
|
135
139
|
:host(.in-item.legacy-select) {
|
|
136
140
|
position: static;
|
|
137
141
|
max-width: 45%;
|
|
@@ -232,6 +236,12 @@ button {
|
|
|
232
236
|
margin-top: 0;
|
|
233
237
|
margin-bottom: 0;
|
|
234
238
|
position: relative;
|
|
239
|
+
/**
|
|
240
|
+
* Prevent the icon from shrinking when the label and/or
|
|
241
|
+
* selected item text is long enough to fill the rest of
|
|
242
|
+
* the container.
|
|
243
|
+
*/
|
|
244
|
+
flex-shrink: 0;
|
|
235
245
|
}
|
|
236
246
|
|
|
237
247
|
/**
|
|
@@ -315,6 +325,23 @@ button {
|
|
|
315
325
|
transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
316
326
|
}
|
|
317
327
|
|
|
328
|
+
.select-wrapper-inner {
|
|
329
|
+
display: flex;
|
|
330
|
+
align-items: center;
|
|
331
|
+
overflow: hidden;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
:host(.select-label-placement-stacked) .select-wrapper-inner,
|
|
335
|
+
:host(.select-label-placement-floating) .select-wrapper-inner {
|
|
336
|
+
/**
|
|
337
|
+
* When using a stacked/floating label, the inner wrapper is
|
|
338
|
+
* stacked vertically under the label container. This line
|
|
339
|
+
* ensures that the inner wrapper fills all the remaining height
|
|
340
|
+
* of the component.
|
|
341
|
+
*/
|
|
342
|
+
flex-grow: 1;
|
|
343
|
+
}
|
|
344
|
+
|
|
318
345
|
:host(.ion-touched.ion-invalid) {
|
|
319
346
|
--highlight-color: var(--highlight-color-invalid);
|
|
320
347
|
}
|
|
@@ -555,11 +582,23 @@ button {
|
|
|
555
582
|
* The placeholder should be hidden when the label
|
|
556
583
|
* is on top of the select. This prevents the label
|
|
557
584
|
* from overlapping any placeholder value.
|
|
585
|
+
*
|
|
586
|
+
* TODO(FW-5592): Remove :not(.label-floating) piece
|
|
558
587
|
*/
|
|
559
|
-
:host(.select-label-placement-floating) .native-wrapper .select-placeholder {
|
|
588
|
+
:host(.select-label-placement-floating:not(.label-floating)) .native-wrapper .select-placeholder {
|
|
560
589
|
opacity: 0;
|
|
561
590
|
}
|
|
562
591
|
|
|
592
|
+
/**
|
|
593
|
+
* We don't use .label-floating here because that would
|
|
594
|
+
* also include the case where the label is floating due
|
|
595
|
+
* to content in the start/end slot. We want the opacity
|
|
596
|
+
* to remain at the default in this case, since the select
|
|
597
|
+
* isn't being actively interacted with.
|
|
598
|
+
*
|
|
599
|
+
* TODO(FW-5592): Change entire selector to:
|
|
600
|
+
* :host(.label-floating.select-label-placement-floating) .native-wrapper .select-placeholder
|
|
601
|
+
*/
|
|
563
602
|
:host(.select-expanded.select-label-placement-floating) .native-wrapper .select-placeholder,
|
|
564
603
|
:host(.ion-focused.select-label-placement-floating) .native-wrapper .select-placeholder,
|
|
565
604
|
:host(.has-value.select-label-placement-floating) .native-wrapper .select-placeholder {
|
|
@@ -569,10 +608,7 @@ button {
|
|
|
569
608
|
/**
|
|
570
609
|
* This makes the label sit above the input.
|
|
571
610
|
*/
|
|
572
|
-
:host(.
|
|
573
|
-
:host(.select-expanded.select-label-placement-floating) .label-text-wrapper,
|
|
574
|
-
:host(.ion-focused.select-label-placement-floating) .label-text-wrapper,
|
|
575
|
-
:host(.has-value.select-label-placement-floating) .label-text-wrapper {
|
|
611
|
+
:host(.label-floating) .label-text-wrapper {
|
|
576
612
|
transform: translateY(50%) scale(0.75);
|
|
577
613
|
/**
|
|
578
614
|
* Label text should not extend
|
|
@@ -581,6 +617,23 @@ button {
|
|
|
581
617
|
max-width: calc(100% / 0.75);
|
|
582
618
|
}
|
|
583
619
|
|
|
620
|
+
::slotted([slot=start]), ::slotted([slot=end]) {
|
|
621
|
+
/**
|
|
622
|
+
* Prevent the slots from shrinking when the label and/or
|
|
623
|
+
* selected item text is long enough to fill the rest of
|
|
624
|
+
* the container.
|
|
625
|
+
*/
|
|
626
|
+
flex-shrink: 0;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
::slotted([slot=start]) {
|
|
630
|
+
margin-inline-end: 16px;
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
::slotted([slot=end]) {
|
|
634
|
+
margin-inline-start: 16px;
|
|
635
|
+
}
|
|
636
|
+
|
|
584
637
|
/**
|
|
585
638
|
* Convert a font size to a dynamic font size.
|
|
586
639
|
* Fonts that participate in Dynamic Type should use
|
|
@@ -704,8 +757,8 @@ button {
|
|
|
704
757
|
color: var(--ion-color-step-650, #595959);
|
|
705
758
|
}
|
|
706
759
|
|
|
707
|
-
:host(.select-label-placement-stacked) .
|
|
708
|
-
:host(.select-label-placement-floating) .
|
|
760
|
+
:host(.select-label-placement-stacked) .select-wrapper-inner,
|
|
761
|
+
:host(.select-label-placement-floating) .select-wrapper-inner {
|
|
709
762
|
width: calc(100% - 1.125rem - 4px);
|
|
710
763
|
}
|
|
711
764
|
|