@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
|
@@ -19,6 +19,7 @@ export class PickerColumn {
|
|
|
19
19
|
this.isScrolling = false;
|
|
20
20
|
this.isColumnVisible = false;
|
|
21
21
|
this.canExitInputMode = true;
|
|
22
|
+
this.updateValueTextOnScroll = false;
|
|
22
23
|
this.centerPickerItemInView = (target, smooth = true, canExitInputMode = true) => {
|
|
23
24
|
const { isColumnVisible, scrollEl } = this;
|
|
24
25
|
if (isColumnVisible && scrollEl) {
|
|
@@ -33,6 +34,7 @@ export class PickerColumn {
|
|
|
33
34
|
* of these can cause a scroll to occur.
|
|
34
35
|
*/
|
|
35
36
|
this.canExitInputMode = canExitInputMode;
|
|
37
|
+
this.updateValueTextOnScroll = false;
|
|
36
38
|
scrollEl.scroll({
|
|
37
39
|
top,
|
|
38
40
|
left: 0,
|
|
@@ -105,6 +107,7 @@ export class PickerColumn {
|
|
|
105
107
|
let activeEl = this.activeItem;
|
|
106
108
|
const scrollCallback = () => {
|
|
107
109
|
raf(() => {
|
|
110
|
+
var _a;
|
|
108
111
|
if (!scrollEl)
|
|
109
112
|
return;
|
|
110
113
|
if (timeout) {
|
|
@@ -185,8 +188,23 @@ export class PickerColumn {
|
|
|
185
188
|
}
|
|
186
189
|
activeEl = newActiveElement;
|
|
187
190
|
this.setPickerItemActiveState(newActiveElement, true);
|
|
191
|
+
/**
|
|
192
|
+
* Set the aria-valuetext even though the value prop has not been updated yet.
|
|
193
|
+
* This enables some screen readers to announce the value as the users drag
|
|
194
|
+
* as opposed to when their release their pointer from the screen.
|
|
195
|
+
*
|
|
196
|
+
* When the value is programmatically updated, we will smoothly scroll
|
|
197
|
+
* to the new option. However, we do not want to update aria-valuetext mid-scroll
|
|
198
|
+
* as that can cause the old value to be briefly set before being set to the
|
|
199
|
+
* correct option. This will cause some screen readers to announce the old value
|
|
200
|
+
* again before announcing the new value. The correct valuetext will be set on render.
|
|
201
|
+
*/
|
|
202
|
+
if (this.updateValueTextOnScroll) {
|
|
203
|
+
(_a = this.assistiveFocusable) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-valuetext', this.getOptionValueText(newActiveElement));
|
|
204
|
+
}
|
|
188
205
|
timeout = setTimeout(() => {
|
|
189
206
|
this.isScrolling = false;
|
|
207
|
+
this.updateValueTextOnScroll = true;
|
|
190
208
|
enableHaptics && hapticSelectionEnd();
|
|
191
209
|
/**
|
|
192
210
|
* Certain tasks (such as those that
|
|
@@ -245,12 +263,141 @@ export class PickerColumn {
|
|
|
245
263
|
*/
|
|
246
264
|
this.el.classList.remove('picker-column-active');
|
|
247
265
|
};
|
|
266
|
+
/**
|
|
267
|
+
* Find the next enabled option after the active option.
|
|
268
|
+
* @param stride - How many options to "jump" over in order to select the next option.
|
|
269
|
+
* This can be used to implement PageUp/PageDown behaviors where pressing these keys
|
|
270
|
+
* scrolls the picker by more than 1 option. For example, a stride of 5 means select
|
|
271
|
+
* the enabled option 5 options after the active one. Note that the actual option selected
|
|
272
|
+
* may be past the stride if the option at the stride is disabled.
|
|
273
|
+
*/
|
|
274
|
+
this.findNextOption = (stride = 1) => {
|
|
275
|
+
const { activeItem } = this;
|
|
276
|
+
if (!activeItem)
|
|
277
|
+
return null;
|
|
278
|
+
let prevNode = activeItem;
|
|
279
|
+
let node = activeItem.nextElementSibling;
|
|
280
|
+
while (node != null) {
|
|
281
|
+
if (stride > 0) {
|
|
282
|
+
stride--;
|
|
283
|
+
}
|
|
284
|
+
if (node.tagName === 'ION-PICKER-COLUMN-OPTION' && !node.disabled && stride === 0) {
|
|
285
|
+
return node;
|
|
286
|
+
}
|
|
287
|
+
prevNode = node;
|
|
288
|
+
// Use nextElementSibling instead of nextSibling to avoid text/comment nodes
|
|
289
|
+
node = node.nextElementSibling;
|
|
290
|
+
}
|
|
291
|
+
return prevNode;
|
|
292
|
+
};
|
|
293
|
+
/**
|
|
294
|
+
* Find the next enabled option after the active option.
|
|
295
|
+
* @param stride - How many options to "jump" over in order to select the next option.
|
|
296
|
+
* This can be used to implement PageUp/PageDown behaviors where pressing these keys
|
|
297
|
+
* scrolls the picker by more than 1 option. For example, a stride of 5 means select
|
|
298
|
+
* the enabled option 5 options before the active one. Note that the actual option selected
|
|
299
|
+
* may be past the stride if the option at the stride is disabled.
|
|
300
|
+
*/
|
|
301
|
+
this.findPreviousOption = (stride = 1) => {
|
|
302
|
+
const { activeItem } = this;
|
|
303
|
+
if (!activeItem)
|
|
304
|
+
return null;
|
|
305
|
+
let nextNode = activeItem;
|
|
306
|
+
let node = activeItem.previousElementSibling;
|
|
307
|
+
while (node != null) {
|
|
308
|
+
if (stride > 0) {
|
|
309
|
+
stride--;
|
|
310
|
+
}
|
|
311
|
+
if (node.tagName === 'ION-PICKER-COLUMN-OPTION' && !node.disabled && stride === 0) {
|
|
312
|
+
return node;
|
|
313
|
+
}
|
|
314
|
+
nextNode = node;
|
|
315
|
+
// Use previousElementSibling instead of previousSibling to avoid text/comment nodes
|
|
316
|
+
node = node.previousElementSibling;
|
|
317
|
+
}
|
|
318
|
+
return nextNode;
|
|
319
|
+
};
|
|
320
|
+
this.onKeyDown = (ev) => {
|
|
321
|
+
/**
|
|
322
|
+
* The below operations should be inverted when running on a mobile device.
|
|
323
|
+
* For example, swiping up will dispatch an "ArrowUp" event. On desktop,
|
|
324
|
+
* this should cause the previous option to be selected. On mobile, swiping
|
|
325
|
+
* up causes a view to scroll down. As a result, swiping up on mobile should
|
|
326
|
+
* cause the next option to be selected. The Home/End operations remain
|
|
327
|
+
* unchanged because those always represent the first/last options, respectively.
|
|
328
|
+
*/
|
|
329
|
+
const mobile = isPlatform('mobile');
|
|
330
|
+
let newOption = null;
|
|
331
|
+
switch (ev.key) {
|
|
332
|
+
case 'ArrowDown':
|
|
333
|
+
newOption = mobile ? this.findPreviousOption() : this.findNextOption();
|
|
334
|
+
break;
|
|
335
|
+
case 'ArrowUp':
|
|
336
|
+
newOption = mobile ? this.findNextOption() : this.findPreviousOption();
|
|
337
|
+
break;
|
|
338
|
+
case 'PageUp':
|
|
339
|
+
newOption = mobile ? this.findNextOption(5) : this.findPreviousOption(5);
|
|
340
|
+
break;
|
|
341
|
+
case 'PageDown':
|
|
342
|
+
newOption = mobile ? this.findPreviousOption(5) : this.findNextOption(5);
|
|
343
|
+
break;
|
|
344
|
+
case 'Home':
|
|
345
|
+
/**
|
|
346
|
+
* There is no guarantee that the first child will be an ion-picker-column-option,
|
|
347
|
+
* so we do not use firstElementChild.
|
|
348
|
+
*/
|
|
349
|
+
newOption = this.el.querySelector('ion-picker-column-option:first-of-type');
|
|
350
|
+
break;
|
|
351
|
+
case 'End':
|
|
352
|
+
/**
|
|
353
|
+
* There is no guarantee that the last child will be an ion-picker-column-option,
|
|
354
|
+
* so we do not use lastElementChild.
|
|
355
|
+
*/
|
|
356
|
+
newOption = this.el.querySelector('ion-picker-column-option:last-of-type');
|
|
357
|
+
break;
|
|
358
|
+
default:
|
|
359
|
+
break;
|
|
360
|
+
}
|
|
361
|
+
if (newOption !== null) {
|
|
362
|
+
this.value = newOption.value;
|
|
363
|
+
// This stops any default browser behavior such as scrolling
|
|
364
|
+
ev.preventDefault();
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
/**
|
|
368
|
+
* Utility to generate the correct text for aria-valuetext.
|
|
369
|
+
*/
|
|
370
|
+
this.getOptionValueText = (el) => {
|
|
371
|
+
var _a;
|
|
372
|
+
return el ? (_a = el.getAttribute('aria-label')) !== null && _a !== void 0 ? _a : el.innerText : '';
|
|
373
|
+
};
|
|
374
|
+
/**
|
|
375
|
+
* Render an element that overlays the column. This element is for assistive
|
|
376
|
+
* tech to allow users to navigate the column up/down. This element should receive
|
|
377
|
+
* focus as it listens for synthesized keyboard events as required by the
|
|
378
|
+
* slider role: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/slider_role
|
|
379
|
+
*/
|
|
380
|
+
this.renderAssistiveFocusable = () => {
|
|
381
|
+
const { activeItem } = this;
|
|
382
|
+
const valueText = this.getOptionValueText(activeItem);
|
|
383
|
+
/**
|
|
384
|
+
* When using the picker, the valuetext provides important context that valuenow
|
|
385
|
+
* does not. Additionally, using non-zero valuemin/valuemax values can cause
|
|
386
|
+
* WebKit to incorrectly announce numeric valuetext values (such as a year
|
|
387
|
+
* like "2024") as percentages: https://bugs.webkit.org/show_bug.cgi?id=273126
|
|
388
|
+
*/
|
|
389
|
+
return (h("div", { ref: (el) => (this.assistiveFocusable = el), class: "assistive-focusable", role: "slider", tabindex: this.disabled ? undefined : 0, "aria-label": this.ariaLabel, "aria-valuemin": 0, "aria-valuemax": 0, "aria-valuenow": 0, "aria-valuetext": valueText, "aria-orientation": "vertical", onKeyDown: (ev) => this.onKeyDown(ev) }));
|
|
390
|
+
};
|
|
391
|
+
this.ariaLabel = null;
|
|
248
392
|
this.isActive = false;
|
|
249
393
|
this.disabled = false;
|
|
250
394
|
this.value = undefined;
|
|
251
395
|
this.color = 'primary';
|
|
252
396
|
this.numericInput = false;
|
|
253
397
|
}
|
|
398
|
+
ariaLabelChanged(newValue) {
|
|
399
|
+
this.ariaLabel = newValue;
|
|
400
|
+
}
|
|
254
401
|
valueChange() {
|
|
255
402
|
if (this.isColumnVisible) {
|
|
256
403
|
/**
|
|
@@ -366,6 +513,10 @@ export class PickerColumn {
|
|
|
366
513
|
this.scrollEl.focus();
|
|
367
514
|
}
|
|
368
515
|
}
|
|
516
|
+
connectedCallback() {
|
|
517
|
+
var _a;
|
|
518
|
+
this.ariaLabel = (_a = this.el.getAttribute('aria-label')) !== null && _a !== void 0 ? _a : 'Select a value';
|
|
519
|
+
}
|
|
369
520
|
get activeItem() {
|
|
370
521
|
const { value } = this;
|
|
371
522
|
const options = Array.from(this.el.querySelectorAll('ion-picker-column-option'));
|
|
@@ -383,14 +534,14 @@ export class PickerColumn {
|
|
|
383
534
|
render() {
|
|
384
535
|
const { color, disabled, isActive, numericInput } = this;
|
|
385
536
|
const mode = getIonMode(this);
|
|
386
|
-
return (h(Host, { key: '
|
|
537
|
+
return (h(Host, { key: 'ced35afc6326a20dbac68193921a807a9c10bb99', class: createColorClasses(color, {
|
|
387
538
|
[mode]: true,
|
|
388
539
|
['picker-column-active']: isActive,
|
|
389
540
|
['picker-column-numeric-input']: numericInput,
|
|
390
541
|
['picker-column-disabled']: disabled,
|
|
391
|
-
}) }, h("slot", { key: '
|
|
542
|
+
}) }, this.renderAssistiveFocusable(), h("slot", { key: '41e290dcc44dacb4237eb674ce2dedc7db66eb7d', name: "prefix" }), h("div", { key: '1fd869b063900103deadefc40929a1e8f02ec084', "aria-hidden": "true", class: "picker-opts", ref: (el) => {
|
|
392
543
|
this.scrollEl = el;
|
|
393
|
-
} }, h("div", { key: '
|
|
544
|
+
} }, h("div", { key: '0d2087f775b240c9b2534650eb27f3d99e7690a9', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '1245b2bb2b6314c3ec4e0ab3ece4e42beb360fc9', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '503b08f6bbe27fa7d34c165a93ec38ce7f1ad590', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("slot", { key: 'ec401a2b2d56546fb3f10239b71320ce7dc6a77d' }), h("div", { key: '97a234018291c5a6ca7a56bb1a9a417cac0b3e6f', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '0197711f71486a8fa3c184b593cebe1c1e54c585', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '961304f0a2a10afb3502ce4c5fbdceef0aa933cf', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), h("slot", { key: 'f38b83d26c3c2ba8ef00da7caf7f0be518b2007d', name: "suffix" })));
|
|
394
545
|
}
|
|
395
546
|
static get is() { return "ion-picker-column"; }
|
|
396
547
|
static get encapsulation() { return "shadow"; }
|
|
@@ -490,6 +641,7 @@ export class PickerColumn {
|
|
|
490
641
|
}
|
|
491
642
|
static get states() {
|
|
492
643
|
return {
|
|
644
|
+
"ariaLabel": {},
|
|
493
645
|
"isActive": {}
|
|
494
646
|
};
|
|
495
647
|
}
|
|
@@ -594,6 +746,9 @@ export class PickerColumn {
|
|
|
594
746
|
static get elementRef() { return "el"; }
|
|
595
747
|
static get watchers() {
|
|
596
748
|
return [{
|
|
749
|
+
"propName": "aria-label",
|
|
750
|
+
"methodName": "ariaLabelChanged"
|
|
751
|
+
}, {
|
|
597
752
|
"propName": "value",
|
|
598
753
|
"methodName": "valueChange"
|
|
599
754
|
}];
|
|
@@ -0,0 +1,83 @@
|
|
|
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 { PickerColumn } from "../picker-column";
|
|
7
|
+
import { PickerColumnOption } from "../../picker-column-option/picker-column-option";
|
|
8
|
+
describe('picker-column: assistive element', () => {
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
const mockIntersectionObserver = jest.fn();
|
|
11
|
+
mockIntersectionObserver.mockReturnValue({
|
|
12
|
+
observe: () => null,
|
|
13
|
+
unobserve: () => null,
|
|
14
|
+
disconnect: () => null,
|
|
15
|
+
});
|
|
16
|
+
global.IntersectionObserver = mockIntersectionObserver;
|
|
17
|
+
});
|
|
18
|
+
it('should have a default label', async () => {
|
|
19
|
+
const page = await newSpecPage({
|
|
20
|
+
components: [PickerColumn],
|
|
21
|
+
template: () => h("ion-picker-column", null),
|
|
22
|
+
});
|
|
23
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
24
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
25
|
+
expect(assistiveFocusable.getAttribute('aria-label')).not.toBe(null);
|
|
26
|
+
});
|
|
27
|
+
it('should have a custom label', async () => {
|
|
28
|
+
const page = await newSpecPage({
|
|
29
|
+
components: [PickerColumn],
|
|
30
|
+
template: () => h("ion-picker-column", { "aria-label": "my label" }),
|
|
31
|
+
});
|
|
32
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
33
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
34
|
+
expect(assistiveFocusable.getAttribute('aria-label')).toBe('my label');
|
|
35
|
+
});
|
|
36
|
+
it('should update a custom label', async () => {
|
|
37
|
+
const page = await newSpecPage({
|
|
38
|
+
components: [PickerColumn],
|
|
39
|
+
template: () => h("ion-picker-column", null),
|
|
40
|
+
});
|
|
41
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
42
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
43
|
+
pickerCol.setAttribute('aria-label', 'my label');
|
|
44
|
+
await page.waitForChanges();
|
|
45
|
+
expect(assistiveFocusable.getAttribute('aria-label')).toBe('my label');
|
|
46
|
+
});
|
|
47
|
+
it('should receive keyboard focus when enabled', async () => {
|
|
48
|
+
const page = await newSpecPage({
|
|
49
|
+
components: [PickerColumn],
|
|
50
|
+
template: () => h("ion-picker-column", null),
|
|
51
|
+
});
|
|
52
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
53
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
54
|
+
expect(assistiveFocusable.tabIndex).toBe(0);
|
|
55
|
+
});
|
|
56
|
+
it('should not receive keyboard focus when disabled', async () => {
|
|
57
|
+
const page = await newSpecPage({
|
|
58
|
+
components: [PickerColumn],
|
|
59
|
+
template: () => h("ion-picker-column", { disabled: true }),
|
|
60
|
+
});
|
|
61
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
62
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
63
|
+
expect(assistiveFocusable.tabIndex).toBe(-1);
|
|
64
|
+
});
|
|
65
|
+
it('should use option aria-label as assistive element aria-valuetext', async () => {
|
|
66
|
+
const page = await newSpecPage({
|
|
67
|
+
components: [PickerColumn, PickerColumnOption],
|
|
68
|
+
template: () => (h("ion-picker-column", { value: 1 }, h("ion-picker-column-option", { value: 1, "aria-label": "My Label" }, "My Text"))),
|
|
69
|
+
});
|
|
70
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
71
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
72
|
+
expect(assistiveFocusable.getAttribute('aria-valuetext')).toBe('My Label');
|
|
73
|
+
});
|
|
74
|
+
it('should use option text as assistive element aria-valuetext when no label provided', async () => {
|
|
75
|
+
const page = await newSpecPage({
|
|
76
|
+
components: [PickerColumn, PickerColumnOption],
|
|
77
|
+
template: () => (h("ion-picker-column", { value: 1 }, h("ion-picker-column-option", { value: 1 }, "My Text"))),
|
|
78
|
+
});
|
|
79
|
+
const pickerCol = page.body.querySelector('ion-picker-column');
|
|
80
|
+
const assistiveFocusable = pickerCol.shadowRoot.querySelector('.assistive-focusable');
|
|
81
|
+
expect(assistiveFocusable.getAttribute('aria-valuetext')).toBe('My Text');
|
|
82
|
+
});
|
|
83
|
+
});
|
|
@@ -76,10 +76,10 @@ export class PickerColumnOption {
|
|
|
76
76
|
render() {
|
|
77
77
|
const { color, disabled, ariaLabel } = this;
|
|
78
78
|
const mode = getIonMode(this);
|
|
79
|
-
return (h(Host, { key: '
|
|
79
|
+
return (h(Host, { key: 'cc4435a0ce0e55be1321bcabaf342ed68cf5ba1e', class: createColorClasses(color, {
|
|
80
80
|
[mode]: true,
|
|
81
81
|
['option-disabled']: disabled,
|
|
82
|
-
}) }, h("button", { key: '
|
|
82
|
+
}) }, h("button", { key: '0187fb967771e0787807a8538dce4e59f6a98565', tabindex: "-1", "aria-label": ariaLabel, disabled: disabled, onClick: () => this.onClick() }, h("slot", { key: 'dbe52552f3f27332816748c12d929cc81060841d' }))));
|
|
83
83
|
}
|
|
84
84
|
static get is() { return "ion-picker-column-option"; }
|
|
85
85
|
static get encapsulation() { return "shadow"; }
|
|
@@ -182,11 +182,11 @@ export class Picker {
|
|
|
182
182
|
render() {
|
|
183
183
|
const { htmlAttributes } = this;
|
|
184
184
|
const mode = getIonMode(this);
|
|
185
|
-
return (h(Host, Object.assign({ key: '
|
|
185
|
+
return (h(Host, Object.assign({ key: '26e3144adcdf01605271d01e468bb4a75ce854b1', "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
|
|
186
186
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
187
187
|
}, class: Object.assign({ [mode]: true,
|
|
188
188
|
// Used internally for styling
|
|
189
|
-
[`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: '
|
|
189
|
+
[`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: 'fa212d21406606186cd95f8c7a4f119696ac8d4a', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '19ea889f65cb6a68a9db26cf9f83c6587cfcf07e', tabindex: "0" }), h("div", { key: '5fc0f5d26915ba353b9f0335946f94b6fda95e1e', class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, h("div", { key: '3fa5bff4ac0013ef31845482a27a14caebbdcd2f', class: "picker-toolbar" }, this.buttons.map((b) => (h("div", { class: buttonWrapperClass(b) }, h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), h("div", { key: '2ff6376956d01dcd9ec01b8d6972dd4b37ffb1a1', class: "picker-columns" }, h("div", { key: '4adcef77429f10a3faa50b41d1eaf3404387997c', class: "picker-above-highlight" }), this.presented && this.columns.map((c) => h("ion-picker-legacy-column", { col: c })), h("div", { key: 'e0f37d3e9896eb2bc0f0aef4762a897130851963', class: "picker-below-highlight" }))), h("div", { key: '671bb7d0f487b0d7c7fa70388f8fa1de77448b9f', tabindex: "0" })));
|
|
190
190
|
}
|
|
191
191
|
static get is() { return "ion-picker-legacy"; }
|
|
192
192
|
static get encapsulation() { return "scoped"; }
|
|
@@ -336,9 +336,9 @@ export class PickerColumnCmp {
|
|
|
336
336
|
render() {
|
|
337
337
|
const col = this.col;
|
|
338
338
|
const mode = getIonMode(this);
|
|
339
|
-
return (h(Host, { key: '
|
|
339
|
+
return (h(Host, { key: '56289a294e5c580f3e7fe5fc12777aa7f80ad19b', class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
|
|
340
340
|
'max-width': this.col.columnWidth,
|
|
341
|
-
} }, col.prefix && (h("div", { key: '
|
|
341
|
+
} }, col.prefix && (h("div", { key: 'd21f44667b5df567d6879723fe643ea7c2c60bef', class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), h("div", { key: 'bb427e5f24fd832703926e0e847ad05567597262', class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index) => (h("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index }, o.text)))), col.suffix && (h("div", { key: '0413f7c074b6534b8967387ecb9957a79a267aff', class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
|
|
342
342
|
}
|
|
343
343
|
static get is() { return "ion-picker-legacy-column"; }
|
|
344
344
|
static get originalStyleUrls() {
|
|
@@ -7,7 +7,7 @@ import { CoreDelegate, attachComponent, detachComponent } from "../../utils/fram
|
|
|
7
7
|
import { addEventListener, raf, hasLazyBuild } from "../../utils/helpers";
|
|
8
8
|
import { createLockController } from "../../utils/lock-controller";
|
|
9
9
|
import { printIonWarning } from "../../utils/logging/index";
|
|
10
|
-
import { BACKDROP, dismiss, eventMethod, prepareOverlay, present, setOverlayId } from "../../utils/overlays";
|
|
10
|
+
import { BACKDROP, dismiss, eventMethod, prepareOverlay, present, setOverlayId, FOCUS_TRAP_DISABLE_CLASS, } from "../../utils/overlays";
|
|
11
11
|
import { isPlatform } from "../../utils/platform";
|
|
12
12
|
import { getClassMap } from "../../utils/theme";
|
|
13
13
|
import { deepReady, waitForMount } from "../../utils/transition/index";
|
|
@@ -107,6 +107,7 @@ export class Popover {
|
|
|
107
107
|
this.arrow = true;
|
|
108
108
|
this.isOpen = false;
|
|
109
109
|
this.keyboardEvents = false;
|
|
110
|
+
this.focusTrap = true;
|
|
110
111
|
this.keepContentsMounted = false;
|
|
111
112
|
}
|
|
112
113
|
onTriggerChange() {
|
|
@@ -333,12 +334,12 @@ export class Popover {
|
|
|
333
334
|
}
|
|
334
335
|
render() {
|
|
335
336
|
const mode = getIonMode(this);
|
|
336
|
-
const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes } = this;
|
|
337
|
+
const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes, focusTrap } = this;
|
|
337
338
|
const desktop = isPlatform('desktop');
|
|
338
339
|
const enableArrow = arrow && !parentPopover;
|
|
339
|
-
return (h(Host, Object.assign({ key: '
|
|
340
|
+
return (h(Host, Object.assign({ key: '17e5e8b3e7ba5e251665fb9d0ade10c781f82f0e', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
|
|
340
341
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
341
|
-
}, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { key: '
|
|
342
|
+
}, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { key: 'c12fb94b375d7e88a0c5d715440c0f66ad7ee817', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: '478b388cc9a5a382003a2863e968e77a174914ab', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { key: 'f1c63a0079f197a8d4577e7c00a654871fb9d816', class: "popover-arrow", part: "arrow" }), h("div", { key: '08b62a321c09ad4b0f90460468ecbc1d56320bf1', class: "popover-content", part: "content" }, h("slot", { key: '55645ff597f64d434219caa28015cf2a4ceb0ee5' })))));
|
|
342
343
|
}
|
|
343
344
|
static get is() { return "ion-popover"; }
|
|
344
345
|
static get encapsulation() { return "shadow"; }
|
|
@@ -860,6 +861,24 @@ export class Popover {
|
|
|
860
861
|
"reflect": false,
|
|
861
862
|
"defaultValue": "false"
|
|
862
863
|
},
|
|
864
|
+
"focusTrap": {
|
|
865
|
+
"type": "boolean",
|
|
866
|
+
"mutable": false,
|
|
867
|
+
"complexType": {
|
|
868
|
+
"original": "boolean",
|
|
869
|
+
"resolved": "boolean",
|
|
870
|
+
"references": {}
|
|
871
|
+
},
|
|
872
|
+
"required": false,
|
|
873
|
+
"optional": false,
|
|
874
|
+
"docs": {
|
|
875
|
+
"tags": [],
|
|
876
|
+
"text": "If `true`, focus will not be allowed to move outside of this overlay.\nIf `false`, focus will be allowed to move outside of the overlay.\n\nIn most scenarios this property should remain set to `true`. Setting\nthis property to `false` can cause severe accessibility issues as users\nrelying on assistive technologies may be able to move focus into\na confusing state. We recommend only setting this to `false` when\nabsolutely necessary.\n\nDevelopers may want to consider disabling focus trapping if this\noverlay presents a non-Ionic overlay from a 3rd party library.\nDevelopers would disable focus trapping on the Ionic overlay\nwhen presenting the 3rd party overlay and then re-enable\nfocus trapping when dismissing the 3rd party overlay and moving\nfocus back to the Ionic overlay."
|
|
877
|
+
},
|
|
878
|
+
"attribute": "focus-trap",
|
|
879
|
+
"reflect": false,
|
|
880
|
+
"defaultValue": "true"
|
|
881
|
+
},
|
|
863
882
|
"keepContentsMounted": {
|
|
864
883
|
"type": "boolean",
|
|
865
884
|
"mutable": false,
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { h } from "@stencil/core";
|
|
5
5
|
import { newSpecPage } from "@stencil/core/testing";
|
|
6
6
|
import { Popover } from "../../popover";
|
|
7
|
+
import { FOCUS_TRAP_DISABLE_CLASS } from "../../../../utils/overlays";
|
|
7
8
|
describe('popover: htmlAttributes inheritance', () => {
|
|
8
9
|
it('should correctly inherit attributes on host', async () => {
|
|
9
10
|
const page = await newSpecPage({
|
|
@@ -14,3 +15,21 @@ describe('popover: htmlAttributes inheritance', () => {
|
|
|
14
15
|
await expect(popover.getAttribute('data-testid')).toBe('basic-popover');
|
|
15
16
|
});
|
|
16
17
|
});
|
|
18
|
+
describe('popover: focus trap', () => {
|
|
19
|
+
it('should set the focus trap class when disabled', async () => {
|
|
20
|
+
const page = await newSpecPage({
|
|
21
|
+
components: [Popover],
|
|
22
|
+
template: () => h("ion-popover", { focusTrap: false, overlayIndex: 1 }),
|
|
23
|
+
});
|
|
24
|
+
const popover = page.body.querySelector('ion-popover');
|
|
25
|
+
expect(popover.classList.contains(FOCUS_TRAP_DISABLE_CLASS)).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
it('should not set the focus trap class by default', async () => {
|
|
28
|
+
const page = await newSpecPage({
|
|
29
|
+
components: [Popover],
|
|
30
|
+
template: () => h("ion-popover", { overlayIndex: 1 }),
|
|
31
|
+
});
|
|
32
|
+
const popover = page.body.querySelector('ion-popover');
|
|
33
|
+
expect(popover.classList.contains(FOCUS_TRAP_DISABLE_CLASS)).toBe(false);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
@@ -28,7 +28,7 @@ export class ProgressBar {
|
|
|
28
28
|
const mode = getIonMode(this);
|
|
29
29
|
// If the progress is displayed as a solid bar.
|
|
30
30
|
const progressSolid = buffer === 1;
|
|
31
|
-
return (h(Host, { key: '
|
|
31
|
+
return (h(Host, { key: 'b293f4475bcdaa7851b41ebfda659037f0365120', role: "progressbar", "aria-valuenow": type === 'determinate' ? value : null, "aria-valuemin": "0", "aria-valuemax": "1", class: createColorClasses(color, {
|
|
32
32
|
[mode]: true,
|
|
33
33
|
[`progress-bar-${type}`]: true,
|
|
34
34
|
'progress-paused': paused,
|
|
@@ -107,7 +107,7 @@ export class Radio {
|
|
|
107
107
|
const { checked, disabled, color, el, justify, labelPlacement, hasLabel, buttonTabindex, alignment } = this;
|
|
108
108
|
const mode = getIonMode(this);
|
|
109
109
|
const inItem = hostContext('ion-item', el);
|
|
110
|
-
return (h(Host, { key: '
|
|
110
|
+
return (h(Host, { key: 'e44cade8aa8415bdc825f9d17fc8562487cf5d35', onFocus: this.onFocus, onBlur: this.onBlur, onClick: this.onClick, class: createColorClasses(color, {
|
|
111
111
|
[mode]: true,
|
|
112
112
|
'in-item': inItem,
|
|
113
113
|
'radio-checked': checked,
|
|
@@ -118,10 +118,10 @@ export class Radio {
|
|
|
118
118
|
// Focus and active styling should not apply when the radio is in an item
|
|
119
119
|
'ion-activatable': !inItem,
|
|
120
120
|
'ion-focusable': !inItem,
|
|
121
|
-
}), role: "radio", "aria-checked": checked ? 'true' : 'false', "aria-disabled": disabled ? 'true' : null, tabindex: buttonTabindex }, h("label", { key: '
|
|
121
|
+
}), role: "radio", "aria-checked": checked ? 'true' : 'false', "aria-disabled": disabled ? 'true' : null, tabindex: buttonTabindex }, h("label", { key: '48a99aa80a7d7b4085ef26faf3167903c975517c', class: "radio-wrapper" }, h("div", { key: 'a8d74e0603b41215ea3e867356a9be0dcf3722d8', class: {
|
|
122
122
|
'label-text-wrapper': true,
|
|
123
123
|
'label-text-wrapper-hidden': !hasLabel,
|
|
124
|
-
}, part: "label" }, h("slot", { key: '
|
|
124
|
+
}, part: "label" }, h("slot", { key: '9e3cce6254e70b02d50381537438a70435b031cc' })), h("div", { key: 'bfa3ee188d911e056a3e60178eac41362efb94b3', class: "native-wrapper" }, this.renderRadioControl()))));
|
|
125
125
|
}
|
|
126
126
|
static get is() { return "ion-radio"; }
|
|
127
127
|
static get encapsulation() { return "shadow"; }
|
|
@@ -153,7 +153,7 @@ export class RadioGroup {
|
|
|
153
153
|
const { label, labelId, el, name, value } = this;
|
|
154
154
|
const mode = getIonMode(this);
|
|
155
155
|
renderHiddenInput(true, el, name, value, false);
|
|
156
|
-
return h(Host, { key: '
|
|
156
|
+
return h(Host, { key: '7a8ad7eb6a05c6f96a348dcf30fd0c610a95688c', role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick, class: mode });
|
|
157
157
|
}
|
|
158
158
|
static get is() { return "ion-radio-group"; }
|
|
159
159
|
static get properties() {
|
|
@@ -561,7 +561,7 @@ export class Range {
|
|
|
561
561
|
const needsEndAdjustment = inItem && !hasEndContent;
|
|
562
562
|
const mode = getIonMode(this);
|
|
563
563
|
renderHiddenInput(true, el, this.name, JSON.stringify(this.getValue()), disabled);
|
|
564
|
-
return (h(Host, { key: '
|
|
564
|
+
return (h(Host, { key: '7ad5ca892fd46c64ce5583e91e6812410a869921', onFocusin: this.onFocus, onFocusout: this.onBlur, id: rangeId, class: createColorClasses(this.color, {
|
|
565
565
|
[mode]: true,
|
|
566
566
|
'in-item': inItem,
|
|
567
567
|
'range-disabled': disabled,
|
|
@@ -570,10 +570,10 @@ export class Range {
|
|
|
570
570
|
[`range-label-placement-${labelPlacement}`]: true,
|
|
571
571
|
'range-item-start-adjustment': needsStartAdjustment,
|
|
572
572
|
'range-item-end-adjustment': needsEndAdjustment,
|
|
573
|
-
}) }, h("label", { key: '
|
|
573
|
+
}) }, h("label", { key: 'eb8d46a9572341b4cc3c91d8a5de0667bd166ca4', class: "range-wrapper", id: "range-label" }, h("div", { key: '21acd6ff6eba17bf6923bf723fea055b95fd29ca', class: {
|
|
574
574
|
'label-text-wrapper': true,
|
|
575
575
|
'label-text-wrapper-hidden': !hasLabel,
|
|
576
|
-
}, part: "label" }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { key: '
|
|
576
|
+
}, part: "label" }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { key: '7644c86a6ad3edf2c27f02dd2a14795b3720ea0d', class: "native-wrapper" }, h("slot", { key: '1bbeccee57addc126b36de395e28ba655248695b', name: "start" }), this.renderRangeSlider(), h("slot", { key: '2963dd84e4116fc3956c304eb53deefd0d1291df', name: "end" })))));
|
|
577
577
|
}
|
|
578
578
|
static get is() { return "ion-range"; }
|
|
579
579
|
static get encapsulation() { return "shadow"; }
|
|
@@ -594,7 +594,7 @@ export class Refresher {
|
|
|
594
594
|
}
|
|
595
595
|
render() {
|
|
596
596
|
const mode = getIonMode(this);
|
|
597
|
-
return (h(Host, { key: '
|
|
597
|
+
return (h(Host, { key: '1696f66f62d18c9075294f17cb24263325fcf35d', slot: "fixed", class: {
|
|
598
598
|
[mode]: true,
|
|
599
599
|
// Used internally for styling
|
|
600
600
|
[`refresher-${mode}`]: true,
|
|
@@ -52,7 +52,7 @@ export class RefresherContent {
|
|
|
52
52
|
const pullingIcon = this.pullingIcon;
|
|
53
53
|
const hasSpinner = pullingIcon != null && SPINNERS[pullingIcon] !== undefined;
|
|
54
54
|
const mode = getIonMode(this);
|
|
55
|
-
return (h(Host, { key: '
|
|
55
|
+
return (h(Host, { key: '1bec5b4da221c69d856f3f5ddf40f2e03ebf2a4c', class: mode }, h("div", { key: '4fcc526c4f1881e9368d9cd16bd7030919bd3841', class: "refresher-pulling" }, this.pullingIcon && hasSpinner && (h("div", { key: 'a4e9e2e12c2d7faefc8303ec8c021f999ddf308e', class: "refresher-pulling-icon" }, h("div", { key: '5a2d215feb7fb4b64d540d3a65c0f24b415a2433', class: "spinner-arrow-container" }, h("ion-spinner", { key: 'abef2621d671ac6ff0abac43a702cbd825b7f127', name: this.pullingIcon, paused: true }), mode === 'md' && this.pullingIcon === 'circular' && (h("div", { key: '30087d672c3780672a05874cd93cd099b2855462', class: "arrow-container" }, h("ion-icon", { key: '5e30333dee469aec0d8efc8c4e6dabb619c6f363', icon: caretBackSharp, "aria-hidden": "true" })))))), this.pullingIcon && !hasSpinner && (h("div", { key: '48fe72b5ce8ded633c6ee799cebb520b9c8be528', class: "refresher-pulling-icon" }, h("ion-icon", { key: 'd8dfd5d42056b1c0a436c5006affb255407816c0', icon: this.pullingIcon, lazy: false, "aria-hidden": "true" }))), this.pullingText !== undefined && this.renderPullingText()), h("div", { key: 'c2cbfb94f157c82601ffe7bb815ff82ebc7c0a49', class: "refresher-refreshing" }, this.refreshingSpinner && (h("div", { key: '17f3ebe6a31768d5e389f45a2c12f68600185db9', class: "refresher-refreshing-icon" }, h("ion-spinner", { key: 'e8e61f8d7189c9939bba184201c9509d1d5b0fad', name: this.refreshingSpinner }))), this.refreshingText !== undefined && this.renderRefreshingText())));
|
|
56
56
|
}
|
|
57
57
|
static get is() { return "ion-refresher-content"; }
|
|
58
58
|
static get properties() {
|
|
@@ -20,7 +20,7 @@ export class Reorder {
|
|
|
20
20
|
render() {
|
|
21
21
|
const mode = getIonMode(this);
|
|
22
22
|
const reorderIcon = mode === 'ios' ? reorderThreeOutline : reorderTwoSharp;
|
|
23
|
-
return (h(Host, { key: '
|
|
23
|
+
return (h(Host, { key: '663d74e231e3af56b6298ee2539fdac9c8465839', class: mode }, h("slot", { key: 'c7c384ab8c9ca8abdc89cd984a39dfde70e342ca' }, h("ion-icon", { key: 'c8b6052db03d4b9e33a90e600c20861c73ee73ce', icon: reorderIcon, lazy: false, class: "reorder-icon", part: "icon", "aria-hidden": "true" }))));
|
|
24
24
|
}
|
|
25
25
|
static get is() { return "ion-reorder"; }
|
|
26
26
|
static get encapsulation() { return "shadow"; }
|
|
@@ -238,7 +238,7 @@ export class ReorderGroup {
|
|
|
238
238
|
}
|
|
239
239
|
render() {
|
|
240
240
|
const mode = getIonMode(this);
|
|
241
|
-
return (h(Host, { key: '
|
|
241
|
+
return (h(Host, { key: '491f3e5843cf728ff4589e58bd86b8ce6709b293', class: {
|
|
242
242
|
[mode]: true,
|
|
243
243
|
'reorder-enabled': !this.disabled,
|
|
244
244
|
'reorder-list-active': this.state !== 0 /* ReorderGroupState.Idle */,
|
|
@@ -59,7 +59,7 @@ export class RippleEffect {
|
|
|
59
59
|
}
|
|
60
60
|
render() {
|
|
61
61
|
const mode = getIonMode(this);
|
|
62
|
-
return (h(Host, { key: '
|
|
62
|
+
return (h(Host, { key: '2302f087ab1c6755355736e4ca77309c5fdcf185', role: "presentation", class: {
|
|
63
63
|
[mode]: true,
|
|
64
64
|
unbounded: this.unbounded,
|
|
65
65
|
} }));
|
|
@@ -23,10 +23,10 @@ export class RouterLink {
|
|
|
23
23
|
rel: this.rel,
|
|
24
24
|
target: this.target,
|
|
25
25
|
};
|
|
26
|
-
return (h(Host, { key: '
|
|
26
|
+
return (h(Host, { key: 'f876442cab5b14b7e83c6d6ad2c2d878a9c57439', onClick: this.onClick, class: createColorClasses(this.color, {
|
|
27
27
|
[mode]: true,
|
|
28
28
|
'ion-activatable': true,
|
|
29
|
-
}) }, h("a", Object.assign({ key: '
|
|
29
|
+
}) }, h("a", Object.assign({ key: 'c44b78ec1fd10a40c23bfe548860ac2b346646a8' }, attrs), h("slot", { key: 'd32180a567613f79f89885135bd0d776ffc1eb8e' }))));
|
|
30
30
|
}
|
|
31
31
|
static get is() { return "ion-router-link"; }
|
|
32
32
|
static get encapsulation() { return "shadow"; }
|
|
@@ -177,7 +177,7 @@ export class RouterOutlet {
|
|
|
177
177
|
return true;
|
|
178
178
|
}
|
|
179
179
|
render() {
|
|
180
|
-
return h("slot", { key: '
|
|
180
|
+
return h("slot", { key: '8279a453c66a766e6e383ff59842b4ae070c13a9' });
|
|
181
181
|
}
|
|
182
182
|
static get is() { return "ion-router-outlet"; }
|
|
183
183
|
static get encapsulation() { return "shadow"; }
|