@ionic/core 7.5.2-dev.11697834896.1fed55cc → 7.5.2-dev.11698269070.1738c1a7
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/action-sheet.js +3 -3
- package/components/alert.js +3 -3
- package/components/animation.js +29 -15
- package/components/backdrop.js +12 -5
- package/components/checkbox.js +0 -2
- package/components/index8.js +0 -1
- package/components/input-shims.js +9 -1
- package/components/ion-datetime.js +2 -2
- package/components/ion-fab.js +1 -1
- package/components/ion-input.js +9 -4
- package/components/ion-loading.js +1 -1
- package/components/ion-menu.js +15 -3
- package/components/ion-picker.js +1 -1
- package/components/ion-range.js +0 -2
- package/components/ion-refresher.js +8 -1
- package/components/ion-reorder.js +2 -2
- package/components/ion-searchbar.js +9 -2
- package/components/ion-select.js +2 -4
- package/components/ion-skeleton-text.js +1 -14
- package/components/ion-textarea.js +9 -4
- package/components/ion-toggle.js +0 -2
- package/components/item.js +2 -2
- package/components/label.js +2 -2
- package/components/overlays.js +6 -0
- package/components/popover.js +1 -1
- package/components/radio.js +0 -3
- package/components/watch-options.js +14 -3
- package/css/core.css.map +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/dist/cjs/{animation-1a53c50e.js → animation-1083855c.js} +29 -15
- package/dist/cjs/{index-d0fdb56d.js → index-174dc666.js} +2 -2
- package/dist/cjs/{index-4eedbc59.js → index-5a2463aa.js} +1 -1
- package/dist/cjs/{index-10873539.js → index-da2c7a37.js} +0 -1
- package/dist/cjs/index.cjs.js +6 -6
- package/dist/cjs/{input-shims-da7dc0de.js → input-shims-b0a75a01.js} +10 -2
- package/dist/cjs/ion-action-sheet.cjs.entry.js +5 -5
- package/dist/cjs/ion-alert.cjs.entry.js +5 -5
- package/dist/cjs/ion-app_8.cjs.entry.js +4 -4
- package/dist/cjs/ion-backdrop.cjs.entry.js +9 -4
- package/dist/cjs/ion-checkbox.cjs.entry.js +0 -2
- package/dist/cjs/ion-datetime_3.cjs.entry.js +5 -5
- package/dist/cjs/ion-fab_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-input.cjs.entry.js +8 -3
- package/dist/cjs/ion-item-option_3.cjs.entry.js +2 -2
- 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 +18 -6
- package/dist/cjs/ion-modal.cjs.entry.js +4 -4
- package/dist/cjs/ion-nav_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-popover.cjs.entry.js +4 -4
- package/dist/cjs/ion-radio_2.cjs.entry.js +0 -3
- package/dist/cjs/ion-range.cjs.entry.js +1 -3
- package/dist/cjs/ion-refresher_2.cjs.entry.js +10 -3
- package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-searchbar.cjs.entry.js +8 -1
- package/dist/cjs/ion-select_3.cjs.entry.js +4 -6
- package/dist/cjs/ion-textarea.cjs.entry.js +8 -3
- package/dist/cjs/ion-toast.cjs.entry.js +2 -2
- package/dist/cjs/ion-toggle.cjs.entry.js +0 -2
- package/dist/cjs/ionic.cjs.js +2 -2
- package/dist/cjs/{ios.transition-2af7c625.js → ios.transition-74ad019b.js} +2 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{md.transition-992379b5.js → md.transition-efcc0ad3.js} +2 -2
- package/dist/cjs/{overlays-1a734051.js → overlays-3e58eaad.js} +6 -0
- package/dist/cjs/{status-tap-778e8054.js → status-tap-b19eb3c8.js} +1 -1
- package/dist/cjs/{watch-options-f3f77e54.js → watch-options-53bbb124.js} +14 -3
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/action-sheet/action-sheet.ios.css +16 -3
- package/dist/collection/components/action-sheet/action-sheet.js +1 -1
- package/dist/collection/components/action-sheet/action-sheet.md.css +16 -3
- package/dist/collection/components/alert/alert.ios.css +18 -5
- package/dist/collection/components/alert/alert.js +1 -1
- package/dist/collection/components/alert/alert.md.css +18 -5
- package/dist/collection/components/backdrop/backdrop.js +53 -4
- 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.md.css +0 -1
- package/dist/collection/components/fab/fab.css +24 -36
- package/dist/collection/components/fab/test/safe-area/fab.e2e.js +63 -0
- package/dist/collection/components/input/input.js +9 -4
- package/dist/collection/components/item/item.ios.css +3 -25
- package/dist/collection/components/item/item.md.css +3 -25
- package/dist/collection/components/item/test/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/loading/loading.js +1 -1
- package/dist/collection/components/menu/menu.js +15 -3
- package/dist/collection/components/note/test/a11y/note.e2e.js +0 -43
- package/dist/collection/components/picker/picker.js +1 -1
- package/dist/collection/components/popover/popover.js +1 -1
- package/dist/collection/components/radio/radio.js +5 -4
- package/dist/collection/components/radio/test/legacy/a11y/radio.e2e.js +5 -5
- package/dist/collection/components/range/range.js +0 -2
- package/dist/collection/components/refresher/refresher.utils.js +8 -1
- package/dist/collection/components/reorder/reorder.ios.css +1 -34
- package/dist/collection/components/reorder/reorder.md.css +1 -34
- package/dist/collection/components/searchbar/searchbar.js +9 -2
- package/dist/collection/components/select/select.ios.css +0 -5
- package/dist/collection/components/select/select.js +0 -2
- package/dist/collection/components/select/select.md.css +0 -5
- 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/split-pane/test/multiple/split-pane.e2e.js +31 -0
- package/dist/collection/components/textarea/textarea.js +9 -4
- package/dist/collection/components/toggle/toggle.js +0 -2
- package/dist/collection/utils/animation/animation.js +29 -15
- package/dist/collection/utils/content/index.js +0 -1
- package/dist/collection/utils/input-shims/hacks/common.js +9 -1
- package/dist/collection/utils/overlays.js +6 -0
- package/dist/collection/utils/test/overlays/overlays.e2e.js +65 -0
- package/dist/collection/utils/watch-options.js +14 -3
- package/dist/docs.json +2 -2
- package/dist/esm/{animation-a9cdd18b.js → animation-8aa13916.js} +29 -15
- package/dist/esm/{index-746a238e.js → index-4392efa5.js} +0 -1
- package/dist/esm/{index-5c647d55.js → index-aae132ba.js} +1 -1
- package/dist/esm/{index-533d569d.js → index-ec72506a.js} +2 -2
- package/dist/esm/index.js +6 -6
- package/dist/esm/{input-shims-d78a3c77.js → input-shims-d0c93e5d.js} +10 -2
- package/dist/esm/ion-action-sheet.entry.js +5 -5
- package/dist/esm/ion-alert.entry.js +5 -5
- package/dist/esm/ion-app_8.entry.js +4 -4
- package/dist/esm/ion-backdrop.entry.js +10 -5
- package/dist/esm/ion-checkbox.entry.js +0 -2
- package/dist/esm/ion-datetime_3.entry.js +5 -5
- package/dist/esm/ion-fab_3.entry.js +1 -1
- package/dist/esm/ion-infinite-scroll_2.entry.js +1 -1
- package/dist/esm/ion-input.entry.js +9 -4
- package/dist/esm/ion-item-option_3.entry.js +2 -2
- 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 +18 -6
- package/dist/esm/ion-modal.entry.js +4 -4
- package/dist/esm/ion-nav_2.entry.js +1 -1
- package/dist/esm/ion-popover.entry.js +4 -4
- package/dist/esm/ion-radio_2.entry.js +0 -3
- package/dist/esm/ion-range.entry.js +1 -3
- package/dist/esm/ion-refresher_2.entry.js +10 -3
- package/dist/esm/ion-reorder_2.entry.js +3 -3
- package/dist/esm/ion-searchbar.entry.js +9 -2
- package/dist/esm/ion-select_3.entry.js +4 -6
- package/dist/esm/ion-textarea.entry.js +9 -4
- package/dist/esm/ion-toast.entry.js +2 -2
- package/dist/esm/ion-toggle.entry.js +0 -2
- package/dist/esm/ionic.js +2 -2
- package/dist/esm/{ios.transition-b3053722.js → ios.transition-f1cea7e0.js} +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{md.transition-bdf2eec2.js → md.transition-1bf39c32.js} +2 -2
- package/dist/esm/{overlays-cec6bac8.js → overlays-9b1b807c.js} +6 -0
- package/dist/esm/{status-tap-9aeeaca5.js → status-tap-4e96ecf3.js} +1 -1
- package/dist/esm/{watch-options-355a920a.js → watch-options-02d8498b.js} +14 -3
- package/dist/esm-es5/animation-8aa13916.js +4 -0
- package/dist/esm-es5/{index-5c647d55.js → index-aae132ba.js} +1 -1
- package/dist/esm-es5/{index-533d569d.js → index-ec72506a.js} +1 -1
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/{input-shims-d78a3c77.js → input-shims-d0c93e5d.js} +1 -1
- 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-backdrop.entry.js +2 -2
- 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-fab_3.entry.js +1 -1
- package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
- package/dist/esm-es5/ion-input.entry.js +1 -1
- package/dist/esm-es5/ion-item-option_3.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-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-searchbar.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.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-b3053722.js → ios.transition-f1cea7e0.js} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/{md.transition-bdf2eec2.js → md.transition-1bf39c32.js} +1 -1
- package/dist/esm-es5/{overlays-cec6bac8.js → overlays-9b1b807c.js} +1 -1
- package/dist/esm-es5/{status-tap-9aeeaca5.js → status-tap-4e96ecf3.js} +1 -1
- package/dist/esm-es5/{watch-options-355a920a.js → watch-options-02d8498b.js} +1 -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-017631df.system.entry.js +4 -0
- package/dist/ionic/{p-307b0e77.entry.js → p-0362c48a.entry.js} +1 -1
- package/dist/ionic/p-0c0d536f.system.entry.js +4 -0
- package/dist/ionic/{p-8286f6d4.system.js → p-0c78d548.system.js} +1 -1
- package/dist/ionic/p-0fb53284.system.js +4 -0
- package/dist/ionic/{p-32d17eee.entry.js → p-14f61991.entry.js} +1 -1
- package/dist/ionic/p-16520f50.system.entry.js +4 -0
- package/dist/ionic/p-19707956.entry.js +4 -0
- package/dist/ionic/{p-ad12e632.system.entry.js → p-2222b68a.system.entry.js} +1 -1
- package/dist/ionic/{p-b45118c0.system.entry.js → p-23410b18.system.entry.js} +1 -1
- package/dist/ionic/p-2e8e0045.js +4 -0
- package/dist/ionic/{p-408e5ee6.system.entry.js → p-306d845d.system.entry.js} +1 -1
- package/dist/ionic/{p-8e24ebbc.js → p-311d91cc.js} +1 -1
- package/dist/ionic/p-354d016f.entry.js +4 -0
- package/dist/ionic/{p-bc08029e.system.entry.js → p-3574440a.system.entry.js} +1 -1
- package/dist/ionic/p-3602001b.system.js +4 -0
- package/dist/ionic/{p-12445803.system.entry.js → p-372f1f80.system.entry.js} +1 -1
- package/dist/ionic/{p-aac723ac.system.entry.js → p-3e2ddf5e.system.entry.js} +1 -1
- package/dist/ionic/{p-7e77a185.system.entry.js → p-43cdeb48.system.entry.js} +1 -1
- package/dist/ionic/p-4a329bd3.entry.js +4 -0
- package/dist/ionic/{p-1f81b5be.entry.js → p-4e9114af.entry.js} +1 -1
- package/dist/ionic/p-4ef4a7ba.entry.js +4 -0
- package/dist/ionic/{p-074d4971.js → p-507845ca.js} +1 -1
- package/dist/ionic/{p-c87827ca.system.js → p-5aac9314.system.js} +1 -1
- package/dist/ionic/{p-7c08106a.entry.js → p-623a953a.entry.js} +1 -1
- package/dist/ionic/{p-5416c18a.system.js → p-62b29300.system.js} +1 -1
- package/dist/ionic/p-62bfd4cb.system.entry.js +4 -0
- package/dist/ionic/{p-0b24c4e7.entry.js → p-630ceef5.entry.js} +1 -1
- package/dist/ionic/{p-5a12d57c.system.entry.js → p-65ab4cb5.system.entry.js} +1 -1
- package/dist/ionic/{p-5ffd6742.system.js → p-664d1430.system.js} +1 -1
- package/dist/ionic/{p-b132c2c0.system.js → p-67eecef4.system.js} +1 -1
- package/dist/ionic/{p-8f01a9a2.system.js → p-78ce7391.system.js} +1 -1
- package/dist/ionic/{p-2743fb40.js → p-79fdc224.js} +1 -1
- package/dist/ionic/p-7b48cf4f.system.entry.js +4 -0
- package/dist/ionic/p-7e80194c.entry.js +4 -0
- package/dist/ionic/p-83198481.entry.js +4 -0
- package/dist/ionic/{p-7b3cfd36.system.entry.js → p-8ab12bec.system.entry.js} +1 -1
- package/dist/ionic/p-8b1237b9.entry.js +4 -0
- package/dist/ionic/{p-acbcc508.system.entry.js → p-8fdd6396.system.entry.js} +1 -1
- package/dist/ionic/p-97c65aa5.js +4 -0
- package/dist/ionic/p-9d166dc1.js +4 -0
- package/dist/ionic/p-a7f83510.entry.js +4 -0
- package/dist/ionic/{p-c49672d8.system.js → p-b216de09.system.js} +1 -1
- package/dist/ionic/p-b9a17fcb.system.entry.js +4 -0
- package/dist/ionic/{p-64416e79.system.js → p-be7fcb09.system.js} +1 -1
- package/dist/ionic/{p-64b36ecd.system.js → p-c50ea33f.system.js} +1 -1
- package/dist/ionic/{p-0f10b5f5.system.entry.js → p-c6cae705.system.entry.js} +1 -1
- package/dist/ionic/{p-b20b49ba.js → p-c842da0a.js} +1 -1
- package/dist/ionic/p-c9f70283.entry.js +4 -0
- package/dist/ionic/p-cf04003c.system.entry.js +4 -0
- package/dist/ionic/p-cf67c66c.entry.js +4 -0
- package/dist/ionic/p-d3ba42e6.system.entry.js +4 -0
- package/dist/ionic/{p-49367d48.entry.js → p-d70cc00d.entry.js} +1 -1
- package/dist/ionic/{p-cf62e1c8.js → p-d99ceb6a.js} +1 -1
- package/dist/ionic/{p-a3fe2e01.entry.js → p-db0140c0.entry.js} +1 -1
- package/dist/ionic/{p-f094de62.system.entry.js → p-db6fb00c.system.entry.js} +1 -1
- package/dist/ionic/{p-ec4f26da.system.entry.js → p-dd043db2.system.entry.js} +1 -1
- package/dist/ionic/p-dd213cdd.system.entry.js +4 -0
- package/dist/ionic/{p-623dd07e.entry.js → p-df189fa7.entry.js} +1 -1
- package/dist/ionic/p-e21ca02c.entry.js +4 -0
- package/dist/ionic/p-e552cf80.entry.js +4 -0
- package/dist/ionic/p-e97b48ff.entry.js +4 -0
- package/dist/ionic/p-ebdf4f41.entry.js +4 -0
- package/dist/ionic/{p-0ae4c173.entry.js → p-f089f3b1.entry.js} +1 -1
- package/dist/ionic/p-f10de93b.js +4 -0
- package/dist/ionic/p-f1e15f7a.entry.js +4 -0
- package/dist/ionic/p-f3185dcb.system.entry.js +4 -0
- package/dist/ionic/p-f45792a4.system.entry.js +4 -0
- package/dist/ionic/p-f4bd51c5.entry.js +4 -0
- package/dist/ionic/p-f9017b2c.system.entry.js +4 -0
- package/dist/types/components/action-sheet/action-sheet.d.ts +1 -0
- package/dist/types/components/alert/alert.d.ts +1 -0
- package/dist/types/components/backdrop/backdrop.d.ts +5 -2
- package/dist/types/components/loading/loading.d.ts +1 -0
- package/dist/types/components/menu/menu.d.ts +1 -1
- package/dist/types/components/modal/modal.d.ts +1 -1
- package/dist/types/components/picker/picker.d.ts +1 -0
- package/dist/types/components/popover/popover.d.ts +1 -0
- package/dist/types/components/radio/radio.d.ts +1 -1
- package/dist/types/components/skeleton-text/skeleton-text.d.ts +1 -9
- package/dist/types/components.d.ts +627 -5
- package/dist/types/stencil-public-runtime.d.ts +2 -0
- package/dist/types/utils/animation/animation-interface.d.ts +4 -4
- package/dist/types/utils/content/index.d.ts +1 -1
- package/dist/types/utils/focus-visible.d.ts +3 -2
- package/dist/types/utils/overlays-interface.d.ts +1 -0
- package/dist/types/utils/watch-options.d.ts +9 -1
- package/hydrate/index.js +146 -94
- package/package.json +3 -3
- package/dist/esm-es5/animation-a9cdd18b.js +0 -4
- package/dist/ionic/p-0866bf93.entry.js +0 -4
- package/dist/ionic/p-22beb08d.entry.js +0 -4
- package/dist/ionic/p-23f57624.system.entry.js +0 -4
- package/dist/ionic/p-27381a03.entry.js +0 -4
- package/dist/ionic/p-29b56db6.system.entry.js +0 -4
- package/dist/ionic/p-31a8fd9a.entry.js +0 -4
- package/dist/ionic/p-35e399bd.entry.js +0 -4
- package/dist/ionic/p-449f4377.js +0 -4
- package/dist/ionic/p-4ba4bbf8.entry.js +0 -4
- package/dist/ionic/p-4f97c112.entry.js +0 -4
- package/dist/ionic/p-505cc23b.entry.js +0 -4
- package/dist/ionic/p-5bf16a18.js +0 -4
- package/dist/ionic/p-69613961.system.entry.js +0 -4
- package/dist/ionic/p-6b097e5f.entry.js +0 -4
- package/dist/ionic/p-755b2917.system.js +0 -4
- package/dist/ionic/p-75cba889.entry.js +0 -4
- package/dist/ionic/p-7a4bb59b.entry.js +0 -4
- package/dist/ionic/p-7c6a16c1.system.entry.js +0 -4
- package/dist/ionic/p-7f8844bd.system.entry.js +0 -4
- package/dist/ionic/p-8277369c.entry.js +0 -4
- package/dist/ionic/p-87c3c4ec.entry.js +0 -4
- package/dist/ionic/p-9d93e024.system.entry.js +0 -4
- package/dist/ionic/p-9f2e0db9.js +0 -4
- package/dist/ionic/p-af37e8de.system.entry.js +0 -4
- package/dist/ionic/p-b77734e0.entry.js +0 -4
- package/dist/ionic/p-c2e6cc69.entry.js +0 -4
- package/dist/ionic/p-c7612d99.system.entry.js +0 -4
- package/dist/ionic/p-d0c77b0e.system.entry.js +0 -4
- package/dist/ionic/p-d625ae76.js +0 -4
- package/dist/ionic/p-d6f6b311.system.entry.js +0 -4
- package/dist/ionic/p-db1a1e00.entry.js +0 -4
- package/dist/ionic/p-f63446a2.system.entry.js +0 -4
- package/dist/ionic/p-f6c370f4.system.entry.js +0 -4
- package/dist/ionic/p-f735392d.system.js +0 -4
- /package/dist/esm-es5/{index-746a238e.js → index-4392efa5.js} +0 -0
- /package/dist/ionic/{p-b24aa895.js → p-114a36ed.js} +0 -0
- /package/dist/ionic/{p-64475ab5.system.js → p-8a308596.system.js} +0 -0
|
@@ -11,6 +11,7 @@ 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
|
|
14
15
|
await expect(page).toHaveScreenshot(screenshot(`item-disabled-diff`));
|
|
15
16
|
});
|
|
16
17
|
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { expect } from "@playwright/test";
|
|
5
|
+
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
6
|
+
configs().forEach(({ title, screenshot, config }) => {
|
|
7
|
+
test.describe(title('item: text'), () => {
|
|
8
|
+
test('should not have visual regressions', async ({ page }) => {
|
|
9
|
+
await page.goto(`/src/components/item/test/text`, config);
|
|
10
|
+
await page.setIonViewport();
|
|
11
|
+
await expect(page).toHaveScreenshot(screenshot(`item-text-diff`));
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
});
|
|
@@ -41,24 +41,17 @@
|
|
|
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) {
|
|
48
44
|
white-space: nowrap;
|
|
49
45
|
overflow: hidden;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
:host-context(.item:not(.item-input):not(.item-legacy)) {
|
|
53
|
-
flex-grow: 1;
|
|
46
|
+
box-sizing: border-box;
|
|
54
47
|
}
|
|
55
48
|
|
|
56
49
|
:host(.ion-color) {
|
|
57
50
|
color: var(--ion-color-base);
|
|
58
51
|
}
|
|
59
52
|
|
|
60
|
-
:host(.ion-text-
|
|
61
|
-
|
|
53
|
+
:host(.ion-text-wrap) {
|
|
54
|
+
white-space: normal;
|
|
62
55
|
}
|
|
63
56
|
|
|
64
57
|
:host-context(.item-interactive-disabled:not(.item-multiple-inputs)) {
|
|
@@ -77,10 +70,6 @@
|
|
|
77
70
|
align-self: baseline;
|
|
78
71
|
}
|
|
79
72
|
|
|
80
|
-
:host-context(.item-skeleton-text) {
|
|
81
|
-
overflow: hidden;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
73
|
:host(.label-fixed) {
|
|
85
74
|
flex: 0 0 100px;
|
|
86
75
|
width: 100px;
|
|
@@ -41,24 +41,17 @@
|
|
|
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) {
|
|
48
44
|
white-space: nowrap;
|
|
49
45
|
overflow: hidden;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
:host-context(.item:not(.item-input):not(.item-legacy)) {
|
|
53
|
-
flex-grow: 1;
|
|
46
|
+
box-sizing: border-box;
|
|
54
47
|
}
|
|
55
48
|
|
|
56
49
|
:host(.ion-color) {
|
|
57
50
|
color: var(--ion-color-base);
|
|
58
51
|
}
|
|
59
52
|
|
|
60
|
-
:host(.ion-text-
|
|
61
|
-
|
|
53
|
+
:host(.ion-text-wrap) {
|
|
54
|
+
white-space: normal;
|
|
62
55
|
}
|
|
63
56
|
|
|
64
57
|
:host-context(.item-interactive-disabled:not(.item-multiple-inputs)) {
|
|
@@ -77,10 +70,6 @@
|
|
|
77
70
|
align-self: baseline;
|
|
78
71
|
}
|
|
79
72
|
|
|
80
|
-
:host-context(.item-skeleton-text) {
|
|
81
|
-
overflow: hidden;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
73
|
:host(.label-fixed) {
|
|
85
74
|
flex: 0 0 100px;
|
|
86
75
|
width: 100px;
|
|
@@ -146,7 +146,7 @@ export class Loading {
|
|
|
146
146
|
const ariaLabelledBy = message !== undefined ? msgId : null;
|
|
147
147
|
return (h(Host, Object.assign({ role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
|
|
148
148
|
zIndex: `${40000 + this.overlayIndex}`,
|
|
149
|
-
}, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { tabindex: "0" }), h("div", { class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { class: "loading-spinner" }, h("ion-spinner", { name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { tabindex: "0" })));
|
|
149
|
+
}, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { tabindex: "0" }), h("div", { class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { class: "loading-spinner" }, h("ion-spinner", { name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { tabindex: "0" })));
|
|
150
150
|
}
|
|
151
151
|
static get is() { return "ion-loading"; }
|
|
152
152
|
static get encapsulation() { return "scoped"; }
|
|
@@ -173,6 +173,18 @@ export class Menu {
|
|
|
173
173
|
this.contentEl = undefined;
|
|
174
174
|
}
|
|
175
175
|
onSplitPaneChanged(ev) {
|
|
176
|
+
const { target } = ev;
|
|
177
|
+
const closestSplitPane = this.el.closest('ion-split-pane');
|
|
178
|
+
/**
|
|
179
|
+
* Menu listens on the body for "ionSplitPaneVisible".
|
|
180
|
+
* However, this means the callback will run any time
|
|
181
|
+
* a SplitPane changes visibility. As a result, we only want
|
|
182
|
+
* Menu's visibility state to update if its parent SplitPane
|
|
183
|
+
* changes visibility.
|
|
184
|
+
*/
|
|
185
|
+
if (target !== closestSplitPane) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
176
188
|
this.isPaneVisible = ev.detail.isPane(this.el);
|
|
177
189
|
this.updateState();
|
|
178
190
|
}
|
|
@@ -331,11 +343,11 @@ export class Menu {
|
|
|
331
343
|
this.animation = undefined;
|
|
332
344
|
}
|
|
333
345
|
// Create new animation
|
|
334
|
-
this.animation = await menuController._createAnimation(this.type, this);
|
|
346
|
+
const animation = (this.animation = await menuController._createAnimation(this.type, this));
|
|
335
347
|
if (!config.getBoolean('animated', true)) {
|
|
336
|
-
|
|
348
|
+
animation.duration(0);
|
|
337
349
|
}
|
|
338
|
-
|
|
350
|
+
animation.fill('both');
|
|
339
351
|
}
|
|
340
352
|
async startAnimation(shouldOpen, animated) {
|
|
341
353
|
const isReversed = !shouldOpen;
|
|
@@ -48,48 +48,5 @@ 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
|
-
});
|
|
94
51
|
});
|
|
95
52
|
});
|
|
@@ -174,7 +174,7 @@ export class Picker {
|
|
|
174
174
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
175
175
|
}, class: Object.assign({ [mode]: true,
|
|
176
176
|
// Used internally for styling
|
|
177
|
-
[`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { tabindex: "0" }), h("div", { class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, h("div", { class: "picker-toolbar" }, this.buttons.map((b) => (h("div", { class: buttonWrapperClass(b) }, h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), h("div", { class: "picker-columns" }, h("div", { class: "picker-above-highlight" }), this.presented && this.columns.map((c) => h("ion-picker-column", { col: c })), h("div", { class: "picker-below-highlight" }))), h("div", { tabindex: "0" })));
|
|
177
|
+
[`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { tabindex: "0" }), h("div", { class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, h("div", { class: "picker-toolbar" }, this.buttons.map((b) => (h("div", { class: buttonWrapperClass(b) }, h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), h("div", { class: "picker-columns" }, h("div", { class: "picker-above-highlight" }), this.presented && this.columns.map((c) => h("ion-picker-column", { col: c })), h("div", { class: "picker-below-highlight" }))), h("div", { tabindex: "0" })));
|
|
178
178
|
}
|
|
179
179
|
static get is() { return "ion-picker"; }
|
|
180
180
|
static get encapsulation() { return "scoped"; }
|
|
@@ -323,7 +323,7 @@ export class Popover {
|
|
|
323
323
|
const enableArrow = arrow && !parentPopover;
|
|
324
324
|
return (h(Host, Object.assign({ "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
|
|
325
325
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
326
|
-
}, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { class: "popover-arrow", part: "arrow" }), h("div", { class: "popover-content", part: "content" }, h("slot", null)))));
|
|
326
|
+
}, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && (h("ion-backdrop", { ref: (el) => (this.backdropEl = el), tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" })), h("div", { class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { class: "popover-arrow", part: "arrow" }), h("div", { class: "popover-content", part: "content" }, h("slot", null)))));
|
|
327
327
|
}
|
|
328
328
|
static get is() { return "ion-popover"; }
|
|
329
329
|
static get encapsulation() { return "shadow"; }
|
|
@@ -85,7 +85,6 @@ export class Radio {
|
|
|
85
85
|
}
|
|
86
86
|
/** @internal */
|
|
87
87
|
async setFocus(ev) {
|
|
88
|
-
// TODO(FW-2832): type (using Event triggers a build error due to conflict with Stencil Event import)
|
|
89
88
|
ev.stopPropagation();
|
|
90
89
|
ev.preventDefault();
|
|
91
90
|
this.el.focus();
|
|
@@ -121,8 +120,6 @@ export class Radio {
|
|
|
121
120
|
emitStyle() {
|
|
122
121
|
const style = {
|
|
123
122
|
'interactive-disabled': this.disabled,
|
|
124
|
-
// TODO(FW-3125): remove this
|
|
125
|
-
legacy: !!this.legacy,
|
|
126
123
|
};
|
|
127
124
|
if (this.legacyFormController.hasLegacyControl()) {
|
|
128
125
|
style['radio-checked'] = this.checked;
|
|
@@ -418,7 +415,7 @@ Developers can dismiss this warning by removing their usage of the "legacy" prop
|
|
|
418
415
|
return {
|
|
419
416
|
"setFocus": {
|
|
420
417
|
"complexType": {
|
|
421
|
-
"signature": "(ev:
|
|
418
|
+
"signature": "(ev: globalThis.Event) => Promise<void>",
|
|
422
419
|
"parameters": [{
|
|
423
420
|
"tags": [],
|
|
424
421
|
"text": ""
|
|
@@ -427,6 +424,10 @@ Developers can dismiss this warning by removing their usage of the "legacy" prop
|
|
|
427
424
|
"Promise": {
|
|
428
425
|
"location": "global",
|
|
429
426
|
"id": "global::Promise"
|
|
427
|
+
},
|
|
428
|
+
"globalThis": {
|
|
429
|
+
"location": "global",
|
|
430
|
+
"id": "global::globalThis"
|
|
430
431
|
}
|
|
431
432
|
},
|
|
432
433
|
"return": "Promise<void>"
|
|
@@ -8,9 +8,11 @@ import { configs, test } from "../../../../../utils/test/playwright/index";
|
|
|
8
8
|
*/
|
|
9
9
|
configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
|
|
10
10
|
test.describe(title('radio: a11y'), () => {
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
test.beforeEach(async ({ page, skip }) => {
|
|
12
|
+
skip.browser('webkit', 'Tabbing is flaky in Safari');
|
|
13
13
|
await page.goto(`/src/components/radio/test/legacy/a11y`, config);
|
|
14
|
+
});
|
|
15
|
+
test('tabbing should switch between radio groups', async ({ page, pageUtils }) => {
|
|
14
16
|
const firstGroupRadios = page.locator('#first-group ion-radio');
|
|
15
17
|
const secondGroupRadios = page.locator('#second-group ion-radio');
|
|
16
18
|
await pageUtils.pressKeys('Tab');
|
|
@@ -20,9 +22,7 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
|
|
|
20
22
|
await pageUtils.pressKeys('shift+Tab');
|
|
21
23
|
await expect(firstGroupRadios.nth(0)).toBeFocused();
|
|
22
24
|
});
|
|
23
|
-
|
|
24
|
-
test.fixme('using arrow keys should move between enabled radios within group', async ({ page, pageUtils }) => {
|
|
25
|
-
await page.goto(`/src/components/radio/test/legacy/a11y`, config);
|
|
25
|
+
test('using arrow keys should move between enabled radios within group', async ({ page, pageUtils }) => {
|
|
26
26
|
const firstGroupRadios = page.locator('#first-group ion-radio');
|
|
27
27
|
await pageUtils.pressKeys('Tab');
|
|
28
28
|
await expect(firstGroupRadios.nth(0)).toBeFocused();
|
|
@@ -16,7 +16,6 @@ export const createPullingAnimation = (type, pullingSpinner, refresherEl) => {
|
|
|
16
16
|
: createTranslateAnimation(pullingSpinner, refresherEl);
|
|
17
17
|
};
|
|
18
18
|
const createBaseAnimation = (pullingRefresherIcon) => {
|
|
19
|
-
// TODO(FW-2832): add types/re-evaluate asserting so many things
|
|
20
19
|
const spinner = pullingRefresherIcon.querySelector('ion-spinner');
|
|
21
20
|
const circle = spinner.shadowRoot.querySelector('circle');
|
|
22
21
|
const spinnerArrowContainer = pullingRefresherIcon.querySelector('.spinner-arrow-container');
|
|
@@ -173,6 +172,14 @@ export const shouldUseNativeRefresher = async (referenceEl, mode) => {
|
|
|
173
172
|
const refreshingSpinner = referenceEl.querySelector('ion-refresher-content .refresher-refreshing ion-spinner');
|
|
174
173
|
return (pullingSpinner !== null &&
|
|
175
174
|
refreshingSpinner !== null &&
|
|
175
|
+
/**
|
|
176
|
+
* We use webkitOverflowScrolling for feature detection with rubber band scrolling
|
|
177
|
+
* on iOS. When doing referenceEl.style, webkitOverflowScrolling is undefined on non-iOS platforms.
|
|
178
|
+
* However, it will be the empty string on iOS.
|
|
179
|
+
* Note that we do not use getPropertyValue (and thus need to cast as any) because calling
|
|
180
|
+
* getPropertyValue('-webkit-overflow-scrolling') will return the empty string if it is not
|
|
181
|
+
* set on the element, even if the platform does not support that.
|
|
182
|
+
*/
|
|
176
183
|
((mode === 'ios' && isPlatform('mobile') && referenceEl.style.webkitOverflowScrolling !== undefined) ||
|
|
177
184
|
mode === 'md'));
|
|
178
185
|
};
|
|
@@ -1,36 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Convert a font size to a dynamic font size.
|
|
3
|
-
* Fonts that participate in Dynamic Type should use
|
|
4
|
-
* dynamic font sizes.
|
|
5
|
-
* @param size - The initial font size including the unit (i.e. px or pt)
|
|
6
|
-
* @param unit (optional) - The unit to convert to. Use this if you want to
|
|
7
|
-
* convert to a unit other than $baselineUnit.
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Convert a font size to a dynamic font size but impose
|
|
11
|
-
* a maximum font size.
|
|
12
|
-
* @param size - The initial font size including the unit (i.e. px or pt)
|
|
13
|
-
* @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
|
|
14
|
-
* @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
|
|
15
|
-
* convert to a unit other than $baselineUnit.
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
|
-
* Convert a font size to a dynamic font size but impose
|
|
19
|
-
* a minimum font size.
|
|
20
|
-
* @param size - The initial font size including the unit (i.e. px or pt)
|
|
21
|
-
* @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
|
|
22
|
-
* @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
|
|
23
|
-
* convert to a unit other than $baselineUnit.
|
|
24
|
-
*/
|
|
25
|
-
/**
|
|
26
|
-
* Convert a font size to a dynamic font size but impose
|
|
27
|
-
* maximum and minimum font sizes.
|
|
28
|
-
* @param size - The initial font size including the unit (i.e. px or pt)
|
|
29
|
-
* @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
|
|
30
|
-
* @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
|
|
31
|
-
* @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
|
|
32
|
-
* convert to a unit other than $baselineUnit.
|
|
33
|
-
*/
|
|
34
1
|
:host([slot]) {
|
|
35
2
|
display: none;
|
|
36
3
|
line-height: 0;
|
|
@@ -46,7 +13,7 @@
|
|
|
46
13
|
* icons resize with Dynamic Type.
|
|
47
14
|
*/
|
|
48
15
|
::slotted(ion-icon) {
|
|
49
|
-
font-size:
|
|
16
|
+
font-size: dynamic-font(16px);
|
|
50
17
|
}
|
|
51
18
|
|
|
52
19
|
/**
|
|
@@ -1,36 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Convert a font size to a dynamic font size.
|
|
3
|
-
* Fonts that participate in Dynamic Type should use
|
|
4
|
-
* dynamic font sizes.
|
|
5
|
-
* @param size - The initial font size including the unit (i.e. px or pt)
|
|
6
|
-
* @param unit (optional) - The unit to convert to. Use this if you want to
|
|
7
|
-
* convert to a unit other than $baselineUnit.
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Convert a font size to a dynamic font size but impose
|
|
11
|
-
* a maximum font size.
|
|
12
|
-
* @param size - The initial font size including the unit (i.e. px or pt)
|
|
13
|
-
* @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
|
|
14
|
-
* @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
|
|
15
|
-
* convert to a unit other than $baselineUnit.
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
|
-
* Convert a font size to a dynamic font size but impose
|
|
19
|
-
* a minimum font size.
|
|
20
|
-
* @param size - The initial font size including the unit (i.e. px or pt)
|
|
21
|
-
* @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
|
|
22
|
-
* @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
|
|
23
|
-
* convert to a unit other than $baselineUnit.
|
|
24
|
-
*/
|
|
25
|
-
/**
|
|
26
|
-
* Convert a font size to a dynamic font size but impose
|
|
27
|
-
* maximum and minimum font sizes.
|
|
28
|
-
* @param size - The initial font size including the unit (i.e. px or pt)
|
|
29
|
-
* @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
|
|
30
|
-
* @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
|
|
31
|
-
* @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
|
|
32
|
-
* convert to a unit other than $baselineUnit.
|
|
33
|
-
*/
|
|
34
1
|
:host([slot]) {
|
|
35
2
|
display: none;
|
|
36
3
|
line-height: 0;
|
|
@@ -46,7 +13,7 @@
|
|
|
46
13
|
* icons resize with Dynamic Type.
|
|
47
14
|
*/
|
|
48
15
|
::slotted(ion-icon) {
|
|
49
|
-
font-size:
|
|
16
|
+
font-size: dynamic-font(16px);
|
|
50
17
|
}
|
|
51
18
|
|
|
52
19
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { Host, forceUpdate, h } from "@stencil/core";
|
|
5
|
-
import { debounceEvent, raf } from "../../utils/helpers";
|
|
5
|
+
import { debounceEvent, raf, componentOnReady } from "../../utils/helpers";
|
|
6
6
|
import { isRTL } from "../../utils/rtl/index";
|
|
7
7
|
import { createColorClasses } from "../../utils/theme";
|
|
8
8
|
import { arrowBackSharp, closeCircle, closeSharp, searchOutline, searchSharp } from "ionicons/icons";
|
|
@@ -189,7 +189,14 @@ export class Searchbar {
|
|
|
189
189
|
/**
|
|
190
190
|
* Returns the native `<input>` element used under the hood.
|
|
191
191
|
*/
|
|
192
|
-
getInputElement() {
|
|
192
|
+
async getInputElement() {
|
|
193
|
+
/**
|
|
194
|
+
* If this gets called in certain early lifecycle hooks (ex: Vue onMounted),
|
|
195
|
+
* nativeInput won't be defined yet with the custom elements build, so wait for it to load in.
|
|
196
|
+
*/
|
|
197
|
+
if (!this.nativeInput) {
|
|
198
|
+
await new Promise((resolve) => componentOnReady(this.el, resolve));
|
|
199
|
+
}
|
|
193
200
|
return Promise.resolve(this.nativeInput);
|
|
194
201
|
}
|
|
195
202
|
/**
|
|
@@ -465,8 +465,6 @@ 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;
|
|
470
468
|
}
|
|
471
469
|
this.ionStyle.emit(style);
|
|
472
470
|
}
|
|
@@ -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
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { expect } from "@playwright/test";
|
|
5
|
+
import { configs, test, Viewports } from "../../../../utils/test/playwright/index";
|
|
6
|
+
configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
|
|
7
|
+
test.describe(title('split-pane: multiple'), () => {
|
|
8
|
+
test('using multiple split panes should not hide a menu in another split pane', async ({ page }) => {
|
|
9
|
+
test.info().annotations.push({
|
|
10
|
+
type: 'issue',
|
|
11
|
+
description: 'https://github.com/ionic-team/ionic-framework/issues/18683',
|
|
12
|
+
});
|
|
13
|
+
await page.setViewportSize(Viewports.large);
|
|
14
|
+
await page.goto(`/src/components/split-pane/test/multiple`, config);
|
|
15
|
+
const paneOneMenuOne = page.locator('ion-menu#pane-one-menu-one');
|
|
16
|
+
const paneOneMenuTwo = page.locator('ion-menu#pane-one-menu-two');
|
|
17
|
+
const paneTwoMenuOne = page.locator('ion-menu#pane-two-menu-one');
|
|
18
|
+
const paneTwoMenuTwo = page.locator('ion-menu#pane-two-menu-two');
|
|
19
|
+
const showPaneOne = page.locator('button#show-pane-one');
|
|
20
|
+
const showPaneTwo = page.locator('button#show-pane-two');
|
|
21
|
+
await expect(paneOneMenuOne).toBeVisible();
|
|
22
|
+
await expect(paneOneMenuTwo).toBeVisible();
|
|
23
|
+
await showPaneTwo.click();
|
|
24
|
+
await expect(paneTwoMenuOne).toBeVisible();
|
|
25
|
+
await expect(paneTwoMenuTwo).toBeVisible();
|
|
26
|
+
await showPaneOne.click();
|
|
27
|
+
await expect(paneOneMenuOne).toBeVisible();
|
|
28
|
+
await expect(paneOneMenuTwo).toBeVisible();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
});
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Build, Host, forceUpdate, h, writeTask, } from "@stencil/core";
|
|
5
5
|
import { createLegacyFormController, createNotchController } from "../../utils/forms/index";
|
|
6
|
-
import { inheritAriaAttributes, debounceEvent, findItemLabel, inheritAttributes } from "../../utils/helpers";
|
|
6
|
+
import { inheritAriaAttributes, debounceEvent, findItemLabel, inheritAttributes, componentOnReady, } from "../../utils/helpers";
|
|
7
7
|
import { printIonWarning } from "../../utils/logging/index";
|
|
8
8
|
import { createSlotMutationController } from "../../utils/slot-mutation-controller";
|
|
9
9
|
import { createColorClasses, hostContext } from "../../utils/theme";
|
|
@@ -169,7 +169,14 @@ export class Textarea {
|
|
|
169
169
|
/**
|
|
170
170
|
* Returns the native `<textarea>` element used under the hood.
|
|
171
171
|
*/
|
|
172
|
-
getInputElement() {
|
|
172
|
+
async getInputElement() {
|
|
173
|
+
/**
|
|
174
|
+
* If this gets called in certain early lifecycle hooks (ex: Vue onMounted),
|
|
175
|
+
* nativeInput won't be defined yet with the custom elements build, so wait for it to load in.
|
|
176
|
+
*/
|
|
177
|
+
if (!this.nativeInput) {
|
|
178
|
+
await new Promise((resolve) => componentOnReady(this.el, resolve));
|
|
179
|
+
}
|
|
173
180
|
return Promise.resolve(this.nativeInput);
|
|
174
181
|
}
|
|
175
182
|
emitStyle() {
|
|
@@ -182,8 +189,6 @@ export class Textarea {
|
|
|
182
189
|
'has-placeholder': this.placeholder !== undefined,
|
|
183
190
|
'has-value': this.hasValue(),
|
|
184
191
|
'has-focus': this.hasFocus,
|
|
185
|
-
// TODO(FW-2876): remove this
|
|
186
|
-
legacy: !!this.legacy,
|
|
187
192
|
});
|
|
188
193
|
}
|
|
189
194
|
}
|