@ionic/core 8.0.0-beta.0 → 8.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/action-sheet.js +3 -3
- package/components/alert.js +2 -2
- package/components/backdrop.js +1 -1
- package/components/button.js +2 -2
- package/components/buttons.js +3 -3
- package/components/checkbox.js +3 -3
- package/components/data.js +23 -38
- package/components/hardware-back-button.js +3 -3
- package/components/helpers.js +1 -8
- package/components/input-shims.js +8 -1
- package/components/input.utils.js +12 -0
- package/components/ion-app.js +4 -4
- package/components/ion-avatar.js +1 -1
- package/components/ion-back-button.js +2 -2
- package/components/ion-badge.js +2 -2
- package/components/ion-breadcrumb.js +2 -2
- package/components/ion-breadcrumbs.js +2 -2
- package/components/ion-card-content.js +1 -1
- package/components/ion-card-header.js +2 -2
- package/components/ion-card-subtitle.js +2 -2
- package/components/ion-card-title.js +2 -2
- package/components/ion-card.js +1 -1
- package/components/ion-chip.js +2 -2
- package/components/ion-col.js +2 -2
- package/components/ion-content.js +3 -3
- package/components/ion-datetime-button.js +11 -10
- package/components/ion-datetime.js +69 -7
- package/components/ion-fab-button.js +2 -2
- package/components/ion-fab-list.js +2 -2
- package/components/ion-fab.js +2 -2
- package/components/ion-footer.js +2 -2
- package/components/ion-grid.js +2 -2
- package/components/ion-header.js +2 -2
- package/components/ion-img.js +1 -1
- package/components/ion-infinite-scroll-content.js +2 -2
- package/components/ion-infinite-scroll.js +1 -1
- package/components/ion-input.js +6 -6
- package/components/ion-item-divider.js +3 -3
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +2 -2
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-loading.js +2 -2
- package/components/ion-menu-button.js +2 -2
- package/components/ion-menu-toggle.js +2 -2
- package/components/ion-menu.js +7 -28
- package/components/ion-modal.js +37 -5
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +43 -1
- package/components/ion-picker-legacy.js +2 -2
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-range.js +129 -24
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-refresher.js +1 -1
- package/components/ion-reorder-group.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-router-link.js +2 -2
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +34 -5
- package/components/ion-segment-button.js +3 -3
- package/components/ion-segment.js +2 -2
- package/components/ion-select-option.js +1 -1
- package/components/ion-select.js +23 -29
- package/components/ion-skeleton-text.js +2 -2
- package/components/ion-split-pane.js +2 -2
- package/components/ion-tab-bar.js +2 -2
- package/components/ion-tab-button.js +2 -2
- package/components/ion-tab.js +2 -2
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +2 -2
- package/components/ion-textarea.js +5 -5
- package/components/ion-thumbnail.js +1 -1
- package/components/ion-title.js +2 -2
- package/components/ion-toast.js +2 -2
- package/components/ion-toggle.js +3 -3
- package/components/ion-toolbar.js +2 -2
- package/components/item.js +30 -97
- package/components/label.js +5 -5
- package/components/list-header.js +2 -2
- package/components/list.js +1 -1
- package/components/overlays.js +140 -55
- package/components/picker-column-option.js +2 -2
- package/components/picker-column.js +20 -5
- package/components/picker-column2.js +2 -2
- package/components/picker.js +2 -2
- package/components/popover.js +4 -4
- package/components/radio-group.js +1 -1
- package/components/radio.js +3 -3
- package/components/ripple-effect.js +1 -1
- package/components/select-popover.js +13 -19
- package/components/spinner.js +1 -1
- package/dist/cjs/{animation-4ad55058.js → animation-3e7bb91e.js} +1 -1
- package/dist/cjs/{app-globals-92ad1b3d.js → app-globals-e132c781.js} +1 -1
- package/dist/cjs/{button-active-8f6a8e77.js → button-active-60ecf64d.js} +1 -1
- package/dist/cjs/{data-e2bf21de.js → data-21dc0f81.js} +22 -39
- package/dist/cjs/{framework-delegate-53817ef1.js → framework-delegate-0499d444.js} +1 -1
- package/dist/cjs/{hardware-back-button-2696acaf.js → hardware-back-button-1c67a5a2.js} +5 -5
- package/dist/cjs/{helpers-b71ca811.js → helpers-668b3d95.js} +1 -8
- package/dist/cjs/{index-7574e3d2.js → index-275cc12e.js} +1 -1
- package/dist/cjs/{index-0ffe376d.js → index-2d21d526.js} +443 -14
- package/dist/cjs/{index-16fc2c94.js → index-ba7ba0af.js} +4 -4
- package/dist/cjs/{index-347883f6.js → index-c49cb371.js} +1 -1
- package/dist/cjs/{index-88b3bd6f.js → index-e4b6c97e.js} +4 -4
- package/dist/cjs/index.cjs.js +11 -11
- package/dist/cjs/{input-shims-37843ce5.js → input-shims-b419f083.js} +10 -3
- package/dist/cjs/{input.utils-5175aea1.js → input.utils-32c0a14a.js} +13 -1
- package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-action-sheet.cjs.entry.js +11 -11
- package/dist/cjs/ion-alert.cjs.entry.js +10 -10
- package/dist/cjs/ion-app_8.cjs.entry.js +29 -29
- package/dist/cjs/ion-avatar_3.cjs.entry.js +6 -6
- package/dist/cjs/ion-back-button.cjs.entry.js +5 -5
- package/dist/cjs/ion-backdrop.cjs.entry.js +3 -3
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +7 -7
- package/dist/cjs/ion-button_2.cjs.entry.js +5 -5
- package/dist/cjs/ion-card_5.cjs.entry.js +11 -11
- package/dist/cjs/ion-checkbox.cjs.entry.js +6 -6
- package/dist/cjs/ion-chip.cjs.entry.js +4 -4
- package/dist/cjs/ion-col_3.cjs.entry.js +7 -7
- package/dist/cjs/ion-datetime-button.cjs.entry.js +14 -13
- package/dist/cjs/ion-datetime_3.cjs.entry.js +77 -18
- package/dist/cjs/ion-fab_3.cjs.entry.js +9 -9
- package/dist/cjs/ion-img.cjs.entry.js +4 -4
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +7 -7
- package/dist/cjs/ion-input.cjs.entry.js +10 -10
- package/dist/cjs/ion-item-option_3.cjs.entry.js +8 -8
- package/dist/cjs/ion-item_8.cjs.entry.js +42 -97
- package/dist/cjs/ion-loading.cjs.entry.js +9 -9
- package/dist/cjs/ion-menu_3.cjs.entry.js +17 -38
- package/dist/cjs/ion-modal.cjs.entry.js +46 -14
- package/dist/cjs/ion-nav_2.cjs.entry.js +8 -8
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +5 -5
- package/dist/cjs/ion-picker-column.cjs.entry.js +23 -8
- package/dist/cjs/ion-picker.cjs.entry.js +4 -4
- package/dist/cjs/ion-popover.cjs.entry.js +11 -11
- package/dist/cjs/ion-progress-bar.cjs.entry.js +4 -4
- package/dist/cjs/ion-radio_2.cjs.entry.js +7 -7
- package/dist/cjs/ion-range.cjs.entry.js +133 -28
- package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -7
- package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -6
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +3 -3
- package/dist/cjs/ion-route_4.cjs.entry.js +5 -5
- package/dist/cjs/ion-searchbar.cjs.entry.js +31 -7
- package/dist/cjs/ion-segment_2.cjs.entry.js +8 -8
- package/dist/cjs/ion-select_3.cjs.entry.js +13 -13
- package/dist/cjs/ion-spinner.cjs.entry.js +3 -3
- package/dist/cjs/ion-split-pane.cjs.entry.js +4 -4
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +7 -7
- package/dist/cjs/ion-tab_2.cjs.entry.js +6 -6
- package/dist/cjs/ion-text.cjs.entry.js +4 -4
- package/dist/cjs/ion-textarea.cjs.entry.js +9 -9
- package/dist/cjs/ion-toast.cjs.entry.js +9 -9
- package/dist/cjs/ion-toggle.cjs.entry.js +6 -6
- package/dist/cjs/{ionic-global-59a10130.js → ionic-global-5762eca9.js} +1 -1
- package/dist/cjs/ionic.cjs.js +28 -5
- package/dist/cjs/{ios.transition-b102ee38.js → ios.transition-3e119901.js} +4 -4
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-a5454240.js → md.transition-c1392f92.js} +4 -4
- package/dist/cjs/{notch-controller-8e0ae870.js → notch-controller-08a24f39.js} +1 -1
- package/dist/cjs/{overlays-6b7d156b.js → overlays-44b8d0e0.js} +142 -56
- package/dist/cjs/{status-tap-b60dcbd8.js → status-tap-32430b3e.js} +3 -3
- package/dist/cjs/{swipe-back-72c5c8b7.js → swipe-back-dc4dbb65.js} +1 -1
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/action-sheet/action-sheet.js +3 -3
- package/dist/collection/components/alert/alert.js +2 -2
- package/dist/collection/components/app/app.js +4 -4
- package/dist/collection/components/avatar/avatar.js +1 -1
- package/dist/collection/components/back-button/back-button.js +2 -2
- package/dist/collection/components/backdrop/backdrop.js +1 -1
- package/dist/collection/components/badge/badge.js +2 -2
- package/dist/collection/components/breadcrumb/breadcrumb.js +2 -2
- package/dist/collection/components/breadcrumbs/breadcrumbs.js +2 -2
- package/dist/collection/components/button/button.js +2 -2
- package/dist/collection/components/buttons/buttons.js +2 -2
- package/dist/collection/components/card/card.js +1 -1
- package/dist/collection/components/card-content/card-content.js +1 -1
- package/dist/collection/components/card-header/card-header.js +2 -2
- package/dist/collection/components/card-subtitle/card-subtitle.js +2 -2
- package/dist/collection/components/card-title/card-title.js +2 -2
- package/dist/collection/components/checkbox/checkbox.js +3 -3
- package/dist/collection/components/checkbox/test/checkbox.spec.js +12 -0
- package/dist/collection/components/chip/chip.js +2 -2
- package/dist/collection/components/col/col.js +2 -2
- package/dist/collection/components/content/content.js +3 -3
- package/dist/collection/components/datetime/datetime.js +50 -7
- package/dist/collection/components/datetime/test/basic/datetime.e2e.js +80 -1
- package/dist/collection/components/datetime/test/format.spec.js +65 -15
- package/dist/collection/components/datetime/utils/format.js +24 -37
- package/dist/collection/components/datetime/utils/validate.js +45 -0
- package/dist/collection/components/datetime-button/datetime-button.js +11 -10
- package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +65 -0
- package/dist/collection/components/fab/fab.js +2 -2
- package/dist/collection/components/fab-button/fab-button.js +2 -2
- package/dist/collection/components/fab-list/fab-list.js +2 -2
- package/dist/collection/components/footer/footer.js +2 -2
- package/dist/collection/components/grid/grid.js +2 -2
- package/dist/collection/components/header/header.js +2 -2
- package/dist/collection/components/img/img.js +1 -1
- package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
- package/dist/collection/components/input/input.ios.css +2 -0
- package/dist/collection/components/input/input.js +3 -3
- package/dist/collection/components/input/input.md.css +4 -2
- package/dist/collection/components/input/test/highlight/input.e2e.js +144 -0
- package/dist/collection/components/input/test/item/input.e2e.js +21 -0
- package/dist/collection/components/item/item.ios.css +6 -198
- package/dist/collection/components/item/item.js +22 -170
- package/dist/collection/components/item/item.md.css +12 -375
- package/dist/collection/components/item/test/basic/item.e2e.js +0 -5
- package/dist/collection/components/item/test/item.spec.js +1 -1
- package/dist/collection/components/item-divider/item-divider.js +2 -2
- package/dist/collection/components/item-divider/item-divider.md.css +4 -14
- package/dist/collection/components/item-group/item-group.js +1 -1
- package/dist/collection/components/item-option/item-option.js +2 -2
- package/dist/collection/components/item-options/item-options.js +1 -1
- package/dist/collection/components/item-sliding/item-sliding.js +1 -1
- package/dist/collection/components/label/label.ios.css +0 -5
- package/dist/collection/components/label/label.js +2 -2
- package/dist/collection/components/label/label.md.css +0 -75
- package/dist/collection/components/list/list.js +1 -1
- package/dist/collection/components/list-header/list-header.js +2 -2
- package/dist/collection/components/loading/loading.js +2 -2
- package/dist/collection/components/menu/menu.js +16 -30
- package/dist/collection/components/menu-button/menu-button.js +2 -2
- package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
- package/dist/collection/components/modal/modal.js +37 -5
- package/dist/collection/components/modal/test/modal-attributes.spec.js +32 -0
- package/dist/collection/components/nav/nav.js +1 -1
- package/dist/collection/components/nav-link/nav-link.js +1 -1
- package/dist/collection/components/note/note.js +2 -2
- package/dist/collection/components/picker/picker.js +2 -2
- package/dist/collection/components/picker-column/picker-column.js +20 -5
- package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
- package/dist/collection/components/picker-legacy/picker.js +2 -2
- package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
- package/dist/collection/components/popover/popover.js +5 -4
- package/dist/collection/components/progress-bar/progress-bar.js +1 -1
- package/dist/collection/components/radio/radio.js +3 -3
- package/dist/collection/components/radio-group/radio-group.js +1 -1
- package/dist/collection/components/range/range.js +129 -24
- package/dist/collection/components/range/test/range-events.e2e.js +27 -0
- package/dist/collection/components/refresher/refresher.js +1 -1
- package/dist/collection/components/refresher-content/refresher-content.js +1 -1
- package/dist/collection/components/reorder/reorder.js +1 -1
- package/dist/collection/components/reorder-group/reorder-group.js +1 -1
- package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
- package/dist/collection/components/router-link/router-link.js +2 -2
- package/dist/collection/components/router-outlet/router-outlet.js +1 -1
- package/dist/collection/components/row/row.js +1 -1
- package/dist/collection/components/searchbar/searchbar.js +84 -5
- package/dist/collection/components/searchbar/test/searchbar.spec.js +20 -2
- package/dist/collection/components/segment/segment.js +2 -2
- package/dist/collection/components/segment-button/segment-button.js +3 -3
- package/dist/collection/components/select/select.ios.css +5 -0
- package/dist/collection/components/select/select.js +2 -2
- package/dist/collection/components/select/select.md.css +4 -27
- package/dist/collection/components/select/test/highlight/select.e2e.js +88 -4
- package/dist/collection/components/select-option/select-option.js +1 -1
- package/dist/collection/components/select-popover/select-popover.js +1 -1
- package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
- package/dist/collection/components/spinner/spinner.js +1 -1
- package/dist/collection/components/split-pane/split-pane.js +2 -2
- package/dist/collection/components/tab/tab.js +2 -2
- package/dist/collection/components/tab-bar/tab-bar.js +2 -2
- package/dist/collection/components/tab-button/tab-button.js +2 -2
- package/dist/collection/components/tabs/tabs.js +1 -1
- package/dist/collection/components/text/text.js +2 -2
- package/dist/collection/components/textarea/test/highlight/textarea.e2e.js +144 -0
- package/dist/collection/components/textarea/test/item/textarea.e2e.js +21 -0
- package/dist/collection/components/textarea/textarea.ios.css +2 -20
- package/dist/collection/components/textarea/textarea.js +2 -2
- package/dist/collection/components/textarea/textarea.md.css +4 -15
- package/dist/collection/components/thumbnail/thumbnail.js +1 -1
- package/dist/collection/components/title/title.js +2 -2
- package/dist/collection/components/toast/toast.js +2 -2
- package/dist/collection/components/toggle/toggle.js +3 -3
- package/dist/collection/components/toolbar/toolbar.js +2 -2
- package/dist/collection/utils/focus-trap.js +78 -0
- package/dist/collection/utils/forms/index.js +0 -1
- package/dist/collection/utils/hardware-back-button.js +2 -2
- package/dist/collection/utils/helpers.js +1 -8
- package/dist/collection/utils/input-shims/input-shims.js +8 -1
- package/dist/collection/utils/overlays.js +64 -53
- package/dist/collection/utils/slot-mutation-controller.js +12 -0
- package/dist/collection/utils/test/overlays/overlays.spec.js +53 -0
- package/dist/docs.json +158 -189
- package/dist/esm/{animation-a4acf150.js → animation-9a23ed8d.js} +1 -1
- package/dist/esm/{app-globals-5cf6195b.js → app-globals-80842d68.js} +1 -1
- package/dist/esm/{button-active-4407b98c.js → button-active-c6e18fac.js} +1 -1
- package/dist/esm/{data-691286f1.js → data-ae11fd43.js} +23 -38
- package/dist/esm/{framework-delegate-1eb3236c.js → framework-delegate-3fd96df8.js} +1 -1
- package/dist/esm/{hardware-back-button-b410a047.js → hardware-back-button-fb295e3a.js} +5 -5
- package/dist/esm/{helpers-ae74b3c9.js → helpers-f51cf76f.js} +1 -8
- package/dist/esm/{index-1f563746.js → index-1262064c.js} +1 -1
- package/dist/esm/{index-4c30cddd.js → index-5d6a0317.js} +443 -15
- package/dist/esm/{index-1eff8599.js → index-6da05eef.js} +4 -4
- package/dist/esm/{index-66871a1d.js → index-86688780.js} +1 -1
- package/dist/esm/{index-8758824c.js → index-9d7e5d3e.js} +4 -4
- package/dist/esm/index.js +11 -11
- package/dist/esm/{input-shims-91e6634c.js → input-shims-2a4ad5a1.js} +10 -3
- package/dist/esm/{input.utils-482fc893.js → input.utils-d2dee48e.js} +13 -1
- package/dist/esm/ion-accordion_2.entry.js +3 -3
- package/dist/esm/ion-action-sheet.entry.js +11 -11
- package/dist/esm/ion-alert.entry.js +10 -10
- package/dist/esm/ion-app_8.entry.js +29 -29
- package/dist/esm/ion-avatar_3.entry.js +6 -6
- package/dist/esm/ion-back-button.entry.js +5 -5
- package/dist/esm/ion-backdrop.entry.js +3 -3
- package/dist/esm/ion-breadcrumb_2.entry.js +7 -7
- package/dist/esm/ion-button_2.entry.js +5 -5
- package/dist/esm/ion-card_5.entry.js +11 -11
- package/dist/esm/ion-checkbox.entry.js +6 -6
- package/dist/esm/ion-chip.entry.js +4 -4
- package/dist/esm/ion-col_3.entry.js +7 -7
- package/dist/esm/ion-datetime-button.entry.js +14 -13
- package/dist/esm/ion-datetime_3.entry.js +77 -18
- package/dist/esm/ion-fab_3.entry.js +9 -9
- package/dist/esm/ion-img.entry.js +4 -4
- package/dist/esm/ion-infinite-scroll_2.entry.js +7 -7
- package/dist/esm/ion-input.entry.js +10 -10
- package/dist/esm/ion-item-option_3.entry.js +8 -8
- package/dist/esm/ion-item_8.entry.js +42 -97
- package/dist/esm/ion-loading.entry.js +9 -9
- package/dist/esm/ion-menu_3.entry.js +17 -38
- package/dist/esm/ion-modal.entry.js +46 -14
- package/dist/esm/ion-nav_2.entry.js +8 -8
- package/dist/esm/ion-picker-column-option.entry.js +5 -5
- package/dist/esm/ion-picker-column.entry.js +23 -8
- package/dist/esm/ion-picker.entry.js +4 -4
- package/dist/esm/ion-popover.entry.js +11 -11
- package/dist/esm/ion-progress-bar.entry.js +4 -4
- package/dist/esm/ion-radio_2.entry.js +7 -7
- package/dist/esm/ion-range.entry.js +133 -28
- package/dist/esm/ion-refresher_2.entry.js +7 -7
- package/dist/esm/ion-reorder_2.entry.js +6 -6
- package/dist/esm/ion-ripple-effect.entry.js +3 -3
- package/dist/esm/ion-route_4.entry.js +5 -5
- package/dist/esm/ion-searchbar.entry.js +31 -7
- package/dist/esm/ion-segment_2.entry.js +8 -8
- package/dist/esm/ion-select_3.entry.js +13 -13
- package/dist/esm/ion-spinner.entry.js +3 -3
- package/dist/esm/ion-split-pane.entry.js +4 -4
- package/dist/esm/ion-tab-bar_2.entry.js +7 -7
- package/dist/esm/ion-tab_2.entry.js +6 -6
- package/dist/esm/ion-text.entry.js +4 -4
- package/dist/esm/ion-textarea.entry.js +9 -9
- package/dist/esm/ion-toast.entry.js +9 -9
- package/dist/esm/ion-toggle.entry.js +6 -6
- package/dist/esm/{ionic-global-ad9a1810.js → ionic-global-a589c12c.js} +1 -1
- package/dist/esm/ionic.js +29 -6
- package/dist/esm/{ios.transition-189b73b7.js → ios.transition-fbde96b0.js} +4 -4
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-c9761eef.js → md.transition-76e0020b.js} +4 -4
- package/dist/esm/{notch-controller-18bf9f76.js → notch-controller-00572cf8.js} +1 -1
- package/dist/esm/{overlays-c69d2a07.js → overlays-b1ac1c63.js} +142 -57
- package/dist/esm/{status-tap-1d638ee6.js → status-tap-84b41f36.js} +3 -3
- package/dist/esm/{swipe-back-348f1971.js → swipe-back-f2bec781.js} +1 -1
- package/dist/esm-es5/{animation-a4acf150.js → animation-9a23ed8d.js} +1 -1
- package/dist/esm-es5/app-globals-80842d68.js +4 -0
- package/dist/esm-es5/{button-active-4407b98c.js → button-active-c6e18fac.js} +1 -1
- package/dist/esm-es5/data-ae11fd43.js +4 -0
- package/dist/esm-es5/{framework-delegate-1eb3236c.js → framework-delegate-3fd96df8.js} +1 -1
- package/dist/esm-es5/hardware-back-button-fb295e3a.js +4 -0
- package/dist/esm-es5/helpers-f51cf76f.js +4 -0
- package/dist/esm-es5/index-1262064c.js +4 -0
- package/dist/esm-es5/index-5d6a0317.js +5 -0
- package/dist/esm-es5/{index-1eff8599.js → index-6da05eef.js} +1 -1
- package/dist/esm-es5/{index-66871a1d.js → index-86688780.js} +1 -1
- package/dist/esm-es5/{index-8758824c.js → index-9d7e5d3e.js} +1 -1
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/{input-shims-91e6634c.js → input-shims-2a4ad5a1.js} +1 -1
- package/dist/esm-es5/input.utils-d2dee48e.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-option.entry.js +1 -1
- package/dist/esm-es5/ion-picker-column.entry.js +1 -1
- package/dist/esm-es5/ion-picker.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-ad9a1810.js → ionic-global-a589c12c.js} +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/{ios.transition-189b73b7.js → ios.transition-fbde96b0.js} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/{md.transition-c9761eef.js → md.transition-76e0020b.js} +1 -1
- package/dist/esm-es5/{notch-controller-18bf9f76.js → notch-controller-00572cf8.js} +1 -1
- package/dist/esm-es5/overlays-b1ac1c63.js +4 -0
- package/dist/esm-es5/{status-tap-1d638ee6.js → status-tap-84b41f36.js} +1 -1
- package/dist/esm-es5/{swipe-back-348f1971.js → swipe-back-f2bec781.js} +1 -1
- package/dist/html.html-data.json +24 -26
- 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-174856b4.system.js → p-01171ead.system.js} +1 -1
- package/dist/ionic/{p-5d7e32ce.js → p-031c5621.js} +1 -1
- package/dist/ionic/{p-993da5df.entry.js → p-03f3ebd2.entry.js} +1 -1
- package/dist/ionic/p-04f9ce05.system.js +4 -0
- package/dist/ionic/p-05f10e5f.entry.js +4 -0
- package/dist/ionic/{p-34d0f143.system.entry.js → p-063c093d.system.entry.js} +1 -1
- package/dist/ionic/p-06e951a9.entry.js +4 -0
- package/dist/ionic/{p-1d545773.entry.js → p-070cf7c3.entry.js} +1 -1
- package/dist/ionic/{p-3c47c5c8.system.entry.js → p-0afaf65b.system.entry.js} +1 -1
- package/dist/ionic/p-0da58e53.entry.js +4 -0
- package/dist/ionic/p-144ae947.js +4 -0
- package/dist/ionic/{p-c6dbc089.system.entry.js → p-15e2ff5f.system.entry.js} +1 -1
- package/dist/ionic/{p-9d795c4b.entry.js → p-19243ae6.entry.js} +1 -1
- package/dist/ionic/p-1acaf641.entry.js +4 -0
- package/dist/ionic/{p-892e2567.system.entry.js → p-1d1394da.system.entry.js} +1 -1
- package/dist/ionic/p-1e5c0c49.js +4 -0
- package/dist/ionic/{p-6e14d3ca.system.entry.js → p-2028668d.system.entry.js} +1 -1
- package/dist/ionic/{p-f7d802e1.entry.js → p-2070f8d8.entry.js} +1 -1
- package/dist/ionic/{p-3d77b300.system.entry.js → p-219c17cf.system.entry.js} +1 -1
- package/dist/ionic/p-21e88629.entry.js +4 -0
- package/dist/ionic/{p-cefbb7b7.entry.js → p-234dc736.entry.js} +1 -1
- package/dist/ionic/{p-5e70f800.system.entry.js → p-237b1791.system.entry.js} +1 -1
- package/dist/ionic/{p-ceceac26.js → p-239906f1.js} +1 -1
- package/dist/ionic/{p-1a4db355.system.entry.js → p-25648922.system.entry.js} +1 -1
- package/dist/ionic/{p-d84c9fc4.entry.js → p-29ecf879.entry.js} +1 -1
- package/dist/ionic/{p-c9e21694.system.entry.js → p-2e2635b4.system.entry.js} +1 -1
- package/dist/ionic/p-2f53f47a.entry.js +4 -0
- package/dist/ionic/{p-98e6b3b8.system.js → p-30dfa360.system.js} +1 -1
- package/dist/ionic/p-314ae72a.js +4 -0
- package/dist/ionic/{p-2d7624d4.system.js → p-33e39575.system.js} +1 -1
- package/dist/ionic/p-373e757d.entry.js +4 -0
- package/dist/ionic/{p-8a50f8d6.system.js → p-3944820a.system.js} +1 -1
- package/dist/ionic/p-39483fc9.js +4 -0
- package/dist/ionic/{p-e311af42.entry.js → p-39860681.entry.js} +1 -1
- package/dist/ionic/{p-e1819aee.js → p-3a572692.js} +1 -1
- package/dist/ionic/p-42d9f81e.entry.js +4 -0
- package/dist/ionic/{p-dd7c79ce.system.entry.js → p-45a2b1ee.system.entry.js} +1 -1
- package/dist/ionic/{p-15708968.js → p-46a4e4e8.js} +1 -1
- package/dist/ionic/{p-6dbea874.system.entry.js → p-47974116.system.entry.js} +1 -1
- package/dist/ionic/p-489eb5c6.js +4 -0
- package/dist/ionic/{p-2b3544ad.entry.js → p-48fef2f1.entry.js} +1 -1
- package/dist/ionic/p-493bce1f.entry.js +4 -0
- package/dist/ionic/p-4997d7dc.system.js +4 -0
- package/dist/ionic/{p-cb944b1a.system.js → p-49a205d0.system.js} +1 -1
- package/dist/ionic/{p-c880c809.js → p-4ba6d7d1.js} +1 -1
- package/dist/ionic/p-4d6ec139.entry.js +4 -0
- package/dist/ionic/{p-8d4d902b.js → p-4da2ae44.js} +1 -1
- package/dist/ionic/{p-5d64e680.entry.js → p-5054b3db.entry.js} +1 -1
- package/dist/ionic/{p-3c51cf97.system.entry.js → p-50d19fc7.system.entry.js} +1 -1
- package/dist/ionic/p-513abaf6.system.entry.js +4 -0
- package/dist/ionic/p-517b76cb.entry.js +4 -0
- package/dist/ionic/{p-a6cc38d4.js → p-51b1a6be.js} +1 -1
- package/dist/ionic/p-53c592ec.system.js +4 -0
- package/dist/ionic/{p-12b55b00.system.entry.js → p-566818dd.system.entry.js} +1 -1
- package/dist/ionic/p-59e86adb.js +4 -0
- package/dist/ionic/{p-1e07fdb2.system.entry.js → p-5f9abba8.system.entry.js} +2 -2
- package/dist/ionic/{p-d8643420.system.entry.js → p-6042920d.system.entry.js} +2 -2
- package/dist/ionic/{p-9f84474d.entry.js → p-65374504.entry.js} +1 -1
- package/dist/ionic/{p-df6a1571.entry.js → p-66596659.entry.js} +1 -1
- package/dist/ionic/p-667290b0.system.js +4 -0
- package/dist/ionic/{p-5d530ae5.entry.js → p-66e50777.entry.js} +1 -1
- package/dist/ionic/{p-4a8f173c.system.js → p-67dbcd3b.system.js} +1 -1
- package/dist/ionic/{p-916a4e14.entry.js → p-68fbfcd5.entry.js} +1 -1
- package/dist/ionic/{p-eb9803e9.system.js → p-696db6f4.system.js} +1 -1
- package/dist/ionic/p-69df28fd.entry.js +4 -0
- package/dist/ionic/p-6d0e7669.system.entry.js +4 -0
- package/dist/ionic/p-6d1f5de9.system.entry.js +4 -0
- package/dist/ionic/{p-4dfe0487.system.entry.js → p-6d75fbe8.system.entry.js} +1 -1
- package/dist/ionic/{p-174b0d50.system.entry.js → p-7162350a.system.entry.js} +1 -1
- package/dist/ionic/p-7200f2da.entry.js +4 -0
- package/dist/ionic/{p-b434ded7.system.entry.js → p-739f8b95.system.entry.js} +1 -1
- package/dist/ionic/{p-415ccddd.entry.js → p-75addf49.entry.js} +1 -1
- package/dist/ionic/{p-de55ec45.js → p-78b3da77.js} +1 -1
- package/dist/ionic/p-7c7e495d.system.js +4 -0
- package/dist/ionic/{p-8ab308e9.js → p-7d4f6f18.js} +1 -1
- package/dist/ionic/{p-5797981d.system.entry.js → p-824d44c5.system.entry.js} +1 -1
- package/dist/ionic/{p-d7dc29c5.entry.js → p-8c0b08db.entry.js} +1 -1
- package/dist/ionic/p-8dfe436d.system.js +4 -0
- package/dist/ionic/{p-0dca0eee.system.entry.js → p-91567c90.system.entry.js} +1 -1
- package/dist/ionic/{p-00a762c9.entry.js → p-95648db9.entry.js} +1 -1
- package/dist/ionic/{p-ef9736b9.entry.js → p-9c970454.entry.js} +1 -1
- package/dist/ionic/{p-e46adaf1.system.entry.js → p-9ddbed2f.system.entry.js} +1 -1
- package/dist/ionic/{p-6525a8cd.system.js → p-9e3177a5.system.js} +1 -1
- package/dist/ionic/p-a03c993e.entry.js +4 -0
- package/dist/ionic/{p-d7c78a97.system.entry.js → p-a37d4fe9.system.entry.js} +1 -1
- package/dist/ionic/{p-973c7550.system.entry.js → p-a43fbe0a.system.entry.js} +1 -1
- package/dist/ionic/{p-de0a7606.system.entry.js → p-a5c33d6b.system.entry.js} +1 -1
- package/dist/ionic/p-a7f788ec.entry.js +4 -0
- package/dist/ionic/{p-5133c4a3.system.entry.js → p-acd64713.system.entry.js} +1 -1
- package/dist/ionic/{p-89ca4c4b.system.js → p-af9256a0.system.js} +1 -1
- package/dist/ionic/p-afe27188.system.js +4 -0
- package/dist/ionic/{p-acf70e64.system.entry.js → p-b0850af6.system.entry.js} +1 -1
- package/dist/ionic/p-b0d35de4.system.js +4 -0
- package/dist/ionic/p-b996756b.entry.js +4 -0
- package/dist/ionic/p-ba9120fe.system.entry.js +4 -0
- package/dist/ionic/p-bb78b64e.entry.js +4 -0
- package/dist/ionic/{p-80704be1.entry.js → p-bbc4f653.entry.js} +1 -1
- package/dist/ionic/p-c34d1515.js +4 -0
- package/dist/ionic/{p-97248203.system.entry.js → p-c4390f10.system.entry.js} +1 -1
- package/dist/ionic/p-c629d22b.system.js +5 -0
- package/dist/ionic/p-c834c535.system.entry.js +4 -0
- package/dist/ionic/{p-2dcf2ec2.system.entry.js → p-c8675b7b.system.entry.js} +1 -1
- package/dist/ionic/p-c962e9ea.entry.js +4 -0
- package/dist/ionic/p-cbb753d4.entry.js +4 -0
- package/dist/ionic/p-cc19ecba.system.entry.js +4 -0
- package/dist/ionic/{p-1ea88de9.system.js → p-ce36d285.system.js} +1 -1
- package/dist/ionic/{p-f7c3d736.system.entry.js → p-d09c9468.system.entry.js} +1 -1
- package/dist/ionic/p-d10bbab7.entry.js +4 -0
- package/dist/ionic/p-d268f7e2.system.entry.js +4 -0
- package/dist/ionic/{p-1df25966.entry.js → p-d3c1c23f.entry.js} +1 -1
- package/dist/ionic/{p-0a8a78db.system.entry.js → p-d4be0d81.system.entry.js} +1 -1
- package/dist/ionic/p-d5ef3a0a.entry.js +4 -0
- package/dist/ionic/p-d60342e3.js +4 -0
- package/dist/ionic/{p-8fe3c4ef.entry.js → p-d85eebc3.entry.js} +1 -1
- package/dist/ionic/{p-0612cdcc.system.entry.js → p-d9dfdbb5.system.entry.js} +1 -1
- package/dist/ionic/{p-385f66bc.entry.js → p-da5bbd4f.entry.js} +1 -1
- package/dist/ionic/p-dad515dc.js +4 -0
- package/dist/ionic/{p-ab427719.entry.js → p-de39f314.entry.js} +1 -1
- package/dist/ionic/{p-5f9fbad0.entry.js → p-de4c700f.entry.js} +1 -1
- package/dist/ionic/{p-19f6ac6c.system.js → p-e01ebeba.system.js} +1 -1
- package/dist/ionic/{p-1f79e54a.entry.js → p-e222fdd1.entry.js} +1 -1
- package/dist/ionic/{p-ef636601.entry.js → p-e5e492d8.entry.js} +1 -1
- package/dist/ionic/{p-fd783a38.system.entry.js → p-e9412fe7.system.entry.js} +1 -1
- package/dist/ionic/{p-16e06393.system.js → p-ea5173f9.system.js} +1 -1
- package/dist/ionic/{p-717c4b72.entry.js → p-eb546888.entry.js} +1 -1
- package/dist/ionic/{p-f0a7e80b.js → p-eee87ebb.js} +1 -1
- package/dist/ionic/p-f012e8f2.system.entry.js +4 -0
- package/dist/ionic/{p-c8d61b6c.system.entry.js → p-f15b0bbc.system.entry.js} +1 -1
- package/dist/ionic/{p-ec77b7ad.system.entry.js → p-f15f8140.system.entry.js} +1 -1
- package/dist/ionic/{p-31e02742.system.js → p-f3e8c505.system.js} +1 -1
- package/dist/ionic/{p-760dbd5e.js → p-f5cb9689.js} +1 -1
- package/dist/ionic/p-f687573e.system.js +4 -0
- package/dist/ionic/{p-3807cd45.system.entry.js → p-f6db2e96.system.entry.js} +2 -2
- package/dist/ionic/p-f8502e85.js +5 -0
- package/dist/ionic/{p-4bbc949f.system.entry.js → p-f8dfae89.system.entry.js} +1 -1
- package/dist/ionic/p-fcec3b7a.system.entry.js +4 -0
- package/dist/ionic/{p-b2d58604.system.entry.js → p-ff740d68.system.entry.js} +1 -1
- package/dist/ionic/p-ffaeba0a.system.entry.js +4 -0
- package/dist/types/components/datetime/datetime-interface.d.ts +10 -0
- package/dist/types/components/datetime/datetime.d.ts +9 -1
- package/dist/types/components/datetime/utils/format.d.ts +7 -13
- package/dist/types/components/datetime/utils/validate.d.ts +8 -0
- package/dist/types/components/item/item.d.ts +0 -32
- package/dist/types/components/menu/menu-interface.d.ts +1 -0
- package/dist/types/components/menu/menu.d.ts +2 -4
- package/dist/types/components/range/range.d.ts +29 -0
- package/dist/types/components/searchbar/searchbar.d.ts +38 -0
- package/dist/types/components.d.ts +38 -46
- package/dist/types/utils/focus-trap.d.ts +35 -0
- package/dist/types/utils/forms/index.d.ts +0 -1
- package/dist/types/utils/hardware-back-button.d.ts +1 -1
- package/dist/types/utils/helpers.d.ts +0 -1
- package/dist/types/utils/overlays.d.ts +0 -6
- package/hydrate/index.js +707 -448
- package/package.json +1 -1
- package/components/note.js +0 -48
- package/dist/collection/components/item/test/legacy/disabled/item.e2e.js +0 -14
- package/dist/collection/components/modal/test/a11y/modal.spec.js +0 -22
- package/dist/collection/utils/forms/form-controller.js +0 -61
- package/dist/esm-es5/app-globals-5cf6195b.js +0 -4
- package/dist/esm-es5/data-691286f1.js +0 -4
- package/dist/esm-es5/hardware-back-button-b410a047.js +0 -4
- package/dist/esm-es5/helpers-ae74b3c9.js +0 -4
- package/dist/esm-es5/index-1f563746.js +0 -4
- package/dist/esm-es5/index-4c30cddd.js +0 -5
- package/dist/esm-es5/input.utils-482fc893.js +0 -4
- package/dist/esm-es5/overlays-c69d2a07.js +0 -4
- package/dist/ionic/p-069388dd.system.js +0 -4
- package/dist/ionic/p-0b34d3a7.system.js +0 -4
- package/dist/ionic/p-0dfbbdbe.entry.js +0 -4
- package/dist/ionic/p-0f25a7bb.system.js +0 -4
- package/dist/ionic/p-0f81df5e.entry.js +0 -4
- package/dist/ionic/p-11bb459e.system.entry.js +0 -4
- package/dist/ionic/p-13e8ad2e.entry.js +0 -4
- package/dist/ionic/p-17082c91.system.js +0 -4
- package/dist/ionic/p-1deadb7f.system.js +0 -4
- package/dist/ionic/p-2c768965.entry.js +0 -4
- package/dist/ionic/p-3209217f.entry.js +0 -4
- package/dist/ionic/p-32fb7d95.entry.js +0 -4
- package/dist/ionic/p-446f3909.system.entry.js +0 -4
- package/dist/ionic/p-4b3a4938.entry.js +0 -4
- package/dist/ionic/p-4e7abe76.js +0 -4
- package/dist/ionic/p-5289aade.js +0 -4
- package/dist/ionic/p-5dbf7222.entry.js +0 -4
- package/dist/ionic/p-5eabaa80.js +0 -4
- package/dist/ionic/p-60a92a48.system.entry.js +0 -4
- package/dist/ionic/p-640fac4a.system.entry.js +0 -4
- package/dist/ionic/p-66e6860f.system.js +0 -4
- package/dist/ionic/p-6ad90d41.entry.js +0 -4
- package/dist/ionic/p-6aeb0272.entry.js +0 -4
- package/dist/ionic/p-6d659d62.entry.js +0 -4
- package/dist/ionic/p-7292add8.entry.js +0 -4
- package/dist/ionic/p-72fa96bf.system.js +0 -5
- package/dist/ionic/p-75861cd3.entry.js +0 -4
- package/dist/ionic/p-7e185a31.entry.js +0 -4
- package/dist/ionic/p-8b8b900d.entry.js +0 -4
- package/dist/ionic/p-90b3e3b0.system.entry.js +0 -4
- package/dist/ionic/p-93e79b55.js +0 -4
- package/dist/ionic/p-94f85e19.system.entry.js +0 -4
- package/dist/ionic/p-96107183.js +0 -4
- package/dist/ionic/p-986a47ee.system.entry.js +0 -4
- package/dist/ionic/p-9c93fdcd.js +0 -4
- package/dist/ionic/p-9d6f351e.js +0 -4
- package/dist/ionic/p-9e3b3f15.system.js +0 -4
- package/dist/ionic/p-9ecc1e42.entry.js +0 -4
- package/dist/ionic/p-bca27ea7.entry.js +0 -4
- package/dist/ionic/p-c68e75ea.system.js +0 -4
- package/dist/ionic/p-cd0ffc8c.entry.js +0 -4
- package/dist/ionic/p-d13689a6.entry.js +0 -4
- package/dist/ionic/p-d3f79a49.js +0 -4
- package/dist/ionic/p-d47a1a78.system.entry.js +0 -4
- package/dist/ionic/p-d9b6b588.entry.js +0 -4
- package/dist/ionic/p-df504a37.system.js +0 -4
- package/dist/ionic/p-e755046f.system.entry.js +0 -4
- package/dist/ionic/p-eb506d19.system.entry.js +0 -4
- package/dist/ionic/p-ed7a529f.js +0 -5
- package/dist/ionic/p-f2473724.js +0 -4
- package/dist/ionic/p-f7ccf8d9.entry.js +0 -4
- package/dist/types/utils/forms/form-controller.d.ts +0 -15
|
@@ -5,7 +5,7 @@ import { Host, h } from "@stencil/core";
|
|
|
5
5
|
import { getIonMode } from "../../global/ionic-global";
|
|
6
6
|
export class Thumbnail {
|
|
7
7
|
render() {
|
|
8
|
-
return (h(Host, { key: '
|
|
8
|
+
return (h(Host, { key: '85a0eb73f012ab18ad8b03e63aca9488dd11a4d7', class: getIonMode(this) }, h("slot", { key: 'a335c711d1987615cfcc953958edc0d63fbccca2' })));
|
|
9
9
|
}
|
|
10
10
|
static get is() { return "ion-thumbnail"; }
|
|
11
11
|
static get encapsulation() { return "shadow"; }
|
|
@@ -27,11 +27,11 @@ export class ToolbarTitle {
|
|
|
27
27
|
render() {
|
|
28
28
|
const mode = getIonMode(this);
|
|
29
29
|
const size = this.getSize();
|
|
30
|
-
return (h(Host, { key: '
|
|
30
|
+
return (h(Host, { key: '13fcf9c4fea765a4580a2c99aa03a25304d310de', class: createColorClasses(this.color, {
|
|
31
31
|
[mode]: true,
|
|
32
32
|
[`title-${size}`]: true,
|
|
33
33
|
'title-rtl': document.dir === 'rtl',
|
|
34
|
-
}) }, h("div", { key: '
|
|
34
|
+
}) }, h("div", { key: 'a0ad40298bdea5687c6ee4c873bd2926603df0f7', class: "toolbar-title" }, h("slot", { key: 'b08edc05432144aec791c10eec1ad23030fcfa1f' }))));
|
|
35
35
|
}
|
|
36
36
|
static get is() { return "ion-title"; }
|
|
37
37
|
static get encapsulation() { return "shadow"; }
|
|
@@ -388,9 +388,9 @@ export class Toast {
|
|
|
388
388
|
if (layout === 'stacked' && startButtons.length > 0 && endButtons.length > 0) {
|
|
389
389
|
printIonWarning('This toast is using start and end buttons with the stacked toast layout. We recommend following the best practice of using either start or end buttons with the stacked toast layout.', el);
|
|
390
390
|
}
|
|
391
|
-
return (h(Host, Object.assign({ key: '
|
|
391
|
+
return (h(Host, Object.assign({ key: '23e039d40ed3f698142abbf2eff13acc0d70b52e', tabindex: "-1" }, this.htmlAttributes, { style: {
|
|
392
392
|
zIndex: `${60000 + this.overlayIndex}`,
|
|
393
|
-
}, class: createColorClasses(this.color, Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'toast-translucent': this.translucent })), onIonToastWillDismiss: this.dispatchCancelHandler }), h("div", { key: '
|
|
393
|
+
}, class: createColorClasses(this.color, Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'toast-translucent': this.translucent })), onIonToastWillDismiss: this.dispatchCancelHandler }), h("div", { key: 'c3b790f76618c70f00c0ac319faab0bf5d30fd07', class: wrapperClass }, h("div", { key: 'b05c2a16b23d9d5ebe8e9e8448ca74ce9ee2aeaa', class: "toast-container", part: "container" }, this.renderButtons(startButtons, 'start'), this.icon !== undefined && (h("ion-icon", { class: "toast-icon", part: "icon", icon: this.icon, lazy: false, "aria-hidden": "true" })), h("div", { key: '06da7439fe6ac393b19721edd4b4c21cfc3d4521', class: "toast-content", role: "status", "aria-atomic": "true", "aria-live": "polite" }, !revealContentToScreenReader && header !== undefined && this.renderHeader('oldHeader', 'true'), !revealContentToScreenReader && message !== undefined && this.renderToastMessage('oldMessage', 'true'), revealContentToScreenReader && header !== undefined && this.renderHeader('header'), revealContentToScreenReader && message !== undefined && this.renderToastMessage('header')), this.renderButtons(endButtons, 'end')))));
|
|
394
394
|
}
|
|
395
395
|
static get is() { return "ion-toast"; }
|
|
396
396
|
static get encapsulation() { return "shadow"; }
|
|
@@ -157,7 +157,7 @@ export class Toggle {
|
|
|
157
157
|
const value = this.getValue();
|
|
158
158
|
const rtl = isRTL(el) ? 'rtl' : 'ltr';
|
|
159
159
|
renderHiddenInput(true, el, name, checked ? value : '', disabled);
|
|
160
|
-
return (h(Host, { key: '
|
|
160
|
+
return (h(Host, { key: '4404b52b62c84c2b9c7fa6358f8faf5a7f6a2e02', onClick: this.onClick, class: createColorClasses(color, {
|
|
161
161
|
[mode]: true,
|
|
162
162
|
'in-item': hostContext('ion-item', el),
|
|
163
163
|
'toggle-activated': activated,
|
|
@@ -167,10 +167,10 @@ export class Toggle {
|
|
|
167
167
|
[`toggle-alignment-${alignment}`]: true,
|
|
168
168
|
[`toggle-label-placement-${labelPlacement}`]: true,
|
|
169
169
|
[`toggle-${rtl}`]: true,
|
|
170
|
-
}) }, h("label", { key: '
|
|
170
|
+
}) }, h("label", { key: 'b626abcebb56f70fc3849ae3f7cdd4d99e92ee02', class: "toggle-wrapper" }, h("input", Object.assign({ key: '30bf51409249b0195e802eb7c68a2a67a8fa7855', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, this.inheritedAttributes)), h("div", { key: '24da2e034d1c2fcbd851438b2680dd5683ec50df', class: {
|
|
171
171
|
'label-text-wrapper': true,
|
|
172
172
|
'label-text-wrapper-hidden': !this.hasLabel,
|
|
173
|
-
}, part: "label" }, h("slot", { key: '
|
|
173
|
+
}, part: "label" }, h("slot", { key: '69b07934847a1c374e1016fd5cbcb7aba27a03ba' })), h("div", { key: 'a8a33696c7aa287ccea05e6560b5433b1da00598', class: "native-wrapper" }, this.renderToggleControl()))));
|
|
174
174
|
}
|
|
175
175
|
static get is() { return "ion-toggle"; }
|
|
176
176
|
static get encapsulation() { return "shadow"; }
|
|
@@ -62,10 +62,10 @@ export class Toolbar {
|
|
|
62
62
|
this.childrenStyles.forEach((value) => {
|
|
63
63
|
Object.assign(childStyles, value);
|
|
64
64
|
});
|
|
65
|
-
return (h(Host, { key: '
|
|
65
|
+
return (h(Host, { key: 'a7b140e85cb60a8bef52dcc01c0ca95cf4dd2339', class: Object.assign(Object.assign({}, childStyles), createColorClasses(this.color, {
|
|
66
66
|
[mode]: true,
|
|
67
67
|
'in-toolbar': hostContext('ion-toolbar', this.el),
|
|
68
|
-
})) }, h("div", { key: '
|
|
68
|
+
})) }, h("div", { key: 'bdca37c9e022475501993660e60549aae897a1c6', class: "toolbar-background" }), h("div", { key: '586abce4db3f2726ce00876565cfc966df54db2c', class: "toolbar-container" }, h("slot", { key: '124b60b8fdd6b3f9bf3c97122890444bc7e1c13d', name: "start" }), h("slot", { key: '8581916125eb38d66b4f6e0e2c674eb09a4a54a0', name: "secondary" }), h("div", { key: '0f786a72d646957fa445e30c04a0ce2c2dbe1a2b', class: "toolbar-content" }, h("slot", { key: 'be4e90c43db8c0cd596def6239381913169621b7' })), h("slot", { key: '00c87247e89b99e7c1f68367247d590b12f7a106', name: "primary" }), h("slot", { key: 'b2548f6ed8bec893e6f1e782eb27c3be24cac10c', name: "end" }))));
|
|
69
69
|
}
|
|
70
70
|
static get is() { return "ion-toolbar"; }
|
|
71
71
|
static get encapsulation() { return "shadow"; }
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { focusVisibleElement } from "./helpers";
|
|
5
|
+
/**
|
|
6
|
+
* This query string selects elements that
|
|
7
|
+
* are eligible to receive focus. We select
|
|
8
|
+
* interactive elements that meet the following
|
|
9
|
+
* criteria:
|
|
10
|
+
* 1. Element does not have a negative tabindex
|
|
11
|
+
* 2. Element does not have `hidden`
|
|
12
|
+
* 3. Element does not have `disabled` for non-Ionic components.
|
|
13
|
+
* 4. Element does not have `disabled` or `disabled="true"` for Ionic components.
|
|
14
|
+
* Note: We need this distinction because `disabled="false"` is
|
|
15
|
+
* valid usage for the disabled property on ion-button.
|
|
16
|
+
*/
|
|
17
|
+
export const focusableQueryString = '[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])';
|
|
18
|
+
/**
|
|
19
|
+
* Focuses the first descendant in a context
|
|
20
|
+
* that can receive focus. If none exists,
|
|
21
|
+
* a fallback element will be focused.
|
|
22
|
+
* This fallback is typically an ancestor
|
|
23
|
+
* container such as a menu or overlay so focus does not
|
|
24
|
+
* leave the container we are trying to trap focus in.
|
|
25
|
+
*
|
|
26
|
+
* If no fallback is specified then we focus the container itself.
|
|
27
|
+
*/
|
|
28
|
+
export const focusFirstDescendant = (ref, fallbackElement) => {
|
|
29
|
+
const firstInput = ref.querySelector(focusableQueryString);
|
|
30
|
+
focusElementInContext(firstInput, fallbackElement !== null && fallbackElement !== void 0 ? fallbackElement : ref);
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Focuses the last descendant in a context
|
|
34
|
+
* that can receive focus. If none exists,
|
|
35
|
+
* a fallback element will be focused.
|
|
36
|
+
* This fallback is typically an ancestor
|
|
37
|
+
* container such as a menu or overlay so focus does not
|
|
38
|
+
* leave the container we are trying to trap focus in.
|
|
39
|
+
*
|
|
40
|
+
* If no fallback is specified then we focus the container itself.
|
|
41
|
+
*/
|
|
42
|
+
export const focusLastDescendant = (ref, fallbackElement) => {
|
|
43
|
+
const inputs = Array.from(ref.querySelectorAll(focusableQueryString));
|
|
44
|
+
const lastInput = inputs.length > 0 ? inputs[inputs.length - 1] : null;
|
|
45
|
+
focusElementInContext(lastInput, fallbackElement !== null && fallbackElement !== void 0 ? fallbackElement : ref);
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Focuses a particular element in a context. If the element
|
|
49
|
+
* doesn't have anything focusable associated with it then
|
|
50
|
+
* a fallback element will be focused.
|
|
51
|
+
*
|
|
52
|
+
* This fallback is typically an ancestor
|
|
53
|
+
* container such as a menu or overlay so focus does not
|
|
54
|
+
* leave the container we are trying to trap focus in.
|
|
55
|
+
* This should be used instead of the focus() method
|
|
56
|
+
* on most elements because the focusable element
|
|
57
|
+
* may not be the host element.
|
|
58
|
+
*
|
|
59
|
+
* For example, if an ion-button should be focused
|
|
60
|
+
* then we should actually focus the native <button>
|
|
61
|
+
* element inside of ion-button's shadow root, not
|
|
62
|
+
* the host element itself.
|
|
63
|
+
*/
|
|
64
|
+
const focusElementInContext = (hostToFocus, fallbackElement) => {
|
|
65
|
+
let elementToFocus = hostToFocus;
|
|
66
|
+
const shadowRoot = hostToFocus === null || hostToFocus === void 0 ? void 0 : hostToFocus.shadowRoot;
|
|
67
|
+
if (shadowRoot) {
|
|
68
|
+
// If there are no inner focusable elements, just focus the host element.
|
|
69
|
+
elementToFocus = shadowRoot.querySelector(focusableQueryString) || hostToFocus;
|
|
70
|
+
}
|
|
71
|
+
if (elementToFocus) {
|
|
72
|
+
focusVisibleElement(elementToFocus);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// Focus fallback element instead of letting focus escape
|
|
76
|
+
fallbackElement.focus();
|
|
77
|
+
}
|
|
78
|
+
};
|
|
@@ -15,7 +15,7 @@ import { config } from "../global/config";
|
|
|
15
15
|
* moment this file is evaluated which could be
|
|
16
16
|
* before the config is set.
|
|
17
17
|
*/
|
|
18
|
-
export const
|
|
18
|
+
export const shouldUseCloseWatcher = () => config.get('experimentalCloseWatcher', false) && win !== undefined && 'CloseWatcher' in win;
|
|
19
19
|
/**
|
|
20
20
|
* When hardwareBackButton: false in config,
|
|
21
21
|
* we need to make sure we also block the default
|
|
@@ -85,7 +85,7 @@ export const startHardwareBackButton = () => {
|
|
|
85
85
|
* backbutton event otherwise we may get duplicate
|
|
86
86
|
* events firing.
|
|
87
87
|
*/
|
|
88
|
-
if (
|
|
88
|
+
if (shouldUseCloseWatcher()) {
|
|
89
89
|
let watcher;
|
|
90
90
|
const configureWatcher = () => {
|
|
91
91
|
watcher === null || watcher === void 0 ? void 0 : watcher.destroy();
|
|
@@ -230,13 +230,6 @@ export const raf = (h) => {
|
|
|
230
230
|
export const hasShadowDom = (el) => {
|
|
231
231
|
return !!el.shadowRoot && !!el.attachShadow;
|
|
232
232
|
};
|
|
233
|
-
export const findItemLabel = (componentEl) => {
|
|
234
|
-
const itemEl = componentEl.closest('ion-item');
|
|
235
|
-
if (itemEl) {
|
|
236
|
-
return itemEl.querySelector('ion-label');
|
|
237
|
-
}
|
|
238
|
-
return null;
|
|
239
|
-
};
|
|
240
233
|
export const focusVisibleElement = (el) => {
|
|
241
234
|
el.focus();
|
|
242
235
|
/**
|
|
@@ -276,7 +269,7 @@ export const getAriaLabel = (componentEl, inputId) => {
|
|
|
276
269
|
// a custom label using the label element
|
|
277
270
|
const componentId = componentEl.id;
|
|
278
271
|
let labelId = labelledBy !== null && labelledBy.trim() !== '' ? labelledBy : inputId + '-lbl';
|
|
279
|
-
let label = labelledBy !== null && labelledBy.trim() !== '' ? document.getElementById(labelledBy) :
|
|
272
|
+
let label = labelledBy !== null && labelledBy.trim() !== '' ? document.getElementById(labelledBy) : null;
|
|
280
273
|
if (label) {
|
|
281
274
|
if (labelledBy === null) {
|
|
282
275
|
label.id = labelId;
|
|
@@ -29,7 +29,14 @@ export const startInputShims = async (config, platform) => {
|
|
|
29
29
|
const keyboardHeight = config.getNumber('keyboardHeight', 290);
|
|
30
30
|
const scrollAssist = config.getBoolean('scrollAssist', true);
|
|
31
31
|
const hideCaret = config.getBoolean('hideCaretOnScroll', isIOS);
|
|
32
|
-
|
|
32
|
+
/**
|
|
33
|
+
* The team is evaluating if inputBlurring is still needed. As a result
|
|
34
|
+
* this feature is disabled by default as of Ionic 8.0. Developers are
|
|
35
|
+
* able to re-enable it temporarily. The team may remove this utility
|
|
36
|
+
* if it is determined that doing so would not bring any adverse side effects.
|
|
37
|
+
* TODO FW-6014 remove input blurring utility (including implementation)
|
|
38
|
+
*/
|
|
39
|
+
const inputBlurring = config.getBoolean('inputBlurring', false);
|
|
33
40
|
const scrollPadding = config.getBoolean('scrollPadding', true);
|
|
34
41
|
const inputs = Array.from(doc.querySelectorAll('ion-input, ion-textarea'));
|
|
35
42
|
const hideCaretMap = new WeakMap();
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { doc } from "./browser/index";
|
|
5
|
-
import {
|
|
5
|
+
import { focusFirstDescendant, focusLastDescendant, focusableQueryString } from "./focus-trap";
|
|
6
|
+
import { shouldUseCloseWatcher } from "./hardware-back-button";
|
|
6
7
|
import { config } from "../global/config";
|
|
7
8
|
import { getIonMode } from "../global/ionic-global";
|
|
8
9
|
import { CoreDelegate } from "./framework-delegate";
|
|
@@ -90,39 +91,7 @@ export const createOverlay = (tagName, opts) => {
|
|
|
90
91
|
}
|
|
91
92
|
return Promise.resolve();
|
|
92
93
|
};
|
|
93
|
-
/**
|
|
94
|
-
* This query string selects elements that
|
|
95
|
-
* are eligible to receive focus. We select
|
|
96
|
-
* interactive elements that meet the following
|
|
97
|
-
* criteria:
|
|
98
|
-
* 1. Element does not have a negative tabindex
|
|
99
|
-
* 2. Element does not have `hidden`
|
|
100
|
-
* 3. Element does not have `disabled` for non-Ionic components.
|
|
101
|
-
* 4. Element does not have `disabled` or `disabled="true"` for Ionic components.
|
|
102
|
-
* Note: We need this distinction because `disabled="false"` is
|
|
103
|
-
* valid usage for the disabled property on ion-button.
|
|
104
|
-
*/
|
|
105
|
-
const focusableQueryString = '[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])';
|
|
106
94
|
const isOverlayHidden = (overlay) => overlay.classList.contains('overlay-hidden');
|
|
107
|
-
/**
|
|
108
|
-
* Focuses the first descendant in an overlay
|
|
109
|
-
* that can receive focus. If none exists,
|
|
110
|
-
* the entire overlay will be focused.
|
|
111
|
-
*/
|
|
112
|
-
export const focusFirstDescendant = (ref, overlay) => {
|
|
113
|
-
const firstInput = ref.querySelector(focusableQueryString);
|
|
114
|
-
focusElementInOverlay(firstInput, overlay);
|
|
115
|
-
};
|
|
116
|
-
/**
|
|
117
|
-
* Focuses the last descendant in an overlay
|
|
118
|
-
* that can receive focus. If none exists,
|
|
119
|
-
* the entire overlay will be focused.
|
|
120
|
-
*/
|
|
121
|
-
const focusLastDescendant = (ref, overlay) => {
|
|
122
|
-
const inputs = Array.from(ref.querySelectorAll(focusableQueryString));
|
|
123
|
-
const lastInput = inputs.length > 0 ? inputs[inputs.length - 1] : null;
|
|
124
|
-
focusElementInOverlay(lastInput, overlay);
|
|
125
|
-
};
|
|
126
95
|
/**
|
|
127
96
|
* Focuses a particular element in an overlay. If the element
|
|
128
97
|
* doesn't have anything focusable associated with it then
|
|
@@ -313,7 +282,7 @@ const trapKeyboardFocus = (ev, doc) => {
|
|
|
313
282
|
*/
|
|
314
283
|
const lastFocus = lastOverlay.lastFocus;
|
|
315
284
|
// Focus the first element in the overlay wrapper
|
|
316
|
-
focusFirstDescendant(lastOverlay
|
|
285
|
+
focusFirstDescendant(lastOverlay);
|
|
317
286
|
/**
|
|
318
287
|
* If the cached last focused element is the
|
|
319
288
|
* same as the active element, then we need
|
|
@@ -324,7 +293,7 @@ const trapKeyboardFocus = (ev, doc) => {
|
|
|
324
293
|
* last focus to equal the active element.
|
|
325
294
|
*/
|
|
326
295
|
if (lastFocus === doc.activeElement) {
|
|
327
|
-
focusLastDescendant(lastOverlay
|
|
296
|
+
focusLastDescendant(lastOverlay);
|
|
328
297
|
}
|
|
329
298
|
lastOverlay.lastFocus = doc.activeElement;
|
|
330
299
|
}
|
|
@@ -369,7 +338,7 @@ const connectListeners = (doc) => {
|
|
|
369
338
|
* this behavior will be handled via the ionBackButton
|
|
370
339
|
* event.
|
|
371
340
|
*/
|
|
372
|
-
if (!
|
|
341
|
+
if (!shouldUseCloseWatcher()) {
|
|
373
342
|
doc.addEventListener('keydown', (ev) => {
|
|
374
343
|
if (ev.key === 'Escape') {
|
|
375
344
|
const lastOverlay = getPresentedOverlay(doc);
|
|
@@ -460,15 +429,7 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
|
|
|
460
429
|
}
|
|
461
430
|
setRootAriaHidden(true);
|
|
462
431
|
document.body.classList.add(BACKDROP_NO_SCROLL);
|
|
463
|
-
|
|
464
|
-
* Hide all other overlays from screen readers so only this one
|
|
465
|
-
* can be read. Note that presenting an overlay always makes
|
|
466
|
-
* it the topmost one.
|
|
467
|
-
*/
|
|
468
|
-
if (doc !== undefined) {
|
|
469
|
-
const presentedOverlays = getPresentedOverlays(doc);
|
|
470
|
-
presentedOverlays.forEach((o) => o.setAttribute('aria-hidden', 'true'));
|
|
471
|
-
}
|
|
432
|
+
hideOverlaysFromScreenReaders(overlay.el);
|
|
472
433
|
overlay.presented = true;
|
|
473
434
|
overlay.willPresent.emit();
|
|
474
435
|
(_a = overlay.willPresentShorthand) === null || _a === void 0 ? void 0 : _a.emit();
|
|
@@ -561,7 +522,7 @@ const restoreElementFocus = async (overlayEl) => {
|
|
|
561
522
|
}
|
|
562
523
|
};
|
|
563
524
|
export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnimation, opts) => {
|
|
564
|
-
var _a, _b
|
|
525
|
+
var _a, _b;
|
|
565
526
|
if (!overlay.presented) {
|
|
566
527
|
return false;
|
|
567
528
|
}
|
|
@@ -614,13 +575,7 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
|
|
|
614
575
|
console.error(err);
|
|
615
576
|
}
|
|
616
577
|
overlay.el.remove();
|
|
617
|
-
|
|
618
|
-
* If there are other overlays presented, unhide the new
|
|
619
|
-
* topmost one from screen readers.
|
|
620
|
-
*/
|
|
621
|
-
if (doc !== undefined) {
|
|
622
|
-
(_c = getPresentedOverlay(doc)) === null || _c === void 0 ? void 0 : _c.removeAttribute('aria-hidden');
|
|
623
|
-
}
|
|
578
|
+
revealOverlaysToScreenReaders();
|
|
624
579
|
return true;
|
|
625
580
|
};
|
|
626
581
|
const getAppRoot = (doc) => {
|
|
@@ -816,3 +771,59 @@ export const createTriggerController = () => {
|
|
|
816
771
|
removeClickListener,
|
|
817
772
|
};
|
|
818
773
|
};
|
|
774
|
+
/**
|
|
775
|
+
* Ensure that underlying overlays have aria-hidden if necessary so that screen readers
|
|
776
|
+
* cannot move focus to these elements. Note that we cannot rely on focus/focusin/focusout
|
|
777
|
+
* events here because those events do not fire when the screen readers moves to a non-focusable
|
|
778
|
+
* element such as text.
|
|
779
|
+
* Without this logic screen readers would be able to move focus outside of the top focus-trapped overlay.
|
|
780
|
+
*
|
|
781
|
+
* @param newTopMostOverlay - The overlay that is being presented. Since the overlay has not been
|
|
782
|
+
* fully presented yet at the time this function is called it will not be included in the getPresentedOverlays result.
|
|
783
|
+
*/
|
|
784
|
+
const hideOverlaysFromScreenReaders = (newTopMostOverlay) => {
|
|
785
|
+
var _a;
|
|
786
|
+
if (doc === undefined)
|
|
787
|
+
return;
|
|
788
|
+
const overlays = getPresentedOverlays(doc);
|
|
789
|
+
for (let i = overlays.length - 1; i >= 0; i--) {
|
|
790
|
+
const presentedOverlay = overlays[i];
|
|
791
|
+
const nextPresentedOverlay = (_a = overlays[i + 1]) !== null && _a !== void 0 ? _a : newTopMostOverlay;
|
|
792
|
+
/**
|
|
793
|
+
* If next overlay has aria-hidden then all remaining overlays will have it too.
|
|
794
|
+
* Or, if the next overlay is a Toast that does not have aria-hidden then current overlay
|
|
795
|
+
* should not have aria-hidden either so focus can remain in the current overlay.
|
|
796
|
+
*/
|
|
797
|
+
if (nextPresentedOverlay.hasAttribute('aria-hidden') || nextPresentedOverlay.tagName !== 'ION-TOAST') {
|
|
798
|
+
presentedOverlay.setAttribute('aria-hidden', 'true');
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
};
|
|
802
|
+
/**
|
|
803
|
+
* When dismissing an overlay we need to reveal the new top-most overlay to screen readers.
|
|
804
|
+
* If the top-most overlay is a Toast we potentially need to reveal more overlays since
|
|
805
|
+
* focus is never automatically moved to the Toast.
|
|
806
|
+
*/
|
|
807
|
+
const revealOverlaysToScreenReaders = () => {
|
|
808
|
+
if (doc === undefined)
|
|
809
|
+
return;
|
|
810
|
+
const overlays = getPresentedOverlays(doc);
|
|
811
|
+
for (let i = overlays.length - 1; i >= 0; i--) {
|
|
812
|
+
const currentOverlay = overlays[i];
|
|
813
|
+
/**
|
|
814
|
+
* If the current we are looking at is a Toast then we can remove aria-hidden.
|
|
815
|
+
* However, we potentially need to keep looking at the overlay stack because there
|
|
816
|
+
* could be more Toasts underneath. Additionally, we need to unhide the closest non-Toast
|
|
817
|
+
* overlay too so focus can move there since focus is never automatically moved to the Toast.
|
|
818
|
+
*/
|
|
819
|
+
currentOverlay.removeAttribute('aria-hidden');
|
|
820
|
+
/**
|
|
821
|
+
* If we found a non-Toast element then we can just remove aria-hidden and stop searching entirely
|
|
822
|
+
* since this overlay should always receive focus. As a result, all underlying overlays should still
|
|
823
|
+
* be hidden from screen readers.
|
|
824
|
+
*/
|
|
825
|
+
if (currentOverlay.tagName !== 'ION-TOAST') {
|
|
826
|
+
break;
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
};
|
|
@@ -45,6 +45,18 @@ export const createSlotMutationController = (el, slotName, mutationCallback) =>
|
|
|
45
45
|
});
|
|
46
46
|
hostMutationObserver.observe(el, {
|
|
47
47
|
childList: true,
|
|
48
|
+
/**
|
|
49
|
+
* This fixes an issue with the `ion-input` and
|
|
50
|
+
* `ion-textarea` not re-rendering in some cases
|
|
51
|
+
* when using the label slot functionality.
|
|
52
|
+
*
|
|
53
|
+
* HTML element patches in Stencil that are enabled
|
|
54
|
+
* by the `experimentalSlotFixes` flag in Stencil v4
|
|
55
|
+
* result in DOM manipulations that won't trigger
|
|
56
|
+
* the current mutation observer configuration and
|
|
57
|
+
* callback.
|
|
58
|
+
*/
|
|
59
|
+
subtree: true,
|
|
48
60
|
});
|
|
49
61
|
}
|
|
50
62
|
/**
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { newSpecPage } from "@stencil/core/testing";
|
|
5
5
|
import { Modal } from "../../../components/modal/modal";
|
|
6
|
+
import { Toast } from "../../../components/toast/toast";
|
|
6
7
|
import { Nav } from "../../../components/nav/nav";
|
|
7
8
|
import { RouterOutlet } from "../../../components/router-outlet/router-outlet";
|
|
8
9
|
import { setRootAriaHidden } from "../../overlays";
|
|
@@ -150,4 +151,56 @@ describe('aria-hidden on individual overlays', () => {
|
|
|
150
151
|
await modalOne.present();
|
|
151
152
|
expect(modalOne.hasAttribute('aria-hidden')).toEqual(false);
|
|
152
153
|
});
|
|
154
|
+
it('should not hide previous overlay if top-most overlay is toast', async () => {
|
|
155
|
+
const page = await newSpecPage({
|
|
156
|
+
components: [Modal, Toast],
|
|
157
|
+
html: `
|
|
158
|
+
<ion-modal id="m-one"></ion-modal>
|
|
159
|
+
<ion-modal id="m-two"></ion-modal>
|
|
160
|
+
<ion-toast id="t-one"></ion-toast>
|
|
161
|
+
<ion-toast id="t-two"></ion-toast>
|
|
162
|
+
`,
|
|
163
|
+
});
|
|
164
|
+
const modalOne = page.body.querySelector('ion-modal#m-one');
|
|
165
|
+
const modalTwo = page.body.querySelector('ion-modal#m-two');
|
|
166
|
+
const toastOne = page.body.querySelector('ion-toast#t-one');
|
|
167
|
+
const toastTwo = page.body.querySelector('ion-toast#t-two');
|
|
168
|
+
await modalOne.present();
|
|
169
|
+
await modalTwo.present();
|
|
170
|
+
await toastOne.present();
|
|
171
|
+
await toastTwo.present();
|
|
172
|
+
expect(modalOne.hasAttribute('aria-hidden')).toEqual(true);
|
|
173
|
+
expect(modalTwo.hasAttribute('aria-hidden')).toEqual(false);
|
|
174
|
+
expect(toastOne.hasAttribute('aria-hidden')).toEqual(false);
|
|
175
|
+
expect(toastTwo.hasAttribute('aria-hidden')).toEqual(false);
|
|
176
|
+
await toastTwo.dismiss();
|
|
177
|
+
expect(modalOne.hasAttribute('aria-hidden')).toEqual(true);
|
|
178
|
+
expect(modalTwo.hasAttribute('aria-hidden')).toEqual(false);
|
|
179
|
+
expect(toastOne.hasAttribute('aria-hidden')).toEqual(false);
|
|
180
|
+
await toastOne.dismiss();
|
|
181
|
+
expect(modalOne.hasAttribute('aria-hidden')).toEqual(true);
|
|
182
|
+
expect(modalTwo.hasAttribute('aria-hidden')).toEqual(false);
|
|
183
|
+
});
|
|
184
|
+
it('should hide previous overlay even with a toast that is not the top-most overlay', async () => {
|
|
185
|
+
const page = await newSpecPage({
|
|
186
|
+
components: [Modal, Toast],
|
|
187
|
+
html: `
|
|
188
|
+
<ion-modal id="m-one"></ion-modal>
|
|
189
|
+
<ion-toast id="t-one"></ion-toast>
|
|
190
|
+
<ion-modal id="m-two"></ion-modal>
|
|
191
|
+
`,
|
|
192
|
+
});
|
|
193
|
+
const modalOne = page.body.querySelector('ion-modal#m-one');
|
|
194
|
+
const modalTwo = page.body.querySelector('ion-modal#m-two');
|
|
195
|
+
const toastOne = page.body.querySelector('ion-toast#t-one');
|
|
196
|
+
await modalOne.present();
|
|
197
|
+
await toastOne.present();
|
|
198
|
+
await modalTwo.present();
|
|
199
|
+
expect(modalOne.hasAttribute('aria-hidden')).toEqual(true);
|
|
200
|
+
expect(toastOne.hasAttribute('aria-hidden')).toEqual(true);
|
|
201
|
+
expect(modalTwo.hasAttribute('aria-hidden')).toEqual(false);
|
|
202
|
+
await modalTwo.dismiss();
|
|
203
|
+
expect(modalOne.hasAttribute('aria-hidden')).toEqual(false);
|
|
204
|
+
expect(toastOne.hasAttribute('aria-hidden')).toEqual(false);
|
|
205
|
+
});
|
|
153
206
|
});
|