@ionic/core 7.5.4-dev.11699404450.136700d7 → 7.5.4-dev.11699632730.1e6d9b70
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 +2 -0
- package/components/form-controller.js +5 -1
- package/components/index4.js +10 -12
- package/components/index5.js +0 -22
- package/components/input-shims.js +12 -7
- package/components/ion-datetime.js +2 -2
- package/components/ion-input.js +2 -0
- package/components/ion-range.js +2 -0
- package/components/ion-select.js +5 -25
- package/components/ion-skeleton-text.js +14 -1
- package/components/ion-textarea.js +2 -0
- package/components/ion-toast.js +13 -18
- package/components/ion-toggle.js +2 -0
- package/components/item.js +2 -2
- package/components/label.js +2 -2
- package/components/list.js +2 -2
- package/components/radio-group.js +3 -1
- package/components/radio.js +42 -2
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/css/themes/dark.css +135 -0
- package/css/themes/dark.css.map +1 -0
- package/css/utils.bundle.css +133 -0
- package/css/utils.bundle.css.map +1 -1
- package/dist/cjs/{animation-1083855c.js → animation-d101aa7a.js} +13 -12
- package/dist/cjs/{button-active-625d1d77.js → button-active-69c3bee4.js} +1 -1
- package/dist/cjs/{capacitor-2ffba62a.js → capacitor-f68447d3.js} +1 -1
- package/dist/cjs/compare-with-utils-c0444525.js +44 -0
- package/dist/cjs/{form-controller-9343050c.js → form-controller-5e223b54.js} +5 -1
- package/dist/cjs/{haptic-678abc9f.js → haptic-a74c2767.js} +1 -1
- package/dist/cjs/{index-3659e3a5.js → index-9146d04a.js} +11 -13
- package/dist/cjs/{index-135a6097.js → index-adbcffee.js} +2 -2
- package/dist/cjs/index-c8d52405.js +10 -0
- package/dist/cjs/{index-9f379eaa.js → index-e9634bc9.js} +1 -1
- package/dist/cjs/index.cjs.js +8 -8
- package/dist/cjs/{input-shims-b0a75a01.js → input-shims-3e3f35b9.js} +15 -10
- package/dist/cjs/{input.utils-0fe3097c.js → input.utils-590f0f18.js} +1 -1
- 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 +3 -1
- package/dist/cjs/ion-datetime_3.cjs.entry.js +7 -7
- package/dist/cjs/ion-input.cjs.entry.js +6 -4
- package/dist/cjs/ion-item_8.cjs.entry.js +19 -6
- 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 +7 -7
- 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 +8 -3
- package/dist/cjs/ion-range.cjs.entry.js +3 -1
- 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 +13 -32
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-textarea.cjs.entry.js +6 -4
- package/dist/cjs/ion-toast.cjs.entry.js +16 -21
- package/dist/cjs/ion-toggle.cjs.entry.js +6 -4
- package/dist/cjs/ionic.cjs.js +2 -2
- package/dist/cjs/{ios.transition-b71990aa.js → ios.transition-7972d9e3.js} +3 -3
- package/dist/cjs/{keyboard-fd7db491.js → keyboard-43df0428.js} +1 -1
- package/dist/cjs/{keyboard-38f2bb7b.js → keyboard-840107b3.js} +3 -3
- package/dist/cjs/{keyboard-controller-50beb83a.js → keyboard-controller-019f42df.js} +2 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{md.transition-3caa648a.js → md.transition-6e61a10f.js} +3 -3
- package/dist/cjs/{notch-controller-f4f6af5d.js → notch-controller-c22d1344.js} +1 -1
- package/dist/cjs/{overlays-6d1daf80.js → overlays-d80a2cf2.js} +1 -1
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/checkbox/checkbox.js +2 -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/input/input.js +2 -0
- package/dist/collection/components/item/item.ios.css +25 -3
- package/dist/collection/components/item/item.md.css +25 -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/list/list.ios.css +1 -15
- package/dist/collection/components/list/list.md.css +3 -41
- package/dist/collection/components/list/test/lines/list.e2e.js +0 -143
- package/dist/collection/components/note/test/a11y/note.e2e.js +43 -0
- package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +0 -5
- package/dist/collection/components/radio/radio.js +5 -2
- package/dist/collection/components/radio-group/radio-group.js +25 -1
- package/dist/collection/components/range/range.js +2 -0
- package/dist/collection/components/select/select.ios.css +5 -0
- package/dist/collection/components/select/select.js +4 -24
- package/dist/collection/components/select/select.md.css +5 -0
- package/dist/collection/components/select/test/legacy/wrapping/select.e2e.js +1 -1
- package/dist/collection/components/skeleton-text/skeleton-text.js +39 -0
- package/dist/collection/components/textarea/textarea.js +2 -0
- package/dist/collection/components/toast/animations/md.enter.js +2 -2
- package/dist/collection/components/toast/animations/utils.js +9 -14
- package/dist/collection/components/toast/toast.ios.css +10 -10
- package/dist/collection/components/toast/toast.md.css +10 -0
- package/dist/collection/components/toggle/toggle.js +2 -0
- package/dist/collection/utils/animation/animation.js +12 -11
- 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/form-controller.js +5 -1
- 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/docs.json +44 -3
- package/dist/esm/{animation-8aa13916.js → animation-cf3dd234.js} +13 -12
- package/dist/esm/{button-active-1fb561b0.js → button-active-109ba60d.js} +1 -1
- package/dist/esm/{capacitor-b4979570.js → capacitor-f1f25364.js} +1 -1
- package/dist/esm/compare-with-utils-4928c09d.js +41 -0
- package/dist/esm/{form-controller-64edeaad.js → form-controller-ed77647a.js} +5 -1
- package/dist/esm/{haptic-1243b917.js → haptic-1a66d69f.js} +1 -1
- package/dist/esm/{index-47a510cf.js → index-50582f1c.js} +2 -2
- package/dist/esm/{index-056b43e7.js → index-6a48e009.js} +11 -13
- package/dist/esm/index-a5d50daf.js +7 -0
- package/dist/esm/{index-f0cc4e14.js → index-c9e82353.js} +1 -1
- package/dist/esm/index.js +8 -8
- package/dist/esm/{input-shims-d0c93e5d.js → input-shims-1d767845.js} +14 -9
- package/dist/esm/{input.utils-ec063df4.js → input.utils-d04a7212.js} +1 -1
- 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 +3 -1
- package/dist/esm/ion-datetime_3.entry.js +7 -7
- package/dist/esm/ion-input.entry.js +6 -4
- package/dist/esm/ion-item_8.entry.js +19 -6
- 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 +7 -7
- 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 +8 -3
- package/dist/esm/ion-range.entry.js +3 -1
- 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 +9 -28
- package/dist/esm/ion-tab-bar_2.entry.js +4 -4
- package/dist/esm/ion-textarea.entry.js +6 -4
- package/dist/esm/ion-toast.entry.js +16 -21
- package/dist/esm/ion-toggle.entry.js +6 -4
- package/dist/esm/ionic.js +2 -2
- package/dist/esm/{ios.transition-b53e19a3.js → ios.transition-e20d71bc.js} +3 -3
- package/dist/esm/{keyboard-b551279d.js → keyboard-9f771a04.js} +3 -3
- package/dist/esm/{keyboard-b063f012.js → keyboard-b6230bfb.js} +1 -1
- package/dist/esm/{keyboard-controller-0c2dce71.js → keyboard-controller-3f0faa10.js} +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{md.transition-276c1159.js → md.transition-a8469407.js} +3 -3
- package/dist/esm/{notch-controller-8c9c0e54.js → notch-controller-3f79197e.js} +1 -1
- package/dist/esm/{overlays-928a4afe.js → overlays-a31c8878.js} +1 -1
- package/dist/esm-es5/{animation-8aa13916.js → animation-cf3dd234.js} +1 -1
- package/dist/esm-es5/{button-active-1fb561b0.js → button-active-109ba60d.js} +1 -1
- package/dist/esm-es5/{capacitor-b4979570.js → capacitor-f1f25364.js} +1 -1
- package/dist/esm-es5/compare-with-utils-4928c09d.js +4 -0
- package/dist/esm-es5/{form-controller-64edeaad.js → form-controller-ed77647a.js} +1 -1
- package/dist/esm-es5/{haptic-1243b917.js → haptic-1a66d69f.js} +1 -1
- package/dist/esm-es5/{index-47a510cf.js → index-50582f1c.js} +1 -1
- package/dist/esm-es5/index-6a48e009.js +4 -0
- package/dist/esm-es5/index-c9e82353.js +4 -0
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/input-shims-1d767845.js +4 -0
- package/dist/esm-es5/input.utils-d04a7212.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-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-b53e19a3.js → ios.transition-e20d71bc.js} +1 -1
- package/dist/esm-es5/{keyboard-b551279d.js → keyboard-9f771a04.js} +1 -1
- package/dist/esm-es5/{keyboard-b063f012.js → keyboard-b6230bfb.js} +1 -1
- package/dist/esm-es5/{keyboard-controller-0c2dce71.js → keyboard-controller-3f0faa10.js} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/{md.transition-276c1159.js → md.transition-a8469407.js} +1 -1
- package/dist/esm-es5/{notch-controller-8c9c0e54.js → notch-controller-3f79197e.js} +1 -1
- package/dist/esm-es5/{overlays-928a4afe.js → overlays-a31c8878.js} +1 -1
- package/dist/html.html-data.json +5 -1
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/ionic.js +1 -1
- package/dist/ionic/{p-c1db8914.system.js → p-02663394.system.js} +1 -1
- package/dist/ionic/{p-63676ade.system.entry.js → p-0becf7b5.system.entry.js} +1 -1
- package/dist/ionic/{p-8cc04bea.system.js → p-0c40f7d3.system.js} +1 -1
- package/dist/ionic/p-11104d0d.entry.js +4 -0
- package/dist/ionic/{p-81c818e7.js → p-11cb4e19.js} +1 -1
- package/dist/ionic/p-139bd79d.system.entry.js +4 -0
- package/dist/ionic/{p-a07cd4aa.system.js → p-13dd7d20.system.js} +1 -1
- package/dist/ionic/{p-276afddd.js → p-1667596c.js} +1 -1
- package/dist/ionic/{p-60f55715.system.entry.js → p-1e59dd04.system.entry.js} +1 -1
- package/dist/ionic/p-265fec8a.entry.js +4 -0
- package/dist/ionic/{p-da3e5259.entry.js → p-2fb115dc.entry.js} +1 -1
- package/dist/ionic/{p-fb10190f.js → p-307963db.js} +1 -1
- package/dist/ionic/p-314c4dee.js +4 -0
- package/dist/ionic/p-3554b264.js +4 -0
- package/dist/ionic/{p-59f491c5.entry.js → p-35787a6f.entry.js} +1 -1
- package/dist/ionic/{p-bf5a7db2.system.entry.js → p-3962542f.system.entry.js} +1 -1
- package/dist/ionic/{p-40c0c580.system.entry.js → p-3a769110.system.entry.js} +1 -1
- package/dist/ionic/p-3afb9c3d.entry.js +4 -0
- package/dist/ionic/p-3bc3d880.system.js +4 -0
- package/dist/ionic/{p-55ed230e.system.js → p-3d726a67.system.js} +1 -1
- package/dist/ionic/{p-33986d02.entry.js → p-3fc0b7ba.entry.js} +1 -1
- package/dist/ionic/p-43716898.js +4 -0
- package/dist/ionic/{p-c4e61a72.entry.js → p-47826f19.entry.js} +1 -1
- package/dist/ionic/p-494e75ad.js +4 -0
- package/dist/ionic/{p-6867d3af.system.entry.js → p-4c50b357.system.entry.js} +1 -1
- package/dist/ionic/{p-1a1fcc8b.system.js → p-4c75cb48.system.js} +1 -1
- package/dist/ionic/p-4e3c07a6.system.js +4 -0
- package/dist/ionic/p-4e4ee05e.js +4 -0
- package/dist/ionic/{p-07fd5d40.system.entry.js → p-50375f3b.system.entry.js} +1 -1
- package/dist/ionic/p-539c09e8.system.entry.js +4 -0
- package/dist/ionic/{p-80baef4f.entry.js → p-53b1930e.entry.js} +1 -1
- package/dist/ionic/p-561cc050.system.js +4 -0
- package/dist/ionic/p-57b14769.js +4 -0
- package/dist/ionic/{p-8cf94fc1.js → p-5885e9af.js} +1 -1
- package/dist/ionic/{p-8704e922.system.entry.js → p-59107f99.system.entry.js} +1 -1
- package/dist/ionic/{p-b923f3d7.js → p-6a309574.js} +1 -1
- package/dist/ionic/p-6b45cfd0.system.entry.js +4 -0
- package/dist/ionic/p-70dcf429.js +4 -0
- package/dist/ionic/p-710cea83.system.js +4 -0
- package/dist/ionic/{p-e1e64156.system.entry.js → p-71e70a57.system.entry.js} +1 -1
- package/dist/ionic/{p-565d1dc5.entry.js → p-75338011.entry.js} +1 -1
- package/dist/ionic/p-7acd17bc.entry.js +4 -0
- package/dist/ionic/p-7d68e4ea.entry.js +4 -0
- package/dist/ionic/{p-3632220b.system.js → p-7def197f.system.js} +1 -1
- package/dist/ionic/p-8140a084.entry.js +4 -0
- package/dist/ionic/{p-af589369.system.entry.js → p-90020ef0.system.entry.js} +1 -1
- package/dist/ionic/{p-b4b4bb29.system.js → p-9292fd42.system.js} +1 -1
- package/dist/ionic/p-92ac915c.system.js +4 -0
- package/dist/ionic/{p-8b951f8a.system.entry.js → p-9471d511.system.entry.js} +1 -1
- package/dist/ionic/{p-677a233c.system.entry.js → p-957f3028.system.entry.js} +1 -1
- package/dist/ionic/{p-41477ad9.system.js → p-958f1c70.system.js} +1 -1
- package/dist/ionic/{p-7d3be70f.system.js → p-98c70e3c.system.js} +1 -1
- package/dist/ionic/{p-a843f88e.entry.js → p-9939c98e.entry.js} +1 -1
- package/dist/ionic/{p-eb5283b6.entry.js → p-999a7271.entry.js} +1 -1
- package/dist/ionic/{p-a99f55ed.system.entry.js → p-9b34caa0.system.entry.js} +1 -1
- package/dist/ionic/{p-1589d649.system.entry.js → p-a03566c4.system.entry.js} +1 -1
- package/dist/ionic/{p-419eb426.js → p-a135e3ba.js} +1 -1
- package/dist/ionic/p-a4e4dba1.entry.js +4 -0
- package/dist/ionic/p-a6b819ca.entry.js +4 -0
- package/dist/ionic/{p-940a581d.system.js → p-abaa9b48.system.js} +1 -1
- package/dist/ionic/{p-ab4cff27.system.js → p-aec8a70a.system.js} +1 -1
- package/dist/ionic/{p-a5b3aa82.entry.js → p-b86c6c05.entry.js} +1 -1
- package/dist/ionic/{p-16b94c87.system.entry.js → p-bc48e521.system.entry.js} +1 -1
- package/dist/ionic/p-be499f29.entry.js +4 -0
- package/dist/ionic/{p-a3545dad.entry.js → p-c09fa14d.entry.js} +1 -1
- package/dist/ionic/p-c2db1374.system.js +4 -0
- package/dist/ionic/{p-09ec6b90.entry.js → p-c32a6c04.entry.js} +1 -1
- package/dist/ionic/p-c3547c7a.system.js +4 -0
- package/dist/ionic/p-ca5cf574.js +4 -0
- package/dist/ionic/{p-82c503f7.entry.js → p-ce20c101.entry.js} +1 -1
- package/dist/ionic/p-d54a8393.system.entry.js +4 -0
- package/dist/ionic/{p-f87219d2.js → p-df18d20d.js} +1 -1
- package/dist/ionic/{p-3bad5c1a.js → p-e5fd9f10.js} +1 -1
- package/dist/ionic/{p-cbbefe72.system.entry.js → p-e66f7d10.system.entry.js} +1 -1
- package/dist/ionic/{p-ccdcb022.system.js → p-e7d20dfb.system.js} +1 -1
- package/dist/ionic/{p-084413f2.system.entry.js → p-e91c7eb4.system.entry.js} +1 -1
- package/dist/ionic/p-e9fe3c8b.system.entry.js +4 -0
- package/dist/ionic/{p-e96da585.system.entry.js → p-ed8a02a2.system.entry.js} +1 -1
- package/dist/ionic/{p-a2200630.js → p-edd568c5.js} +1 -1
- package/dist/ionic/p-f7769c83.js +4 -0
- package/dist/ionic/{p-bba2ce59.system.js → p-f9a641fa.system.js} +1 -1
- package/dist/ionic/p-fa67d712.entry.js +4 -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/router/router.d.ts +2 -1
- package/dist/types/components/select/select.d.ts +4 -1
- package/dist/types/components/skeleton-text/skeleton-text.d.ts +9 -1
- package/dist/types/components/toast/animations/utils.d.ts +6 -4
- package/dist/types/components.d.ts +27 -4
- package/dist/types/interface.d.ts +1 -5
- 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/hydrate/index.js +133 -113
- package/package.json +4 -2
- 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-056b43e7.js +0 -4
- package/dist/esm-es5/index-f0cc4e14.js +0 -4
- package/dist/esm-es5/input-shims-d0c93e5d.js +0 -4
- package/dist/esm-es5/input.utils-ec063df4.js +0 -4
- package/dist/ionic/p-0816f061.entry.js +0 -4
- package/dist/ionic/p-28acf48d.system.entry.js +0 -4
- package/dist/ionic/p-2e8e0045.js +0 -4
- package/dist/ionic/p-3602001b.system.js +0 -4
- package/dist/ionic/p-3a9f1ddc.entry.js +0 -4
- package/dist/ionic/p-49cfa5b2.entry.js +0 -4
- package/dist/ionic/p-4c75aded.entry.js +0 -4
- package/dist/ionic/p-4eb8645b.system.entry.js +0 -4
- package/dist/ionic/p-5370e786.js +0 -4
- package/dist/ionic/p-5f4c4347.system.entry.js +0 -4
- package/dist/ionic/p-5feb31c6.entry.js +0 -4
- package/dist/ionic/p-67eecef4.system.js +0 -4
- package/dist/ionic/p-7a3766ec.entry.js +0 -4
- package/dist/ionic/p-82c17a8e.system.entry.js +0 -4
- package/dist/ionic/p-852b83c7.entry.js +0 -4
- package/dist/ionic/p-92b8533f.entry.js +0 -4
- package/dist/ionic/p-97c65aa5.js +0 -4
- package/dist/ionic/p-9ab6f3e6.system.js +0 -4
- package/dist/ionic/p-a8e2b2b0.js +0 -4
- package/dist/ionic/p-b1075d53.system.js +0 -4
- package/dist/ionic/p-b6be9a42.system.js +0 -4
- package/dist/ionic/p-c3278d57.js +0 -4
- package/dist/ionic/p-c6e9ffd6.js +0 -4
- package/dist/ionic/p-cc196b34.js +0 -4
- package/dist/ionic/p-d1de1188.js +0 -4
- package/dist/ionic/p-df9d7fe1.entry.js +0 -4
- package/dist/ionic/p-f0cd78e0.system.entry.js +0 -4
- package/dist/ionic/p-f76c3181.entry.js +0 -4
- package/dist/ionic/p-ff5a10f9.system.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
|
@@ -208,6 +208,7 @@
|
|
|
208
208
|
/* stylelint-enable */
|
|
209
209
|
display: flex;
|
|
210
210
|
position: relative;
|
|
211
|
+
flex-wrap: wrap;
|
|
211
212
|
align-items: inherit;
|
|
212
213
|
justify-content: inherit;
|
|
213
214
|
width: 100%;
|
|
@@ -219,8 +220,8 @@
|
|
|
219
220
|
outline: none;
|
|
220
221
|
background: var(--background);
|
|
221
222
|
overflow: inherit;
|
|
222
|
-
box-sizing: border-box;
|
|
223
223
|
z-index: 1;
|
|
224
|
+
box-sizing: border-box;
|
|
224
225
|
}
|
|
225
226
|
:host-context([dir=rtl]) .item-native {
|
|
226
227
|
padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
|
|
@@ -239,6 +240,10 @@
|
|
|
239
240
|
}
|
|
240
241
|
}
|
|
241
242
|
|
|
243
|
+
:host(.item-legacy) .item-native {
|
|
244
|
+
flex-wrap: unset;
|
|
245
|
+
}
|
|
246
|
+
|
|
242
247
|
.item-native::-moz-focus-inner {
|
|
243
248
|
border: 0;
|
|
244
249
|
}
|
|
@@ -274,10 +279,12 @@ button, a {
|
|
|
274
279
|
/* stylelint-enable */
|
|
275
280
|
display: flex;
|
|
276
281
|
position: relative;
|
|
277
|
-
flex: 1;
|
|
282
|
+
flex: 1 0 auto;
|
|
278
283
|
flex-direction: inherit;
|
|
284
|
+
flex-wrap: wrap;
|
|
279
285
|
align-items: inherit;
|
|
280
286
|
align-self: stretch;
|
|
287
|
+
max-width: 100%;
|
|
281
288
|
min-height: inherit;
|
|
282
289
|
border-width: var(--inner-border-width);
|
|
283
290
|
border-style: var(--border-style);
|
|
@@ -303,6 +310,12 @@ button, a {
|
|
|
303
310
|
}
|
|
304
311
|
}
|
|
305
312
|
|
|
313
|
+
:host(.item-legacy) .item-inner {
|
|
314
|
+
flex: 1;
|
|
315
|
+
flex-wrap: unset;
|
|
316
|
+
max-width: unset;
|
|
317
|
+
}
|
|
318
|
+
|
|
306
319
|
.item-bottom {
|
|
307
320
|
margin-left: 0;
|
|
308
321
|
margin-right: 0;
|
|
@@ -366,6 +379,7 @@ button, a {
|
|
|
366
379
|
|
|
367
380
|
::slotted(ion-label:not([slot=end])) {
|
|
368
381
|
flex: 1;
|
|
382
|
+
width: min-content;
|
|
369
383
|
}
|
|
370
384
|
|
|
371
385
|
:host(.item-input) {
|
|
@@ -374,15 +388,23 @@ button, a {
|
|
|
374
388
|
|
|
375
389
|
.input-wrapper {
|
|
376
390
|
display: flex;
|
|
377
|
-
flex: 1;
|
|
391
|
+
flex: 1 0 auto;
|
|
378
392
|
flex-direction: inherit;
|
|
393
|
+
flex-wrap: wrap;
|
|
379
394
|
align-items: inherit;
|
|
380
395
|
align-self: stretch;
|
|
396
|
+
max-width: 100%;
|
|
381
397
|
text-overflow: ellipsis;
|
|
382
398
|
overflow: inherit;
|
|
383
399
|
box-sizing: border-box;
|
|
384
400
|
}
|
|
385
401
|
|
|
402
|
+
:host(.item-legacy) .input-wrapper {
|
|
403
|
+
flex: 1;
|
|
404
|
+
flex-wrap: unset;
|
|
405
|
+
max-width: unset;
|
|
406
|
+
}
|
|
407
|
+
|
|
386
408
|
:host(.item-label-stacked),
|
|
387
409
|
:host(.item-label-floating) {
|
|
388
410
|
align-items: start;
|
|
@@ -29,7 +29,7 @@ configs().forEach(({ title, screenshot, config }) => {
|
|
|
29
29
|
</ion-item>
|
|
30
30
|
|
|
31
31
|
<ion-item>
|
|
32
|
-
<ion-label> Single line text that should have ellipses when it doesn't all fit in the item</ion-label>
|
|
32
|
+
<ion-label class="ion-text-nowrap"> Single line text that should have ellipses when it doesn't all fit in the item</ion-label>
|
|
33
33
|
</ion-item>
|
|
34
34
|
</ion-list>
|
|
35
35
|
`, config);
|
|
@@ -11,7 +11,6 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
|
11
11
|
test('should not have visual regressions', async ({ page }) => {
|
|
12
12
|
await page.goto(`/src/components/item/test/disabled`, config);
|
|
13
13
|
await page.setIonViewport();
|
|
14
|
-
// TODO: FW-4037 - Fix label color inconsistency between disabled controls
|
|
15
14
|
await expect(page).toHaveScreenshot(screenshot(`item-disabled-diff`));
|
|
16
15
|
});
|
|
17
16
|
});
|
|
@@ -41,17 +41,24 @@
|
|
|
41
41
|
font-family: var(--ion-font-family, inherit);
|
|
42
42
|
font-size: inherit;
|
|
43
43
|
text-overflow: ellipsis;
|
|
44
|
+
box-sizing: border-box;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
:host-context(.item-legacy) {
|
|
44
48
|
white-space: nowrap;
|
|
45
49
|
overflow: hidden;
|
|
46
|
-
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:host-context(.item:not(.item-input):not(.item-legacy)) {
|
|
53
|
+
flex-grow: 1;
|
|
47
54
|
}
|
|
48
55
|
|
|
49
56
|
:host(.ion-color) {
|
|
50
57
|
color: var(--ion-color-base);
|
|
51
58
|
}
|
|
52
59
|
|
|
53
|
-
:host(.ion-text-
|
|
54
|
-
|
|
60
|
+
:host(.ion-text-nowrap) {
|
|
61
|
+
overflow: hidden;
|
|
55
62
|
}
|
|
56
63
|
|
|
57
64
|
:host-context(.item-interactive-disabled:not(.item-multiple-inputs)) {
|
|
@@ -70,6 +77,10 @@
|
|
|
70
77
|
align-self: baseline;
|
|
71
78
|
}
|
|
72
79
|
|
|
80
|
+
:host-context(.item-skeleton-text) {
|
|
81
|
+
overflow: hidden;
|
|
82
|
+
}
|
|
83
|
+
|
|
73
84
|
:host(.label-fixed) {
|
|
74
85
|
flex: 0 0 100px;
|
|
75
86
|
width: 100px;
|
|
@@ -41,17 +41,24 @@
|
|
|
41
41
|
font-family: var(--ion-font-family, inherit);
|
|
42
42
|
font-size: inherit;
|
|
43
43
|
text-overflow: ellipsis;
|
|
44
|
+
box-sizing: border-box;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
:host-context(.item-legacy) {
|
|
44
48
|
white-space: nowrap;
|
|
45
49
|
overflow: hidden;
|
|
46
|
-
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:host-context(.item:not(.item-input):not(.item-legacy)) {
|
|
53
|
+
flex-grow: 1;
|
|
47
54
|
}
|
|
48
55
|
|
|
49
56
|
:host(.ion-color) {
|
|
50
57
|
color: var(--ion-color-base);
|
|
51
58
|
}
|
|
52
59
|
|
|
53
|
-
:host(.ion-text-
|
|
54
|
-
|
|
60
|
+
:host(.ion-text-nowrap) {
|
|
61
|
+
overflow: hidden;
|
|
55
62
|
}
|
|
56
63
|
|
|
57
64
|
:host-context(.item-interactive-disabled:not(.item-multiple-inputs)) {
|
|
@@ -70,6 +77,10 @@
|
|
|
70
77
|
align-self: baseline;
|
|
71
78
|
}
|
|
72
79
|
|
|
80
|
+
:host-context(.item-skeleton-text) {
|
|
81
|
+
overflow: hidden;
|
|
82
|
+
}
|
|
83
|
+
|
|
73
84
|
:host(.label-fixed) {
|
|
74
85
|
flex: 0 0 100px;
|
|
75
86
|
width: 100px;
|
|
@@ -130,21 +130,7 @@ ion-list.list-inset {
|
|
|
130
130
|
border-radius: 10px;
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
|
|
134
|
-
* These selectors ensure the last item in the list
|
|
135
|
-
* has the correct border.
|
|
136
|
-
* We need to consider the following scenarios:
|
|
137
|
-
1. The only item in a list.
|
|
138
|
-
2. The last item in a list as long as it is not the only item.
|
|
139
|
-
3. The item in the last item-sliding in a list.
|
|
140
|
-
* Note that we do not select ion-item:last-of-type
|
|
141
|
-
* because that will cause the borders to disappear on
|
|
142
|
-
* items in an item-sliding when the item is the last
|
|
143
|
-
* element in the item-sliding container.
|
|
144
|
-
*/
|
|
145
|
-
.list-ios.list-inset ion-item:only-child,
|
|
146
|
-
.list-ios.list-inset ion-item:not(:only-of-type):last-of-type,
|
|
147
|
-
.list-ios.list-inset ion-item-sliding:last-of-type ion-item {
|
|
133
|
+
.list-ios.list-inset ion-item:last-child {
|
|
148
134
|
--border-width: 0;
|
|
149
135
|
--inner-border-width: 0;
|
|
150
136
|
}
|
|
@@ -166,50 +166,12 @@ ion-list.list-inset {
|
|
|
166
166
|
border-radius: 2px;
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
|
|
170
|
-
* These selectors ensure the first item in the list
|
|
171
|
-
* has the correct radius.
|
|
172
|
-
* We need to consider the following scenarios:
|
|
173
|
-
1. The first item in a list as long as it is not the only item.
|
|
174
|
-
2. The item in the first item-sliding in a list.
|
|
175
|
-
* Note that we do not select "ion-item-sliding ion-item:first-of-type"
|
|
176
|
-
* because that will cause the borders to disappear on
|
|
177
|
-
* items in an item-sliding when the item is the first
|
|
178
|
-
* element in the item-sliding container.
|
|
179
|
-
*/
|
|
180
|
-
.list-md.list-inset ion-item:not(:only-of-type):first-of-type,
|
|
181
|
-
.list-md.list-inset ion-item-sliding:first-of-type ion-item {
|
|
169
|
+
.list-md.list-inset ion-item:first-child {
|
|
182
170
|
--border-radius: 2px 2px 0 0;
|
|
183
171
|
}
|
|
184
172
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
* has the correct radius and border.
|
|
188
|
-
* We need to consider the following scenarios:
|
|
189
|
-
1. The last item in a list as long as it is not the only item.
|
|
190
|
-
2. The item in the last item-sliding in a list.
|
|
191
|
-
* Note that we do not select "ion-item-sliding ion-item:last-of-type"
|
|
192
|
-
* because that will cause the borders to disappear on
|
|
193
|
-
* items in an item-sliding when the item is the last
|
|
194
|
-
* element in the item-sliding container.
|
|
195
|
-
*/
|
|
196
|
-
.list-md.list-inset ion-item:not(:only-of-type):last-of-type,
|
|
197
|
-
.list-md.list-inset ion-item-sliding:last-of-type ion-item {
|
|
198
|
-
--border-radius: 0 0 2px 2px;
|
|
199
|
-
--border-width: 0;
|
|
200
|
-
--inner-border-width: 0;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* The only item in a list should have a border radius
|
|
205
|
-
* on all corners.
|
|
206
|
-
* We target :only-child instead of :only-of-type
|
|
207
|
-
* otherwise borders will disappear on items inside of
|
|
208
|
-
* ion-item-sliding because the item will be the only
|
|
209
|
-
* one of its type inside of the ion-item-sliding group.
|
|
210
|
-
*/
|
|
211
|
-
.list-md.list-inset ion-item:only-child {
|
|
212
|
-
--border-radius: 2px;
|
|
173
|
+
.list-md.list-inset ion-item:last-child {
|
|
174
|
+
--border-radius: 0 0 2px, 2px;
|
|
213
175
|
--border-width: 0;
|
|
214
176
|
--inner-border-width: 0;
|
|
215
177
|
}
|
|
@@ -22,146 +22,3 @@ configs().forEach(({ title, screenshot, config }) => {
|
|
|
22
22
|
});
|
|
23
23
|
});
|
|
24
24
|
});
|
|
25
|
-
/**
|
|
26
|
-
* Padding and border color ensures the bottom border can be easily seen if it regresses.
|
|
27
|
-
* The background color ensures that any border radius values can be seen.
|
|
28
|
-
*/
|
|
29
|
-
configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
30
|
-
test.describe(title('list: lines with children'), () => {
|
|
31
|
-
test('only item in inset list should not have line', async ({ page }) => {
|
|
32
|
-
test.info().annotations.push({
|
|
33
|
-
type: 'issue',
|
|
34
|
-
description: 'https://github.com/ionic-team/ionic-framework/issues/28435',
|
|
35
|
-
});
|
|
36
|
-
await page.setContent(`
|
|
37
|
-
<style>
|
|
38
|
-
#container {
|
|
39
|
-
padding: 10px;
|
|
40
|
-
background: #0088cc;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
ion-item {
|
|
44
|
-
--border-color: red;
|
|
45
|
-
}
|
|
46
|
-
</style>
|
|
47
|
-
<div id="container">
|
|
48
|
-
<ion-list inset="true">
|
|
49
|
-
<ion-item>
|
|
50
|
-
<ion-label>Item 0</ion-label>
|
|
51
|
-
</ion-item>
|
|
52
|
-
</ion-list>
|
|
53
|
-
</div>
|
|
54
|
-
`, config);
|
|
55
|
-
const container = page.locator('#container');
|
|
56
|
-
await expect(container).toHaveScreenshot(screenshot('inset-list-only-item-no-lines'));
|
|
57
|
-
});
|
|
58
|
-
test('last item in inset list with end options should not have line', async ({ page }) => {
|
|
59
|
-
test.info().annotations.push({
|
|
60
|
-
type: 'issue',
|
|
61
|
-
description: 'https://github.com/ionic-team/ionic-framework/issues/28435',
|
|
62
|
-
});
|
|
63
|
-
await page.setContent(`
|
|
64
|
-
<style>
|
|
65
|
-
#container {
|
|
66
|
-
padding: 10px;
|
|
67
|
-
background: #0088cc;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
ion-item {
|
|
71
|
-
--border-color: red;
|
|
72
|
-
}
|
|
73
|
-
</style>
|
|
74
|
-
<div id="container">
|
|
75
|
-
<ion-list inset="true">
|
|
76
|
-
<ion-item-sliding>
|
|
77
|
-
<ion-item>
|
|
78
|
-
<ion-label>Item 0</ion-label>
|
|
79
|
-
</ion-item>
|
|
80
|
-
<ion-item-options slot="end">
|
|
81
|
-
<ion-item-option color="warning">
|
|
82
|
-
<ion-icon slot="icon-only" name="pin"></ion-icon>
|
|
83
|
-
</ion-item-option>
|
|
84
|
-
</ion-item-options>
|
|
85
|
-
</ion-item-sliding>
|
|
86
|
-
|
|
87
|
-
<ion-item-sliding>
|
|
88
|
-
<ion-item>
|
|
89
|
-
<ion-label>Item 1</ion-label>
|
|
90
|
-
</ion-item>
|
|
91
|
-
<ion-item-options slot="end">
|
|
92
|
-
<ion-item-option color="warning">
|
|
93
|
-
<ion-icon slot="icon-only" name="pin"></ion-icon>
|
|
94
|
-
</ion-item-option>
|
|
95
|
-
</ion-item-options>
|
|
96
|
-
</ion-item-sliding>
|
|
97
|
-
|
|
98
|
-
<ion-item-sliding>
|
|
99
|
-
<ion-item>
|
|
100
|
-
<ion-label>Item 2</ion-label>
|
|
101
|
-
</ion-item>
|
|
102
|
-
<ion-item-options slot="end">
|
|
103
|
-
<ion-item-option color="warning">
|
|
104
|
-
<ion-icon slot="icon-only" name="pin"></ion-icon>
|
|
105
|
-
</ion-item-option>
|
|
106
|
-
</ion-item-options>
|
|
107
|
-
</ion-item-sliding>
|
|
108
|
-
</ion-list>
|
|
109
|
-
</div>
|
|
110
|
-
`, config);
|
|
111
|
-
const container = page.locator('#container');
|
|
112
|
-
await expect(container).toHaveScreenshot(screenshot('inset-list-end-options-no-lines'));
|
|
113
|
-
});
|
|
114
|
-
test('last item in inset list with start options should not have line', async ({ page }) => {
|
|
115
|
-
await page.setContent(`
|
|
116
|
-
<style>
|
|
117
|
-
#container {
|
|
118
|
-
padding: 10px;
|
|
119
|
-
background: #0088cc;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
ion-item {
|
|
123
|
-
--border-color: red;
|
|
124
|
-
}
|
|
125
|
-
</style>
|
|
126
|
-
<div id="container">
|
|
127
|
-
<ion-list inset="true">
|
|
128
|
-
<ion-item-sliding>
|
|
129
|
-
<ion-item-options slot="start">
|
|
130
|
-
<ion-item-option color="warning">
|
|
131
|
-
<ion-icon slot="icon-only" name="pin"></ion-icon>
|
|
132
|
-
</ion-item-option>
|
|
133
|
-
</ion-item-options>
|
|
134
|
-
<ion-item>
|
|
135
|
-
<ion-label>Item 0</ion-label>
|
|
136
|
-
</ion-item>
|
|
137
|
-
</ion-item-sliding>
|
|
138
|
-
|
|
139
|
-
<ion-item-sliding>
|
|
140
|
-
<ion-item-options slot="start">
|
|
141
|
-
<ion-item-option color="warning">
|
|
142
|
-
<ion-icon slot="icon-only" name="pin"></ion-icon>
|
|
143
|
-
</ion-item-option>
|
|
144
|
-
</ion-item-options>
|
|
145
|
-
<ion-item>
|
|
146
|
-
<ion-label>Item 1</ion-label>
|
|
147
|
-
</ion-item>
|
|
148
|
-
</ion-item-sliding>
|
|
149
|
-
|
|
150
|
-
<ion-item-sliding>
|
|
151
|
-
<ion-item-options slot="start">
|
|
152
|
-
<ion-item-option color="warning">
|
|
153
|
-
<ion-icon slot="icon-only" name="pin"></ion-icon>
|
|
154
|
-
</ion-item-option>
|
|
155
|
-
</ion-item-options>
|
|
156
|
-
<ion-item>
|
|
157
|
-
<ion-label>Item 2</ion-label>
|
|
158
|
-
</ion-item>
|
|
159
|
-
</ion-item-sliding>
|
|
160
|
-
</ion-list>
|
|
161
|
-
</div>
|
|
162
|
-
`, config);
|
|
163
|
-
const container = page.locator('#container');
|
|
164
|
-
await expect(container).toHaveScreenshot(screenshot('inset-list-start-options-no-lines'));
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
});
|
|
@@ -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
|
});
|
|
@@ -10,11 +10,6 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
|
10
10
|
test.describe(title('picker-internal: rendering'), () => {
|
|
11
11
|
test('inline pickers should not have visual regression', async ({ page }) => {
|
|
12
12
|
await page.goto(`/src/components/picker-internal/test/basic`, config);
|
|
13
|
-
const fullStack = page.locator('#inline button[data-value="full-stack"]');
|
|
14
|
-
const onion = page.locator('#inline button[data-value="onion"]');
|
|
15
|
-
await expect(fullStack).toHaveClass(/picker-item-active/);
|
|
16
|
-
await expect(onion).toHaveClass(/picker-item-active/);
|
|
17
|
-
await page.waitForChanges();
|
|
18
13
|
await expect(page.locator('#inline')).toHaveScreenshot(screenshot(`picker-internal-inline-diff`));
|
|
19
14
|
});
|
|
20
15
|
});
|
|
@@ -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";
|
|
@@ -23,7 +23,8 @@ export class Radio {
|
|
|
23
23
|
this.hasLoggedDeprecationWarning = false;
|
|
24
24
|
this.updateState = () => {
|
|
25
25
|
if (this.radioGroup) {
|
|
26
|
-
|
|
26
|
+
const { compareWith, value: radioGroupValue } = this.radioGroup;
|
|
27
|
+
this.checked = isOptionSelected(radioGroupValue, this.value, compareWith);
|
|
27
28
|
}
|
|
28
29
|
};
|
|
29
30
|
this.onClick = () => {
|
|
@@ -120,6 +121,8 @@ export class Radio {
|
|
|
120
121
|
emitStyle() {
|
|
121
122
|
const style = {
|
|
122
123
|
'interactive-disabled': this.disabled,
|
|
124
|
+
// TODO(FW-3125): remove this
|
|
125
|
+
legacy: !!this.legacy,
|
|
123
126
|
};
|
|
124
127
|
if (this.legacyFormController.hasLegacyControl()) {
|
|
125
128
|
style['radio-checked'] = this.checked;
|
|
@@ -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
|
}
|
|
@@ -55,7 +56,7 @@ export class RadioGroup {
|
|
|
55
56
|
this.ionValueChange.emit({ value });
|
|
56
57
|
}
|
|
57
58
|
componentDidLoad() {
|
|
58
|
-
this.
|
|
59
|
+
this.setRadioTabindex(this.value);
|
|
59
60
|
}
|
|
60
61
|
async connectedCallback() {
|
|
61
62
|
// Get the list header if it exists and set the id
|
|
@@ -158,6 +159,29 @@ export class RadioGroup {
|
|
|
158
159
|
"reflect": false,
|
|
159
160
|
"defaultValue": "false"
|
|
160
161
|
},
|
|
162
|
+
"compareWith": {
|
|
163
|
+
"type": "string",
|
|
164
|
+
"mutable": false,
|
|
165
|
+
"complexType": {
|
|
166
|
+
"original": "string | RadioGroupCompareFn | null",
|
|
167
|
+
"resolved": "((currentValue: any, compareValue: any) => boolean) | null | string | undefined",
|
|
168
|
+
"references": {
|
|
169
|
+
"RadioGroupCompareFn": {
|
|
170
|
+
"location": "import",
|
|
171
|
+
"path": "./radio-group-interface",
|
|
172
|
+
"id": "src/components/radio-group/radio-group-interface.ts::RadioGroupCompareFn"
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
"required": false,
|
|
177
|
+
"optional": true,
|
|
178
|
+
"docs": {
|
|
179
|
+
"tags": [],
|
|
180
|
+
"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."
|
|
181
|
+
},
|
|
182
|
+
"attribute": "compare-with",
|
|
183
|
+
"reflect": false
|
|
184
|
+
},
|
|
161
185
|
"name": {
|
|
162
186
|
"type": "string",
|
|
163
187
|
"mutable": false,
|
|
@@ -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 { createLegacyFormController, createNotchController } from "../../utils/forms/index";
|
|
5
|
+
import { compareOptions, createLegacyFormController, createNotchController, isOptionSelected } 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";
|
|
@@ -465,6 +465,8 @@ export class Select {
|
|
|
465
465
|
style['has-placeholder'] = this.placeholder !== undefined;
|
|
466
466
|
style['has-value'] = this.hasValue();
|
|
467
467
|
style['has-focus'] = this.isExpanded;
|
|
468
|
+
// TODO(FW-3194): remove this
|
|
469
|
+
style['legacy'] = !!this.legacy;
|
|
468
470
|
}
|
|
469
471
|
this.ionStyle.emit(style);
|
|
470
472
|
}
|
|
@@ -737,7 +739,7 @@ Developers can use the "legacy" property to continue using the legacy form marku
|
|
|
737
739
|
"optional": true,
|
|
738
740
|
"docs": {
|
|
739
741
|
"tags": [],
|
|
740
|
-
"text": "
|
|
742
|
+
"text": "This property allows developers to specify a custom function or property\nname for comparing objects when determining the selected option in the\nion-select. When not specified, the default behavior will use strict\nequality (===) for comparison."
|
|
741
743
|
},
|
|
742
744
|
"attribute": "compare-with",
|
|
743
745
|
"reflect": false
|
|
@@ -1215,17 +1217,6 @@ Developers can use the "legacy" property to continue using the legacy form marku
|
|
|
1215
1217
|
}];
|
|
1216
1218
|
}
|
|
1217
1219
|
}
|
|
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
|
-
};
|
|
1229
1220
|
const getOptionValue = (el) => {
|
|
1230
1221
|
const value = el.value;
|
|
1231
1222
|
return value === undefined ? el.textContent || '' : value;
|
|
@@ -1239,17 +1230,6 @@ const parseValue = (value) => {
|
|
|
1239
1230
|
}
|
|
1240
1231
|
return value.toString();
|
|
1241
1232
|
};
|
|
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
|
-
};
|
|
1253
1233
|
const generateText = (opts, value, compareWith) => {
|
|
1254
1234
|
if (value === undefined) {
|
|
1255
1235
|
return '';
|
|
@@ -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" class="ion-text-wrap">
|
|
30
|
+
<ion-select value="wrap" legacy="true" 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>
|