@ionic/core 8.0.2 → 8.1.1-dev.11714676345.1df5b5f8
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/index2.js +119 -1
- package/components/ion-content.js +6 -4
- package/components/ion-datetime-button.js +2 -2
- package/components/ion-datetime.js +15 -13
- package/components/ion-fab-button.js +2 -2
- package/components/ion-fab-list.js +2 -2
- package/components/ion-fab.js +2 -2
- package/components/ion-footer.js +2 -2
- package/components/ion-grid.js +2 -2
- package/components/ion-header.js +2 -2
- package/components/ion-img.js +1 -1
- package/components/ion-infinite-scroll-content.js +2 -2
- package/components/ion-infinite-scroll.js +1 -1
- package/components/ion-input-password-toggle.js +3 -3
- package/components/ion-input.js +8 -4
- 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 +2 -2
- package/components/ion-modal.js +10 -8
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +2 -2
- package/components/ion-picker-legacy.js +2 -2
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-range.js +3 -3
- 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 +4 -4
- package/components/ion-segment-button.js +3 -3
- package/components/ion-segment.js +10 -9
- package/components/ion-select-option.js +1 -1
- package/components/ion-select.js +8 -5
- package/components/ion-skeleton-text.js +2 -2
- package/components/ion-split-pane.js +2 -2
- package/components/ion-tab-bar.js +2 -2
- package/components/ion-tab-button.js +2 -2
- package/components/ion-tab.js +2 -2
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +2 -2
- package/components/ion-textarea.js +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-toggle.js +3 -3
- package/components/ion-toolbar.js +2 -2
- package/components/label.js +2 -2
- package/components/list-header.js +2 -2
- package/components/list.js +1 -1
- package/components/overlays.js +3 -2
- package/components/picker-column-option.js +2 -2
- package/components/picker-column.js +156 -4
- package/components/picker-column2.js +2 -2
- package/components/picker.js +2 -2
- package/components/popover.js +6 -4
- package/components/radio-group.js +1 -1
- package/components/radio.js +3 -3
- package/components/ripple-effect.js +1 -1
- package/components/select-popover.js +1 -1
- package/components/spinner.js +1 -1
- package/css/core.css +1 -1
- package/css/core.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/dist/cjs/{index-6047957b.js → index-c0b7f8f4.js} +124 -6
- package/dist/cjs/index.cjs.js +5 -5
- package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
- package/dist/cjs/ion-alert.cjs.entry.js +1 -1
- package/dist/cjs/ion-app_8.cjs.entry.js +15 -14
- package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-col_3.cjs.entry.js +3 -3
- package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
- package/dist/cjs/ion-datetime_3.cjs.entry.js +20 -18
- package/dist/cjs/ion-fab_3.cjs.entry.js +6 -6
- package/dist/cjs/ion-img.cjs.entry.js +1 -1
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +3 -3
- package/dist/cjs/ion-input.cjs.entry.js +7 -4
- package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-item_8.cjs.entry.js +12 -12
- package/dist/cjs/ion-loading.cjs.entry.js +3 -3
- package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
- package/dist/cjs/ion-modal.cjs.entry.js +10 -9
- package/dist/cjs/ion-nav_2.cjs.entry.js +4 -3
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
- package/dist/cjs/ion-picker-column.cjs.entry.js +154 -4
- package/dist/cjs/ion-picker.cjs.entry.js +2 -2
- package/dist/cjs/ion-popover.cjs.entry.js +6 -5
- package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
- package/dist/cjs/ion-radio_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-range.cjs.entry.js +3 -3
- package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
- package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
- package/dist/cjs/ion-searchbar.cjs.entry.js +4 -4
- package/dist/cjs/ion-segment_2.cjs.entry.js +13 -12
- package/dist/cjs/ion-select_3.cjs.entry.js +11 -8
- package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
- package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-text.cjs.entry.js +2 -2
- package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
- package/dist/cjs/ion-toast.cjs.entry.js +3 -3
- package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/{ios.transition-59b0e1d9.js → ios.transition-5ddf92f1.js} +3 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{md.transition-0cc7c831.js → md.transition-047c18c5.js} +3 -1
- package/dist/cjs/{overlays-2feabb85.js → overlays-cb04d075.js} +3 -1
- package/dist/collection/components/content/content.js +23 -4
- package/dist/collection/components/content/test/content.spec.js +27 -0
- package/dist/collection/components/datetime/datetime.js +15 -13
- package/dist/collection/components/datetime/test/overlay-roles/datetime.e2e.js +34 -0
- package/dist/collection/components/datetime-button/datetime-button.js +2 -2
- package/dist/collection/components/fab/fab.js +2 -2
- package/dist/collection/components/fab-button/fab-button.js +2 -2
- package/dist/collection/components/fab-list/fab-list.js +2 -2
- package/dist/collection/components/footer/footer.js +2 -2
- package/dist/collection/components/grid/grid.js +2 -2
- package/dist/collection/components/header/header.js +2 -2
- package/dist/collection/components/img/img.js +1 -1
- package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
- package/dist/collection/components/input/input.js +24 -4
- package/dist/collection/components/input/test/input.spec.js +13 -0
- package/dist/collection/components/input-password-toggle/input-password-toggle.js +3 -3
- 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 +2 -2
- 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 +2 -2
- 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 +3 -2
- package/dist/collection/components/modal/modal.js +25 -6
- package/dist/collection/components/modal/test/basic/modal.spec.js +19 -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.css +19 -0
- package/dist/collection/components/picker-column/picker-column.js +158 -3
- package/dist/collection/components/picker-column/test/picker-column.spec.js +83 -0
- package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
- package/dist/collection/components/picker-legacy/picker.js +2 -2
- package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
- package/dist/collection/components/popover/popover.js +23 -4
- package/dist/collection/components/popover/test/basic/popover.spec.js +19 -0
- package/dist/collection/components/progress-bar/progress-bar.js +1 -1
- package/dist/collection/components/radio/radio.js +3 -3
- package/dist/collection/components/radio-group/radio-group.js +1 -1
- package/dist/collection/components/range/range.js +3 -3
- 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 +4 -4
- package/dist/collection/components/segment/segment.js +10 -9
- package/dist/collection/components/segment-button/segment-button.js +3 -3
- package/dist/collection/components/select/select.js +8 -5
- package/dist/collection/components/select-option/select-option.js +1 -1
- package/dist/collection/components/select-popover/select-popover.js +1 -1
- package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
- package/dist/collection/components/spinner/spinner.js +1 -1
- package/dist/collection/components/split-pane/split-pane.js +2 -2
- package/dist/collection/components/tab/tab.js +2 -2
- package/dist/collection/components/tab-bar/tab-bar.js +2 -2
- package/dist/collection/components/tab-button/tab-button.js +2 -2
- package/dist/collection/components/tabs/tabs.js +1 -1
- package/dist/collection/components/text/text.js +2 -2
- package/dist/collection/components/textarea/textarea.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 +3 -3
- package/dist/collection/components/toolbar/toolbar.js +2 -2
- package/dist/collection/utils/focus-controller/index.js +112 -0
- package/dist/collection/utils/focus-controller/test/generic/focus-controller.e2e.js +52 -0
- package/dist/collection/utils/focus-controller/test/ionic/focus-controller.e2e.js +52 -0
- package/dist/collection/utils/overlays.js +2 -1
- package/dist/collection/utils/transition/index.js +11 -1
- package/dist/docs.json +96 -1
- package/dist/esm/{index-f4460246.js → index-8e6b6a24.js} +121 -3
- package/dist/esm/index.js +5 -5
- package/dist/esm/ion-action-sheet.entry.js +1 -1
- package/dist/esm/ion-alert.entry.js +1 -1
- package/dist/esm/ion-app_8.entry.js +15 -14
- package/dist/esm/ion-avatar_3.entry.js +1 -1
- package/dist/esm/ion-col_3.entry.js +3 -3
- package/dist/esm/ion-datetime-button.entry.js +2 -2
- package/dist/esm/ion-datetime_3.entry.js +20 -18
- package/dist/esm/ion-fab_3.entry.js +6 -6
- package/dist/esm/ion-img.entry.js +1 -1
- package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
- package/dist/esm/ion-input-password-toggle.entry.js +3 -3
- package/dist/esm/ion-input.entry.js +7 -4
- package/dist/esm/ion-item-option_3.entry.js +4 -4
- package/dist/esm/ion-item_8.entry.js +12 -12
- package/dist/esm/ion-loading.entry.js +3 -3
- package/dist/esm/ion-menu_3.entry.js +7 -7
- package/dist/esm/ion-modal.entry.js +10 -9
- package/dist/esm/ion-nav_2.entry.js +4 -3
- package/dist/esm/ion-picker-column-option.entry.js +2 -2
- package/dist/esm/ion-picker-column.entry.js +154 -4
- package/dist/esm/ion-picker.entry.js +2 -2
- package/dist/esm/ion-popover.entry.js +6 -5
- package/dist/esm/ion-progress-bar.entry.js +1 -1
- package/dist/esm/ion-radio_2.entry.js +4 -4
- package/dist/esm/ion-range.entry.js +3 -3
- package/dist/esm/ion-refresher_2.entry.js +2 -2
- package/dist/esm/ion-reorder_2.entry.js +2 -2
- package/dist/esm/ion-ripple-effect.entry.js +1 -1
- package/dist/esm/ion-route_4.entry.js +2 -2
- package/dist/esm/ion-searchbar.entry.js +4 -4
- package/dist/esm/ion-segment_2.entry.js +13 -12
- package/dist/esm/ion-select_3.entry.js +11 -8
- package/dist/esm/ion-spinner.entry.js +1 -1
- package/dist/esm/ion-split-pane.entry.js +2 -2
- package/dist/esm/ion-tab-bar_2.entry.js +4 -4
- package/dist/esm/ion-tab_2.entry.js +3 -3
- package/dist/esm/ion-text.entry.js +2 -2
- package/dist/esm/ion-textarea.entry.js +2 -2
- package/dist/esm/ion-toast.entry.js +3 -3
- package/dist/esm/ion-toggle.entry.js +3 -3
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/{ios.transition-72f59adb.js → ios.transition-e35d0940.js} +3 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{md.transition-ef0437fe.js → md.transition-4b90a1f0.js} +3 -1
- package/dist/esm/{overlays-56045efc.js → overlays-df2c06b2.js} +3 -2
- package/dist/esm-es5/index-8e6b6a24.js +4 -0
- package/dist/esm-es5/index.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-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-password-toggle.entry.js +1 -1
- package/dist/esm-es5/ion-input.entry.js +1 -1
- package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
- package/dist/esm-es5/ion-item_8.entry.js +1 -1
- package/dist/esm-es5/ion-loading.entry.js +1 -1
- package/dist/esm-es5/ion-menu_3.entry.js +1 -1
- package/dist/esm-es5/ion-modal.entry.js +1 -1
- package/dist/esm-es5/ion-nav_2.entry.js +1 -1
- package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
- package/dist/esm-es5/ion-picker-column.entry.js +1 -1
- package/dist/esm-es5/ion-picker.entry.js +1 -1
- package/dist/esm-es5/ion-popover.entry.js +1 -1
- package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
- package/dist/esm-es5/ion-radio_2.entry.js +1 -1
- package/dist/esm-es5/ion-range.entry.js +1 -1
- package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
- package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
- package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
- package/dist/esm-es5/ion-route_4.entry.js +1 -1
- package/dist/esm-es5/ion-searchbar.entry.js +1 -1
- package/dist/esm-es5/ion-segment_2.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.entry.js +1 -1
- package/dist/esm-es5/ion-spinner.entry.js +1 -1
- package/dist/esm-es5/ion-split-pane.entry.js +1 -1
- package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
- package/dist/esm-es5/ion-tab_2.entry.js +1 -1
- package/dist/esm-es5/ion-text.entry.js +1 -1
- package/dist/esm-es5/ion-textarea.entry.js +1 -1
- package/dist/esm-es5/ion-toast.entry.js +1 -1
- package/dist/esm-es5/ion-toggle.entry.js +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/ios.transition-e35d0940.js +4 -0
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/md.transition-4b90a1f0.js +4 -0
- package/dist/esm-es5/{overlays-56045efc.js → overlays-df2c06b2.js} +1 -1
- package/dist/html.html-data.json +24 -0
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-e58a04ae.system.entry.js → p-01a27023.system.entry.js} +1 -1
- package/dist/ionic/p-0395be73.entry.js +4 -0
- package/dist/ionic/p-049d43bd.entry.js +4 -0
- package/dist/ionic/p-0536574e.entry.js +4 -0
- package/dist/ionic/{p-4f17f03d.entry.js → p-09538818.entry.js} +1 -1
- package/dist/ionic/p-0978924b.system.entry.js +4 -0
- package/dist/ionic/{p-9c5b6727.entry.js → p-09b4e9ec.entry.js} +1 -1
- package/dist/ionic/{p-22ef5198.system.entry.js → p-0a6d801e.system.entry.js} +1 -1
- package/dist/ionic/{p-dc242acb.system.entry.js → p-0b007acc.system.entry.js} +1 -1
- package/dist/ionic/{p-100d079f.system.entry.js → p-10feef7e.system.entry.js} +1 -1
- package/dist/ionic/p-15d1ddba.js +4 -0
- package/dist/ionic/{p-2bd9b326.system.entry.js → p-199f826f.system.entry.js} +1 -1
- package/dist/ionic/p-1b435d20.entry.js +4 -0
- package/dist/ionic/{p-7cf7ef9f.entry.js → p-1eb63fa4.entry.js} +1 -1
- package/dist/ionic/{p-672b53f3.entry.js → p-207e11dc.entry.js} +1 -1
- package/dist/ionic/{p-7f512c4d.system.entry.js → p-23fa696f.system.entry.js} +1 -1
- package/dist/ionic/{p-32df9442.entry.js → p-29de09dd.entry.js} +1 -1
- package/dist/ionic/p-30baae57.system.js +1 -1
- package/dist/ionic/p-33e10509.system.js +4 -0
- package/dist/ionic/{p-eed23392.system.entry.js → p-380efbfa.system.entry.js} +1 -1
- package/dist/ionic/p-3c27be4a.entry.js +4 -0
- package/dist/ionic/{p-022bc8ff.entry.js → p-3f53a0b1.entry.js} +1 -1
- package/dist/ionic/{p-0ae12601.entry.js → p-433157a4.entry.js} +1 -1
- package/dist/ionic/p-498eb648.system.entry.js +4 -0
- package/dist/ionic/{p-eaac2522.system.entry.js → p-4d8f408d.system.entry.js} +1 -1
- package/dist/ionic/{p-44edbb29.system.entry.js → p-509620b8.system.entry.js} +1 -1
- package/dist/ionic/{p-797fc793.entry.js → p-5109a566.entry.js} +1 -1
- package/dist/ionic/{p-af6c2b39.entry.js → p-52ce473d.entry.js} +1 -1
- package/dist/ionic/{p-4ba654fa.system.entry.js → p-57bc32e2.system.entry.js} +1 -1
- package/dist/ionic/p-5dc9f99a.entry.js +4 -0
- package/dist/ionic/p-5ec3bb70.system.entry.js +4 -0
- package/dist/ionic/{p-0300cf19.system.entry.js → p-62e44e4a.system.entry.js} +1 -1
- package/dist/ionic/p-66ed603b.js +4 -0
- package/dist/ionic/p-68bb9870.system.entry.js +4 -0
- package/dist/ionic/{p-2912d62c.system.entry.js → p-6a2cf398.system.entry.js} +1 -1
- package/dist/ionic/{p-5d723a0a.entry.js → p-6ec88301.entry.js} +1 -1
- package/dist/ionic/p-6f008ad2.js +4 -0
- package/dist/ionic/{p-86a7576c.system.entry.js → p-700567ab.system.entry.js} +1 -1
- package/dist/ionic/p-712d54ae.js +4 -0
- package/dist/ionic/{p-508d5d0d.entry.js → p-7349de07.entry.js} +1 -1
- package/dist/ionic/{p-3098a7cb.entry.js → p-78405458.entry.js} +1 -1
- package/dist/ionic/{p-637e85a2.entry.js → p-80265a58.entry.js} +1 -1
- package/dist/ionic/{p-f8b4ac1f.system.entry.js → p-83d748f8.system.entry.js} +2 -2
- package/dist/ionic/{p-3b974a28.entry.js → p-8a03fbee.entry.js} +1 -1
- package/dist/ionic/{p-a23a7b64.system.entry.js → p-8cb80f83.system.entry.js} +1 -1
- package/dist/ionic/{p-bae97f84.system.entry.js → p-8d14ee8c.system.entry.js} +2 -2
- package/dist/ionic/{p-61d8c43c.system.entry.js → p-9213681c.system.entry.js} +1 -1
- package/dist/ionic/p-92d7e99d.system.js +4 -0
- package/dist/ionic/{p-e1f7425b.system.entry.js → p-9664a1a2.system.entry.js} +1 -1
- package/dist/ionic/{p-762156c0.entry.js → p-9797f6eb.entry.js} +1 -1
- package/dist/ionic/{p-dba28cb1.system.entry.js → p-9848d7be.system.entry.js} +1 -1
- package/dist/ionic/{p-5b183a1c.entry.js → p-99884813.entry.js} +1 -1
- package/dist/ionic/{p-a87cdd33.system.entry.js → p-99ca9787.system.entry.js} +1 -1
- package/dist/ionic/{p-a51b22fb.system.entry.js → p-9bfd7cda.system.entry.js} +1 -1
- package/dist/ionic/p-9c6dcf78.system.entry.js +4 -0
- package/dist/ionic/{p-1ae3a136.system.entry.js → p-a2e94ade.system.entry.js} +1 -1
- package/dist/ionic/p-a488b7ab.system.js +4 -0
- package/dist/ionic/{p-18470679.entry.js → p-a4ab7449.entry.js} +1 -1
- package/dist/ionic/{p-5d26afde.system.entry.js → p-a50f23bf.system.entry.js} +2 -2
- package/dist/ionic/p-a6a8b478.system.entry.js +4 -0
- package/dist/ionic/{p-3a3d5a1a.entry.js → p-aaaaaea1.entry.js} +1 -1
- package/dist/ionic/{p-cfbf4588.entry.js → p-b02eda30.entry.js} +1 -1
- package/dist/ionic/{p-8162bcf4.entry.js → p-b04c27d8.entry.js} +1 -1
- package/dist/ionic/{p-a822c02f.system.entry.js → p-b07affd5.system.entry.js} +1 -1
- package/dist/ionic/{p-15daa308.system.entry.js → p-b28d3ccb.system.entry.js} +2 -2
- package/dist/ionic/{p-3fefc7cd.entry.js → p-b563b6ac.entry.js} +1 -1
- package/dist/ionic/{p-27206537.system.entry.js → p-b9181033.system.entry.js} +1 -1
- package/dist/ionic/{p-6143e16a.entry.js → p-ba70039f.entry.js} +1 -1
- package/dist/ionic/{p-74806c03.entry.js → p-bbbe869e.entry.js} +1 -1
- package/dist/ionic/p-bd1173d3.entry.js +4 -0
- package/dist/ionic/p-c0e9ba51.entry.js +4 -0
- package/dist/ionic/p-c5dd0892.system.entry.js +4 -0
- package/dist/ionic/p-cec8589b.system.js +4 -0
- package/dist/ionic/{p-939dbcc6.system.entry.js → p-d69b26d9.system.entry.js} +1 -1
- package/dist/ionic/p-d9f3d68a.entry.js +4 -0
- package/dist/ionic/{p-fb088c7d.system.entry.js → p-dc0d9ff5.system.entry.js} +2 -2
- package/dist/ionic/{p-53c46dd1.entry.js → p-dc1e363a.entry.js} +1 -1
- package/dist/ionic/{p-4c103f8d.system.entry.js → p-e0a8ffd0.system.entry.js} +1 -1
- package/dist/ionic/{p-091697a4.system.entry.js → p-e6e197f5.system.entry.js} +1 -1
- package/dist/ionic/{p-2d641da7.entry.js → p-e6e88ab9.entry.js} +1 -1
- package/dist/ionic/{p-f14daa66.system.js → p-eb3023c9.system.js} +1 -1
- package/dist/ionic/p-ecbdbf25.system.entry.js +4 -0
- package/dist/ionic/{p-3dd57c9c.system.entry.js → p-ed5aebaa.system.entry.js} +1 -1
- package/dist/ionic/p-f0e81ddb.entry.js +4 -0
- package/dist/ionic/{p-d979153a.entry.js → p-f357707e.entry.js} +1 -1
- package/dist/ionic/{p-430a7e95.entry.js → p-f53bcebd.entry.js} +1 -1
- package/dist/ionic/p-f9baf25c.entry.js +4 -0
- package/dist/ionic/{p-05a8a97d.system.entry.js → p-fb21fd1c.system.entry.js} +1 -1
- package/dist/ionic/{p-23610251.entry.js → p-fcecca8f.entry.js} +1 -1
- package/dist/ionic/p-ffbf54f0.entry.js +4 -0
- package/dist/types/components/content/content.d.ts +8 -0
- package/dist/types/components/input/input.d.ts +4 -0
- package/dist/types/components/modal/modal-interface.d.ts +1 -0
- package/dist/types/components/modal/modal.d.ts +18 -0
- package/dist/types/components/picker-column/picker-column.d.ts +35 -0
- package/dist/types/components/popover/popover-interface.d.ts +1 -0
- package/dist/types/components/popover/popover.d.ts +18 -0
- package/dist/types/components/segment/segment.d.ts +1 -0
- package/dist/types/components/select/select.d.ts +2 -1
- package/dist/types/components.d.ts +32 -0
- package/dist/types/utils/config.d.ts +9 -0
- package/dist/types/utils/focus-controller/index.d.ts +13 -0
- package/dist/types/utils/overlays.d.ts +1 -0
- package/hydrate/index.js +440 -156
- package/package.json +1 -1
- package/dist/esm-es5/index-f4460246.js +0 -4
- package/dist/esm-es5/ios.transition-72f59adb.js +0 -4
- package/dist/esm-es5/md.transition-ef0437fe.js +0 -4
- package/dist/ionic/p-00d9d02d.js +0 -4
- package/dist/ionic/p-0df52fbc.entry.js +0 -4
- package/dist/ionic/p-16b35bc9.system.entry.js +0 -4
- package/dist/ionic/p-19d50867.system.entry.js +0 -4
- package/dist/ionic/p-307c6b05.entry.js +0 -4
- package/dist/ionic/p-3b185894.system.js +0 -4
- package/dist/ionic/p-3bece4aa.entry.js +0 -4
- package/dist/ionic/p-3ce83c9b.entry.js +0 -4
- package/dist/ionic/p-439b8b3c.system.entry.js +0 -4
- package/dist/ionic/p-47212f88.system.entry.js +0 -4
- package/dist/ionic/p-657157d7.entry.js +0 -4
- package/dist/ionic/p-6636ef29.js +0 -4
- package/dist/ionic/p-6a5fe8b0.js +0 -4
- package/dist/ionic/p-6c64aef2.entry.js +0 -4
- package/dist/ionic/p-7f189103.system.entry.js +0 -4
- package/dist/ionic/p-99c42ae3.entry.js +0 -4
- package/dist/ionic/p-aa71aee7.js +0 -4
- package/dist/ionic/p-b4a034c8.system.js +0 -4
- package/dist/ionic/p-b6d4e78d.system.entry.js +0 -4
- package/dist/ionic/p-b9c741b6.entry.js +0 -4
- package/dist/ionic/p-cab332d1.system.js +0 -4
- package/dist/ionic/p-cac9bd5d.entry.js +0 -4
- package/dist/ionic/p-cc3fc234.entry.js +0 -4
- package/dist/ionic/p-d0d2827d.system.entry.js +0 -4
- package/dist/ionic/p-d78ce4cc.system.entry.js +0 -4
- package/dist/ionic/p-e95ac94c.entry.js +0 -4
- package/dist/ionic/p-f2026596.system.js +0 -4
- package/dist/ionic/p-f350f4c2.entry.js +0 -4
|
@@ -5,7 +5,7 @@ import { Host, h } from "@stencil/core";
|
|
|
5
5
|
import { getIonMode } from "../../global/ionic-global";
|
|
6
6
|
export class Row {
|
|
7
7
|
render() {
|
|
8
|
-
return (h(Host, { key: '
|
|
8
|
+
return (h(Host, { key: '813c9a7f6782d2cf8eb27f30d3ab28e6f3122868', class: getIonMode(this) }, h("slot", { key: '356bec4d4d408ea63d6b431b06465d5b7bcbff71' })));
|
|
9
9
|
}
|
|
10
10
|
static get is() { return "ion-row"; }
|
|
11
11
|
static get encapsulation() { return "shadow"; }
|
|
@@ -378,8 +378,8 @@ export class Searchbar {
|
|
|
378
378
|
const clearIcon = this.clearIcon || (mode === 'ios' ? closeCircle : closeSharp);
|
|
379
379
|
const searchIcon = this.searchIcon || (mode === 'ios' ? searchOutline : searchSharp);
|
|
380
380
|
const shouldShowCancelButton = this.shouldShowCancelButton();
|
|
381
|
-
const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: '
|
|
382
|
-
return (h(Host, { key: '
|
|
381
|
+
const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: '8f3323145edfde317f2762e470f3ab2e27452b69', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: mode === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, h("div", { key: 'a3ae5d8a6fe3a96b5aa7142f7a246876fdbe3ef3', "aria-hidden": "true" }, mode === 'md' ? (h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
|
|
382
|
+
return (h(Host, { key: '543593e248261418ea75580e5fbed1c613e57d00', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
|
|
383
383
|
[mode]: true,
|
|
384
384
|
'searchbar-animated': animated,
|
|
385
385
|
'searchbar-disabled': this.disabled,
|
|
@@ -389,14 +389,14 @@ export class Searchbar {
|
|
|
389
389
|
'searchbar-has-focus': this.focused,
|
|
390
390
|
'searchbar-should-show-clear': this.shouldShowClearButton(),
|
|
391
391
|
'searchbar-should-show-cancel': this.shouldShowCancelButton(),
|
|
392
|
-
}) }, h("div", { key: '
|
|
392
|
+
}) }, h("div", { key: '01351daea61933fedd1bd6289376183962096479', class: "searchbar-input-container" }, h("input", Object.assign({ key: 'fae92d93e9c16c4b48116da9aa6b3e827d0f830a', "aria-label": "search text", disabled: this.disabled, ref: (el) => (this.nativeInput = el), class: "searchbar-input", inputMode: this.inputmode, enterKeyHint: this.enterkeyhint, name: this.name, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, minLength: this.minlength, maxLength: this.maxlength, placeholder: this.placeholder, type: this.type, value: this.getValue(), autoCapitalize: autocapitalize === 'default' ? undefined : autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }, this.inheritedAttributes)), mode === 'md' && cancelButton, h("ion-icon", { key: '4d20d2db6ce72e82f86fa140ebd2ad3b6bbf4bd6', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: '40102559fa7864a7545466cf1abc40131b5ace6c', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
|
|
393
393
|
/**
|
|
394
394
|
* This prevents mobile browsers from
|
|
395
395
|
* blurring the input when the clear
|
|
396
396
|
* button is activated.
|
|
397
397
|
*/
|
|
398
398
|
ev.preventDefault();
|
|
399
|
-
}, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: '
|
|
399
|
+
}, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: '42eb950e72357bba1a1fe2dacfa982412c9d64db', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
|
|
400
400
|
}
|
|
401
401
|
static get is() { return "ion-searchbar"; }
|
|
402
402
|
static get encapsulation() { return "scoped"; }
|
|
@@ -34,6 +34,14 @@ export class Segment {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
|
+
this.onSlottedItemsChange = () => {
|
|
38
|
+
/**
|
|
39
|
+
* When the slotted segment buttons change we need to
|
|
40
|
+
* ensure that the new segment buttons are checked if
|
|
41
|
+
* the value matches the segment button value.
|
|
42
|
+
*/
|
|
43
|
+
this.valueChanged(this.value);
|
|
44
|
+
};
|
|
37
45
|
this.getSegmentButton = (selector) => {
|
|
38
46
|
var _a, _b;
|
|
39
47
|
const buttons = this.getButtons().filter((button) => !button.disabled);
|
|
@@ -101,13 +109,6 @@ export class Segment {
|
|
|
101
109
|
}
|
|
102
110
|
async componentDidLoad() {
|
|
103
111
|
this.setCheckedClasses();
|
|
104
|
-
/**
|
|
105
|
-
* If the value changes before watchers
|
|
106
|
-
* are setup, then the ionSelect watch callback
|
|
107
|
-
* will not fire. As a result, we manually
|
|
108
|
-
* fire this event when Select is loaded.
|
|
109
|
-
*/
|
|
110
|
-
this.ionSelect.emit({ value: this.value });
|
|
111
112
|
/**
|
|
112
113
|
* We need to wait for the buttons to all be rendered
|
|
113
114
|
* before we can scroll.
|
|
@@ -420,14 +421,14 @@ export class Segment {
|
|
|
420
421
|
}
|
|
421
422
|
render() {
|
|
422
423
|
const mode = getIonMode(this);
|
|
423
|
-
return (h(Host, { key: '
|
|
424
|
+
return (h(Host, { key: 'ad0946134c8d465b760ad792655f1cb9922db520', role: "tablist", onClick: this.onClick, class: createColorClasses(this.color, {
|
|
424
425
|
[mode]: true,
|
|
425
426
|
'in-toolbar': hostContext('ion-toolbar', this.el),
|
|
426
427
|
'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
|
|
427
428
|
'segment-activated': this.activated,
|
|
428
429
|
'segment-disabled': this.disabled,
|
|
429
430
|
'segment-scrollable': this.scrollable,
|
|
430
|
-
}) }, h("slot", { key: '
|
|
431
|
+
}) }, h("slot", { key: 'dcdb425bcda0d60acb7c317e5e671ed462715b4a', onSlotchange: this.onSlottedItemsChange })));
|
|
431
432
|
}
|
|
432
433
|
static get is() { return "ion-segment"; }
|
|
433
434
|
static get encapsulation() { return "shadow"; }
|
|
@@ -78,7 +78,7 @@ export class SegmentButton {
|
|
|
78
78
|
const { checked, type, disabled, hasIcon, hasLabel, layout, segmentEl } = this;
|
|
79
79
|
const mode = getIonMode(this);
|
|
80
80
|
const hasSegmentColor = () => (segmentEl === null || segmentEl === void 0 ? void 0 : segmentEl.color) !== undefined;
|
|
81
|
-
return (h(Host, { key: '
|
|
81
|
+
return (h(Host, { key: '70cf5c7a3ae2620222c5250c644faf3cfc3b3e4e', class: {
|
|
82
82
|
[mode]: true,
|
|
83
83
|
'in-toolbar': hostContext('ion-toolbar', this.el),
|
|
84
84
|
'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
|
|
@@ -94,10 +94,10 @@ export class SegmentButton {
|
|
|
94
94
|
'ion-activatable': true,
|
|
95
95
|
'ion-activatable-instant': true,
|
|
96
96
|
'ion-focusable': true,
|
|
97
|
-
} }, h("button", Object.assign({ key: '
|
|
97
|
+
} }, h("button", Object.assign({ key: 'a53c9f1e360934e8d2e90476642ba4507fc38ebd', "aria-selected": checked ? 'true' : 'false', role: "tab", ref: (el) => (this.nativeEl = el), type: type, class: "button-native", part: "native", disabled: disabled }, this.inheritedAttributes), h("span", { key: '7d8feda840d389941cc693f500b5eba0b39b41da', class: "button-inner" }, h("slot", { key: 'd9ae1eec45db253cbf573d29cd545658dd595d87' })), mode === 'md' && h("ion-ripple-effect", { key: '49e6a16968709dc9b3fc77bc9fb99acb42fda88c' })), h("div", { key: '4e3ea0989ed5205dbb03586e4facb439b05a92de', part: "indicator", class: {
|
|
98
98
|
'segment-button-indicator': true,
|
|
99
99
|
'segment-button-indicator-animated': true,
|
|
100
|
-
} }, h("div", { key: '
|
|
100
|
+
} }, h("div", { key: '65c72a151080998c1e548c87d4d4ebd5c7dda72f', part: "indicator-background", class: "segment-button-indicator-background" }))));
|
|
101
101
|
}
|
|
102
102
|
static get is() { return "ion-segment-button"; }
|
|
103
103
|
static get encapsulation() { return "shadow"; }
|
|
@@ -99,9 +99,6 @@ export class Select {
|
|
|
99
99
|
this.value = value;
|
|
100
100
|
this.ionChange.emit({ value });
|
|
101
101
|
}
|
|
102
|
-
componentWillLoad() {
|
|
103
|
-
this.inheritedAttributes = inheritAttributes(this.el, ['aria-label']);
|
|
104
|
-
}
|
|
105
102
|
async connectedCallback() {
|
|
106
103
|
const { el } = this;
|
|
107
104
|
this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
|
|
@@ -118,6 +115,12 @@ export class Select {
|
|
|
118
115
|
forceUpdate(this);
|
|
119
116
|
});
|
|
120
117
|
}
|
|
118
|
+
componentWillLoad() {
|
|
119
|
+
this.inheritedAttributes = inheritAttributes(this.el, ['aria-label']);
|
|
120
|
+
}
|
|
121
|
+
componentDidLoad() {
|
|
122
|
+
this.emitStyle();
|
|
123
|
+
}
|
|
121
124
|
disconnectedCallback() {
|
|
122
125
|
if (this.mutationO) {
|
|
123
126
|
this.mutationO.disconnect();
|
|
@@ -610,7 +613,7 @@ export class Select {
|
|
|
610
613
|
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
611
614
|
*/
|
|
612
615
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
|
|
613
|
-
return (h(Host, { key: '
|
|
616
|
+
return (h(Host, { key: '57fa52484e644c5c021921fef7131ac832034feb', onClick: this.onClick, class: createColorClasses(this.color, {
|
|
614
617
|
[mode]: true,
|
|
615
618
|
'in-item': inItem,
|
|
616
619
|
'in-item-color': hostContext('ion-item.ion-color', el),
|
|
@@ -626,7 +629,7 @@ export class Select {
|
|
|
626
629
|
[`select-justify-${justify}`]: justifyEnabled,
|
|
627
630
|
[`select-shape-${shape}`]: shape !== undefined,
|
|
628
631
|
[`select-label-placement-${labelPlacement}`]: true,
|
|
629
|
-
}) }, h("label", { key: '
|
|
632
|
+
}) }, h("label", { key: '34cb142fa7fec6946e7eb39e30d639e534fa30f8', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), h("div", { key: '3243dcc4698ebd53adaa59ae470a6e90061feb57', class: "select-wrapper-inner" }, h("slot", { key: '1e0aa1e18a79397fd551c0c87bb00053a29e428c', name: "start" }), h("div", { key: 'e21995dd161859aaeade1063d0f27acf38941260', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '4cb0e709df3974acb3f3a9fa82fb6f02cc666fcf', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: 'bcf9062e00e10576b399eeee886ec48595b1e7a7', class: "select-highlight" }))));
|
|
630
633
|
}
|
|
631
634
|
static get is() { return "ion-select"; }
|
|
632
635
|
static get encapsulation() { return "shadow"; }
|
|
@@ -10,7 +10,7 @@ export class SelectOption {
|
|
|
10
10
|
this.value = undefined;
|
|
11
11
|
}
|
|
12
12
|
render() {
|
|
13
|
-
return h(Host, { key: '
|
|
13
|
+
return h(Host, { key: 'ba5a9c695c53fe0802af11a49f4305a9b8f71773', role: "option", id: this.inputId, class: getIonMode(this) });
|
|
14
14
|
}
|
|
15
15
|
static get is() { return "ion-select-option"; }
|
|
16
16
|
static get encapsulation() { return "shadow"; }
|
|
@@ -102,7 +102,7 @@ export class SelectPopover {
|
|
|
102
102
|
render() {
|
|
103
103
|
const { header, message, options, subHeader } = this;
|
|
104
104
|
const hasSubHeaderOrMessage = subHeader !== undefined || message !== undefined;
|
|
105
|
-
return (h(Host, { key: '
|
|
105
|
+
return (h(Host, { key: '302553a2eec4d1442751b8af28b7c9bd3487fd5d', class: getIonMode(this) }, h("ion-list", { key: '39ae8579e6fe3bae2c7504147268ad5c82fd27e6' }, header !== undefined && h("ion-list-header", { key: 'e0e6686380d188f46c593e1bb25287dcf08c75c2' }, header), hasSubHeaderOrMessage && (h("ion-item", { key: '8a2d8652db269593c0ba7d767277e12c2b06144d' }, h("ion-label", { key: 'a30cc0ecf95d5bdd6421ee1683922c1b853e98ea', class: "ion-text-wrap" }, subHeader !== undefined && h("h3", { key: 'c298459ca450123808a08d65660825b2c26d00e5' }, subHeader), message !== undefined && h("p", { key: 'ed895fbaec020e809021138401341b6fd7675035' }, message)))), this.renderOptions(options))));
|
|
106
106
|
}
|
|
107
107
|
static get is() { return "ion-select-popover"; }
|
|
108
108
|
static get encapsulation() { return "scoped"; }
|
|
@@ -25,11 +25,11 @@ export class SkeletonText {
|
|
|
25
25
|
const animated = this.animated && config.getBoolean('animated', true);
|
|
26
26
|
const inMedia = hostContext('ion-avatar', this.el) || hostContext('ion-thumbnail', this.el);
|
|
27
27
|
const mode = getIonMode(this);
|
|
28
|
-
return (h(Host, { key: '
|
|
28
|
+
return (h(Host, { key: '1a3e78e9a6f740d609d1f0b7a16cb6eff4a2d617', class: {
|
|
29
29
|
[mode]: true,
|
|
30
30
|
'skeleton-text-animated': animated,
|
|
31
31
|
'in-media': inMedia,
|
|
32
|
-
} }, h("span", { key: '
|
|
32
|
+
} }, h("span", { key: 'be3eabe196ec6e8ec19857375ba30f4c8aa58e7f' }, "\u00A0")));
|
|
33
33
|
}
|
|
34
34
|
static get is() { return "ion-skeleton-text"; }
|
|
35
35
|
static get encapsulation() { return "shadow"; }
|
|
@@ -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: '50cbaed55eeab15292447d106a80b93db4cb40de', class: createColorClasses(self.color, {
|
|
43
43
|
[mode]: true,
|
|
44
44
|
[`spinner-${spinnerName}`]: true,
|
|
45
45
|
'spinner-paused': self.paused || config.getBoolean('_testing'),
|
|
@@ -118,12 +118,12 @@ export class SplitPane {
|
|
|
118
118
|
}
|
|
119
119
|
render() {
|
|
120
120
|
const mode = getIonMode(this);
|
|
121
|
-
return (h(Host, { key: '
|
|
121
|
+
return (h(Host, { key: 'd54c356cd4bff7e55325160882dea8249f47f388', class: {
|
|
122
122
|
[mode]: true,
|
|
123
123
|
// Used internally for styling
|
|
124
124
|
[`split-pane-${mode}`]: true,
|
|
125
125
|
'split-pane-visible': this.visible,
|
|
126
|
-
} }, h("slot", { key: '
|
|
126
|
+
} }, h("slot", { key: 'af62690d0fd686cfbd29d888c79eda9001f13e2f' })));
|
|
127
127
|
}
|
|
128
128
|
static get is() { return "ion-split-pane"; }
|
|
129
129
|
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: '46d5498418f5379861c3d7465e8021dec45f1200', 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: 'b45045dccb87dfe75e3f5a5a474bb48b6c98e922' })));
|
|
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: '3a8595dd83f89e8319471a7a7f9f64b2565b384c', 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: '8b65eceb922f6abfa15f41046261586fb94b981f' })));
|
|
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: '4b528ce31f67e10ad849e0c99bd034bba675c227', 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: '0da8784b1b243ffaaaf04dd7adb55d6881ed0c08' }, 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: '2c628e8f1ebc129f84876c01530468cb97d8bf3a', class: "button-inner" }, h("slot", { key: '8052a171d197a7de1a7eb12b091c35f73ae1ee21' })), mode === 'md' && h("ion-ripple-effect", { key: '4186bdb5ed045ec16f495a14fa30ac864c576227', 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: '239bdb2ff2ec5cfcc74c51812cf6240f48acc617', onIonTabButtonClick: this.onTabClicked }, h("slot", { key: '2b266d0f87c7c82e992fe0d9b5c8f25569b118e3', name: "top" }), h("div", { key: '4cbbd010f0b0b1cd82714db7d098d28fab6d5218', class: "tabs-inner" }, h("slot", { key: '72b2a02cd29d5b30e47758f3d6daaa1021916256' })), h("slot", { key: '25494076dbbf7606d477b44f1b969719e7b4a805', 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: '4b76333b1ea5cab134b9dc1f5670c0d5a253fc32', class: createColorClasses(this.color, {
|
|
17
17
|
[mode]: true,
|
|
18
|
-
}) }, h("slot", { key: '
|
|
18
|
+
}) }, h("slot", { key: '3dee5f16bc58b3d92547d910bd4f441a00ce2039' })));
|
|
19
19
|
}
|
|
20
20
|
static get is() { return "ion-text"; }
|
|
21
21
|
static get encapsulation() { return "shadow"; }
|
|
@@ -359,7 +359,7 @@ export class Textarea {
|
|
|
359
359
|
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
360
360
|
*/
|
|
361
361
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
|
|
362
|
-
return (h(Host, { key: '
|
|
362
|
+
return (h(Host, { key: '37595a18d77dea1a337ac1c672e5f08a4128111d', class: createColorClasses(this.color, {
|
|
363
363
|
[mode]: true,
|
|
364
364
|
'has-value': hasValue,
|
|
365
365
|
'has-focus': hasFocus,
|
|
@@ -368,7 +368,7 @@ export class Textarea {
|
|
|
368
368
|
[`textarea-shape-${shape}`]: shape !== undefined,
|
|
369
369
|
[`textarea-label-placement-${labelPlacement}`]: true,
|
|
370
370
|
'textarea-disabled': disabled,
|
|
371
|
-
}) }, h("label", { key: '
|
|
371
|
+
}) }, h("label", { key: '67342758743e5a40448a32ff695876d39778621f', class: "textarea-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: 'a994be8264bf5652811cf816d79a04178954e83f', class: "textarea-wrapper-inner" }, h("div", { key: 'e09c93ebcd5b3d227d51e682ca23dfc7fd7027ad', class: "start-slot-wrapper" }, h("slot", { key: 'd39758f21f19ae70aea21e9a9a7b7c20991fe593', name: "start" })), h("div", { key: '6a4e10e53de4bb235ee30def4c9ae5bdee888816', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, h("textarea", Object.assign({ key: '9e254e551f124d972e9bc6b09ef0f2bb55890be5', class: "native-textarea", ref: (el) => (this.nativeInput = el), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown }, this.inheritedAttributes), value)), h("div", { key: 'a66aa2d2bc4778a0bec56a8b9ec9052a832eb3b2', class: "end-slot-wrapper" }, h("slot", { key: '8e6a90b4475de32e23afc593da4108610dcca663', name: "end" }))), shouldRenderHighlight && h("div", { key: '6da03205a8daff45581b20f0af3938634a9d5f8c', class: "textarea-highlight" })), this.renderBottomContent()));
|
|
372
372
|
}
|
|
373
373
|
static get is() { return "ion-textarea"; }
|
|
374
374
|
static get encapsulation() { return "scoped"; }
|
|
@@ -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: 'ea55000055f941b0c79561e8934be6242ec8e114', class: getIonMode(this) }, h("slot", { key: 'a4f934f442797f5c66a77e0ef8920fdd07c204f2' })));
|
|
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: '5a58dc437a6f4257244bbdd7e9a682a17d8c9a6b', 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: '58682ea7b8f47a08adfad419b5c76b34784c6501', class: "toolbar-title" }, h("slot", { key: '8a9248534e4c3076f5e2dfda38ef86069796851c' }))));
|
|
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: 'da148788489146a20b42023fdc6401e53c044767', 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: 'ab0a4d783aa43ba961492b3eb8beb60a38153057', class: wrapperClass }, h("div", { key: '83e49027fd1ca6553d6910ff91befeea43576f3c', class: "toast-container", part: "container" }, this.renderButtons(startButtons, 'start'), this.icon !== undefined && (h("ion-icon", { key: '025cb4b6b170a89548969a25bcce4ab7a3817898', class: "toast-icon", part: "icon", icon: this.icon, lazy: false, "aria-hidden": "true" })), h("div", { key: 'b811b4e1cbc1528c2cfb57898f5615692120f840', class: "toast-content", role: "status", "aria-atomic": "true", "aria-live": "polite" }, !revealContentToScreenReader && header !== undefined && this.renderHeader('oldHeader', 'true'), !revealContentToScreenReader && message !== undefined && this.renderToastMessage('oldMessage', 'true'), revealContentToScreenReader && header !== undefined && this.renderHeader('header'), revealContentToScreenReader && message !== undefined && this.renderToastMessage('header')), this.renderButtons(endButtons, 'end')))));
|
|
394
394
|
}
|
|
395
395
|
static get is() { return "ion-toast"; }
|
|
396
396
|
static get encapsulation() { return "shadow"; }
|
|
@@ -157,7 +157,7 @@ export class Toggle {
|
|
|
157
157
|
const value = this.getValue();
|
|
158
158
|
const rtl = isRTL(el) ? 'rtl' : 'ltr';
|
|
159
159
|
renderHiddenInput(true, el, name, checked ? value : '', disabled);
|
|
160
|
-
return (h(Host, { key: '
|
|
160
|
+
return (h(Host, { key: 'b0d648e071bc8095998b519ce4dcdd0ea91575c0', onClick: this.onClick, class: createColorClasses(color, {
|
|
161
161
|
[mode]: true,
|
|
162
162
|
'in-item': hostContext('ion-item', el),
|
|
163
163
|
'toggle-activated': activated,
|
|
@@ -167,10 +167,10 @@ export class Toggle {
|
|
|
167
167
|
[`toggle-alignment-${alignment}`]: true,
|
|
168
168
|
[`toggle-label-placement-${labelPlacement}`]: true,
|
|
169
169
|
[`toggle-${rtl}`]: true,
|
|
170
|
-
}) }, h("label", { key: '
|
|
170
|
+
}) }, h("label", { key: '9a2fe1d16dba66a9dfef450efebf2e5cbe3dcd00', class: "toggle-wrapper" }, h("input", Object.assign({ key: '4358d18cb86da768155c17f9da3aac641296c256', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, this.inheritedAttributes)), h("div", { key: '0ec99e452164d7059cc4f93d09e5b918f82c022a', class: {
|
|
171
171
|
'label-text-wrapper': true,
|
|
172
172
|
'label-text-wrapper-hidden': !this.hasLabel,
|
|
173
|
-
}, part: "label" }, h("slot", { key: '
|
|
173
|
+
}, part: "label" }, h("slot", { key: '1c5cbc99905a79e842e9487eb3ca654e1bab3c66' })), h("div", { key: 'ca8196423b429899febd11c7337d768ff05df6f4', class: "native-wrapper" }, this.renderToggleControl()))));
|
|
174
174
|
}
|
|
175
175
|
static get is() { return "ion-toggle"; }
|
|
176
176
|
static get encapsulation() { return "shadow"; }
|
|
@@ -62,10 +62,10 @@ export class Toolbar {
|
|
|
62
62
|
this.childrenStyles.forEach((value) => {
|
|
63
63
|
Object.assign(childStyles, value);
|
|
64
64
|
});
|
|
65
|
-
return (h(Host, { key: '
|
|
65
|
+
return (h(Host, { key: '4bb3a55001408a3bdf033af76b9196cb96c07c09', 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: '0891db157d6e028c6d03696f13fb510ea91b0296', class: "toolbar-background" }), h("div", { key: '95fbc870d808f74af4bb18cd8f8ec8c7828a9e0b', class: "toolbar-container" }, h("slot", { key: '84d4a9644660fe00ca085055ca8d12f3647531ad', name: "start" }), h("slot", { key: 'fd361dc9c9979f59aed2fedcf94629506fae62b0', name: "secondary" }), h("div", { key: '54d2b28616a4627c55766f66dc453707752758a6', class: "toolbar-content" }, h("slot", { key: '8f65e0830cce7135640b90eb694e282cb7e5efd2' })), h("slot", { key: 'c78be11a207c8674f222543646398636956087e6', name: "primary" }), h("slot", { key: 'ab25e1601ccaa8cb0d81921b849bcb7402aa7826', name: "end" }))));
|
|
69
69
|
}
|
|
70
70
|
static get is() { return "ion-toolbar"; }
|
|
71
71
|
static get encapsulation() { return "shadow"; }
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { config } from "../../global/config";
|
|
5
|
+
import { printIonWarning } from "../logging/index";
|
|
6
|
+
/**
|
|
7
|
+
* Moves focus to a specified element. Note that we do not remove the tabindex
|
|
8
|
+
* because that can result in an unintentional blur. Non-focusables can't be
|
|
9
|
+
* focused, so the body will get focused again.
|
|
10
|
+
*/
|
|
11
|
+
const moveFocus = (el) => {
|
|
12
|
+
el.tabIndex = -1;
|
|
13
|
+
el.focus();
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Elements that are hidden using `display: none` should not be focused even if
|
|
17
|
+
* they are present in the DOM.
|
|
18
|
+
*/
|
|
19
|
+
const isVisible = (el) => {
|
|
20
|
+
return el.offsetParent !== null;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The focus controller allows us to manage focus within a view so assistive
|
|
24
|
+
* technologies can inform users of changes to the navigation state. Traditional
|
|
25
|
+
* native apps have a way of informing assistive technology about a navigation
|
|
26
|
+
* state change. Mobile browsers have this too, but only when doing a full page
|
|
27
|
+
* load. In a single page app we do not do that, so we need to build this
|
|
28
|
+
* integration ourselves.
|
|
29
|
+
*/
|
|
30
|
+
export const createFocusController = () => {
|
|
31
|
+
const saveViewFocus = (referenceEl) => {
|
|
32
|
+
const focusManagerEnabled = config.get('focusManagerPriority', false);
|
|
33
|
+
/**
|
|
34
|
+
* When going back to a previously visited page focus should typically be moved
|
|
35
|
+
* back to the element that was last focused when the user was on this view.
|
|
36
|
+
*/
|
|
37
|
+
if (focusManagerEnabled) {
|
|
38
|
+
const activeEl = document.activeElement;
|
|
39
|
+
if (activeEl !== null && (referenceEl === null || referenceEl === void 0 ? void 0 : referenceEl.contains(activeEl))) {
|
|
40
|
+
activeEl.setAttribute(LAST_FOCUS, 'true');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const setViewFocus = (referenceEl) => {
|
|
45
|
+
const focusManagerPriorities = config.get('focusManagerPriority', false);
|
|
46
|
+
/**
|
|
47
|
+
* If the focused element is a descendant of the referenceEl then it's possible
|
|
48
|
+
* that the app developer manually moved focus, so we do not want to override that.
|
|
49
|
+
* This can happen with inputs the are focused when a view transitions in.
|
|
50
|
+
*/
|
|
51
|
+
if (Array.isArray(focusManagerPriorities) && !referenceEl.contains(document.activeElement)) {
|
|
52
|
+
/**
|
|
53
|
+
* When going back to a previously visited view focus should always be moved back
|
|
54
|
+
* to the element that the user was last focused on when they were on this view.
|
|
55
|
+
*/
|
|
56
|
+
const lastFocus = referenceEl.querySelector(`[${LAST_FOCUS}]`);
|
|
57
|
+
if (lastFocus && isVisible(lastFocus)) {
|
|
58
|
+
moveFocus(lastFocus);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
for (const priority of focusManagerPriorities) {
|
|
62
|
+
/**
|
|
63
|
+
* For each recognized case (excluding the default case) make sure to return
|
|
64
|
+
* so that the fallback focus behavior does not run.
|
|
65
|
+
*
|
|
66
|
+
* We intentionally query for specific roles/semantic elements so that the
|
|
67
|
+
* transition manager can work with both Ionic and non-Ionic UI components.
|
|
68
|
+
*
|
|
69
|
+
* If new selectors are added, be sure to remove the outline ring by adding
|
|
70
|
+
* new selectors to rule in core.scss.
|
|
71
|
+
*/
|
|
72
|
+
switch (priority) {
|
|
73
|
+
case 'content':
|
|
74
|
+
const content = referenceEl.querySelector('main, [role="main"]');
|
|
75
|
+
if (content && isVisible(content)) {
|
|
76
|
+
moveFocus(content);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
80
|
+
case 'heading':
|
|
81
|
+
const headingOne = referenceEl.querySelector('h1, [role="heading"][aria-level="1"]');
|
|
82
|
+
if (headingOne && isVisible(headingOne)) {
|
|
83
|
+
moveFocus(headingOne);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
case 'banner':
|
|
88
|
+
const header = referenceEl.querySelector('header, [role="banner"]');
|
|
89
|
+
if (header && isVisible(header)) {
|
|
90
|
+
moveFocus(header);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
break;
|
|
94
|
+
default:
|
|
95
|
+
printIonWarning(`Unrecognized focus manager priority value ${priority}`);
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* If there is nothing to focus then focus the page so focus at least moves to
|
|
101
|
+
* the correct view. The browser will then determine where within the page to
|
|
102
|
+
* move focus to.
|
|
103
|
+
*/
|
|
104
|
+
moveFocus(referenceEl);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
return {
|
|
108
|
+
saveViewFocus,
|
|
109
|
+
setViewFocus,
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
const LAST_FOCUS = 'ion-last-focus';
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { expect } from "@playwright/test";
|
|
5
|
+
import { configs, test } from "../../../test/playwright/index";
|
|
6
|
+
configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => {
|
|
7
|
+
test.describe(title('focus controller: generic components'), () => {
|
|
8
|
+
test.beforeEach(async ({ page }) => {
|
|
9
|
+
await page.goto('/src/utils/focus-controller/test/generic', config);
|
|
10
|
+
});
|
|
11
|
+
test('should focus heading', async ({ page }) => {
|
|
12
|
+
const goToPageOneButton = page.locator('page-root button.page-one');
|
|
13
|
+
const nav = page.locator('ion-nav');
|
|
14
|
+
const ionNavDidChange = await nav.spyOnEvent('ionNavDidChange');
|
|
15
|
+
// Focus heading on Page One
|
|
16
|
+
await goToPageOneButton.click();
|
|
17
|
+
await ionNavDidChange.next();
|
|
18
|
+
const pageOneTitle = page.locator('page-one h1');
|
|
19
|
+
await expect(pageOneTitle).toBeFocused();
|
|
20
|
+
});
|
|
21
|
+
test('should focus banner', async ({ page }) => {
|
|
22
|
+
const goToPageThreeButton = page.locator('page-root button.page-three');
|
|
23
|
+
const nav = page.locator('ion-nav');
|
|
24
|
+
const ionNavDidChange = await nav.spyOnEvent('ionNavDidChange');
|
|
25
|
+
const pageThreeHeader = page.locator('page-three header');
|
|
26
|
+
await goToPageThreeButton.click();
|
|
27
|
+
await ionNavDidChange.next();
|
|
28
|
+
await expect(pageThreeHeader).toBeFocused();
|
|
29
|
+
});
|
|
30
|
+
test('should focus content', async ({ page }) => {
|
|
31
|
+
const goToPageTwoButton = page.locator('page-root button.page-two');
|
|
32
|
+
const nav = page.locator('ion-nav');
|
|
33
|
+
const ionNavDidChange = await nav.spyOnEvent('ionNavDidChange');
|
|
34
|
+
const pageTwoContent = page.locator('page-two main');
|
|
35
|
+
await goToPageTwoButton.click();
|
|
36
|
+
await ionNavDidChange.next();
|
|
37
|
+
await expect(pageTwoContent).toBeFocused();
|
|
38
|
+
});
|
|
39
|
+
test('should return focus when going back', async ({ page, browserName }) => {
|
|
40
|
+
test.skip(browserName === 'webkit', 'Desktop Safari does not consider buttons to be focusable');
|
|
41
|
+
const goToPageOneButton = page.locator('page-root button.page-one');
|
|
42
|
+
const nav = page.locator('ion-nav');
|
|
43
|
+
const ionNavDidChange = await nav.spyOnEvent('ionNavDidChange');
|
|
44
|
+
const pageOneBackButton = page.locator('page-one ion-back-button');
|
|
45
|
+
await goToPageOneButton.click();
|
|
46
|
+
await ionNavDidChange.next();
|
|
47
|
+
await pageOneBackButton.click();
|
|
48
|
+
await ionNavDidChange.next();
|
|
49
|
+
await expect(goToPageOneButton).toBeFocused();
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
});
|