voyager-ionic-core 7.7.3 → 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/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-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 +1 -1
- package/components/list-header.js +2 -2
- package/components/list.js +1 -1
- package/components/note.js +2 -2
- package/components/overlays.js +61 -19
- 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/{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/{hardware-back-button-2696acaf.js → hardware-back-button-adba3ac7.js} +5 -5
- package/dist/cjs/{index-9bfcb6e8.js → index-1f7c54f8.js} +3 -3
- package/dist/cjs/{index-0ffe376d.js → index-22617dd6.js} +51 -7
- package/dist/cjs/{index-4c96691f.js → index-5c38afe7.js} +2 -2
- package/dist/cjs/index.cjs.js +8 -8
- package/dist/cjs/{input-shims-a9a85bb9.js → input-shims-05ac9905.js} +5 -5
- package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-action-sheet.cjs.entry.js +8 -8
- package/dist/cjs/ion-alert.cjs.entry.js +7 -7
- package/dist/cjs/ion-app_8.cjs.entry.js +24 -24
- package/dist/cjs/ion-avatar_3.cjs.entry.js +6 -6
- package/dist/cjs/ion-back-button.cjs.entry.js +4 -4
- package/dist/cjs/ion-backdrop.cjs.entry.js +3 -3
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +8 -8
- package/dist/cjs/ion-button_2.cjs.entry.js +6 -6
- package/dist/cjs/ion-card_5.cjs.entry.js +10 -10
- package/dist/cjs/ion-checkbox.cjs.entry.js +3 -3
- 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 +80 -20
- package/dist/cjs/ion-fab_3.cjs.entry.js +8 -8
- package/dist/cjs/ion-img.cjs.entry.js +3 -3
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +5 -5
- package/dist/cjs/ion-input.cjs.entry.js +10 -2
- package/dist/cjs/ion-item-option_3.cjs.entry.js +6 -6
- package/dist/cjs/ion-item_8.cjs.entry.js +14 -14
- package/dist/cjs/ion-loading.cjs.entry.js +6 -6
- package/dist/cjs/ion-menu_3.cjs.entry.js +11 -11
- package/dist/cjs/ion-modal.cjs.entry.js +86 -30
- package/dist/cjs/ion-nav_2.cjs.entry.js +5 -5
- package/dist/cjs/ion-picker-column-internal.cjs.entry.js +10 -6
- package/dist/cjs/ion-picker-internal.cjs.entry.js +3 -3
- package/dist/cjs/ion-popover.cjs.entry.js +9 -9
- package/dist/cjs/ion-progress-bar.cjs.entry.js +3 -3
- package/dist/cjs/ion-radio_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-range.cjs.entry.js +128 -23
- package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +3 -3
- package/dist/cjs/ion-route_4.cjs.entry.js +4 -4
- package/dist/cjs/ion-searchbar.cjs.entry.js +31 -7
- package/dist/cjs/ion-segment_2.cjs.entry.js +7 -7
- package/dist/cjs/ion-select_3.cjs.entry.js +6 -6
- 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 +6 -6
- package/dist/cjs/ion-tab_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-text.cjs.entry.js +4 -4
- package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
- package/dist/cjs/ion-toast.cjs.entry.js +6 -6
- package/dist/cjs/ion-toggle.cjs.entry.js +2 -2
- 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-96679580.js → ios.transition-30830fc4.js} +2 -2
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-d6c98822.js → md.transition-7f581866.js} +2 -2
- package/dist/cjs/{overlays-db5d96f3.js → overlays-129dfc13.js} +62 -20
- package/dist/cjs/{status-tap-7ad5f0fb.js → status-tap-03d82840.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.js +1 -1
- 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-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/input-shims/hacks/scroll-assist.js +5 -5
- package/dist/collection/utils/overlays.js +61 -19
- package/dist/collection/utils/test/overlays/overlays.spec.js +53 -0
- package/dist/docs.json +117 -4
- 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/{hardware-back-button-b410a047.js → hardware-back-button-6107a37c.js} +5 -5
- package/dist/esm/{index-e1b622e3.js → index-6e05b96e.js} +2 -2
- package/dist/esm/{index-4c30cddd.js → index-a1a47f01.js} +51 -7
- package/dist/esm/{index-348ed70a.js → index-fae1515c.js} +3 -3
- package/dist/esm/index.js +8 -8
- package/dist/esm/{input-shims-5329bbe8.js → input-shims-a52daa3a.js} +5 -5
- package/dist/esm/ion-accordion_2.entry.js +2 -2
- package/dist/esm/ion-action-sheet.entry.js +8 -8
- package/dist/esm/ion-alert.entry.js +7 -7
- package/dist/esm/ion-app_8.entry.js +24 -24
- package/dist/esm/ion-avatar_3.entry.js +6 -6
- package/dist/esm/ion-back-button.entry.js +4 -4
- package/dist/esm/ion-backdrop.entry.js +3 -3
- package/dist/esm/ion-breadcrumb_2.entry.js +8 -8
- package/dist/esm/ion-button_2.entry.js +6 -6
- package/dist/esm/ion-card_5.entry.js +10 -10
- package/dist/esm/ion-checkbox.entry.js +3 -3
- 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 +80 -20
- package/dist/esm/ion-fab_3.entry.js +8 -8
- package/dist/esm/ion-img.entry.js +3 -3
- package/dist/esm/ion-infinite-scroll_2.entry.js +5 -5
- package/dist/esm/ion-input.entry.js +10 -2
- package/dist/esm/ion-item-option_3.entry.js +6 -6
- package/dist/esm/ion-item_8.entry.js +14 -14
- package/dist/esm/ion-loading.entry.js +6 -6
- package/dist/esm/ion-menu_3.entry.js +11 -11
- package/dist/esm/ion-modal.entry.js +86 -30
- package/dist/esm/ion-nav_2.entry.js +5 -5
- package/dist/esm/ion-picker-column-internal.entry.js +10 -6
- package/dist/esm/ion-picker-internal.entry.js +3 -3
- package/dist/esm/ion-popover.entry.js +9 -9
- package/dist/esm/ion-progress-bar.entry.js +3 -3
- package/dist/esm/ion-radio_2.entry.js +3 -3
- package/dist/esm/ion-range.entry.js +128 -23
- package/dist/esm/ion-refresher_2.entry.js +4 -4
- package/dist/esm/ion-reorder_2.entry.js +4 -4
- package/dist/esm/ion-ripple-effect.entry.js +3 -3
- package/dist/esm/ion-route_4.entry.js +4 -4
- package/dist/esm/ion-searchbar.entry.js +32 -8
- package/dist/esm/ion-segment_2.entry.js +7 -7
- package/dist/esm/ion-select_3.entry.js +6 -6
- 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 +6 -6
- package/dist/esm/ion-tab_2.entry.js +4 -4
- package/dist/esm/ion-text.entry.js +4 -4
- package/dist/esm/ion-textarea.entry.js +2 -2
- package/dist/esm/ion-toast.entry.js +6 -6
- package/dist/esm/ion-toggle.entry.js +2 -2
- 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-7459f819.js → ios.transition-a50a9a55.js} +2 -2
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-b8224313.js → md.transition-0da92976.js} +2 -2
- package/dist/esm/{overlays-19b26885.js → overlays-b874c3c3.js} +62 -20
- package/dist/esm/{status-tap-b41ece3c.js → status-tap-dfea3607.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/framework-delegate-ed4ba327.js +2 -2
- package/dist/esm-es5/hardware-back-button-6107a37c.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-348ed70a.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/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-7459f819.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/overlays-b874c3c3.js +4 -0
- package/dist/esm-es5/{status-tap-b41ece3c.js → status-tap-dfea3607.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-05253db9.js → p-0047bd0e.js} +1 -1
- package/dist/ionic/{p-ebc86ce9.system.entry.js → p-01a1ff55.system.entry.js} +1 -1
- package/dist/ionic/{p-2178329b.entry.js → p-01de45e4.entry.js} +1 -1
- package/dist/ionic/{p-125f8cdd.system.js → p-0609a7d8.system.js} +1 -1
- package/dist/ionic/{p-cfb4d7e0.js → p-08ab4c96.js} +1 -1
- package/dist/ionic/{p-76b8bcb8.system.entry.js → p-094cb5ba.system.entry.js} +1 -1
- package/dist/ionic/{p-6812d37d.js → p-0aac3a1c.js} +1 -1
- package/dist/ionic/{p-de55ec45.js → p-0b743628.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-1cd372ed.js +4 -0
- package/dist/ionic/{p-a6c0a380.js → p-1e151efb.js} +1 -1
- package/dist/ionic/{p-7f30ad48.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-2c1408df.system.js +5 -0
- package/dist/ionic/p-2e2808f3.entry.js +4 -0
- package/dist/ionic/{p-70fbf4e2.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-6e23d039.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-02542247.system.entry.js → p-3b9edd02.system.entry.js} +1 -1
- package/dist/ionic/{p-d143fefa.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-47686f0a.system.entry.js +4 -0
- package/dist/ionic/{p-18918a24.system.entry.js → p-47d7ffb4.system.entry.js} +1 -1
- package/dist/ionic/{p-7e838f43.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-b0aa3806.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-5de920f4.system.entry.js → p-4f9018d4.system.entry.js} +1 -1
- package/dist/ionic/{p-baf8eeac.system.entry.js → p-55ae3e14.system.entry.js} +1 -1
- package/dist/ionic/{p-9de75bac.system.entry.js → p-56271222.system.entry.js} +1 -1
- package/dist/ionic/{p-80aed9fb.system.entry.js → p-565a12d7.system.entry.js} +1 -1
- package/dist/ionic/{p-7e16220b.entry.js → p-56b810d5.entry.js} +1 -1
- package/dist/ionic/{p-a85d9047.system.entry.js → p-5a0345f7.system.entry.js} +1 -1
- package/dist/ionic/{p-f0e54781.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-4b8a620f.system.entry.js → p-625ef2fb.system.entry.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-91f4e611.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 +2 -2
- package/dist/ionic/{p-abcedc15.system.entry.js → p-6b178502.system.entry.js} +1 -1
- package/dist/ionic/{p-2c86025e.system.js → p-6ecddf53.system.js} +1 -1
- package/dist/ionic/{p-822730c4.entry.js → p-70929384.entry.js} +1 -1
- package/dist/ionic/p-73d70509.system.js +4 -0
- package/dist/ionic/{p-c1a871ff.system.entry.js → p-776f7b9e.system.entry.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-b27bba38.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-2765a571.system.entry.js → p-8a335b91.system.entry.js} +1 -1
- package/dist/ionic/{p-479f5926.system.entry.js → p-8eba832c.system.entry.js} +1 -1
- package/dist/ionic/{p-b58686e0.entry.js → p-8ed4de58.entry.js} +1 -1
- package/dist/ionic/{p-a02ea777.entry.js → p-917bb906.entry.js} +1 -1
- package/dist/ionic/{p-ae2b3a7a.system.entry.js → p-93f86b06.system.entry.js} +1 -1
- package/dist/ionic/p-9625a2e6.entry.js +4 -0
- package/dist/ionic/{p-288649db.system.entry.js → p-9bc8bd0c.system.entry.js} +1 -1
- package/dist/ionic/{p-6f59cdbc.system.entry.js → p-9d53b773.system.entry.js} +2 -2
- package/dist/ionic/{p-dff97cfa.entry.js → p-9fbfbaef.entry.js} +1 -1
- package/dist/ionic/p-a04ecf1a.system.js +4 -0
- package/dist/ionic/{p-9998cb62.system.entry.js → p-a3b2d4a7.system.entry.js} +2 -2
- package/dist/ionic/{p-973b4db3.entry.js → p-a5cd2e1f.entry.js} +1 -1
- package/dist/ionic/p-a5d9fafe.entry.js +4 -0
- 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-c7288e78.system.entry.js → p-b1bebf4a.system.entry.js} +1 -1
- 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-c379d010.system.entry.js +4 -0
- package/dist/ionic/{p-ce1c0a0e.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-2c4bfe1c.entry.js → p-cc0cf2d1.entry.js} +1 -1
- package/dist/ionic/{p-15a40a0b.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-079da3df.entry.js → p-dbd77435.entry.js} +1 -1
- package/dist/ionic/p-dc2d302c.entry.js +4 -0
- package/dist/ionic/{p-7670acd8.entry.js → p-dd2996cf.entry.js} +1 -1
- package/dist/ionic/{p-4788693d.entry.js → p-dec423a3.entry.js} +1 -1
- package/dist/ionic/{p-2ea71956.system.entry.js → p-deeae694.system.entry.js} +1 -1
- package/dist/ionic/p-e06d65b3.system.entry.js +4 -0
- package/dist/ionic/{p-cbcffe6e.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-437f4d02.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-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-bcd9cad8.system.js → p-f4fb429a.system.js} +1 -1
- package/dist/ionic/p-f549716b.system.js +4 -0
- package/dist/ionic/p-f6a50d5c.entry.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-e4e74b5f.system.entry.js → p-fdcf1482.system.entry.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/keyboard/keyboard-controller.d.ts +1 -1
- package/dist/types/utils/overlays.d.ts +2 -2
- package/hydrate/index.js +667 -316
- 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/hardware-back-button-b410a047.js +0 -4
- package/dist/esm-es5/index-4c30cddd.js +0 -5
- package/dist/esm-es5/index-e1b622e3.js +0 -4
- package/dist/esm-es5/input-shims-5329bbe8.js +0 -4
- package/dist/esm-es5/md.transition-b8224313.js +0 -4
- package/dist/esm-es5/overlays-19b26885.js +0 -4
- package/dist/ionic/p-021f9d72.entry.js +0 -4
- package/dist/ionic/p-02ad4bbe.js +0 -4
- package/dist/ionic/p-0b34d3a7.system.js +0 -4
- package/dist/ionic/p-12527c4b.entry.js +0 -4
- package/dist/ionic/p-1846513c.js +0 -4
- package/dist/ionic/p-1a680496.entry.js +0 -4
- package/dist/ionic/p-1f16d040.entry.js +0 -4
- package/dist/ionic/p-257046d2.system.js +0 -4
- package/dist/ionic/p-262024fd.entry.js +0 -4
- package/dist/ionic/p-2fd3c3dd.entry.js +0 -4
- package/dist/ionic/p-337ac0f5.entry.js +0 -4
- package/dist/ionic/p-36be3332.js +0 -4
- package/dist/ionic/p-482ea916.system.entry.js +0 -4
- package/dist/ionic/p-49f481cc.system.entry.js +0 -4
- package/dist/ionic/p-521b3971.entry.js +0 -4
- package/dist/ionic/p-644d03d7.system.entry.js +0 -4
- package/dist/ionic/p-6b6ca3f5.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-741a0f0d.system.entry.js +0 -4
- package/dist/ionic/p-7a615a5a.entry.js +0 -4
- package/dist/ionic/p-84b85535.entry.js +0 -4
- package/dist/ionic/p-85f66c3c.entry.js +0 -4
- package/dist/ionic/p-860e2539.system.entry.js +0 -4
- package/dist/ionic/p-8cc34120.entry.js +0 -4
- package/dist/ionic/p-9056778e.system.entry.js +0 -4
- package/dist/ionic/p-96084f36.entry.js +0 -4
- package/dist/ionic/p-97ca0cb9.system.js +0 -4
- package/dist/ionic/p-98aa0553.entry.js +0 -4
- package/dist/ionic/p-a1222c24.entry.js +0 -4
- package/dist/ionic/p-a4aa6dd2.system.entry.js +0 -4
- package/dist/ionic/p-a8459bfb.entry.js +0 -4
- package/dist/ionic/p-ae828bd9.system.entry.js +0 -4
- package/dist/ionic/p-b4d2f43c.system.js +0 -4
- package/dist/ionic/p-b727af6a.entry.js +0 -4
- package/dist/ionic/p-ba0fbecc.entry.js +0 -4
- package/dist/ionic/p-c1c7309e.entry.js +0 -4
- package/dist/ionic/p-cb3065b8.entry.js +0 -4
- package/dist/ionic/p-cb9812f7.entry.js +0 -4
- package/dist/ionic/p-d425b1de.entry.js +0 -4
- package/dist/ionic/p-d6c6541b.system.entry.js +0 -4
- package/dist/ionic/p-e1c52dc6.entry.js +0 -4
- package/dist/ionic/p-e626800f.system.entry.js +0 -4
- package/dist/ionic/p-e94c1402.entry.js +0 -4
- package/dist/ionic/p-ed4760ef.entry.js +0 -4
- package/dist/ionic/p-ed7a529f.js +0 -5
- package/dist/ionic/p-f02c41af.system.js +0 -4
- package/dist/ionic/p-f7dce541.js +0 -4
- package/dist/ionic/p-fa8d3b01.entry.js +0 -4
|
@@ -68,3 +68,80 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, screenshot, c
|
|
|
68
68
|
});
|
|
69
69
|
});
|
|
70
70
|
});
|
|
71
|
+
/**
|
|
72
|
+
* This test only impacts MD applications
|
|
73
|
+
*/
|
|
74
|
+
configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
75
|
+
test.describe(title('header: translucent'), () => {
|
|
76
|
+
test('should not hide MD headers when using a descendant iOS header in an MD app', async ({ page }) => {
|
|
77
|
+
test.info().annotations.push({
|
|
78
|
+
type: 'issue',
|
|
79
|
+
description: 'https://github.com/ionic-team/ionic-framework/issues/28867',
|
|
80
|
+
});
|
|
81
|
+
await page.setContent(`
|
|
82
|
+
<ion-header id="main-header">
|
|
83
|
+
<ion-toolbar>
|
|
84
|
+
<ion-title>Header</ion-title>
|
|
85
|
+
</ion-toolbar>
|
|
86
|
+
</ion-header>
|
|
87
|
+
<ion-content>
|
|
88
|
+
<ion-header collapse="condense">
|
|
89
|
+
<ion-toolbar>
|
|
90
|
+
<ion-title size="large">Header</ion-title>
|
|
91
|
+
</ion-toolbar>
|
|
92
|
+
</ion-header>
|
|
93
|
+
|
|
94
|
+
<ion-header mode="ios">
|
|
95
|
+
<ion-toolbar>
|
|
96
|
+
<ion-title>Welcome</ion-title>
|
|
97
|
+
</ion-toolbar>
|
|
98
|
+
</ion-header>
|
|
99
|
+
</ion-content>
|
|
100
|
+
`, config);
|
|
101
|
+
const header = page.locator('ion-header#main-header');
|
|
102
|
+
/**
|
|
103
|
+
* The existence of the iOS header in an MD app should not cause the main MD header
|
|
104
|
+
* to be hidden. We do not have toHaveVisible because the behavior that hides
|
|
105
|
+
* the header under correct circumstances does it using opacity: 0.
|
|
106
|
+
* Playwright considers an element with opacity: 0 to still be visible
|
|
107
|
+
* because it has a non-zero bounding box.
|
|
108
|
+
*/
|
|
109
|
+
await expect(header).toHaveScreenshot(screenshot('header-md-visibility-ios-descendant'));
|
|
110
|
+
});
|
|
111
|
+
test('should not hide MD headers when using a root iOS header in an MD app', async ({ page }) => {
|
|
112
|
+
test.info().annotations.push({
|
|
113
|
+
type: 'issue',
|
|
114
|
+
description: 'https://github.com/ionic-team/ionic-framework/issues/28867',
|
|
115
|
+
});
|
|
116
|
+
await page.setContent(`
|
|
117
|
+
<ion-header id="main-header" mode="ios">
|
|
118
|
+
<ion-toolbar>
|
|
119
|
+
<ion-title>Header</ion-title>
|
|
120
|
+
</ion-toolbar>
|
|
121
|
+
</ion-header>
|
|
122
|
+
<ion-content>
|
|
123
|
+
<ion-header collapse="condense">
|
|
124
|
+
<ion-toolbar>
|
|
125
|
+
<ion-title size="large">Header</ion-title>
|
|
126
|
+
</ion-toolbar>
|
|
127
|
+
</ion-header>
|
|
128
|
+
|
|
129
|
+
<ion-header>
|
|
130
|
+
<ion-toolbar>
|
|
131
|
+
<ion-title>Welcome</ion-title>
|
|
132
|
+
</ion-toolbar>
|
|
133
|
+
</ion-header>
|
|
134
|
+
</ion-content>
|
|
135
|
+
`, config);
|
|
136
|
+
const header = page.locator('ion-header#main-header');
|
|
137
|
+
/**
|
|
138
|
+
* The existence of the iOS header in an MD app should not cause the main MD header
|
|
139
|
+
* to be hidden. We do not have toHaveVisible because the behavior that hides
|
|
140
|
+
* the header under correct circumstances does it using opacity: 0.
|
|
141
|
+
* Playwright considers an element with opacity: 0 to still be visible
|
|
142
|
+
* because it has a non-zero bounding box.
|
|
143
|
+
*/
|
|
144
|
+
await expect(header).toHaveScreenshot(screenshot('header-md-visibility-ios-main'));
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
});
|
|
@@ -71,7 +71,7 @@ export class Img {
|
|
|
71
71
|
render() {
|
|
72
72
|
const { loadSrc, alt, onLoad, loadError, inheritedAttributes } = this;
|
|
73
73
|
const { draggable } = inheritedAttributes;
|
|
74
|
-
return (h(Host, { key: '
|
|
74
|
+
return (h(Host, { key: 'efff4d1bd0e54dbeff140c137eb50b803a9f6f60', class: getIonMode(this) }, h("img", { key: '3a1e0276ae67a7e40ec8c4ecd0061634573b2094', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
|
|
75
75
|
}
|
|
76
76
|
static get is() { return "ion-img"; }
|
|
77
77
|
static get encapsulation() { return "shadow"; }
|
|
@@ -167,7 +167,7 @@ export class InfiniteScroll {
|
|
|
167
167
|
render() {
|
|
168
168
|
const mode = getIonMode(this);
|
|
169
169
|
const disabled = this.disabled;
|
|
170
|
-
return (h(Host, { key: '
|
|
170
|
+
return (h(Host, { key: 'c2248d06232dd7771dd155693ec75f9258dc969e', class: {
|
|
171
171
|
[mode]: true,
|
|
172
172
|
'infinite-scroll-loading': this.isLoading,
|
|
173
173
|
'infinite-scroll-enabled': !disabled,
|
|
@@ -27,11 +27,11 @@ export class InfiniteScrollContent {
|
|
|
27
27
|
}
|
|
28
28
|
render() {
|
|
29
29
|
const mode = getIonMode(this);
|
|
30
|
-
return (h(Host, { key: '
|
|
30
|
+
return (h(Host, { key: '2f4afb07bcfe3e12528eb9cee8646a097e0b359f', class: {
|
|
31
31
|
[mode]: true,
|
|
32
32
|
// Used internally for styling
|
|
33
33
|
[`infinite-scroll-content-${mode}`]: true,
|
|
34
|
-
} }, h("div", { key: '
|
|
34
|
+
} }, h("div", { key: 'af038177bf10c88c8970682487a4328689aaa5f2', class: "infinite-loading" }, this.loadingSpinner && (h("div", { key: '1da5d419bc6a978b6a509fdab47dae347fc8d221', class: "infinite-loading-spinner" }, h("ion-spinner", { key: '60cc5c64e0a317ac0005d5afe42c4bb8da58136f', name: this.loadingSpinner }))), this.loadingText !== undefined && this.renderLoadingText())));
|
|
35
35
|
}
|
|
36
36
|
static get is() { return "ion-infinite-scroll-content"; }
|
|
37
37
|
static get originalStyleUrls() {
|
|
@@ -429,6 +429,14 @@ export class Input {
|
|
|
429
429
|
* button is activated.
|
|
430
430
|
*/
|
|
431
431
|
ev.preventDefault();
|
|
432
|
+
}, onFocusin: (ev) => {
|
|
433
|
+
/**
|
|
434
|
+
* Prevent the focusin event from bubbling otherwise it will cause the focusin
|
|
435
|
+
* event listener in scroll assist to fire. When this fires, focus will be moved
|
|
436
|
+
* back to the input even if the clear button was never tapped. This poses issues
|
|
437
|
+
* for screen readers as it means users would be unable to swipe past the clear button.
|
|
438
|
+
*/
|
|
439
|
+
ev.stopPropagation();
|
|
432
440
|
}, onClick: this.clearTextInput }, h("ion-icon", { "aria-hidden": "true", icon: mode === 'ios' ? closeCircle : closeSharp }))), h("slot", { name: "end" })), shouldRenderHighlight && h("div", { class: "input-highlight" })), this.renderBottomContent()));
|
|
433
441
|
}
|
|
434
442
|
// TODO FW-2764 Remove this
|
|
@@ -269,7 +269,7 @@ export class Item {
|
|
|
269
269
|
'ion-activatable': canActivate,
|
|
270
270
|
'ion-focusable': this.focusable,
|
|
271
271
|
'item-rtl': document.dir === 'rtl',
|
|
272
|
-
})), role: inList ? 'listitem' : null }, h(TagType, Object.assign({ key: '1f9e61b627fc94d646cccbfd8be24df745080c2c' }, attrs, inheritedAriaAttributes, { class: "item-native", part: "native", disabled: disabled }, clickFn), h("slot", { key: '6690445e14e6f0614beae23b6cc2a2b9cd668934', name: "start" }), h("div", { key: 'cc36ee6ad3f3c04b7fe907f7c63e81fa43938b28', class: "item-inner" }, h("div", { key: '502eff7a3d237fa5658e505b3d2f74cdfdef16af', class: "input-wrapper" }, h("slot", { key: '750d23dcab6844acb92c9636f21dff04c91d2b22' })), h("slot", { key: 'ed16f6bce4ea5a76a181597b879f9bb55c909612', name: "end" }), showDetail && (h("ion-icon", { icon: detailIcon, lazy: false, class: "item-detail-icon", part: "detail-icon", "aria-hidden": "true", "flip-rtl": detailIcon === chevronForward })), h("div", { key: '
|
|
272
|
+
})), role: inList ? 'listitem' : null }, h(TagType, Object.assign({ key: '1f9e61b627fc94d646cccbfd8be24df745080c2c' }, attrs, inheritedAriaAttributes, { class: "item-native", part: "native", disabled: disabled }, clickFn), h("slot", { key: '6690445e14e6f0614beae23b6cc2a2b9cd668934', name: "start" }), h("div", { key: 'cc36ee6ad3f3c04b7fe907f7c63e81fa43938b28', class: "item-inner" }, h("div", { key: '502eff7a3d237fa5658e505b3d2f74cdfdef16af', class: "input-wrapper" }, h("slot", { key: '750d23dcab6844acb92c9636f21dff04c91d2b22' })), h("slot", { key: 'ed16f6bce4ea5a76a181597b879f9bb55c909612', name: "end" }), showDetail && (h("ion-icon", { key: '95f5b05d1e409dbb7637f68313898d01a7321a15', icon: detailIcon, lazy: false, class: "item-detail-icon", part: "detail-icon", "aria-hidden": "true", "flip-rtl": detailIcon === chevronForward })), h("div", { key: '8074c0486bf0b72a4503f55dcb4a1fa8da310899', class: "item-inner-highlight" })), canActivate && mode === 'md' && h("ion-ripple-effect", { key: '7b2362cdcf8aaf8791f12d3f0b4aa1198d2b4961' }), h("div", { key: 'e82c247286a9dcd1cf6e839b6e95434de175146b', class: "item-highlight" })), h("div", { key: '37524cfdb3518f1f2a958eae4b49977a1199ba3d', class: "item-bottom" }, h("slot", { key: '3643138f87985649e8ee32e099f4b592a45c4712', name: "error" }), h("slot", { key: '0ce71b7fae1256290da625d0d70ac2ff69425247', name: "helper" }), counterString && h("ion-note", { key: '4549ec01076ae1fe959bb88cafa24528444919a1', class: "item-counter" }, counterString))));
|
|
273
273
|
}
|
|
274
274
|
static get is() { return "ion-item"; }
|
|
275
275
|
static get encapsulation() { return "shadow"; }
|
|
@@ -18,12 +18,28 @@ configs().forEach(({ title, screenshot, config }) => {
|
|
|
18
18
|
});
|
|
19
19
|
});
|
|
20
20
|
});
|
|
21
|
-
configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
21
|
+
configs({ directions: ['ltr'], themes: ['dark'] }).forEach(({ title, screenshot, config }) => {
|
|
22
22
|
test.describe(title('item: buttons dark'), () => {
|
|
23
23
|
test('should not have visual regressions in dark', async ({ page }) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
test.info().annotations.push({
|
|
25
|
+
type: 'issue',
|
|
26
|
+
description: 'https://github.com/ionic-team/ionic-framework/issues/27130',
|
|
27
|
+
});
|
|
28
|
+
await page.setContent(`
|
|
29
|
+
<ion-list>
|
|
30
|
+
<ion-item button="true">
|
|
31
|
+
<ion-label>Button Item</ion-label>
|
|
32
|
+
</ion-item>
|
|
33
|
+
<ion-item button="true" class="ion-activated">
|
|
34
|
+
<ion-label>Activated Button Item</ion-label>
|
|
35
|
+
</ion-item>
|
|
36
|
+
<ion-item button="true" class="ion-focused">
|
|
37
|
+
<ion-label>Focused Button Item</ion-label>
|
|
38
|
+
</ion-item>
|
|
39
|
+
</ion-list>
|
|
40
|
+
`, config);
|
|
41
|
+
const list = page.locator('ion-list');
|
|
42
|
+
await expect(list).toHaveScreenshot(screenshot(`item-buttons-dark-diff`));
|
|
27
43
|
});
|
|
28
44
|
});
|
|
29
45
|
});
|
|
@@ -18,11 +18,11 @@ export class ItemDivider {
|
|
|
18
18
|
}
|
|
19
19
|
render() {
|
|
20
20
|
const mode = getIonMode(this);
|
|
21
|
-
return (h(Host, { key: '
|
|
21
|
+
return (h(Host, { key: '5727179159ef2a8879f55435265003e0ec72df3f', class: createColorClasses(this.color, {
|
|
22
22
|
[mode]: true,
|
|
23
23
|
'item-divider-sticky': this.sticky,
|
|
24
24
|
item: true,
|
|
25
|
-
}) }, h("slot", { key: '
|
|
25
|
+
}) }, h("slot", { key: 'bb7df137e60ca3fa9a50c612e30fbb3ee4c818ad', name: "start" }), h("div", { key: '6a25a01271957cfdd8e8dfb6ef76e1eb710380f2', class: "item-divider-inner" }, h("div", { key: '554ba681b0f346ed0af03232f8b2e6ca399877d9', class: "item-divider-wrapper" }, h("slot", { key: 'f98e20a01f09d0a2e19b7351eb1b4028881a07ab' })), h("slot", { key: '755643b5b8d3463af41b3d0805871073a34386a3', name: "end" }))));
|
|
26
26
|
}
|
|
27
27
|
static get is() { return "ion-item-divider"; }
|
|
28
28
|
static get encapsulation() { return "shadow"; }
|
|
@@ -6,7 +6,7 @@ import { getIonMode } from "../../global/ionic-global";
|
|
|
6
6
|
export class ItemGroup {
|
|
7
7
|
render() {
|
|
8
8
|
const mode = getIonMode(this);
|
|
9
|
-
return (h(Host, { key: '
|
|
9
|
+
return (h(Host, { key: '5778fb7e9c6791874b4ff14f0babdae715e322e7', role: "group", class: {
|
|
10
10
|
[mode]: true,
|
|
11
11
|
// Used internally for styling
|
|
12
12
|
[`item-group-${mode}`]: true,
|
|
@@ -44,12 +44,12 @@ export class ItemOption {
|
|
|
44
44
|
href: this.href,
|
|
45
45
|
target: this.target,
|
|
46
46
|
};
|
|
47
|
-
return (h(Host, { key: '
|
|
47
|
+
return (h(Host, { key: '763c3a7571b143d1068d85103ccab403bc48abae', onClick: this.onClick, class: createColorClasses(this.color, {
|
|
48
48
|
[mode]: true,
|
|
49
49
|
'item-option-disabled': disabled,
|
|
50
50
|
'item-option-expandable': expandable,
|
|
51
51
|
'ion-activatable': true,
|
|
52
|
-
}) }, h(TagType, Object.assign({ key: '
|
|
52
|
+
}) }, h(TagType, Object.assign({ key: 'cb199c2ccd38abaad3460f184af3093bf08546cc' }, attrs, { class: "button-native", part: "native", disabled: disabled }), h("span", { key: 'f3ce9f1d343890c6f55f2609127f1e5113a2eedf', class: "button-inner" }, h("slot", { key: 'cd9434883c0bdb4129fb6f49970d49710653a09a', name: "top" }), h("div", { key: '764529c5f4b3d82105ce55885e8f121a91e8bc4a', class: "horizontal-wrapper" }, h("slot", { key: '5bbd7b9ed9f35c8bf422c3134a1a097e174ad6df', name: "start" }), h("slot", { key: '1e70a781cdf4ffcefb1dea70abe43655d7857c4b', name: "icon-only" }), h("slot", { key: 'c3205e9b1577a56786c10a8b5b420010b5fe53fc' }), h("slot", { key: '6bae6c98cd8d8526a203af47ca8e83753e1e1cb6', name: "end" })), h("slot", { key: '466cc32cdf9cbbdbb58e4b29144215cf2984c0d6', name: "bottom" })), mode === 'md' && h("ion-ripple-effect", { key: 'b5c54b801008b307ca8f718a41101be3e8d1d938' }))));
|
|
53
53
|
}
|
|
54
54
|
static get is() { return "ion-item-option"; }
|
|
55
55
|
static get encapsulation() { return "shadow"; }
|
|
@@ -17,7 +17,7 @@ export class ItemOptions {
|
|
|
17
17
|
render() {
|
|
18
18
|
const mode = getIonMode(this);
|
|
19
19
|
const isEnd = isEndSide(this.side);
|
|
20
|
-
return (h(Host, { key: '
|
|
20
|
+
return (h(Host, { key: '3dca0415ec2942ac8e87a057e26bcb290a892f65', class: {
|
|
21
21
|
[mode]: true,
|
|
22
22
|
// Used internally for styling
|
|
23
23
|
[`item-options-${mode}`]: true,
|
|
@@ -386,7 +386,7 @@ export class ItemSliding {
|
|
|
386
386
|
}
|
|
387
387
|
render() {
|
|
388
388
|
const mode = getIonMode(this);
|
|
389
|
-
return (h(Host, { key: '
|
|
389
|
+
return (h(Host, { key: '7f191e38bf717e6ccb246aa7b9fbd29d01e64677', class: {
|
|
390
390
|
[mode]: true,
|
|
391
391
|
'item-sliding-active-slide': this.state !== 2 /* SlidingState.Disabled */,
|
|
392
392
|
'item-sliding-active-options-end': (this.state & 8 /* SlidingState.End */) !== 0,
|
|
@@ -55,7 +55,7 @@ export class Label {
|
|
|
55
55
|
render() {
|
|
56
56
|
const position = this.position;
|
|
57
57
|
const mode = getIonMode(this);
|
|
58
|
-
return (h(Host, { key: '
|
|
58
|
+
return (h(Host, { key: '72ad4ba5c1137ae0130e421346668e436ea53bf8', class: createColorClasses(this.color, {
|
|
59
59
|
[mode]: true,
|
|
60
60
|
'in-item-color': hostContext('ion-item.ion-color', this.el),
|
|
61
61
|
[`label-${position}`]: position !== undefined,
|
|
@@ -27,7 +27,7 @@ export class List {
|
|
|
27
27
|
render() {
|
|
28
28
|
const mode = getIonMode(this);
|
|
29
29
|
const { lines, inset } = this;
|
|
30
|
-
return (h(Host, { key: '
|
|
30
|
+
return (h(Host, { key: '3df401155114c7a39c81f201bf8a181d07e8d4c8', role: "list", class: {
|
|
31
31
|
[mode]: true,
|
|
32
32
|
// Used internally for styling
|
|
33
33
|
[`list-${mode}`]: true,
|
|
@@ -15,10 +15,10 @@ export class ListHeader {
|
|
|
15
15
|
render() {
|
|
16
16
|
const { lines } = this;
|
|
17
17
|
const mode = getIonMode(this);
|
|
18
|
-
return (h(Host, { key: '
|
|
18
|
+
return (h(Host, { key: 'e5fabb3ae91e6fe47c89273d1d2dba5902f77f94', class: createColorClasses(this.color, {
|
|
19
19
|
[mode]: true,
|
|
20
20
|
[`list-header-lines-${lines}`]: lines !== undefined,
|
|
21
|
-
}) }, h("div", { key: '
|
|
21
|
+
}) }, h("div", { key: 'a9cfdaa436267fbabb0d618c3932849c1b77fbd2', class: "list-header-inner" }, h("slot", { key: '8ed806fd58f8f2265c5bf466886086e88ada93cc' }))));
|
|
22
22
|
}
|
|
23
23
|
static get is() { return "ion-list-header"; }
|
|
24
24
|
static get encapsulation() { return "shadow"; }
|
|
@@ -158,9 +158,9 @@ export class Loading {
|
|
|
158
158
|
* Otherwise, don't set aria-labelledby.
|
|
159
159
|
*/
|
|
160
160
|
const ariaLabelledBy = message !== undefined ? msgId : null;
|
|
161
|
-
return (h(Host, Object.assign({ key: '
|
|
161
|
+
return (h(Host, Object.assign({ key: 'e780853dc67b7b4ebd8dd65cadab648e4238c6ee', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
|
|
162
162
|
zIndex: `${40000 + this.overlayIndex}`,
|
|
163
|
-
}, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: '
|
|
163
|
+
}, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: '8cd59ca7bc97b981fd578a526dfe859847e4d392', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: 'ef392aaf2cb7f6f9cecc685525cce3abc333e800', tabindex: "0" }), h("div", { key: 'f1f6df21a7fa6565fe33acb4a5f355b5ec3e65b2', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: '725cf5a206152885e31ab061b0c466fe1ead0225', class: "loading-spinner" }, h("ion-spinner", { key: '5891dc39fa133b71576aec219f552386b202e163', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: '8103269f1181325a507ed1c681f5ef15e40fbc34', tabindex: "0" })));
|
|
164
164
|
}
|
|
165
165
|
static get is() { return "ion-loading"; }
|
|
166
166
|
static get encapsulation() { return "scoped"; }
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { Build, Host, h } from "@stencil/core";
|
|
5
5
|
import { getTimeGivenProgression } from "../../utils/animation/cubic-bezier";
|
|
6
6
|
import { GESTURE_CONTROLLER } from "../../utils/gesture/index";
|
|
7
|
-
import {
|
|
7
|
+
import { shouldUseCloseWatcher } from "../../utils/hardware-back-button";
|
|
8
8
|
import { inheritAriaAttributes, assert, clamp, isEndSide as isEnd } from "../../utils/helpers";
|
|
9
9
|
import { menuController } from "../../utils/menu-controller/index";
|
|
10
10
|
import { getPresentedOverlay } from "../../utils/overlays";
|
|
@@ -601,13 +601,13 @@ export class Menu {
|
|
|
601
601
|
* the ionBackButton listener in the menu controller
|
|
602
602
|
* will handle closing the menu when Escape is pressed.
|
|
603
603
|
*/
|
|
604
|
-
return (h(Host, { key: '
|
|
604
|
+
return (h(Host, { key: '7443f67fbe5122052025bab862136044fc942401', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
|
|
605
605
|
[mode]: true,
|
|
606
606
|
[`menu-type-${type}`]: true,
|
|
607
607
|
'menu-enabled': !disabled,
|
|
608
608
|
[`menu-side-${side}`]: true,
|
|
609
609
|
'menu-pane-visible': isPaneVisible,
|
|
610
|
-
} }, h("div", { key: '
|
|
610
|
+
} }, h("div", { key: '45c7d37ace20f663a4bea89cb38bbc798f88dfbd', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: '975437a5d4029cc200b6dbc2d47a16b4318c00aa' })), h("ion-backdrop", { key: 'acc8a1f5dc1b1e2a34757bf797e794017f545bdc', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
|
|
611
611
|
}
|
|
612
612
|
static get is() { return "ion-menu"; }
|
|
613
613
|
static get encapsulation() { return "shadow"; }
|
|
@@ -46,7 +46,7 @@ export class MenuButton {
|
|
|
46
46
|
type: this.type,
|
|
47
47
|
};
|
|
48
48
|
const ariaLabel = inheritedAttributes['aria-label'] || 'menu';
|
|
49
|
-
return (h(Host, { key: '
|
|
49
|
+
return (h(Host, { key: '7a4543dfcbf559f0d3a473683f8e0bd1d4c3542a', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, "aria-hidden": hidden ? 'true' : null, class: createColorClasses(color, {
|
|
50
50
|
[mode]: true,
|
|
51
51
|
button: true, // ion-buttons target .button
|
|
52
52
|
'menu-button-hidden': hidden,
|
|
@@ -55,7 +55,7 @@ export class MenuButton {
|
|
|
55
55
|
'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
|
|
56
56
|
'ion-activatable': true,
|
|
57
57
|
'ion-focusable': true,
|
|
58
|
-
}) }, h("button", Object.assign({ key: '
|
|
58
|
+
}) }, h("button", Object.assign({ key: '2b6944dc130fa765ac7559077254555583529ec3' }, attrs, { disabled: disabled, class: "button-native", part: "native", "aria-label": ariaLabel }), h("span", { key: 'b4d1006bec8c9e761c64ae3e2fb64848dfc30307', class: "button-inner" }, h("slot", { key: 'eaf1d57cd2e841c70095821576c52062dc76500b' }, h("ion-icon", { key: '105ddb806aae2e6add6cb3989fd4a5cf5ee7d952', part: "icon", icon: menuIcon, mode: mode, lazy: false, "aria-hidden": "true" }))), mode === 'md' && h("ion-ripple-effect", { key: '8a312aab747de2bdd6adee74fb0bfcbbde12c191', type: "unbounded" }))));
|
|
59
59
|
}
|
|
60
60
|
static get is() { return "ion-menu-button"; }
|
|
61
61
|
static get encapsulation() { return "shadow"; }
|
|
@@ -26,10 +26,10 @@ export class MenuToggle {
|
|
|
26
26
|
render() {
|
|
27
27
|
const mode = getIonMode(this);
|
|
28
28
|
const hidden = this.autoHide && !this.visible;
|
|
29
|
-
return (h(Host, { key: '
|
|
29
|
+
return (h(Host, { key: '94a0815a634c6fb1991854bfbcf5b2b4b61d7710', onClick: this.onClick, "aria-hidden": hidden ? 'true' : null, class: {
|
|
30
30
|
[mode]: true,
|
|
31
31
|
'menu-toggle-hidden': hidden,
|
|
32
|
-
} }, h("slot", { key: '
|
|
32
|
+
} }, h("slot", { key: 'f3ac6d17d5421390ab05f3f31ad00ec4f2ca5c7c' })));
|
|
33
33
|
}
|
|
34
34
|
static get is() { return "ion-menu-toggle"; }
|
|
35
35
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
+
import { isIonContent, findClosestIonContent } from "../../../utils/content/index";
|
|
4
5
|
import { createGesture } from "../../../utils/gesture/index";
|
|
5
|
-
import { clamp, raf } from "../../../utils/helpers";
|
|
6
|
+
import { clamp, raf, getElementRoot } from "../../../utils/helpers";
|
|
6
7
|
import { getBackdropValueForSheet } from "../utils";
|
|
7
8
|
import { calculateSpringStep, handleCanDismiss } from "./utils";
|
|
8
9
|
export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], getCurrentBreakpoint, onDismiss, onBreakpointChange) => {
|
|
@@ -87,19 +88,32 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
87
88
|
}
|
|
88
89
|
const canStart = (detail) => {
|
|
89
90
|
/**
|
|
90
|
-
* If the
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
91
|
+
* If we are swiping on the content, swiping should only be possible if the content
|
|
92
|
+
* is scrolled all the way to the top so that we do not interfere with scrolling.
|
|
93
|
+
*
|
|
94
|
+
* We cannot assume that the `ion-content` target will remain consistent between swipes.
|
|
95
|
+
* For example, when using ion-nav within a modal it is possible to swipe, push a view,
|
|
96
|
+
* and then swipe again. The target content will not be the same between swipes.
|
|
94
97
|
*/
|
|
95
|
-
const
|
|
98
|
+
const contentEl = findClosestIonContent(detail.event.target);
|
|
96
99
|
currentBreakpoint = getCurrentBreakpoint();
|
|
97
|
-
if (currentBreakpoint === 1 &&
|
|
98
|
-
|
|
100
|
+
if (currentBreakpoint === 1 && contentEl) {
|
|
101
|
+
/**
|
|
102
|
+
* The modal should never swipe to close on the content with a refresher.
|
|
103
|
+
* Note 1: We cannot solve this by making this gesture have a higher priority than
|
|
104
|
+
* the refresher gesture as the iOS native refresh gesture uses a scroll listener in
|
|
105
|
+
* addition to a gesture.
|
|
106
|
+
*
|
|
107
|
+
* Note 2: Do not use getScrollElement here because we need this to be a synchronous
|
|
108
|
+
* operation, and getScrollElement is asynchronous.
|
|
109
|
+
*/
|
|
110
|
+
const scrollEl = isIonContent(contentEl) ? getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
|
|
111
|
+
const hasRefresherInContent = !!contentEl.querySelector('ion-refresher');
|
|
112
|
+
return !hasRefresherInContent && scrollEl.scrollTop === 0;
|
|
99
113
|
}
|
|
100
114
|
return true;
|
|
101
115
|
};
|
|
102
|
-
const onStart = () => {
|
|
116
|
+
const onStart = (detail) => {
|
|
103
117
|
/**
|
|
104
118
|
* If canDismiss is anything other than `true`
|
|
105
119
|
* then users should be able to swipe down
|
|
@@ -114,11 +128,10 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
114
128
|
*/
|
|
115
129
|
canDismissBlocksGesture = baseEl.canDismiss !== undefined && baseEl.canDismiss !== true && minBreakpoint === 0;
|
|
116
130
|
/**
|
|
117
|
-
* If
|
|
118
|
-
*
|
|
119
|
-
* the sheet will expand and the content will scroll.
|
|
131
|
+
* If we are pulling down, then it is possible we are pulling on the content.
|
|
132
|
+
* We do not want scrolling to happen at the same time as the gesture.
|
|
120
133
|
*/
|
|
121
|
-
if (contentEl) {
|
|
134
|
+
if (detail.deltaY > 0 && contentEl) {
|
|
122
135
|
contentEl.scrollY = false;
|
|
123
136
|
}
|
|
124
137
|
raf(() => {
|
|
@@ -131,6 +144,15 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
131
144
|
animation.progressStart(true, 1 - currentBreakpoint);
|
|
132
145
|
};
|
|
133
146
|
const onMove = (detail) => {
|
|
147
|
+
/**
|
|
148
|
+
* If we are pulling down, then it is possible we are pulling on the content.
|
|
149
|
+
* We do not want scrolling to happen at the same time as the gesture.
|
|
150
|
+
* This accounts for when the user scrolls down, scrolls all the way up, and then
|
|
151
|
+
* pulls down again such that the modal should start to move.
|
|
152
|
+
*/
|
|
153
|
+
if (detail.deltaY > 0 && contentEl) {
|
|
154
|
+
contentEl.scrollY = false;
|
|
155
|
+
}
|
|
134
156
|
/**
|
|
135
157
|
* Given the change in gesture position on the Y axis,
|
|
136
158
|
* compute where the offset of the animation should be
|
|
@@ -233,6 +255,16 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
233
255
|
else if (!shouldRemainOpen) {
|
|
234
256
|
onDismiss();
|
|
235
257
|
}
|
|
258
|
+
/**
|
|
259
|
+
* If the sheet is going to be fully expanded then we should enable
|
|
260
|
+
* scrolling immediately. The sheet modal animation takes ~500ms to finish
|
|
261
|
+
* so if we wait until then there is a visible delay for when scrolling is
|
|
262
|
+
* re-enabled. Native iOS allows for scrolling on the sheet modal as soon
|
|
263
|
+
* as the gesture is released, so we align with that.
|
|
264
|
+
*/
|
|
265
|
+
if (contentEl && snapToBreakpoint === breakpoints[breakpoints.length - 1]) {
|
|
266
|
+
contentEl.scrollY = true;
|
|
267
|
+
}
|
|
236
268
|
return new Promise((resolve) => {
|
|
237
269
|
animation
|
|
238
270
|
.onFinish(() => {
|
|
@@ -251,13 +283,6 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
251
283
|
animation.progressStart(true, 1 - snapToBreakpoint);
|
|
252
284
|
currentBreakpoint = snapToBreakpoint;
|
|
253
285
|
onBreakpointChange(currentBreakpoint);
|
|
254
|
-
/**
|
|
255
|
-
* If the sheet is fully expanded, we can safely
|
|
256
|
-
* enable scrolling again.
|
|
257
|
-
*/
|
|
258
|
-
if (contentEl && currentBreakpoint === breakpoints[breakpoints.length - 1]) {
|
|
259
|
-
contentEl.scrollY = true;
|
|
260
|
-
}
|
|
261
286
|
/**
|
|
262
287
|
* Backdrop should become enabled
|
|
263
288
|
* after the backdropBreakpoint value
|
|
@@ -131,9 +131,41 @@ export class Modal {
|
|
|
131
131
|
this.triggerController.removeClickListener();
|
|
132
132
|
}
|
|
133
133
|
componentWillLoad() {
|
|
134
|
-
const { breakpoints, initialBreakpoint, el } = this;
|
|
134
|
+
const { breakpoints, initialBreakpoint, el, htmlAttributes } = this;
|
|
135
135
|
const isSheetModal = (this.isSheetModal = breakpoints !== undefined && initialBreakpoint !== undefined);
|
|
136
|
-
|
|
136
|
+
const attributesToInherit = ['aria-label', 'role'];
|
|
137
|
+
this.inheritedAttributes = inheritAttributes(el, attributesToInherit);
|
|
138
|
+
/**
|
|
139
|
+
* When using a controller modal you can set attributes
|
|
140
|
+
* using the htmlAttributes property. Since the above attributes
|
|
141
|
+
* need to be inherited inside of the modal, we need to look
|
|
142
|
+
* and see if these attributes are being set via htmlAttributes.
|
|
143
|
+
*
|
|
144
|
+
* We could alternatively move this to componentDidLoad to simplify the work
|
|
145
|
+
* here, but we'd then need to make inheritedAttributes a State variable,
|
|
146
|
+
* thus causing another render to always happen after the first render.
|
|
147
|
+
*/
|
|
148
|
+
if (htmlAttributes !== undefined) {
|
|
149
|
+
attributesToInherit.forEach((attribute) => {
|
|
150
|
+
const attributeValue = htmlAttributes[attribute];
|
|
151
|
+
if (attributeValue) {
|
|
152
|
+
/**
|
|
153
|
+
* If an attribute we need to inherit was
|
|
154
|
+
* set using htmlAttributes then add it to
|
|
155
|
+
* inheritedAttributes and remove it from htmlAttributes.
|
|
156
|
+
* This ensures the attribute is inherited and not
|
|
157
|
+
* set on the host.
|
|
158
|
+
*
|
|
159
|
+
* In this case, if an inherited attribute is set
|
|
160
|
+
* on the host element and using htmlAttributes then
|
|
161
|
+
* htmlAttributes wins, but that's not a pattern that we recommend.
|
|
162
|
+
* The only time you'd need htmlAttributes is when using modalController.
|
|
163
|
+
*/
|
|
164
|
+
this.inheritedAttributes = Object.assign(Object.assign({}, this.inheritedAttributes), { [attribute]: htmlAttributes[attribute] });
|
|
165
|
+
delete htmlAttributes[attribute];
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
137
169
|
if (isSheetModal) {
|
|
138
170
|
this.currentBreakpoint = this.initialBreakpoint;
|
|
139
171
|
}
|
|
@@ -530,18 +562,18 @@ export class Modal {
|
|
|
530
562
|
const mode = getIonMode(this);
|
|
531
563
|
const isCardModal = presentingElement !== undefined && mode === 'ios';
|
|
532
564
|
const isHandleCycle = handleBehavior === 'cycle';
|
|
533
|
-
return (h(Host, Object.assign({ key: '
|
|
565
|
+
return (h(Host, Object.assign({ key: 'e4ad28e6e794560d85252aebdca7f4752e4e7e99', "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
|
|
534
566
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
535
|
-
}, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), h("ion-backdrop", { key: '
|
|
567
|
+
}, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), h("ion-backdrop", { key: '6efd67361a062d15488390f9f0d6c0841e541893', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '557b1c6b297df75acc80d1350b971e65ace6c343', class: "modal-shadow" }), h("div", Object.assign({ key: '67f9b27b662303fbaadaee2ae89972caadfd9994',
|
|
536
568
|
/*
|
|
537
569
|
role and aria-modal must be used on the
|
|
538
570
|
same element. They must also be set inside the
|
|
539
571
|
shadow DOM otherwise ion-button will not be highlighted
|
|
540
572
|
when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
|
|
541
573
|
*/
|
|
542
|
-
role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { class: "modal-handle",
|
|
574
|
+
role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: '8f1eecc451b52467a8c3cfe500335cf6254bbfbc', class: "modal-handle",
|
|
543
575
|
// Prevents the handle from receiving keyboard focus when it does not cycle
|
|
544
|
-
tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle" })), h("slot", { key: '
|
|
576
|
+
tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle" })), h("slot", { key: 'cdc923404f01a14b9071a434c68547da3b22c71e' }))));
|
|
545
577
|
}
|
|
546
578
|
static get is() { return "ion-modal"; }
|
|
547
579
|
static get encapsulation() { return "shadow"; }
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { h } from "@stencil/core";
|
|
5
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
6
|
+
import { Modal } from "../modal";
|
|
7
|
+
it('should inherit attributes', async () => {
|
|
8
|
+
/**
|
|
9
|
+
* Note: This example should not be used in production.
|
|
10
|
+
* This only serves to check that `role` can be customized.
|
|
11
|
+
*/
|
|
12
|
+
const page = await newSpecPage({
|
|
13
|
+
components: [Modal],
|
|
14
|
+
template: () => h("ion-modal", { overlayIndex: 1, "aria-label": "my label", role: "presentation" }),
|
|
15
|
+
});
|
|
16
|
+
const modal = page.body.querySelector('ion-modal');
|
|
17
|
+
const contentWrapper = modal.shadowRoot.querySelector('[part="content"]');
|
|
18
|
+
expect(contentWrapper.getAttribute('aria-label')).toBe('my label');
|
|
19
|
+
expect(contentWrapper.getAttribute('role')).toBe('presentation');
|
|
20
|
+
});
|
|
21
|
+
it('should inherit attributes when set via htmlAttributes', async () => {
|
|
22
|
+
const page = await newSpecPage({
|
|
23
|
+
components: [Modal],
|
|
24
|
+
template: () => (h("ion-modal", { overlayIndex: 1, htmlAttributes: { 'aria-label': 'my label', role: 'presentation' } })),
|
|
25
|
+
});
|
|
26
|
+
const modal = page.body.querySelector('ion-modal');
|
|
27
|
+
const contentWrapper = modal.shadowRoot.querySelector('[part="content"]');
|
|
28
|
+
expect(contentWrapper.getAttribute('aria-label')).toBe('my label');
|
|
29
|
+
expect(contentWrapper.getAttribute('role')).toBe('presentation');
|
|
30
|
+
expect(modal.hasAttribute('aria-label')).toBe(false);
|
|
31
|
+
expect(modal.hasAttribute('role')).toBe(false);
|
|
32
|
+
});
|
|
@@ -827,7 +827,7 @@ export class Nav {
|
|
|
827
827
|
}
|
|
828
828
|
}
|
|
829
829
|
render() {
|
|
830
|
-
return h("slot", { key: '
|
|
830
|
+
return h("slot", { key: '6894eccc60e446294b01261477691ea1e88348ab' });
|
|
831
831
|
}
|
|
832
832
|
static get is() { return "ion-nav"; }
|
|
833
833
|
static get encapsulation() { return "shadow"; }
|
|
@@ -14,7 +14,7 @@ export class NavLink {
|
|
|
14
14
|
this.routerAnimation = undefined;
|
|
15
15
|
}
|
|
16
16
|
render() {
|
|
17
|
-
return h(Host, { key: '
|
|
17
|
+
return h(Host, { key: 'dab6e8a908395d99c87452c5e5aa4e61d9e72435', onClick: this.onClick });
|
|
18
18
|
}
|
|
19
19
|
static get is() { return "ion-nav-link"; }
|
|
20
20
|
static get properties() {
|
|
@@ -13,9 +13,9 @@ export class Note {
|
|
|
13
13
|
}
|
|
14
14
|
render() {
|
|
15
15
|
const mode = getIonMode(this);
|
|
16
|
-
return (h(Host, { key: '
|
|
16
|
+
return (h(Host, { key: '79a17a318ec6e8326c9741b4a9bb4598acdc225e', class: createColorClasses(this.color, {
|
|
17
17
|
[mode]: true,
|
|
18
|
-
}) }, h("slot", { key: '
|
|
18
|
+
}) }, h("slot", { key: '5adeaccfabb4bee7b84ea5c5de804bd255b29255' })));
|
|
19
19
|
}
|
|
20
20
|
static get is() { return "ion-note"; }
|
|
21
21
|
static get encapsulation() { return "shadow"; }
|