voyager-ionic-core 8.0.1 → 8.2.0
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/README.md +1 -1
- package/components/checkbox.js +5 -5
- package/components/index2.js +119 -1
- package/components/ion-accordion-group.js +2 -2
- package/components/ion-content.js +6 -4
- package/components/ion-datetime-button.js +2 -2
- package/components/ion-datetime.js +17 -14
- 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 +5 -5
- 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 +20 -7
- 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 +5 -5
- package/components/ion-toolbar.js +2 -2
- package/components/ionic-global.js +8 -1
- package/components/ios.transition.js +94 -67
- package/components/label.js +3 -3
- 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 +177 -6
- 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 +16 -5
- package/components/ripple-effect.js +1 -1
- package/components/select-popover.js +2 -2
- package/components/spinner.js +1 -1
- package/css/core.css +1 -1
- package/css/core.css.map +1 -1
- package/css/global.bundle.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/css/palettes/dark.always.css +1 -1
- package/css/palettes/dark.always.css.map +1 -1
- package/css/palettes/dark.class.css +1 -1
- package/css/palettes/dark.class.css.map +1 -1
- package/css/palettes/dark.system.css +1 -1
- package/css/palettes/dark.system.css.map +1 -1
- package/css/palettes/high-contrast-dark.always.css.map +1 -1
- package/css/palettes/high-contrast-dark.class.css.map +1 -1
- package/css/palettes/high-contrast-dark.system.css.map +1 -1
- package/css/palettes/high-contrast.always.css.map +1 -1
- package/css/palettes/high-contrast.class.css.map +1 -1
- package/css/palettes/high-contrast.system.css.map +1 -1
- package/css/typography.css.map +1 -1
- package/dist/cjs/{app-globals-542c4d91.js → app-globals-1c261a7f.js} +1 -1
- package/dist/cjs/{button-active-47528f4c.js → button-active-8da8d63e.js} +1 -1
- package/dist/cjs/{hardware-back-button-06ae4d9c.js → hardware-back-button-93f7a8f0.js} +2 -2
- package/dist/cjs/{index-57b504ac.js → index-93b3a556.js} +2 -2
- package/dist/cjs/index-ceeb4ff8.js +2259 -0
- package/dist/cjs/{index-c76a1d14.js → index-fa3cf6ba.js} +124 -6
- package/dist/cjs/index.cjs.js +9 -9
- package/dist/cjs/ion-accordion_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-action-sheet.cjs.entry.js +5 -5
- package/dist/cjs/ion-alert.cjs.entry.js +5 -5
- package/dist/cjs/ion-app_8.cjs.entry.js +20 -19
- package/dist/cjs/ion-avatar_3.cjs.entry.js +3 -3
- package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
- package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
- package/dist/cjs/ion-checkbox.cjs.entry.js +7 -7
- package/dist/cjs/ion-chip.cjs.entry.js +2 -2
- package/dist/cjs/ion-col_3.cjs.entry.js +5 -5
- package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
- package/dist/cjs/ion-datetime_3.cjs.entry.js +25 -22
- package/dist/cjs/ion-fab_3.cjs.entry.js +8 -8
- package/dist/cjs/ion-img.cjs.entry.js +3 -3
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +5 -5
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +5 -5
- package/dist/cjs/ion-input.cjs.entry.js +9 -6
- package/dist/cjs/ion-item-option_3.cjs.entry.js +6 -6
- package/dist/cjs/ion-item_8.cjs.entry.js +15 -15
- package/dist/cjs/ion-loading.cjs.entry.js +6 -6
- package/dist/cjs/ion-menu_3.cjs.entry.js +11 -11
- package/dist/cjs/ion-modal.cjs.entry.js +13 -12
- package/dist/cjs/ion-nav_2.cjs.entry.js +6 -5
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +4 -4
- package/dist/cjs/ion-picker-column.cjs.entry.js +177 -8
- package/dist/cjs/ion-picker.cjs.entry.js +3 -3
- package/dist/cjs/ion-popover.cjs.entry.js +9 -8
- package/dist/cjs/ion-progress-bar.cjs.entry.js +3 -3
- package/dist/cjs/ion-radio_2.cjs.entry.js +19 -8
- package/dist/cjs/ion-range.cjs.entry.js +5 -5
- package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +3 -3
- package/dist/cjs/ion-route_4.cjs.entry.js +4 -4
- package/dist/cjs/ion-searchbar.cjs.entry.js +7 -7
- package/dist/cjs/ion-segment_2.cjs.entry.js +15 -14
- package/dist/cjs/ion-select_3.cjs.entry.js +27 -14
- package/dist/cjs/ion-spinner.cjs.entry.js +3 -3
- package/dist/cjs/ion-split-pane.cjs.entry.js +4 -4
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +6 -6
- package/dist/cjs/ion-tab_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-text.cjs.entry.js +4 -4
- package/dist/cjs/ion-textarea.cjs.entry.js +4 -4
- package/dist/cjs/ion-toast.cjs.entry.js +6 -6
- package/dist/cjs/ion-toggle.cjs.entry.js +7 -7
- package/dist/cjs/{ionic-global-f3622afe.js → ionic-global-f401ca2e.js} +9 -2
- package/dist/cjs/ionic.cjs.js +5 -5
- package/dist/cjs/{ios.transition-288dfa83.js → ios.transition-ae54d131.js} +98 -69
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-6e5f6a8d.js → md.transition-dbc2d3f3.js} +4 -2
- package/dist/cjs/{overlays-32cfd236.js → overlays-d4afb0bd.js} +5 -3
- package/dist/cjs/{status-tap-c47ff5f5.js → status-tap-0a82a165.js} +1 -1
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/accordion/test/a11y/accordion.e2e.js +4 -3
- package/dist/collection/components/accordion-group/accordion-group.js +3 -3
- package/dist/collection/components/alert/test/a11y/alert.e2e.js +3 -1
- package/dist/collection/components/breadcrumbs/test/reactive/breadcrumbs.e2e.js +1 -1
- package/dist/collection/components/checkbox/checkbox.ios.css +1 -0
- package/dist/collection/components/checkbox/checkbox.js +4 -4
- package/dist/collection/components/checkbox/checkbox.md.css +1 -0
- 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 +18 -15
- package/dist/collection/components/datetime/test/overlay-roles/datetime.e2e.js +34 -0
- package/dist/collection/components/datetime/test/position/datetime.e2e.js +1 -1
- 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 +25 -5
- 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/test/a11y/item.e2e.js +24 -4
- package/dist/collection/components/item/test/inputs/item.e2e.js +46 -0
- package/dist/collection/components/item/test/slotted-inputs/item.e2e.js +135 -0
- package/dist/collection/components/item-divider/item-divider.js +2 -2
- package/dist/collection/components/item-group/item-group.js +1 -1
- package/dist/collection/components/item-option/item-option.js +2 -2
- package/dist/collection/components/item-options/item-options.js +1 -1
- package/dist/collection/components/item-sliding/item-sliding.js +1 -1
- package/dist/collection/components/label/label.ios.css +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/loading/test/basic/loading.e2e.js +1 -1
- package/dist/collection/components/menu/menu.js +2 -2
- package/dist/collection/components/menu/test/basic/menu.e2e.js +1 -1
- 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/modal/test/trigger/modal.e2e.js +1 -1
- package/dist/collection/components/nav/nav.js +1 -1
- package/dist/collection/components/nav/test/basic/nav.e2e.js +5 -5
- package/dist/collection/components/nav/test/nested/nav.e2e.js +6 -6
- package/dist/collection/components/nav/test/routing/nav.e2e.js +7 -7
- 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 +180 -6
- 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/popover/test/trigger/popover.e2e.js +1 -1
- package/dist/collection/components/progress-bar/progress-bar.js +1 -1
- package/dist/collection/components/radio/radio.ios.css +1 -0
- package/dist/collection/components/radio/radio.js +14 -3
- package/dist/collection/components/radio/radio.md.css +1 -0
- package/dist/collection/components/radio-group/radio-group.js +2 -2
- package/dist/collection/components/range/range.js +4 -4
- 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 +6 -6
- package/dist/collection/components/segment/segment.js +11 -10
- package/dist/collection/components/segment-button/segment-button.js +3 -3
- package/dist/collection/components/select/select.ios.css +1 -0
- package/dist/collection/components/select/select.js +19 -6
- package/dist/collection/components/select/select.md.css +1 -0
- package/dist/collection/components/select/test/basic/select.e2e.js +1 -1
- package/dist/collection/components/select/test/disabled/select.e2e.js +1 -1
- package/dist/collection/components/select/test/fill/select.e2e.js +25 -0
- 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/select-popover/select-popover.md.css +8 -1
- package/dist/collection/components/select-popover/test/basic/select-popover.e2e.js +2 -2
- 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 +3 -3
- package/dist/collection/components/thumbnail/thumbnail.js +1 -1
- package/dist/collection/components/title/title.js +2 -2
- package/dist/collection/components/toast/test/basic/toast.e2e.js +1 -0
- package/dist/collection/components/toast/toast.js +2 -2
- package/dist/collection/components/toggle/toggle.ios.css +1 -0
- package/dist/collection/components/toggle/toggle.js +4 -4
- package/dist/collection/components/toggle/toggle.md.css +1 -0
- package/dist/collection/components/toolbar/toolbar.js +2 -2
- package/dist/collection/global/config.js +8 -1
- package/dist/collection/global/test/config-controller.spec.js +9 -1
- 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/collection/utils/transition/ios.transition.js +94 -67
- package/dist/docs.d.ts +34 -0
- package/dist/docs.json +3616 -497
- package/dist/esm/{app-globals-3cbaf9d9.js → app-globals-7c667c11.js} +1 -1
- package/dist/esm/{button-active-9e3c1f3b.js → button-active-7c57df95.js} +1 -1
- package/dist/esm/{hardware-back-button-804f43bb.js → hardware-back-button-63852d15.js} +2 -2
- package/dist/esm/{index-8dbae644.js → index-1e2f8425.js} +2 -2
- package/dist/esm/index-8d8c14b0.js +2221 -0
- package/dist/esm/{index-f7fbe1fb.js → index-91ed2172.js} +122 -4
- package/dist/esm/index.js +9 -9
- package/dist/esm/ion-accordion_2.entry.js +4 -4
- package/dist/esm/ion-action-sheet.entry.js +5 -5
- package/dist/esm/ion-alert.entry.js +5 -5
- package/dist/esm/ion-app_8.entry.js +20 -19
- package/dist/esm/ion-avatar_3.entry.js +3 -3
- package/dist/esm/ion-back-button.entry.js +2 -2
- package/dist/esm/ion-backdrop.entry.js +2 -2
- package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
- package/dist/esm/ion-button_2.entry.js +2 -2
- package/dist/esm/ion-card_5.entry.js +2 -2
- package/dist/esm/ion-checkbox.entry.js +7 -7
- package/dist/esm/ion-chip.entry.js +2 -2
- package/dist/esm/ion-col_3.entry.js +5 -5
- package/dist/esm/ion-datetime-button.entry.js +4 -4
- package/dist/esm/ion-datetime_3.entry.js +25 -22
- package/dist/esm/ion-fab_3.entry.js +8 -8
- package/dist/esm/ion-img.entry.js +3 -3
- package/dist/esm/ion-infinite-scroll_2.entry.js +5 -5
- package/dist/esm/ion-input-password-toggle.entry.js +5 -5
- package/dist/esm/ion-input.entry.js +9 -6
- package/dist/esm/ion-item-option_3.entry.js +6 -6
- package/dist/esm/ion-item_8.entry.js +15 -15
- package/dist/esm/ion-loading.entry.js +6 -6
- package/dist/esm/ion-menu_3.entry.js +11 -11
- package/dist/esm/ion-modal.entry.js +13 -12
- package/dist/esm/ion-nav_2.entry.js +6 -5
- package/dist/esm/ion-picker-column-option.entry.js +4 -4
- package/dist/esm/ion-picker-column.entry.js +177 -8
- package/dist/esm/ion-picker.entry.js +3 -3
- package/dist/esm/ion-popover.entry.js +9 -8
- package/dist/esm/ion-progress-bar.entry.js +3 -3
- package/dist/esm/ion-radio_2.entry.js +19 -8
- package/dist/esm/ion-range.entry.js +5 -5
- package/dist/esm/ion-refresher_2.entry.js +4 -4
- package/dist/esm/ion-reorder_2.entry.js +4 -4
- package/dist/esm/ion-ripple-effect.entry.js +3 -3
- package/dist/esm/ion-route_4.entry.js +4 -4
- package/dist/esm/ion-searchbar.entry.js +7 -7
- package/dist/esm/ion-segment_2.entry.js +15 -14
- package/dist/esm/ion-select_3.entry.js +27 -14
- package/dist/esm/ion-spinner.entry.js +3 -3
- package/dist/esm/ion-split-pane.entry.js +4 -4
- package/dist/esm/ion-tab-bar_2.entry.js +6 -6
- package/dist/esm/ion-tab_2.entry.js +4 -4
- package/dist/esm/ion-text.entry.js +4 -4
- package/dist/esm/ion-textarea.entry.js +4 -4
- package/dist/esm/ion-toast.entry.js +6 -6
- package/dist/esm/ion-toggle.entry.js +7 -7
- package/dist/esm/{ionic-global-d2d8f882.js → ionic-global-8180d812.js} +9 -2
- package/dist/esm/ionic.js +6 -6
- package/dist/esm/{ios.transition-a0041e41.js → ios.transition-140cedc8.js} +98 -69
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-0c0602d9.js → md.transition-4961bea4.js} +4 -2
- package/dist/esm/{overlays-696d25f5.js → overlays-e8e5bd06.js} +5 -4
- package/dist/esm/{status-tap-37a74d1c.js → status-tap-0502d0fd.js} +1 -1
- package/dist/esm-es5/app-globals-7c667c11.js +4 -0
- package/dist/esm-es5/{button-active-9e3c1f3b.js → button-active-7c57df95.js} +1 -1
- package/dist/esm-es5/{hardware-back-button-804f43bb.js → hardware-back-button-63852d15.js} +1 -1
- package/dist/esm-es5/{index-8dbae644.js → index-1e2f8425.js} +1 -1
- package/dist/esm-es5/index-8d8c14b0.js +5 -0
- package/dist/esm-es5/index-91ed2172.js +4 -0
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
- package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
- package/dist/esm-es5/ion-alert.entry.js +1 -1
- package/dist/esm-es5/ion-app_8.entry.js +1 -1
- package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
- package/dist/esm-es5/ion-back-button.entry.js +1 -1
- package/dist/esm-es5/ion-backdrop.entry.js +1 -1
- package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
- package/dist/esm-es5/ion-button_2.entry.js +1 -1
- package/dist/esm-es5/ion-card_5.entry.js +1 -1
- package/dist/esm-es5/ion-checkbox.entry.js +1 -1
- package/dist/esm-es5/ion-chip.entry.js +1 -1
- package/dist/esm-es5/ion-col_3.entry.js +1 -1
- package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
- package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
- package/dist/esm-es5/ion-fab_3.entry.js +1 -1
- package/dist/esm-es5/ion-img.entry.js +1 -1
- package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
- package/dist/esm-es5/ion-input-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-global-8180d812.js +4 -0
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/ios.transition-140cedc8.js +4 -0
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/md.transition-4961bea4.js +4 -0
- package/dist/esm-es5/{overlays-696d25f5.js → overlays-e8e5bd06.js} +1 -1
- package/dist/esm-es5/{status-tap-37a74d1c.js → status-tap-0502d0fd.js} +1 -1
- package/dist/html.html-data.json +115 -91
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/ionic.js +1 -1
- package/dist/ionic/{p-e9ef13be.system.entry.js → p-00343522.system.entry.js} +1 -1
- package/dist/ionic/{p-bdd3053f.entry.js → p-00f85ca4.entry.js} +1 -1
- package/dist/ionic/p-0213e506.entry.js +4 -0
- package/dist/ionic/p-036382b2.system.entry.js +4 -0
- package/dist/ionic/{p-c7e0b81a.entry.js → p-0617a85d.entry.js} +1 -1
- package/dist/ionic/{p-5d3a8503.system.entry.js → p-06330374.system.entry.js} +2 -2
- package/dist/ionic/p-0973cae7.entry.js +4 -0
- package/dist/ionic/{p-e3005be4.system.entry.js → p-09bd8558.system.entry.js} +1 -1
- package/dist/ionic/{p-6e9bd6ba.system.entry.js → p-0a9c8c36.system.entry.js} +1 -1
- package/dist/ionic/p-0f89c47c.js +4 -0
- package/dist/ionic/{p-2f308f7f.system.entry.js → p-111b0e11.system.entry.js} +2 -2
- package/dist/ionic/{p-93e43f42.system.entry.js → p-11feccde.system.entry.js} +1 -1
- package/dist/ionic/p-13a736a9.entry.js +4 -0
- package/dist/ionic/{p-bbbe3138.system.entry.js → p-18657fab.system.entry.js} +1 -1
- package/dist/ionic/p-1ca3679b.entry.js +4 -0
- package/dist/ionic/{p-cdee3a44.system.entry.js → p-1dd59f8d.system.entry.js} +1 -1
- package/dist/ionic/p-1e5cabf8.entry.js +4 -0
- package/dist/ionic/{p-b799a007.entry.js → p-24b0ece0.entry.js} +1 -1
- package/dist/ionic/{p-4e5288de.system.js → p-27317f8f.system.js} +1 -1
- package/dist/ionic/p-30bbe61c.system.js +4 -0
- package/dist/ionic/{p-4e548bd7.system.entry.js → p-34827988.system.entry.js} +1 -1
- package/dist/ionic/p-370835b4.system.js +4 -0
- package/dist/ionic/p-39303199.system.js +4 -0
- package/dist/ionic/{p-aa0ed22b.system.entry.js → p-3b0711a0.system.entry.js} +1 -1
- package/dist/ionic/{p-94180ecc.entry.js → p-3d1951f5.entry.js} +1 -1
- package/dist/ionic/p-3fd68f4e.system.entry.js +4 -0
- package/dist/ionic/{p-b571cab1.entry.js → p-443cbfcb.entry.js} +1 -1
- package/dist/ionic/{p-3f5b86b4.entry.js → p-4455daad.entry.js} +1 -1
- package/dist/ionic/{p-aa0f60b2.system.js → p-45a51395.system.js} +1 -1
- package/dist/ionic/{p-c671b28e.js → p-4691dc8d.js} +1 -1
- package/dist/ionic/{p-7f59064a.entry.js → p-4713f5f0.entry.js} +1 -1
- package/dist/ionic/p-479e7655.system.js +5 -0
- package/dist/ionic/{p-283fd4e1.system.entry.js → p-47ab6574.system.entry.js} +1 -1
- package/dist/ionic/{p-c4676693.entry.js → p-4816d827.entry.js} +1 -1
- package/dist/ionic/{p-1930d8e7.entry.js → p-4927bd6e.entry.js} +1 -1
- package/dist/ionic/p-4fa57f1e.system.entry.js +4 -0
- package/dist/ionic/{p-26d33af2.system.entry.js → p-54b04ed1.system.entry.js} +1 -1
- package/dist/ionic/{p-c3ca0292.system.entry.js → p-5cd86cdb.system.entry.js} +1 -1
- package/dist/ionic/{p-63265e00.system.entry.js → p-5e1094ae.system.entry.js} +2 -2
- package/dist/ionic/{p-4c153abb.entry.js → p-5f610767.entry.js} +1 -1
- package/dist/ionic/p-65a8336f.entry.js +4 -0
- package/dist/ionic/p-66de062f.system.entry.js +4 -0
- package/dist/ionic/{p-5a3a3373.entry.js → p-69cc64ab.entry.js} +1 -1
- package/dist/ionic/p-6c16d0e8.js +4 -0
- package/dist/ionic/p-6e76ed16.entry.js +4 -0
- package/dist/ionic/p-7058dfda.entry.js +4 -0
- package/dist/ionic/{p-1980c728.system.js → p-7171dbf4.system.js} +1 -1
- package/dist/ionic/p-7198726e.entry.js +4 -0
- package/dist/ionic/{p-5d4d89e0.system.entry.js → p-71e2f283.system.entry.js} +1 -1
- package/dist/ionic/{p-d6229f05.system.entry.js → p-71f25447.system.entry.js} +1 -1
- package/dist/ionic/{p-5fbc2eae.system.entry.js → p-750e902d.system.entry.js} +1 -1
- package/dist/ionic/{p-53a3b33c.system.entry.js → p-764eb419.system.entry.js} +1 -1
- package/dist/ionic/p-76637161.system.entry.js +4 -0
- package/dist/ionic/{p-8627f783.system.entry.js → p-78bf8302.system.entry.js} +2 -2
- package/dist/ionic/p-79f4cb29.entry.js +4 -0
- package/dist/ionic/p-7a416af9.entry.js +4 -0
- package/dist/ionic/{p-e49099b0.entry.js → p-80aae5d7.entry.js} +1 -1
- package/dist/ionic/{p-819e8479.system.entry.js → p-8890e47f.system.entry.js} +1 -1
- package/dist/ionic/{p-8caca06c.system.entry.js → p-8c7490bc.system.entry.js} +1 -1
- package/dist/ionic/{p-051d2d23.js → p-8d0eb68d.js} +1 -1
- package/dist/ionic/{p-b76bcd9e.system.entry.js → p-935221f8.system.entry.js} +1 -1
- package/dist/ionic/{p-70181008.entry.js → p-941ecbba.entry.js} +1 -1
- package/dist/ionic/{p-0af79ebd.entry.js → p-94b46442.entry.js} +1 -1
- package/dist/ionic/p-967da5f2.system.js +4 -0
- package/dist/ionic/{p-1e4d7975.system.js → p-98125393.system.js} +1 -1
- package/dist/ionic/{p-08c4d048.entry.js → p-9b46f7e0.entry.js} +1 -1
- package/dist/ionic/{p-6730a2f1.entry.js → p-a00a5621.entry.js} +1 -1
- package/dist/ionic/{p-a592f1b8.system.entry.js → p-a055fdcf.system.entry.js} +1 -1
- package/dist/ionic/{p-2c3c7cb9.system.entry.js → p-a0abe7ab.system.entry.js} +2 -2
- package/dist/ionic/p-a4116282.entry.js +4 -0
- package/dist/ionic/p-a4a45ad9.system.js +4 -0
- package/dist/ionic/p-a5adb027.entry.js +4 -0
- package/dist/ionic/{p-8c4fc85f.system.js → p-a82d4913.system.js} +1 -1
- package/dist/ionic/{p-23e440b6.entry.js → p-a87b1500.entry.js} +1 -1
- package/dist/ionic/{p-2b1e669d.system.entry.js → p-a931cd3e.system.entry.js} +1 -1
- package/dist/ionic/{p-748e6b2b.system.entry.js → p-ae3be67f.system.entry.js} +1 -1
- package/dist/ionic/{p-9384565a.entry.js → p-aeb61b82.entry.js} +1 -1
- package/dist/ionic/{p-33d926c3.entry.js → p-aeef6ac4.entry.js} +1 -1
- package/dist/ionic/p-aef1c744.system.js +4 -0
- package/dist/ionic/p-b0ff8469.system.entry.js +4 -0
- package/dist/ionic/{p-5ff497dc.system.entry.js → p-b7299e38.system.entry.js} +1 -1
- package/dist/ionic/{p-c23627c3.entry.js → p-b7eecfa6.entry.js} +1 -1
- package/dist/ionic/{p-45034312.system.entry.js → p-b84d9005.system.entry.js} +1 -1
- package/dist/ionic/{p-48888af6.system.entry.js → p-bad2e0c8.system.entry.js} +1 -1
- package/dist/ionic/p-bd7ad51d.system.entry.js +4 -0
- package/dist/ionic/{p-d11c336d.js → p-bdc1b4e3.js} +1 -1
- package/dist/ionic/{p-42f00e72.system.entry.js → p-c1d7a187.system.entry.js} +1 -1
- package/dist/ionic/p-c4493e98.system.entry.js +4 -0
- package/dist/ionic/p-c44efdb8.entry.js +4 -0
- package/dist/ionic/p-c5543c41.system.entry.js +4 -0
- package/dist/ionic/p-c5c65bbe.js +4 -0
- package/dist/ionic/{p-5d80b741.entry.js → p-c6143912.entry.js} +1 -1
- package/dist/ionic/{p-bd6d9610.entry.js → p-c623f0d9.entry.js} +1 -1
- package/dist/ionic/p-c6d9d978.system.entry.js +4 -0
- package/dist/ionic/p-c7717147.js +4 -0
- package/dist/ionic/p-c7a015e4.entry.js +4 -0
- package/dist/ionic/{p-c07e7a5d.entry.js → p-c89af27e.entry.js} +1 -1
- package/dist/ionic/{p-d1a8f599.entry.js → p-cd681265.entry.js} +1 -1
- package/dist/ionic/{p-f5c42f72.entry.js → p-cf8ad0c3.entry.js} +1 -1
- package/dist/ionic/p-d6dbda17.js +5 -0
- package/dist/ionic/{p-e885f3c4.entry.js → p-d7e957e9.entry.js} +1 -1
- package/dist/ionic/p-d8a1f0e2.entry.js +4 -0
- package/dist/ionic/p-dba2da82.system.entry.js +4 -0
- package/dist/ionic/{p-77ce6034.js → p-ddde112a.js} +1 -1
- package/dist/ionic/{p-2ab5db0d.system.entry.js → p-e08d9edc.system.entry.js} +1 -1
- package/dist/ionic/{p-c9ba1908.entry.js → p-eaab79f3.entry.js} +1 -1
- package/dist/ionic/{p-0b12d1ee.system.entry.js → p-ee8bf348.system.entry.js} +1 -1
- package/dist/ionic/{p-9b31ebfa.entry.js → p-eea44228.entry.js} +1 -1
- package/dist/ionic/{p-c62571da.entry.js → p-eef82267.entry.js} +1 -1
- package/dist/ionic/{p-2a3e98fb.system.entry.js → p-f149e6c3.system.entry.js} +1 -1
- package/dist/ionic/{p-fd392e7f.system.entry.js → p-f1c090c5.system.entry.js} +1 -1
- package/dist/ionic/{p-ebe0aa6d.entry.js → p-f5efe527.entry.js} +1 -1
- package/dist/ionic/p-f6a419d2.js +4 -0
- package/dist/ionic/p-f896c857.system.entry.js +4 -0
- package/dist/ionic/{p-576786c0.system.entry.js → p-f9046353.system.entry.js} +1 -1
- package/dist/ionic/p-f9b3ffd6.system.entry.js +4 -0
- package/dist/ionic/{p-320cfcab.entry.js → p-fa7234ee.entry.js} +1 -1
- package/dist/ionic/{p-470f73c4.entry.js → p-fba8ea9e.entry.js} +1 -1
- package/dist/ionic/p-fc6f99be.js +4 -0
- package/dist/ionic/{p-b0093947.system.js → p-fcbd65bc.system.js} +1 -1
- package/dist/types/components/accordion-group/accordion-group.d.ts +3 -4
- package/dist/types/components/checkbox/checkbox.d.ts +3 -4
- package/dist/types/components/content/content.d.ts +8 -0
- package/dist/types/components/datetime/datetime.d.ts +2 -0
- package/dist/types/components/input/input.d.ts +6 -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 +37 -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/radio/radio.d.ts +1 -0
- package/dist/types/components/radio-group/radio-group.d.ts +2 -0
- package/dist/types/components/range/range.d.ts +1 -1
- package/dist/types/components/searchbar/searchbar.d.ts +2 -0
- package/dist/types/components/segment/segment.d.ts +4 -2
- package/dist/types/components/select/select.d.ts +4 -1
- package/dist/types/components/textarea/textarea.d.ts +2 -0
- package/dist/types/components/toggle/toggle.d.ts +3 -2
- package/dist/types/components.d.ts +44 -12
- package/dist/types/stencil-public-runtime.d.ts +1 -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 +43590 -39248
- package/loader/cdn.js +1 -1
- package/loader/index.cjs.js +1 -1
- package/loader/index.es2017.js +1 -1
- package/loader/index.js +1 -1
- package/package.json +7 -7
- package/dist/cjs/index-1437d080.js +0 -11980
- package/dist/esm/index-5dc2b88e.js +0 -11942
- package/dist/esm-es5/app-globals-3cbaf9d9.js +0 -4
- package/dist/esm-es5/index-5dc2b88e.js +0 -18
- package/dist/esm-es5/index-f7fbe1fb.js +0 -4
- package/dist/esm-es5/ionic-global-d2d8f882.js +0 -4
- package/dist/esm-es5/ios.transition-a0041e41.js +0 -4
- package/dist/esm-es5/md.transition-0c0602d9.js +0 -4
- package/dist/ionic/p-057b5866.entry.js +0 -4
- package/dist/ionic/p-06d5221c.js +0 -4
- package/dist/ionic/p-06fad524.system.js +0 -4
- package/dist/ionic/p-0d56dea9.entry.js +0 -4
- package/dist/ionic/p-0d960144.system.entry.js +0 -4
- package/dist/ionic/p-13bfcef4.system.entry.js +0 -4
- package/dist/ionic/p-16016625.system.js +0 -4
- package/dist/ionic/p-1a5227b3.system.entry.js +0 -4
- package/dist/ionic/p-20304962.js +0 -4
- package/dist/ionic/p-2dfdda15.system.entry.js +0 -4
- package/dist/ionic/p-2fa34b5c.entry.js +0 -4
- package/dist/ionic/p-32048e4c.system.js +0 -18
- package/dist/ionic/p-34511b1d.js +0 -4
- package/dist/ionic/p-385964e6.entry.js +0 -4
- package/dist/ionic/p-4324e8a4.entry.js +0 -4
- package/dist/ionic/p-45664cb9.system.js +0 -4
- package/dist/ionic/p-49cdc4f2.entry.js +0 -4
- package/dist/ionic/p-4ad48ec9.system.entry.js +0 -4
- package/dist/ionic/p-4af0b730.js +0 -8
- package/dist/ionic/p-4fcef939.entry.js +0 -4
- package/dist/ionic/p-567a21a2.system.entry.js +0 -4
- package/dist/ionic/p-583f8865.system.entry.js +0 -4
- package/dist/ionic/p-58f89707.js +0 -4
- package/dist/ionic/p-720927ad.entry.js +0 -4
- package/dist/ionic/p-7536b4b3.system.js +0 -4
- package/dist/ionic/p-7ef5bb32.entry.js +0 -4
- package/dist/ionic/p-806aad8f.system.js +0 -4
- package/dist/ionic/p-80f85095.system.entry.js +0 -4
- package/dist/ionic/p-8664c316.entry.js +0 -4
- package/dist/ionic/p-8e031d97.entry.js +0 -4
- package/dist/ionic/p-8f48c966.system.entry.js +0 -4
- package/dist/ionic/p-94731a92.system.entry.js +0 -4
- package/dist/ionic/p-a801da4b.system.entry.js +0 -4
- package/dist/ionic/p-adb896a0.entry.js +0 -4
- package/dist/ionic/p-cb4f96f3.system.js +0 -4
- package/dist/ionic/p-cc856712.entry.js +0 -4
- package/dist/ionic/p-cd1b9056.js +0 -4
- package/dist/ionic/p-d918e7ef.system.entry.js +0 -4
- package/dist/ionic/p-df062892.system.entry.js +0 -4
- package/dist/ionic/p-ee3bbaf2.entry.js +0 -4
- package/dist/ionic/p-f0be340f.entry.js +0 -4
- package/dist/ionic/p-fc94e18f.entry.js +0 -4
- package/dist/ionic/p-fdf40b09.js +0 -4
|
@@ -48,6 +48,7 @@ export class Content {
|
|
|
48
48
|
};
|
|
49
49
|
this.color = undefined;
|
|
50
50
|
this.fullscreen = false;
|
|
51
|
+
this.fixedSlotPlacement = 'after';
|
|
51
52
|
this.forceOverscroll = undefined;
|
|
52
53
|
this.scrollX = false;
|
|
53
54
|
this.scrollY = true;
|
|
@@ -329,13 +330,13 @@ export class Content {
|
|
|
329
330
|
}
|
|
330
331
|
}
|
|
331
332
|
render() {
|
|
332
|
-
const { isMainContent, scrollX, scrollY, el } = this;
|
|
333
|
+
const { fixedSlotPlacement, isMainContent, scrollX, scrollY, el } = this;
|
|
333
334
|
const rtl = isRTL(el) ? 'rtl' : 'ltr';
|
|
334
335
|
const mode = getIonMode(this);
|
|
335
336
|
const forceOverscroll = this.shouldForceOverscroll();
|
|
336
337
|
const transitionShadow = mode === 'ios';
|
|
337
338
|
this.resize();
|
|
338
|
-
return (h(Host, { key: '
|
|
339
|
+
return (h(Host, { key: 'f599a7da14969df38c20a6f650179d2a319fb58b', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
|
|
339
340
|
[mode]: true,
|
|
340
341
|
'content-sizing': hostContext('ion-popover', this.el),
|
|
341
342
|
overscroll: forceOverscroll,
|
|
@@ -343,12 +344,12 @@ export class Content {
|
|
|
343
344
|
}), style: {
|
|
344
345
|
'--offset-top': `${this.cTop}px`,
|
|
345
346
|
'--offset-bottom': `${this.cBottom}px`,
|
|
346
|
-
} }, h("div", { key: '
|
|
347
|
+
} }, h("div", { key: '7c545c3c95ea05abd036d0462936ac153d2a8fc6', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: 'a67ab7438466c99f74b7ba59964802c3ba86ac5b', class: {
|
|
347
348
|
'inner-scroll': true,
|
|
348
349
|
'scroll-x': scrollX,
|
|
349
350
|
'scroll-y': scrollY,
|
|
350
351
|
overscroll: (scrollX || scrollY) && forceOverscroll,
|
|
351
|
-
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '
|
|
352
|
+
}, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '6d10fcac2e40b4dd6c20d91a8957ac07251d2fa7' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
|
|
352
353
|
}
|
|
353
354
|
static get is() { return "ion-content"; }
|
|
354
355
|
static get encapsulation() { return "shadow"; }
|
|
@@ -405,6 +406,24 @@ export class Content {
|
|
|
405
406
|
"reflect": false,
|
|
406
407
|
"defaultValue": "false"
|
|
407
408
|
},
|
|
409
|
+
"fixedSlotPlacement": {
|
|
410
|
+
"type": "string",
|
|
411
|
+
"mutable": false,
|
|
412
|
+
"complexType": {
|
|
413
|
+
"original": "'after' | 'before'",
|
|
414
|
+
"resolved": "\"after\" | \"before\"",
|
|
415
|
+
"references": {}
|
|
416
|
+
},
|
|
417
|
+
"required": false,
|
|
418
|
+
"optional": false,
|
|
419
|
+
"docs": {
|
|
420
|
+
"tags": [],
|
|
421
|
+
"text": "Controls where the fixed content is placed relative to the main content\nin the DOM. This can be used to control the order in which fixed elements\nreceive keyboard focus.\nFor example, if a FAB in the fixed slot should receive keyboard focus before\nthe main page content, set this property to `'before'`."
|
|
422
|
+
},
|
|
423
|
+
"attribute": "fixed-slot-placement",
|
|
424
|
+
"reflect": false,
|
|
425
|
+
"defaultValue": "'after'"
|
|
426
|
+
},
|
|
408
427
|
"forceOverscroll": {
|
|
409
428
|
"type": "boolean",
|
|
410
429
|
"mutable": true,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
5
|
+
import { Content } from "../content";
|
|
6
|
+
describe('content: fixed slot placement', () => {
|
|
7
|
+
it('should should fixed slot after content', async () => {
|
|
8
|
+
const page = await newSpecPage({
|
|
9
|
+
components: [Content],
|
|
10
|
+
html: '<ion-content></ion-content>',
|
|
11
|
+
});
|
|
12
|
+
const content = page.body.querySelector('ion-content');
|
|
13
|
+
const fixedSlot = content.shadowRoot.querySelector('slot[name="fixed"]');
|
|
14
|
+
const scrollEl = content.shadowRoot.querySelector('[part="scroll"]');
|
|
15
|
+
expect(fixedSlot.nextElementSibling).not.toBe(scrollEl);
|
|
16
|
+
});
|
|
17
|
+
it('should should fixed slot before content', async () => {
|
|
18
|
+
const page = await newSpecPage({
|
|
19
|
+
components: [Content],
|
|
20
|
+
html: `<ion-content fixed-slot-placement="before"></ion-content>`,
|
|
21
|
+
});
|
|
22
|
+
const content = page.body.querySelector('ion-content');
|
|
23
|
+
const fixedSlot = content.shadowRoot.querySelector('slot[name="fixed"]');
|
|
24
|
+
const scrollEl = content.shadowRoot.querySelector('[part="scroll"]');
|
|
25
|
+
expect(fixedSlot.nextElementSibling).toBe(scrollEl);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
@@ -85,10 +85,10 @@ export class Datetime {
|
|
|
85
85
|
const { activeParts } = this;
|
|
86
86
|
return Array.isArray(activeParts) ? activeParts[0] : activeParts;
|
|
87
87
|
};
|
|
88
|
-
this.closeParentOverlay = () => {
|
|
88
|
+
this.closeParentOverlay = (role) => {
|
|
89
89
|
const popoverOrModal = this.el.closest('ion-modal, ion-popover');
|
|
90
90
|
if (popoverOrModal) {
|
|
91
|
-
popoverOrModal.dismiss();
|
|
91
|
+
popoverOrModal.dismiss(undefined, role);
|
|
92
92
|
}
|
|
93
93
|
};
|
|
94
94
|
this.setWorkingParts = (parts) => {
|
|
@@ -319,7 +319,8 @@ export class Datetime {
|
|
|
319
319
|
* Check below the next line ensures that we did not
|
|
320
320
|
* swipe and abort (i.e. we swiped but we are still on the current month).
|
|
321
321
|
*/
|
|
322
|
-
const
|
|
322
|
+
const condition = isRTL(this.el) ? calendarBodyRef.scrollLeft >= -2 : calendarBodyRef.scrollLeft <= 2;
|
|
323
|
+
const month = condition ? startMonth : endMonth;
|
|
323
324
|
/**
|
|
324
325
|
* The edge of the month must be lined up with
|
|
325
326
|
* the edge of the calendar body in order for
|
|
@@ -758,7 +759,7 @@ export class Datetime {
|
|
|
758
759
|
}
|
|
759
760
|
}
|
|
760
761
|
if (closeOverlay) {
|
|
761
|
-
this.closeParentOverlay();
|
|
762
|
+
this.closeParentOverlay(CONFIRM_ROLE);
|
|
762
763
|
}
|
|
763
764
|
}
|
|
764
765
|
/**
|
|
@@ -778,7 +779,7 @@ export class Datetime {
|
|
|
778
779
|
async cancel(closeOverlay = false) {
|
|
779
780
|
this.ionCancel.emit();
|
|
780
781
|
if (closeOverlay) {
|
|
781
|
-
this.closeParentOverlay();
|
|
782
|
+
this.closeParentOverlay(CANCEL_ROLE);
|
|
782
783
|
}
|
|
783
784
|
}
|
|
784
785
|
get isCalendarPicker() {
|
|
@@ -1090,7 +1091,7 @@ export class Datetime {
|
|
|
1090
1091
|
const todayString = workingParts.day !== null
|
|
1091
1092
|
? `${workingParts.year}-${workingParts.month}-${workingParts.day}`
|
|
1092
1093
|
: `${defaultParts.year}-${defaultParts.month}-${defaultParts.day}`;
|
|
1093
|
-
return (h("ion-picker-column", { class: "date-column", color: this.color, disabled: disabled, value: todayString, onIonChange: (ev) => {
|
|
1094
|
+
return (h("ion-picker-column", { "aria-label": "Select a date", class: "date-column", color: this.color, disabled: disabled, value: todayString, onIonChange: (ev) => {
|
|
1094
1095
|
const { value } = ev.detail;
|
|
1095
1096
|
const findPart = parts.find(({ month, day, year }) => value === `${year}-${month}-${day}`);
|
|
1096
1097
|
this.setWorkingParts(Object.assign(Object.assign({}, workingParts), findPart));
|
|
@@ -1165,7 +1166,7 @@ export class Datetime {
|
|
|
1165
1166
|
const { disabled, workingParts } = this;
|
|
1166
1167
|
const activePart = this.getActivePartsWithFallback();
|
|
1167
1168
|
const pickerColumnValue = (_a = (workingParts.day !== null ? workingParts.day : this.defaultParts.day)) !== null && _a !== void 0 ? _a : undefined;
|
|
1168
|
-
return (h("ion-picker-column", { class: "day-column", color: this.color, disabled: disabled, value: pickerColumnValue, onIonChange: (ev) => {
|
|
1169
|
+
return (h("ion-picker-column", { "aria-label": "Select a day", class: "day-column", color: this.color, disabled: disabled, value: pickerColumnValue, onIonChange: (ev) => {
|
|
1169
1170
|
this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { day: ev.detail.value }));
|
|
1170
1171
|
this.setActiveParts(Object.assign(Object.assign({}, activePart), { day: ev.detail.value }));
|
|
1171
1172
|
ev.stopPropagation();
|
|
@@ -1177,7 +1178,7 @@ export class Datetime {
|
|
|
1177
1178
|
}
|
|
1178
1179
|
const { disabled, workingParts } = this;
|
|
1179
1180
|
const activePart = this.getActivePartsWithFallback();
|
|
1180
|
-
return (h("ion-picker-column", { class: "month-column", color: this.color, disabled: disabled, value: workingParts.month, onIonChange: (ev) => {
|
|
1181
|
+
return (h("ion-picker-column", { "aria-label": "Select a month", class: "month-column", color: this.color, disabled: disabled, value: workingParts.month, onIonChange: (ev) => {
|
|
1181
1182
|
this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { month: ev.detail.value }));
|
|
1182
1183
|
this.setActiveParts(Object.assign(Object.assign({}, activePart), { month: ev.detail.value }));
|
|
1183
1184
|
ev.stopPropagation();
|
|
@@ -1189,7 +1190,7 @@ export class Datetime {
|
|
|
1189
1190
|
}
|
|
1190
1191
|
const { disabled, workingParts } = this;
|
|
1191
1192
|
const activePart = this.getActivePartsWithFallback();
|
|
1192
|
-
return (h("ion-picker-column", { class: "year-column", color: this.color, disabled: disabled, value: workingParts.year, onIonChange: (ev) => {
|
|
1193
|
+
return (h("ion-picker-column", { "aria-label": "Select a year", class: "year-column", color: this.color, disabled: disabled, value: workingParts.year, onIonChange: (ev) => {
|
|
1193
1194
|
this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { year: ev.detail.value }));
|
|
1194
1195
|
this.setActiveParts(Object.assign(Object.assign({}, activePart), { year: ev.detail.value }));
|
|
1195
1196
|
ev.stopPropagation();
|
|
@@ -1222,7 +1223,7 @@ export class Datetime {
|
|
|
1222
1223
|
if (hoursData.length === 0)
|
|
1223
1224
|
return [];
|
|
1224
1225
|
const activePart = this.getActivePartsWithFallback();
|
|
1225
|
-
return (h("ion-picker-column", { color: this.color, disabled: disabled, value: activePart.hour, numericInput: true, onIonChange: (ev) => {
|
|
1226
|
+
return (h("ion-picker-column", { "aria-label": "Select an hour", color: this.color, disabled: disabled, value: activePart.hour, numericInput: true, onIonChange: (ev) => {
|
|
1226
1227
|
this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { hour: ev.detail.value }));
|
|
1227
1228
|
this.setActiveParts(Object.assign(Object.assign({}, activePart), { hour: ev.detail.value }));
|
|
1228
1229
|
ev.stopPropagation();
|
|
@@ -1233,7 +1234,7 @@ export class Datetime {
|
|
|
1233
1234
|
if (minutesData.length === 0)
|
|
1234
1235
|
return [];
|
|
1235
1236
|
const activePart = this.getActivePartsWithFallback();
|
|
1236
|
-
return (h("ion-picker-column", { color: this.color, disabled: disabled, value: activePart.minute, numericInput: true, onIonChange: (ev) => {
|
|
1237
|
+
return (h("ion-picker-column", { "aria-label": "Select a minute", color: this.color, disabled: disabled, value: activePart.minute, numericInput: true, onIonChange: (ev) => {
|
|
1237
1238
|
this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { minute: ev.detail.value }));
|
|
1238
1239
|
this.setActiveParts(Object.assign(Object.assign({}, activePart), { minute: ev.detail.value }));
|
|
1239
1240
|
ev.stopPropagation();
|
|
@@ -1246,7 +1247,7 @@ export class Datetime {
|
|
|
1246
1247
|
}
|
|
1247
1248
|
const activePart = this.getActivePartsWithFallback();
|
|
1248
1249
|
const isDayPeriodRTL = isLocaleDayPeriodRTL(this.locale);
|
|
1249
|
-
return (h("ion-picker-column", { style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, disabled: disabled, value: activePart.ampm, onIonChange: (ev) => {
|
|
1250
|
+
return (h("ion-picker-column", { "aria-label": "Select a day period", style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, disabled: disabled, value: activePart.ampm, onIonChange: (ev) => {
|
|
1250
1251
|
const hour = calculateHourFromAMPM(workingParts, ev.detail.value);
|
|
1251
1252
|
this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { ampm: ev.detail.value, hour }));
|
|
1252
1253
|
this.setActiveParts(Object.assign(Object.assign({}, activePart), { ampm: ev.detail.value, hour }));
|
|
@@ -1556,7 +1557,7 @@ export class Datetime {
|
|
|
1556
1557
|
const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
|
|
1557
1558
|
const hasWheelVariant = hasDatePresentation && preferWheel;
|
|
1558
1559
|
renderHiddenInput(true, el, name, formatValue(value), disabled);
|
|
1559
|
-
return (h(Host, { key: '
|
|
1560
|
+
return (h(Host, { key: '48313af4ec8e2a2666cd8c89932c5131dfa7b556', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
|
|
1560
1561
|
[mode]: true,
|
|
1561
1562
|
['datetime-readonly']: readonly,
|
|
1562
1563
|
['datetime-disabled']: disabled,
|
|
@@ -1566,7 +1567,7 @@ export class Datetime {
|
|
|
1566
1567
|
[`datetime-size-${size}`]: true,
|
|
1567
1568
|
[`datetime-prefer-wheel`]: hasWheelVariant,
|
|
1568
1569
|
[`datetime-grid`]: isGridStyle,
|
|
1569
|
-
})) }, h("div", { key: '
|
|
1570
|
+
})) }, h("div", { key: 'b72570048236415aed915488305046d987d51dcf', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
|
|
1570
1571
|
}
|
|
1571
1572
|
static get is() { return "ion-datetime"; }
|
|
1572
1573
|
static get encapsulation() { return "shadow"; }
|
|
@@ -2179,7 +2180,7 @@ export class Datetime {
|
|
|
2179
2180
|
"composed": true,
|
|
2180
2181
|
"docs": {
|
|
2181
2182
|
"tags": [],
|
|
2182
|
-
"text": "Emitted when the value (selected date) has changed."
|
|
2183
|
+
"text": "Emitted when the value (selected date) has changed.\n\nThis event will not emit when programmatically setting the `value` property."
|
|
2183
2184
|
},
|
|
2184
2185
|
"complexType": {
|
|
2185
2186
|
"original": "DatetimeChangeEventDetail",
|
|
@@ -2396,5 +2397,7 @@ export class Datetime {
|
|
|
2396
2397
|
}
|
|
2397
2398
|
}
|
|
2398
2399
|
let datetimeIds = 0;
|
|
2400
|
+
const CANCEL_ROLE = 'datetime-cancel';
|
|
2401
|
+
const CONFIRM_ROLE = 'datetime-confirm';
|
|
2399
2402
|
const WHEEL_ITEM_PART = 'wheel-item';
|
|
2400
2403
|
const WHEEL_ITEM_ACTIVE_PART = `active`;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { expect } from "@playwright/test";
|
|
5
|
+
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
6
|
+
configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ config, title }) => {
|
|
7
|
+
test.describe(title('datetime: overlay roles'), () => {
|
|
8
|
+
test.beforeEach(async ({ page }) => {
|
|
9
|
+
await page.setContent(`
|
|
10
|
+
<ion-modal>
|
|
11
|
+
<ion-datetime></ion-datetime>
|
|
12
|
+
</ion-modal>
|
|
13
|
+
`, config);
|
|
14
|
+
});
|
|
15
|
+
test('should pass role to overlay when calling confirm method', async ({ page }) => {
|
|
16
|
+
const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
|
|
17
|
+
const modal = page.locator('ion-modal');
|
|
18
|
+
const datetime = page.locator('ion-datetime');
|
|
19
|
+
await modal.evaluate((el) => el.present());
|
|
20
|
+
await datetime.evaluate((el) => el.confirm(true));
|
|
21
|
+
await ionModalDidDismiss.next();
|
|
22
|
+
expect(ionModalDidDismiss).toHaveReceivedEventDetail({ data: undefined, role: 'datetime-confirm' });
|
|
23
|
+
});
|
|
24
|
+
test('should pass role to overlay when calling cancel method', async ({ page }) => {
|
|
25
|
+
const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
|
|
26
|
+
const modal = page.locator('ion-modal');
|
|
27
|
+
const datetime = page.locator('ion-datetime');
|
|
28
|
+
await modal.evaluate((el) => el.present());
|
|
29
|
+
await datetime.evaluate((el) => el.cancel(true));
|
|
30
|
+
await ionModalDidDismiss.next();
|
|
31
|
+
expect(ionModalDidDismiss).toHaveReceivedEventDetail({ data: undefined, role: 'datetime-cancel' });
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
});
|
|
@@ -8,7 +8,7 @@ configs().forEach(({ title, screenshot, config }) => {
|
|
|
8
8
|
test('should position the time picker relative to the click target', async ({ page }) => {
|
|
9
9
|
await page.goto('/src/components/datetime/test/position', config);
|
|
10
10
|
const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent');
|
|
11
|
-
const openDateTimeBtn = page.locator('
|
|
11
|
+
const openDateTimeBtn = page.locator('#open-datetime');
|
|
12
12
|
await openDateTimeBtn.click();
|
|
13
13
|
await ionPopoverDidPresent.next();
|
|
14
14
|
await page.locator('.datetime-ready').waitFor();
|
|
@@ -337,11 +337,11 @@ export class DatetimeButton {
|
|
|
337
337
|
render() {
|
|
338
338
|
const { color, dateText, timeText, selectedButton, datetimeActive, disabled } = this;
|
|
339
339
|
const mode = getIonMode(this);
|
|
340
|
-
return (h(Host, { key: '
|
|
340
|
+
return (h(Host, { key: '0be955404133adbb31ae16a6599014bb29765f19', class: createColorClasses(color, {
|
|
341
341
|
[mode]: true,
|
|
342
342
|
[`${selectedButton}-active`]: datetimeActive,
|
|
343
343
|
['datetime-button-disabled']: disabled,
|
|
344
|
-
}) }, dateText && (h("button", { key: '
|
|
344
|
+
}) }, dateText && (h("button", { key: '812dcb50b17768cc13a5cfa0bcce8b113cee0f09', class: "ion-activatable", id: "date-button", "aria-expanded": datetimeActive ? 'true' : 'false', onClick: this.handleDateClick, disabled: disabled, part: "native", ref: (el) => (this.dateTargetEl = el) }, h("slot", { key: '46930c740a32a78502df9e651f9bd5914d6a9fea', name: "date-target" }, dateText), mode === 'md' && h("ion-ripple-effect", { key: '0602999cc8435dc37aa22da7f5531bc8cb71e1b4' }))), timeText && (h("button", { key: 'ecdd21da5181ecbdce03209f9f6673b7dcbc1f78', class: "ion-activatable", id: "time-button", "aria-expanded": datetimeActive ? 'true' : 'false', onClick: this.handleTimeClick, disabled: disabled, part: "native", ref: (el) => (this.timeTargetEl = el) }, h("slot", { key: 'b5b093b5166d12d11e27360788edaac916d44390', name: "time-target" }, timeText), mode === 'md' && h("ion-ripple-effect", { key: '70bb3a04f4748d13233eeb257503968dbd1161a9' })))));
|
|
345
345
|
}
|
|
346
346
|
static get is() { return "ion-datetime-button"; }
|
|
347
347
|
static get encapsulation() { return "shadow"; }
|
|
@@ -47,12 +47,12 @@ export class Fab {
|
|
|
47
47
|
render() {
|
|
48
48
|
const { horizontal, vertical, edge } = this;
|
|
49
49
|
const mode = getIonMode(this);
|
|
50
|
-
return (h(Host, { key: '
|
|
50
|
+
return (h(Host, { key: 'cb44cf6486b0a6439b99da87c065b0b52e2514f4', class: {
|
|
51
51
|
[mode]: true,
|
|
52
52
|
[`fab-horizontal-${horizontal}`]: horizontal !== undefined,
|
|
53
53
|
[`fab-vertical-${vertical}`]: vertical !== undefined,
|
|
54
54
|
'fab-edge': edge,
|
|
55
|
-
} }, h("slot", { key: '
|
|
55
|
+
} }, h("slot", { key: '1ed484c7ecb10cd81fbca9a4f5c4049bf82f9f8a' })));
|
|
56
56
|
}
|
|
57
57
|
static get is() { return "ion-fab"; }
|
|
58
58
|
static get encapsulation() { return "shadow"; }
|
|
@@ -63,7 +63,7 @@ export class FabButton {
|
|
|
63
63
|
rel: this.rel,
|
|
64
64
|
target: this.target,
|
|
65
65
|
};
|
|
66
|
-
return (h(Host, { key: '
|
|
66
|
+
return (h(Host, { key: 'eb347f7d6749c40637540d84778eb8d1b667a947', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
|
|
67
67
|
[mode]: true,
|
|
68
68
|
'fab-button-in-list': inList,
|
|
69
69
|
'fab-button-translucent-in-list': inList && translucent,
|
|
@@ -74,7 +74,7 @@ export class FabButton {
|
|
|
74
74
|
'ion-activatable': true,
|
|
75
75
|
'ion-focusable': true,
|
|
76
76
|
[`fab-button-${size}`]: size !== undefined,
|
|
77
|
-
}) }, h(TagType, Object.assign({ key: '
|
|
77
|
+
}) }, h(TagType, Object.assign({ key: '83e853c8815f41543c848eb2e05ec2bb1716110a' }, attrs, { class: "button-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur, onClick: (ev) => openURL(href, ev, this.routerDirection, this.routerAnimation) }, inheritedAttributes), h("ion-icon", { key: '798deede94de658e4345acf7c2aafe2ab2567b0b', "aria-hidden": "true", icon: this.closeIcon, part: "close-icon", class: "close-icon", lazy: false }), h("span", { key: '99252fde6de1aca73fc240a6da7e29acac9acb18', class: "button-inner" }, h("slot", { key: 'dc73e9b41bf1f0e385e5784f975dfb81e37c8dfb' })), mode === 'md' && h("ion-ripple-effect", { key: '8413e162f44a0350f54dff06cff7aad101de3549' }))));
|
|
78
78
|
}
|
|
79
79
|
static get is() { return "ion-fab-button"; }
|
|
80
80
|
static get encapsulation() { return "shadow"; }
|
|
@@ -18,11 +18,11 @@ export class FabList {
|
|
|
18
18
|
}
|
|
19
19
|
render() {
|
|
20
20
|
const mode = getIonMode(this);
|
|
21
|
-
return (h(Host, { key: '
|
|
21
|
+
return (h(Host, { key: 'fa1d195b9950654ba0e984bf61d981c977d05275', class: {
|
|
22
22
|
[mode]: true,
|
|
23
23
|
'fab-list-active': this.activated,
|
|
24
24
|
[`fab-list-side-${this.side}`]: true,
|
|
25
|
-
} }, h("slot", { key: '
|
|
25
|
+
} }, h("slot", { key: '2ec738c66c05112e1e2521155d6adfc36d2fd1db' })));
|
|
26
26
|
}
|
|
27
27
|
static get is() { return "ion-fab-list"; }
|
|
28
28
|
static get encapsulation() { return "shadow"; }
|
|
@@ -80,7 +80,7 @@ export class Footer {
|
|
|
80
80
|
const mode = getIonMode(this);
|
|
81
81
|
const tabs = this.el.closest('ion-tabs');
|
|
82
82
|
const tabBar = tabs === null || tabs === void 0 ? void 0 : tabs.querySelector(':scope > ion-tab-bar');
|
|
83
|
-
return (h(Host, { key: '
|
|
83
|
+
return (h(Host, { key: '5da19dc38ba73e1ddfd1bef3ebd485105d77c751', role: "contentinfo", class: {
|
|
84
84
|
[mode]: true,
|
|
85
85
|
// Used internally for styling
|
|
86
86
|
[`footer-${mode}`]: true,
|
|
@@ -88,7 +88,7 @@ export class Footer {
|
|
|
88
88
|
[`footer-translucent-${mode}`]: translucent,
|
|
89
89
|
['footer-toolbar-padding']: !this.keyboardVisible && (!tabBar || tabBar.slot !== 'bottom'),
|
|
90
90
|
[`footer-collapse-${collapse}`]: collapse !== undefined,
|
|
91
|
-
} }, mode === 'ios' && translucent && h("div", { key: '
|
|
91
|
+
} }, mode === 'ios' && translucent && h("div", { key: 'fafad08090a33d8c4e8a5b63d61929dcb89aab47', class: "footer-background" }), h("slot", { key: 'e0a443d346afa55e4317c0bc1263fdbe3c619559' })));
|
|
92
92
|
}
|
|
93
93
|
static get is() { return "ion-footer"; }
|
|
94
94
|
static get originalStyleUrls() {
|
|
@@ -9,10 +9,10 @@ export class Grid {
|
|
|
9
9
|
}
|
|
10
10
|
render() {
|
|
11
11
|
const mode = getIonMode(this);
|
|
12
|
-
return (h(Host, { key: '
|
|
12
|
+
return (h(Host, { key: '930ce78b02f8360fbca08a35d364d2c09128c6c8', class: {
|
|
13
13
|
[mode]: true,
|
|
14
14
|
'grid-fixed': this.fixed,
|
|
15
|
-
} }, h("slot", { key: '
|
|
15
|
+
} }, h("slot", { key: 'c47bf7ef2197f5ebc42d3e2c55044276fb0db393' })));
|
|
16
16
|
}
|
|
17
17
|
static get is() { return "ion-grid"; }
|
|
18
18
|
static get encapsulation() { return "shadow"; }
|
|
@@ -140,14 +140,14 @@ export class Header {
|
|
|
140
140
|
const collapse = this.collapse || 'none';
|
|
141
141
|
// banner role must be at top level, so remove role if inside a menu
|
|
142
142
|
const roleType = hostContext('ion-menu', this.el) ? 'none' : 'banner';
|
|
143
|
-
return (h(Host, Object.assign({ key: '
|
|
143
|
+
return (h(Host, Object.assign({ key: 'c687314ef290793a9d633ad20cfc5eeb47621e31', role: roleType, class: {
|
|
144
144
|
[mode]: true,
|
|
145
145
|
// Used internally for styling
|
|
146
146
|
[`header-${mode}`]: true,
|
|
147
147
|
[`header-translucent`]: this.translucent,
|
|
148
148
|
[`header-collapse-${collapse}`]: true,
|
|
149
149
|
[`header-translucent-${mode}`]: this.translucent,
|
|
150
|
-
} }, inheritedAttributes), mode === 'ios' && translucent && h("div", { key: '
|
|
150
|
+
} }, inheritedAttributes), mode === 'ios' && translucent && h("div", { key: 'b429996046082405a91e7c23f95516db0b736f12', class: "header-background" }), h("slot", { key: 'e17a8965f8d3a33c1bfcb056c153d8242e5229fa' })));
|
|
151
151
|
}
|
|
152
152
|
static get is() { return "ion-header"; }
|
|
153
153
|
static get originalStyleUrls() {
|
|
@@ -71,7 +71,7 @@ export class Img {
|
|
|
71
71
|
render() {
|
|
72
72
|
const { loadSrc, alt, onLoad, loadError, inheritedAttributes } = this;
|
|
73
73
|
const { draggable } = inheritedAttributes;
|
|
74
|
-
return (h(Host, { key: '
|
|
74
|
+
return (h(Host, { key: '14d24d65ec8e5522192ca58035264971b1ab883b', class: getIonMode(this) }, h("img", { key: '345ba155a5fdce5e66c397a599b7333d37d9cb1d', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
|
|
75
75
|
}
|
|
76
76
|
static get is() { return "ion-img"; }
|
|
77
77
|
static get encapsulation() { return "shadow"; }
|
|
@@ -167,7 +167,7 @@ export class InfiniteScroll {
|
|
|
167
167
|
render() {
|
|
168
168
|
const mode = getIonMode(this);
|
|
169
169
|
const disabled = this.disabled;
|
|
170
|
-
return (h(Host, { key: '
|
|
170
|
+
return (h(Host, { key: '1444429a86950c449953cbf578436cc8cabf40ec', class: {
|
|
171
171
|
[mode]: true,
|
|
172
172
|
'infinite-scroll-loading': this.isLoading,
|
|
173
173
|
'infinite-scroll-enabled': !disabled,
|
|
@@ -27,11 +27,11 @@ export class InfiniteScrollContent {
|
|
|
27
27
|
}
|
|
28
28
|
render() {
|
|
29
29
|
const mode = getIonMode(this);
|
|
30
|
-
return (h(Host, { key: '
|
|
30
|
+
return (h(Host, { key: '060278bf9cb0321e182352f9613be4ebbb028259', class: {
|
|
31
31
|
[mode]: true,
|
|
32
32
|
// Used internally for styling
|
|
33
33
|
[`infinite-scroll-content-${mode}`]: true,
|
|
34
|
-
} }, h("div", { key: '
|
|
34
|
+
} }, h("div", { key: '07d3cada920145f979ad315bd187fb878e0c3da3', class: "infinite-loading" }, this.loadingSpinner && (h("div", { key: '6254f175d7543d09f3dd47cd0589a2809182cd8c', class: "infinite-loading-spinner" }, h("ion-spinner", { key: 'a6a816d1c65b60b786333b209b63492aa716a283', name: this.loadingSpinner }))), this.loadingText !== undefined && this.renderLoadingText())));
|
|
35
35
|
}
|
|
36
36
|
static get is() { return "ion-infinite-scroll-content"; }
|
|
37
37
|
static get originalStyleUrls() {
|
|
@@ -81,6 +81,7 @@ export class Input {
|
|
|
81
81
|
this.autocorrect = 'off';
|
|
82
82
|
this.autofocus = false;
|
|
83
83
|
this.clearInput = false;
|
|
84
|
+
this.clearInputIcon = undefined;
|
|
84
85
|
this.clearOnEdit = undefined;
|
|
85
86
|
this.counter = false;
|
|
86
87
|
this.counterFormatter = undefined;
|
|
@@ -371,11 +372,13 @@ export class Input {
|
|
|
371
372
|
return this.renderLabel();
|
|
372
373
|
}
|
|
373
374
|
render() {
|
|
374
|
-
const { disabled, fill, readonly, shape, inputId, labelPlacement, el, hasFocus } = this;
|
|
375
|
+
const { disabled, fill, readonly, shape, inputId, labelPlacement, el, hasFocus, clearInputIcon } = this;
|
|
375
376
|
const mode = getIonMode(this);
|
|
376
377
|
const value = this.getValue();
|
|
377
378
|
const inItem = hostContext('ion-item', this.el);
|
|
378
379
|
const shouldRenderHighlight = mode === 'md' && fill !== 'outline' && !inItem;
|
|
380
|
+
const defaultClearIcon = mode === 'ios' ? closeCircle : closeSharp;
|
|
381
|
+
const clearIconData = clearInputIcon !== null && clearInputIcon !== void 0 ? clearInputIcon : defaultClearIcon;
|
|
379
382
|
const hasValue = this.hasValue();
|
|
380
383
|
const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
|
|
381
384
|
/**
|
|
@@ -396,7 +399,7 @@ export class Input {
|
|
|
396
399
|
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
397
400
|
*/
|
|
398
401
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
|
|
399
|
-
return (h(Host, { key: '
|
|
402
|
+
return (h(Host, { key: '907ce98a82b5cfae5a08504cd79e00a2330b7444', class: createColorClasses(this.color, {
|
|
400
403
|
[mode]: true,
|
|
401
404
|
'has-value': hasValue,
|
|
402
405
|
'has-focus': hasFocus,
|
|
@@ -407,7 +410,7 @@ export class Input {
|
|
|
407
410
|
'in-item': inItem,
|
|
408
411
|
'in-item-color': hostContext('ion-item.ion-color', this.el),
|
|
409
412
|
'input-disabled': disabled,
|
|
410
|
-
}) }, h("label", { key: '
|
|
413
|
+
}) }, h("label", { key: '59d5bb45d2a5b828bba0ed8687a632a551e2f4d8', class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: 'f93f129d08246d0e9a601c100d718534d6403853', class: "native-wrapper" }, h("slot", { key: '54eeb1a6bace662b7eb0d7e27180ea3d7e3a3729', name: "start" }), h("input", Object.assign({ key: 'b3e0be55bc1a4a539ae3b0fdcf7fc078723cca16', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '5f6373504a6d0d074bfbf875c794d45ea2748175', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
|
|
411
414
|
/**
|
|
412
415
|
* This prevents mobile browsers from
|
|
413
416
|
* blurring the input when the clear
|
|
@@ -422,7 +425,7 @@ export class Input {
|
|
|
422
425
|
* for screen readers as it means users would be unable to swipe past the clear button.
|
|
423
426
|
*/
|
|
424
427
|
ev.stopPropagation();
|
|
425
|
-
}, onClick: this.clearTextInput }, h("ion-icon", { key: '
|
|
428
|
+
}, onClick: this.clearTextInput }, h("ion-icon", { key: '230d77973aa83458ceb32bf52e3abe9bc322cfe6', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: '9d69ac6e8a3c4b2b303dba2478f82695d5755ed2', name: "end" })), shouldRenderHighlight && h("div", { key: 'ac61f16237ce731e0745ab72d0fc3f066252464a', class: "input-highlight" })), this.renderBottomContent()));
|
|
426
429
|
}
|
|
427
430
|
static get is() { return "ion-input"; }
|
|
428
431
|
static get encapsulation() { return "scoped"; }
|
|
@@ -559,6 +562,23 @@ export class Input {
|
|
|
559
562
|
"reflect": false,
|
|
560
563
|
"defaultValue": "false"
|
|
561
564
|
},
|
|
565
|
+
"clearInputIcon": {
|
|
566
|
+
"type": "string",
|
|
567
|
+
"mutable": false,
|
|
568
|
+
"complexType": {
|
|
569
|
+
"original": "string",
|
|
570
|
+
"resolved": "string | undefined",
|
|
571
|
+
"references": {}
|
|
572
|
+
},
|
|
573
|
+
"required": false,
|
|
574
|
+
"optional": true,
|
|
575
|
+
"docs": {
|
|
576
|
+
"tags": [],
|
|
577
|
+
"text": "The icon to use for the clear button. Only applies when `clearInput` is set to `true`."
|
|
578
|
+
},
|
|
579
|
+
"attribute": "clear-input-icon",
|
|
580
|
+
"reflect": false
|
|
581
|
+
},
|
|
562
582
|
"clearOnEdit": {
|
|
563
583
|
"type": "boolean",
|
|
564
584
|
"mutable": false,
|
|
@@ -1068,7 +1088,7 @@ export class Input {
|
|
|
1068
1088
|
"composed": true,
|
|
1069
1089
|
"docs": {
|
|
1070
1090
|
"tags": [],
|
|
1071
|
-
"text": "The `ionChange` event is fired when the user modifies the input's value.\nUnlike the `ionInput` event, the `ionChange` event is only fired when changes\nare committed, not as the user types.\n\nDepending on the way the users interacts with the element, the `ionChange`\nevent fires at a different moment:\n- When the user commits the change explicitly (e.g. by selecting a date\nfrom a date picker for `<ion-input type=\"date\">`, pressing the \"Enter\" key, etc.).\n- When the element loses focus after its value has changed: for elements\nwhere the user's interaction is typing."
|
|
1091
|
+
"text": "The `ionChange` event is fired when the user modifies the input's value.\nUnlike the `ionInput` event, the `ionChange` event is only fired when changes\nare committed, not as the user types.\n\nDepending on the way the users interacts with the element, the `ionChange`\nevent fires at a different moment:\n- When the user commits the change explicitly (e.g. by selecting a date\nfrom a date picker for `<ion-input type=\"date\">`, pressing the \"Enter\" key, etc.).\n- When the element loses focus after its value has changed: for elements\nwhere the user's interaction is typing.\n\nThis event will not emit when programmatically setting the `value` property."
|
|
1072
1092
|
},
|
|
1073
1093
|
"complexType": {
|
|
1074
1094
|
"original": "InputChangeEventDetail",
|
|
@@ -83,3 +83,16 @@ describe('input: label rendering', () => {
|
|
|
83
83
|
expect(labelText.textContent).toBe('Label Prop Text');
|
|
84
84
|
});
|
|
85
85
|
});
|
|
86
|
+
// https://github.com/ionic-team/ionic-framework/issues/26974
|
|
87
|
+
describe('input: clear icon', () => {
|
|
88
|
+
it('should render custom icon', async () => {
|
|
89
|
+
const page = await newSpecPage({
|
|
90
|
+
components: [Input],
|
|
91
|
+
html: `
|
|
92
|
+
<ion-input clear-input-icon="foo" clear-input="true"></ion-input>
|
|
93
|
+
`,
|
|
94
|
+
});
|
|
95
|
+
const icon = page.body.querySelector('ion-input ion-icon');
|
|
96
|
+
expect(icon.getAttribute('icon')).toBe('foo');
|
|
97
|
+
});
|
|
98
|
+
});
|
|
@@ -60,16 +60,16 @@ export class InputPasswordToggle {
|
|
|
60
60
|
const showPasswordIcon = (_a = this.showIcon) !== null && _a !== void 0 ? _a : eye;
|
|
61
61
|
const hidePasswordIcon = (_b = this.hideIcon) !== null && _b !== void 0 ? _b : eyeOff;
|
|
62
62
|
const isPasswordVisible = type === 'text';
|
|
63
|
-
return (h(Host, { key: '
|
|
63
|
+
return (h(Host, { key: 'ed1c29726ce0c91548f0e2ada61e3f8b5c813d2d', class: createColorClasses(color, {
|
|
64
64
|
[mode]: true,
|
|
65
|
-
}) }, h("ion-button", { key: '
|
|
65
|
+
}) }, h("ion-button", { key: '9698eccdaedb86cf12d20acc53660371b3af3c55', mode: mode, color: color, fill: "clear", shape: "round", "aria-checked": isPasswordVisible ? 'true' : 'false', "aria-label": "show password", role: "switch", type: "button", onPointerDown: (ev) => {
|
|
66
66
|
/**
|
|
67
67
|
* This prevents mobile browsers from
|
|
68
68
|
* blurring the input when the password toggle
|
|
69
69
|
* button is activated.
|
|
70
70
|
*/
|
|
71
71
|
ev.preventDefault();
|
|
72
|
-
}, onClick: this.togglePasswordVisibility }, h("ion-icon", { key: '
|
|
72
|
+
}, onClick: this.togglePasswordVisibility }, h("ion-icon", { key: '1f2119c30b56c800d9af44e6499445a0ebb466cf', slot: "icon-only", "aria-hidden": "true", icon: isPasswordVisible ? hidePasswordIcon : showPasswordIcon }))));
|
|
73
73
|
}
|
|
74
74
|
static get is() { return "ion-input-password-toggle"; }
|
|
75
75
|
static get encapsulation() { return "shadow"; }
|
|
@@ -4,14 +4,34 @@
|
|
|
4
4
|
import AxeBuilder from "@axe-core/playwright";
|
|
5
5
|
import { expect } from "@playwright/test";
|
|
6
6
|
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
7
|
+
configs({ directions: ['ltr'], palettes: ['dark'] }).forEach(({ config, screenshot, title }) => {
|
|
8
|
+
test.describe(title('item: dark palette'), () => {
|
|
9
|
+
/**
|
|
10
|
+
* This test was originally created to ensure the item border has sufficient
|
|
11
|
+
* contrast. We don't use an Axe test here because Axe not warn about color
|
|
12
|
+
* contrast on the item borders.
|
|
13
|
+
*/
|
|
14
|
+
test('borders should have sufficient contrast', async ({ page }) => {
|
|
15
|
+
test.info().annotations.push({
|
|
16
|
+
type: 'issue',
|
|
17
|
+
description: 'https://github.com/ionic-team/ionic-framework/issues/29386',
|
|
18
|
+
});
|
|
19
|
+
await page.setContent(`
|
|
20
|
+
<ion-list>
|
|
21
|
+
<ion-item>Item</ion-item>
|
|
22
|
+
<ion-item>Item</ion-item>
|
|
23
|
+
</ion-list>
|
|
24
|
+
`, config);
|
|
25
|
+
const list = page.locator('ion-list');
|
|
26
|
+
await expect(list).toHaveScreenshot(screenshot(`item-dark`));
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
});
|
|
7
30
|
configs({ directions: ['ltr'] }).forEach(({ config, screenshot, title }) => {
|
|
8
31
|
test.describe(title('item: axe'), () => {
|
|
9
32
|
test('should not have accessibility violations', async ({ page }) => {
|
|
10
33
|
await page.goto(`/src/components/item/test/a11y`, config);
|
|
11
|
-
const results = await new AxeBuilder({ page })
|
|
12
|
-
// TODO(FW-404): Re-enable rule once select is updated to avoid nested-interactive
|
|
13
|
-
.disableRules('nested-interactive')
|
|
14
|
-
.analyze();
|
|
34
|
+
const results = await new AxeBuilder({ page }).analyze();
|
|
15
35
|
expect(results.violations).toEqual([]);
|
|
16
36
|
});
|
|
17
37
|
test('should reflect aria-label', async ({ page }) => {
|