voyager-ionic-core 7.7.2 → 7.8.6
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 +4 -4
- package/components/buttons.js +1 -1
- package/components/checkbox.js +1 -1
- package/components/data.js +23 -38
- package/components/hardware-back-button.js +3 -3
- package/components/helpers.js +2 -2
- package/components/input-shims.js +5 -5
- 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 +4 -4
- 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 +12 -11
- package/components/ion-datetime.js +75 -12
- 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 +3 -3
- 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 +8 -0
- package/components/ion-item-divider.js +2 -2
- 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 +3 -3
- package/components/ion-modal.js +81 -25
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-picker.js +2 -2
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-range.js +126 -21
- 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 +35 -6
- 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 +3 -3
- 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-thumbnail.js +1 -1
- package/components/ion-title.js +2 -2
- package/components/ion-toast.js +2 -2
- package/components/ion-toolbar.js +2 -2
- package/components/item.js +1 -1
- package/components/label.js +3 -3
- package/components/list-header.js +2 -2
- package/components/list.js +1 -1
- package/components/note.js +2 -2
- package/components/overlays.js +127 -39
- package/components/picker-column-internal.js +8 -4
- package/components/picker-column.js +2 -2
- package/components/picker-internal.js +2 -2
- package/components/popover.js +4 -4
- package/components/radio-group.js +1 -1
- package/components/ripple-effect.js +1 -1
- package/components/select-popover.js +1 -1
- package/components/spinner.js +1 -1
- package/css/core.css +1 -561
- package/css/core.css.map +1 -1
- package/css/display.css +1 -131
- package/css/display.css.map +1 -1
- package/css/flex-utils.css +1 -81
- package/css/flex-utils.css.map +1 -1
- package/css/float-elements.css +1 -293
- package/css/float-elements.css.map +1 -1
- package/css/global.bundle.css +1 -457
- package/css/global.bundle.css.map +1 -1
- package/css/ionic-swiper.css +1 -127
- package/css/ionic-swiper.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/css/normalize.css +1 -150
- package/css/normalize.css.map +1 -1
- package/css/padding.css +1 -202
- package/css/padding.css.map +1 -1
- package/css/structure.css +1 -152
- package/css/structure.css.map +1 -1
- package/css/text-alignment.css +1 -243
- package/css/text-alignment.css.map +1 -1
- package/css/text-transformation.css +1 -158
- package/css/text-transformation.css.map +1 -1
- package/css/typography.css +1 -157
- package/css/typography.css.map +1 -1
- package/css/utils.bundle.css +1 -1100
- package/css/utils.bundle.css.map +1 -1
- package/dist/cjs/{animation-fdab9de5.js → animation-c2840aea.js} +1 -1
- package/dist/cjs/{app-globals-92ad1b3d.js → app-globals-c5eb104c.js} +1 -1
- package/dist/cjs/{button-active-2d6520ec.js → button-active-181d142e.js} +1 -1
- package/dist/cjs/{data-a5109f09.js → data-4487a815.js} +22 -39
- package/dist/cjs/{form-controller-7b90d7b7.js → form-controller-c83330c0.js} +1 -1
- package/dist/cjs/{framework-delegate-a3e6d060.js → framework-delegate-e0e13baa.js} +1 -1
- package/dist/cjs/{hardware-back-button-2696acaf.js → hardware-back-button-adba3ac7.js} +5 -5
- package/dist/cjs/{helpers-2e1028fa.js → helpers-da4c0ed1.js} +2 -2
- package/dist/cjs/{index-c3580a90.js → index-1f7c54f8.js} +4 -4
- package/dist/cjs/{index-0ffe376d.js → index-22617dd6.js} +51 -7
- package/dist/cjs/{index-a43f7a0f.js → index-5c38afe7.js} +4 -4
- package/dist/cjs/{index-10da82ce.js → index-62290fec.js} +1 -1
- package/dist/cjs/{index-53d162b2.js → index-bef98850.js} +1 -1
- package/dist/cjs/index.cjs.js +11 -11
- package/dist/cjs/{input-shims-6f804705.js → input-shims-05ac9905.js} +7 -7
- package/dist/cjs/{input.utils-d693d18a.js → input.utils-d7dca90f.js} +1 -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 +9 -9
- package/dist/cjs/ion-button_2.cjs.entry.js +7 -7
- package/dist/cjs/ion-card_5.cjs.entry.js +11 -11
- package/dist/cjs/ion-checkbox.cjs.entry.js +5 -5
- 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 +15 -14
- package/dist/cjs/ion-datetime_3.cjs.entry.js +83 -23
- 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 +14 -6
- package/dist/cjs/ion-item-option_3.cjs.entry.js +8 -8
- package/dist/cjs/ion-item_8.cjs.entry.js +17 -17
- package/dist/cjs/ion-loading.cjs.entry.js +9 -9
- package/dist/cjs/ion-menu_3.cjs.entry.js +14 -14
- package/dist/cjs/ion-modal.cjs.entry.js +90 -34
- package/dist/cjs/ion-nav_2.cjs.entry.js +8 -8
- package/dist/cjs/ion-picker-column-internal.cjs.entry.js +11 -7
- package/dist/cjs/ion-picker-internal.cjs.entry.js +4 -4
- package/dist/cjs/ion-popover.cjs.entry.js +12 -12
- package/dist/cjs/ion-progress-bar.cjs.entry.js +4 -4
- package/dist/cjs/ion-radio_2.cjs.entry.js +5 -5
- package/dist/cjs/ion-range.cjs.entry.js +131 -26
- 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 +32 -8
- package/dist/cjs/ion-segment_2.cjs.entry.js +8 -8
- package/dist/cjs/ion-select_3.cjs.entry.js +12 -12
- 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 +6 -6
- package/dist/cjs/ion-toast.cjs.entry.js +9 -9
- package/dist/cjs/ion-toggle.cjs.entry.js +4 -4
- package/dist/cjs/{ionic-global-59a10130.js → ionic-global-c5503e93.js} +1 -1
- package/dist/cjs/ionic.cjs.js +5 -5
- package/dist/cjs/{ios.transition-c3b11cc3.js → ios.transition-30830fc4.js} +4 -4
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-82a8c649.js → md.transition-7f581866.js} +4 -4
- package/dist/cjs/{notch-controller-db0127c4.js → notch-controller-bfbcbb7a.js} +1 -1
- package/dist/cjs/{overlays-fb7ca451.js → overlays-129dfc13.js} +129 -41
- package/dist/cjs/{status-tap-692f6d32.js → status-tap-03d82840.js} +3 -3
- package/dist/cjs/{swipe-back-7a848bb8.js → swipe-back-dcd0d4a9.js} +1 -1
- package/dist/collection/collection-manifest.json +2 -2
- package/dist/collection/components/action-sheet/action-sheet.js +3 -3
- package/dist/collection/components/alert/alert.js +2 -2
- package/dist/collection/components/alert/test/a11y/alert.e2e.js +4 -0
- 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 +4 -4
- package/dist/collection/components/breadcrumbs/breadcrumbs.js +2 -2
- package/dist/collection/components/button/button.ios.css +5 -5
- package/dist/collection/components/button/button.js +2 -2
- package/dist/collection/components/button/button.md.css +4 -5
- package/dist/collection/components/buttons/buttons.js +1 -1
- 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 +1 -1
- 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 +56 -12
- 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 +12 -11
- 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.ios.css +5 -2
- package/dist/collection/components/header/header.js +2 -2
- package/dist/collection/components/header/test/basic/header.e2e.js +77 -0
- 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.js +8 -0
- package/dist/collection/components/item/item.js +1 -1
- package/dist/collection/components/item/test/buttons/item.e2e.js +20 -4
- package/dist/collection/components/item-divider/item-divider.js +2 -2
- 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 -4
- package/dist/collection/components/label/label.js +1 -1
- package/dist/collection/components/label/label.md.css +0 -4
- package/dist/collection/components/label/test/item/item.e2e.js +24 -0
- 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 +3 -3
- 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/gestures/sheet.js +45 -20
- package/dist/collection/components/modal/modal.js +38 -6
- 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 +2 -2
- package/dist/collection/components/picker-column-internal/picker-column-internal.js +8 -4
- package/dist/collection/components/picker-internal/picker-internal.js +2 -2
- package/dist/collection/components/popover/popover.ios.css +0 -1
- package/dist/collection/components/popover/popover.js +2 -2
- package/dist/collection/components/popover/popover.md.css +0 -1
- package/dist/collection/components/popover/test/basic/popover.e2e.js +76 -0
- package/dist/collection/components/progress-bar/progress-bar.js +1 -1
- package/dist/collection/components/radio-group/radio-group.js +1 -1
- package/dist/collection/components/range/range.js +126 -21
- 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 +86 -6
- 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.js +3 -3
- 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/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 +1 -1
- package/dist/collection/components/toolbar/test/basic/toolbar.e2e.js +133 -5
- package/dist/collection/components/toolbar/toolbar.js +2 -2
- package/dist/collection/utils/hardware-back-button.js +2 -2
- package/dist/collection/utils/helpers.js +1 -1
- package/dist/collection/utils/input-shims/hacks/scroll-assist.js +5 -5
- package/dist/collection/utils/overlays.js +127 -39
- package/dist/collection/utils/test/overlays/overlays.e2e.js +89 -0
- package/dist/collection/utils/test/overlays/overlays.spec.js +53 -0
- package/dist/docs.json +117 -4
- package/dist/esm/{animation-60dbdd13.js → animation-6a0c5338.js} +1 -1
- package/dist/esm/{app-globals-5cf6195b.js → app-globals-318eef52.js} +1 -1
- package/dist/esm/{button-active-47ac8092.js → button-active-414be235.js} +1 -1
- package/dist/esm/{data-0f3ab200.js → data-bb424ba8.js} +23 -38
- package/dist/esm/{form-controller-014aa89f.js → form-controller-21dd62b1.js} +1 -1
- package/dist/esm/{framework-delegate-fed7fe7c.js → framework-delegate-ed4ba327.js} +1 -1
- package/dist/esm/{hardware-back-button-b410a047.js → hardware-back-button-6107a37c.js} +5 -5
- package/dist/esm/{helpers-c0b9ca37.js → helpers-be245865.js} +2 -2
- package/dist/esm/{index-d64f34ea.js → index-020f5464.js} +1 -1
- package/dist/esm/{index-47b2066d.js → index-6e05b96e.js} +4 -4
- package/dist/esm/{index-4c30cddd.js → index-a1a47f01.js} +51 -7
- package/dist/esm/{index-eb12ef92.js → index-f3946ac1.js} +1 -1
- package/dist/esm/{index-0b4beb69.js → index-fae1515c.js} +4 -4
- package/dist/esm/index.js +11 -11
- package/dist/esm/{input-shims-b90ca55f.js → input-shims-a52daa3a.js} +7 -7
- package/dist/esm/{input.utils-6e9b0046.js → input.utils-a445f677.js} +1 -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 +9 -9
- package/dist/esm/ion-button_2.entry.js +7 -7
- package/dist/esm/ion-card_5.entry.js +11 -11
- package/dist/esm/ion-checkbox.entry.js +5 -5
- 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 +15 -14
- package/dist/esm/ion-datetime_3.entry.js +83 -23
- 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 +14 -6
- package/dist/esm/ion-item-option_3.entry.js +8 -8
- package/dist/esm/ion-item_8.entry.js +17 -17
- package/dist/esm/ion-loading.entry.js +9 -9
- package/dist/esm/ion-menu_3.entry.js +14 -14
- package/dist/esm/ion-modal.entry.js +90 -34
- package/dist/esm/ion-nav_2.entry.js +8 -8
- package/dist/esm/ion-picker-column-internal.entry.js +11 -7
- package/dist/esm/ion-picker-internal.entry.js +4 -4
- package/dist/esm/ion-popover.entry.js +12 -12
- package/dist/esm/ion-progress-bar.entry.js +4 -4
- package/dist/esm/ion-radio_2.entry.js +5 -5
- package/dist/esm/ion-range.entry.js +131 -26
- 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 +32 -8
- package/dist/esm/ion-segment_2.entry.js +8 -8
- package/dist/esm/ion-select_3.entry.js +12 -12
- 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 +6 -6
- package/dist/esm/ion-toast.entry.js +9 -9
- package/dist/esm/ion-toggle.entry.js +4 -4
- package/dist/esm/{ionic-global-ad9a1810.js → ionic-global-94f25d1b.js} +1 -1
- package/dist/esm/ionic.js +6 -6
- package/dist/esm/{ios.transition-b76c7020.js → ios.transition-a50a9a55.js} +4 -4
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-564937a7.js → md.transition-0da92976.js} +4 -4
- package/dist/esm/{notch-controller-15d281a4.js → notch-controller-6bd3e0f9.js} +1 -1
- package/dist/esm/{overlays-04a9a43f.js → overlays-b874c3c3.js} +129 -41
- package/dist/esm/{status-tap-5a95077d.js → status-tap-dfea3607.js} +3 -3
- package/dist/esm/{swipe-back-fa0ec5cd.js → swipe-back-c6d0e5d9.js} +1 -1
- package/dist/esm-es5/{animation-60dbdd13.js → animation-6a0c5338.js} +1 -1
- package/dist/esm-es5/app-globals-318eef52.js +4 -0
- package/dist/esm-es5/{button-active-47ac8092.js → button-active-414be235.js} +1 -1
- package/dist/esm-es5/data-bb424ba8.js +4 -0
- package/dist/esm-es5/{form-controller-014aa89f.js → form-controller-21dd62b1.js} +1 -1
- package/dist/esm-es5/framework-delegate-ed4ba327.js +4 -0
- package/dist/esm-es5/hardware-back-button-6107a37c.js +4 -0
- package/dist/esm-es5/helpers-be245865.js +4 -0
- package/dist/esm-es5/index-020f5464.js +4 -0
- package/dist/esm-es5/index-6e05b96e.js +4 -0
- package/dist/esm-es5/index-a1a47f01.js +5 -0
- package/dist/esm-es5/{index-eb12ef92.js → index-f3946ac1.js} +1 -1
- package/dist/esm-es5/{index-0b4beb69.js → index-fae1515c.js} +1 -1
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/input-shims-a52daa3a.js +4 -0
- package/dist/esm-es5/{input.utils-6e9b0046.js → input.utils-a445f677.js} +1 -1
- package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
- package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
- package/dist/esm-es5/ion-alert.entry.js +1 -1
- package/dist/esm-es5/ion-app_8.entry.js +1 -1
- package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
- package/dist/esm-es5/ion-back-button.entry.js +1 -1
- package/dist/esm-es5/ion-backdrop.entry.js +1 -1
- package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
- package/dist/esm-es5/ion-button_2.entry.js +1 -1
- package/dist/esm-es5/ion-card_5.entry.js +1 -1
- package/dist/esm-es5/ion-checkbox.entry.js +1 -1
- package/dist/esm-es5/ion-chip.entry.js +1 -1
- package/dist/esm-es5/ion-col_3.entry.js +1 -1
- package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
- package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
- package/dist/esm-es5/ion-fab_3.entry.js +1 -1
- package/dist/esm-es5/ion-img.entry.js +1 -1
- package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
- package/dist/esm-es5/ion-input.entry.js +1 -1
- package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
- package/dist/esm-es5/ion-item_8.entry.js +1 -1
- package/dist/esm-es5/ion-loading.entry.js +1 -1
- package/dist/esm-es5/ion-menu_3.entry.js +1 -1
- package/dist/esm-es5/ion-modal.entry.js +1 -1
- package/dist/esm-es5/ion-nav_2.entry.js +1 -1
- package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
- package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
- package/dist/esm-es5/ion-popover.entry.js +1 -1
- package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
- package/dist/esm-es5/ion-radio_2.entry.js +1 -1
- package/dist/esm-es5/ion-range.entry.js +1 -1
- package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
- package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
- package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
- package/dist/esm-es5/ion-route_4.entry.js +1 -1
- package/dist/esm-es5/ion-searchbar.entry.js +1 -1
- package/dist/esm-es5/ion-segment_2.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.entry.js +1 -1
- package/dist/esm-es5/ion-spinner.entry.js +1 -1
- package/dist/esm-es5/ion-split-pane.entry.js +1 -1
- package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
- package/dist/esm-es5/ion-tab_2.entry.js +1 -1
- package/dist/esm-es5/ion-text.entry.js +1 -1
- package/dist/esm-es5/ion-textarea.entry.js +1 -1
- package/dist/esm-es5/ion-toast.entry.js +1 -1
- package/dist/esm-es5/ion-toggle.entry.js +1 -1
- package/dist/esm-es5/{ionic-global-ad9a1810.js → ionic-global-94f25d1b.js} +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/{ios.transition-b76c7020.js → ios.transition-a50a9a55.js} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/md.transition-0da92976.js +4 -0
- package/dist/esm-es5/{notch-controller-15d281a4.js → notch-controller-6bd3e0f9.js} +1 -1
- package/dist/esm-es5/overlays-b874c3c3.js +4 -0
- package/dist/esm-es5/{status-tap-5a95077d.js → status-tap-dfea3607.js} +1 -1
- package/dist/esm-es5/{swipe-back-fa0ec5cd.js → swipe-back-c6d0e5d9.js} +1 -1
- package/dist/html.html-data.json +13 -1
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/ionic.js +1 -1
- package/dist/ionic/{p-30cd5e7b.js → p-0047bd0e.js} +1 -1
- package/dist/ionic/{p-70e34286.system.entry.js → p-01a1ff55.system.entry.js} +1 -1
- package/dist/ionic/{p-b0ff8075.entry.js → p-01de45e4.entry.js} +1 -1
- package/dist/ionic/{p-2e14c533.system.js → p-0609a7d8.system.js} +1 -1
- package/dist/ionic/p-08ab4c96.js +4 -0
- package/dist/ionic/{p-e04b9647.system.entry.js → p-094cb5ba.system.entry.js} +1 -1
- package/dist/ionic/p-0aac3a1c.js +4 -0
- package/dist/ionic/{p-de55ec45.js → p-0b743628.js} +1 -1
- package/dist/ionic/{p-b253ad7f.js → p-12a8643e.js} +1 -1
- package/dist/ionic/p-185d82fc.entry.js +4 -0
- package/dist/ionic/p-193921ce.entry.js +4 -0
- package/dist/ionic/{p-b8c685a7.system.js → p-1bc9b5f5.system.js} +1 -1
- package/dist/ionic/p-1cd372ed.js +4 -0
- package/dist/ionic/{p-123b4809.js → p-1e151efb.js} +1 -1
- package/dist/ionic/{p-bf05cbc7.entry.js → p-211d8901.entry.js} +1 -1
- package/dist/ionic/p-212f2c37.entry.js +4 -0
- package/dist/ionic/p-2433bf5e.system.js +4 -0
- package/dist/ionic/p-2732a6ce.entry.js +4 -0
- package/dist/ionic/{p-89ca4c4b.system.js → p-280f1fe7.system.js} +1 -1
- package/dist/ionic/{p-94be3ad7.js → p-2c118b1e.js} +1 -1
- package/dist/ionic/p-2c1408df.system.js +5 -0
- package/dist/ionic/p-2e2808f3.entry.js +4 -0
- package/dist/ionic/{p-0457213c.entry.js → p-32086ea4.entry.js} +1 -1
- package/dist/ionic/{p-16a61810.entry.js → p-339dee28.entry.js} +1 -1
- package/dist/ionic/{p-88e9052d.entry.js → p-34e2b446.entry.js} +1 -1
- package/dist/ionic/{p-eb07b88f.entry.js → p-374838e4.entry.js} +1 -1
- package/dist/ionic/p-3789920e.js +4 -0
- package/dist/ionic/{p-bdca4784.js → p-37aab7f7.js} +1 -1
- package/dist/ionic/p-3b7d328b.system.entry.js +4 -0
- package/dist/ionic/{p-f53d074d.system.entry.js → p-3b9edd02.system.entry.js} +1 -1
- package/dist/ionic/{p-5e23bea8.system.entry.js → p-3d23a234.system.entry.js} +1 -1
- package/dist/ionic/{p-717e2526.system.entry.js → p-3f75319a.system.entry.js} +2 -2
- package/dist/ionic/{p-c858f685.js → p-46bcc2f5.js} +1 -1
- package/dist/ionic/p-47686f0a.system.entry.js +4 -0
- package/dist/ionic/{p-afd6d696.system.entry.js → p-47d7ffb4.system.entry.js} +1 -1
- package/dist/ionic/{p-7b1ed642.system.entry.js → p-48331301.system.entry.js} +1 -1
- package/dist/ionic/{p-a3df16b9.system.entry.js → p-491ec3d6.system.entry.js} +1 -1
- package/dist/ionic/p-495aabd4.system.entry.js +4 -0
- package/dist/ionic/{p-cde3ac34.system.entry.js → p-49616da4.system.entry.js} +1 -1
- package/dist/ionic/p-4c68b459.system.entry.js +4 -0
- package/dist/ionic/{p-5cb5f63d.system.entry.js → p-4cc54847.system.entry.js} +1 -1
- package/dist/ionic/p-4da978ac.entry.js +4 -0
- package/dist/ionic/{p-a022b684.system.entry.js → p-4f9018d4.system.entry.js} +1 -1
- package/dist/ionic/{p-3481d54e.system.entry.js → p-55ae3e14.system.entry.js} +1 -1
- package/dist/ionic/{p-aaaa615c.system.entry.js → p-56271222.system.entry.js} +1 -1
- package/dist/ionic/{p-42a9f663.system.entry.js → p-565a12d7.system.entry.js} +1 -1
- package/dist/ionic/{p-d39ab63d.entry.js → p-56b810d5.entry.js} +1 -1
- package/dist/ionic/{p-31c495c2.js → p-56ee6d9a.js} +1 -1
- package/dist/ionic/{p-a85d9047.system.entry.js → p-5a0345f7.system.entry.js} +1 -1
- package/dist/ionic/{p-ba97a133.system.entry.js → p-5b8d7cdb.system.entry.js} +1 -1
- package/dist/ionic/p-5d2011e1.entry.js +4 -0
- package/dist/ionic/p-5f3d659f.entry.js +4 -0
- package/dist/ionic/p-6236eae6.entry.js +4 -0
- package/dist/ionic/{p-8794fa00.system.entry.js → p-625ef2fb.system.entry.js} +1 -1
- package/dist/ionic/{p-6871553b.system.js → p-62b7320a.system.js} +1 -1
- package/dist/ionic/{p-6525a8cd.system.js → p-638865d1.system.js} +1 -1
- package/dist/ionic/p-662cccde.entry.js +4 -0
- package/dist/ionic/p-68416ff0.entry.js +4 -0
- package/dist/ionic/{p-c747f89b.system.entry.js → p-686ddecb.system.entry.js} +2 -2
- package/dist/ionic/p-6a6550fa.js +4 -0
- package/dist/ionic/p-6a6c61b1.system.entry.js +4 -0
- package/dist/ionic/p-6afef6c1.system.js +4 -0
- package/dist/ionic/{p-abcedc15.system.entry.js → p-6b178502.system.entry.js} +1 -1
- package/dist/ionic/p-6c45c617.js +4 -0
- package/dist/ionic/{p-74deb358.system.js → p-6ecddf53.system.js} +1 -1
- package/dist/ionic/{p-5c580e89.entry.js → p-70929384.entry.js} +1 -1
- package/dist/ionic/p-73d70509.system.js +4 -0
- package/dist/ionic/{p-ae35294f.system.entry.js → p-776f7b9e.system.entry.js} +1 -1
- package/dist/ionic/{p-a3f572a7.js → p-779aede8.js} +1 -1
- package/dist/ionic/p-7872e970.system.entry.js +4 -0
- package/dist/ionic/{p-657ccdd6.entry.js → p-804ffec9.entry.js} +1 -1
- package/dist/ionic/{p-a0b28c69.system.entry.js → p-81c8fa81.system.entry.js} +1 -1
- package/dist/ionic/{p-8e651c29.entry.js → p-8294b727.entry.js} +1 -1
- package/dist/ionic/p-8528c070.entry.js +4 -0
- package/dist/ionic/p-87e81684.system.entry.js +4 -0
- package/dist/ionic/p-8954015c.entry.js +4 -0
- package/dist/ionic/p-8a1b0abb.system.js +4 -0
- package/dist/ionic/{p-5928fac9.system.entry.js → p-8a335b91.system.entry.js} +1 -1
- package/dist/ionic/{p-cd9a7017.system.entry.js → p-8eba832c.system.entry.js} +1 -1
- package/dist/ionic/{p-91cb3f9a.entry.js → p-8ed4de58.entry.js} +1 -1
- package/dist/ionic/{p-502780e4.entry.js → p-917bb906.entry.js} +1 -1
- package/dist/ionic/{p-b2595011.system.entry.js → p-93f86b06.system.entry.js} +1 -1
- package/dist/ionic/{p-9393a49f.js → p-942a9358.js} +1 -1
- package/dist/ionic/p-9625a2e6.entry.js +4 -0
- package/dist/ionic/{p-f0194418.system.entry.js → p-9bc8bd0c.system.entry.js} +1 -1
- package/dist/ionic/{p-18beebdf.system.entry.js → p-9d53b773.system.entry.js} +2 -2
- package/dist/ionic/{p-dcb5711d.entry.js → p-9fbfbaef.entry.js} +1 -1
- package/dist/ionic/p-a04ecf1a.system.js +4 -0
- package/dist/ionic/{p-c2289cd1.js → p-a1036ce7.js} +1 -1
- package/dist/ionic/{p-ea25b4c8.system.entry.js → p-a3b2d4a7.system.entry.js} +2 -2
- package/dist/ionic/{p-5f169eba.entry.js → p-a5cd2e1f.entry.js} +1 -1
- package/dist/ionic/p-a5d9fafe.entry.js +4 -0
- package/dist/ionic/{p-49543c9c.system.js → p-a667dd1f.system.js} +1 -1
- package/dist/ionic/{p-df504a37.system.js → p-a875459d.system.js} +1 -1
- package/dist/ionic/p-ad60590b.entry.js +4 -0
- package/dist/ionic/{p-1924f2e0.system.entry.js → p-b1bebf4a.system.entry.js} +2 -2
- package/dist/ionic/p-b535c93a.entry.js +4 -0
- package/dist/ionic/p-b8735394.entry.js +4 -0
- package/dist/ionic/p-bb5bbcdf.js +4 -0
- package/dist/ionic/{p-37c33319.system.js → p-bd313b73.system.js} +1 -1
- package/dist/ionic/p-c379d010.system.entry.js +4 -0
- package/dist/ionic/{p-7173ba59.system.entry.js → p-c5ce0862.system.entry.js} +2 -2
- package/dist/ionic/p-c76ef1ea.entry.js +4 -0
- package/dist/ionic/p-c8580577.system.js +4 -0
- package/dist/ionic/{p-275705e5.entry.js → p-cc0cf2d1.entry.js} +1 -1
- package/dist/ionic/{p-c39cc96d.system.entry.js → p-d3a95477.system.entry.js} +1 -1
- package/dist/ionic/{p-ceceac26.js → p-d68ecea4.js} +1 -1
- package/dist/ionic/p-d873a8c2.system.entry.js +4 -0
- package/dist/ionic/{p-64db1331.entry.js → p-dbd77435.entry.js} +1 -1
- package/dist/ionic/p-dc2d302c.entry.js +4 -0
- package/dist/ionic/{p-601e17b4.entry.js → p-dd2996cf.entry.js} +1 -1
- package/dist/ionic/{p-508a4c87.entry.js → p-dec423a3.entry.js} +1 -1
- package/dist/ionic/{p-1131946f.system.entry.js → p-deeae694.system.entry.js} +1 -1
- package/dist/ionic/p-e06d65b3.system.entry.js +4 -0
- package/dist/ionic/{p-d4cadd34.system.js → p-e0948431.system.js} +1 -1
- package/dist/ionic/{p-86813176.system.entry.js → p-e15cfec4.system.entry.js} +1 -1
- package/dist/ionic/p-e1bd8d9c.system.entry.js +4 -0
- package/dist/ionic/{p-1636923f.system.js → p-e34eefb5.system.js} +1 -1
- package/dist/ionic/{p-b6279412.entry.js → p-e57a212a.entry.js} +1 -1
- package/dist/ionic/{p-3471a7c0.system.entry.js → p-e6ee6ead.system.entry.js} +1 -1
- package/dist/ionic/p-e7055fb8.entry.js +4 -0
- package/dist/ionic/p-ea723fc4.entry.js +4 -0
- package/dist/ionic/p-ead0d463.js +5 -0
- package/dist/ionic/{p-30d77a91.system.js → p-ebc1ca90.system.js} +1 -1
- package/dist/ionic/p-ed3ad350.entry.js +4 -0
- package/dist/ionic/{p-5d7e32ce.js → p-efef9f3a.js} +1 -1
- package/dist/ionic/p-f4ccaa64.entry.js +4 -0
- package/dist/ionic/p-f4fb429a.system.js +4 -0
- package/dist/ionic/{p-a5951821.system.js → p-f549716b.system.js} +1 -1
- package/dist/ionic/p-f6a50d5c.entry.js +4 -0
- package/dist/ionic/p-fbd01db3.system.js +4 -0
- package/dist/ionic/p-fc053a55.entry.js +4 -0
- package/dist/ionic/{p-1f19958f.system.entry.js → p-fd059a23.system.entry.js} +1 -1
- package/dist/ionic/{p-f8c96502.system.entry.js → p-fdcf1482.system.entry.js} +1 -1
- package/dist/ionic/{p-e2bb92ed.system.js → p-fe320051.system.js} +1 -1
- package/dist/ionic/{p-3079950e.entry.js → p-fe3ae39d.entry.js} +1 -1
- package/dist/types/components/datetime/datetime-interface.d.ts +10 -0
- package/dist/types/components/datetime/datetime.d.ts +10 -1
- package/dist/types/components/datetime/utils/format.d.ts +7 -13
- package/dist/types/components/datetime/utils/manipulation.d.ts +7 -7
- package/dist/types/components/datetime/utils/state.d.ts +2 -2
- package/dist/types/components/datetime/utils/validate.d.ts +8 -0
- package/dist/types/components/input/input.utils.d.ts +1 -1
- package/dist/types/components/range/range.d.ts +29 -0
- package/dist/types/components/searchbar/searchbar.d.ts +37 -0
- package/dist/types/components/toggle/toggle.d.ts +1 -1
- package/dist/types/components.d.ts +36 -4
- package/dist/types/utils/framework-delegate.d.ts +1 -1
- package/dist/types/utils/hardware-back-button.d.ts +1 -1
- package/dist/types/utils/helpers.d.ts +1 -1
- package/dist/types/utils/keyboard/keyboard-controller.d.ts +1 -1
- package/dist/types/utils/overlays.d.ts +7 -2
- package/hydrate/index.js +737 -340
- package/package.json +9 -5
- package/dist/collection/components/modal/test/a11y/modal.spec.js +0 -22
- package/dist/esm-es5/app-globals-5cf6195b.js +0 -4
- package/dist/esm-es5/data-0f3ab200.js +0 -4
- package/dist/esm-es5/framework-delegate-fed7fe7c.js +0 -4
- package/dist/esm-es5/hardware-back-button-b410a047.js +0 -4
- package/dist/esm-es5/helpers-c0b9ca37.js +0 -4
- package/dist/esm-es5/index-47b2066d.js +0 -4
- package/dist/esm-es5/index-4c30cddd.js +0 -5
- package/dist/esm-es5/index-d64f34ea.js +0 -4
- package/dist/esm-es5/input-shims-b90ca55f.js +0 -4
- package/dist/esm-es5/md.transition-564937a7.js +0 -4
- package/dist/esm-es5/overlays-04a9a43f.js +0 -4
- package/dist/ionic/p-027f3674.entry.js +0 -4
- package/dist/ionic/p-05d560ec.entry.js +0 -4
- package/dist/ionic/p-0b34d3a7.system.js +0 -4
- package/dist/ionic/p-0e23c289.system.entry.js +0 -4
- package/dist/ionic/p-1f16d040.entry.js +0 -4
- package/dist/ionic/p-21ca1f1c.js +0 -4
- package/dist/ionic/p-2327064c.entry.js +0 -4
- package/dist/ionic/p-23c73017.entry.js +0 -4
- package/dist/ionic/p-2e1f014a.system.entry.js +0 -4
- package/dist/ionic/p-337ac0f5.entry.js +0 -4
- package/dist/ionic/p-396083cc.entry.js +0 -4
- package/dist/ionic/p-3a7de59c.entry.js +0 -4
- package/dist/ionic/p-3c6f02cf.system.js +0 -4
- package/dist/ionic/p-3d961d93.entry.js +0 -4
- package/dist/ionic/p-3e9ad72a.system.entry.js +0 -4
- package/dist/ionic/p-43a5edee.entry.js +0 -4
- package/dist/ionic/p-49aba878.js +0 -4
- package/dist/ionic/p-4f777b5e.js +0 -4
- package/dist/ionic/p-4fda5c35.entry.js +0 -4
- package/dist/ionic/p-5b40d967.entry.js +0 -4
- package/dist/ionic/p-5c2ae448.js +0 -4
- package/dist/ionic/p-5c6a04bd.entry.js +0 -4
- package/dist/ionic/p-61ba2137.system.js +0 -4
- package/dist/ionic/p-64761c90.entry.js +0 -4
- package/dist/ionic/p-64856c3c.system.entry.js +0 -4
- package/dist/ionic/p-6486e393.system.entry.js +0 -4
- package/dist/ionic/p-667e3e2d.entry.js +0 -4
- package/dist/ionic/p-68ba8e77.system.entry.js +0 -4
- package/dist/ionic/p-72fa96bf.system.js +0 -5
- package/dist/ionic/p-7330c044.system.js +0 -4
- package/dist/ionic/p-7ce40e7b.entry.js +0 -4
- package/dist/ionic/p-9056778e.system.entry.js +0 -4
- package/dist/ionic/p-95d5a097.entry.js +0 -4
- package/dist/ionic/p-9cd7ba27.system.js +0 -4
- package/dist/ionic/p-9ec7208d.system.js +0 -4
- package/dist/ionic/p-a6e465f5.entry.js +0 -4
- package/dist/ionic/p-a8a56449.entry.js +0 -4
- package/dist/ionic/p-bd4787eb.entry.js +0 -4
- package/dist/ionic/p-c11bab7e.entry.js +0 -4
- package/dist/ionic/p-c1797ec5.system.entry.js +0 -4
- package/dist/ionic/p-c308f773.entry.js +0 -4
- package/dist/ionic/p-c80c7e90.system.js +0 -4
- package/dist/ionic/p-cb9e71e0.entry.js +0 -4
- package/dist/ionic/p-db30f71b.entry.js +0 -4
- package/dist/ionic/p-dbcba5a2.js +0 -4
- package/dist/ionic/p-e81bf09e.system.entry.js +0 -4
- package/dist/ionic/p-e9f9388e.system.js +0 -4
- package/dist/ionic/p-ed7a529f.js +0 -5
- package/dist/ionic/p-edcada2b.system.entry.js +0 -4
- package/dist/ionic/p-f460c7ae.entry.js +0 -4
- package/dist/ionic/p-f7dce541.js +0 -4
- package/dist/ionic/p-f840d817.entry.js +0 -4
- package/dist/ionic/p-fb9f8495.system.entry.js +0 -4
- package/dist/ionic/p-fd2aa50c.js +0 -4
- /package/dist/ionic/{p-b5839dc2.js → p-1b3ffb2f.js} +0 -0
- /package/dist/ionic/{p-fd8ced99.system.js → p-5fc8d5ef.system.js} +0 -0
|
@@ -39,7 +39,7 @@ export class Spinner {
|
|
|
39
39
|
svgs.push(buildLine(spinner, duration, i, spinner.lines));
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
return (h(Host, { key: '
|
|
42
|
+
return (h(Host, { key: '9e08bf306b28bdd76884d353dcaaf31c1bb591f2', class: createColorClasses(self.color, {
|
|
43
43
|
[mode]: true,
|
|
44
44
|
[`spinner-${spinnerName}`]: true,
|
|
45
45
|
'spinner-paused': self.paused || config.getBoolean('_testing'),
|
|
@@ -108,12 +108,12 @@ export class SplitPane {
|
|
|
108
108
|
}
|
|
109
109
|
render() {
|
|
110
110
|
const mode = getIonMode(this);
|
|
111
|
-
return (h(Host, { key: '
|
|
111
|
+
return (h(Host, { key: '57ee198506248916e74d8d082ad547a471e6cc73', class: {
|
|
112
112
|
[mode]: true,
|
|
113
113
|
// Used internally for styling
|
|
114
114
|
[`split-pane-${mode}`]: true,
|
|
115
115
|
'split-pane-visible': this.visible,
|
|
116
|
-
} }, h("slot", { key: '
|
|
116
|
+
} }, h("slot", { key: '2cd89fa50cfe8a7a6bdda981bb89d5a24a8eec88' })));
|
|
117
117
|
}
|
|
118
118
|
static get is() { return "ion-split-pane"; }
|
|
119
119
|
static get encapsulation() { return "shadow"; }
|
|
@@ -48,10 +48,10 @@ export class Tab {
|
|
|
48
48
|
}
|
|
49
49
|
render() {
|
|
50
50
|
const { tab, active, component } = this;
|
|
51
|
-
return (h(Host, { key: '
|
|
51
|
+
return (h(Host, { key: '4fe50fa809503794be2ef91383e49b72cad6fa82', role: "tabpanel", "aria-hidden": !active ? 'true' : null, "aria-labelledby": `tab-button-${tab}`, class: {
|
|
52
52
|
'ion-page': component === undefined,
|
|
53
53
|
'tab-hidden': !active,
|
|
54
|
-
} }, h("slot", { key: '
|
|
54
|
+
} }, h("slot", { key: '937777a826936d6b399329a926a704008339803e' })));
|
|
55
55
|
}
|
|
56
56
|
static get is() { return "ion-tab"; }
|
|
57
57
|
static get encapsulation() { return "shadow"; }
|
|
@@ -51,11 +51,11 @@ export class TabBar {
|
|
|
51
51
|
const { color, translucent, keyboardVisible } = this;
|
|
52
52
|
const mode = getIonMode(this);
|
|
53
53
|
const shouldHide = keyboardVisible && this.el.getAttribute('slot') !== 'top';
|
|
54
|
-
return (h(Host, { key: '
|
|
54
|
+
return (h(Host, { key: '5083528e7f802d2f323ce50585edc98eeb9754c6', role: "tablist", "aria-hidden": shouldHide ? 'true' : null, class: createColorClasses(color, {
|
|
55
55
|
[mode]: true,
|
|
56
56
|
'tab-bar-translucent': translucent,
|
|
57
57
|
'tab-bar-hidden': shouldHide,
|
|
58
|
-
}) }, h("slot", { key: '
|
|
58
|
+
}) }, h("slot", { key: 'eb33cdd12da49062219d4aa17a319c3e6361c5c5' })));
|
|
59
59
|
}
|
|
60
60
|
static get is() { return "ion-tab-bar"; }
|
|
61
61
|
static get encapsulation() { return "shadow"; }
|
|
@@ -70,7 +70,7 @@ export class TabButton {
|
|
|
70
70
|
rel,
|
|
71
71
|
target,
|
|
72
72
|
};
|
|
73
|
-
return (h(Host, { key: '
|
|
73
|
+
return (h(Host, { key: 'c7b6a72766b71f34800137dadcf29af657bebddf', onClick: this.onClick, onKeyup: this.onKeyUp, id: tab !== undefined ? `tab-button-${tab}` : null, class: {
|
|
74
74
|
[mode]: true,
|
|
75
75
|
'tab-selected': selected,
|
|
76
76
|
'tab-disabled': disabled,
|
|
@@ -82,7 +82,7 @@ export class TabButton {
|
|
|
82
82
|
'ion-activatable': true,
|
|
83
83
|
'ion-selectable': true,
|
|
84
84
|
'ion-focusable': true,
|
|
85
|
-
} }, h("a", Object.assign({ key: '
|
|
85
|
+
} }, h("a", Object.assign({ key: 'a1eca4a5cf0dfdb55099811d03f204f7b3807a2e' }, attrs, { class: "button-native", part: "native", role: "tab", "aria-selected": selected ? 'true' : null, "aria-disabled": disabled ? 'true' : null, tabindex: disabled ? '-1' : undefined }, inheritedAttributes), h("span", { key: '888a6d8b95c2f0ca8f74f492729bd28f0d3273d5', class: "button-inner" }, h("slot", { key: '83a234af52ffce9ff0f4cc497712c962115a5813' })), mode === 'md' && h("ion-ripple-effect", { key: '771aff1b83233411e0cf706c3e94c78bca534794', type: "unbounded" }))));
|
|
86
86
|
}
|
|
87
87
|
static get is() { return "ion-tab-button"; }
|
|
88
88
|
static get encapsulation() { return "shadow"; }
|
|
@@ -135,7 +135,7 @@ export class Tabs {
|
|
|
135
135
|
return Array.from(this.el.querySelectorAll('ion-tab'));
|
|
136
136
|
}
|
|
137
137
|
render() {
|
|
138
|
-
return (h(Host, { key: '
|
|
138
|
+
return (h(Host, { key: '5102fdd8ae80408811312631f0739c356d913840', onIonTabButtonClick: this.onTabClicked }, h("slot", { key: '55f781cd010dcebf9675f2a0b4eab9f4271b780e', name: "top" }), h("div", { key: '2da0ee7b8c82e4bfa42f8bc5873e23e50a88c405', class: "tabs-inner" }, h("slot", { key: '6335a62a10398c008c91f87f15b4a940a95e175d' })), h("slot", { key: '9b6f08a21c703cc7fdebd48eb746d0fde6a8454d', name: "bottom" })));
|
|
139
139
|
}
|
|
140
140
|
static get is() { return "ion-tabs"; }
|
|
141
141
|
static get encapsulation() { return "shadow"; }
|
|
@@ -13,9 +13,9 @@ export class Text {
|
|
|
13
13
|
}
|
|
14
14
|
render() {
|
|
15
15
|
const mode = getIonMode(this);
|
|
16
|
-
return (h(Host, { key: '
|
|
16
|
+
return (h(Host, { key: '4330b56cbc4e15953d9b3162fb40af728a8195dd', class: createColorClasses(this.color, {
|
|
17
17
|
[mode]: true,
|
|
18
|
-
}) }, h("slot", { key: '
|
|
18
|
+
}) }, h("slot", { key: 'ec674a71d8fbb04d537fd79d617d9db4a607c340' })));
|
|
19
19
|
}
|
|
20
20
|
static get is() { return "ion-text"; }
|
|
21
21
|
static get encapsulation() { return "shadow"; }
|
|
@@ -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: 'd2667635930e4c0896805f452357e7dc9086bc72', class: getIonMode(this) }, h("slot", { key: '66eb1487f3da4da2ef71b812a8d0f0fe884c7d81' })));
|
|
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: '6f43362b782ef7d340c241bb66f1469663c03cc1', 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: '9c3ff1a289e533ee3426b71ab5560fbea3529502', class: "toolbar-title" }, h("slot", { key: '50d5cc5a1519ad58f1994d2f8c8f08f62baac1fe' }))));
|
|
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: '23803334fb668f6ce7044d3a321cb84bc753bd16', 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: '7cd7138ba079fccf97f318b91e9986491ab4214d', class: wrapperClass }, h("div", { key: '93b78fa64e24435adeb77a04c1d1d53d2f093864', class: "toast-container", part: "container" }, this.renderButtons(startButtons, 'start'), this.icon !== undefined && (h("ion-icon", { key: '9a3c71b164ebcfba2540acb7568beffa76b62f47', class: "toast-icon", part: "icon", icon: this.icon, lazy: false, "aria-hidden": "true" })), h("div", { key: 'feb9268102d844f1314205f7440de7066cf0620e', 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"; }
|
|
@@ -421,7 +421,7 @@ Developers can dismiss this warning by removing their usage of the "legacy" prop
|
|
|
421
421
|
"optional": false,
|
|
422
422
|
"docs": {
|
|
423
423
|
"tags": [],
|
|
424
|
-
"text": "How to control the alignment of the toggle and label on the cross axis.\n
|
|
424
|
+
"text": "How to control the alignment of the toggle and label on the cross axis.\n`\"start\"`: The label and control will appear on the left of the cross axis in LTR, and on the right side in RTL.\n`\"center\"`: The label and control will appear at the center of the cross axis in both LTR and RTL."
|
|
425
425
|
},
|
|
426
426
|
"attribute": "alignment",
|
|
427
427
|
"reflect": false,
|
|
@@ -3,13 +3,141 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { expect } from "@playwright/test";
|
|
5
5
|
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
6
|
-
configs().forEach(({ title, screenshot, config }) => {
|
|
6
|
+
configs({ themes: ['light', 'dark'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
7
|
+
test.describe(title('toolbar: basic (LTR only)'), () => {
|
|
8
|
+
test('should not have visual regressions with text only', async ({ page }) => {
|
|
9
|
+
await page.setContent(`
|
|
10
|
+
<ion-header>
|
|
11
|
+
<ion-toolbar>
|
|
12
|
+
<ion-title>Toolbar</ion-title>
|
|
13
|
+
</ion-toolbar>
|
|
14
|
+
</ion-header>
|
|
15
|
+
`, config);
|
|
16
|
+
const header = page.locator('ion-header');
|
|
17
|
+
await expect(header).toHaveScreenshot(screenshot(`toolbar-basic-text-only`));
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
configs({ themes: ['light', 'dark'] }).forEach(({ title, screenshot, config }) => {
|
|
7
22
|
test.describe(title('toolbar: basic'), () => {
|
|
8
|
-
test('should
|
|
9
|
-
await page.
|
|
10
|
-
|
|
23
|
+
test('should truncate long title with ellipsis', async ({ page }) => {
|
|
24
|
+
await page.setContent(`
|
|
25
|
+
<ion-header>
|
|
26
|
+
<ion-toolbar>
|
|
27
|
+
<ion-title>This is the title that never ends. It just goes on and on my friend.</ion-title>
|
|
28
|
+
</ion-toolbar>
|
|
29
|
+
</ion-header>
|
|
30
|
+
`, config);
|
|
31
|
+
const header = page.locator('ion-header');
|
|
32
|
+
await expect(header).toHaveScreenshot(screenshot(`toolbar-basic-long-text`));
|
|
33
|
+
});
|
|
34
|
+
test('should not have visual regressions with icon-only buttons', async ({ page }) => {
|
|
35
|
+
await page.setContent(`
|
|
36
|
+
<ion-header>
|
|
37
|
+
<ion-toolbar>
|
|
38
|
+
<ion-buttons slot="secondary">
|
|
39
|
+
<ion-button>
|
|
40
|
+
<ion-icon slot="icon-only" name="person-circle"></ion-icon>
|
|
41
|
+
</ion-button>
|
|
42
|
+
<ion-button>
|
|
43
|
+
<ion-icon slot="icon-only" name="search"></ion-icon>
|
|
44
|
+
</ion-button>
|
|
45
|
+
</ion-buttons>
|
|
46
|
+
<ion-buttons slot="primary">
|
|
47
|
+
<ion-button color="secondary">
|
|
48
|
+
<ion-icon slot="icon-only" ios="ellipsis-horizontal" md="ellipsis-vertical"></ion-icon>
|
|
49
|
+
</ion-button>
|
|
50
|
+
</ion-buttons>
|
|
51
|
+
<ion-title>Toolbar</ion-title>
|
|
52
|
+
</ion-toolbar>
|
|
53
|
+
<ion-toolbar>
|
|
54
|
+
<ion-buttons slot="secondary">
|
|
55
|
+
<ion-button class="ion-activated">
|
|
56
|
+
<ion-icon slot="icon-only" name="person-circle"></ion-icon>
|
|
57
|
+
</ion-button>
|
|
58
|
+
<ion-button class="ion-activated">
|
|
59
|
+
<ion-icon slot="icon-only" name="search"></ion-icon>
|
|
60
|
+
</ion-button>
|
|
61
|
+
</ion-buttons>
|
|
62
|
+
<ion-buttons slot="primary">
|
|
63
|
+
<ion-button color="secondary" class="ion-activated">
|
|
64
|
+
<ion-icon slot="icon-only" ios="ellipsis-horizontal" md="ellipsis-vertical"></ion-icon>
|
|
65
|
+
</ion-button>
|
|
66
|
+
</ion-buttons>
|
|
67
|
+
<ion-title>Activated Buttons</ion-title>
|
|
68
|
+
</ion-toolbar>
|
|
69
|
+
</ion-header>
|
|
70
|
+
`, config);
|
|
71
|
+
const header = page.locator('ion-header');
|
|
72
|
+
await expect(header).toHaveScreenshot(screenshot(`toolbar-basic-icon-buttons`));
|
|
73
|
+
});
|
|
74
|
+
test('should not have visual regressions with buttons with icons and text', async ({ page }) => {
|
|
75
|
+
await page.setContent(`
|
|
76
|
+
<ion-header>
|
|
77
|
+
<ion-toolbar>
|
|
78
|
+
<ion-buttons slot="secondary">
|
|
79
|
+
<ion-button fill="solid">
|
|
80
|
+
<ion-icon slot="start" name="person-circle"></ion-icon>
|
|
81
|
+
Solid
|
|
82
|
+
</ion-button>
|
|
83
|
+
</ion-buttons>
|
|
84
|
+
<ion-title>Solid</ion-title>
|
|
85
|
+
<ion-buttons slot="primary">
|
|
86
|
+
<ion-button fill="solid" color="secondary">
|
|
87
|
+
Help
|
|
88
|
+
<ion-icon slot="end" name="help-circle"></ion-icon>
|
|
89
|
+
</ion-button>
|
|
90
|
+
</ion-buttons>
|
|
91
|
+
</ion-toolbar>
|
|
92
|
+
<ion-toolbar>
|
|
93
|
+
<ion-buttons slot="secondary">
|
|
94
|
+
<ion-button fill="solid" class="ion-activated">
|
|
95
|
+
<ion-icon slot="start" name="person-circle"></ion-icon>
|
|
96
|
+
Solid
|
|
97
|
+
</ion-button>
|
|
98
|
+
</ion-buttons>
|
|
99
|
+
<ion-title>Solid Activated</ion-title>
|
|
100
|
+
<ion-buttons slot="primary">
|
|
101
|
+
<ion-button fill="solid" color="secondary" class="ion-activated">
|
|
102
|
+
Help
|
|
103
|
+
<ion-icon slot="end" name="help-circle"></ion-icon>
|
|
104
|
+
</ion-button>
|
|
105
|
+
</ion-buttons>
|
|
106
|
+
</ion-toolbar>
|
|
107
|
+
<ion-toolbar>
|
|
108
|
+
<ion-buttons slot="secondary">
|
|
109
|
+
<ion-button fill="outline">
|
|
110
|
+
<ion-icon slot="start" name="star"></ion-icon>
|
|
111
|
+
Star
|
|
112
|
+
</ion-button>
|
|
113
|
+
</ion-buttons>
|
|
114
|
+
<ion-title>Outline</ion-title>
|
|
115
|
+
<ion-buttons slot="primary">
|
|
116
|
+
<ion-button color="secondary" fill="outline">
|
|
117
|
+
Info
|
|
118
|
+
<ion-icon slot="end" name="information-circle"></ion-icon>
|
|
119
|
+
</ion-button>
|
|
120
|
+
</ion-buttons>
|
|
121
|
+
</ion-toolbar>
|
|
122
|
+
<ion-toolbar>
|
|
123
|
+
<ion-buttons slot="secondary">
|
|
124
|
+
<ion-button fill="outline" class="ion-activated">
|
|
125
|
+
<ion-icon slot="start" name="star"></ion-icon>
|
|
126
|
+
Star
|
|
127
|
+
</ion-button>
|
|
128
|
+
</ion-buttons>
|
|
129
|
+
<ion-title>Outline Activated</ion-title>
|
|
130
|
+
<ion-buttons slot="primary">
|
|
131
|
+
<ion-button color="secondary" fill="outline" class="ion-activated">
|
|
132
|
+
Info
|
|
133
|
+
<ion-icon slot="end" name="information-circle"></ion-icon>
|
|
134
|
+
</ion-button>
|
|
135
|
+
</ion-buttons>
|
|
136
|
+
</ion-toolbar>
|
|
137
|
+
</ion-header>
|
|
138
|
+
`, config);
|
|
11
139
|
const header = page.locator('ion-header');
|
|
12
|
-
await expect(header).toHaveScreenshot(screenshot(`toolbar-basic`));
|
|
140
|
+
await expect(header).toHaveScreenshot(screenshot(`toolbar-basic-text-icon-buttons`));
|
|
13
141
|
});
|
|
14
142
|
});
|
|
15
143
|
});
|
|
@@ -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: '8907ed75fbb2b1dced55c481bba6363f1dca815b', 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: '6bfa09b08d6517f0d680f53b739854cecd631bc9', class: "toolbar-background" }), h("div", { key: '1531bd6dd9e0a5843309bba854b744c453037ad0', class: "toolbar-container" }, h("slot", { key: '881b41697d386eae651b019128573f0fa432cd33', name: "start" }), h("slot", { key: '64a284e6eae5311ac3125dfadb4bb32bdba9d089', name: "secondary" }), h("div", { key: 'c1f47503563b38084b27d7ba54f17ec478482b94', class: "toolbar-content" }, h("slot", { key: '9a85acfba72252705619ae32acae9c14f81aa57d' })), h("slot", { key: '89e08bd761dc6940dbebc5d06f5f080af204aa72', name: "primary" }), h("slot", { key: 'a1cb7d95627f8a3d24dd4b9c11718fc164f53674', name: "end" }))));
|
|
69
69
|
}
|
|
70
70
|
static get is() { return "ion-toolbar"; }
|
|
71
71
|
static get encapsulation() { return "shadow"; }
|
|
@@ -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();
|
|
@@ -96,7 +96,7 @@ export const enableScrollAssist = (componentEl, inputEl, contentEl, footerEl, ke
|
|
|
96
96
|
const focusOut = () => {
|
|
97
97
|
hasKeyboardBeenPresentedForTextField = false;
|
|
98
98
|
win === null || win === void 0 ? void 0 : win.removeEventListener('ionKeyboardDidShow', keyboardShow);
|
|
99
|
-
componentEl.removeEventListener('focusout', focusOut
|
|
99
|
+
componentEl.removeEventListener('focusout', focusOut);
|
|
100
100
|
};
|
|
101
101
|
/**
|
|
102
102
|
* When the input is about to receive
|
|
@@ -116,13 +116,13 @@ export const enableScrollAssist = (componentEl, inputEl, contentEl, footerEl, ke
|
|
|
116
116
|
}
|
|
117
117
|
jsSetFocus(componentEl, inputEl, contentEl, footerEl, keyboardHeight, addScrollPadding, disableClonedInput, platformHeight);
|
|
118
118
|
win === null || win === void 0 ? void 0 : win.addEventListener('ionKeyboardDidShow', keyboardShow);
|
|
119
|
-
componentEl.addEventListener('focusout', focusOut
|
|
119
|
+
componentEl.addEventListener('focusout', focusOut);
|
|
120
120
|
};
|
|
121
|
-
componentEl.addEventListener('focusin', focusIn
|
|
121
|
+
componentEl.addEventListener('focusin', focusIn);
|
|
122
122
|
return () => {
|
|
123
|
-
componentEl.removeEventListener('focusin', focusIn
|
|
123
|
+
componentEl.removeEventListener('focusin', focusIn);
|
|
124
124
|
win === null || win === void 0 ? void 0 : win.removeEventListener('ionKeyboardDidShow', keyboardShow);
|
|
125
|
-
componentEl.removeEventListener('focusout', focusOut
|
|
125
|
+
componentEl.removeEventListener('focusout', focusOut);
|
|
126
126
|
};
|
|
127
127
|
};
|
|
128
128
|
/**
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { doc } from "./browser/index";
|
|
5
|
-
import {
|
|
5
|
+
import { shouldUseCloseWatcher } from "./hardware-back-button";
|
|
6
6
|
import { config } from "../global/config";
|
|
7
7
|
import { getIonMode } from "../global/ionic-global";
|
|
8
8
|
import { CoreDelegate } from "./framework-delegate";
|
|
9
9
|
import { OVERLAY_BACK_BUTTON_PRIORITY } from "./hardware-back-button";
|
|
10
|
-
import { addEventListener, componentOnReady,
|
|
10
|
+
import { addEventListener, componentOnReady, focusVisibleElement, getElementRoot, removeEventListener, } from "./helpers";
|
|
11
11
|
import { printIonWarning } from "./logging";
|
|
12
12
|
let lastOverlayIndex = 0;
|
|
13
13
|
let lastId = 0;
|
|
@@ -99,32 +99,48 @@ export const createOverlay = (tagName, opts) => {
|
|
|
99
99
|
* valid usage for the disabled property on ion-button.
|
|
100
100
|
*/
|
|
101
101
|
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])';
|
|
102
|
+
const isOverlayHidden = (overlay) => overlay.classList.contains('overlay-hidden');
|
|
103
|
+
/**
|
|
104
|
+
* Focuses the first descendant in an overlay
|
|
105
|
+
* that can receive focus. If none exists,
|
|
106
|
+
* the entire overlay will be focused.
|
|
107
|
+
*/
|
|
102
108
|
export const focusFirstDescendant = (ref, overlay) => {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (shadowRoot) {
|
|
106
|
-
// If there are no inner focusable elements, just focus the host element.
|
|
107
|
-
firstInput = shadowRoot.querySelector(focusableQueryString) || firstInput;
|
|
108
|
-
}
|
|
109
|
-
if (firstInput) {
|
|
110
|
-
focusElement(firstInput);
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
// Focus overlay instead of letting focus escape
|
|
114
|
-
overlay.focus();
|
|
115
|
-
}
|
|
109
|
+
const firstInput = ref.querySelector(focusableQueryString);
|
|
110
|
+
focusElementInOverlay(firstInput, overlay);
|
|
116
111
|
};
|
|
117
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Focuses the last descendant in an overlay
|
|
114
|
+
* that can receive focus. If none exists,
|
|
115
|
+
* the entire overlay will be focused.
|
|
116
|
+
*/
|
|
118
117
|
const focusLastDescendant = (ref, overlay) => {
|
|
119
118
|
const inputs = Array.from(ref.querySelectorAll(focusableQueryString));
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
const lastInput = inputs.length > 0 ? inputs[inputs.length - 1] : null;
|
|
120
|
+
focusElementInOverlay(lastInput, overlay);
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* Focuses a particular element in an overlay. If the element
|
|
124
|
+
* doesn't have anything focusable associated with it then
|
|
125
|
+
* the overlay itself will be focused.
|
|
126
|
+
* This should be used instead of the focus() method
|
|
127
|
+
* on most elements because the focusable element
|
|
128
|
+
* may not be the host element.
|
|
129
|
+
*
|
|
130
|
+
* For example, if an ion-button should be focused
|
|
131
|
+
* then we should actually focus the native <button>
|
|
132
|
+
* element inside of ion-button's shadow root, not
|
|
133
|
+
* the host element itself.
|
|
134
|
+
*/
|
|
135
|
+
const focusElementInOverlay = (hostToFocus, overlay) => {
|
|
136
|
+
let elementToFocus = hostToFocus;
|
|
137
|
+
const shadowRoot = hostToFocus === null || hostToFocus === void 0 ? void 0 : hostToFocus.shadowRoot;
|
|
122
138
|
if (shadowRoot) {
|
|
123
139
|
// If there are no inner focusable elements, just focus the host element.
|
|
124
|
-
|
|
140
|
+
elementToFocus = shadowRoot.querySelector(focusableQueryString) || hostToFocus;
|
|
125
141
|
}
|
|
126
|
-
if (
|
|
127
|
-
|
|
142
|
+
if (elementToFocus) {
|
|
143
|
+
focusVisibleElement(elementToFocus);
|
|
128
144
|
}
|
|
129
145
|
else {
|
|
130
146
|
// Focus overlay instead of letting focus escape
|
|
@@ -175,6 +191,21 @@ const trapKeyboardFocus = (ev, doc) => {
|
|
|
175
191
|
*/
|
|
176
192
|
if (lastOverlay === target) {
|
|
177
193
|
lastOverlay.lastFocus = undefined;
|
|
194
|
+
/**
|
|
195
|
+
* Toasts can be presented from an overlay.
|
|
196
|
+
* However, focus should still be returned to
|
|
197
|
+
* the overlay when clicking a toast. Normally,
|
|
198
|
+
* focus would be returned to the last focusable
|
|
199
|
+
* descendant in the overlay which may not always be
|
|
200
|
+
* the button that the toast was presented from. In this case,
|
|
201
|
+
* the focus may be returned to an unexpected element.
|
|
202
|
+
* To account for this, we make sure to return focus to the
|
|
203
|
+
* last focused element in the overlay if focus is
|
|
204
|
+
* moved to the toast.
|
|
205
|
+
*/
|
|
206
|
+
}
|
|
207
|
+
else if (target.tagName === 'ION-TOAST') {
|
|
208
|
+
focusElementInOverlay(lastOverlay.lastFocus, lastOverlay);
|
|
178
209
|
/**
|
|
179
210
|
* Otherwise, we must be focusing an element
|
|
180
211
|
* inside of the overlay. The two possible options
|
|
@@ -246,6 +277,21 @@ const trapKeyboardFocus = (ev, doc) => {
|
|
|
246
277
|
*/
|
|
247
278
|
if (lastOverlay.contains(target)) {
|
|
248
279
|
lastOverlay.lastFocus = target;
|
|
280
|
+
/**
|
|
281
|
+
* Toasts can be presented from an overlay.
|
|
282
|
+
* However, focus should still be returned to
|
|
283
|
+
* the overlay when clicking a toast. Normally,
|
|
284
|
+
* focus would be returned to the last focusable
|
|
285
|
+
* descendant in the overlay which may not always be
|
|
286
|
+
* the button that the toast was presented from. In this case,
|
|
287
|
+
* the focus may be returned to an unexpected element.
|
|
288
|
+
* To account for this, we make sure to return focus to the
|
|
289
|
+
* last focused element in the overlay if focus is
|
|
290
|
+
* moved to the toast.
|
|
291
|
+
*/
|
|
292
|
+
}
|
|
293
|
+
else if (target.tagName === 'ION-TOAST') {
|
|
294
|
+
focusElementInOverlay(lastOverlay.lastFocus, lastOverlay);
|
|
249
295
|
}
|
|
250
296
|
else {
|
|
251
297
|
/**
|
|
@@ -319,7 +365,7 @@ const connectListeners = (doc) => {
|
|
|
319
365
|
* this behavior will be handled via the ionBackButton
|
|
320
366
|
* event.
|
|
321
367
|
*/
|
|
322
|
-
if (!
|
|
368
|
+
if (!shouldUseCloseWatcher()) {
|
|
323
369
|
doc.addEventListener('keydown', (ev) => {
|
|
324
370
|
if (ev.key === 'Escape') {
|
|
325
371
|
const lastOverlay = getPresentedOverlay(doc);
|
|
@@ -409,15 +455,7 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
|
|
|
409
455
|
return;
|
|
410
456
|
}
|
|
411
457
|
setRootAriaHidden(true);
|
|
412
|
-
|
|
413
|
-
* Hide all other overlays from screen readers so only this one
|
|
414
|
-
* can be read. Note that presenting an overlay always makes
|
|
415
|
-
* it the topmost one.
|
|
416
|
-
*/
|
|
417
|
-
if (doc !== undefined) {
|
|
418
|
-
const presentedOverlays = getPresentedOverlays(doc);
|
|
419
|
-
presentedOverlays.forEach((o) => o.setAttribute('aria-hidden', 'true'));
|
|
420
|
-
}
|
|
458
|
+
hideOverlaysFromScreenReaders(overlay.el);
|
|
421
459
|
overlay.presented = true;
|
|
422
460
|
overlay.willPresent.emit();
|
|
423
461
|
(_a = overlay.willPresentShorthand) === null || _a === void 0 ? void 0 : _a.emit();
|
|
@@ -510,7 +548,7 @@ const restoreElementFocus = async (overlayEl) => {
|
|
|
510
548
|
}
|
|
511
549
|
};
|
|
512
550
|
export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnimation, opts) => {
|
|
513
|
-
var _a, _b
|
|
551
|
+
var _a, _b;
|
|
514
552
|
if (!overlay.presented) {
|
|
515
553
|
return false;
|
|
516
554
|
}
|
|
@@ -561,13 +599,7 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
|
|
|
561
599
|
console.error(err);
|
|
562
600
|
}
|
|
563
601
|
overlay.el.remove();
|
|
564
|
-
|
|
565
|
-
* If there are other overlays presented, unhide the new
|
|
566
|
-
* topmost one from screen readers.
|
|
567
|
-
*/
|
|
568
|
-
if (doc !== undefined) {
|
|
569
|
-
(_c = getPresentedOverlay(doc)) === null || _c === void 0 ? void 0 : _c.removeAttribute('aria-hidden');
|
|
570
|
-
}
|
|
602
|
+
revealOverlaysToScreenReaders();
|
|
571
603
|
return true;
|
|
572
604
|
};
|
|
573
605
|
const getAppRoot = (doc) => {
|
|
@@ -763,3 +795,59 @@ export const createTriggerController = () => {
|
|
|
763
795
|
removeClickListener,
|
|
764
796
|
};
|
|
765
797
|
};
|
|
798
|
+
/**
|
|
799
|
+
* Ensure that underlying overlays have aria-hidden if necessary so that screen readers
|
|
800
|
+
* cannot move focus to these elements. Note that we cannot rely on focus/focusin/focusout
|
|
801
|
+
* events here because those events do not fire when the screen readers moves to a non-focusable
|
|
802
|
+
* element such as text.
|
|
803
|
+
* Without this logic screen readers would be able to move focus outside of the top focus-trapped overlay.
|
|
804
|
+
*
|
|
805
|
+
* @param newTopMostOverlay - The overlay that is being presented. Since the overlay has not been
|
|
806
|
+
* fully presented yet at the time this function is called it will not be included in the getPresentedOverlays result.
|
|
807
|
+
*/
|
|
808
|
+
const hideOverlaysFromScreenReaders = (newTopMostOverlay) => {
|
|
809
|
+
var _a;
|
|
810
|
+
if (doc === undefined)
|
|
811
|
+
return;
|
|
812
|
+
const overlays = getPresentedOverlays(doc);
|
|
813
|
+
for (let i = overlays.length - 1; i >= 0; i--) {
|
|
814
|
+
const presentedOverlay = overlays[i];
|
|
815
|
+
const nextPresentedOverlay = (_a = overlays[i + 1]) !== null && _a !== void 0 ? _a : newTopMostOverlay;
|
|
816
|
+
/**
|
|
817
|
+
* If next overlay has aria-hidden then all remaining overlays will have it too.
|
|
818
|
+
* Or, if the next overlay is a Toast that does not have aria-hidden then current overlay
|
|
819
|
+
* should not have aria-hidden either so focus can remain in the current overlay.
|
|
820
|
+
*/
|
|
821
|
+
if (nextPresentedOverlay.hasAttribute('aria-hidden') || nextPresentedOverlay.tagName !== 'ION-TOAST') {
|
|
822
|
+
presentedOverlay.setAttribute('aria-hidden', 'true');
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
};
|
|
826
|
+
/**
|
|
827
|
+
* When dismissing an overlay we need to reveal the new top-most overlay to screen readers.
|
|
828
|
+
* If the top-most overlay is a Toast we potentially need to reveal more overlays since
|
|
829
|
+
* focus is never automatically moved to the Toast.
|
|
830
|
+
*/
|
|
831
|
+
const revealOverlaysToScreenReaders = () => {
|
|
832
|
+
if (doc === undefined)
|
|
833
|
+
return;
|
|
834
|
+
const overlays = getPresentedOverlays(doc);
|
|
835
|
+
for (let i = overlays.length - 1; i >= 0; i--) {
|
|
836
|
+
const currentOverlay = overlays[i];
|
|
837
|
+
/**
|
|
838
|
+
* If the current we are looking at is a Toast then we can remove aria-hidden.
|
|
839
|
+
* However, we potentially need to keep looking at the overlay stack because there
|
|
840
|
+
* could be more Toasts underneath. Additionally, we need to unhide the closest non-Toast
|
|
841
|
+
* overlay too so focus can move there since focus is never automatically moved to the Toast.
|
|
842
|
+
*/
|
|
843
|
+
currentOverlay.removeAttribute('aria-hidden');
|
|
844
|
+
/**
|
|
845
|
+
* If we found a non-Toast element then we can just remove aria-hidden and stop searching entirely
|
|
846
|
+
* since this overlay should always receive focus. As a result, all underlying overlays should still
|
|
847
|
+
* be hidden from screen readers.
|
|
848
|
+
*/
|
|
849
|
+
if (currentOverlay.tagName !== 'ION-TOAST') {
|
|
850
|
+
break;
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
};
|