@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
|
@@ -4,13 +4,88 @@
|
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
6
|
const index = require('./index-c8d52405.js');
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
7
|
+
const helpers = require('./helpers-668b3d95.js');
|
|
8
|
+
const hardwareBackButton = require('./hardware-back-button-1c67a5a2.js');
|
|
9
|
+
const ionicGlobal = require('./ionic-global-5762eca9.js');
|
|
10
|
+
const frameworkDelegate = require('./framework-delegate-0499d444.js');
|
|
10
11
|
const gestureController = require('./gesture-controller-9436f482.js');
|
|
11
|
-
const helpers = require('./helpers-b71ca811.js');
|
|
12
12
|
const index$1 = require('./index-5915f9b3.js');
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* This query string selects elements that
|
|
16
|
+
* are eligible to receive focus. We select
|
|
17
|
+
* interactive elements that meet the following
|
|
18
|
+
* criteria:
|
|
19
|
+
* 1. Element does not have a negative tabindex
|
|
20
|
+
* 2. Element does not have `hidden`
|
|
21
|
+
* 3. Element does not have `disabled` for non-Ionic components.
|
|
22
|
+
* 4. Element does not have `disabled` or `disabled="true"` for Ionic components.
|
|
23
|
+
* Note: We need this distinction because `disabled="false"` is
|
|
24
|
+
* valid usage for the disabled property on ion-button.
|
|
25
|
+
*/
|
|
26
|
+
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])';
|
|
27
|
+
/**
|
|
28
|
+
* Focuses the first descendant in a context
|
|
29
|
+
* that can receive focus. If none exists,
|
|
30
|
+
* a fallback element will be focused.
|
|
31
|
+
* This fallback is typically an ancestor
|
|
32
|
+
* container such as a menu or overlay so focus does not
|
|
33
|
+
* leave the container we are trying to trap focus in.
|
|
34
|
+
*
|
|
35
|
+
* If no fallback is specified then we focus the container itself.
|
|
36
|
+
*/
|
|
37
|
+
const focusFirstDescendant = (ref, fallbackElement) => {
|
|
38
|
+
const firstInput = ref.querySelector(focusableQueryString);
|
|
39
|
+
focusElementInContext(firstInput, fallbackElement !== null && fallbackElement !== void 0 ? fallbackElement : ref);
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Focuses the last descendant in a context
|
|
43
|
+
* that can receive focus. If none exists,
|
|
44
|
+
* a fallback element will be focused.
|
|
45
|
+
* This fallback is typically an ancestor
|
|
46
|
+
* container such as a menu or overlay so focus does not
|
|
47
|
+
* leave the container we are trying to trap focus in.
|
|
48
|
+
*
|
|
49
|
+
* If no fallback is specified then we focus the container itself.
|
|
50
|
+
*/
|
|
51
|
+
const focusLastDescendant = (ref, fallbackElement) => {
|
|
52
|
+
const inputs = Array.from(ref.querySelectorAll(focusableQueryString));
|
|
53
|
+
const lastInput = inputs.length > 0 ? inputs[inputs.length - 1] : null;
|
|
54
|
+
focusElementInContext(lastInput, fallbackElement !== null && fallbackElement !== void 0 ? fallbackElement : ref);
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Focuses a particular element in a context. If the element
|
|
58
|
+
* doesn't have anything focusable associated with it then
|
|
59
|
+
* a fallback element will be focused.
|
|
60
|
+
*
|
|
61
|
+
* This fallback is typically an ancestor
|
|
62
|
+
* container such as a menu or overlay so focus does not
|
|
63
|
+
* leave the container we are trying to trap focus in.
|
|
64
|
+
* This should be used instead of the focus() method
|
|
65
|
+
* on most elements because the focusable element
|
|
66
|
+
* may not be the host element.
|
|
67
|
+
*
|
|
68
|
+
* For example, if an ion-button should be focused
|
|
69
|
+
* then we should actually focus the native <button>
|
|
70
|
+
* element inside of ion-button's shadow root, not
|
|
71
|
+
* the host element itself.
|
|
72
|
+
*/
|
|
73
|
+
const focusElementInContext = (hostToFocus, fallbackElement) => {
|
|
74
|
+
let elementToFocus = hostToFocus;
|
|
75
|
+
const shadowRoot = hostToFocus === null || hostToFocus === void 0 ? void 0 : hostToFocus.shadowRoot;
|
|
76
|
+
if (shadowRoot) {
|
|
77
|
+
// If there are no inner focusable elements, just focus the host element.
|
|
78
|
+
elementToFocus = shadowRoot.querySelector(focusableQueryString) || hostToFocus;
|
|
79
|
+
}
|
|
80
|
+
if (elementToFocus) {
|
|
81
|
+
helpers.focusVisibleElement(elementToFocus);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// Focus fallback element instead of letting focus escape
|
|
85
|
+
fallbackElement.focus();
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
14
89
|
let lastOverlayIndex = 0;
|
|
15
90
|
let lastId = 0;
|
|
16
91
|
const activeAnimations = new WeakMap();
|
|
@@ -91,39 +166,7 @@ const createOverlay = (tagName, opts) => {
|
|
|
91
166
|
}
|
|
92
167
|
return Promise.resolve();
|
|
93
168
|
};
|
|
94
|
-
/**
|
|
95
|
-
* This query string selects elements that
|
|
96
|
-
* are eligible to receive focus. We select
|
|
97
|
-
* interactive elements that meet the following
|
|
98
|
-
* criteria:
|
|
99
|
-
* 1. Element does not have a negative tabindex
|
|
100
|
-
* 2. Element does not have `hidden`
|
|
101
|
-
* 3. Element does not have `disabled` for non-Ionic components.
|
|
102
|
-
* 4. Element does not have `disabled` or `disabled="true"` for Ionic components.
|
|
103
|
-
* Note: We need this distinction because `disabled="false"` is
|
|
104
|
-
* valid usage for the disabled property on ion-button.
|
|
105
|
-
*/
|
|
106
|
-
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])';
|
|
107
169
|
const isOverlayHidden = (overlay) => overlay.classList.contains('overlay-hidden');
|
|
108
|
-
/**
|
|
109
|
-
* Focuses the first descendant in an overlay
|
|
110
|
-
* that can receive focus. If none exists,
|
|
111
|
-
* the entire overlay will be focused.
|
|
112
|
-
*/
|
|
113
|
-
const focusFirstDescendant = (ref, overlay) => {
|
|
114
|
-
const firstInput = ref.querySelector(focusableQueryString);
|
|
115
|
-
focusElementInOverlay(firstInput, overlay);
|
|
116
|
-
};
|
|
117
|
-
/**
|
|
118
|
-
* Focuses the last descendant in an overlay
|
|
119
|
-
* that can receive focus. If none exists,
|
|
120
|
-
* the entire overlay will be focused.
|
|
121
|
-
*/
|
|
122
|
-
const focusLastDescendant = (ref, overlay) => {
|
|
123
|
-
const inputs = Array.from(ref.querySelectorAll(focusableQueryString));
|
|
124
|
-
const lastInput = inputs.length > 0 ? inputs[inputs.length - 1] : null;
|
|
125
|
-
focusElementInOverlay(lastInput, overlay);
|
|
126
|
-
};
|
|
127
170
|
/**
|
|
128
171
|
* Focuses a particular element in an overlay. If the element
|
|
129
172
|
* doesn't have anything focusable associated with it then
|
|
@@ -314,7 +357,7 @@ const trapKeyboardFocus = (ev, doc) => {
|
|
|
314
357
|
*/
|
|
315
358
|
const lastFocus = lastOverlay.lastFocus;
|
|
316
359
|
// Focus the first element in the overlay wrapper
|
|
317
|
-
focusFirstDescendant(lastOverlay
|
|
360
|
+
focusFirstDescendant(lastOverlay);
|
|
318
361
|
/**
|
|
319
362
|
* If the cached last focused element is the
|
|
320
363
|
* same as the active element, then we need
|
|
@@ -325,7 +368,7 @@ const trapKeyboardFocus = (ev, doc) => {
|
|
|
325
368
|
* last focus to equal the active element.
|
|
326
369
|
*/
|
|
327
370
|
if (lastFocus === doc.activeElement) {
|
|
328
|
-
focusLastDescendant(lastOverlay
|
|
371
|
+
focusLastDescendant(lastOverlay);
|
|
329
372
|
}
|
|
330
373
|
lastOverlay.lastFocus = doc.activeElement;
|
|
331
374
|
}
|
|
@@ -370,7 +413,7 @@ const connectListeners = (doc) => {
|
|
|
370
413
|
* this behavior will be handled via the ionBackButton
|
|
371
414
|
* event.
|
|
372
415
|
*/
|
|
373
|
-
if (!hardwareBackButton.
|
|
416
|
+
if (!hardwareBackButton.shouldUseCloseWatcher()) {
|
|
374
417
|
doc.addEventListener('keydown', (ev) => {
|
|
375
418
|
if (ev.key === 'Escape') {
|
|
376
419
|
const lastOverlay = getPresentedOverlay(doc);
|
|
@@ -461,15 +504,7 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
|
|
|
461
504
|
}
|
|
462
505
|
setRootAriaHidden(true);
|
|
463
506
|
document.body.classList.add(gestureController.BACKDROP_NO_SCROLL);
|
|
464
|
-
|
|
465
|
-
* Hide all other overlays from screen readers so only this one
|
|
466
|
-
* can be read. Note that presenting an overlay always makes
|
|
467
|
-
* it the topmost one.
|
|
468
|
-
*/
|
|
469
|
-
if (index.doc !== undefined) {
|
|
470
|
-
const presentedOverlays = getPresentedOverlays(index.doc);
|
|
471
|
-
presentedOverlays.forEach((o) => o.setAttribute('aria-hidden', 'true'));
|
|
472
|
-
}
|
|
507
|
+
hideOverlaysFromScreenReaders(overlay.el);
|
|
473
508
|
overlay.presented = true;
|
|
474
509
|
overlay.willPresent.emit();
|
|
475
510
|
(_a = overlay.willPresentShorthand) === null || _a === void 0 ? void 0 : _a.emit();
|
|
@@ -562,7 +597,7 @@ const restoreElementFocus = async (overlayEl) => {
|
|
|
562
597
|
}
|
|
563
598
|
};
|
|
564
599
|
const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnimation, opts) => {
|
|
565
|
-
var _a, _b
|
|
600
|
+
var _a, _b;
|
|
566
601
|
if (!overlay.presented) {
|
|
567
602
|
return false;
|
|
568
603
|
}
|
|
@@ -615,13 +650,7 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
|
|
|
615
650
|
console.error(err);
|
|
616
651
|
}
|
|
617
652
|
overlay.el.remove();
|
|
618
|
-
|
|
619
|
-
* If there are other overlays presented, unhide the new
|
|
620
|
-
* topmost one from screen readers.
|
|
621
|
-
*/
|
|
622
|
-
if (index.doc !== undefined) {
|
|
623
|
-
(_c = getPresentedOverlay(index.doc)) === null || _c === void 0 ? void 0 : _c.removeAttribute('aria-hidden');
|
|
624
|
-
}
|
|
653
|
+
revealOverlaysToScreenReaders();
|
|
625
654
|
return true;
|
|
626
655
|
};
|
|
627
656
|
const getAppRoot = (doc) => {
|
|
@@ -817,6 +846,62 @@ const createTriggerController = () => {
|
|
|
817
846
|
removeClickListener,
|
|
818
847
|
};
|
|
819
848
|
};
|
|
849
|
+
/**
|
|
850
|
+
* Ensure that underlying overlays have aria-hidden if necessary so that screen readers
|
|
851
|
+
* cannot move focus to these elements. Note that we cannot rely on focus/focusin/focusout
|
|
852
|
+
* events here because those events do not fire when the screen readers moves to a non-focusable
|
|
853
|
+
* element such as text.
|
|
854
|
+
* Without this logic screen readers would be able to move focus outside of the top focus-trapped overlay.
|
|
855
|
+
*
|
|
856
|
+
* @param newTopMostOverlay - The overlay that is being presented. Since the overlay has not been
|
|
857
|
+
* fully presented yet at the time this function is called it will not be included in the getPresentedOverlays result.
|
|
858
|
+
*/
|
|
859
|
+
const hideOverlaysFromScreenReaders = (newTopMostOverlay) => {
|
|
860
|
+
var _a;
|
|
861
|
+
if (index.doc === undefined)
|
|
862
|
+
return;
|
|
863
|
+
const overlays = getPresentedOverlays(index.doc);
|
|
864
|
+
for (let i = overlays.length - 1; i >= 0; i--) {
|
|
865
|
+
const presentedOverlay = overlays[i];
|
|
866
|
+
const nextPresentedOverlay = (_a = overlays[i + 1]) !== null && _a !== void 0 ? _a : newTopMostOverlay;
|
|
867
|
+
/**
|
|
868
|
+
* If next overlay has aria-hidden then all remaining overlays will have it too.
|
|
869
|
+
* Or, if the next overlay is a Toast that does not have aria-hidden then current overlay
|
|
870
|
+
* should not have aria-hidden either so focus can remain in the current overlay.
|
|
871
|
+
*/
|
|
872
|
+
if (nextPresentedOverlay.hasAttribute('aria-hidden') || nextPresentedOverlay.tagName !== 'ION-TOAST') {
|
|
873
|
+
presentedOverlay.setAttribute('aria-hidden', 'true');
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
};
|
|
877
|
+
/**
|
|
878
|
+
* When dismissing an overlay we need to reveal the new top-most overlay to screen readers.
|
|
879
|
+
* If the top-most overlay is a Toast we potentially need to reveal more overlays since
|
|
880
|
+
* focus is never automatically moved to the Toast.
|
|
881
|
+
*/
|
|
882
|
+
const revealOverlaysToScreenReaders = () => {
|
|
883
|
+
if (index.doc === undefined)
|
|
884
|
+
return;
|
|
885
|
+
const overlays = getPresentedOverlays(index.doc);
|
|
886
|
+
for (let i = overlays.length - 1; i >= 0; i--) {
|
|
887
|
+
const currentOverlay = overlays[i];
|
|
888
|
+
/**
|
|
889
|
+
* If the current we are looking at is a Toast then we can remove aria-hidden.
|
|
890
|
+
* However, we potentially need to keep looking at the overlay stack because there
|
|
891
|
+
* could be more Toasts underneath. Additionally, we need to unhide the closest non-Toast
|
|
892
|
+
* overlay too so focus can move there since focus is never automatically moved to the Toast.
|
|
893
|
+
*/
|
|
894
|
+
currentOverlay.removeAttribute('aria-hidden');
|
|
895
|
+
/**
|
|
896
|
+
* If we found a non-Toast element then we can just remove aria-hidden and stop searching entirely
|
|
897
|
+
* since this overlay should always receive focus. As a result, all underlying overlays should still
|
|
898
|
+
* be hidden from screen readers.
|
|
899
|
+
*/
|
|
900
|
+
if (currentOverlay.tagName !== 'ION-TOAST') {
|
|
901
|
+
break;
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
};
|
|
820
905
|
|
|
821
906
|
exports.BACKDROP = BACKDROP;
|
|
822
907
|
exports.GESTURE = GESTURE;
|
|
@@ -828,6 +913,7 @@ exports.createTriggerController = createTriggerController;
|
|
|
828
913
|
exports.dismiss = dismiss;
|
|
829
914
|
exports.eventMethod = eventMethod;
|
|
830
915
|
exports.focusFirstDescendant = focusFirstDescendant;
|
|
916
|
+
exports.focusLastDescendant = focusLastDescendant;
|
|
831
917
|
exports.getPresentedOverlay = getPresentedOverlay;
|
|
832
918
|
exports.isCancel = isCancel;
|
|
833
919
|
exports.loadingController = loadingController;
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
const index = require('./index-
|
|
7
|
-
const index$1 = require('./index-
|
|
8
|
-
const helpers = require('./helpers-
|
|
6
|
+
const index = require('./index-2d21d526.js');
|
|
7
|
+
const index$1 = require('./index-c49cb371.js');
|
|
8
|
+
const helpers = require('./helpers-668b3d95.js');
|
|
9
9
|
require('./index-5915f9b3.js');
|
|
10
10
|
|
|
11
11
|
const startStatusTap = () => {
|
|
@@ -191,12 +191,12 @@ export class ActionSheet {
|
|
|
191
191
|
const cancelButton = allButtons.find((b) => b.role === 'cancel');
|
|
192
192
|
const buttons = allButtons.filter((b) => b.role !== 'cancel');
|
|
193
193
|
const headerID = `action-sheet-${overlayIndex}-header`;
|
|
194
|
-
return (h(Host, Object.assign({ key: '
|
|
194
|
+
return (h(Host, Object.assign({ key: 'b81b5301c2544d6474561047fa8f3cf1b27882fb', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
|
|
195
195
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
196
|
-
}, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: '
|
|
196
|
+
}, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: 'b98bfa2ed6b6c8f5648f5fe52968c7f79fd3557b', tappable: this.backdropDismiss }), h("div", { key: '15354a41ab7eb1014bb65638dad9daa7c8bf8167', tabindex: "0" }), h("div", { key: 'dff2e93f5f44b5f6488cf2a7da55563ce9a9cfdb', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { key: '25981afc3a174fb44a6d97b4118b3a39792211c8', class: "action-sheet-container" }, h("div", { key: '5a9d5174b3fe7b59e08f8022df8ead909650da53', class: "action-sheet-group", ref: (el) => (this.groupEl = el) }, header !== undefined && (h("div", { id: headerID, class: {
|
|
197
197
|
'action-sheet-title': true,
|
|
198
198
|
'action-sheet-has-sub-title': this.subHeader !== undefined,
|
|
199
|
-
} }, header, this.subHeader && h("div", { class: "action-sheet-sub-title" }, this.subHeader))), buttons.map((b) => (h("button", Object.assign({}, b.htmlAttributes, { type: "button", id: b.id, class: buttonClass(b), onClick: () => this.buttonClick(b), disabled: b.disabled }), h("span", { class: "action-sheet-button-inner" }, b.icon && h("ion-icon", { icon: b.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" }), b.text), mode === 'md' && h("ion-ripple-effect", null))))), cancelButton && (h("div", { class: "action-sheet-group action-sheet-group-cancel" }, h("button", Object.assign({}, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), h("span", { class: "action-sheet-button-inner" }, cancelButton.icon && (h("ion-icon", { icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && h("ion-ripple-effect", null)))))), h("div", { key: '
|
|
199
|
+
} }, header, this.subHeader && h("div", { class: "action-sheet-sub-title" }, this.subHeader))), buttons.map((b) => (h("button", Object.assign({}, b.htmlAttributes, { type: "button", id: b.id, class: buttonClass(b), onClick: () => this.buttonClick(b), disabled: b.disabled }), h("span", { class: "action-sheet-button-inner" }, b.icon && h("ion-icon", { icon: b.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" }), b.text), mode === 'md' && h("ion-ripple-effect", null))))), cancelButton && (h("div", { class: "action-sheet-group action-sheet-group-cancel" }, h("button", Object.assign({}, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), h("span", { class: "action-sheet-button-inner" }, cancelButton.icon && (h("ion-icon", { icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && h("ion-ripple-effect", null)))))), h("div", { key: 'b1891248a8269c9077f48cd4af210072daf7c119', tabindex: "0" })));
|
|
200
200
|
}
|
|
201
201
|
static get is() { return "ion-action-sheet"; }
|
|
202
202
|
static get encapsulation() { return "scoped"; }
|
|
@@ -391,9 +391,9 @@ export class Alert {
|
|
|
391
391
|
* If neither is defined, don't set aria-labelledby.
|
|
392
392
|
*/
|
|
393
393
|
const ariaLabelledBy = header ? hdrId : subHeader ? subHdrId : null;
|
|
394
|
-
return (h(Host, Object.assign({ key: '
|
|
394
|
+
return (h(Host, Object.assign({ key: 'fe991967332781c792690760d63857f28e20e928', role: role, "aria-modal": "true", "aria-labelledby": ariaLabelledBy, "aria-describedby": message !== undefined ? msgId : null, tabindex: "-1" }, htmlAttributes, { style: {
|
|
395
395
|
zIndex: `${20000 + overlayIndex}`,
|
|
396
|
-
}, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: '
|
|
396
|
+
}, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: 'd2cf69281264c779cd583acc6466b67bbeffff77', tappable: this.backdropDismiss }), h("div", { key: 'cf1613444b085bf41326703a8ee39a0e7da4fbbd', tabindex: "0" }), h("div", { key: 'da4106c5da97987844b9404d968e895d3399d09b', class: "alert-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { key: '0880f30325c25f08a27f5feaf44c497c64318819', class: "alert-head" }, header && (h("h2", { id: hdrId, class: "alert-title" }, header)), subHeader && (h("h2", { id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), h("div", { key: '20c5e7f555e64750e5043aa62a511f2b56cc9e42', tabindex: "0" })));
|
|
397
397
|
}
|
|
398
398
|
static get is() { return "ion-alert"; }
|
|
399
399
|
static get encapsulation() { return "scoped"; }
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { Build, Host, h } from "@stencil/core";
|
|
5
|
-
import {
|
|
5
|
+
import { shouldUseCloseWatcher } from "../../utils/hardware-back-button";
|
|
6
6
|
import { printIonWarning } from "../../utils/logging/index";
|
|
7
7
|
import { isPlatform } from "../../utils/platform";
|
|
8
8
|
import { config } from "../../global/config";
|
|
@@ -27,7 +27,7 @@ export class App {
|
|
|
27
27
|
import('../../utils/input-shims/input-shims').then((module) => module.startInputShims(config, platform));
|
|
28
28
|
}
|
|
29
29
|
const hardwareBackButtonModule = await import('../../utils/hardware-back-button');
|
|
30
|
-
const supportsHardwareBackButtonEvents = isHybrid ||
|
|
30
|
+
const supportsHardwareBackButtonEvents = isHybrid || shouldUseCloseWatcher();
|
|
31
31
|
if (config.getBoolean('hardwareBackButton', supportsHardwareBackButtonEvents)) {
|
|
32
32
|
hardwareBackButtonModule.startHardwareBackButton();
|
|
33
33
|
}
|
|
@@ -36,7 +36,7 @@ export class App {
|
|
|
36
36
|
* If an app sets hardwareBackButton: false and experimentalCloseWatcher: true
|
|
37
37
|
* then the close watcher will not be used.
|
|
38
38
|
*/
|
|
39
|
-
if (
|
|
39
|
+
if (shouldUseCloseWatcher()) {
|
|
40
40
|
printIonWarning('experimentalCloseWatcher was set to `true`, but hardwareBackButton was set to `false`. Both config options must be `true` for the Close Watcher API to be used.');
|
|
41
41
|
}
|
|
42
42
|
hardwareBackButtonModule.blockHardwareBackButton();
|
|
@@ -65,7 +65,7 @@ export class App {
|
|
|
65
65
|
}
|
|
66
66
|
render() {
|
|
67
67
|
const mode = getIonMode(this);
|
|
68
|
-
return (h(Host, { key: '
|
|
68
|
+
return (h(Host, { key: '02e6722398cfde7275ab9abdcce0f53a98f6b10f', class: {
|
|
69
69
|
[mode]: true,
|
|
70
70
|
'ion-page': true,
|
|
71
71
|
'force-statusbar-padding': config.getBoolean('_forceStatusbarPadding'),
|
|
@@ -5,7 +5,7 @@ import { Host, h } from "@stencil/core";
|
|
|
5
5
|
import { getIonMode } from "../../global/ionic-global";
|
|
6
6
|
export class Avatar {
|
|
7
7
|
render() {
|
|
8
|
-
return (h(Host, { key: '
|
|
8
|
+
return (h(Host, { key: 'b40a506a0beeaea226fd92e420655a3d840fafa6', class: getIonMode(this) }, h("slot", { key: '185c90b5d7f790ca8e39907c4da6fa7aa532a837' })));
|
|
9
9
|
}
|
|
10
10
|
static get is() { return "ion-avatar"; }
|
|
11
11
|
static get encapsulation() { return "shadow"; }
|
|
@@ -72,7 +72,7 @@ export class BackButton {
|
|
|
72
72
|
const showBackButton = defaultHref !== undefined;
|
|
73
73
|
const mode = getIonMode(this);
|
|
74
74
|
const ariaLabel = inheritedAttributes['aria-label'] || backButtonText || 'back';
|
|
75
|
-
return (h(Host, { key: '
|
|
75
|
+
return (h(Host, { key: 'e233c0ccdeefd85b4e7170ca28beb2d528706db5', onClick: this.onClick, class: createColorClasses(color, {
|
|
76
76
|
[mode]: true,
|
|
77
77
|
button: true, // ion-buttons target .button
|
|
78
78
|
'back-button-disabled': disabled,
|
|
@@ -82,7 +82,7 @@ export class BackButton {
|
|
|
82
82
|
'ion-activatable': true,
|
|
83
83
|
'ion-focusable': true,
|
|
84
84
|
'show-back-button': showBackButton,
|
|
85
|
-
}) }, h("button", { key: '
|
|
85
|
+
}) }, h("button", { key: 'a48e4ca9c1afefacc60766f910ea8349cdd3cce6', type: type, disabled: disabled, class: "button-native", part: "native", "aria-label": ariaLabel }, h("span", { key: '60bcc5fa226861b03b83a2b6fbad51284c295d4b', class: "button-inner" }, backButtonIcon && (h("ion-icon", { part: "icon", icon: backButtonIcon, "aria-hidden": "true", lazy: false, "flip-rtl": icon === undefined })), backButtonText && (h("span", { part: "text", "aria-hidden": "true", class: "button-text" }, backButtonText))), mode === 'md' && h("ion-ripple-effect", { type: this.rippleType }))));
|
|
86
86
|
}
|
|
87
87
|
static get is() { return "ion-back-button"; }
|
|
88
88
|
static get encapsulation() { return "shadow"; }
|
|
@@ -23,7 +23,7 @@ export class Backdrop {
|
|
|
23
23
|
}
|
|
24
24
|
render() {
|
|
25
25
|
const mode = getIonMode(this);
|
|
26
|
-
return (h(Host, { key: '
|
|
26
|
+
return (h(Host, { key: 'edc9b82940adbb5fa740107bd2d12d02955606fa', tabindex: "-1", "aria-hidden": "true", class: {
|
|
27
27
|
[mode]: true,
|
|
28
28
|
'backdrop-hide': !this.visible,
|
|
29
29
|
'backdrop-no-tappable': !this.tappable,
|
|
@@ -13,9 +13,9 @@ export class Badge {
|
|
|
13
13
|
}
|
|
14
14
|
render() {
|
|
15
15
|
const mode = getIonMode(this);
|
|
16
|
-
return (h(Host, { key: '
|
|
16
|
+
return (h(Host, { key: 'cd1425d016a570b34dd42044fe79b42e6c984e86', class: createColorClasses(this.color, {
|
|
17
17
|
[mode]: true,
|
|
18
|
-
}) }, h("slot", { key: '
|
|
18
|
+
}) }, h("slot", { key: '29d2258c9e242f5fc1d85e2df5288edcfb038c8b' })));
|
|
19
19
|
}
|
|
20
20
|
static get is() { return "ion-badge"; }
|
|
21
21
|
static get encapsulation() { return "shadow"; }
|
|
@@ -64,7 +64,7 @@ export class Breadcrumb {
|
|
|
64
64
|
// to show the separator as long as it isn't also the last breadcrumb
|
|
65
65
|
// otherwise if not collapsed use the value in separator
|
|
66
66
|
const showSeparator = last ? false : collapsed ? (showCollapsedIndicator && !last ? true : false) : separator;
|
|
67
|
-
return (h(Host, { key: '
|
|
67
|
+
return (h(Host, { key: '7f6db640a81d6c44e22f5d7980b7e3c111c695f0', onClick: (ev) => openURL(href, ev, routerDirection, routerAnimation), "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
|
|
68
68
|
[mode]: true,
|
|
69
69
|
'breadcrumb-active': active,
|
|
70
70
|
'breadcrumb-collapsed': collapsed,
|
|
@@ -74,7 +74,7 @@ export class Breadcrumb {
|
|
|
74
74
|
'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
|
|
75
75
|
'ion-activatable': clickable,
|
|
76
76
|
'ion-focusable': clickable,
|
|
77
|
-
}) }, h(TagType, Object.assign({ key: '
|
|
77
|
+
}) }, h(TagType, Object.assign({ key: '897cbb8e7632ce86de24e71916392a6fecf40d6b' }, attrs, { class: "breadcrumb-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur }, inheritedAttributes), h("slot", { key: '8b420722f1cacc771903abb4bf86d7375cb60698', name: "start" }), h("slot", { key: '6945b283fbac7ca799de48938379c6f7b1926735' }), h("slot", { key: 'f27519c372bf6ab37d766ae945e3600baa3d2831', name: "end" })), showCollapsedIndicator && (h("button", { part: "collapsed-indicator", "aria-label": "Show more breadcrumbs", onClick: () => this.collapsedIndicatorClick(), ref: (collapsedEl) => (this.collapsedRef = collapsedEl), class: {
|
|
78
78
|
'breadcrumbs-collapsed-indicator': true,
|
|
79
79
|
} }, h("ion-icon", { "aria-hidden": "true", icon: ellipsisHorizontal, lazy: false }))), showSeparator && (
|
|
80
80
|
/**
|
|
@@ -105,12 +105,12 @@ export class Breadcrumbs {
|
|
|
105
105
|
render() {
|
|
106
106
|
const { color, collapsed } = this;
|
|
107
107
|
const mode = getIonMode(this);
|
|
108
|
-
return (h(Host, { key: '
|
|
108
|
+
return (h(Host, { key: '9cef93113d7c0d0bcab67d7790d8df915236dd59', class: createColorClasses(color, {
|
|
109
109
|
[mode]: true,
|
|
110
110
|
'in-toolbar': hostContext('ion-toolbar', this.el),
|
|
111
111
|
'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
|
|
112
112
|
'breadcrumbs-collapsed': collapsed,
|
|
113
|
-
}) }, h("slot", { key: '
|
|
113
|
+
}) }, h("slot", { key: '6e6b0e0a3297de16bf08ec107bbce4bb5f00b28c', onSlotchange: this.slotChanged })));
|
|
114
114
|
}
|
|
115
115
|
static get is() { return "ion-breadcrumbs"; }
|
|
116
116
|
static get encapsulation() { return "shadow"; }
|
|
@@ -199,7 +199,7 @@ export class Button {
|
|
|
199
199
|
{
|
|
200
200
|
type !== 'button' && this.renderHiddenButton();
|
|
201
201
|
}
|
|
202
|
-
return (h(Host, { key: '
|
|
202
|
+
return (h(Host, { key: 'cb5af107c877f0c1926045acfd4f6922f7dbcb8d', onClick: this.handleClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
|
|
203
203
|
[mode]: true,
|
|
204
204
|
[buttonType]: true,
|
|
205
205
|
[`${buttonType}-${expand}`]: expand !== undefined,
|
|
@@ -214,7 +214,7 @@ export class Button {
|
|
|
214
214
|
'button-disabled': disabled,
|
|
215
215
|
'ion-activatable': true,
|
|
216
216
|
'ion-focusable': true,
|
|
217
|
-
}) }, h(TagType, Object.assign({ key: '
|
|
217
|
+
}) }, h(TagType, Object.assign({ key: 'bc4c5e6a17fa90e172e56bd481ba24c69419dd1a' }, attrs, { class: "button-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur }, inheritedAttributes), h("span", { key: 'f1eac679bcdf2b40177f920025a49705f726bf0c', class: "button-inner" }, h("slot", { key: '19aa897289923c8e7d16a354f9acac312f0641ea', name: "icon-only" }), h("slot", { key: '0a321ca359f631a2c8708566b3f1b936fe9a4d00', name: "start" }), h("slot", { key: '9ec1b7197ec1b4d858338f45433f6bfa46b81a3d' }), h("slot", { key: 'e632fd3b918ec94e119a5e766371886072292d75', name: "end" })), mode === 'md' && h("ion-ripple-effect", { type: this.rippleType }))));
|
|
218
218
|
}
|
|
219
219
|
static get is() { return "ion-button"; }
|
|
220
220
|
static get encapsulation() { return "shadow"; }
|
|
@@ -9,10 +9,10 @@ export class Buttons {
|
|
|
9
9
|
}
|
|
10
10
|
render() {
|
|
11
11
|
const mode = getIonMode(this);
|
|
12
|
-
return (h(Host, { key: '
|
|
12
|
+
return (h(Host, { key: '3b78d2f2ebdc2a1720edb570270dd0228eef6ae5', class: {
|
|
13
13
|
[mode]: true,
|
|
14
14
|
['buttons-collapse']: this.collapse,
|
|
15
|
-
} }));
|
|
15
|
+
} }, h("slot", { key: 'a48e728d5d5ecb29965c3a2c9ffa9516b5da5309' })));
|
|
16
16
|
}
|
|
17
17
|
static get is() { return "ion-buttons"; }
|
|
18
18
|
static get encapsulation() { return "scoped"; }
|
|
@@ -49,7 +49,7 @@ export class Card {
|
|
|
49
49
|
}
|
|
50
50
|
render() {
|
|
51
51
|
const mode = getIonMode(this);
|
|
52
|
-
return (h(Host, { key: '
|
|
52
|
+
return (h(Host, { key: '20989b44d99554e110bd2b41dca7f989f038dc5b', class: createColorClasses(this.color, {
|
|
53
53
|
[mode]: true,
|
|
54
54
|
'card-disabled': this.disabled,
|
|
55
55
|
'ion-activatable': this.isClickable(),
|
|
@@ -9,7 +9,7 @@ import { getIonMode } from "../../global/ionic-global";
|
|
|
9
9
|
export class CardContent {
|
|
10
10
|
render() {
|
|
11
11
|
const mode = getIonMode(this);
|
|
12
|
-
return (h(Host, { key: '
|
|
12
|
+
return (h(Host, { key: 'c2146c75bb2e20dd975b144dd7a99c122d420aab', class: {
|
|
13
13
|
[mode]: true,
|
|
14
14
|
// Used internally for styling
|
|
15
15
|
[`card-content-${mode}`]: true,
|
|
@@ -14,11 +14,11 @@ export class CardHeader {
|
|
|
14
14
|
}
|
|
15
15
|
render() {
|
|
16
16
|
const mode = getIonMode(this);
|
|
17
|
-
return (h(Host, { key: '
|
|
17
|
+
return (h(Host, { key: '05a406ae897dd0d1564bb9d0e213c5c2c21445fa', class: createColorClasses(this.color, {
|
|
18
18
|
'card-header-translucent': this.translucent,
|
|
19
19
|
'ion-inherit-color': true,
|
|
20
20
|
[mode]: true,
|
|
21
|
-
}) }, h("slot", { key: '
|
|
21
|
+
}) }, h("slot", { key: '505a74bfb528182bad69d519b848ac2060f4552f' })));
|
|
22
22
|
}
|
|
23
23
|
static get is() { return "ion-card-header"; }
|
|
24
24
|
static get encapsulation() { return "shadow"; }
|
|
@@ -13,10 +13,10 @@ export class CardSubtitle {
|
|
|
13
13
|
}
|
|
14
14
|
render() {
|
|
15
15
|
const mode = getIonMode(this);
|
|
16
|
-
return (h(Host, { key: '
|
|
16
|
+
return (h(Host, { key: '4494e715bdff695b17df995bca3c9924cc9dec6c', role: "heading", "aria-level": "3", class: createColorClasses(this.color, {
|
|
17
17
|
'ion-inherit-color': true,
|
|
18
18
|
[mode]: true,
|
|
19
|
-
}) }, h("slot", { key: '
|
|
19
|
+
}) }, h("slot", { key: '717e7f2b865b7bb6ae570922eb740c4ae731d85d' })));
|
|
20
20
|
}
|
|
21
21
|
static get is() { return "ion-card-subtitle"; }
|
|
22
22
|
static get encapsulation() { return "shadow"; }
|
|
@@ -13,10 +13,10 @@ export class CardTitle {
|
|
|
13
13
|
}
|
|
14
14
|
render() {
|
|
15
15
|
const mode = getIonMode(this);
|
|
16
|
-
return (h(Host, { key: '
|
|
16
|
+
return (h(Host, { key: '1f26cd9bd47f87540dfaff6ac8150a80bcf14475', role: "heading", "aria-level": "2", class: createColorClasses(this.color, {
|
|
17
17
|
'ion-inherit-color': true,
|
|
18
18
|
[mode]: true,
|
|
19
|
-
}) }, h("slot", { key: '
|
|
19
|
+
}) }, h("slot", { key: 'b2d51db6dc9284e17cb900af557b36ef866cdc3c' })));
|
|
20
20
|
}
|
|
21
21
|
static get is() { return "ion-card-title"; }
|
|
22
22
|
static get encapsulation() { return "shadow"; }
|
|
@@ -72,7 +72,7 @@ export class Checkbox {
|
|
|
72
72
|
const mode = getIonMode(this);
|
|
73
73
|
const path = getSVGPath(mode, indeterminate);
|
|
74
74
|
renderHiddenInput(true, el, name, checked ? value : '', disabled);
|
|
75
|
-
return (h(Host, { key: '
|
|
75
|
+
return (h(Host, { key: '93550068abf4a5103a5d7f06e88e8d004382c203', "aria-checked": indeterminate ? 'mixed' : `${checked}`, class: createColorClasses(color, {
|
|
76
76
|
[mode]: true,
|
|
77
77
|
'in-item': hostContext('ion-item', el),
|
|
78
78
|
'checkbox-checked': checked,
|
|
@@ -82,10 +82,10 @@ export class Checkbox {
|
|
|
82
82
|
[`checkbox-justify-${justify}`]: true,
|
|
83
83
|
[`checkbox-alignment-${alignment}`]: true,
|
|
84
84
|
[`checkbox-label-placement-${labelPlacement}`]: true,
|
|
85
|
-
}), onClick: this.onClick }, h("label", { key: '
|
|
85
|
+
}), onClick: this.onClick }, h("label", { key: '43c0a59f152c8b836fcfcefd29db16962568b1e1', class: "checkbox-wrapper" }, h("input", Object.assign({ key: '7dc4216a96c001216a99349290d7615032952aee', type: "checkbox", checked: checked ? true : undefined, disabled: disabled, id: inputId, onChange: this.toggleChecked, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, inheritedAttributes)), h("div", { key: 'a7454e4c99eb6ea3fe4db171c0071b803949c4d0', class: {
|
|
86
86
|
'label-text-wrapper': true,
|
|
87
87
|
'label-text-wrapper-hidden': el.textContent === '',
|
|
88
|
-
}, part: "label" }, h("slot", { key: '
|
|
88
|
+
}, part: "label" }, h("slot", { key: '41741533b49c0281d8ff496c7b5eeccd944d2b2a' })), h("div", { key: 'e3b43df785386c2cd87fb3a38777c34a7d9b32e0', class: "native-wrapper" }, h("svg", { key: 'd3cfb07ec4c7b3e45b9cf5a049fcc841fdb4e2c3', class: "checkbox-icon", viewBox: "0 0 24 24", part: "container" }, path)))));
|
|
89
89
|
}
|
|
90
90
|
getSVGPath(mode, indeterminate) {
|
|
91
91
|
let path = indeterminate ? (h("path", { d: "M6 12L18 12", part: "mark" })) : (h("path", { d: "M5.9,12.5l3.8,3.8l8.8-8.8", part: "mark" }));
|
|
@@ -32,3 +32,15 @@ describe('ion-checkbox: disabled', () => {
|
|
|
32
32
|
expect(checkbox.checked).toBe(false);
|
|
33
33
|
});
|
|
34
34
|
});
|
|
35
|
+
describe('ion-checkbox: indeterminate', () => {
|
|
36
|
+
it('should have a mixed value for aria-checked', async () => {
|
|
37
|
+
const page = await newSpecPage({
|
|
38
|
+
components: [Checkbox],
|
|
39
|
+
html: `
|
|
40
|
+
<ion-checkbox indeterminate="true">Checkbox</ion-checkbox>
|
|
41
|
+
`,
|
|
42
|
+
});
|
|
43
|
+
const checkbox = page.body.querySelector('ion-checkbox');
|
|
44
|
+
expect(checkbox.getAttribute('aria-checked')).toBe('mixed');
|
|
45
|
+
});
|
|
46
|
+
});
|