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
|
@@ -56,20 +56,22 @@ const createLargeTitleTransition = (rootAnimation, rtl, backDirection, enteringE
|
|
|
56
56
|
const leavingLargeTitleBox = leavingLargeTitle.getBoundingClientRect();
|
|
57
57
|
const enteringBackButtonBox = enteringBackButton.getBoundingClientRect();
|
|
58
58
|
const enteringBackButtonTextEl = shadow(enteringBackButton).querySelector('.button-text');
|
|
59
|
-
|
|
59
|
+
// Text element not rendered if developers pass text="" to the back button
|
|
60
|
+
const enteringBackButtonTextBox = enteringBackButtonTextEl === null || enteringBackButtonTextEl === void 0 ? void 0 : enteringBackButtonTextEl.getBoundingClientRect();
|
|
60
61
|
const leavingLargeTitleTextEl = shadow(leavingLargeTitle).querySelector('.toolbar-title');
|
|
61
62
|
const leavingLargeTitleTextBox = leavingLargeTitleTextEl.getBoundingClientRect();
|
|
62
|
-
animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
|
|
63
|
+
animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
|
|
63
64
|
animateBackButton(rootAnimation, rtl, backDirection, enteringBackButton, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox, leavingLargeTitle, leavingLargeTitleTextBox);
|
|
64
65
|
}
|
|
65
66
|
else if (shouldAnimationBackward) {
|
|
66
67
|
const enteringLargeTitleBox = enteringLargeTitle.getBoundingClientRect();
|
|
67
68
|
const leavingBackButtonBox = leavingBackButton.getBoundingClientRect();
|
|
68
69
|
const leavingBackButtonTextEl = shadow(leavingBackButton).querySelector('.button-text');
|
|
69
|
-
|
|
70
|
+
// Text element not rendered if developers pass text="" to the back button
|
|
71
|
+
const leavingBackButtonTextBox = leavingBackButtonTextEl === null || leavingBackButtonTextEl === void 0 ? void 0 : leavingBackButtonTextEl.getBoundingClientRect();
|
|
70
72
|
const enteringLargeTitleTextEl = shadow(enteringLargeTitle).querySelector('.toolbar-title');
|
|
71
73
|
const enteringLargeTitleTextBox = enteringLargeTitleTextEl.getBoundingClientRect();
|
|
72
|
-
animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
|
|
74
|
+
animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
|
|
73
75
|
animateBackButton(rootAnimation, rtl, backDirection, leavingBackButton, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox, enteringLargeTitle, enteringLargeTitleTextBox);
|
|
74
76
|
}
|
|
75
77
|
return {
|
|
@@ -83,26 +85,31 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
83
85
|
const TEXT_ORIGIN_X = rtl ? 'right' : 'left';
|
|
84
86
|
const ICON_ORIGIN_X = rtl ? 'left' : 'right';
|
|
85
87
|
const CONTAINER_ORIGIN_X = rtl ? 'right' : 'left';
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
* If the texts do not match up then the back button text scale adjusts
|
|
90
|
-
* to not perfectly match the large title text otherwise the
|
|
91
|
-
* proportions will be incorrect.
|
|
92
|
-
* When the texts match we scale both the width and height to account for
|
|
93
|
-
* font weight differences between the title and back button.
|
|
94
|
-
*/
|
|
95
|
-
const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
|
|
96
|
-
const WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
|
|
97
|
-
/**
|
|
98
|
-
* We subtract an offset to account for slight sizing/padding
|
|
99
|
-
* differences between the title and the back button.
|
|
100
|
-
*/
|
|
101
|
-
const HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
|
|
102
|
-
const TEXT_START_SCALE = doTitleAndButtonTextsMatch
|
|
103
|
-
? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`
|
|
104
|
-
: `scale(${HEIGHT_SCALE})`;
|
|
88
|
+
let WIDTH_SCALE = 1;
|
|
89
|
+
let HEIGHT_SCALE = 1;
|
|
90
|
+
let TEXT_START_SCALE = `scale(${HEIGHT_SCALE})`;
|
|
105
91
|
const TEXT_END_SCALE = 'scale(1)';
|
|
92
|
+
if (backButtonTextEl && backButtonTextBox) {
|
|
93
|
+
/**
|
|
94
|
+
* When the title and back button texts match then they should overlap during the
|
|
95
|
+
* page transition. If the texts do not match up then the back button text scale
|
|
96
|
+
* adjusts to not perfectly match the large title text otherwise the proportions
|
|
97
|
+
* will be incorrect. When the texts match we scale both the width and height to
|
|
98
|
+
* account for font weight differences between the title and back button.
|
|
99
|
+
*/
|
|
100
|
+
const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
|
|
101
|
+
WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
|
|
102
|
+
/**
|
|
103
|
+
* Subtract an offset to account for slight sizing/padding differences between the
|
|
104
|
+
* title and the back button.
|
|
105
|
+
*/
|
|
106
|
+
HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
|
|
107
|
+
/**
|
|
108
|
+
* Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
|
|
109
|
+
* to re-compute this here since the HEIGHT_SCALE may have changed.
|
|
110
|
+
*/
|
|
111
|
+
TEXT_START_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
|
|
112
|
+
}
|
|
106
113
|
const backButtonIconEl = shadow(backButtonEl).querySelector('ion-icon');
|
|
107
114
|
const backButtonIconBox = backButtonIconEl.getBoundingClientRect();
|
|
108
115
|
/**
|
|
@@ -199,11 +206,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
199
206
|
top: '0px',
|
|
200
207
|
[CONTAINER_ORIGIN_X]: '0px',
|
|
201
208
|
})
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
209
|
+
/**
|
|
210
|
+
* The write hooks must be set on this animation as it is guaranteed to run. Other
|
|
211
|
+
* animations such as the back button text animation will not run if the back button
|
|
212
|
+
* has no visible text.
|
|
213
|
+
*/
|
|
207
214
|
.beforeAddWrite(() => {
|
|
208
215
|
backButtonEl.style.setProperty('display', 'none');
|
|
209
216
|
clonedBackButtonEl.style.setProperty(TEXT_ORIGIN_X, BACK_BUTTON_START_OFFSET);
|
|
@@ -212,6 +219,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
212
219
|
backButtonEl.style.setProperty('display', '');
|
|
213
220
|
clonedBackButtonEl.style.setProperty('display', 'none');
|
|
214
221
|
clonedBackButtonEl.style.removeProperty(TEXT_ORIGIN_X);
|
|
222
|
+
})
|
|
223
|
+
.keyframes(CONTAINER_KEYFRAMES);
|
|
224
|
+
enteringBackButtonTextAnimation
|
|
225
|
+
.beforeStyles({
|
|
226
|
+
'transform-origin': `${TEXT_ORIGIN_X} top`,
|
|
215
227
|
})
|
|
216
228
|
.keyframes(TEXT_KEYFRAMES);
|
|
217
229
|
enteringBackButtonIconAnimation
|
|
@@ -225,7 +237,7 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
225
237
|
enteringBackButtonAnimation,
|
|
226
238
|
]);
|
|
227
239
|
};
|
|
228
|
-
const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonTextEl, backButtonTextBox) => {
|
|
240
|
+
const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonBox, backButtonTextEl, backButtonTextBox) => {
|
|
229
241
|
var _a, _b;
|
|
230
242
|
/**
|
|
231
243
|
* The horizontal transform origin for the large title
|
|
@@ -245,52 +257,67 @@ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, larg
|
|
|
245
257
|
* title and the back button due to padding and font weight.
|
|
246
258
|
*/
|
|
247
259
|
const LARGE_TITLE_TRANSLATION_OFFSET = 8;
|
|
260
|
+
let END_TRANSLATE_X = rtl
|
|
261
|
+
? `-${window.innerWidth - backButtonBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
262
|
+
: `${backButtonBox.x + LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
248
263
|
/**
|
|
249
|
-
*
|
|
250
|
-
* This ensures that the back button and title overlap during
|
|
251
|
-
* the animation. Note that since both elements either fade in
|
|
252
|
-
* or fade out over the course of the animation, neither element
|
|
253
|
-
* will be fully visible on top of the other. As a result, the overlap
|
|
254
|
-
* does not need to be perfect, so approximate values are acceptable here.
|
|
264
|
+
* How much to scale the large title up/down by.
|
|
255
265
|
*/
|
|
256
|
-
|
|
257
|
-
? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
258
|
-
: `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
266
|
+
let HEIGHT_SCALE = 0.5;
|
|
259
267
|
/**
|
|
260
|
-
* The
|
|
261
|
-
* should match with the top of the
|
|
262
|
-
* back button text element.
|
|
263
|
-
* We subtract 2px to account for the top padding
|
|
264
|
-
* on the large title element.
|
|
268
|
+
* The large title always starts full size.
|
|
265
269
|
*/
|
|
266
|
-
const
|
|
267
|
-
const END_TRANSLATE_Y = `${backButtonTextBox.y - LARGE_TITLE_TOP_PADDING}px`;
|
|
270
|
+
const START_SCALE = 'scale(1)';
|
|
268
271
|
/**
|
|
269
|
-
*
|
|
270
|
-
*
|
|
271
|
-
*
|
|
272
|
-
* large title should start at (roughly) the size of the back button
|
|
273
|
-
* and then scale up to its original size.
|
|
274
|
-
*
|
|
275
|
-
* Note that since both elements either fade in
|
|
276
|
-
* or fade out over the course of the animation, neither element
|
|
277
|
-
* will be fully visible on top of the other. As a result, the overlap
|
|
278
|
-
* does not need to be perfect, so approximate values are acceptable here.
|
|
272
|
+
* By default, we don't worry about having the large title scaled to perfectly
|
|
273
|
+
* match the back button because we don't know if the back button's text matches
|
|
274
|
+
* the large title's text.
|
|
279
275
|
*/
|
|
276
|
+
let END_SCALE = `scale(${HEIGHT_SCALE})`;
|
|
277
|
+
// Text element not rendered if developers pass text="" to the back button
|
|
278
|
+
if (backButtonTextEl && backButtonTextBox) {
|
|
279
|
+
/**
|
|
280
|
+
* The scaled title should (roughly) overlap the back button. This ensures that
|
|
281
|
+
* the back button and title overlap during the animation. Note that since both
|
|
282
|
+
* elements either fade in or fade out over the course of the animation, neither
|
|
283
|
+
* element will be fully visible on top of the other. As a result, the overlap
|
|
284
|
+
* does not need to be perfect, so approximate values are acceptable here.
|
|
285
|
+
*/
|
|
286
|
+
END_TRANSLATE_X = rtl
|
|
287
|
+
? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
288
|
+
: `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
289
|
+
/**
|
|
290
|
+
* In the forward direction, the large title should start at its normal size and
|
|
291
|
+
* then scale down to be (roughly) the size of the back button on the other view.
|
|
292
|
+
* In the backward direction, the large title should start at (roughly) the size
|
|
293
|
+
* of the back button and then scale up to its original size.
|
|
294
|
+
* Note that since both elements either fade in or fade out over the course of the
|
|
295
|
+
* animation, neither element will be fully visible on top of the other. As a result,
|
|
296
|
+
* the overlap does not need to be perfect, so approximate values are acceptable here.
|
|
297
|
+
*/
|
|
298
|
+
/**
|
|
299
|
+
* When the title and back button texts match then they should overlap during the
|
|
300
|
+
* page transition. If the texts do not match up then the large title text scale
|
|
301
|
+
* adjusts to not perfectly match the back button text otherwise the proportions
|
|
302
|
+
* will be incorrect. When the texts match we scale both the width and height to
|
|
303
|
+
* account for font weight differences between the title and back button.
|
|
304
|
+
*/
|
|
305
|
+
const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
|
|
306
|
+
const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
|
|
307
|
+
HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
|
|
308
|
+
/**
|
|
309
|
+
* Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
|
|
310
|
+
* to re-compute this here since the HEIGHT_SCALE may have changed.
|
|
311
|
+
*/
|
|
312
|
+
END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
|
|
313
|
+
}
|
|
280
314
|
/**
|
|
281
|
-
*
|
|
282
|
-
*
|
|
283
|
-
* If the texts do not match up then the large title text scale adjusts
|
|
284
|
-
* to not perfectly match the back button text otherwise the
|
|
285
|
-
* proportions will be incorrect.
|
|
286
|
-
* When the texts match we scale both the width and height to account for
|
|
287
|
-
* font weight differences between the title and back button.
|
|
315
|
+
* The midpoints of the back button and the title should align such that the back
|
|
316
|
+
* button and title appear to be centered with each other.
|
|
288
317
|
*/
|
|
289
|
-
const
|
|
290
|
-
const
|
|
291
|
-
const
|
|
292
|
-
const START_SCALE = 'scale(1)';
|
|
293
|
-
const END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
|
|
318
|
+
const backButtonMidPoint = backButtonBox.top + backButtonBox.height / 2;
|
|
319
|
+
const titleMidPoint = (largeTitleBox.height * HEIGHT_SCALE) / 2;
|
|
320
|
+
const END_TRANSLATE_Y = `${backButtonMidPoint - titleMidPoint}px`;
|
|
294
321
|
const BACKWARDS_KEYFRAMES = [
|
|
295
322
|
{ offset: 0, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
|
|
296
323
|
{ offset: 0.1, opacity: 0 },
|
package/components/label.js
CHANGED
|
@@ -5,7 +5,7 @@ import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/
|
|
|
5
5
|
import { c as createColorClasses, h as hostContext } from './theme.js';
|
|
6
6
|
import { b as getIonMode } from './ionic-global.js';
|
|
7
7
|
|
|
8
|
-
const labelIosCss = ".item.sc-ion-label-ios-h,.item .sc-ion-label-ios-h{--color:initial;display:block;color:var(--color);font-family:var(--ion-font-family, inherit);font-size:inherit;text-overflow:ellipsis;-webkit-box-sizing:border-box;box-sizing:border-box}.ion-color.sc-ion-label-ios-h{color:var(--ion-color-base)}.ion-text-nowrap.sc-ion-label-ios-h{overflow:hidden}.item-interactive-disabled.sc-ion-label-ios-h:not(.item-multiple-inputs),.item-interactive-disabled:not(.item-multiple-inputs) .sc-ion-label-ios-h{cursor:default;opacity:0.3;pointer-events:none}.item-input.sc-ion-label-ios-h,.item-input .sc-ion-label-ios-h{-ms-flex:initial;flex:initial;max-width:200px;pointer-events:none}.item-textarea.sc-ion-label-ios-h,.item-textarea .sc-ion-label-ios-h{-ms-flex-item-align:baseline;align-self:baseline}.item-skeleton-text.sc-ion-label-ios-h,.item-skeleton-text .sc-ion-label-ios-h{overflow:hidden}.label-fixed.sc-ion-label-ios-h{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}.label-stacked.sc-ion-label-ios-h,.label-floating.sc-ion-label-ios-h{margin-bottom:0;-ms-flex-item-align:stretch;align-self:stretch;width:auto;max-width:100%}.label-no-animate.label-floating.sc-ion-label-ios-h{-webkit-transition:none;transition:none}.sc-ion-label-ios-s h1,.sc-ion-label-ios-s h2,.sc-ion-label-ios-s h3,.sc-ion-label-ios-s h4,.sc-ion-label-ios-s h5,.sc-ion-label-ios-s h6{text-overflow:inherit;overflow:inherit}.ion-text-wrap.sc-ion-label-ios-h{font-size:0.875rem;line-height:1.5}.label-stacked.sc-ion-label-ios-h{margin-bottom:4px;font-size:0.875rem}.label-floating.sc-ion-label-ios-h{margin-bottom:0;-webkit-transform:translate(0, 29px);transform:translate(0, 29px);-webkit-transform-origin:left top;transform-origin:left top;-webkit-transition:-webkit-transform 150ms ease-in-out;transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out}[dir=rtl].sc-ion-label-ios-h -no-combinator.label-floating.sc-ion-label-ios-h,[dir=rtl] .sc-ion-label-ios-h -no-combinator.label-floating.sc-ion-label-ios-h,[dir=rtl].label-floating.sc-ion-label-ios-h,[dir=rtl] .label-floating.sc-ion-label-ios-h{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){.label-floating.sc-ion-label-ios-h:dir(rtl){-webkit-transform-origin:right top;transform-origin:right top}}.item-textarea.label-floating.sc-ion-label-ios-h,.item-textarea .label-floating.sc-ion-label-ios-h{-webkit-transform:translate(0, 28px);transform:translate(0, 28px)}.item-has-focus.label-floating.sc-ion-label-ios-h,.item-has-focus .label-floating.sc-ion-label-ios-h,.item-has-placeholder.sc-ion-label-ios-h:not(.item-input).label-floating,.item-has-placeholder:not(.item-input) .label-floating.sc-ion-label-ios-h,.item-has-value.label-floating.sc-ion-label-ios-h,.item-has-value .label-floating.sc-ion-label-ios-h{-webkit-transform:scale(0.82);transform:scale(0.82)}.sc-ion-label-ios-s h1{margin-left:0;margin-right:0;margin-top:3px;margin-bottom:2px;font-size:1.375rem;font-weight:normal}.sc-ion-label-ios-s h2{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:1.0625rem;font-weight:normal}.sc-ion-label-ios-s h3,.sc-ion-label-ios-s h4,.sc-ion-label-ios-s h5,.sc-ion-label-ios-s h6{margin-left:0;margin-right:0;margin-top:0;margin-bottom:3px;font-size:0.875rem;font-weight:normal;line-height:normal}.sc-ion-label-ios-s p{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:0.875rem;line-height:normal;text-overflow:inherit;overflow:inherit}.sc-ion-label-ios-s>p{color:var(--ion-text-color-step-
|
|
8
|
+
const labelIosCss = ".item.sc-ion-label-ios-h,.item .sc-ion-label-ios-h{--color:initial;display:block;color:var(--color);font-family:var(--ion-font-family, inherit);font-size:inherit;text-overflow:ellipsis;-webkit-box-sizing:border-box;box-sizing:border-box}.ion-color.sc-ion-label-ios-h{color:var(--ion-color-base)}.ion-text-nowrap.sc-ion-label-ios-h{overflow:hidden}.item-interactive-disabled.sc-ion-label-ios-h:not(.item-multiple-inputs),.item-interactive-disabled:not(.item-multiple-inputs) .sc-ion-label-ios-h{cursor:default;opacity:0.3;pointer-events:none}.item-input.sc-ion-label-ios-h,.item-input .sc-ion-label-ios-h{-ms-flex:initial;flex:initial;max-width:200px;pointer-events:none}.item-textarea.sc-ion-label-ios-h,.item-textarea .sc-ion-label-ios-h{-ms-flex-item-align:baseline;align-self:baseline}.item-skeleton-text.sc-ion-label-ios-h,.item-skeleton-text .sc-ion-label-ios-h{overflow:hidden}.label-fixed.sc-ion-label-ios-h{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}.label-stacked.sc-ion-label-ios-h,.label-floating.sc-ion-label-ios-h{margin-bottom:0;-ms-flex-item-align:stretch;align-self:stretch;width:auto;max-width:100%}.label-no-animate.label-floating.sc-ion-label-ios-h{-webkit-transition:none;transition:none}.sc-ion-label-ios-s h1,.sc-ion-label-ios-s h2,.sc-ion-label-ios-s h3,.sc-ion-label-ios-s h4,.sc-ion-label-ios-s h5,.sc-ion-label-ios-s h6{text-overflow:inherit;overflow:inherit}.ion-text-wrap.sc-ion-label-ios-h{font-size:0.875rem;line-height:1.5}.label-stacked.sc-ion-label-ios-h{margin-bottom:4px;font-size:0.875rem}.label-floating.sc-ion-label-ios-h{margin-bottom:0;-webkit-transform:translate(0, 29px);transform:translate(0, 29px);-webkit-transform-origin:left top;transform-origin:left top;-webkit-transition:-webkit-transform 150ms ease-in-out;transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out}[dir=rtl].sc-ion-label-ios-h -no-combinator.label-floating.sc-ion-label-ios-h,[dir=rtl] .sc-ion-label-ios-h -no-combinator.label-floating.sc-ion-label-ios-h,[dir=rtl].label-floating.sc-ion-label-ios-h,[dir=rtl] .label-floating.sc-ion-label-ios-h{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){.label-floating.sc-ion-label-ios-h:dir(rtl){-webkit-transform-origin:right top;transform-origin:right top}}.item-textarea.label-floating.sc-ion-label-ios-h,.item-textarea .label-floating.sc-ion-label-ios-h{-webkit-transform:translate(0, 28px);transform:translate(0, 28px)}.item-has-focus.label-floating.sc-ion-label-ios-h,.item-has-focus .label-floating.sc-ion-label-ios-h,.item-has-placeholder.sc-ion-label-ios-h:not(.item-input).label-floating,.item-has-placeholder:not(.item-input) .label-floating.sc-ion-label-ios-h,.item-has-value.label-floating.sc-ion-label-ios-h,.item-has-value .label-floating.sc-ion-label-ios-h{-webkit-transform:scale(0.82);transform:scale(0.82)}.sc-ion-label-ios-s h1{margin-left:0;margin-right:0;margin-top:3px;margin-bottom:2px;font-size:1.375rem;font-weight:normal}.sc-ion-label-ios-s h2{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:1.0625rem;font-weight:normal}.sc-ion-label-ios-s h3,.sc-ion-label-ios-s h4,.sc-ion-label-ios-s h5,.sc-ion-label-ios-s h6{margin-left:0;margin-right:0;margin-top:0;margin-bottom:3px;font-size:0.875rem;font-weight:normal;line-height:normal}.sc-ion-label-ios-s p{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:0.875rem;line-height:normal;text-overflow:inherit;overflow:inherit}.sc-ion-label-ios-s>p{color:var(--ion-color-step-400, var(--ion-text-color-step-600, #999999))}.sc-ion-label-ios-h.in-item-color.sc-ion-label-ios-s>p{color:inherit}.sc-ion-label-ios-s h2:last-child,.sc-ion-label-ios-s h3:last-child,.sc-ion-label-ios-s h4:last-child,.sc-ion-label-ios-s h5:last-child,.sc-ion-label-ios-s h6:last-child,.sc-ion-label-ios-s p:last-child{margin-bottom:0}";
|
|
9
9
|
const IonLabelIosStyle0 = labelIosCss;
|
|
10
10
|
|
|
11
11
|
const labelMdCss = ".item.sc-ion-label-md-h,.item .sc-ion-label-md-h{--color:initial;display:block;color:var(--color);font-family:var(--ion-font-family, inherit);font-size:inherit;text-overflow:ellipsis;-webkit-box-sizing:border-box;box-sizing:border-box}.ion-color.sc-ion-label-md-h{color:var(--ion-color-base)}.ion-text-nowrap.sc-ion-label-md-h{overflow:hidden}.item-interactive-disabled.sc-ion-label-md-h:not(.item-multiple-inputs),.item-interactive-disabled:not(.item-multiple-inputs) .sc-ion-label-md-h{cursor:default;opacity:0.3;pointer-events:none}.item-input.sc-ion-label-md-h,.item-input .sc-ion-label-md-h{-ms-flex:initial;flex:initial;max-width:200px;pointer-events:none}.item-textarea.sc-ion-label-md-h,.item-textarea .sc-ion-label-md-h{-ms-flex-item-align:baseline;align-self:baseline}.item-skeleton-text.sc-ion-label-md-h,.item-skeleton-text .sc-ion-label-md-h{overflow:hidden}.label-fixed.sc-ion-label-md-h{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}.label-stacked.sc-ion-label-md-h,.label-floating.sc-ion-label-md-h{margin-bottom:0;-ms-flex-item-align:stretch;align-self:stretch;width:auto;max-width:100%}.label-no-animate.label-floating.sc-ion-label-md-h{-webkit-transition:none;transition:none}.sc-ion-label-md-s h1,.sc-ion-label-md-s h2,.sc-ion-label-md-s h3,.sc-ion-label-md-s h4,.sc-ion-label-md-s h5,.sc-ion-label-md-s h6{text-overflow:inherit;overflow:inherit}.ion-text-wrap.sc-ion-label-md-h{line-height:1.5}.label-stacked.sc-ion-label-md-h,.label-floating.sc-ion-label-md-h{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-transform-origin:top left;transform-origin:top left}.label-stacked.label-rtl.sc-ion-label-md-h,.label-floating.label-rtl.sc-ion-label-md-h{-webkit-transform-origin:top right;transform-origin:top right}.label-stacked.sc-ion-label-md-h{-webkit-transform:translateY(50%) scale(0.75);transform:translateY(50%) scale(0.75);-webkit-transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.label-floating.sc-ion-label-md-h{-webkit-transform:translateY(96%);transform:translateY(96%);-webkit-transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1)}.ion-focused.label-floating.sc-ion-label-md-h,.ion-focused .label-floating.sc-ion-label-md-h,.item-has-focus.label-floating.sc-ion-label-md-h,.item-has-focus .label-floating.sc-ion-label-md-h,.item-has-placeholder.sc-ion-label-md-h:not(.item-input).label-floating,.item-has-placeholder:not(.item-input) .label-floating.sc-ion-label-md-h,.item-has-value.label-floating.sc-ion-label-md-h,.item-has-value .label-floating.sc-ion-label-md-h{-webkit-transform:translateY(50%) scale(0.75);transform:translateY(50%) scale(0.75)}.ion-focused.label-stacked.sc-ion-label-md-h:not(.ion-color),.ion-focused .label-stacked.sc-ion-label-md-h:not(.ion-color),.ion-focused.label-floating.sc-ion-label-md-h:not(.ion-color),.ion-focused .label-floating.sc-ion-label-md-h:not(.ion-color),.item-has-focus.label-stacked.sc-ion-label-md-h:not(.ion-color),.item-has-focus .label-stacked.sc-ion-label-md-h:not(.ion-color),.item-has-focus.label-floating.sc-ion-label-md-h:not(.ion-color),.item-has-focus .label-floating.sc-ion-label-md-h:not(.ion-color){color:var(--ion-color-primary, #0054e9)}.ion-focused.ion-color.label-stacked.sc-ion-label-md-h:not(.ion-color),.ion-focused.ion-color .label-stacked.sc-ion-label-md-h:not(.ion-color),.ion-focused.ion-color.label-floating.sc-ion-label-md-h:not(.ion-color),.ion-focused.ion-color .label-floating.sc-ion-label-md-h:not(.ion-color),.item-has-focus.ion-color.label-stacked.sc-ion-label-md-h:not(.ion-color),.item-has-focus.ion-color .label-stacked.sc-ion-label-md-h:not(.ion-color),.item-has-focus.ion-color.label-floating.sc-ion-label-md-h:not(.ion-color),.item-has-focus.ion-color .label-floating.sc-ion-label-md-h:not(.ion-color){color:var(--ion-color-contrast)}.ion-invalid.ion-touched.label-stacked.sc-ion-label-md-h:not(.ion-color),.ion-invalid.ion-touched .label-stacked.sc-ion-label-md-h:not(.ion-color),.ion-invalid.ion-touched.label-floating.sc-ion-label-md-h:not(.ion-color),.ion-invalid.ion-touched .label-floating.sc-ion-label-md-h:not(.ion-color){color:var(--highlight-color-invalid)}.sc-ion-label-md-s h1{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:1.5rem;font-weight:normal}.sc-ion-label-md-s h2{margin-left:0;margin-right:0;margin-top:2px;margin-bottom:2px;font-size:1rem;font-weight:normal}.sc-ion-label-md-s h3,.sc-ion-label-md-s h4,.sc-ion-label-md-s h5,.sc-ion-label-md-s h6{margin-left:0;margin-right:0;margin-top:2px;margin-bottom:2px;font-size:0.875rem;font-weight:normal;line-height:normal}.sc-ion-label-md-s p{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:0.875rem;line-height:1.25rem;text-overflow:inherit;overflow:inherit}.sc-ion-label-md-s>p{color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.sc-ion-label-md-h.in-item-color.sc-ion-label-md-s>p{color:inherit}";
|
|
@@ -63,13 +63,13 @@ const Label = /*@__PURE__*/ proxyCustomElement(class Label extends HTMLElement {
|
|
|
63
63
|
render() {
|
|
64
64
|
const position = this.position;
|
|
65
65
|
const mode = getIonMode(this);
|
|
66
|
-
return (h(Host, { key: '
|
|
66
|
+
return (h(Host, { key: 'c2c0f388dab910d294efb9fbb409ee4ef829c1ed', class: createColorClasses(this.color, {
|
|
67
67
|
[mode]: true,
|
|
68
68
|
'in-item-color': hostContext('ion-item.ion-color', this.el),
|
|
69
69
|
[`label-${position}`]: position !== undefined,
|
|
70
70
|
[`label-no-animate`]: this.noAnimate,
|
|
71
71
|
'label-rtl': document.dir === 'rtl',
|
|
72
|
-
}) }, h("slot", { key: '
|
|
72
|
+
}) }, h("slot", { key: '4de6b69950f417873a13c851018ec31ea2686f0a' })));
|
|
73
73
|
}
|
|
74
74
|
get el() { return this; }
|
|
75
75
|
static get watchers() { return {
|
|
@@ -22,10 +22,10 @@ const ListHeader = /*@__PURE__*/ proxyCustomElement(class ListHeader extends HTM
|
|
|
22
22
|
render() {
|
|
23
23
|
const { lines } = this;
|
|
24
24
|
const mode = getIonMode(this);
|
|
25
|
-
return (h(Host, { key: '
|
|
25
|
+
return (h(Host, { key: '7e2e050f13722f2b870a2415d99a9e631e9ca267', class: createColorClasses(this.color, {
|
|
26
26
|
[mode]: true,
|
|
27
27
|
[`list-header-lines-${lines}`]: lines !== undefined,
|
|
28
|
-
}) }, h("div", { key: '
|
|
28
|
+
}) }, h("div", { key: '6117bebc45800d874e9b75355476fbced5cc8398', class: "list-header-inner" }, h("slot", { key: '9165fb274cd2c45a5a65c271d8b1f30e8a00c890' }))));
|
|
29
29
|
}
|
|
30
30
|
static get style() { return {
|
|
31
31
|
ios: IonListHeaderIosStyle0,
|
package/components/list.js
CHANGED
|
@@ -33,7 +33,7 @@ const List = /*@__PURE__*/ proxyCustomElement(class List extends HTMLElement {
|
|
|
33
33
|
render() {
|
|
34
34
|
const mode = getIonMode(this);
|
|
35
35
|
const { lines, inset } = this;
|
|
36
|
-
return (h(Host, { key: '
|
|
36
|
+
return (h(Host, { key: '8bde220025a7eeca6da075379c6487c4c9bdddc1', role: "list", class: {
|
|
37
37
|
[mode]: true,
|
|
38
38
|
// Used internally for styling
|
|
39
39
|
[`list-${mode}`]: true,
|
package/components/overlays.js
CHANGED
|
@@ -225,7 +225,7 @@ const trapKeyboardFocus = (ev, doc) => {
|
|
|
225
225
|
* behind the sheet should be focusable until
|
|
226
226
|
* the backdrop is enabled.
|
|
227
227
|
*/
|
|
228
|
-
if (lastOverlay.classList.contains(
|
|
228
|
+
if (lastOverlay.classList.contains(FOCUS_TRAP_DISABLE_CLASS)) {
|
|
229
229
|
return;
|
|
230
230
|
}
|
|
231
231
|
const trapScopedFocus = () => {
|
|
@@ -900,5 +900,6 @@ const revealOverlaysToScreenReaders = () => {
|
|
|
900
900
|
}
|
|
901
901
|
}
|
|
902
902
|
};
|
|
903
|
+
const FOCUS_TRAP_DISABLE_CLASS = 'ion-disable-focus-trap';
|
|
903
904
|
|
|
904
|
-
export { BACKDROP as B, GESTURE as G, OVERLAY_GESTURE_PRIORITY as O, alertController as a, actionSheetController as b, popoverController as c, createDelegateController as d, createTriggerController as e, present as f, dismiss as g, eventMethod as h, isCancel as i, prepareOverlay as j, setOverlayId as k, loadingController as l, modalController as m, focusFirstDescendant as n, getPresentedOverlay as o, pickerController as p, focusLastDescendant as q, safeCall as s, toastController as t };
|
|
905
|
+
export { BACKDROP as B, FOCUS_TRAP_DISABLE_CLASS as F, GESTURE as G, OVERLAY_GESTURE_PRIORITY as O, alertController as a, actionSheetController as b, popoverController as c, createDelegateController as d, createTriggerController as e, present as f, dismiss as g, eventMethod as h, isCancel as i, prepareOverlay as j, setOverlayId as k, loadingController as l, modalController as m, focusFirstDescendant as n, getPresentedOverlay as o, pickerController as p, focusLastDescendant as q, safeCall as s, toastController as t };
|
|
@@ -86,10 +86,10 @@ const PickerColumnOption = /*@__PURE__*/ proxyCustomElement(class PickerColumnOp
|
|
|
86
86
|
render() {
|
|
87
87
|
const { color, disabled, ariaLabel } = this;
|
|
88
88
|
const mode = getIonMode(this);
|
|
89
|
-
return (h(Host, { key: '
|
|
89
|
+
return (h(Host, { key: 'cc4435a0ce0e55be1321bcabaf342ed68cf5ba1e', class: createColorClasses(color, {
|
|
90
90
|
[mode]: true,
|
|
91
91
|
['option-disabled']: disabled,
|
|
92
|
-
}) }, h("button", { key: '
|
|
92
|
+
}) }, h("button", { key: '0187fb967771e0787807a8538dce4e59f6a98565', tabindex: "-1", "aria-label": ariaLabel, disabled: disabled, onClick: () => this.onClick() }, h("slot", { key: 'dbe52552f3f27332816748c12d929cc81060841d' }))));
|
|
93
93
|
}
|
|
94
94
|
get el() { return this; }
|
|
95
95
|
static get watchers() { return {
|
|
@@ -8,7 +8,7 @@ import { a as hapticSelectionStart, b as hapticSelectionChanged, h as hapticSele
|
|
|
8
8
|
import { a as isPlatform, b as getIonMode } from './ionic-global.js';
|
|
9
9
|
import { c as createColorClasses } from './theme.js';
|
|
10
10
|
|
|
11
|
-
const pickerColumnCss = ":host{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;max-width:100%;height:200px;font-size:22px;text-align:center}.picker-opts{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;min-width:26px;max-height:200px;outline:none;text-align:inherit;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;overflow-x:hidden;overflow-y:scroll;scrollbar-width:none}.picker-item-empty{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:block;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.picker-opts::-webkit-scrollbar{display:none}::slotted(ion-picker-column-option){display:block;scroll-snap-align:center}.picker-item-empty,:host(:not([disabled])) ::slotted(ion-picker-column-option.option-disabled){scroll-snap-align:none}::slotted([slot=prefix]),::slotted([slot=suffix]){max-width:200px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::slotted([slot=prefix]){-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:end;justify-content:end}::slotted([slot=suffix]){-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:start;justify-content:start}:host(.picker-column-disabled) .picker-opts{overflow-y:hidden}:host(.picker-column-disabled) ::slotted(ion-picker-column-option){cursor:default;opacity:0.4;pointer-events:none}@media (any-hover: hover){:host(:focus) .picker-opts{outline:none;background:rgba(var(--ion-color-base-rgb), 0.2)}}";
|
|
11
|
+
const pickerColumnCss = ":host{display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;max-width:100%;height:200px;font-size:22px;text-align:center}.assistive-focusable{left:0;right:0;top:0;bottom:0;position:absolute;z-index:1;pointer-events:none}.assistive-focusable:focus{outline:none}.picker-opts{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;min-width:26px;max-height:200px;outline:none;text-align:inherit;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;overflow-x:hidden;overflow-y:scroll;scrollbar-width:none}.picker-item-empty{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:block;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.picker-opts::-webkit-scrollbar{display:none}::slotted(ion-picker-column-option){display:block;scroll-snap-align:center}.picker-item-empty,:host(:not([disabled])) ::slotted(ion-picker-column-option.option-disabled){scroll-snap-align:none}::slotted([slot=prefix]),::slotted([slot=suffix]){max-width:200px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::slotted([slot=prefix]){-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:end;justify-content:end}::slotted([slot=suffix]){-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:start;justify-content:start}:host(.picker-column-disabled) .picker-opts{overflow-y:hidden}:host(.picker-column-disabled) ::slotted(ion-picker-column-option){cursor:default;opacity:0.4;pointer-events:none}@media (any-hover: hover){:host(:focus) .picker-opts{outline:none;background:rgba(var(--ion-color-base-rgb), 0.2)}}";
|
|
12
12
|
const IonPickerColumnStyle0 = pickerColumnCss;
|
|
13
13
|
|
|
14
14
|
const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends HTMLElement {
|
|
@@ -20,6 +20,7 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
|
|
|
20
20
|
this.isScrolling = false;
|
|
21
21
|
this.isColumnVisible = false;
|
|
22
22
|
this.canExitInputMode = true;
|
|
23
|
+
this.updateValueTextOnScroll = false;
|
|
23
24
|
this.centerPickerItemInView = (target, smooth = true, canExitInputMode = true) => {
|
|
24
25
|
const { isColumnVisible, scrollEl } = this;
|
|
25
26
|
if (isColumnVisible && scrollEl) {
|
|
@@ -34,6 +35,7 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
|
|
|
34
35
|
* of these can cause a scroll to occur.
|
|
35
36
|
*/
|
|
36
37
|
this.canExitInputMode = canExitInputMode;
|
|
38
|
+
this.updateValueTextOnScroll = false;
|
|
37
39
|
scrollEl.scroll({
|
|
38
40
|
top,
|
|
39
41
|
left: 0,
|
|
@@ -106,6 +108,7 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
|
|
|
106
108
|
let activeEl = this.activeItem;
|
|
107
109
|
const scrollCallback = () => {
|
|
108
110
|
raf(() => {
|
|
111
|
+
var _a;
|
|
109
112
|
if (!scrollEl)
|
|
110
113
|
return;
|
|
111
114
|
if (timeout) {
|
|
@@ -186,8 +189,23 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
|
|
|
186
189
|
}
|
|
187
190
|
activeEl = newActiveElement;
|
|
188
191
|
this.setPickerItemActiveState(newActiveElement, true);
|
|
192
|
+
/**
|
|
193
|
+
* Set the aria-valuetext even though the value prop has not been updated yet.
|
|
194
|
+
* This enables some screen readers to announce the value as the users drag
|
|
195
|
+
* as opposed to when their release their pointer from the screen.
|
|
196
|
+
*
|
|
197
|
+
* When the value is programmatically updated, we will smoothly scroll
|
|
198
|
+
* to the new option. However, we do not want to update aria-valuetext mid-scroll
|
|
199
|
+
* as that can cause the old value to be briefly set before being set to the
|
|
200
|
+
* correct option. This will cause some screen readers to announce the old value
|
|
201
|
+
* again before announcing the new value. The correct valuetext will be set on render.
|
|
202
|
+
*/
|
|
203
|
+
if (this.updateValueTextOnScroll) {
|
|
204
|
+
(_a = this.assistiveFocusable) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-valuetext', this.getOptionValueText(newActiveElement));
|
|
205
|
+
}
|
|
189
206
|
timeout = setTimeout(() => {
|
|
190
207
|
this.isScrolling = false;
|
|
208
|
+
this.updateValueTextOnScroll = true;
|
|
191
209
|
enableHaptics && hapticSelectionEnd();
|
|
192
210
|
/**
|
|
193
211
|
* Certain tasks (such as those that
|
|
@@ -246,12 +264,139 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
|
|
|
246
264
|
*/
|
|
247
265
|
this.el.classList.remove('picker-column-active');
|
|
248
266
|
};
|
|
267
|
+
/**
|
|
268
|
+
* Find the next enabled option after the active option.
|
|
269
|
+
* @param stride - How many options to "jump" over in order to select the next option.
|
|
270
|
+
* This can be used to implement PageUp/PageDown behaviors where pressing these keys
|
|
271
|
+
* scrolls the picker by more than 1 option. For example, a stride of 5 means select
|
|
272
|
+
* the enabled option 5 options after the active one. Note that the actual option selected
|
|
273
|
+
* may be past the stride if the option at the stride is disabled.
|
|
274
|
+
*/
|
|
275
|
+
this.findNextOption = (stride = 1) => {
|
|
276
|
+
const { activeItem } = this;
|
|
277
|
+
if (!activeItem)
|
|
278
|
+
return null;
|
|
279
|
+
let prevNode = activeItem;
|
|
280
|
+
let node = activeItem.nextElementSibling;
|
|
281
|
+
while (node != null) {
|
|
282
|
+
if (stride > 0) {
|
|
283
|
+
stride--;
|
|
284
|
+
}
|
|
285
|
+
if (node.tagName === 'ION-PICKER-COLUMN-OPTION' && !node.disabled && stride === 0) {
|
|
286
|
+
return node;
|
|
287
|
+
}
|
|
288
|
+
prevNode = node;
|
|
289
|
+
// Use nextElementSibling instead of nextSibling to avoid text/comment nodes
|
|
290
|
+
node = node.nextElementSibling;
|
|
291
|
+
}
|
|
292
|
+
return prevNode;
|
|
293
|
+
};
|
|
294
|
+
/**
|
|
295
|
+
* Find the next enabled option after the active option.
|
|
296
|
+
* @param stride - How many options to "jump" over in order to select the next option.
|
|
297
|
+
* This can be used to implement PageUp/PageDown behaviors where pressing these keys
|
|
298
|
+
* scrolls the picker by more than 1 option. For example, a stride of 5 means select
|
|
299
|
+
* the enabled option 5 options before the active one. Note that the actual option selected
|
|
300
|
+
* may be past the stride if the option at the stride is disabled.
|
|
301
|
+
*/
|
|
302
|
+
this.findPreviousOption = (stride = 1) => {
|
|
303
|
+
const { activeItem } = this;
|
|
304
|
+
if (!activeItem)
|
|
305
|
+
return null;
|
|
306
|
+
let nextNode = activeItem;
|
|
307
|
+
let node = activeItem.previousElementSibling;
|
|
308
|
+
while (node != null) {
|
|
309
|
+
if (stride > 0) {
|
|
310
|
+
stride--;
|
|
311
|
+
}
|
|
312
|
+
if (node.tagName === 'ION-PICKER-COLUMN-OPTION' && !node.disabled && stride === 0) {
|
|
313
|
+
return node;
|
|
314
|
+
}
|
|
315
|
+
nextNode = node;
|
|
316
|
+
// Use previousElementSibling instead of previousSibling to avoid text/comment nodes
|
|
317
|
+
node = node.previousElementSibling;
|
|
318
|
+
}
|
|
319
|
+
return nextNode;
|
|
320
|
+
};
|
|
321
|
+
this.onKeyDown = (ev) => {
|
|
322
|
+
/**
|
|
323
|
+
* The below operations should be inverted when running on a mobile device.
|
|
324
|
+
* For example, swiping up will dispatch an "ArrowUp" event. On desktop,
|
|
325
|
+
* this should cause the previous option to be selected. On mobile, swiping
|
|
326
|
+
* up causes a view to scroll down. As a result, swiping up on mobile should
|
|
327
|
+
* cause the next option to be selected. The Home/End operations remain
|
|
328
|
+
* unchanged because those always represent the first/last options, respectively.
|
|
329
|
+
*/
|
|
330
|
+
const mobile = isPlatform('mobile');
|
|
331
|
+
let newOption = null;
|
|
332
|
+
switch (ev.key) {
|
|
333
|
+
case 'ArrowDown':
|
|
334
|
+
newOption = mobile ? this.findPreviousOption() : this.findNextOption();
|
|
335
|
+
break;
|
|
336
|
+
case 'ArrowUp':
|
|
337
|
+
newOption = mobile ? this.findNextOption() : this.findPreviousOption();
|
|
338
|
+
break;
|
|
339
|
+
case 'PageUp':
|
|
340
|
+
newOption = mobile ? this.findNextOption(5) : this.findPreviousOption(5);
|
|
341
|
+
break;
|
|
342
|
+
case 'PageDown':
|
|
343
|
+
newOption = mobile ? this.findPreviousOption(5) : this.findNextOption(5);
|
|
344
|
+
break;
|
|
345
|
+
case 'Home':
|
|
346
|
+
/**
|
|
347
|
+
* There is no guarantee that the first child will be an ion-picker-column-option,
|
|
348
|
+
* so we do not use firstElementChild.
|
|
349
|
+
*/
|
|
350
|
+
newOption = this.el.querySelector('ion-picker-column-option:first-of-type');
|
|
351
|
+
break;
|
|
352
|
+
case 'End':
|
|
353
|
+
/**
|
|
354
|
+
* There is no guarantee that the last child will be an ion-picker-column-option,
|
|
355
|
+
* so we do not use lastElementChild.
|
|
356
|
+
*/
|
|
357
|
+
newOption = this.el.querySelector('ion-picker-column-option:last-of-type');
|
|
358
|
+
break;
|
|
359
|
+
}
|
|
360
|
+
if (newOption !== null) {
|
|
361
|
+
this.setValue(newOption.value);
|
|
362
|
+
// This stops any default browser behavior such as scrolling
|
|
363
|
+
ev.preventDefault();
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
/**
|
|
367
|
+
* Utility to generate the correct text for aria-valuetext.
|
|
368
|
+
*/
|
|
369
|
+
this.getOptionValueText = (el) => {
|
|
370
|
+
var _a;
|
|
371
|
+
return el ? (_a = el.getAttribute('aria-label')) !== null && _a !== void 0 ? _a : el.innerText : '';
|
|
372
|
+
};
|
|
373
|
+
/**
|
|
374
|
+
* Render an element that overlays the column. This element is for assistive
|
|
375
|
+
* tech to allow users to navigate the column up/down. This element should receive
|
|
376
|
+
* focus as it listens for synthesized keyboard events as required by the
|
|
377
|
+
* slider role: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/slider_role
|
|
378
|
+
*/
|
|
379
|
+
this.renderAssistiveFocusable = () => {
|
|
380
|
+
const { activeItem } = this;
|
|
381
|
+
const valueText = this.getOptionValueText(activeItem);
|
|
382
|
+
/**
|
|
383
|
+
* When using the picker, the valuetext provides important context that valuenow
|
|
384
|
+
* does not. Additionally, using non-zero valuemin/valuemax values can cause
|
|
385
|
+
* WebKit to incorrectly announce numeric valuetext values (such as a year
|
|
386
|
+
* like "2024") as percentages: https://bugs.webkit.org/show_bug.cgi?id=273126
|
|
387
|
+
*/
|
|
388
|
+
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) }));
|
|
389
|
+
};
|
|
390
|
+
this.ariaLabel = null;
|
|
249
391
|
this.isActive = false;
|
|
250
392
|
this.disabled = false;
|
|
251
393
|
this.value = undefined;
|
|
252
394
|
this.color = 'primary';
|
|
253
395
|
this.numericInput = false;
|
|
254
396
|
}
|
|
397
|
+
ariaLabelChanged(newValue) {
|
|
398
|
+
this.ariaLabel = newValue;
|
|
399
|
+
}
|
|
255
400
|
valueChange() {
|
|
256
401
|
if (this.isColumnVisible) {
|
|
257
402
|
/**
|
|
@@ -363,10 +508,14 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
|
|
|
363
508
|
* Use this method instead of the global `pickerColumn.focus()`.
|
|
364
509
|
*/
|
|
365
510
|
async setFocus() {
|
|
366
|
-
if (this.
|
|
367
|
-
this.
|
|
511
|
+
if (this.assistiveFocusable) {
|
|
512
|
+
this.assistiveFocusable.focus();
|
|
368
513
|
}
|
|
369
514
|
}
|
|
515
|
+
connectedCallback() {
|
|
516
|
+
var _a;
|
|
517
|
+
this.ariaLabel = (_a = this.el.getAttribute('aria-label')) !== null && _a !== void 0 ? _a : 'Select a value';
|
|
518
|
+
}
|
|
370
519
|
get activeItem() {
|
|
371
520
|
const { value } = this;
|
|
372
521
|
const options = Array.from(this.el.querySelectorAll('ion-picker-column-option'));
|
|
@@ -384,17 +533,37 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
|
|
|
384
533
|
render() {
|
|
385
534
|
const { color, disabled, isActive, numericInput } = this;
|
|
386
535
|
const mode = getIonMode(this);
|
|
387
|
-
return (h(Host, { key: '
|
|
536
|
+
return (h(Host, { key: 'd60736ce74c0e8c774a163272b78fbad32993ec2', class: createColorClasses(color, {
|
|
388
537
|
[mode]: true,
|
|
389
538
|
['picker-column-active']: isActive,
|
|
390
539
|
['picker-column-numeric-input']: numericInput,
|
|
391
540
|
['picker-column-disabled']: disabled,
|
|
392
|
-
}) }, h("slot", { key: '
|
|
541
|
+
}) }, this.renderAssistiveFocusable(), h("slot", { key: '74611112ef154b343ae29a773f8cd8a01cc1447d', name: "prefix" }), h("div", { key: 'af772d2b61b7eb41a567593d290b80a50b7caa72', "aria-hidden": "true", class: "picker-opts", ref: (el) => {
|
|
393
542
|
this.scrollEl = el;
|
|
394
|
-
}
|
|
543
|
+
},
|
|
544
|
+
/**
|
|
545
|
+
* When an element has an overlay scroll style and
|
|
546
|
+
* a fixed height, Firefox will focus the scrollable
|
|
547
|
+
* container if the content exceeds the container's
|
|
548
|
+
* dimensions.
|
|
549
|
+
*
|
|
550
|
+
* This causes keyboard navigation to focus to this
|
|
551
|
+
* element instead of going to the next element in
|
|
552
|
+
* the tab order.
|
|
553
|
+
*
|
|
554
|
+
* The desired behavior is for the user to be able to
|
|
555
|
+
* focus the assistive focusable element and tab to
|
|
556
|
+
* the next element in the tab order. Instead of tabbing
|
|
557
|
+
* to this element.
|
|
558
|
+
*
|
|
559
|
+
* To prevent this, we set the tabIndex to -1. This
|
|
560
|
+
* will match the behavior of the other browsers.
|
|
561
|
+
*/
|
|
562
|
+
tabIndex: -1 }, h("div", { key: '4b646ee97bcf8ed541b9798c91dff189eec41dd1', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: 'a44d1a10d20a13aeb47f9871b09e291aa7f216bd', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '6a481715bd68fa68dc2a76c2e867ce771ea680b0', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("slot", { key: '23236e731b1ad432c104761ebeec91697a6b7643' }), h("div", { key: '58a6c1f35a3ff0b26acaceebfd477d74b6dcfd6d', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: 'ea864872dec6dc363406d1bd9101b1bf21944db6', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '28cc4c570d0dd59f491eef2b15a5ed706d28b7bb', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), h("slot", { key: 'cff1cc0bea732a5ce22bb451c5ea404a84af1993', name: "suffix" })));
|
|
395
563
|
}
|
|
396
564
|
get el() { return this; }
|
|
397
565
|
static get watchers() { return {
|
|
566
|
+
"aria-label": ["ariaLabelChanged"],
|
|
398
567
|
"value": ["valueChange"]
|
|
399
568
|
}; }
|
|
400
569
|
static get style() { return IonPickerColumnStyle0; }
|
|
@@ -403,11 +572,13 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
|
|
|
403
572
|
"value": [1032],
|
|
404
573
|
"color": [513],
|
|
405
574
|
"numericInput": [4, "numeric-input"],
|
|
575
|
+
"ariaLabel": [32],
|
|
406
576
|
"isActive": [32],
|
|
407
577
|
"scrollActiveItemIntoView": [64],
|
|
408
578
|
"setValue": [64],
|
|
409
579
|
"setFocus": [64]
|
|
410
580
|
}, undefined, {
|
|
581
|
+
"aria-label": ["ariaLabelChanged"],
|
|
411
582
|
"value": ["valueChange"]
|
|
412
583
|
}]);
|
|
413
584
|
const PICKER_ITEM_ACTIVE_CLASS = 'option-active';
|
|
@@ -343,9 +343,9 @@ const PickerColumnCmp = /*@__PURE__*/ proxyCustomElement(class PickerColumnCmp e
|
|
|
343
343
|
render() {
|
|
344
344
|
const col = this.col;
|
|
345
345
|
const mode = getIonMode(this);
|
|
346
|
-
return (h(Host, { key: '
|
|
346
|
+
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: {
|
|
347
347
|
'max-width': this.col.columnWidth,
|
|
348
|
-
} }, col.prefix && (h("div", { key: '
|
|
348
|
+
} }, 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))));
|
|
349
349
|
}
|
|
350
350
|
get el() { return this; }
|
|
351
351
|
static get watchers() { return {
|