@ionic/core 7.5.8-dev.11703088210.14a72b83 → 7.5.8-dev.11704294569.1abc989d
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 +1 -1
- package/components/alert.js +2 -2
- package/components/backdrop.js +0 -12
- package/components/button.js +2 -2
- package/components/checkbox.js +2 -2
- package/components/gesture-controller.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-badge.js +2 -2
- package/components/ion-content.js +3 -4
- package/components/ion-datetime.js +15 -48
- package/components/ion-fab-button.js +2 -2
- package/components/ion-input.js +4 -2
- package/components/ion-item-option.js +2 -2
- package/components/ion-loading.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-picker.js +2 -2
- package/components/ion-progress-bar.js +2 -2
- package/components/ion-range.js +2 -2
- package/components/ion-refresher-content.js +4 -11
- package/components/ion-refresher.js +184 -5
- package/components/ion-router-link.js +1 -1
- package/components/ion-searchbar.js +3 -1
- package/components/ion-segment-button.js +1 -1
- package/components/ion-select.js +2 -2
- package/components/ion-tab-bar.js +2 -2
- package/components/ion-textarea.js +4 -2
- package/components/ion-toast.js +2 -2
- package/components/ion-toggle.js +2 -2
- package/components/item.js +2 -2
- package/components/label.js +1 -1
- package/components/overlays.js +5 -1
- package/components/picker-column.js +1 -1
- package/components/radio.js +2 -2
- package/components/select-popover.js +1 -1
- package/css/core.css +35 -34
- package/css/core.css.map +1 -1
- package/css/global.bundle.css +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/css/themes/dark.always.css +122 -0
- package/css/themes/dark.always.css.map +1 -0
- package/css/themes/dark.class.css +122 -0
- package/css/themes/dark.class.css.map +1 -0
- package/css/themes/dark.css +3 -0
- package/css/themes/dark.css.map +1 -0
- package/css/themes/dark.system.css +124 -0
- package/css/themes/dark.system.css.map +1 -0
- package/css/typography.css +1 -1
- package/dist/cjs/{app-globals-28656db1.js → app-globals-0af482c7.js} +1 -1
- package/dist/cjs/{button-active-75b38d77.js → button-active-9d7e0640.js} +2 -2
- package/dist/cjs/{gesture-controller-c40c045a.js → gesture-controller-9436f482.js} +1 -0
- package/dist/cjs/{index-097270a3.js → index-5cbb20f9.js} +1 -1
- package/dist/cjs/{index-b0102f48.js → index-bbb4336c.js} +39 -1
- package/dist/cjs/{index-cb3e0ab7.js → index-d4c2e02c.js} +3 -3
- package/dist/cjs/{index-d1b59ffa.js → index-ee07ed59.js} +1 -1
- package/dist/cjs/index.cjs.js +9 -9
- package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-action-sheet.cjs.entry.js +7 -7
- package/dist/cjs/ion-alert.cjs.entry.js +8 -8
- package/dist/cjs/ion-app_8.cjs.entry.js +8 -9
- package/dist/cjs/ion-avatar_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-back-button.cjs.entry.js +3 -3
- package/dist/cjs/ion-backdrop.cjs.entry.js +2 -14
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-button_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
- package/dist/cjs/ion-checkbox.cjs.entry.js +4 -4
- 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 +15 -29
- package/dist/cjs/ion-fab_3.cjs.entry.js +4 -4
- 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 +6 -4
- package/dist/cjs/ion-item-option_3.cjs.entry.js +5 -5
- package/dist/cjs/ion-item_8.cjs.entry.js +5 -5
- package/dist/cjs/ion-loading.cjs.entry.js +5 -4
- package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
- package/dist/cjs/ion-modal.cjs.entry.js +6 -6
- package/dist/cjs/ion-nav_2.cjs.entry.js +4 -4
- 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 -4
- package/dist/cjs/ion-progress-bar.cjs.entry.js +4 -4
- package/dist/cjs/ion-radio_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-range.cjs.entry.js +5 -5
- package/dist/cjs/ion-refresher_2.cjs.entry.js +19 -34
- package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
- package/dist/cjs/ion-route_4.cjs.entry.js +3 -3
- package/dist/cjs/ion-searchbar.cjs.entry.js +5 -3
- package/dist/cjs/ion-segment_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-select_3.cjs.entry.js +7 -6
- 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 +4 -4
- 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 +6 -4
- package/dist/cjs/ion-toast.cjs.entry.js +6 -5
- package/dist/cjs/ion-toggle.cjs.entry.js +5 -5
- package/dist/cjs/{ionic-global-62510d64.js → ionic-global-f4a2093b.js} +1 -1
- package/dist/cjs/ionic.cjs.js +5 -5
- package/dist/cjs/{ios.transition-d9c0e4fb.js → ios.transition-a4ffb5a2.js} +2 -2
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-4fac8a87.js → md.transition-292abe1c.js} +2 -2
- package/dist/cjs/{overlays-b1471172.js → overlays-2c6b1072.js} +6 -2
- package/dist/cjs/{status-tap-0aa8e1f2.js → status-tap-415acac6.js} +1 -1
- package/dist/cjs/{swipe-back-2a858bbd.js → swipe-back-b8f2330b.js} +2 -2
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/action-sheet/action-sheet.ios.css +3 -3
- package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +23 -14
- package/dist/collection/components/alert/alert.ios.css +6 -6
- package/dist/collection/components/alert/alert.md.css +6 -6
- package/dist/collection/components/alert/test/a11y/alert.e2e.js +22 -9
- package/dist/collection/components/back-button/back-button.ios.css +1 -1
- package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +21 -0
- package/dist/collection/components/backdrop/backdrop.js +0 -12
- package/dist/collection/components/badge/badge.ios.css +1 -1
- package/dist/collection/components/badge/badge.md.css +1 -1
- package/dist/collection/components/badge/test/a11y/badge.e2e.js +18 -0
- package/dist/collection/components/button/button.ios.css +10 -10
- package/dist/collection/components/button/button.md.css +8 -8
- package/dist/collection/components/button/test/a11y/button.e2e.js +48 -0
- package/dist/collection/components/checkbox/checkbox.ios.css +2 -2
- package/dist/collection/components/checkbox/checkbox.md.css +2 -2
- package/dist/collection/components/checkbox/test/a11y/checkbox.e2e.js +11 -2
- package/dist/collection/components/content/content.css +0 -4
- package/dist/collection/components/content/content.js +2 -3
- package/dist/collection/components/datetime/datetime.ios.css +83 -24
- package/dist/collection/components/datetime/datetime.js +5 -20
- package/dist/collection/components/datetime/datetime.md.css +88 -24
- package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +1 -1
- package/dist/collection/components/datetime/test/a11y/datetime.spec.js +6 -9
- package/dist/collection/components/datetime/test/basic/datetime.e2e.js +10 -0
- package/dist/collection/components/datetime/test/month-year-picker/datetime.e2e.js +1 -1
- package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +2 -2
- package/dist/collection/components/fab-button/fab-button.ios.css +13 -13
- package/dist/collection/components/fab-button/fab-button.md.css +4 -4
- package/dist/collection/components/fab-button/test/a11y/fab-button.e2e.js +50 -0
- package/dist/collection/components/input/input.ios.css +3 -3
- package/dist/collection/components/input/input.js +4 -2
- package/dist/collection/components/input/input.md.css +3 -3
- package/dist/collection/components/input/test/a11y/input.e2e.js +35 -3
- package/dist/collection/components/item/item.ios.css +3 -3
- package/dist/collection/components/item/item.md.css +4 -4
- package/dist/collection/components/item-option/item-option.ios.css +2 -2
- package/dist/collection/components/item-option/item-option.md.css +1 -1
- package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +28 -0
- package/dist/collection/components/label/label.md.css +1 -1
- package/dist/collection/components/label/test/a11y/label.e2e.js +20 -0
- package/dist/collection/components/loading/loading.md.css +1 -1
- package/dist/collection/components/loading/test/a11y/loading.e2e.js +21 -5
- package/dist/collection/components/menu-button/menu-button.ios.css +1 -1
- package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +14 -0
- package/dist/collection/components/picker/picker.ios.css +1 -1
- package/dist/collection/components/picker/picker.md.css +1 -1
- package/dist/collection/components/picker-column/picker-column.md.css +1 -1
- package/dist/collection/components/picker-internal/test/a11y/picker-internal.e2e.js +18 -2
- package/dist/collection/components/progress-bar/progress-bar.ios.css +2 -2
- package/dist/collection/components/progress-bar/progress-bar.md.css +2 -2
- package/dist/collection/components/progress-bar/test/a11y/progress-bar.e2e.js +24 -0
- package/dist/collection/components/radio/radio.ios.css +2 -2
- package/dist/collection/components/radio/radio.md.css +2 -2
- package/dist/collection/components/radio/test/a11y/radio.e2e.js +44 -6
- package/dist/collection/components/range/range.ios.css +1 -1
- package/dist/collection/components/range/range.md.css +3 -3
- package/dist/collection/components/range/test/a11y/range.e2e.js +18 -8
- package/dist/collection/components/refresher/refresher.md.css +2 -2
- package/dist/collection/components/refresher/refresher.utils.js +11 -19
- package/dist/collection/components/refresher/test/a11y/refresher.e2e.js +25 -0
- package/dist/collection/components/refresher-content/refresher-content.js +4 -10
- package/dist/collection/components/router-link/router-link.css +1 -1
- package/dist/collection/components/router-link/test/a11y/router-link.e2e.js +23 -0
- package/dist/collection/components/searchbar/searchbar.ios.css +1 -1
- package/dist/collection/components/searchbar/searchbar.js +3 -1
- package/dist/collection/components/segment/test/a11y/segment.e2e.js +23 -0
- package/dist/collection/components/segment-button/segment-button.md.css +2 -2
- package/dist/collection/components/select/select.ios.css +3 -3
- package/dist/collection/components/select/select.md.css +3 -3
- package/dist/collection/components/select/test/a11y/select.e2e.js +59 -4
- package/dist/collection/components/select-popover/select-popover.md.css +4 -4
- package/dist/collection/components/select-popover/test/a11y/select-popover.e2e.js +32 -0
- package/dist/collection/components/tab-bar/tab-bar.ios.css +1 -1
- package/dist/collection/components/tab-bar/tab-bar.md.css +1 -1
- package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +35 -3
- package/dist/collection/components/textarea/textarea.ios.css +3 -3
- package/dist/collection/components/textarea/textarea.js +4 -2
- package/dist/collection/components/textarea/textarea.md.css +3 -3
- package/dist/collection/components/toast/test/a11y/toast.e2e.js +56 -24
- package/dist/collection/components/toast/toast.ios.css +1 -1
- package/dist/collection/components/toast/toast.md.css +2 -2
- package/dist/collection/components/toggle/test/a11y/toggle.e2e.js +8 -2
- package/dist/collection/components/toggle/toggle.ios.css +1 -1
- package/dist/collection/components/toggle/toggle.md.css +2 -2
- package/dist/collection/css/test/a11y/typography.e2e.js +18 -0
- package/dist/collection/themes/test/colors/theme.e2e.js +114 -0
- package/dist/collection/utils/gesture/gesture-controller.js +1 -1
- package/dist/collection/utils/overlays.js +5 -1
- package/dist/collection/utils/test/overlays/overlays-scroll-blocking.spec.js +65 -0
- package/dist/collection/utils/test/playwright/generator.js +1 -0
- package/dist/collection/utils/test/playwright/page/utils/set-content.js +1 -1
- package/dist/docs.json +13 -24
- package/dist/esm/{app-globals-c23144fc.js → app-globals-722340c4.js} +1 -1
- package/dist/esm/{button-active-7013b5a1.js → button-active-ed9d848c.js} +2 -2
- package/dist/esm/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
- package/dist/esm/{index-39329c6f.js → index-08d686eb.js} +39 -1
- package/dist/esm/{index-2cf77112.js → index-39782642.js} +2 -2
- package/dist/esm/{index-7a818ed3.js → index-80492ed3.js} +1 -1
- package/dist/esm/{index-bebaae5d.js → index-d8817fb0.js} +3 -3
- package/dist/esm/index.js +9 -9
- package/dist/esm/ion-accordion_2.entry.js +2 -2
- package/dist/esm/ion-action-sheet.entry.js +7 -7
- package/dist/esm/ion-alert.entry.js +8 -8
- package/dist/esm/ion-app_8.entry.js +8 -9
- package/dist/esm/ion-avatar_3.entry.js +4 -4
- package/dist/esm/ion-back-button.entry.js +3 -3
- package/dist/esm/ion-backdrop.entry.js +2 -14
- package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
- package/dist/esm/ion-button_2.entry.js +4 -4
- package/dist/esm/ion-card_5.entry.js +2 -2
- package/dist/esm/ion-checkbox.entry.js +4 -4
- 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 +15 -29
- package/dist/esm/ion-fab_3.entry.js +4 -4
- 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 +6 -4
- package/dist/esm/ion-item-option_3.entry.js +5 -5
- package/dist/esm/ion-item_8.entry.js +5 -5
- package/dist/esm/ion-loading.entry.js +5 -4
- package/dist/esm/ion-menu_3.entry.js +7 -7
- package/dist/esm/ion-modal.entry.js +6 -6
- package/dist/esm/ion-nav_2.entry.js +4 -4
- 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 -4
- package/dist/esm/ion-progress-bar.entry.js +4 -4
- package/dist/esm/ion-radio_2.entry.js +4 -4
- package/dist/esm/ion-range.entry.js +5 -5
- package/dist/esm/ion-refresher_2.entry.js +19 -34
- package/dist/esm/ion-reorder_2.entry.js +3 -3
- package/dist/esm/ion-ripple-effect.entry.js +2 -2
- package/dist/esm/ion-route_4.entry.js +3 -3
- package/dist/esm/ion-searchbar.entry.js +5 -3
- package/dist/esm/ion-segment_2.entry.js +4 -4
- package/dist/esm/ion-select_3.entry.js +7 -6
- 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 +4 -4
- 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 +6 -4
- package/dist/esm/ion-toast.entry.js +6 -5
- package/dist/esm/ion-toggle.entry.js +5 -5
- package/dist/esm/{ionic-global-6c78e871.js → ionic-global-c0cda98e.js} +1 -1
- package/dist/esm/ionic.js +6 -6
- package/dist/esm/{ios.transition-daa373e9.js → ios.transition-fd16bec1.js} +2 -2
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-91c3d3cc.js → md.transition-94ac93e1.js} +2 -2
- package/dist/esm/{overlays-64e67e2c.js → overlays-d23ea6e1.js} +6 -2
- package/dist/esm/{status-tap-9dd45200.js → status-tap-2b93b1b5.js} +1 -1
- package/dist/esm/{swipe-back-a6f386fc.js → swipe-back-a8ca7f93.js} +2 -2
- package/dist/esm-es5/app-globals-722340c4.js +4 -0
- package/dist/esm-es5/{button-active-7013b5a1.js → button-active-ed9d848c.js} +1 -1
- package/dist/esm-es5/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
- package/dist/esm-es5/{index-39329c6f.js → index-08d686eb.js} +1 -1
- package/dist/esm-es5/{index-2cf77112.js → index-39782642.js} +1 -1
- package/dist/esm-es5/{index-7a818ed3.js → index-80492ed3.js} +1 -1
- package/dist/esm-es5/{index-bebaae5d.js → index-d8817fb0.js} +1 -1
- package/dist/esm-es5/index.js +1 -1
- 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-6c78e871.js → ionic-global-c0cda98e.js} +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/{ios.transition-daa373e9.js → ios.transition-fd16bec1.js} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/{md.transition-91c3d3cc.js → md.transition-94ac93e1.js} +1 -1
- package/dist/esm-es5/overlays-d23ea6e1.js +4 -0
- package/dist/esm-es5/{status-tap-9dd45200.js → status-tap-2b93b1b5.js} +1 -1
- package/dist/esm-es5/swipe-back-a8ca7f93.js +4 -0
- package/dist/html.html-data.json +2 -2
- 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-ee4a54e3.entry.js → p-023b1cf4.entry.js} +1 -1
- package/dist/ionic/{p-6744eca5.entry.js → p-02e066a0.entry.js} +1 -1
- package/dist/ionic/{p-23a27e78.system.entry.js → p-0339b688.system.entry.js} +1 -1
- package/dist/ionic/{p-70ecb18b.entry.js → p-0941a5d7.entry.js} +1 -1
- package/dist/ionic/{p-a843a90e.system.entry.js → p-098f4d12.system.entry.js} +1 -1
- package/dist/ionic/p-0afef6b9.entry.js +4 -0
- package/dist/ionic/{p-a0945c3a.system.entry.js → p-0e53f8ea.system.entry.js} +1 -1
- package/dist/ionic/{p-d3e123c0.entry.js → p-0ebcff25.entry.js} +1 -1
- package/dist/ionic/{p-161d0916.entry.js → p-1161a793.entry.js} +1 -1
- package/dist/ionic/{p-89026d53.entry.js → p-1208f939.entry.js} +1 -1
- package/dist/ionic/{p-18032a93.entry.js → p-1286049a.entry.js} +1 -1
- package/dist/ionic/{p-eef8d7e8.system.entry.js → p-12869199.system.entry.js} +1 -1
- package/dist/ionic/p-1786bc72.js +4 -0
- package/dist/ionic/{p-bc97b5cd.system.entry.js → p-193ff029.system.entry.js} +1 -1
- package/dist/ionic/{p-1631b52f.system.js → p-1d624e03.system.js} +1 -1
- package/dist/ionic/{p-2657f213.entry.js → p-1de103b7.entry.js} +1 -1
- package/dist/ionic/p-1e57bd24.entry.js +4 -0
- package/dist/ionic/{p-3f5ae764.entry.js → p-1fc72959.entry.js} +1 -1
- package/dist/ionic/{p-1ff22253.entry.js → p-2092f39f.entry.js} +1 -1
- package/dist/ionic/{p-c7c8429a.system.js → p-20d469d0.system.js} +1 -1
- package/dist/ionic/{p-b81a8111.system.entry.js → p-2938823a.system.entry.js} +1 -1
- package/dist/ionic/{p-46dbd723.entry.js → p-29bf41bd.entry.js} +1 -1
- package/dist/ionic/p-2dd0355d.system.entry.js +4 -0
- package/dist/ionic/{p-57c0d5bf.system.entry.js → p-2f2293da.system.entry.js} +1 -1
- package/dist/ionic/{p-0263eb49.system.js → p-30029cc2.system.js} +1 -1
- package/dist/ionic/{p-ac4a7fc0.js → p-31158892.js} +1 -1
- package/dist/ionic/p-31cf9613.entry.js +4 -0
- package/dist/ionic/p-350f7292.system.entry.js +4 -0
- package/dist/ionic/{p-86c2bbc8.entry.js → p-353b349d.entry.js} +1 -1
- package/dist/ionic/{p-27e6473f.entry.js → p-3b568d18.entry.js} +1 -1
- package/dist/ionic/p-3e13501a.system.entry.js +4 -0
- package/dist/ionic/{p-31b2326e.system.js → p-3e1e14d9.system.js} +1 -1
- package/dist/ionic/{p-3acad8ff.system.entry.js → p-3e625023.system.entry.js} +1 -1
- package/dist/ionic/{p-426bdba9.system.js → p-3fe96156.system.js} +1 -1
- package/dist/ionic/{p-e26030f8.system.js → p-4155f352.system.js} +1 -1
- package/dist/ionic/p-4890093d.js +4 -0
- package/dist/ionic/{p-2cd9cb80.system.entry.js → p-4fb51e61.system.entry.js} +1 -1
- package/dist/ionic/p-51abefb7.system.js +4 -0
- package/dist/ionic/{p-e8e530fc.entry.js → p-535d2a67.entry.js} +1 -1
- package/dist/ionic/{p-a3a145d3.entry.js → p-55a0cd33.entry.js} +1 -1
- package/dist/ionic/{p-aac289d2.system.entry.js → p-564af202.system.entry.js} +1 -1
- package/dist/ionic/{p-abab375b.system.js → p-57477107.system.js} +1 -1
- package/dist/ionic/p-57798ba6.entry.js +4 -0
- package/dist/ionic/p-588fdf40.entry.js +4 -0
- package/dist/ionic/{p-a5c81b99.entry.js → p-5a68960f.entry.js} +1 -1
- package/dist/ionic/{p-6cf08720.entry.js → p-5b20db28.entry.js} +1 -1
- package/dist/ionic/{p-34d6f520.system.js → p-5b365ca7.system.js} +1 -1
- package/dist/ionic/{p-a1b4dba7.entry.js → p-5b834053.entry.js} +1 -1
- package/dist/ionic/{p-21f015cf.js → p-5ecae037.js} +1 -1
- package/dist/ionic/{p-67598744.entry.js → p-5fbfa8c9.entry.js} +1 -1
- package/dist/ionic/p-5ff60387.system.entry.js +4 -0
- package/dist/ionic/p-60b386c9.system.entry.js +4 -0
- package/dist/ionic/{p-d0251fc4.entry.js → p-67da080d.entry.js} +1 -1
- package/dist/ionic/{p-df361680.system.entry.js → p-6f96f7b1.system.entry.js} +1 -1
- package/dist/ionic/{p-fcf49977.system.entry.js → p-73ea8f82.system.entry.js} +1 -1
- package/dist/ionic/{p-9f376964.system.entry.js → p-76c94634.system.entry.js} +1 -1
- package/dist/ionic/p-76d3765d.js +4 -0
- package/dist/ionic/{p-2ac9d078.system.entry.js → p-77965464.system.entry.js} +1 -1
- package/dist/ionic/{p-a99f14a7.system.entry.js → p-7828a27f.system.entry.js} +1 -1
- package/dist/ionic/{p-f34d6a49.entry.js → p-7a63e024.entry.js} +1 -1
- package/dist/ionic/{p-5f46d93e.entry.js → p-7c7e21a7.entry.js} +1 -1
- package/dist/ionic/{p-bbe3feee.entry.js → p-80fa068e.entry.js} +1 -1
- package/dist/ionic/p-8c97cdc0.entry.js +4 -0
- package/dist/ionic/p-8e086176.system.entry.js +4 -0
- package/dist/ionic/{p-f5d2dc9b.js → p-8ededb41.js} +1 -1
- package/dist/ionic/{p-41f7af3f.system.entry.js → p-90483001.system.entry.js} +1 -1
- package/dist/ionic/{p-5f127075.system.entry.js → p-93f25d0d.system.entry.js} +1 -1
- package/dist/ionic/p-9588396d.entry.js +4 -0
- package/dist/ionic/{p-a0db3de9.system.entry.js → p-9709ebd8.system.entry.js} +1 -1
- package/dist/ionic/{p-12cdcb59.js → p-9738fd82.js} +1 -1
- package/dist/ionic/{p-8c202d6e.system.entry.js → p-98c798de.system.entry.js} +1 -1
- package/dist/ionic/{p-a70b5d24.entry.js → p-98f3d827.entry.js} +1 -1
- package/dist/ionic/{p-bb3615f7.js → p-9b97df10.js} +1 -1
- package/dist/ionic/{p-89cfbc88.system.entry.js → p-9c229210.system.entry.js} +2 -2
- package/dist/ionic/p-9eae578e.system.entry.js +4 -0
- package/dist/ionic/{p-93dac17a.system.entry.js → p-9eec42cc.system.entry.js} +1 -1
- package/dist/ionic/{p-53a3283e.entry.js → p-a4afcc88.entry.js} +1 -1
- package/dist/ionic/p-a60a1ce5.js +4 -0
- package/dist/ionic/{p-315ad733.system.entry.js → p-a8e90d15.system.entry.js} +1 -1
- package/dist/ionic/{p-90db28f8.system.entry.js → p-a9e3b5be.system.entry.js} +1 -1
- package/dist/ionic/p-ab11130c.system.js +4 -0
- package/dist/ionic/{p-27a5f2c7.system.entry.js → p-ad8bed54.system.entry.js} +1 -1
- package/dist/ionic/p-b1a2a195.system.entry.js +4 -0
- package/dist/ionic/{p-98ac0e27.system.entry.js → p-b3b3efba.system.entry.js} +2 -2
- package/dist/ionic/{p-58ff9e5b.system.js → p-b4a51c42.system.js} +1 -1
- package/dist/ionic/{p-3cb5466e.entry.js → p-b5f9f14c.entry.js} +1 -1
- package/dist/ionic/{p-b0fcf130.system.entry.js → p-b6f5e4f2.system.entry.js} +1 -1
- package/dist/ionic/{p-99fe0543.entry.js → p-bcd073dd.entry.js} +1 -1
- package/dist/ionic/p-be6344dd.entry.js +4 -0
- package/dist/ionic/p-c14f8ac8.js +4 -0
- package/dist/ionic/{p-acdd8148.js → p-c3c3333a.js} +1 -1
- package/dist/ionic/p-c7c7c110.entry.js +4 -0
- package/dist/ionic/{p-8261be6c.system.entry.js → p-c847fb35.system.entry.js} +1 -1
- package/dist/ionic/{p-e3c44332.system.entry.js → p-c91ccbfa.system.entry.js} +1 -1
- package/dist/ionic/p-c9e07b2f.entry.js +4 -0
- package/dist/ionic/{p-ad953217.system.entry.js → p-caf21b46.system.entry.js} +1 -1
- package/dist/ionic/p-ccc2fb62.system.entry.js +4 -0
- package/dist/ionic/{p-19545a49.system.entry.js → p-cce9f61a.system.entry.js} +1 -1
- package/dist/ionic/{p-71d986ae.entry.js → p-cef8c5c2.entry.js} +1 -1
- package/dist/ionic/{p-1c6c6098.entry.js → p-cfe57b1b.entry.js} +1 -1
- package/dist/ionic/{p-64af4468.entry.js → p-d1025b3d.entry.js} +1 -1
- package/dist/ionic/p-d32188f3.system.entry.js +4 -0
- package/dist/ionic/{p-c04accad.entry.js → p-d37b441e.entry.js} +1 -1
- package/dist/ionic/{p-4f71a9cf.system.entry.js → p-d39db09e.system.entry.js} +1 -1
- package/dist/ionic/{p-f8c5a0dd.system.js → p-d3b030b8.system.js} +1 -1
- package/dist/ionic/{p-405f1a72.entry.js → p-d51019a8.entry.js} +1 -1
- package/dist/ionic/{p-91f9e81b.js → p-d662d908.js} +1 -1
- package/dist/ionic/p-d7e9a0ac.entry.js +4 -0
- package/dist/ionic/p-da15f571.system.entry.js +4 -0
- package/dist/ionic/{p-3535a36c.entry.js → p-ddb30596.entry.js} +1 -1
- package/dist/ionic/p-de74582b.system.entry.js +4 -0
- package/dist/ionic/{p-c5ae50be.system.js → p-e3584231.system.js} +1 -1
- package/dist/ionic/p-e4d90573.js +4 -0
- package/dist/ionic/p-ebcf6eca.entry.js +4 -0
- package/dist/ionic/{p-ca32685b.system.entry.js → p-ec040c06.system.entry.js} +1 -1
- package/dist/ionic/{p-2a7e6572.system.entry.js → p-ed25b7cc.system.entry.js} +1 -1
- package/dist/ionic/{p-7484b1d6.system.js → p-f7a36cd0.system.js} +1 -1
- package/dist/ionic/{p-e4045e04.entry.js → p-f8a5bb89.entry.js} +1 -1
- package/dist/ionic/{p-8a75f7bf.system.entry.js → p-f957d584.system.entry.js} +1 -1
- package/dist/ionic/{p-ad78c421.system.js → p-fff7a57e.system.js} +1 -1
- package/dist/types/components/backdrop/backdrop.d.ts +0 -3
- package/dist/types/components/datetime/datetime.d.ts +0 -1
- package/dist/types/components/input/input.d.ts +5 -1
- package/dist/types/components/menu/menu.d.ts +1 -1
- package/dist/types/components/refresher/refresher.utils.d.ts +0 -16
- package/dist/types/components/searchbar/searchbar.d.ts +2 -0
- package/dist/types/components/textarea/textarea.d.ts +5 -1
- package/dist/types/components.d.ts +7 -7
- package/dist/types/utils/gesture/gesture-controller.d.ts +1 -0
- package/hydrate/index.d.ts +1 -1
- package/hydrate/index.js +79 -112
- package/package.json +2 -2
- package/components/refresher.utils.js +0 -196
- package/dist/esm-es5/app-globals-c23144fc.js +0 -4
- package/dist/esm-es5/overlays-64e67e2c.js +0 -4
- package/dist/esm-es5/swipe-back-a6f386fc.js +0 -4
- package/dist/ionic/p-06600f70.js +0 -4
- package/dist/ionic/p-0827d00e.system.entry.js +0 -4
- package/dist/ionic/p-1cbc21e2.system.entry.js +0 -4
- package/dist/ionic/p-1e7daa1f.entry.js +0 -4
- package/dist/ionic/p-2507b0c0.entry.js +0 -4
- package/dist/ionic/p-312221db.entry.js +0 -4
- package/dist/ionic/p-33f3cd49.entry.js +0 -4
- package/dist/ionic/p-35ce400e.system.js +0 -4
- package/dist/ionic/p-45db7949.system.entry.js +0 -4
- package/dist/ionic/p-58dd7c15.entry.js +0 -4
- package/dist/ionic/p-5a7d5905.system.entry.js +0 -4
- package/dist/ionic/p-5c7f13cd.system.entry.js +0 -4
- package/dist/ionic/p-5fb707e0.entry.js +0 -4
- package/dist/ionic/p-6a6477b2.js +0 -4
- package/dist/ionic/p-742e11cf.system.entry.js +0 -4
- package/dist/ionic/p-78ebf1b6.system.entry.js +0 -4
- package/dist/ionic/p-7ae5ca1f.system.entry.js +0 -4
- package/dist/ionic/p-83fada9e.system.entry.js +0 -4
- package/dist/ionic/p-8a10752d.entry.js +0 -4
- package/dist/ionic/p-af959b5d.entry.js +0 -4
- package/dist/ionic/p-b11ceee2.entry.js +0 -4
- package/dist/ionic/p-b5e33ebc.system.entry.js +0 -4
- package/dist/ionic/p-b8f2134e.js +0 -4
- package/dist/ionic/p-cde72008.js +0 -4
- package/dist/ionic/p-d1530ea9.entry.js +0 -4
- package/dist/ionic/p-ddccf1f4.js +0 -4
- package/dist/ionic/p-e145b9f9.entry.js +0 -4
- package/dist/ionic/p-eab6401e.js +0 -4
- package/dist/ionic/p-edc5c693.system.entry.js +0 -4
- package/dist/ionic/p-f0384573.system.entry.js +0 -4
- package/dist/ionic/p-f10de9d5.system.js +0 -4
- package/dist/ionic/p-f444fea5.entry.js +0 -4
|
@@ -4,10 +4,65 @@
|
|
|
4
4
|
import AxeBuilder from "@axe-core/playwright";
|
|
5
5
|
import { expect } from "@playwright/test";
|
|
6
6
|
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
7
|
-
configs({
|
|
8
|
-
test.describe(title('
|
|
9
|
-
test('should not have accessibility violations', async ({ page }) => {
|
|
10
|
-
await page.
|
|
7
|
+
configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
|
|
8
|
+
test.describe(title('textarea: a11y'), () => {
|
|
9
|
+
test('default layout should not have accessibility violations', async ({ page }) => {
|
|
10
|
+
await page.setContent(`
|
|
11
|
+
<main>
|
|
12
|
+
<ion-select label="Label" placeholder="Placeholder"></ion-select>
|
|
13
|
+
<ion-select placeholder="Placeholder">
|
|
14
|
+
<div slot="label">Label</div>
|
|
15
|
+
</ion-select>
|
|
16
|
+
<ion-select label="Label" value="a">
|
|
17
|
+
<ion-select-option value="a">Apple</ion-select-option>
|
|
18
|
+
</ion-select>
|
|
19
|
+
<ion-select aria-label="Label"></ion-select>
|
|
20
|
+
<ion-item>
|
|
21
|
+
<ion-select label="My Label" value="apples">
|
|
22
|
+
<ion-select-option value="apples">Apples</ion-select-option>
|
|
23
|
+
<ion-select-option value="bananas">Bananas</ion-select-option>
|
|
24
|
+
<ion-select-option value="oranges">Oranges</ion-select-option>
|
|
25
|
+
</ion-select>
|
|
26
|
+
</ion-item>
|
|
27
|
+
<ion-select id="multiple" multiple="true" label="My Label">
|
|
28
|
+
<ion-select-option value="apples">Apples</ion-select-option>
|
|
29
|
+
<ion-select-option value="bananas">Bananas</ion-select-option>
|
|
30
|
+
<ion-select-option value="oranges">Oranges</ion-select-option>
|
|
31
|
+
</ion-select>
|
|
32
|
+
|
|
33
|
+
<script>
|
|
34
|
+
const multiple = document.querySelector('#multiple');
|
|
35
|
+
multiple.value = ['apples', 'bananas'];
|
|
36
|
+
</script>
|
|
37
|
+
</main>
|
|
38
|
+
`, config);
|
|
39
|
+
const results = await new AxeBuilder({ page }).analyze();
|
|
40
|
+
expect(results.violations).toEqual([]);
|
|
41
|
+
});
|
|
42
|
+
test('focused state should not have accessibility violations', async ({ page }) => {
|
|
43
|
+
/**
|
|
44
|
+
* The primary color against the focus background
|
|
45
|
+
* when using fill="solid" does not meet AA
|
|
46
|
+
* contrast guidelines so it excluded from the test.
|
|
47
|
+
* The contrast here is a significant improvement
|
|
48
|
+
* over what Ionic has had in the past, so the team
|
|
49
|
+
* has decided that this tradeoff is acceptable since
|
|
50
|
+
* the scope of the problem is limited to the focus
|
|
51
|
+
* state with the primary color when fill="solid".
|
|
52
|
+
*/
|
|
53
|
+
await page.setContent(`
|
|
54
|
+
<main>
|
|
55
|
+
<ion-select class="has-focus" label="Label" value="a">
|
|
56
|
+
<ion-select-option value="a">Apple</ion-select-option>
|
|
57
|
+
</ion-select>
|
|
58
|
+
<ion-select class="has-focus" label-placement="floating" label="Label" value="a">
|
|
59
|
+
<ion-select-option value="a">Apple</ion-select-option>
|
|
60
|
+
</ion-select>
|
|
61
|
+
<ion-select class="has-focus" fill="outline" label-placement="floating" label="Label" value="a">
|
|
62
|
+
<ion-select-option value="a">Apple</ion-select-option>
|
|
63
|
+
</ion-select>
|
|
64
|
+
</main>
|
|
65
|
+
`, config);
|
|
11
66
|
const results = await new AxeBuilder({ page }).analyze();
|
|
12
67
|
expect(results.violations).toEqual([]);
|
|
13
68
|
});
|
|
@@ -187,10 +187,10 @@ ion-item {
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
.item-radio-checked {
|
|
190
|
-
--background: rgba(var(--ion-color-primary-rgb,
|
|
191
|
-
--background-focused: var(--ion-color-primary, #
|
|
190
|
+
--background: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.08);
|
|
191
|
+
--background-focused: var(--ion-color-primary, #0054e9);
|
|
192
192
|
--background-focused-opacity: 0.2;
|
|
193
|
-
--background-hover: var(--ion-color-primary, #
|
|
193
|
+
--background-hover: var(--ion-color-primary, #0054e9);
|
|
194
194
|
--background-hover-opacity: 0.12;
|
|
195
195
|
}
|
|
196
196
|
|
|
@@ -198,5 +198,5 @@ ion-item {
|
|
|
198
198
|
--background-activated: var(--ion-item-color, var(--ion-text-color, #000));
|
|
199
199
|
--background-focused: var(--ion-item-color, var(--ion-text-color, #000));
|
|
200
200
|
--background-hover: var(--ion-item-color, var(--ion-text-color, #000));
|
|
201
|
-
--color: var(--ion-color-primary, #
|
|
201
|
+
--color: var(--ion-color-primary, #0054e9);
|
|
202
202
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import AxeBuilder from "@axe-core/playwright";
|
|
5
|
+
import { expect } from "@playwright/test";
|
|
6
|
+
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
7
|
+
configs({ directions: ['ltr'], themes: ['dark', 'light'] }).forEach(({ config, title }) => {
|
|
8
|
+
test.describe(title('select-popover: a11y'), () => {
|
|
9
|
+
test('should not have accessibility violations when header is defined', async ({ page }) => {
|
|
10
|
+
await page.setContent(`
|
|
11
|
+
<ion-popover is-open="true">
|
|
12
|
+
<ion-select-popover multiple="false"></ion-select-popover>
|
|
13
|
+
</ion-popover>
|
|
14
|
+
|
|
15
|
+
<script>
|
|
16
|
+
const selectPopover = document.querySelector('ion-select-popover');
|
|
17
|
+
selectPopover.options = [
|
|
18
|
+
{ value: 'apple', text: 'Apple', disabled: false, checked: true },
|
|
19
|
+
{ value: 'banana', text: 'Banana', disabled: false, checked: false },
|
|
20
|
+
];
|
|
21
|
+
</script>
|
|
22
|
+
`, config);
|
|
23
|
+
const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent');
|
|
24
|
+
const popover = page.locator('ion-popover');
|
|
25
|
+
await popover.evaluate((el) => el.present());
|
|
26
|
+
await ionPopoverDidPresent.next();
|
|
27
|
+
// TODO(FW-5698): remove withRules() call and resolve Axe errors
|
|
28
|
+
const results = await new AxeBuilder({ page }).withRules('color-contrast').analyze();
|
|
29
|
+
expect(results.violations).toEqual([]);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
});
|
|
@@ -234,7 +234,7 @@
|
|
|
234
234
|
--background-focused: var(--ion-tab-bar-background-focused, #e0e0e0);
|
|
235
235
|
--border: 0.55px solid var(--ion-tab-bar-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.2))));
|
|
236
236
|
--color: var(--ion-tab-bar-color, var(--ion-color-step-600, #666666));
|
|
237
|
-
--color-selected: var(--ion-tab-bar-color-selected, var(--ion-color-primary, #
|
|
237
|
+
--color-selected: var(--ion-tab-bar-color-selected, var(--ion-color-primary, #0054e9));
|
|
238
238
|
height: 50px;
|
|
239
239
|
}
|
|
240
240
|
|
|
@@ -234,6 +234,6 @@
|
|
|
234
234
|
--background-focused: var(--ion-tab-bar-background-focused, #e0e0e0);
|
|
235
235
|
--border: 1px solid var(--ion-tab-bar-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.07))));
|
|
236
236
|
--color: var(--ion-tab-bar-color, var(--ion-color-step-650, #595959));
|
|
237
|
-
--color-selected: var(--ion-tab-bar-color-selected, var(--ion-color-primary, #
|
|
237
|
+
--color-selected: var(--ion-tab-bar-color-selected, var(--ion-color-primary, #0054e9));
|
|
238
238
|
height: 56px;
|
|
239
239
|
}
|
|
@@ -4,14 +4,46 @@
|
|
|
4
4
|
import AxeBuilder from "@axe-core/playwright";
|
|
5
5
|
import { expect } from "@playwright/test";
|
|
6
6
|
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
7
|
-
configs({ directions: ['ltr'] }).forEach(({ title, config
|
|
7
|
+
configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
|
|
8
8
|
test.describe(title('textarea: a11y'), () => {
|
|
9
|
-
test('should not have accessibility violations', async ({ page }) => {
|
|
10
|
-
await page.
|
|
9
|
+
test('default layout should not have accessibility violations', async ({ page }) => {
|
|
10
|
+
await page.setContent(`
|
|
11
|
+
<main>
|
|
12
|
+
<ion-textarea label="Label" placeholder="Placeholder"></ion-textarea>
|
|
13
|
+
<ion-textarea placeholder="Placeholder">
|
|
14
|
+
<div slot="label">Label"></div>
|
|
15
|
+
</ion-textarea>
|
|
16
|
+
<ion-textarea label="Label" value="My Text"></ion-textarea>
|
|
17
|
+
<ion-textarea aria-label="Label"></ion-textarea>
|
|
18
|
+
</main>
|
|
19
|
+
`, config);
|
|
20
|
+
const results = await new AxeBuilder({ page }).analyze();
|
|
21
|
+
expect(results.violations).toEqual([]);
|
|
22
|
+
});
|
|
23
|
+
test('focused state should not have accessibility violations', async ({ page }) => {
|
|
24
|
+
/**
|
|
25
|
+
* The primary color against the focus background
|
|
26
|
+
* when using fill="solid" does not meet AA
|
|
27
|
+
* contrast guidelines so it excluded from the test.
|
|
28
|
+
* The contrast here is a significant improvement
|
|
29
|
+
* over what Ionic has had in the past, so the team
|
|
30
|
+
* has decided that this tradeoff is acceptable since
|
|
31
|
+
* the scope of the problem is limited to the focus
|
|
32
|
+
* state with the primary color when fill="solid".
|
|
33
|
+
*/
|
|
34
|
+
await page.setContent(`
|
|
35
|
+
<main>
|
|
36
|
+
<ion-textarea class="has-focus" label="Label" value="My Text"></ion-textarea>
|
|
37
|
+
<ion-textarea class="has-focus" label-placement="floating" label="Label" value="My Text"></ion-textarea>
|
|
38
|
+
<ion-textarea class="has-focus" fill="outline" label-placement="floating" label="Label" value="My Text"></ion-textarea>
|
|
39
|
+
</main>
|
|
40
|
+
`, config);
|
|
11
41
|
const results = await new AxeBuilder({ page }).analyze();
|
|
12
42
|
expect(results.violations).toEqual([]);
|
|
13
43
|
});
|
|
14
44
|
});
|
|
45
|
+
});
|
|
46
|
+
configs({ directions: ['ltr'] }).forEach(({ title, config, screenshot }) => {
|
|
15
47
|
test.describe(title('textarea: font scaling'), () => {
|
|
16
48
|
test('should scale text on larger font sizes', async ({ page }) => {
|
|
17
49
|
await page.setContent(`
|
|
@@ -91,9 +91,9 @@
|
|
|
91
91
|
--padding-start: 0;
|
|
92
92
|
--border-radius: 0;
|
|
93
93
|
--border-style: solid;
|
|
94
|
-
--highlight-color-focused: var(--ion-color-primary, #
|
|
95
|
-
--highlight-color-valid: var(--ion-color-success, #
|
|
96
|
-
--highlight-color-invalid: var(--ion-color-danger, #
|
|
94
|
+
--highlight-color-focused: var(--ion-color-primary, #0054e9);
|
|
95
|
+
--highlight-color-valid: var(--ion-color-success, #2dd55b);
|
|
96
|
+
--highlight-color-invalid: var(--ion-color-danger, #c5000f);
|
|
97
97
|
/**
|
|
98
98
|
* This is a private API that is used to switch
|
|
99
99
|
* out the highlight color based on the state
|
|
@@ -160,6 +160,8 @@ export class Textarea {
|
|
|
160
160
|
/**
|
|
161
161
|
* Sets focus on the native `textarea` in `ion-textarea`. Use this method instead of the global
|
|
162
162
|
* `textarea.focus()`.
|
|
163
|
+
*
|
|
164
|
+
* See [managing focus](/docs/developing/managing-focus) for more information.
|
|
163
165
|
*/
|
|
164
166
|
async setFocus() {
|
|
165
167
|
if (this.nativeInput) {
|
|
@@ -448,7 +450,7 @@ Developers can use the "legacy" property to continue using the legacy form marku
|
|
|
448
450
|
"optional": false,
|
|
449
451
|
"docs": {
|
|
450
452
|
"tags": [],
|
|
451
|
-
"text": "
|
|
453
|
+
"text": "Sets the [`autofocus` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus) on the native input element.\n\nThis may not be sufficient for the element to be focused on page load. See [managing focus](/docs/developing/managing-focus) for more information."
|
|
452
454
|
},
|
|
453
455
|
"attribute": "autofocus",
|
|
454
456
|
"reflect": false,
|
|
@@ -1035,7 +1037,7 @@ Developers can use the "legacy" property to continue using the legacy form marku
|
|
|
1035
1037
|
"return": "Promise<void>"
|
|
1036
1038
|
},
|
|
1037
1039
|
"docs": {
|
|
1038
|
-
"text": "Sets focus on the native `textarea` in `ion-textarea`. Use this method instead of the global\n`textarea.focus()
|
|
1040
|
+
"text": "Sets focus on the native `textarea` in `ion-textarea`. Use this method instead of the global\n`textarea.focus()`.\n\nSee [managing focus](/docs/developing/managing-focus) for more information.",
|
|
1039
1041
|
"tags": []
|
|
1040
1042
|
}
|
|
1041
1043
|
},
|
|
@@ -91,9 +91,9 @@
|
|
|
91
91
|
--padding-start: 0;
|
|
92
92
|
--border-radius: 0;
|
|
93
93
|
--border-style: solid;
|
|
94
|
-
--highlight-color-focused: var(--ion-color-primary, #
|
|
95
|
-
--highlight-color-valid: var(--ion-color-success, #
|
|
96
|
-
--highlight-color-invalid: var(--ion-color-danger, #
|
|
94
|
+
--highlight-color-focused: var(--ion-color-primary, #0054e9);
|
|
95
|
+
--highlight-color-valid: var(--ion-color-success, #2dd55b);
|
|
96
|
+
--highlight-color-invalid: var(--ion-color-danger, #c5000f);
|
|
97
97
|
/**
|
|
98
98
|
* This is a private API that is used to switch
|
|
99
99
|
* out the highlight color based on the state
|
|
@@ -4,6 +4,62 @@
|
|
|
4
4
|
import AxeBuilder from "@axe-core/playwright";
|
|
5
5
|
import { expect } from "@playwright/test";
|
|
6
6
|
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
7
|
+
configs({ directions: ['ltr'], themes: ['dark', 'light'] }).forEach(({ title, config }) => {
|
|
8
|
+
test.describe(title('toast: Axe testing'), () => {
|
|
9
|
+
test('should not have any axe violations with inline toasts', async ({ page }) => {
|
|
10
|
+
await page.setContent(`
|
|
11
|
+
<ion-toast></ion-toast>
|
|
12
|
+
|
|
13
|
+
<script>
|
|
14
|
+
const toast = document.querySelector('ion-toast');
|
|
15
|
+
toast.icon = 'person';
|
|
16
|
+
toast.header = 'Inline Toast Header';
|
|
17
|
+
toast.message = 'Inline Toast Message';
|
|
18
|
+
toast.buttons = ['OK'];
|
|
19
|
+
</script>
|
|
20
|
+
`, config);
|
|
21
|
+
const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
|
|
22
|
+
const toast = page.locator('ion-toast');
|
|
23
|
+
await toast.evaluate((el) => el.present());
|
|
24
|
+
await ionToastDidPresent.next();
|
|
25
|
+
const results = await new AxeBuilder({ page }).analyze();
|
|
26
|
+
expect(results.violations).toEqual([]);
|
|
27
|
+
});
|
|
28
|
+
test('should not have any axe violations with controller toasts', async ({ page }) => {
|
|
29
|
+
await page.setContent(`
|
|
30
|
+
<script type="module">
|
|
31
|
+
import { toastController } from '../../../../dist/ionic/index.esm.js';
|
|
32
|
+
window.toastController = toastController;
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<ion-button onclick="presentToast()">Present</ion-button>
|
|
36
|
+
|
|
37
|
+
<script>
|
|
38
|
+
const presentToast = async () => {
|
|
39
|
+
// we only want to test color contrast on the toast itself
|
|
40
|
+
const button = document.querySelector('ion-button');
|
|
41
|
+
button.style.display = 'none';
|
|
42
|
+
|
|
43
|
+
const toast = await toastController.create({
|
|
44
|
+
icon: 'person',
|
|
45
|
+
header: 'Controller Toast Header',
|
|
46
|
+
message: 'Controller Toast Message',
|
|
47
|
+
buttons: ['OK']
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
await toast.present();
|
|
51
|
+
};
|
|
52
|
+
</script>
|
|
53
|
+
`, config);
|
|
54
|
+
const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent');
|
|
55
|
+
const button = page.locator('ion-button');
|
|
56
|
+
await button.click();
|
|
57
|
+
await ionToastDidPresent.next();
|
|
58
|
+
const results = await new AxeBuilder({ page }).analyze();
|
|
59
|
+
expect(results.violations).toEqual([]);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
});
|
|
7
63
|
/**
|
|
8
64
|
* This test does not check LTR vs RTL layouts
|
|
9
65
|
*/
|
|
@@ -12,30 +68,6 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
|
12
68
|
test.beforeEach(async ({ page }) => {
|
|
13
69
|
await page.goto(`/src/components/toast/test/a11y`, config);
|
|
14
70
|
});
|
|
15
|
-
test('should not have any axe violations with inline toasts', async ({ page }) => {
|
|
16
|
-
const didPresent = await page.spyOnEvent('ionToastDidPresent');
|
|
17
|
-
await page.click('#inline-toast-trigger');
|
|
18
|
-
await didPresent.next();
|
|
19
|
-
/**
|
|
20
|
-
* IonToast overlays the entire screen, so
|
|
21
|
-
* Axe will be unable to verify color contrast
|
|
22
|
-
* on elements under the toast.
|
|
23
|
-
*/
|
|
24
|
-
const results = await new AxeBuilder({ page }).disableRules('color-contrast').analyze();
|
|
25
|
-
expect(results.violations).toEqual([]);
|
|
26
|
-
});
|
|
27
|
-
test('should not have any axe violations with controller toasts', async ({ page }) => {
|
|
28
|
-
const didPresent = await page.spyOnEvent('ionToastDidPresent');
|
|
29
|
-
await page.click('#controller-toast-trigger');
|
|
30
|
-
await didPresent.next();
|
|
31
|
-
/**
|
|
32
|
-
* IonToast overlays the entire screen, so
|
|
33
|
-
* Axe will be unable to verify color contrast
|
|
34
|
-
* on elements under the toast.
|
|
35
|
-
*/
|
|
36
|
-
const results = await new AxeBuilder({ page }).disableRules('color-contrast').analyze();
|
|
37
|
-
expect(results.violations).toEqual([]);
|
|
38
|
-
});
|
|
39
71
|
test('should have aria-labelledby and aria-label added to the button when htmlAttributes is set', async ({ page, }) => {
|
|
40
72
|
const didPresent = await page.spyOnEvent('ionToastDidPresent');
|
|
41
73
|
await page.click('#aria-label-toast-trigger');
|
|
@@ -313,7 +313,7 @@
|
|
|
313
313
|
:host {
|
|
314
314
|
--background: var(--ion-color-step-50, #f2f2f2);
|
|
315
315
|
--border-radius: 14px;
|
|
316
|
-
--button-color: var(--ion-color-primary, #
|
|
316
|
+
--button-color: var(--ion-color-primary, #0054e9);
|
|
317
317
|
--color: var(--ion-color-step-850, #262626);
|
|
318
318
|
--max-width: 700px;
|
|
319
319
|
--max-height: 478px;
|
|
@@ -314,7 +314,7 @@
|
|
|
314
314
|
--background: var(--ion-color-step-800, #333333);
|
|
315
315
|
--border-radius: 4px;
|
|
316
316
|
--box-shadow: 0 3px 5px -1px rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12);
|
|
317
|
-
--button-color: var(--ion-color-primary, #
|
|
317
|
+
--button-color: var(--ion-color-primary, #0054e9);
|
|
318
318
|
--color: var(--ion-color-step-50, #f2f2f2);
|
|
319
319
|
--max-width: 700px;
|
|
320
320
|
--start: 8px;
|
|
@@ -411,7 +411,7 @@
|
|
|
411
411
|
|
|
412
412
|
@media (any-hover: hover) {
|
|
413
413
|
.toast-button:hover {
|
|
414
|
-
background-color: rgba(var(--ion-color-primary-rgb,
|
|
414
|
+
background-color: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.08);
|
|
415
415
|
}
|
|
416
416
|
.toast-button-cancel:hover {
|
|
417
417
|
background-color: rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.08);
|
|
@@ -4,10 +4,16 @@
|
|
|
4
4
|
import AxeBuilder from "@axe-core/playwright";
|
|
5
5
|
import { expect } from "@playwright/test";
|
|
6
6
|
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
7
|
-
configs({
|
|
7
|
+
configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
|
|
8
8
|
test.describe(title('toggle: a11y'), () => {
|
|
9
9
|
test('should not have accessibility violations', async ({ page }) => {
|
|
10
|
-
await page.
|
|
10
|
+
await page.setContent(`
|
|
11
|
+
<main>
|
|
12
|
+
<ion-toggle>my label</ion-toggle>
|
|
13
|
+
<ion-toggle aria-label="my aria label"></ion-toggle>
|
|
14
|
+
<ion-toggle checked="true">Checked</ion-toggle>
|
|
15
|
+
</main>
|
|
16
|
+
`, config);
|
|
11
17
|
const results = await new AxeBuilder({ page }).analyze();
|
|
12
18
|
expect(results.violations).toEqual([]);
|
|
13
19
|
});
|
|
@@ -538,7 +538,7 @@ input {
|
|
|
538
538
|
*/
|
|
539
539
|
:host {
|
|
540
540
|
--track-background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.088);
|
|
541
|
-
--track-background-checked: var(--ion-color-primary, #
|
|
541
|
+
--track-background-checked: var(--ion-color-primary, #0054e9);
|
|
542
542
|
--border-radius: 16px;
|
|
543
543
|
--handle-background: #ffffff;
|
|
544
544
|
--handle-background-checked: #ffffff;
|
|
@@ -538,10 +538,10 @@ input {
|
|
|
538
538
|
*/
|
|
539
539
|
:host {
|
|
540
540
|
--track-background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.39);
|
|
541
|
-
--track-background-checked: rgba(var(--ion-color-primary-rgb,
|
|
541
|
+
--track-background-checked: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.5);
|
|
542
542
|
--border-radius: 14px;
|
|
543
543
|
--handle-background: #ffffff;
|
|
544
|
-
--handle-background-checked: var(--ion-color-primary, #
|
|
544
|
+
--handle-background-checked: var(--ion-color-primary, #0054e9);
|
|
545
545
|
--handle-border-radius: 50%;
|
|
546
546
|
--handle-box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
|
|
547
547
|
--handle-width: 20px;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
+
import AxeBuilder from "@axe-core/playwright";
|
|
4
5
|
import { expect } from "@playwright/test";
|
|
5
6
|
import { configs, test } from "../../../utils/test/playwright/index";
|
|
6
7
|
configs({ directions: ['ltr'], modes: ['ios'] }).forEach(({ title, screenshot, config }) => {
|
|
@@ -30,3 +31,20 @@ configs({ directions: ['ltr'], modes: ['ios'] }).forEach(({ title, screenshot, c
|
|
|
30
31
|
});
|
|
31
32
|
});
|
|
32
33
|
});
|
|
34
|
+
configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ config, title }) => {
|
|
35
|
+
test.describe(title('typography: a11y'), () => {
|
|
36
|
+
test('should not have accessibility violations for anchor tags', async ({ page }) => {
|
|
37
|
+
/**
|
|
38
|
+
* All page content should be contained by landmarks (main, nav, etc.)
|
|
39
|
+
* By containing the badge in a main element, we can avoid this violation.
|
|
40
|
+
*/
|
|
41
|
+
await page.setContent(`
|
|
42
|
+
<main>
|
|
43
|
+
<a href="#">Link</a>
|
|
44
|
+
</main>
|
|
45
|
+
`, config);
|
|
46
|
+
const results = await new AxeBuilder({ page }).analyze();
|
|
47
|
+
expect(results.violations).toEqual([]);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
});
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import AxeBuilder from "@axe-core/playwright";
|
|
5
|
+
import { expect } from "@playwright/test";
|
|
6
|
+
import { configs, test } from "../../../utils/test/playwright/index";
|
|
7
|
+
const styleTestHelpers = `
|
|
8
|
+
<style>
|
|
9
|
+
main {
|
|
10
|
+
background: var(--ion-color-contrast);
|
|
11
|
+
}
|
|
12
|
+
.ion-background {
|
|
13
|
+
background: var(--ion-color-base);
|
|
14
|
+
}
|
|
15
|
+
.ion-background-shade {
|
|
16
|
+
background: var(--ion-color-shade);
|
|
17
|
+
}
|
|
18
|
+
.ion-background-tint {
|
|
19
|
+
background: var(--ion-color-tint);
|
|
20
|
+
}
|
|
21
|
+
.ion-background-opacity-08 {
|
|
22
|
+
background: rgba(var(--ion-color-base-rgb), 0.08);
|
|
23
|
+
}
|
|
24
|
+
.ion-background-opacity-12 {
|
|
25
|
+
background: rgba(var(--ion-color-base-rgb), 0.12);
|
|
26
|
+
}
|
|
27
|
+
.ion-background-opacity-16 {
|
|
28
|
+
background: rgba(var(--ion-color-base-rgb), 0.16);
|
|
29
|
+
}
|
|
30
|
+
.ion-color {
|
|
31
|
+
color: var(--ion-color-base);
|
|
32
|
+
}
|
|
33
|
+
.ion-color-contrast {
|
|
34
|
+
color: var(--ion-color-contrast);
|
|
35
|
+
}
|
|
36
|
+
</style>
|
|
37
|
+
`;
|
|
38
|
+
/**
|
|
39
|
+
* All colors should be tested in the following scenarios:
|
|
40
|
+
* 1) The base color as the text color against the contrast color as the background color
|
|
41
|
+
* 2) The contrast color as the text color against the base color as the background color
|
|
42
|
+
* 3) The contrast color as the text color against the shade color as the background color
|
|
43
|
+
* 4) The contrast color as the text color against the tint color as the background color
|
|
44
|
+
* 5) The base color as the text color against the base color at 0.08 opacity as the background color
|
|
45
|
+
* 6) The base color as the text color against the base color at 0.12 opacity as the background color
|
|
46
|
+
* 7) The base color as the text color against the base color at 0.16 opacity as the background color
|
|
47
|
+
*/
|
|
48
|
+
configs({ modes: ['md'], directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ config, title }) => {
|
|
49
|
+
const colors = ['primary', 'secondary', 'tertiary', 'success', 'warning', 'danger', 'light', 'medium', 'dark'];
|
|
50
|
+
test.describe(title('theme'), () => {
|
|
51
|
+
test.beforeEach(({ skip }) => {
|
|
52
|
+
skip.browser('firefox', 'Color contrast ratio is consistent across browsers');
|
|
53
|
+
skip.browser('webkit', 'Color contrast ratio is consistent across browsers');
|
|
54
|
+
});
|
|
55
|
+
for (const color of colors) {
|
|
56
|
+
test(`color "${color}" should pass AA guidelines`, async ({ page }) => {
|
|
57
|
+
await page.setContent(`${styleTestHelpers}
|
|
58
|
+
<main class="ion-color-${color}">
|
|
59
|
+
<p class="ion-color">Hello World</p>
|
|
60
|
+
</main>`, config);
|
|
61
|
+
const results = await new AxeBuilder({ page }).analyze();
|
|
62
|
+
expect(results.violations).toEqual([]);
|
|
63
|
+
});
|
|
64
|
+
test(`contrast color on "${color}" background should pass AA guidelines`, async ({ page }) => {
|
|
65
|
+
await page.setContent(`${styleTestHelpers}
|
|
66
|
+
<main class="ion-color-${color}">
|
|
67
|
+
<p class="ion-color-contrast ion-background">Hello World</p>
|
|
68
|
+
</main>`, config);
|
|
69
|
+
const results = await new AxeBuilder({ page }).analyze();
|
|
70
|
+
expect(results.violations).toEqual([]);
|
|
71
|
+
});
|
|
72
|
+
test(`contrast color on "${color}" background shade should pass AA guidelines`, async ({ page }) => {
|
|
73
|
+
await page.setContent(`${styleTestHelpers}
|
|
74
|
+
<main class="ion-color-${color}">
|
|
75
|
+
<p class="ion-color-contrast ion-background-shade">Hello World</p>
|
|
76
|
+
</main>`, config);
|
|
77
|
+
const results = await new AxeBuilder({ page }).analyze();
|
|
78
|
+
expect(results.violations).toEqual([]);
|
|
79
|
+
});
|
|
80
|
+
test(`contrast color on "${color}" background tint should pass AA guidelines`, async ({ page }) => {
|
|
81
|
+
await page.setContent(`${styleTestHelpers}
|
|
82
|
+
<main class="ion-color-${color}">
|
|
83
|
+
<p class="ion-color-contrast ion-background-tint">Hello World</p>
|
|
84
|
+
</main>`, config);
|
|
85
|
+
const results = await new AxeBuilder({ page }).analyze();
|
|
86
|
+
expect(results.violations).toEqual([]);
|
|
87
|
+
});
|
|
88
|
+
test(`color "${color}" on 0.08 opacity background should pass AA guidelines`, async ({ page }) => {
|
|
89
|
+
await page.setContent(`${styleTestHelpers}
|
|
90
|
+
<main class="ion-color-${color}">
|
|
91
|
+
<p class="ion-color ion-background-opacity-08">Hello World</p>
|
|
92
|
+
</main>`, config);
|
|
93
|
+
const results = await new AxeBuilder({ page }).analyze();
|
|
94
|
+
expect(results.violations).toEqual([]);
|
|
95
|
+
});
|
|
96
|
+
test(`color "${color}" on 0.12 opacity background should pass AA guidelines`, async ({ page }) => {
|
|
97
|
+
await page.setContent(`${styleTestHelpers}
|
|
98
|
+
<main class="ion-color-${color}">
|
|
99
|
+
<p class="ion-color ion-background-opacity-12">Hello World</p>
|
|
100
|
+
</main>`, config);
|
|
101
|
+
const results = await new AxeBuilder({ page }).analyze();
|
|
102
|
+
expect(results.violations).toEqual([]);
|
|
103
|
+
});
|
|
104
|
+
test(`color "${color}" on 0.16 opacity background should pass AA guidelines`, async ({ page }) => {
|
|
105
|
+
await page.setContent(`${styleTestHelpers}
|
|
106
|
+
<main class="ion-color-${color}">
|
|
107
|
+
<p class="ion-color ion-background-opacity-16">Hello World</p>
|
|
108
|
+
</main>`, config);
|
|
109
|
+
const results = await new AxeBuilder({ page }).analyze();
|
|
110
|
+
expect(results.violations).toEqual([]);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
});
|
|
@@ -5,6 +5,7 @@ import { doc } from "./browser/index";
|
|
|
5
5
|
import { config } from "../global/config";
|
|
6
6
|
import { getIonMode } from "../global/ionic-global";
|
|
7
7
|
import { CoreDelegate } from "./framework-delegate";
|
|
8
|
+
import { BACKDROP_NO_SCROLL } from "./gesture/gesture-controller";
|
|
8
9
|
import { OVERLAY_BACK_BUTTON_PRIORITY } from "./hardware-back-button";
|
|
9
10
|
import { addEventListener, componentOnReady, focusElement, getElementRoot, removeEventListener } from "./helpers";
|
|
10
11
|
import { printIonWarning } from "./logging";
|
|
@@ -389,6 +390,7 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
|
|
|
389
390
|
return;
|
|
390
391
|
}
|
|
391
392
|
setRootAriaHidden(true);
|
|
393
|
+
document.body.classList.add(BACKDROP_NO_SCROLL);
|
|
392
394
|
overlay.presented = true;
|
|
393
395
|
overlay.willPresent.emit();
|
|
394
396
|
(_a = overlay.willPresentShorthand) === null || _a === void 0 ? void 0 : _a.emit();
|
|
@@ -451,12 +453,14 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
|
|
|
451
453
|
if (!overlay.presented) {
|
|
452
454
|
return false;
|
|
453
455
|
}
|
|
456
|
+
const lastOverlay = doc !== undefined && getPresentedOverlays(doc).length === 1;
|
|
454
457
|
/**
|
|
455
458
|
* If this is the last visible overlay then
|
|
456
459
|
* we want to re-add the root to the accessibility tree.
|
|
457
460
|
*/
|
|
458
|
-
if (
|
|
461
|
+
if (lastOverlay) {
|
|
459
462
|
setRootAriaHidden(false);
|
|
463
|
+
document.body.classList.remove(BACKDROP_NO_SCROLL);
|
|
460
464
|
}
|
|
461
465
|
overlay.presented = false;
|
|
462
466
|
try {
|