@ionic/core 7.5.7-dev.11701274462.156e6f06 → 7.5.7-dev.11701896424.13d40ac9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/animation.js +11 -12
- package/components/checkbox.js +0 -2
- package/components/data.js +64 -14
- package/components/index4.js +12 -10
- package/components/index5.js +22 -0
- package/components/input-shims.js +7 -12
- package/components/input.utils.js +2 -3
- package/components/ion-datetime.js +38 -19
- package/components/ion-input.js +8 -31
- package/components/ion-modal.js +2 -2
- package/components/ion-range.js +0 -2
- package/components/ion-select.js +29 -44
- package/components/ion-skeleton-text.js +1 -14
- package/components/ion-textarea.js +7 -30
- package/components/ion-toast.js +74 -419
- package/components/ion-toggle.js +0 -2
- package/components/item.js +2 -2
- package/components/label.js +2 -2
- package/components/overlays.js +1 -2
- package/components/picker-column-internal.js +7 -12
- package/components/radio-group.js +0 -2
- package/components/radio.js +2 -42
- package/dist/cjs/{animation-d101aa7a.js → animation-1083855c.js} +12 -13
- package/dist/cjs/{button-active-ba107e4e.js → button-active-af897e0e.js} +1 -1
- package/dist/cjs/{capacitor-f68447d3.js → capacitor-2ffba62a.js} +1 -1
- package/dist/cjs/{data-c8d21093.js → data-912a6f37.js} +64 -14
- package/dist/cjs/{haptic-a74c2767.js → haptic-678abc9f.js} +1 -1
- package/dist/cjs/index-306a7476.js +32 -0
- package/dist/cjs/{index-56d41f51.js → index-573877f3.js} +2 -2
- package/dist/cjs/{index-e9634bc9.js → index-9f379eaa.js} +1 -1
- package/dist/cjs/{index-4f0c67e1.js → index-d7561763.js} +13 -11
- package/dist/cjs/index.cjs.js +8 -8
- package/dist/cjs/{input-shims-3e3f35b9.js → input-shims-b0a75a01.js} +10 -15
- package/dist/cjs/{input.utils-bdb6953c.js → input.utils-0fe3097c.js} +3 -4
- package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -6
- package/dist/cjs/ion-alert.cjs.entry.js +6 -6
- package/dist/cjs/ion-app_8.cjs.entry.js +8 -8
- package/dist/cjs/ion-checkbox.cjs.entry.js +0 -2
- package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
- package/dist/cjs/ion-datetime_3.cjs.entry.js +44 -25
- package/dist/cjs/ion-input.cjs.entry.js +11 -34
- package/dist/cjs/ion-item_8.cjs.entry.js +4 -17
- package/dist/cjs/ion-loading.cjs.entry.js +3 -3
- package/dist/cjs/ion-menu_3.cjs.entry.js +5 -5
- package/dist/cjs/ion-modal.cjs.entry.js +8 -8
- package/dist/cjs/ion-nav_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-picker-column-internal.cjs.entry.js +10 -14
- package/dist/cjs/ion-popover.cjs.entry.js +4 -4
- package/dist/cjs/ion-radio_2.cjs.entry.js +1 -6
- package/dist/cjs/ion-range.cjs.entry.js +0 -2
- package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-select_3.cjs.entry.js +35 -51
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-textarea.cjs.entry.js +10 -33
- package/dist/cjs/ion-toast.cjs.entry.js +92 -434
- package/dist/cjs/ion-toggle.cjs.entry.js +3 -5
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/{ios.transition-f4caf640.js → ios.transition-ac909bc8.js} +3 -3
- package/dist/cjs/{keyboard-840107b3.js → keyboard-38f2bb7b.js} +3 -3
- package/dist/cjs/{keyboard-controller-019f42df.js → keyboard-controller-50beb83a.js} +2 -2
- package/dist/cjs/{keyboard-43df0428.js → keyboard-fd7db491.js} +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{md.transition-33331e93.js → md.transition-907af519.js} +3 -3
- package/dist/cjs/{notch-controller-c22d1344.js → notch-controller-f4f6af5d.js} +1 -1
- package/dist/cjs/{overlays-4d8897dc.js → overlays-2ffc5f27.js} +1 -3
- package/dist/collection/collection-manifest.json +2 -2
- package/dist/collection/components/checkbox/checkbox.js +0 -2
- package/dist/collection/components/datetime/datetime.ios.css +0 -1
- package/dist/collection/components/datetime/datetime.js +36 -17
- package/dist/collection/components/datetime/datetime.md.css +0 -1
- package/dist/collection/components/datetime/test/manipulation.spec.js +133 -1
- package/dist/collection/components/datetime/test/prefer-wheel/datetime.spec.js +27 -0
- package/dist/collection/components/datetime/utils/manipulation.js +65 -15
- package/dist/collection/components/input/input.ios.css +3 -10
- package/dist/collection/components/input/input.js +6 -31
- package/dist/collection/components/input/input.md.css +12 -13
- package/dist/collection/components/item/item.ios.css +3 -26
- package/dist/collection/components/item/item.md.css +3 -26
- package/dist/collection/components/item/test/basic/item.e2e.js +1 -1
- package/dist/collection/components/item/test/disabled/item.e2e.js +1 -0
- package/dist/collection/components/item/test/text/item.e2e.js +14 -0
- package/dist/collection/components/label/label.ios.css +3 -14
- package/dist/collection/components/label/label.md.css +3 -14
- package/dist/collection/components/modal/gestures/swipe-to-close.js +1 -2
- package/dist/collection/components/note/test/a11y/note.e2e.js +0 -43
- package/dist/collection/components/picker-column-internal/picker-column-internal.ios.css +3 -11
- package/dist/collection/components/picker-column-internal/picker-column-internal.js +5 -27
- package/dist/collection/components/picker-column-internal/picker-column-internal.md.css +3 -11
- package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +5 -34
- package/dist/collection/components/radio/radio.js +2 -5
- package/dist/collection/components/radio-group/radio-group.js +0 -24
- package/dist/collection/components/range/range.js +0 -2
- package/dist/collection/components/select/select.ios.css +7 -61
- package/dist/collection/components/select/select.js +28 -45
- package/dist/collection/components/select/select.md.css +19 -64
- package/dist/collection/components/select/test/item/select.e2e.js +0 -13
- package/dist/collection/components/select/test/label/select.e2e.js +1 -1
- package/dist/collection/components/select/test/legacy/wrapping/select.e2e.js +1 -1
- package/dist/collection/components/skeleton-text/skeleton-text.js +0 -39
- package/dist/collection/components/textarea/textarea.ios.css +5 -37
- package/dist/collection/components/textarea/textarea.js +5 -30
- package/dist/collection/components/textarea/textarea.md.css +14 -47
- package/dist/collection/components/toast/animations/ios.enter.js +1 -2
- package/dist/collection/components/toast/animations/md.enter.js +3 -4
- package/dist/collection/components/toast/animations/utils.js +14 -20
- package/dist/collection/components/toast/test/toast.spec.js +0 -80
- package/dist/collection/components/toast/toast.ios.css +10 -10
- package/dist/collection/components/toast/toast.js +1 -104
- package/dist/collection/components/toast/toast.md.css +0 -10
- package/dist/collection/components/toggle/toggle.js +0 -2
- package/dist/collection/utils/animation/animation.js +11 -12
- package/dist/collection/utils/animation/test/animation.spec.js +0 -16
- package/dist/collection/utils/browser/index.js +22 -0
- package/dist/collection/utils/forms/index.js +0 -1
- package/dist/collection/utils/input-shims/input-shims.js +6 -12
- package/dist/collection/utils/menu-controller/index.js +12 -10
- package/dist/collection/utils/overlays.js +0 -1
- package/dist/collection/utils/slot-mutation-controller.js +2 -3
- package/dist/docs.json +12 -137
- package/dist/esm/{animation-cf3dd234.js → animation-8aa13916.js} +12 -13
- package/dist/esm/{button-active-47196c40.js → button-active-ce5cba4c.js} +1 -1
- package/dist/esm/{capacitor-f1f25364.js → capacitor-b4979570.js} +1 -1
- package/dist/esm/{data-44d9e816.js → data-316b33f5.js} +64 -14
- package/dist/esm/{haptic-1a66d69f.js → haptic-1243b917.js} +1 -1
- package/dist/esm/{index-23c05a55.js → index-0aa6e61f.js} +13 -11
- package/dist/esm/{index-702b3cd3.js → index-6a0ccabb.js} +2 -2
- package/dist/esm/index-7a14ecec.js +29 -0
- package/dist/esm/{index-c9e82353.js → index-f0cc4e14.js} +1 -1
- package/dist/esm/index.js +8 -8
- package/dist/esm/{input-shims-1d767845.js → input-shims-d0c93e5d.js} +9 -14
- package/dist/esm/{input.utils-2cf5e372.js → input.utils-ec063df4.js} +3 -4
- package/dist/esm/ion-action-sheet.entry.js +6 -6
- package/dist/esm/ion-alert.entry.js +6 -6
- package/dist/esm/ion-app_8.entry.js +8 -8
- package/dist/esm/ion-checkbox.entry.js +0 -2
- package/dist/esm/ion-datetime-button.entry.js +1 -1
- package/dist/esm/ion-datetime_3.entry.js +44 -25
- package/dist/esm/ion-input.entry.js +11 -34
- package/dist/esm/ion-item_8.entry.js +4 -17
- package/dist/esm/ion-loading.entry.js +3 -3
- package/dist/esm/ion-menu_3.entry.js +5 -5
- package/dist/esm/ion-modal.entry.js +8 -8
- package/dist/esm/ion-nav_2.entry.js +1 -1
- package/dist/esm/ion-picker-column-internal.entry.js +10 -14
- package/dist/esm/ion-popover.entry.js +4 -4
- package/dist/esm/ion-radio_2.entry.js +1 -6
- package/dist/esm/ion-range.entry.js +0 -2
- package/dist/esm/ion-refresher_2.entry.js +4 -4
- package/dist/esm/ion-reorder_2.entry.js +3 -3
- package/dist/esm/ion-select_3.entry.js +31 -47
- package/dist/esm/ion-tab-bar_2.entry.js +4 -4
- package/dist/esm/ion-textarea.entry.js +10 -33
- package/dist/esm/ion-toast.entry.js +75 -417
- package/dist/esm/ion-toggle.entry.js +3 -5
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/{ios.transition-c3e77862.js → ios.transition-1651c430.js} +3 -3
- package/dist/esm/{keyboard-b6230bfb.js → keyboard-b063f012.js} +1 -1
- package/dist/esm/{keyboard-9f771a04.js → keyboard-b551279d.js} +3 -3
- package/dist/esm/{keyboard-controller-3f0faa10.js → keyboard-controller-0c2dce71.js} +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{md.transition-1173eca9.js → md.transition-66f18369.js} +3 -3
- package/dist/esm/{notch-controller-3f79197e.js → notch-controller-8c9c0e54.js} +1 -1
- package/dist/esm/{overlays-34169295.js → overlays-6c9feb7e.js} +2 -3
- package/dist/esm-es5/{animation-cf3dd234.js → animation-8aa13916.js} +1 -1
- package/dist/esm-es5/{button-active-47196c40.js → button-active-ce5cba4c.js} +1 -1
- package/dist/esm-es5/{capacitor-f1f25364.js → capacitor-b4979570.js} +1 -1
- package/dist/esm-es5/data-316b33f5.js +4 -0
- package/dist/esm-es5/{haptic-1a66d69f.js → haptic-1243b917.js} +1 -1
- package/dist/esm-es5/index-0aa6e61f.js +4 -0
- package/dist/esm-es5/{index-702b3cd3.js → index-6a0ccabb.js} +1 -1
- package/dist/esm-es5/index-f0cc4e14.js +4 -0
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/input-shims-d0c93e5d.js +4 -0
- package/dist/esm-es5/input.utils-ec063df4.js +4 -0
- package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
- package/dist/esm-es5/ion-alert.entry.js +1 -1
- package/dist/esm-es5/ion-app_8.entry.js +1 -1
- package/dist/esm-es5/ion-checkbox.entry.js +1 -1
- package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
- package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
- package/dist/esm-es5/ion-input.entry.js +1 -1
- package/dist/esm-es5/ion-item_8.entry.js +1 -1
- package/dist/esm-es5/ion-loading.entry.js +1 -1
- package/dist/esm-es5/ion-menu_3.entry.js +1 -1
- package/dist/esm-es5/ion-modal.entry.js +1 -1
- package/dist/esm-es5/ion-nav_2.entry.js +1 -1
- package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
- package/dist/esm-es5/ion-popover.entry.js +1 -1
- package/dist/esm-es5/ion-radio_2.entry.js +1 -1
- package/dist/esm-es5/ion-range.entry.js +1 -1
- package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
- package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.entry.js +1 -1
- package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
- package/dist/esm-es5/ion-textarea.entry.js +1 -1
- package/dist/esm-es5/ion-toast.entry.js +1 -1
- package/dist/esm-es5/ion-toggle.entry.js +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/{ios.transition-c3e77862.js → ios.transition-1651c430.js} +1 -1
- package/dist/esm-es5/{keyboard-b6230bfb.js → keyboard-b063f012.js} +1 -1
- package/dist/esm-es5/{keyboard-9f771a04.js → keyboard-b551279d.js} +1 -1
- package/dist/esm-es5/{keyboard-controller-3f0faa10.js → keyboard-controller-0c2dce71.js} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/md.transition-66f18369.js +4 -0
- package/dist/esm-es5/{notch-controller-3f79197e.js → notch-controller-8c9c0e54.js} +1 -1
- package/dist/esm-es5/{overlays-34169295.js → overlays-6c9feb7e.js} +1 -1
- package/dist/html.html-data.json +1 -14
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-014e8840.system.js +4 -0
- package/dist/ionic/{p-83a455fd.system.js → p-09d142b3.system.js} +1 -1
- package/dist/ionic/p-0d8e9393.entry.js +4 -0
- package/dist/ionic/{p-3abf5b7a.entry.js → p-0dc0d9b5.entry.js} +1 -1
- package/dist/ionic/{p-54824705.system.entry.js → p-0e23256e.system.entry.js} +1 -1
- package/dist/ionic/{p-e9e5755c.system.js → p-14b4348c.system.js} +1 -1
- package/dist/ionic/{p-ea9addc8.system.entry.js → p-18e01b30.system.entry.js} +1 -1
- package/dist/ionic/{p-823890d5.system.entry.js → p-1cb5f2f8.system.entry.js} +1 -1
- package/dist/ionic/p-1e5165db.system.entry.js +4 -0
- package/dist/ionic/p-20cf4994.js +4 -0
- package/dist/ionic/p-276afddd.js +4 -0
- package/dist/ionic/p-2e8e0045.js +4 -0
- package/dist/ionic/{p-d61a2cee.system.entry.js → p-34d2de14.system.entry.js} +1 -1
- package/dist/ionic/p-352c0232.system.entry.js +4 -0
- package/dist/ionic/p-3602001b.system.js +4 -0
- package/dist/ionic/p-3632220b.system.js +4 -0
- package/dist/ionic/{p-37c69d34.system.entry.js → p-377c636c.system.entry.js} +1 -1
- package/dist/ionic/{p-fce6b76a.system.entry.js → p-39044fe6.system.entry.js} +1 -1
- package/dist/ionic/{p-e5fd9f10.js → p-3bad5c1a.js} +1 -1
- package/dist/ionic/p-3ce8c3e3.entry.js +4 -0
- package/dist/ionic/p-40903d34.system.js +1 -1
- package/dist/ionic/{p-958f1c70.system.js → p-41477ad9.system.js} +1 -1
- package/dist/ionic/{p-a135e3ba.js → p-419eb426.js} +1 -1
- package/dist/ionic/p-4794e0ac.system.entry.js +4 -0
- package/dist/ionic/{p-587afb80.system.entry.js → p-4a142496.system.entry.js} +1 -1
- package/dist/ionic/p-4cd588b3.system.entry.js +4 -0
- package/dist/ionic/p-4dbac22d.entry.js +4 -0
- package/dist/ionic/p-4fa201a7.entry.js +4 -0
- package/dist/ionic/{p-4c80afe1.system.entry.js → p-587be954.system.entry.js} +1 -1
- package/dist/ionic/p-5c299019.entry.js +4 -0
- package/dist/ionic/{p-f36112b4.entry.js → p-64296b15.entry.js} +1 -1
- package/dist/ionic/{p-1abc74d9.entry.js → p-64ed03a3.entry.js} +1 -1
- package/dist/ionic/p-67aab78f.js +4 -0
- package/dist/ionic/{p-03ed6107.system.entry.js → p-67e644bd.system.entry.js} +1 -1
- package/dist/ionic/{p-cc615985.system.entry.js → p-67ed452a.system.entry.js} +1 -1
- package/dist/ionic/p-67eecef4.system.js +4 -0
- package/dist/ionic/p-6d812360.system.entry.js +4 -0
- package/dist/ionic/{p-67951604.system.js → p-702d85d8.system.js} +1 -1
- package/dist/ionic/p-7176cea3.entry.js +4 -0
- package/dist/ionic/{p-8b15ca22.entry.js → p-73411c1b.entry.js} +1 -1
- package/dist/ionic/p-77e7a9c8.entry.js +4 -0
- package/dist/ionic/{p-8ad82eb3.entry.js → p-79e83e0a.entry.js} +1 -1
- package/dist/ionic/p-7f85ffa9.js +4 -0
- package/dist/ionic/{p-2a41d4d1.js → p-800ef057.js} +1 -1
- package/dist/ionic/{p-11cb4e19.js → p-81c818e7.js} +1 -1
- package/dist/ionic/p-88980f5f.system.entry.js +4 -0
- package/dist/ionic/{p-5885e9af.js → p-8cf94fc1.js} +1 -1
- package/dist/ionic/{p-3e655d4c.entry.js → p-8e1bded3.entry.js} +1 -1
- package/dist/ionic/p-97c65aa5.js +4 -0
- package/dist/ionic/{p-d48872b1.system.js → p-97e31c0a.system.js} +1 -1
- package/dist/ionic/p-9ab6f3e6.system.js +4 -0
- package/dist/ionic/p-9b89cbde.js +4 -0
- package/dist/ionic/{p-fe1f93f2.js → p-a0b6d438.js} +1 -1
- package/dist/ionic/p-a21b8d05.entry.js +4 -0
- package/dist/ionic/p-a5c1e6ce.entry.js +4 -0
- package/dist/ionic/{p-c4de53af.system.js → p-a936d224.system.js} +1 -1
- package/dist/ionic/{p-aec8a70a.system.js → p-ab4cff27.system.js} +1 -1
- package/dist/ionic/p-b0cee324.entry.js +4 -0
- package/dist/ionic/p-b1142133.entry.js +4 -0
- package/dist/ionic/p-b203659a.system.entry.js +4 -0
- package/dist/ionic/{p-6797887a.entry.js → p-b2a74a72.entry.js} +1 -1
- package/dist/ionic/{p-9292fd42.system.js → p-b4b4bb29.system.js} +1 -1
- package/dist/ionic/p-b6f8ee31.entry.js +4 -0
- package/dist/ionic/{p-31189dae.entry.js → p-b91fe549.entry.js} +1 -1
- package/dist/ionic/{p-6a309574.js → p-b923f3d7.js} +1 -1
- package/dist/ionic/{p-f9a641fa.system.js → p-bba2ce59.system.js} +1 -1
- package/dist/ionic/{p-5e6bc319.system.entry.js → p-bed722c4.system.entry.js} +1 -1
- package/dist/ionic/{p-21b4981c.system.js → p-c4042875.system.js} +1 -1
- package/dist/ionic/p-cc196b34.js +4 -0
- package/dist/ionic/{p-e7d20dfb.system.js → p-ccdcb022.system.js} +1 -1
- package/dist/ionic/{p-fcb148dc.system.entry.js → p-cf425ec5.system.entry.js} +1 -1
- package/dist/ionic/p-d1de1188.js +4 -0
- package/dist/ionic/p-d21bfe66.system.entry.js +4 -0
- package/dist/ionic/p-d3952bd5.system.entry.js +4 -0
- package/dist/ionic/{p-196f2123.system.entry.js → p-ddfc4ef4.system.entry.js} +1 -1
- package/dist/ionic/{p-c1e725db.entry.js → p-deab76dc.entry.js} +1 -1
- package/dist/ionic/p-dfa756ed.system.js +4 -0
- package/dist/ionic/p-e6b240a0.js +4 -0
- package/dist/ionic/{p-64ab3eb3.entry.js → p-f37b4b79.entry.js} +1 -1
- package/dist/ionic/{p-7047a40c.system.entry.js → p-f3c82f74.system.entry.js} +1 -1
- package/dist/ionic/{p-b673ee9b.entry.js → p-f54ddd19.entry.js} +1 -1
- package/dist/ionic/p-ff5a10f9.system.js +4 -0
- package/dist/types/components/datetime/utils/manipulation.d.ts +34 -7
- package/dist/types/components/input/input.d.ts +0 -2
- package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +0 -4
- package/dist/types/components/radio-group/radio-group-interface.d.ts +0 -1
- package/dist/types/components/radio-group/radio-group.d.ts +1 -8
- package/dist/types/components/router/router.d.ts +1 -2
- package/dist/types/components/select/select.d.ts +1 -6
- package/dist/types/components/skeleton-text/skeleton-text.d.ts +1 -9
- package/dist/types/components/textarea/textarea.d.ts +0 -2
- package/dist/types/components/toast/animations/utils.d.ts +4 -15
- package/dist/types/components/toast/toast-interface.d.ts +0 -2
- package/dist/types/components/toast/toast.d.ts +1 -28
- package/dist/types/components.d.ts +6 -45
- package/dist/types/interface.d.ts +5 -1
- package/dist/types/utils/animation/animation-interface.d.ts +4 -4
- package/dist/types/utils/browser/index.d.ts +2 -11
- package/dist/types/utils/forms/index.d.ts +0 -1
- package/dist/types/utils/hardware-back-button.d.ts +0 -4
- package/dist/types/utils/overlays.d.ts +0 -1
- package/dist/types/utils/slot-mutation-controller.d.ts +2 -2
- package/hydrate/index.js +276 -659
- package/package.json +1 -1
- package/dist/cjs/compare-with-utils-c0444525.js +0 -44
- package/dist/cjs/index-c8d52405.js +0 -10
- package/dist/collection/components/datetime/test/disabled/datetime.spec.js +0 -33
- package/dist/collection/components/input/test/slot/input.e2e.js +0 -51
- package/dist/collection/components/radio-group/test/radio-group.spec.js +0 -69
- package/dist/collection/components/select/test/slot/select.e2e.js +0 -67
- package/dist/collection/components/textarea/test/slot/textarea.e2e.js +0 -51
- package/dist/collection/components/toast/gestures/swipe-to-dismiss.js +0 -267
- package/dist/collection/components/toast/test/swipe-gesture/toast.e2e.js +0 -84
- package/dist/collection/components/toast/test/toast-config.spec.js +0 -25
- package/dist/collection/utils/forms/compare-with-utils.js +0 -39
- package/dist/esm/compare-with-utils-4928c09d.js +0 -41
- package/dist/esm/index-a5d50daf.js +0 -7
- package/dist/esm-es5/compare-with-utils-4928c09d.js +0 -4
- package/dist/esm-es5/data-44d9e816.js +0 -4
- package/dist/esm-es5/index-23c05a55.js +0 -4
- package/dist/esm-es5/index-c9e82353.js +0 -4
- package/dist/esm-es5/input-shims-1d767845.js +0 -4
- package/dist/esm-es5/input.utils-2cf5e372.js +0 -4
- package/dist/esm-es5/md.transition-1173eca9.js +0 -4
- package/dist/ionic/p-0547e914.entry.js +0 -4
- package/dist/ionic/p-131761b4.entry.js +0 -4
- package/dist/ionic/p-17240d90.js +0 -4
- package/dist/ionic/p-1cf5e8d6.entry.js +0 -4
- package/dist/ionic/p-2207f3c2.js +0 -4
- package/dist/ionic/p-27eb8a91.system.entry.js +0 -4
- package/dist/ionic/p-314c4dee.js +0 -4
- package/dist/ionic/p-385c51f8.system.entry.js +0 -4
- package/dist/ionic/p-3bc3d880.system.js +0 -4
- package/dist/ionic/p-43716898.js +0 -4
- package/dist/ionic/p-450a26bf.js +0 -4
- package/dist/ionic/p-485668f0.entry.js +0 -4
- package/dist/ionic/p-48c59094.system.entry.js +0 -4
- package/dist/ionic/p-494e75ad.js +0 -4
- package/dist/ionic/p-561cc050.system.js +0 -4
- package/dist/ionic/p-671dbd61.js +0 -4
- package/dist/ionic/p-693cabd5.entry.js +0 -4
- package/dist/ionic/p-70dcf429.js +0 -4
- package/dist/ionic/p-710cea83.system.js +0 -4
- package/dist/ionic/p-7b44e419.js +0 -4
- package/dist/ionic/p-80a9b397.entry.js +0 -4
- package/dist/ionic/p-8ddfecbf.entry.js +0 -4
- package/dist/ionic/p-98712253.system.entry.js +0 -4
- package/dist/ionic/p-9c6787e2.entry.js +0 -4
- package/dist/ionic/p-a11c1aff.system.entry.js +0 -4
- package/dist/ionic/p-a31099a4.entry.js +0 -4
- package/dist/ionic/p-a6bc00ab.entry.js +0 -4
- package/dist/ionic/p-ad4b4f73.system.entry.js +0 -4
- package/dist/ionic/p-b8c3f071.system.js +0 -4
- package/dist/ionic/p-be0f6600.system.js +0 -4
- package/dist/ionic/p-c2db1374.system.js +0 -4
- package/dist/ionic/p-c3547c7a.system.js +0 -4
- package/dist/ionic/p-c700acef.system.js +0 -4
- package/dist/ionic/p-d4fba36b.system.entry.js +0 -4
- package/dist/ionic/p-e5b8f2f7.js +0 -4
- package/dist/ionic/p-f43f4102.entry.js +0 -4
- package/dist/ionic/p-f5d78105.entry.js +0 -4
- package/dist/ionic/p-f7769c83.js +0 -4
- package/dist/ionic/p-fcc23f25.system.entry.js +0 -4
- package/dist/ionic/p-fdcf04c3.system.entry.js +0 -4
- package/dist/types/components/toast/gestures/swipe-to-dismiss.d.ts +0 -9
- package/dist/types/utils/forms/compare-with-utils.d.ts +0 -18
- /package/dist/esm-es5/{index-a5d50daf.js → index-7a14ecec.js} +0 -0
- /package/dist/ionic/{p-792919fd.system.js → p-0e94957a.system.js} +0 -0
- /package/dist/ionic/{p-7b30edcc.js → p-b347cfd1.js} +0 -0
|
@@ -132,11 +132,6 @@
|
|
|
132
132
|
overflow: hidden;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
:host(.in-item:not(.legacy-select)) {
|
|
136
|
-
flex: 1 1 0;
|
|
137
|
-
width: 0;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
135
|
:host(.in-item.legacy-select) {
|
|
141
136
|
position: static;
|
|
142
137
|
max-width: 45%;
|
|
@@ -237,12 +232,6 @@ button {
|
|
|
237
232
|
margin-top: 0;
|
|
238
233
|
margin-bottom: 0;
|
|
239
234
|
position: relative;
|
|
240
|
-
/**
|
|
241
|
-
* Prevent the icon from shrinking when the label and/or
|
|
242
|
-
* selected item text is long enough to fill the rest of
|
|
243
|
-
* the container.
|
|
244
|
-
*/
|
|
245
|
-
flex-shrink: 0;
|
|
246
235
|
}
|
|
247
236
|
|
|
248
237
|
/**
|
|
@@ -326,23 +315,6 @@ button {
|
|
|
326
315
|
transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
327
316
|
}
|
|
328
317
|
|
|
329
|
-
.select-wrapper-inner {
|
|
330
|
-
display: flex;
|
|
331
|
-
align-items: center;
|
|
332
|
-
overflow: hidden;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
:host(.select-label-placement-stacked) .select-wrapper-inner,
|
|
336
|
-
:host(.select-label-placement-floating) .select-wrapper-inner {
|
|
337
|
-
/**
|
|
338
|
-
* When using a stacked/floating label, the inner wrapper is
|
|
339
|
-
* stacked vertically under the label container. This line
|
|
340
|
-
* ensures that the inner wrapper fills all the remaining height
|
|
341
|
-
* of the component.
|
|
342
|
-
*/
|
|
343
|
-
flex-grow: 1;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
318
|
:host(.ion-touched.ion-invalid) {
|
|
347
319
|
--highlight-color: var(--highlight-color-invalid);
|
|
348
320
|
}
|
|
@@ -583,23 +555,11 @@ button {
|
|
|
583
555
|
* The placeholder should be hidden when the label
|
|
584
556
|
* is on top of the select. This prevents the label
|
|
585
557
|
* from overlapping any placeholder value.
|
|
586
|
-
*
|
|
587
|
-
* TODO(FW-5592): Remove :not(.label-floating) piece
|
|
588
558
|
*/
|
|
589
|
-
:host(.select-label-placement-floating
|
|
559
|
+
:host(.select-label-placement-floating) .native-wrapper .select-placeholder {
|
|
590
560
|
opacity: 0;
|
|
591
561
|
}
|
|
592
562
|
|
|
593
|
-
/**
|
|
594
|
-
* We don't use .label-floating here because that would
|
|
595
|
-
* also include the case where the label is floating due
|
|
596
|
-
* to content in the start/end slot. We want the opacity
|
|
597
|
-
* to remain at the default in this case, since the select
|
|
598
|
-
* isn't being actively interacted with.
|
|
599
|
-
*
|
|
600
|
-
* TODO(FW-5592): Change entire selector to:
|
|
601
|
-
* :host(.label-floating.select-label-placement-floating) .native-wrapper .select-placeholder
|
|
602
|
-
*/
|
|
603
563
|
:host(.select-expanded.select-label-placement-floating) .native-wrapper .select-placeholder,
|
|
604
564
|
:host(.ion-focused.select-label-placement-floating) .native-wrapper .select-placeholder,
|
|
605
565
|
:host(.has-value.select-label-placement-floating) .native-wrapper .select-placeholder {
|
|
@@ -609,7 +569,10 @@ button {
|
|
|
609
569
|
/**
|
|
610
570
|
* This makes the label sit above the input.
|
|
611
571
|
*/
|
|
612
|
-
:host(.label-
|
|
572
|
+
:host(.select-label-placement-stacked) .label-text-wrapper,
|
|
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 {
|
|
613
576
|
transform: translateY(50%) scale(0.75);
|
|
614
577
|
/**
|
|
615
578
|
* Label text should not extend
|
|
@@ -618,23 +581,6 @@ button {
|
|
|
618
581
|
max-width: calc(100% / 0.75);
|
|
619
582
|
}
|
|
620
583
|
|
|
621
|
-
::slotted([slot=start]), ::slotted([slot=end]) {
|
|
622
|
-
/**
|
|
623
|
-
* Prevent the slots from shrinking when the label and/or
|
|
624
|
-
* selected item text is long enough to fill the rest of
|
|
625
|
-
* the container.
|
|
626
|
-
*/
|
|
627
|
-
flex-shrink: 0;
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
::slotted([slot=start]) {
|
|
631
|
-
margin-inline-end: 16px;
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
::slotted([slot=end]) {
|
|
635
|
-
margin-inline-start: 16px;
|
|
636
|
-
}
|
|
637
|
-
|
|
638
584
|
/**
|
|
639
585
|
* Convert a font size to a dynamic font size.
|
|
640
586
|
* Fonts that participate in Dynamic Type should use
|
|
@@ -758,8 +704,8 @@ button {
|
|
|
758
704
|
color: var(--ion-color-step-650, #595959);
|
|
759
705
|
}
|
|
760
706
|
|
|
761
|
-
:host(.select-label-placement-stacked) .
|
|
762
|
-
:host(.select-label-placement-floating) .
|
|
707
|
+
:host(.select-label-placement-stacked) .native-wrapper,
|
|
708
|
+
:host(.select-label-placement-floating) .native-wrapper {
|
|
763
709
|
width: calc(100% - 1.125rem - 4px);
|
|
764
710
|
}
|
|
765
711
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { Host, h, forceUpdate } from "@stencil/core";
|
|
5
|
-
import {
|
|
5
|
+
import { createLegacyFormController, createNotchController } from "../../utils/forms/index";
|
|
6
6
|
import { findItemLabel, focusElement, getAriaLabel, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
|
|
7
7
|
import { printIonWarning } from "../../utils/logging/index";
|
|
8
8
|
import { actionSheetController, alertController, popoverController } from "../../utils/overlays";
|
|
@@ -16,8 +16,6 @@ import { getIonMode } from "../../global/ionic-global";
|
|
|
16
16
|
* @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
|
|
17
17
|
*
|
|
18
18
|
* @slot label - The label text to associate with the select. Use the `labelPlacement` property to control where the label is placed relative to the select. Use this if you need to render a label with custom HTML.
|
|
19
|
-
* @slot start - Content to display at the leading edge of the select.
|
|
20
|
-
* @slot end - Content to display at the trailing edge of the select.
|
|
21
19
|
*
|
|
22
20
|
* @part placeholder - The text displayed in the select when there is no value.
|
|
23
21
|
* @part text - The displayed value of the select.
|
|
@@ -32,22 +30,8 @@ export class Select {
|
|
|
32
30
|
// This flag ensures we log the deprecation warning at most once.
|
|
33
31
|
this.hasLoggedDeprecationWarning = false;
|
|
34
32
|
this.onClick = (ev) => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (target === this.el || closestSlot === null) {
|
|
38
|
-
this.setFocus();
|
|
39
|
-
this.open(ev);
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
/**
|
|
43
|
-
* Prevent clicks to the start/end slots from opening the select.
|
|
44
|
-
* We ensure the target isn't this element in case the select is slotted
|
|
45
|
-
* in, for example, an item. This would prevent the select from ever
|
|
46
|
-
* being opened since the element itself has slot="start"/"end".
|
|
47
|
-
*/
|
|
48
|
-
ev.stopPropagation();
|
|
49
|
-
ev.preventDefault();
|
|
50
|
-
}
|
|
33
|
+
this.setFocus();
|
|
34
|
+
this.open(ev);
|
|
51
35
|
};
|
|
52
36
|
this.onFocus = () => {
|
|
53
37
|
this.ionFocus.emit();
|
|
@@ -481,8 +465,6 @@ export class Select {
|
|
|
481
465
|
style['has-placeholder'] = this.placeholder !== undefined;
|
|
482
466
|
style['has-value'] = this.hasValue();
|
|
483
467
|
style['has-focus'] = this.isExpanded;
|
|
484
|
-
// TODO(FW-3194): remove this
|
|
485
|
-
style['legacy'] = !!this.legacy;
|
|
486
468
|
}
|
|
487
469
|
this.ionStyle.emit(style);
|
|
488
470
|
}
|
|
@@ -550,27 +532,7 @@ export class Select {
|
|
|
550
532
|
const rtl = isRTL(el) ? 'rtl' : 'ltr';
|
|
551
533
|
const inItem = hostContext('ion-item', this.el);
|
|
552
534
|
const shouldRenderHighlight = mode === 'md' && fill !== 'outline' && !inItem;
|
|
553
|
-
const hasValue = this.hasValue();
|
|
554
|
-
const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
|
|
555
535
|
renderHiddenInput(true, el, name, parseValue(value), disabled);
|
|
556
|
-
/**
|
|
557
|
-
* If the label is stacked, it should always sit above the select.
|
|
558
|
-
* For floating labels, the label should move above the select if
|
|
559
|
-
* the select has a value, is open, or has anything in either
|
|
560
|
-
* the start or end slot.
|
|
561
|
-
*
|
|
562
|
-
* If there is content in the start slot, the label would overlap
|
|
563
|
-
* it if not forced to float. This is also applied to the end slot
|
|
564
|
-
* because with the default or solid fills, the select is not
|
|
565
|
-
* vertically centered in the container, but the label is. This
|
|
566
|
-
* causes the slots and label to appear vertically offset from each
|
|
567
|
-
* other when the label isn't floating above the input. This doesn't
|
|
568
|
-
* apply to the outline fill, but this was not accounted for to keep
|
|
569
|
-
* things consistent.
|
|
570
|
-
*
|
|
571
|
-
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
572
|
-
*/
|
|
573
|
-
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
|
|
574
536
|
return (h(Host, { onClick: this.onClick, class: createColorClasses(this.color, {
|
|
575
537
|
[mode]: true,
|
|
576
538
|
'in-item': inItem,
|
|
@@ -578,8 +540,7 @@ export class Select {
|
|
|
578
540
|
'select-disabled': disabled,
|
|
579
541
|
'select-expanded': isExpanded,
|
|
580
542
|
'has-expanded-icon': expandedIcon !== undefined,
|
|
581
|
-
'has-value': hasValue,
|
|
582
|
-
'label-floating': labelShouldFloat,
|
|
543
|
+
'has-value': this.hasValue(),
|
|
583
544
|
'has-placeholder': placeholder !== undefined,
|
|
584
545
|
'ion-focusable': true,
|
|
585
546
|
[`select-${rtl}`]: true,
|
|
@@ -587,7 +548,7 @@ export class Select {
|
|
|
587
548
|
[`select-justify-${justify}`]: justifyEnabled,
|
|
588
549
|
[`select-shape-${shape}`]: shape !== undefined,
|
|
589
550
|
[`select-label-placement-${labelPlacement}`]: true,
|
|
590
|
-
}) }, h("label", { class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), h("div", { class: "
|
|
551
|
+
}) }, h("label", { class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), h("div", { class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), !hasFloatingOrStackedLabel && this.renderSelectIcon(), this.renderListbox()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { class: "select-highlight" }))));
|
|
591
552
|
}
|
|
592
553
|
// TODO FW-3194 - Remove this
|
|
593
554
|
renderLegacySelect() {
|
|
@@ -776,7 +737,7 @@ Developers can use the "legacy" property to continue using the legacy form marku
|
|
|
776
737
|
"optional": true,
|
|
777
738
|
"docs": {
|
|
778
739
|
"tags": [],
|
|
779
|
-
"text": "
|
|
740
|
+
"text": "A property name or function used to compare object values"
|
|
780
741
|
},
|
|
781
742
|
"attribute": "compare-with",
|
|
782
743
|
"reflect": false
|
|
@@ -1254,6 +1215,17 @@ Developers can use the "legacy" property to continue using the legacy form marku
|
|
|
1254
1215
|
}];
|
|
1255
1216
|
}
|
|
1256
1217
|
}
|
|
1218
|
+
const isOptionSelected = (currentValue, compareValue, compareWith) => {
|
|
1219
|
+
if (currentValue === undefined) {
|
|
1220
|
+
return false;
|
|
1221
|
+
}
|
|
1222
|
+
if (Array.isArray(currentValue)) {
|
|
1223
|
+
return currentValue.some((val) => compareOptions(val, compareValue, compareWith));
|
|
1224
|
+
}
|
|
1225
|
+
else {
|
|
1226
|
+
return compareOptions(currentValue, compareValue, compareWith);
|
|
1227
|
+
}
|
|
1228
|
+
};
|
|
1257
1229
|
const getOptionValue = (el) => {
|
|
1258
1230
|
const value = el.value;
|
|
1259
1231
|
return value === undefined ? el.textContent || '' : value;
|
|
@@ -1267,6 +1239,17 @@ const parseValue = (value) => {
|
|
|
1267
1239
|
}
|
|
1268
1240
|
return value.toString();
|
|
1269
1241
|
};
|
|
1242
|
+
const compareOptions = (currentValue, compareValue, compareWith) => {
|
|
1243
|
+
if (typeof compareWith === 'function') {
|
|
1244
|
+
return compareWith(currentValue, compareValue);
|
|
1245
|
+
}
|
|
1246
|
+
else if (typeof compareWith === 'string') {
|
|
1247
|
+
return currentValue[compareWith] === compareValue[compareWith];
|
|
1248
|
+
}
|
|
1249
|
+
else {
|
|
1250
|
+
return Array.isArray(compareValue) ? compareValue.includes(currentValue) : currentValue === compareValue;
|
|
1251
|
+
}
|
|
1252
|
+
};
|
|
1270
1253
|
const generateText = (opts, value, compareWith) => {
|
|
1271
1254
|
if (value === undefined) {
|
|
1272
1255
|
return '';
|
|
@@ -132,11 +132,6 @@
|
|
|
132
132
|
overflow: hidden;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
:host(.in-item:not(.legacy-select)) {
|
|
136
|
-
flex: 1 1 0;
|
|
137
|
-
width: 0;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
135
|
:host(.in-item.legacy-select) {
|
|
141
136
|
position: static;
|
|
142
137
|
max-width: 45%;
|
|
@@ -237,12 +232,6 @@ button {
|
|
|
237
232
|
margin-top: 0;
|
|
238
233
|
margin-bottom: 0;
|
|
239
234
|
position: relative;
|
|
240
|
-
/**
|
|
241
|
-
* Prevent the icon from shrinking when the label and/or
|
|
242
|
-
* selected item text is long enough to fill the rest of
|
|
243
|
-
* the container.
|
|
244
|
-
*/
|
|
245
|
-
flex-shrink: 0;
|
|
246
235
|
}
|
|
247
236
|
|
|
248
237
|
/**
|
|
@@ -326,23 +315,6 @@ button {
|
|
|
326
315
|
transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
327
316
|
}
|
|
328
317
|
|
|
329
|
-
.select-wrapper-inner {
|
|
330
|
-
display: flex;
|
|
331
|
-
align-items: center;
|
|
332
|
-
overflow: hidden;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
:host(.select-label-placement-stacked) .select-wrapper-inner,
|
|
336
|
-
:host(.select-label-placement-floating) .select-wrapper-inner {
|
|
337
|
-
/**
|
|
338
|
-
* When using a stacked/floating label, the inner wrapper is
|
|
339
|
-
* stacked vertically under the label container. This line
|
|
340
|
-
* ensures that the inner wrapper fills all the remaining height
|
|
341
|
-
* of the component.
|
|
342
|
-
*/
|
|
343
|
-
flex-grow: 1;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
318
|
:host(.ion-touched.ion-invalid) {
|
|
347
319
|
--highlight-color: var(--highlight-color-invalid);
|
|
348
320
|
}
|
|
@@ -583,23 +555,11 @@ button {
|
|
|
583
555
|
* The placeholder should be hidden when the label
|
|
584
556
|
* is on top of the select. This prevents the label
|
|
585
557
|
* from overlapping any placeholder value.
|
|
586
|
-
*
|
|
587
|
-
* TODO(FW-5592): Remove :not(.label-floating) piece
|
|
588
558
|
*/
|
|
589
|
-
:host(.select-label-placement-floating
|
|
559
|
+
:host(.select-label-placement-floating) .native-wrapper .select-placeholder {
|
|
590
560
|
opacity: 0;
|
|
591
561
|
}
|
|
592
562
|
|
|
593
|
-
/**
|
|
594
|
-
* We don't use .label-floating here because that would
|
|
595
|
-
* also include the case where the label is floating due
|
|
596
|
-
* to content in the start/end slot. We want the opacity
|
|
597
|
-
* to remain at the default in this case, since the select
|
|
598
|
-
* isn't being actively interacted with.
|
|
599
|
-
*
|
|
600
|
-
* TODO(FW-5592): Change entire selector to:
|
|
601
|
-
* :host(.label-floating.select-label-placement-floating) .native-wrapper .select-placeholder
|
|
602
|
-
*/
|
|
603
563
|
:host(.select-expanded.select-label-placement-floating) .native-wrapper .select-placeholder,
|
|
604
564
|
:host(.ion-focused.select-label-placement-floating) .native-wrapper .select-placeholder,
|
|
605
565
|
:host(.has-value.select-label-placement-floating) .native-wrapper .select-placeholder {
|
|
@@ -609,7 +569,10 @@ button {
|
|
|
609
569
|
/**
|
|
610
570
|
* This makes the label sit above the input.
|
|
611
571
|
*/
|
|
612
|
-
:host(.label-
|
|
572
|
+
:host(.select-label-placement-stacked) .label-text-wrapper,
|
|
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 {
|
|
613
576
|
transform: translateY(50%) scale(0.75);
|
|
614
577
|
/**
|
|
615
578
|
* Label text should not extend
|
|
@@ -618,23 +581,6 @@ button {
|
|
|
618
581
|
max-width: calc(100% / 0.75);
|
|
619
582
|
}
|
|
620
583
|
|
|
621
|
-
::slotted([slot=start]), ::slotted([slot=end]) {
|
|
622
|
-
/**
|
|
623
|
-
* Prevent the slots from shrinking when the label and/or
|
|
624
|
-
* selected item text is long enough to fill the rest of
|
|
625
|
-
* the container.
|
|
626
|
-
*/
|
|
627
|
-
flex-shrink: 0;
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
::slotted([slot=start]) {
|
|
631
|
-
margin-inline-end: 16px;
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
::slotted([slot=end]) {
|
|
635
|
-
margin-inline-start: 16px;
|
|
636
|
-
}
|
|
637
|
-
|
|
638
584
|
/**
|
|
639
585
|
* Convert a font size to a dynamic font size.
|
|
640
586
|
* Fonts that participate in Dynamic Type should use
|
|
@@ -878,7 +824,10 @@ button {
|
|
|
878
824
|
}
|
|
879
825
|
}
|
|
880
826
|
|
|
881
|
-
:host(.
|
|
827
|
+
:host(.select-fill-solid.select-label-placement-stacked) .label-text-wrapper,
|
|
828
|
+
:host(.select-expanded.select-fill-solid.select-label-placement-floating) .label-text-wrapper,
|
|
829
|
+
:host(.ion-focused.select-fill-solid.select-label-placement-floating) .label-text-wrapper,
|
|
830
|
+
:host(.has-value.select-fill-solid.select-label-placement-floating) .label-text-wrapper {
|
|
882
831
|
/**
|
|
883
832
|
* Label text should not extend
|
|
884
833
|
* beyond the bounds of the select.
|
|
@@ -1034,7 +983,10 @@ button {
|
|
|
1034
983
|
/**
|
|
1035
984
|
* This makes the label sit above the select.
|
|
1036
985
|
*/
|
|
1037
|
-
:host(.
|
|
986
|
+
:host(.select-expanded.select-fill-outline.select-label-placement-floating) .label-text-wrapper,
|
|
987
|
+
:host(.ion-focused.select-fill-outline.select-label-placement-floating) .label-text-wrapper,
|
|
988
|
+
:host(.has-value.select-fill-outline.select-label-placement-floating) .label-text-wrapper,
|
|
989
|
+
:host(.select-fill-outline.select-label-placement-stacked) .label-text-wrapper {
|
|
1038
990
|
transform: translateY(-32%) scale(0.75);
|
|
1039
991
|
margin-left: 0;
|
|
1040
992
|
margin-right: 0;
|
|
@@ -1179,7 +1131,10 @@ button {
|
|
|
1179
1131
|
* the floating/stacked label. We simulate this "cut out"
|
|
1180
1132
|
* by removing the top border from the notch fragment.
|
|
1181
1133
|
*/
|
|
1182
|
-
:host(.
|
|
1134
|
+
:host(.select-expanded.select-fill-outline.select-label-placement-floating) .select-outline-notch,
|
|
1135
|
+
:host(.ion-focused.select-fill-outline.select-label-placement-floating) .select-outline-notch,
|
|
1136
|
+
:host(.has-value.select-fill-outline.select-label-placement-floating) .select-outline-notch,
|
|
1137
|
+
:host(.select-fill-outline.select-label-placement-stacked) .select-outline-notch {
|
|
1183
1138
|
border-top: none;
|
|
1184
1139
|
}
|
|
1185
1140
|
|
|
@@ -1344,8 +1299,8 @@ button {
|
|
|
1344
1299
|
--border-radius: 16px;
|
|
1345
1300
|
}
|
|
1346
1301
|
|
|
1347
|
-
:host(.select-label-placement-stacked) .
|
|
1348
|
-
:host(.select-label-placement-floating) .
|
|
1302
|
+
:host(.select-label-placement-stacked) .native-wrapper,
|
|
1303
|
+
:host(.select-label-placement-floating) .native-wrapper {
|
|
1349
1304
|
width: calc(100% - 0.8125rem - 4px);
|
|
1350
1305
|
}
|
|
1351
1306
|
|
|
@@ -37,18 +37,5 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
|
37
37
|
const list = page.locator('ion-list');
|
|
38
38
|
await expect(list).toHaveScreenshot(screenshot(`select-inset-list-no-fill`));
|
|
39
39
|
});
|
|
40
|
-
test('should render correctly in an item inside of a flex container', async ({ page }) => {
|
|
41
|
-
await page.setContent(`
|
|
42
|
-
<div id="container" style="display: flex">
|
|
43
|
-
<ion-item>
|
|
44
|
-
<ion-select label="Fruit" value="apple">
|
|
45
|
-
<ion-select-option value="apple">Apple</ion-select-option>
|
|
46
|
-
</ion-select>
|
|
47
|
-
</ion-item>
|
|
48
|
-
</div>
|
|
49
|
-
`, config);
|
|
50
|
-
const container = page.locator('#container');
|
|
51
|
-
await expect(container).toHaveScreenshot(screenshot(`select-item-flex-container`));
|
|
52
|
-
});
|
|
53
40
|
});
|
|
54
41
|
});
|
|
@@ -121,7 +121,7 @@ configs().forEach(({ title, screenshot, config }) => {
|
|
|
121
121
|
});
|
|
122
122
|
test('label should appear on top of the select when the select is expanded', async ({ page }) => {
|
|
123
123
|
await page.setContent(`
|
|
124
|
-
<ion-select class="select-expanded
|
|
124
|
+
<ion-select class="select-expanded" label="Label" label-placement="floating" placeholder="Select a Fruit">
|
|
125
125
|
<ion-select-option value="apples">Apples</ion-select-option>
|
|
126
126
|
</ion-select>
|
|
127
127
|
`, config);
|
|
@@ -27,7 +27,7 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
|
27
27
|
await page.setContent(`
|
|
28
28
|
<ion-item>
|
|
29
29
|
<ion-label>Really long label should not wrap</ion-label>
|
|
30
|
-
<ion-select value="wrap"
|
|
30
|
+
<ion-select value="wrap" class="ion-text-wrap">
|
|
31
31
|
<ion-select-option value="wrap">Should wrap value only when label exists and really long text exists to make it wrap the text</ion-select-option>
|
|
32
32
|
</ion-select>
|
|
33
33
|
</ion-item>
|
|
@@ -9,18 +9,6 @@ export class SkeletonText {
|
|
|
9
9
|
constructor() {
|
|
10
10
|
this.animated = false;
|
|
11
11
|
}
|
|
12
|
-
componentWillLoad() {
|
|
13
|
-
this.emitStyle();
|
|
14
|
-
}
|
|
15
|
-
emitStyle() {
|
|
16
|
-
// The emitted property is used by item in order
|
|
17
|
-
// to add the item-skeleton-text class which applies
|
|
18
|
-
// overflow: hidden to its label
|
|
19
|
-
const style = {
|
|
20
|
-
'skeleton-text': true,
|
|
21
|
-
};
|
|
22
|
-
this.ionStyle.emit(style);
|
|
23
|
-
}
|
|
24
12
|
render() {
|
|
25
13
|
const animated = this.animated && config.getBoolean('animated', true);
|
|
26
14
|
const inMedia = hostContext('ion-avatar', this.el) || hostContext('ion-thumbnail', this.el);
|
|
@@ -65,32 +53,5 @@ export class SkeletonText {
|
|
|
65
53
|
}
|
|
66
54
|
};
|
|
67
55
|
}
|
|
68
|
-
static get events() {
|
|
69
|
-
return [{
|
|
70
|
-
"method": "ionStyle",
|
|
71
|
-
"name": "ionStyle",
|
|
72
|
-
"bubbles": true,
|
|
73
|
-
"cancelable": true,
|
|
74
|
-
"composed": true,
|
|
75
|
-
"docs": {
|
|
76
|
-
"tags": [{
|
|
77
|
-
"name": "internal",
|
|
78
|
-
"text": undefined
|
|
79
|
-
}],
|
|
80
|
-
"text": "Emitted when the styles change."
|
|
81
|
-
},
|
|
82
|
-
"complexType": {
|
|
83
|
-
"original": "StyleEventDetail",
|
|
84
|
-
"resolved": "StyleEventDetail",
|
|
85
|
-
"references": {
|
|
86
|
-
"StyleEventDetail": {
|
|
87
|
-
"location": "import",
|
|
88
|
-
"path": "../../interface",
|
|
89
|
-
"id": "src/interface.d.ts::StyleEventDetail"
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}];
|
|
94
|
-
}
|
|
95
56
|
static get elementRef() { return "el"; }
|
|
96
57
|
}
|
|
@@ -356,7 +356,9 @@
|
|
|
356
356
|
}
|
|
357
357
|
|
|
358
358
|
.native-wrapper {
|
|
359
|
+
display: flex;
|
|
359
360
|
position: relative;
|
|
361
|
+
flex-grow: 1;
|
|
360
362
|
width: 100%;
|
|
361
363
|
height: 100%;
|
|
362
364
|
}
|
|
@@ -427,12 +429,6 @@
|
|
|
427
429
|
word-break: break-word;
|
|
428
430
|
}
|
|
429
431
|
|
|
430
|
-
.textarea-wrapper-inner {
|
|
431
|
-
display: flex;
|
|
432
|
-
width: 100%;
|
|
433
|
-
min-height: inherit;
|
|
434
|
-
}
|
|
435
|
-
|
|
436
432
|
:host(.ion-touched.ion-invalid) {
|
|
437
433
|
--highlight-color: var(--highlight-color-invalid);
|
|
438
434
|
}
|
|
@@ -708,13 +704,6 @@
|
|
|
708
704
|
margin-bottom: 0px;
|
|
709
705
|
}
|
|
710
706
|
|
|
711
|
-
:host(.textarea-label-placement-stacked) ::slotted([slot=start]),
|
|
712
|
-
:host(.textarea-label-placement-stacked) ::slotted([slot=end]),
|
|
713
|
-
:host(.textarea-label-placement-floating) ::slotted([slot=start]),
|
|
714
|
-
:host(.textarea-label-placement-floating) ::slotted([slot=end]) {
|
|
715
|
-
margin-top: 8px;
|
|
716
|
-
}
|
|
717
|
-
|
|
718
707
|
/**
|
|
719
708
|
* This makes the label sit over the textarea
|
|
720
709
|
* when the textarea is blurred and has no value.
|
|
@@ -740,7 +729,9 @@
|
|
|
740
729
|
/**
|
|
741
730
|
* This makes the label sit above the textarea.
|
|
742
731
|
*/
|
|
743
|
-
:host(.label-
|
|
732
|
+
:host(.textarea-label-placement-stacked) .label-text-wrapper,
|
|
733
|
+
:host(.has-focus.textarea-label-placement-floating) .label-text-wrapper,
|
|
734
|
+
:host(.has-value.textarea-label-placement-floating) .label-text-wrapper {
|
|
744
735
|
transform: translateY(50%) scale(0.75);
|
|
745
736
|
/**
|
|
746
737
|
* Label text should not extend
|
|
@@ -749,29 +740,6 @@
|
|
|
749
740
|
max-width: calc(100% / 0.75);
|
|
750
741
|
}
|
|
751
742
|
|
|
752
|
-
.start-slot-wrapper, .end-slot-wrapper {
|
|
753
|
-
padding-left: 0;
|
|
754
|
-
padding-right: 0;
|
|
755
|
-
padding-top: var(--padding-top);
|
|
756
|
-
padding-bottom: var(--padding-bottom);
|
|
757
|
-
display: flex;
|
|
758
|
-
flex-shrink: 0;
|
|
759
|
-
align-self: start;
|
|
760
|
-
}
|
|
761
|
-
|
|
762
|
-
::slotted([slot=start]),
|
|
763
|
-
::slotted([slot=end]) {
|
|
764
|
-
margin-top: 0;
|
|
765
|
-
}
|
|
766
|
-
|
|
767
|
-
::slotted([slot=start]) {
|
|
768
|
-
margin-inline-end: 16px;
|
|
769
|
-
}
|
|
770
|
-
|
|
771
|
-
::slotted([slot=end]) {
|
|
772
|
-
margin-inline-start: 16px;
|
|
773
|
-
}
|
|
774
|
-
|
|
775
743
|
/**
|
|
776
744
|
* Convert a font size to a dynamic font size.
|
|
777
745
|
* Fonts that participate in Dynamic Type should use
|
|
@@ -13,8 +13,6 @@ import { getCounterText } from "../input/input.utils";
|
|
|
13
13
|
* @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
|
|
14
14
|
*
|
|
15
15
|
* @slot label - The label text to associate with the textarea. Use the `labelPlacement` property to control where the label is placed relative to the textarea. Use this if you need to render a label with custom HTML. (EXPERIMENTAL)
|
|
16
|
-
* @slot start - Content to display at the leading edge of the textarea. (EXPERIMENTAL)
|
|
17
|
-
* @slot end - Content to display at the trailing edge of the textarea. (EXPERIMENTAL)
|
|
18
16
|
*/
|
|
19
17
|
export class Textarea {
|
|
20
18
|
constructor() {
|
|
@@ -123,7 +121,7 @@ export class Textarea {
|
|
|
123
121
|
connectedCallback() {
|
|
124
122
|
const { el } = this;
|
|
125
123
|
this.legacyFormController = createLegacyFormController(el);
|
|
126
|
-
this.slotMutationController = createSlotMutationController(el,
|
|
124
|
+
this.slotMutationController = createSlotMutationController(el, 'label', () => forceUpdate(this));
|
|
127
125
|
this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
|
|
128
126
|
this.emitStyle();
|
|
129
127
|
this.debounceChanged();
|
|
@@ -191,8 +189,6 @@ export class Textarea {
|
|
|
191
189
|
'has-placeholder': this.placeholder !== undefined,
|
|
192
190
|
'has-value': this.hasValue(),
|
|
193
191
|
'has-focus': this.hasFocus,
|
|
194
|
-
// TODO(FW-2876): remove this
|
|
195
|
-
legacy: !!this.legacy,
|
|
196
192
|
});
|
|
197
193
|
}
|
|
198
194
|
}
|
|
@@ -364,41 +360,20 @@ Developers can use the "legacy" property to continue using the legacy form marku
|
|
|
364
360
|
return (h("div", { class: "textarea-bottom" }, this.renderHintText(), this.renderCounter()));
|
|
365
361
|
}
|
|
366
362
|
renderTextarea() {
|
|
367
|
-
const { inputId, disabled, fill, shape, labelPlacement
|
|
363
|
+
const { inputId, disabled, fill, shape, labelPlacement } = this;
|
|
368
364
|
const mode = getIonMode(this);
|
|
369
365
|
const value = this.getValue();
|
|
370
366
|
const inItem = hostContext('ion-item', this.el);
|
|
371
367
|
const shouldRenderHighlight = mode === 'md' && fill !== 'outline' && !inItem;
|
|
372
|
-
const hasValue = this.hasValue();
|
|
373
|
-
const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
|
|
374
|
-
/**
|
|
375
|
-
* If the label is stacked, it should always sit above the textarea.
|
|
376
|
-
* For floating labels, the label should move above the textarea if
|
|
377
|
-
* the textarea has a value, is focused, or has anything in either
|
|
378
|
-
* the start or end slot.
|
|
379
|
-
*
|
|
380
|
-
* If there is content in the start slot, the label would overlap
|
|
381
|
-
* it if not forced to float. This is also applied to the end slot
|
|
382
|
-
* because with the default or solid fills, the textarea is not
|
|
383
|
-
* vertically centered in the container, but the label is. This
|
|
384
|
-
* causes the slots and label to appear vertically offset from each
|
|
385
|
-
* other when the label isn't floating above the input. This doesn't
|
|
386
|
-
* apply to the outline fill, but this was not accounted for to keep
|
|
387
|
-
* things consistent.
|
|
388
|
-
*
|
|
389
|
-
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
390
|
-
*/
|
|
391
|
-
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
|
|
392
368
|
return (h(Host, { class: createColorClasses(this.color, {
|
|
393
369
|
[mode]: true,
|
|
394
|
-
'has-value': hasValue,
|
|
395
|
-
'has-focus': hasFocus,
|
|
396
|
-
'label-floating': labelShouldFloat,
|
|
370
|
+
'has-value': this.hasValue(),
|
|
371
|
+
'has-focus': this.hasFocus,
|
|
397
372
|
[`textarea-fill-${fill}`]: fill !== undefined,
|
|
398
373
|
[`textarea-shape-${shape}`]: shape !== undefined,
|
|
399
374
|
[`textarea-label-placement-${labelPlacement}`]: true,
|
|
400
375
|
'textarea-disabled': disabled,
|
|
401
|
-
}) }, h("label", { class: "textarea-wrapper"
|
|
376
|
+
}) }, h("label", { class: "textarea-wrapper" }, this.renderLabelContainer(), h("div", { class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, h("textarea", Object.assign({ class: "native-textarea", ref: (el) => (this.nativeInput = el), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown }, this.inheritedAttributes), value)), shouldRenderHighlight && h("div", { class: "textarea-highlight" })), this.renderBottomContent()));
|
|
402
377
|
}
|
|
403
378
|
render() {
|
|
404
379
|
const { legacyFormController } = this;
|