@ionic/core 7.4.1-nightly.20230918 → 7.4.1-nightly.20230920
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 -0
- package/components/alert.js +6 -1
- package/components/button.js +2 -0
- package/components/checkbox.js +9 -4
- package/components/icon.js +6 -0
- package/components/input-shims.js +88 -7
- package/components/ion-accordion-group.js +5 -1
- package/components/ion-accordion.js +2 -0
- package/components/ion-breadcrumbs.js +5 -1
- package/components/ion-datetime.js +10 -0
- package/components/ion-fab-list.js +2 -0
- package/components/ion-fab.js +2 -0
- package/components/ion-img.js +2 -0
- package/components/ion-infinite-scroll.js +3 -0
- package/components/ion-input.js +5 -0
- package/components/ion-item-sliding.js +2 -0
- package/components/ion-loading.js +3 -0
- package/components/ion-menu.js +10 -5
- package/components/ion-modal.js +3 -0
- package/components/ion-nav.js +3 -0
- package/components/ion-picker.js +3 -0
- package/components/ion-range.js +39 -5
- package/components/ion-refresher.js +2 -0
- package/components/ion-reorder-group.js +2 -0
- package/components/ion-route-redirect.js +3 -0
- package/components/ion-route.js +4 -0
- package/components/ion-router-outlet.js +2 -0
- package/components/ion-searchbar.js +4 -0
- package/components/ion-segment-button.js +2 -0
- package/components/ion-segment.js +6 -1
- package/components/ion-select.js +5 -0
- package/components/ion-split-pane.js +4 -0
- package/components/ion-tab-bar.js +2 -0
- package/components/ion-tab.js +2 -0
- package/components/ion-textarea.js +4 -0
- package/components/ion-title.js +2 -0
- package/components/ion-toast.js +3 -0
- package/components/ion-toggle.js +2 -0
- package/components/item.js +48 -10
- package/components/label.js +3 -0
- package/components/overlays.js +30 -10
- package/components/picker-column-internal.js +2 -0
- package/components/picker-column.js +2 -0
- package/components/popover.js +4 -0
- package/components/radio-group.js +3 -1
- package/components/radio.js +5 -0
- package/dist/cjs/{app-globals-a63c2a19.js → app-globals-56164d1a.js} +1 -1
- package/dist/cjs/{button-active-0ff8e82c.js → button-active-32f15660.js} +1 -1
- package/dist/cjs/{index-e6416850.js → index-5121bb90.js} +1 -1
- package/dist/cjs/{index-184fdd62.js → index-6f887430.js} +44 -14
- package/dist/cjs/{index-be8a2ab9.js → index-b183138a.js} +3 -3
- package/dist/cjs/index.cjs.js +7 -7
- package/dist/cjs/{input-shims-f8569707.js → input-shims-da7dc0de.js} +92 -12
- package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-action-sheet.cjs.entry.js +4 -4
- package/dist/cjs/ion-alert.cjs.entry.js +4 -4
- package/dist/cjs/ion-app_8.cjs.entry.js +5 -5
- package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
- package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
- package/dist/cjs/ion-checkbox.cjs.entry.js +8 -6
- package/dist/cjs/ion-chip.cjs.entry.js +2 -2
- package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
- package/dist/cjs/ion-datetime_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-img.cjs.entry.js +2 -2
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-input.cjs.entry.js +2 -2
- package/dist/cjs/ion-item-option_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-item_8.cjs.entry.js +37 -10
- package/dist/cjs/ion-loading.cjs.entry.js +4 -4
- package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
- package/dist/cjs/ion-modal.cjs.entry.js +4 -4
- package/dist/cjs/ion-nav_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-picker-column-internal.cjs.entry.js +2 -2
- package/dist/cjs/ion-picker-internal.cjs.entry.js +1 -1
- package/dist/cjs/ion-popover.cjs.entry.js +5 -5
- package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
- package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-range.cjs.entry.js +34 -7
- package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
- package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
- package/dist/cjs/ion-searchbar.cjs.entry.js +2 -2
- package/dist/cjs/ion-segment_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-select_3.cjs.entry.js +3 -3
- package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
- package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-text.cjs.entry.js +2 -2
- package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
- package/dist/cjs/ion-toast.cjs.entry.js +4 -4
- package/dist/cjs/ion-toggle.cjs.entry.js +2 -2
- package/dist/cjs/{ionic-global-6d5d27b5.js → ionic-global-14a0604b.js} +1 -1
- package/dist/cjs/ionic.cjs.js +5 -5
- package/dist/cjs/{ios.transition-80582b44.js → ios.transition-4b93903d.js} +2 -2
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-eeca9fb5.js → md.transition-79f3a215.js} +2 -2
- package/dist/cjs/{overlays-c78a0148.js → overlays-d3a13e61.js} +33 -13
- package/dist/cjs/{status-tap-cc4c6539.js → status-tap-e2e45ff8.js} +1 -1
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/checkbox/checkbox.js +6 -4
- package/dist/collection/components/checkbox/test/basic/checkbox.e2e.js +17 -0
- package/dist/collection/components/checkbox/test/legacy/basic/checkbox.e2e.js +17 -0
- package/dist/collection/components/item/item.ios.css +4 -0
- package/dist/collection/components/item/item.js +43 -7
- package/dist/collection/components/item/item.md.css +4 -0
- package/dist/collection/components/menu/menu.ios.css +20 -12
- package/dist/collection/components/menu/menu.js +2 -2
- package/dist/collection/components/menu/menu.md.css +20 -12
- package/dist/collection/components/menu/test/safe-area/menu.e2e.js +87 -0
- package/dist/collection/components/radio/test/item/radio.e2e.js +23 -0
- package/dist/collection/components/range/range.ios.css +14 -0
- package/dist/collection/components/range/range.js +30 -3
- package/dist/collection/components/range/range.md.css +14 -0
- package/dist/collection/components/range/test/item/range.e2e.js +11 -0
- package/dist/collection/components/select/test/basic/select.e2e.js +21 -0
- package/dist/collection/components/toggle/test/item/toggle.e2e.js +28 -0
- package/dist/collection/utils/input-shims/hacks/scroll-assist.js +86 -4
- package/dist/collection/utils/input-shims/hacks/scroll-data.js +2 -3
- package/dist/collection/utils/overlays.js +29 -9
- package/dist/docs.json +2 -2
- package/dist/esm/{app-globals-c7886b40.js → app-globals-8ae762aa.js} +1 -1
- package/dist/esm/{button-active-b76ae4ec.js → button-active-513e9fff.js} +1 -1
- package/dist/esm/{index-adfb2000.js → index-2d388930.js} +44 -14
- package/dist/esm/{index-48f5e259.js → index-61bddc90.js} +1 -1
- package/dist/esm/{index-01839411.js → index-87684bba.js} +3 -3
- package/dist/esm/index.js +7 -7
- package/dist/esm/{input-shims-af993f05.js → input-shims-d78a3c77.js} +88 -8
- package/dist/esm/ion-accordion_2.entry.js +2 -2
- package/dist/esm/ion-action-sheet.entry.js +4 -4
- package/dist/esm/ion-alert.entry.js +4 -4
- package/dist/esm/ion-app_8.entry.js +5 -5
- package/dist/esm/ion-avatar_3.entry.js +2 -2
- package/dist/esm/ion-back-button.entry.js +2 -2
- package/dist/esm/ion-backdrop.entry.js +2 -2
- package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
- package/dist/esm/ion-button_2.entry.js +2 -2
- package/dist/esm/ion-card_5.entry.js +2 -2
- package/dist/esm/ion-checkbox.entry.js +8 -6
- package/dist/esm/ion-chip.entry.js +2 -2
- package/dist/esm/ion-col_3.entry.js +2 -2
- package/dist/esm/ion-datetime-button.entry.js +2 -2
- package/dist/esm/ion-datetime_3.entry.js +4 -4
- package/dist/esm/ion-fab_3.entry.js +2 -2
- package/dist/esm/ion-img.entry.js +2 -2
- package/dist/esm/ion-infinite-scroll_2.entry.js +2 -2
- package/dist/esm/ion-input.entry.js +2 -2
- package/dist/esm/ion-item-option_3.entry.js +2 -2
- package/dist/esm/ion-item_8.entry.js +37 -10
- package/dist/esm/ion-loading.entry.js +4 -4
- package/dist/esm/ion-menu_3.entry.js +7 -7
- package/dist/esm/ion-modal.entry.js +4 -4
- package/dist/esm/ion-nav_2.entry.js +3 -3
- package/dist/esm/ion-picker-column-internal.entry.js +2 -2
- package/dist/esm/ion-picker-internal.entry.js +1 -1
- package/dist/esm/ion-popover.entry.js +5 -5
- package/dist/esm/ion-progress-bar.entry.js +2 -2
- package/dist/esm/ion-radio_2.entry.js +2 -2
- package/dist/esm/ion-range.entry.js +34 -7
- package/dist/esm/ion-refresher_2.entry.js +2 -2
- package/dist/esm/ion-reorder_2.entry.js +2 -2
- package/dist/esm/ion-ripple-effect.entry.js +2 -2
- package/dist/esm/ion-route_4.entry.js +2 -2
- package/dist/esm/ion-searchbar.entry.js +2 -2
- package/dist/esm/ion-segment_2.entry.js +2 -2
- package/dist/esm/ion-select_3.entry.js +3 -3
- package/dist/esm/ion-spinner.entry.js +2 -2
- package/dist/esm/ion-split-pane.entry.js +2 -2
- package/dist/esm/ion-tab-bar_2.entry.js +2 -2
- package/dist/esm/ion-tab_2.entry.js +1 -1
- package/dist/esm/ion-text.entry.js +2 -2
- package/dist/esm/ion-textarea.entry.js +2 -2
- package/dist/esm/ion-toast.entry.js +4 -4
- package/dist/esm/ion-toggle.entry.js +2 -2
- package/dist/esm/{ionic-global-9080266a.js → ionic-global-b3fc28dd.js} +1 -1
- package/dist/esm/ionic.js +6 -6
- package/dist/esm/{ios.transition-f43871cd.js → ios.transition-81e1aed6.js} +2 -2
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-12d21ad0.js → md.transition-5becd8b5.js} +2 -2
- package/dist/esm/{overlays-4565894b.js → overlays-8fc6656c.js} +31 -11
- package/dist/esm/{status-tap-121c711d.js → status-tap-c5af0dba.js} +1 -1
- package/dist/esm-es5/app-globals-8ae762aa.js +4 -0
- package/dist/esm-es5/{button-active-b76ae4ec.js → button-active-513e9fff.js} +1 -1
- package/dist/esm-es5/{index-adfb2000.js → index-2d388930.js} +1 -1
- package/dist/esm-es5/{index-48f5e259.js → index-61bddc90.js} +1 -1
- package/dist/esm-es5/{index-01839411.js → index-87684bba.js} +1 -1
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/input-shims-d78a3c77.js +4 -0
- package/dist/esm-es5/ion-accordion_2.entry.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-avatar_3.entry.js +1 -1
- package/dist/esm-es5/ion-back-button.entry.js +1 -1
- package/dist/esm-es5/ion-backdrop.entry.js +1 -1
- package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
- package/dist/esm-es5/ion-button_2.entry.js +1 -1
- package/dist/esm-es5/ion-card_5.entry.js +1 -1
- package/dist/esm-es5/ion-checkbox.entry.js +1 -1
- package/dist/esm-es5/ion-chip.entry.js +1 -1
- package/dist/esm-es5/ion-col_3.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-fab_3.entry.js +1 -1
- package/dist/esm-es5/ion-img.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-picker-column-internal.entry.js +1 -1
- package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
- package/dist/esm-es5/ion-popover.entry.js +1 -1
- package/dist/esm-es5/ion-progress-bar.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-ripple-effect.entry.js +1 -1
- package/dist/esm-es5/ion-route_4.entry.js +1 -1
- package/dist/esm-es5/ion-searchbar.entry.js +1 -1
- package/dist/esm-es5/ion-segment_2.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.entry.js +1 -1
- package/dist/esm-es5/ion-spinner.entry.js +1 -1
- package/dist/esm-es5/ion-split-pane.entry.js +1 -1
- package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
- package/dist/esm-es5/ion-tab_2.entry.js +1 -1
- package/dist/esm-es5/ion-text.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-global-9080266a.js → ionic-global-b3fc28dd.js} +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/{ios.transition-f43871cd.js → ios.transition-81e1aed6.js} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/{md.transition-12d21ad0.js → md.transition-5becd8b5.js} +1 -1
- package/dist/esm-es5/overlays-8fc6656c.js +4 -0
- package/dist/esm-es5/{status-tap-121c711d.js → status-tap-c5af0dba.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-5fc777e6.system.js → p-00aed720.system.js} +1 -1
- package/dist/ionic/{p-a033a91d.system.entry.js → p-03e2e541.system.entry.js} +1 -1
- package/dist/ionic/{p-59b40b60.entry.js → p-04ef1ba6.entry.js} +1 -1
- package/dist/ionic/{p-2b0ecc04.entry.js → p-05f10762.entry.js} +1 -1
- package/dist/ionic/{p-3bf120f8.system.entry.js → p-08c5b9f4.system.entry.js} +1 -1
- package/dist/ionic/p-09e15a2a.system.entry.js +4 -0
- package/dist/ionic/p-0bd3cc92.entry.js +4 -0
- package/dist/ionic/{p-57847936.entry.js → p-116641fe.entry.js} +1 -1
- package/dist/ionic/{p-cd002251.entry.js → p-13a91505.entry.js} +1 -1
- package/dist/ionic/p-13ce151b.entry.js +4 -0
- package/dist/ionic/{p-6ccffb74.system.entry.js → p-1a36bf45.system.entry.js} +1 -1
- package/dist/ionic/{p-1916030e.entry.js → p-1bce805b.entry.js} +1 -1
- package/dist/ionic/{p-46058a1e.system.entry.js → p-1c406ee0.system.entry.js} +1 -1
- package/dist/ionic/{p-42e0558f.entry.js → p-20e5eb3e.entry.js} +1 -1
- package/dist/ionic/{p-3d5a6d14.system.js → p-2309dba2.system.js} +1 -1
- package/dist/ionic/{p-aa702daf.entry.js → p-270aa06b.entry.js} +1 -1
- package/dist/ionic/{p-9eced28c.entry.js → p-27614d55.entry.js} +1 -1
- package/dist/ionic/{p-c7ce7e18.entry.js → p-327fc1bf.entry.js} +1 -1
- package/dist/ionic/p-33630008.system.entry.js +4 -0
- package/dist/ionic/{p-8bcd482b.entry.js → p-3730f493.entry.js} +1 -1
- package/dist/ionic/{p-95188051.system.entry.js → p-37456282.system.entry.js} +1 -1
- package/dist/ionic/{p-07656a8a.entry.js → p-39715fcf.entry.js} +1 -1
- package/dist/ionic/{p-f62bed60.entry.js → p-3ae2faf0.entry.js} +1 -1
- package/dist/ionic/{p-fa8fc77b.system.entry.js → p-3af01ae0.system.entry.js} +1 -1
- package/dist/ionic/p-3cbcb899.entry.js +4 -0
- package/dist/ionic/{p-9e8727d6.entry.js → p-3e5676b7.entry.js} +1 -1
- package/dist/ionic/p-40e16caa.system.entry.js +4 -0
- package/dist/ionic/{p-48d378cf.entry.js → p-42a7b112.entry.js} +1 -1
- package/dist/ionic/{p-e239ab05.system.entry.js → p-4616f20a.system.entry.js} +1 -1
- package/dist/ionic/{p-4e1a58c6.system.entry.js → p-486b567b.system.entry.js} +1 -1
- package/dist/ionic/{p-dfee12f6.entry.js → p-4912b933.entry.js} +1 -1
- package/dist/ionic/{p-3d575698.system.entry.js → p-4a1ac160.system.entry.js} +1 -1
- package/dist/ionic/{p-b052b578.entry.js → p-4eab1bb4.entry.js} +1 -1
- package/dist/ionic/{p-264b5dd9.system.entry.js → p-53bbd357.system.entry.js} +1 -1
- package/dist/ionic/{p-9b53c813.entry.js → p-55b99166.entry.js} +1 -1
- package/dist/ionic/{p-e3ca182a.entry.js → p-568fec78.entry.js} +1 -1
- package/dist/ionic/{p-9be96bf3.system.entry.js → p-5c8c9748.system.entry.js} +1 -1
- package/dist/ionic/{p-d57e8b06.js → p-5e2dc8e0.js} +1 -1
- package/dist/ionic/{p-3c325277.js → p-5e43aa8b.js} +1 -1
- package/dist/ionic/{p-810f1bc9.system.entry.js → p-5e84b718.system.entry.js} +1 -1
- package/dist/ionic/{p-60f22efc.system.entry.js → p-60838ce3.system.entry.js} +1 -1
- package/dist/ionic/{p-5080e623.system.entry.js → p-62428e04.system.entry.js} +1 -1
- package/dist/ionic/{p-516421e2.system.entry.js → p-626f7142.system.entry.js} +1 -1
- package/dist/ionic/{p-a8270ae8.system.entry.js → p-63a73b69.system.entry.js} +1 -1
- package/dist/ionic/{p-5163baf4.system.entry.js → p-6522a762.system.entry.js} +1 -1
- package/dist/ionic/{p-a037b6d5.system.entry.js → p-65a4c12f.system.entry.js} +1 -1
- package/dist/ionic/{p-563068af.js → p-6b7e74ba.js} +1 -1
- package/dist/ionic/{p-6eb7b33c.system.entry.js → p-6ba07931.system.entry.js} +1 -1
- package/dist/ionic/{p-c8c0d58a.system.entry.js → p-6bbf2815.system.entry.js} +1 -1
- package/dist/ionic/{p-74834696.system.entry.js → p-6bc9c436.system.entry.js} +1 -1
- package/dist/ionic/{p-ec344ed1.system.entry.js → p-6ca0e4b2.system.entry.js} +1 -1
- package/dist/ionic/p-6edbc09b.system.js +4 -0
- package/dist/ionic/{p-4446e19f.system.entry.js → p-700a2cb1.system.entry.js} +1 -1
- package/dist/ionic/p-70ab8b73.js +5 -0
- package/dist/ionic/{p-52edd6b0.entry.js → p-7129d04e.entry.js} +1 -1
- package/dist/ionic/p-72a1cbc7.js +4 -0
- package/dist/ionic/{p-2e5930dd.system.js → p-73f50e29.system.js} +1 -1
- package/dist/ionic/{p-204fb8f0.system.entry.js → p-76e8336d.system.entry.js} +1 -1
- package/dist/ionic/p-78a293a5.js +4 -0
- package/dist/ionic/p-7a3caa4e.system.js +4 -0
- package/dist/ionic/{p-32983529.system.entry.js → p-7dc0ee11.system.entry.js} +1 -1
- package/dist/ionic/{p-ab051966.entry.js → p-7e46b6ab.entry.js} +1 -1
- package/dist/ionic/p-7e9e16bf.system.entry.js +4 -0
- package/dist/ionic/{p-6276ba2f.system.entry.js → p-82da795c.system.entry.js} +1 -1
- package/dist/ionic/{p-9f3ad626.system.entry.js → p-82f58c25.system.entry.js} +1 -1
- package/dist/ionic/{p-5df94bf8.entry.js → p-83b7bbf9.entry.js} +1 -1
- package/dist/ionic/{p-ec7ff98b.entry.js → p-88ad9cb6.entry.js} +1 -1
- package/dist/ionic/{p-fdfc7b98.entry.js → p-8b79baf0.entry.js} +1 -1
- package/dist/ionic/{p-5260588f.system.entry.js → p-8e28945a.system.entry.js} +1 -1
- package/dist/ionic/p-8fdd4a2f.system.js +4 -0
- package/dist/ionic/{p-49f2eaa6.entry.js → p-90d892fd.entry.js} +1 -1
- package/dist/ionic/{p-2441ba84.system.js → p-91546be9.system.js} +1 -1
- package/dist/ionic/{p-a122ecd0.system.js → p-918d5f19.system.js} +1 -1
- package/dist/ionic/{p-ff3d728d.system.js → p-93616477.system.js} +1 -1
- package/dist/ionic/{p-629b0629.js → p-972763df.js} +1 -1
- package/dist/ionic/p-9f2e0db9.js +4 -0
- package/dist/ionic/{p-c2d6088f.entry.js → p-a1a2dd4d.entry.js} +1 -1
- package/dist/ionic/{p-c005eb67.system.entry.js → p-a6d8476b.system.entry.js} +1 -1
- package/dist/ionic/{p-28d8b87b.entry.js → p-a720dc73.entry.js} +1 -1
- package/dist/ionic/{p-84084b75.entry.js → p-a8d33949.entry.js} +1 -1
- package/dist/ionic/{p-70f4fbac.entry.js → p-ab7f8f4c.entry.js} +1 -1
- package/dist/ionic/{p-26276eb7.system.entry.js → p-abf426cd.system.entry.js} +1 -1
- package/dist/ionic/{p-9fccec52.system.js → p-b098f738.system.js} +1 -1
- package/dist/ionic/{p-eb91aee6.entry.js → p-b0dd4f33.entry.js} +1 -1
- package/dist/ionic/p-b132c2c0.system.js +4 -0
- package/dist/ionic/{p-b453b38d.entry.js → p-b49fe110.entry.js} +1 -1
- package/dist/ionic/{p-b703ebeb.system.entry.js → p-b5637aeb.system.entry.js} +1 -1
- package/dist/ionic/p-b95fd3c6.entry.js +4 -0
- package/dist/ionic/{p-ff0611e6.system.entry.js → p-be321bb6.system.entry.js} +1 -1
- package/dist/ionic/{p-7474a472.system.entry.js → p-bf8224f4.system.entry.js} +1 -1
- package/dist/ionic/{p-0dbfa45f.entry.js → p-bf9b1560.entry.js} +1 -1
- package/dist/ionic/{p-98bfaff3.system.entry.js → p-bfac43d7.system.entry.js} +1 -1
- package/dist/ionic/{p-574411f2.system.entry.js → p-c4d08d6d.system.entry.js} +1 -1
- package/dist/ionic/{p-d8d30fd1.system.entry.js → p-c5729044.system.entry.js} +1 -1
- package/dist/ionic/{p-07f5e286.entry.js → p-c7fca267.entry.js} +1 -1
- package/dist/ionic/{p-041ac2c3.entry.js → p-cc3aa152.entry.js} +1 -1
- package/dist/ionic/{p-6dff4431.entry.js → p-cd12dcd9.entry.js} +1 -1
- package/dist/ionic/{p-d0d09178.system.entry.js → p-cd675d89.system.entry.js} +1 -1
- package/dist/ionic/{p-ef8a8827.system.entry.js → p-ce24ddd7.system.entry.js} +1 -1
- package/dist/ionic/{p-b3f6f321.js → p-ce7a651e.js} +1 -1
- package/dist/ionic/{p-5e549223.system.js → p-d4cea1ba.system.js} +1 -1
- package/dist/ionic/{p-765e6339.entry.js → p-d8b2c214.entry.js} +1 -1
- package/dist/ionic/{p-2ac2278e.system.entry.js → p-de0f1af2.system.entry.js} +1 -1
- package/dist/ionic/{p-5a9dc764.system.entry.js → p-de676d36.system.entry.js} +1 -1
- package/dist/ionic/{p-22e92b06.system.entry.js → p-df699a02.system.entry.js} +1 -1
- package/dist/ionic/{p-99a3df5c.entry.js → p-e24630f9.entry.js} +1 -1
- package/dist/ionic/{p-3f15f60b.entry.js → p-e57a38f3.entry.js} +1 -1
- package/dist/ionic/{p-74ef17ea.system.entry.js → p-e89abe38.system.entry.js} +1 -1
- package/dist/ionic/{p-37c9e295.entry.js → p-ea88031d.entry.js} +1 -1
- package/dist/ionic/{p-47a11fc4.entry.js → p-ebaeeee8.entry.js} +1 -1
- package/dist/ionic/{p-a314559e.system.js → p-ec102360.system.js} +1 -1
- package/dist/ionic/{p-072f99fd.entry.js → p-ee6d9730.entry.js} +1 -1
- package/dist/ionic/{p-bacf09d3.entry.js → p-f0dcf99b.entry.js} +1 -1
- package/dist/ionic/p-f9015336.js +4 -0
- package/dist/ionic/{p-11d0977d.entry.js → p-f920f5ca.entry.js} +1 -1
- package/dist/ionic/p-f978ccd1.js +4 -0
- package/dist/types/components/checkbox/checkbox.d.ts +1 -0
- package/dist/types/components/item/item.d.ts +1 -0
- package/dist/types/components/range/range.d.ts +8 -0
- package/dist/types/utils/browser/index.d.ts +16 -1
- package/dist/types/utils/input-shims/hacks/scroll-data.d.ts +1 -1
- package/dist/types/utils/overlays.d.ts +5 -2
- package/hydrate/index.js +128 -40
- package/package.json +2 -2
- package/dist/esm-es5/app-globals-c7886b40.js +0 -4
- package/dist/esm-es5/input-shims-af993f05.js +0 -4
- package/dist/esm-es5/overlays-4565894b.js +0 -4
- package/dist/ionic/p-23ddd787.system.entry.js +0 -4
- package/dist/ionic/p-4531b920.system.js +0 -4
- package/dist/ionic/p-56495958.js +0 -4
- package/dist/ionic/p-6d640b2b.entry.js +0 -4
- package/dist/ionic/p-75d4ceab.js +0 -4
- package/dist/ionic/p-83459b99.entry.js +0 -4
- package/dist/ionic/p-8f7edf3e.js +0 -4
- package/dist/ionic/p-a18eb556.js +0 -5
- package/dist/ionic/p-a533868d.system.js +0 -4
- package/dist/ionic/p-be187db3.entry.js +0 -4
- package/dist/ionic/p-bfee11b2.system.js +0 -4
- package/dist/ionic/p-c68a8814.system.js +0 -4
- package/dist/ionic/p-cc758251.system.entry.js +0 -4
- package/dist/ionic/p-d898dd46.js +0 -4
- package/dist/ionic/p-dacb0258.js +0 -4
- package/dist/ionic/p-ee55302a.system.entry.js +0 -4
- package/dist/ionic/p-f0c28fbd.entry.js +0 -4
- package/dist/ionic/p-fde174d6.system.entry.js +0 -4
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const index = require('./index-306a7476.js');
|
|
7
|
+
const ionicGlobal = require('./ionic-global-14a0604b.js');
|
|
7
8
|
const frameworkDelegate = require('./framework-delegate-c0873a6f.js');
|
|
8
9
|
const hardwareBackButton = require('./hardware-back-button-b67c8e75.js');
|
|
9
10
|
const helpers = require('./helpers-ea4ccbcb.js');
|
|
10
|
-
const index = require('./index-cc7dfb7c.js');
|
|
11
|
+
const index$1 = require('./index-cc7dfb7c.js');
|
|
11
12
|
|
|
12
13
|
let lastOverlayIndex = 0;
|
|
13
14
|
let lastId = 0;
|
|
@@ -21,7 +22,7 @@ const createController = (tagName) => {
|
|
|
21
22
|
return dismissOverlay(document, data, role, tagName, id);
|
|
22
23
|
},
|
|
23
24
|
async getTop() {
|
|
24
|
-
return
|
|
25
|
+
return getPresentedOverlay(document, tagName);
|
|
25
26
|
},
|
|
26
27
|
};
|
|
27
28
|
};
|
|
@@ -138,7 +139,7 @@ const focusLastDescendant = (ref, overlay) => {
|
|
|
138
139
|
* Should NOT include: Toast
|
|
139
140
|
*/
|
|
140
141
|
const trapKeyboardFocus = (ev, doc) => {
|
|
141
|
-
const lastOverlay =
|
|
142
|
+
const lastOverlay = getPresentedOverlay(doc, 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover');
|
|
142
143
|
const target = ev.target;
|
|
143
144
|
/**
|
|
144
145
|
* If no active overlay, ignore this event.
|
|
@@ -293,7 +294,7 @@ const connectListeners = (doc) => {
|
|
|
293
294
|
}, true);
|
|
294
295
|
// handle back-button click
|
|
295
296
|
doc.addEventListener('ionBackButton', (ev) => {
|
|
296
|
-
const lastOverlay =
|
|
297
|
+
const lastOverlay = getPresentedOverlay(doc);
|
|
297
298
|
if (lastOverlay === null || lastOverlay === void 0 ? void 0 : lastOverlay.backdropDismiss) {
|
|
298
299
|
ev.detail.register(hardwareBackButton.OVERLAY_BACK_BUTTON_PRIORITY, () => {
|
|
299
300
|
return lastOverlay.dismiss(undefined, BACKDROP);
|
|
@@ -303,7 +304,7 @@ const connectListeners = (doc) => {
|
|
|
303
304
|
// handle ESC to close overlay
|
|
304
305
|
doc.addEventListener('keydown', (ev) => {
|
|
305
306
|
if (ev.key === 'Escape') {
|
|
306
|
-
const lastOverlay =
|
|
307
|
+
const lastOverlay = getPresentedOverlay(doc);
|
|
307
308
|
if (lastOverlay === null || lastOverlay === void 0 ? void 0 : lastOverlay.backdropDismiss) {
|
|
308
309
|
lastOverlay.dismiss(undefined, BACKDROP);
|
|
309
310
|
}
|
|
@@ -312,12 +313,15 @@ const connectListeners = (doc) => {
|
|
|
312
313
|
}
|
|
313
314
|
};
|
|
314
315
|
const dismissOverlay = (doc, data, role, overlayTag, id) => {
|
|
315
|
-
const overlay =
|
|
316
|
+
const overlay = getPresentedOverlay(doc, overlayTag, id);
|
|
316
317
|
if (!overlay) {
|
|
317
318
|
return Promise.reject('overlay does not exist');
|
|
318
319
|
}
|
|
319
320
|
return overlay.dismiss(data, role);
|
|
320
321
|
};
|
|
322
|
+
/**
|
|
323
|
+
* Returns a list of all overlays in the DOM even if they are not presented.
|
|
324
|
+
*/
|
|
321
325
|
const getOverlays = (doc, selector) => {
|
|
322
326
|
if (selector === undefined) {
|
|
323
327
|
selector = 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover,ion-toast';
|
|
@@ -325,14 +329,24 @@ const getOverlays = (doc, selector) => {
|
|
|
325
329
|
return Array.from(doc.querySelectorAll(selector)).filter((c) => c.overlayIndex > 0);
|
|
326
330
|
};
|
|
327
331
|
/**
|
|
328
|
-
* Returns
|
|
332
|
+
* Returns a list of all presented overlays.
|
|
333
|
+
* Inline overlays can exist in the DOM but not be presented,
|
|
334
|
+
* so there are times when we want to exclude those.
|
|
335
|
+
* @param doc The document to find the element within.
|
|
336
|
+
* @param overlayTag The selector for the overlay, defaults to Ionic overlay components.
|
|
337
|
+
*/
|
|
338
|
+
const getPresentedOverlays = (doc, overlayTag) => {
|
|
339
|
+
return getOverlays(doc, overlayTag).filter((o) => !isOverlayHidden(o));
|
|
340
|
+
};
|
|
341
|
+
/**
|
|
342
|
+
* Returns a presented overlay element.
|
|
329
343
|
* @param doc The document to find the element within.
|
|
330
344
|
* @param overlayTag The selector for the overlay, defaults to Ionic overlay components.
|
|
331
345
|
* @param id The unique identifier for the overlay instance.
|
|
332
346
|
* @returns The overlay element or `undefined` if no overlay element is found.
|
|
333
347
|
*/
|
|
334
|
-
const
|
|
335
|
-
const overlays =
|
|
348
|
+
const getPresentedOverlay = (doc, overlayTag, id) => {
|
|
349
|
+
const overlays = getPresentedOverlays(doc, overlayTag);
|
|
336
350
|
return id === undefined ? overlays[overlays.length - 1] : overlays.find((o) => o.id === id);
|
|
337
351
|
};
|
|
338
352
|
/**
|
|
@@ -438,7 +452,13 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
|
|
|
438
452
|
if (!overlay.presented) {
|
|
439
453
|
return false;
|
|
440
454
|
}
|
|
441
|
-
|
|
455
|
+
/**
|
|
456
|
+
* If this is the last visible overlay then
|
|
457
|
+
* we want to re-add the root to the accessibility tree.
|
|
458
|
+
*/
|
|
459
|
+
if (index.doc !== undefined && getPresentedOverlays(index.doc).length === 1) {
|
|
460
|
+
setRootAriaHidden(false);
|
|
461
|
+
}
|
|
442
462
|
overlay.presented = false;
|
|
443
463
|
try {
|
|
444
464
|
// Overlay contents should not be clickable during dismiss
|
|
@@ -650,7 +670,7 @@ const createTriggerController = () => {
|
|
|
650
670
|
removeClickListener();
|
|
651
671
|
const triggerEl = trigger !== undefined ? document.getElementById(trigger) : null;
|
|
652
672
|
if (!triggerEl) {
|
|
653
|
-
index.printIonWarning(`A trigger element with the ID "${trigger}" was not found in the DOM. The trigger element must be in the DOM when the "trigger" property is set on an overlay component.`, el);
|
|
673
|
+
index$1.printIonWarning(`A trigger element with the ID "${trigger}" was not found in the DOM. The trigger element must be in the DOM when the "trigger" property is set on an overlay component.`, el);
|
|
654
674
|
return;
|
|
655
675
|
}
|
|
656
676
|
const configureTriggerInteraction = (targetEl, overlayEl) => {
|
|
@@ -680,7 +700,7 @@ exports.createTriggerController = createTriggerController;
|
|
|
680
700
|
exports.dismiss = dismiss;
|
|
681
701
|
exports.eventMethod = eventMethod;
|
|
682
702
|
exports.focusFirstDescendant = focusFirstDescendant;
|
|
683
|
-
exports.
|
|
703
|
+
exports.getPresentedOverlay = getPresentedOverlay;
|
|
684
704
|
exports.isCancel = isCancel;
|
|
685
705
|
exports.loadingController = loadingController;
|
|
686
706
|
exports.modalController = modalController;
|
|
@@ -47,6 +47,9 @@ export class Checkbox {
|
|
|
47
47
|
this.onBlur = () => {
|
|
48
48
|
this.ionBlur.emit();
|
|
49
49
|
};
|
|
50
|
+
this.onClick = (ev) => {
|
|
51
|
+
this.toggleChecked(ev);
|
|
52
|
+
};
|
|
50
53
|
this.color = undefined;
|
|
51
54
|
this.name = this.inputId;
|
|
52
55
|
this.checked = false;
|
|
@@ -58,9 +61,8 @@ export class Checkbox {
|
|
|
58
61
|
this.alignment = 'center';
|
|
59
62
|
this.legacy = undefined;
|
|
60
63
|
}
|
|
61
|
-
// TODO(FW-3100): remove this
|
|
62
64
|
connectedCallback() {
|
|
63
|
-
this.legacyFormController = createLegacyFormController(this.el);
|
|
65
|
+
this.legacyFormController = createLegacyFormController(this.el); // TODO(FW-3100): remove this
|
|
64
66
|
}
|
|
65
67
|
componentWillLoad() {
|
|
66
68
|
this.emitStyle();
|
|
@@ -107,7 +109,7 @@ export class Checkbox {
|
|
|
107
109
|
[`checkbox-justify-${justify}`]: true,
|
|
108
110
|
[`checkbox-alignment-${alignment}`]: true,
|
|
109
111
|
[`checkbox-label-placement-${labelPlacement}`]: true,
|
|
110
|
-
}) }, h("label", { class: "checkbox-wrapper" }, h("input", Object.assign({ type: "checkbox", checked: checked ? true : undefined, disabled: disabled, id: inputId, onChange: this.toggleChecked, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, inheritedAttributes)), h("div", { class: {
|
|
112
|
+
}), onClick: this.onClick }, h("label", { class: "checkbox-wrapper" }, h("input", Object.assign({ type: "checkbox", checked: checked ? true : undefined, disabled: disabled, id: inputId, onChange: this.toggleChecked, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, inheritedAttributes)), h("div", { class: {
|
|
111
113
|
'label-text-wrapper': true,
|
|
112
114
|
'label-text-wrapper-hidden': el.textContent === '',
|
|
113
115
|
} }, h("slot", null)), h("div", { class: "native-wrapper" }, h("svg", { class: "checkbox-icon", viewBox: "0 0 24 24", part: "container" }, path)))));
|
|
@@ -140,7 +142,7 @@ Developers can dismiss this warning by removing their usage of the "legacy" prop
|
|
|
140
142
|
'checkbox-indeterminate': indeterminate,
|
|
141
143
|
'legacy-checkbox': true,
|
|
142
144
|
interactive: true,
|
|
143
|
-
}) }, h("svg", { class: "checkbox-icon", viewBox: "0 0 24 24", part: "container" }, path), h("label", { htmlFor: inputId }, labelText), h("input", { type: "checkbox", "aria-checked": `${checked}`, disabled: disabled, id: inputId, onChange: this.toggleChecked, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) })));
|
|
145
|
+
}), onClick: this.onClick }, h("svg", { class: "checkbox-icon", viewBox: "0 0 24 24", part: "container" }, path), h("label", { htmlFor: inputId }, labelText), h("input", { type: "checkbox", "aria-checked": `${checked}`, disabled: disabled, id: inputId, onChange: this.toggleChecked, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) })));
|
|
144
146
|
}
|
|
145
147
|
getSVGPath(mode, indeterminate) {
|
|
146
148
|
let path = indeterminate ? (h("path", { d: "M6 12L18 12", part: "mark" })) : (h("path", { d: "M5.9,12.5l3.8,3.8l8.8-8.8", part: "mark" }));
|
|
@@ -56,5 +56,22 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
|
|
|
56
56
|
await checkbox.evaluate((el) => (el.checked = true));
|
|
57
57
|
expect(ionChange).not.toHaveReceivedEvent();
|
|
58
58
|
});
|
|
59
|
+
test('clicking padded space within item should click the checkbox', async ({ page }) => {
|
|
60
|
+
await page.setContent(`
|
|
61
|
+
<ion-item>
|
|
62
|
+
<ion-checkbox>Size</ion-checkbox>
|
|
63
|
+
</ion-item>
|
|
64
|
+
`, config);
|
|
65
|
+
const itemNative = page.locator('.item-native');
|
|
66
|
+
const ionChange = await page.spyOnEvent('ionChange');
|
|
67
|
+
// Clicks the padded space within the item
|
|
68
|
+
await itemNative.click({
|
|
69
|
+
position: {
|
|
70
|
+
x: 5,
|
|
71
|
+
y: 5,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
expect(ionChange).toHaveReceivedEvent();
|
|
75
|
+
});
|
|
59
76
|
});
|
|
60
77
|
});
|
|
@@ -47,5 +47,22 @@ configs({ directions: ['ltr'] }).forEach(({ title, config }) => {
|
|
|
47
47
|
await checkbox.evaluate((el) => (el.checked = true));
|
|
48
48
|
await expect(ionChange).not.toHaveReceivedEvent();
|
|
49
49
|
});
|
|
50
|
+
test('clicking padded space within item should click the checkbox', async ({ page }) => {
|
|
51
|
+
await page.setContent(`
|
|
52
|
+
<ion-item>
|
|
53
|
+
<ion-checkbox legacy="true" value="my-checkbox"></ion-checkbox>
|
|
54
|
+
</ion-item>
|
|
55
|
+
`, config);
|
|
56
|
+
const itemNative = page.locator('.item-native');
|
|
57
|
+
const ionChange = await page.spyOnEvent('ionChange');
|
|
58
|
+
// Clicks the padded space within the item
|
|
59
|
+
await itemNative.click({
|
|
60
|
+
position: {
|
|
61
|
+
x: 5,
|
|
62
|
+
y: 5,
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
expect(ionChange).toHaveReceivedEvent();
|
|
66
|
+
});
|
|
50
67
|
});
|
|
51
68
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { Host, forceUpdate, h } from "@stencil/core";
|
|
4
|
+
import { Build, Host, forceUpdate, h } from "@stencil/core";
|
|
5
5
|
import { inheritAttributes, raf } from "../../utils/helpers";
|
|
6
6
|
import { printIonError, printIonWarning } from "../../utils/logging/index";
|
|
7
7
|
import { createColorClasses, hostContext, openURL } from "../../utils/theme";
|
|
@@ -194,8 +194,21 @@ export class Item {
|
|
|
194
194
|
this.el.classList.add('item-has-start-slot');
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
|
+
getFirstInteractive() {
|
|
198
|
+
if (Build.isTesting) {
|
|
199
|
+
/**
|
|
200
|
+
* Pseudo selectors can't be tested in unit tests.
|
|
201
|
+
* It will cause an error when running the tests.
|
|
202
|
+
*
|
|
203
|
+
* TODO: FW-5205 - Remove the build conditional when this is fixed in Stencil
|
|
204
|
+
*/
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
const controls = this.el.querySelectorAll('ion-toggle:not([disabled]), ion-checkbox:not([disabled]), ion-radio:not([disabled]), ion-select:not([disabled])');
|
|
208
|
+
return controls[0];
|
|
209
|
+
}
|
|
197
210
|
render() {
|
|
198
|
-
const { counterString, detail, detailIcon, download, fill, labelColorStyles, lines, disabled, href, rel, shape, target, routerAnimation, routerDirection, inheritedAriaAttributes, } = this;
|
|
211
|
+
const { counterString, detail, detailIcon, download, fill, labelColorStyles, lines, disabled, href, rel, shape, target, routerAnimation, routerDirection, inheritedAriaAttributes, multipleInputs, } = this;
|
|
199
212
|
const childStyles = {};
|
|
200
213
|
const mode = getIonMode(this);
|
|
201
214
|
const clickable = this.isClickable();
|
|
@@ -209,15 +222,37 @@ export class Item {
|
|
|
209
222
|
rel,
|
|
210
223
|
target,
|
|
211
224
|
};
|
|
225
|
+
let clickFn = {};
|
|
226
|
+
const firstInteractive = this.getFirstInteractive();
|
|
212
227
|
// Only set onClick if the item is clickable to prevent screen
|
|
213
228
|
// readers from reading all items as clickable
|
|
214
|
-
|
|
215
|
-
|
|
229
|
+
if (clickable || (firstInteractive !== undefined && !multipleInputs)) {
|
|
230
|
+
clickFn = {
|
|
216
231
|
onClick: (ev) => {
|
|
217
|
-
|
|
232
|
+
if (clickable) {
|
|
233
|
+
openURL(href, ev, routerDirection, routerAnimation);
|
|
234
|
+
}
|
|
235
|
+
if (firstInteractive !== undefined && !multipleInputs) {
|
|
236
|
+
const path = ev.composedPath();
|
|
237
|
+
const target = path[0];
|
|
238
|
+
if (ev.isTrusted) {
|
|
239
|
+
/**
|
|
240
|
+
* Dispatches a click event to the first interactive element,
|
|
241
|
+
* when it is the result of a user clicking on the item.
|
|
242
|
+
*
|
|
243
|
+
* We check if the click target is in the shadow root,
|
|
244
|
+
* which means the user clicked on the .item-native or
|
|
245
|
+
* .item-inner padding.
|
|
246
|
+
*/
|
|
247
|
+
const clickedWithinShadowRoot = this.el.shadowRoot.contains(target);
|
|
248
|
+
if (clickedWithinShadowRoot) {
|
|
249
|
+
firstInteractive.click();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
218
253
|
},
|
|
219
|
-
}
|
|
220
|
-
|
|
254
|
+
};
|
|
255
|
+
}
|
|
221
256
|
const showDetail = detail !== undefined ? detail : mode === 'ios' && clickable;
|
|
222
257
|
this.itemStyles.forEach((value) => {
|
|
223
258
|
Object.assign(childStyles, value);
|
|
@@ -232,6 +267,7 @@ export class Item {
|
|
|
232
267
|
[`item-lines-${lines}`]: lines !== undefined,
|
|
233
268
|
[`item-fill-${fillValue}`]: true,
|
|
234
269
|
[`item-shape-${shape}`]: shape !== undefined,
|
|
270
|
+
'item-has-interactive-control': firstInteractive !== undefined,
|
|
235
271
|
'item-disabled': disabled,
|
|
236
272
|
'in-list': inList,
|
|
237
273
|
'item-multiple-inputs': this.multipleInputs,
|
|
@@ -97,12 +97,14 @@
|
|
|
97
97
|
* Otherwise, the content will have less space on both sides.
|
|
98
98
|
*
|
|
99
99
|
* RTL:
|
|
100
|
-
* The right side of the menu touches the screen edge.
|
|
101
|
-
*
|
|
100
|
+
* The right side of the menu touches the screen edge.
|
|
101
|
+
* The right side needs to revert back to the default value that was set in the core styles, so we unset it here.
|
|
102
|
+
* This would keep the variable consistent with the core styles.
|
|
103
|
+
* Additionally, it would continue to allow users to override the variable if they choose to.
|
|
102
104
|
* The left side of the menu is not touching the screen edge. Padding is not
|
|
103
105
|
* applied to the left side of the menu. A value of 0 is set.
|
|
104
106
|
*/
|
|
105
|
-
--ion-safe-area-right:
|
|
107
|
+
--ion-safe-area-right: unset;
|
|
106
108
|
--ion-safe-area-left: 0px;
|
|
107
109
|
}
|
|
108
110
|
|
|
@@ -115,12 +117,14 @@
|
|
|
115
117
|
* Otherwise, the content will have less space on both sides.
|
|
116
118
|
*
|
|
117
119
|
* RTL:
|
|
118
|
-
* The right side of the menu touches the screen edge.
|
|
119
|
-
*
|
|
120
|
+
* The right side of the menu touches the screen edge.
|
|
121
|
+
* The right side needs to revert back to the default value that was set in the core styles, so we unset it here.
|
|
122
|
+
* This would keep the variable consistent with the core styles.
|
|
123
|
+
* Additionally, it would continue to allow users to override the variable if they choose to.
|
|
120
124
|
* The left side of the menu is not touching the screen edge. Padding is not
|
|
121
125
|
* applied to the left side of the menu. A value of 0 is set.
|
|
122
126
|
*/
|
|
123
|
-
--ion-safe-area-right:
|
|
127
|
+
--ion-safe-area-right: unset;
|
|
124
128
|
--ion-safe-area-left: 0px;
|
|
125
129
|
}
|
|
126
130
|
}
|
|
@@ -176,12 +180,14 @@
|
|
|
176
180
|
* Otherwise, the content will have less space on both sides.
|
|
177
181
|
*
|
|
178
182
|
* RTL:
|
|
179
|
-
* The left side of the menu touches the screen edge.
|
|
180
|
-
*
|
|
183
|
+
* The left side of the menu touches the screen edge.
|
|
184
|
+
* The left side needs to revert back to the default value that was set in the core styles, so we unset it here.
|
|
185
|
+
* This would keep the variable consistent with the core styles.
|
|
186
|
+
* Additionally, it would continue to allow users to override the variable if they choose to.
|
|
181
187
|
* The right side of the menu is not touching the screen edge. Padding is not
|
|
182
188
|
* applied to the right side of the menu. A value of 0 is set.
|
|
183
189
|
*/
|
|
184
|
-
--ion-safe-area-left:
|
|
190
|
+
--ion-safe-area-left: unset;
|
|
185
191
|
--ion-safe-area-right: 0px;
|
|
186
192
|
}
|
|
187
193
|
|
|
@@ -194,12 +200,14 @@
|
|
|
194
200
|
* Otherwise, the content will have less space on both sides.
|
|
195
201
|
*
|
|
196
202
|
* RTL:
|
|
197
|
-
* The left side of the menu touches the screen edge.
|
|
198
|
-
*
|
|
203
|
+
* The left side of the menu touches the screen edge.
|
|
204
|
+
* The left side needs to revert back to the default value that was set in the core styles, so we unset it here.
|
|
205
|
+
* This would keep the variable consistent with the core styles.
|
|
206
|
+
* Additionally, it would continue to allow users to override the variable if they choose to.
|
|
199
207
|
* The right side of the menu is not touching the screen edge. Padding is not
|
|
200
208
|
* applied to the right side of the menu. A value of 0 is set.
|
|
201
209
|
*/
|
|
202
|
-
--ion-safe-area-left:
|
|
210
|
+
--ion-safe-area-left: unset;
|
|
203
211
|
--ion-safe-area-right: 0px;
|
|
204
212
|
}
|
|
205
213
|
}
|
|
@@ -7,7 +7,7 @@ import { doc } from "../../utils/browser/index";
|
|
|
7
7
|
import { GESTURE_CONTROLLER } from "../../utils/gesture/index";
|
|
8
8
|
import { inheritAriaAttributes, assert, clamp, isEndSide as isEnd } from "../../utils/helpers";
|
|
9
9
|
import { menuController } from "../../utils/menu-controller/index";
|
|
10
|
-
import {
|
|
10
|
+
import { getPresentedOverlay } from "../../utils/overlays";
|
|
11
11
|
import { config } from "../../global/config";
|
|
12
12
|
import { getIonMode } from "../../global/ionic-global";
|
|
13
13
|
const iosEasing = 'cubic-bezier(0.32,0.72,0,1)';
|
|
@@ -35,7 +35,7 @@ export class Menu {
|
|
|
35
35
|
* open does not contain this ion-menu, then ion-menu's
|
|
36
36
|
* focus trapping should not run.
|
|
37
37
|
*/
|
|
38
|
-
const lastOverlay =
|
|
38
|
+
const lastOverlay = getPresentedOverlay(document);
|
|
39
39
|
if (lastOverlay && !lastOverlay.contains(this.el)) {
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
@@ -97,12 +97,14 @@
|
|
|
97
97
|
* Otherwise, the content will have less space on both sides.
|
|
98
98
|
*
|
|
99
99
|
* RTL:
|
|
100
|
-
* The right side of the menu touches the screen edge.
|
|
101
|
-
*
|
|
100
|
+
* The right side of the menu touches the screen edge.
|
|
101
|
+
* The right side needs to revert back to the default value that was set in the core styles, so we unset it here.
|
|
102
|
+
* This would keep the variable consistent with the core styles.
|
|
103
|
+
* Additionally, it would continue to allow users to override the variable if they choose to.
|
|
102
104
|
* The left side of the menu is not touching the screen edge. Padding is not
|
|
103
105
|
* applied to the left side of the menu. A value of 0 is set.
|
|
104
106
|
*/
|
|
105
|
-
--ion-safe-area-right:
|
|
107
|
+
--ion-safe-area-right: unset;
|
|
106
108
|
--ion-safe-area-left: 0px;
|
|
107
109
|
}
|
|
108
110
|
|
|
@@ -115,12 +117,14 @@
|
|
|
115
117
|
* Otherwise, the content will have less space on both sides.
|
|
116
118
|
*
|
|
117
119
|
* RTL:
|
|
118
|
-
* The right side of the menu touches the screen edge.
|
|
119
|
-
*
|
|
120
|
+
* The right side of the menu touches the screen edge.
|
|
121
|
+
* The right side needs to revert back to the default value that was set in the core styles, so we unset it here.
|
|
122
|
+
* This would keep the variable consistent with the core styles.
|
|
123
|
+
* Additionally, it would continue to allow users to override the variable if they choose to.
|
|
120
124
|
* The left side of the menu is not touching the screen edge. Padding is not
|
|
121
125
|
* applied to the left side of the menu. A value of 0 is set.
|
|
122
126
|
*/
|
|
123
|
-
--ion-safe-area-right:
|
|
127
|
+
--ion-safe-area-right: unset;
|
|
124
128
|
--ion-safe-area-left: 0px;
|
|
125
129
|
}
|
|
126
130
|
}
|
|
@@ -176,12 +180,14 @@
|
|
|
176
180
|
* Otherwise, the content will have less space on both sides.
|
|
177
181
|
*
|
|
178
182
|
* RTL:
|
|
179
|
-
* The left side of the menu touches the screen edge.
|
|
180
|
-
*
|
|
183
|
+
* The left side of the menu touches the screen edge.
|
|
184
|
+
* The left side needs to revert back to the default value that was set in the core styles, so we unset it here.
|
|
185
|
+
* This would keep the variable consistent with the core styles.
|
|
186
|
+
* Additionally, it would continue to allow users to override the variable if they choose to.
|
|
181
187
|
* The right side of the menu is not touching the screen edge. Padding is not
|
|
182
188
|
* applied to the right side of the menu. A value of 0 is set.
|
|
183
189
|
*/
|
|
184
|
-
--ion-safe-area-left:
|
|
190
|
+
--ion-safe-area-left: unset;
|
|
185
191
|
--ion-safe-area-right: 0px;
|
|
186
192
|
}
|
|
187
193
|
|
|
@@ -194,12 +200,14 @@
|
|
|
194
200
|
* Otherwise, the content will have less space on both sides.
|
|
195
201
|
*
|
|
196
202
|
* RTL:
|
|
197
|
-
* The left side of the menu touches the screen edge.
|
|
198
|
-
*
|
|
203
|
+
* The left side of the menu touches the screen edge.
|
|
204
|
+
* The left side needs to revert back to the default value that was set in the core styles, so we unset it here.
|
|
205
|
+
* This would keep the variable consistent with the core styles.
|
|
206
|
+
* Additionally, it would continue to allow users to override the variable if they choose to.
|
|
199
207
|
* The right side of the menu is not touching the screen edge. Padding is not
|
|
200
208
|
* applied to the right side of the menu. A value of 0 is set.
|
|
201
209
|
*/
|
|
202
|
-
--ion-safe-area-left:
|
|
210
|
+
--ion-safe-area-left: unset;
|
|
203
211
|
--ion-safe-area-right: 0px;
|
|
204
212
|
}
|
|
205
213
|
}
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
+
/**
|
|
7
|
+
* This behavior does not vary across modes.
|
|
8
|
+
*/
|
|
9
|
+
configs({ modes: ['md'] }).forEach(({ title, config, screenshot }) => {
|
|
10
|
+
test.describe(title('menu: safe area'), () => {
|
|
11
|
+
test.beforeEach(async ({ page }) => {
|
|
12
|
+
await page.goto(`/src/components/menu/test/safe-area`, config);
|
|
13
|
+
});
|
|
14
|
+
test.describe('side: start', () => {
|
|
15
|
+
test('should render with safe area when notch is on the left', async ({ page }) => {
|
|
16
|
+
const ionDidOpen = await page.spyOnEvent('ionDidOpen');
|
|
17
|
+
await page.evaluate(() => {
|
|
18
|
+
const style = document.querySelector('style');
|
|
19
|
+
style.innerHTML = `
|
|
20
|
+
:root {
|
|
21
|
+
--ion-safe-area-left: 50px !important;
|
|
22
|
+
--ion-safe-area-right: 10px !important;
|
|
23
|
+
}
|
|
24
|
+
`;
|
|
25
|
+
});
|
|
26
|
+
await page.click('#open-start');
|
|
27
|
+
await ionDidOpen.next();
|
|
28
|
+
const startMenu = page.locator('[menu-id="start-menu"]');
|
|
29
|
+
await expect(startMenu).toHaveClass(/show-menu/);
|
|
30
|
+
await expect(page).toHaveScreenshot(screenshot(`menu-start-safe-area-left-notch`));
|
|
31
|
+
});
|
|
32
|
+
test('should render with safe area when notch is on the right', async ({ page }) => {
|
|
33
|
+
const ionDidOpen = await page.spyOnEvent('ionDidOpen');
|
|
34
|
+
await page.evaluate(() => {
|
|
35
|
+
const style = document.querySelector('style');
|
|
36
|
+
style.innerHTML = `
|
|
37
|
+
:root {
|
|
38
|
+
--ion-safe-area-left: 10px !important;
|
|
39
|
+
--ion-safe-area-right: 50px !important;
|
|
40
|
+
}
|
|
41
|
+
`;
|
|
42
|
+
});
|
|
43
|
+
await page.click('#open-start');
|
|
44
|
+
await ionDidOpen.next();
|
|
45
|
+
const startMenu = page.locator('[menu-id="start-menu"]');
|
|
46
|
+
await expect(startMenu).toHaveClass(/show-menu/);
|
|
47
|
+
await expect(page).toHaveScreenshot(screenshot(`menu-start-safe-area-right-notch`));
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
test.describe('side: end', () => {
|
|
51
|
+
test('should render with safe area when notch is on the left', async ({ page }) => {
|
|
52
|
+
const ionDidOpen = await page.spyOnEvent('ionDidOpen');
|
|
53
|
+
await page.evaluate(() => {
|
|
54
|
+
const style = document.querySelector('style');
|
|
55
|
+
style.innerHTML = `
|
|
56
|
+
:root {
|
|
57
|
+
--ion-safe-area-left: 50px !important;
|
|
58
|
+
--ion-safe-area-right: 10px !important;
|
|
59
|
+
}
|
|
60
|
+
`;
|
|
61
|
+
});
|
|
62
|
+
await page.click('#open-end');
|
|
63
|
+
await ionDidOpen.next();
|
|
64
|
+
const endMenu = page.locator('[menu-id="end-menu"]');
|
|
65
|
+
await expect(endMenu).toHaveClass(/show-menu/);
|
|
66
|
+
await expect(page).toHaveScreenshot(screenshot(`menu-end-safe-area-left-notch`));
|
|
67
|
+
});
|
|
68
|
+
test('should render with safe area when notch is on the right', async ({ page }) => {
|
|
69
|
+
const ionDidOpen = await page.spyOnEvent('ionDidOpen');
|
|
70
|
+
await page.evaluate(() => {
|
|
71
|
+
const style = document.querySelector('style');
|
|
72
|
+
style.innerHTML = `
|
|
73
|
+
:root {
|
|
74
|
+
--ion-safe-area-left: 10px !important;
|
|
75
|
+
--ion-safe-area-right: 50px !important;
|
|
76
|
+
}
|
|
77
|
+
`;
|
|
78
|
+
});
|
|
79
|
+
await page.click('#open-end');
|
|
80
|
+
await ionDidOpen.next();
|
|
81
|
+
const endMenu = page.locator('[menu-id="end-menu"]');
|
|
82
|
+
await expect(endMenu).toHaveClass(/show-menu/);
|
|
83
|
+
await expect(page).toHaveScreenshot(screenshot(`menu-end-safe-area-right-notch`));
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
});
|
|
@@ -66,4 +66,27 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ title, screenshot, co
|
|
|
66
66
|
await expect(list).toHaveScreenshot(screenshot(`radio-stacked-label-in-item`));
|
|
67
67
|
});
|
|
68
68
|
});
|
|
69
|
+
test.describe(title('radio: ionChange'), () => {
|
|
70
|
+
test('clicking padded space within item should click the radio', async ({ page }) => {
|
|
71
|
+
await page.setContent(`
|
|
72
|
+
<ion-radio-group>
|
|
73
|
+
<ion-item>
|
|
74
|
+
<ion-radio>
|
|
75
|
+
<ion-label>Enable Notifications</ion-label>
|
|
76
|
+
</ion-radio>
|
|
77
|
+
</ion-item>
|
|
78
|
+
</ion-radio-group>
|
|
79
|
+
`, config);
|
|
80
|
+
const itemNative = page.locator('.item-native');
|
|
81
|
+
const ionChange = await page.spyOnEvent('ionChange');
|
|
82
|
+
// Clicks the padded space within the item
|
|
83
|
+
await itemNative.click({
|
|
84
|
+
position: {
|
|
85
|
+
x: 5,
|
|
86
|
+
y: 5,
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
expect(ionChange).toHaveReceivedEvent();
|
|
90
|
+
});
|
|
91
|
+
});
|
|
69
92
|
});
|
|
@@ -407,6 +407,10 @@
|
|
|
407
407
|
margin-bottom: 0px;
|
|
408
408
|
}
|
|
409
409
|
|
|
410
|
+
/**
|
|
411
|
+
* 24px was chosen so the knob and its
|
|
412
|
+
* shadow do not get cut off by the item.
|
|
413
|
+
*/
|
|
410
414
|
:host {
|
|
411
415
|
--knob-border-radius: 50%;
|
|
412
416
|
--knob-background: #ffffff;
|
|
@@ -428,6 +432,16 @@
|
|
|
428
432
|
padding-bottom: 8px;
|
|
429
433
|
}
|
|
430
434
|
|
|
435
|
+
:host(.range-item-start-adjustment) {
|
|
436
|
+
-webkit-padding-start: 24px;
|
|
437
|
+
padding-inline-start: 24px;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
:host(.range-item-end-adjustment) {
|
|
441
|
+
-webkit-padding-end: 24px;
|
|
442
|
+
padding-inline-end: 24px;
|
|
443
|
+
}
|
|
444
|
+
|
|
431
445
|
:host(.ion-color) .range-bar-active,
|
|
432
446
|
:host(.ion-color) .range-tick-active {
|
|
433
447
|
background: var(--ion-color-base);
|