@ionic/core 7.7.1 → 7.7.2-dev.11707425083.192d8103
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/action-sheet.js +4 -4
- package/components/alert.js +2 -2
- package/components/backdrop.js +1 -13
- package/components/button-active.js +1 -1
- package/components/button.js +2 -2
- package/components/checkbox.js +2 -2
- package/components/data.js +1 -1
- package/components/gesture-controller.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-badge.js +2 -2
- package/components/ion-content.js +4 -5
- package/components/ion-datetime-button.js +5 -5
- package/components/ion-datetime.js +41 -65
- package/components/ion-fab-button.js +4 -4
- package/components/ion-fab-list.js +3 -3
- 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.js +4 -8
- package/components/ion-item-divider.js +2 -2
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +4 -4
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-loading.js +3 -3
- package/components/ion-menu-button.js +3 -3
- package/components/ion-menu-toggle.js +2 -2
- package/components/ion-menu.js +23 -17
- package/components/ion-modal.js +4 -4
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +8 -4
- package/components/ion-picker-column-option.d.ts +11 -0
- package/components/ion-picker-column-option.js +9 -0
- package/components/ion-picker-column.js +2 -2
- package/components/ion-picker-legacy-column.d.ts +11 -0
- package/components/ion-picker-legacy-column.js +9 -0
- package/components/{ion-picker-internal.d.ts → ion-picker-legacy.d.ts} +4 -4
- package/components/ion-picker-legacy.js +311 -0
- package/components/ion-picker.js +1 -311
- package/components/ion-progress-bar.js +6 -3
- package/components/ion-range.js +2 -2
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-refresher.js +3 -3
- package/components/ion-reorder-group.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-router-link.js +3 -3
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +6 -6
- package/components/ion-segment-button.js +4 -4
- package/components/ion-segment.js +2 -2
- package/components/ion-select-option.js +1 -1
- package/components/ion-select.js +2 -2
- package/components/ion-skeleton-text.js +2 -2
- package/components/ion-split-pane.js +28 -17
- package/components/ion-tab-bar.js +4 -4
- package/components/ion-tab-button.js +4 -4
- 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 +7 -70
- package/components/ion-thumbnail.js +1 -1
- package/components/ion-title.js +3 -3
- package/components/ion-toast.js +12 -6
- package/components/ion-toggle.js +2 -2
- package/components/ion-toolbar.js +2 -2
- package/components/item.js +2 -2
- package/components/label.js +2 -2
- package/components/list-header.js +2 -2
- package/components/list.js +2 -2
- package/components/note.js +2 -2
- package/components/overlays.js +11 -4
- package/components/picker-column-option.js +124 -0
- package/components/picker-column.js +352 -324
- package/components/picker-column2.js +381 -0
- package/components/{picker-internal.js → picker.js} +33 -26
- package/components/popover.js +3 -3
- package/components/radio-group.js +1 -1
- package/components/radio.js +2 -2
- package/components/ripple-effect.js +1 -1
- package/components/select-popover.js +2 -2
- package/components/spinner.js +1 -1
- package/css/core.css +98 -35
- package/css/core.css.map +1 -1
- package/css/display.css.map +1 -1
- package/css/float-elements.css.map +1 -1
- package/css/global.bundle.css +1 -1
- package/css/global.bundle.css.map +1 -1
- package/css/ionic-swiper.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/css/padding.css.map +1 -1
- package/css/structure.css.map +1 -1
- package/css/text-alignment.css.map +1 -1
- package/css/text-transformation.css.map +1 -1
- package/css/themes/dark.always.css +122 -0
- package/css/themes/dark.always.css.map +1 -0
- package/css/themes/dark.class.css +122 -0
- package/css/themes/dark.class.css.map +1 -0
- package/css/themes/dark.css +3 -0
- package/css/themes/dark.css.map +1 -0
- package/css/themes/dark.system.css +124 -0
- package/css/themes/dark.system.css.map +1 -0
- package/css/typography.css +1 -1
- package/css/typography.css.map +1 -1
- package/css/utils.bundle.css.map +1 -1
- package/dist/cjs/{button-active-b8c3f603.js → button-active-600ed3e2.js} +2 -2
- package/dist/cjs/{data-a5109f09.js → data-e2bf21de.js} +1 -1
- package/dist/cjs/{gesture-controller-c40c045a.js → gesture-controller-9436f482.js} +1 -0
- package/dist/cjs/{index-d1b59ffa.js → index-ee07ed59.js} +1 -1
- package/dist/cjs/index.cjs.js +3 -3
- package/dist/cjs/ion-action-sheet.cjs.entry.js +8 -8
- package/dist/cjs/ion-alert.cjs.entry.js +6 -6
- package/dist/cjs/ion-app_8.cjs.entry.js +15 -16
- package/dist/cjs/ion-avatar_3.cjs.entry.js +3 -3
- package/dist/cjs/ion-back-button.cjs.entry.js +1 -1
- package/dist/cjs/ion-backdrop.cjs.entry.js +1 -13
- package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/ion-col_3.cjs.entry.js +3 -3
- package/dist/cjs/ion-datetime-button.cjs.entry.js +6 -6
- package/dist/cjs/ion-datetime_3.cjs.entry.js +50 -70
- package/dist/cjs/ion-fab_3.cjs.entry.js +9 -9
- package/dist/cjs/ion-img.cjs.entry.js +1 -1
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-input.cjs.entry.js +4 -6
- package/dist/cjs/ion-item-option_3.cjs.entry.js +7 -7
- package/dist/cjs/ion-item_8.cjs.entry.js +15 -15
- package/dist/cjs/ion-loading.cjs.entry.js +5 -4
- package/dist/cjs/ion-menu_3.cjs.entry.js +31 -26
- package/dist/cjs/ion-modal.cjs.entry.js +7 -7
- package/dist/cjs/ion-nav_2.cjs.entry.js +8 -5
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +106 -0
- package/dist/cjs/{ion-picker-column-internal.cjs.entry.js → ion-picker-column.cjs.entry.js} +105 -89
- package/dist/cjs/{ion-picker-internal.cjs.entry.js → ion-picker.cjs.entry.js} +30 -23
- package/dist/cjs/ion-popover.cjs.entry.js +5 -4
- package/dist/cjs/ion-progress-bar.cjs.entry.js +6 -3
- package/dist/cjs/ion-radio_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-range.cjs.entry.js +3 -3
- package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -7
- package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
- package/dist/cjs/ion-route_4.cjs.entry.js +3 -3
- package/dist/cjs/ion-searchbar.cjs.entry.js +6 -6
- package/dist/cjs/ion-segment_2.cjs.entry.js +7 -7
- package/dist/cjs/ion-select_3.cjs.entry.js +7 -6
- package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
- package/dist/cjs/ion-split-pane.cjs.entry.js +26 -16
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +8 -8
- package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-text.cjs.entry.js +2 -2
- package/dist/cjs/ion-textarea.cjs.entry.js +7 -67
- package/dist/cjs/ion-toast.cjs.entry.js +14 -8
- package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{overlays-330df245.js → overlays-8f32c4ca.js} +11 -4
- package/dist/cjs/{swipe-back-8411f044.js → swipe-back-f93021d8.js} +2 -2
- package/dist/collection/collection-manifest.json +7 -6
- package/dist/collection/components/action-sheet/action-sheet.ios.css +12 -5
- package/dist/collection/components/action-sheet/action-sheet.js +2 -2
- package/dist/collection/components/action-sheet/action-sheet.md.css +9 -2
- package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +23 -14
- package/dist/collection/components/action-sheet/test/basic/action-sheet-rendering.e2e.js +19 -0
- package/dist/collection/components/action-sheet/test/basic/action-sheet.spec.js +22 -0
- package/dist/collection/components/alert/alert.ios.css +27 -74
- package/dist/collection/components/alert/alert.md.css +14 -110
- package/dist/collection/components/alert/test/a11y/alert.e2e.js +22 -9
- package/dist/collection/components/back-button/back-button.ios.css +1 -1
- package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +21 -0
- package/dist/collection/components/backdrop/backdrop.js +1 -13
- package/dist/collection/components/badge/badge.ios.css +1 -1
- package/dist/collection/components/badge/badge.md.css +1 -1
- package/dist/collection/components/badge/test/a11y/badge.e2e.js +18 -0
- package/dist/collection/components/button/button.ios.css +11 -11
- package/dist/collection/components/button/button.md.css +9 -9
- package/dist/collection/components/button/test/a11y/button.e2e.js +48 -0
- package/dist/collection/components/button/test/wrap/button.e2e.js +12 -24
- package/dist/collection/components/checkbox/checkbox.ios.css +8 -26
- package/dist/collection/components/checkbox/checkbox.md.css +5 -24
- package/dist/collection/components/checkbox/test/a11y/checkbox.e2e.js +11 -2
- package/dist/collection/components/checkbox/test/basic/checkbox.e2e.js +10 -0
- package/dist/collection/components/content/content.css +0 -4
- package/dist/collection/components/content/content.js +3 -4
- package/dist/collection/components/datetime/datetime.ios.css +99 -67
- package/dist/collection/components/datetime/datetime.js +25 -37
- package/dist/collection/components/datetime/datetime.md.css +101 -65
- package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +1 -1
- package/dist/collection/components/datetime/test/a11y/datetime.spec.js +6 -9
- package/dist/collection/components/datetime/test/basic/datetime.e2e.js +10 -0
- package/dist/collection/components/datetime/test/datetime.e2e.js +2 -2
- package/dist/collection/components/datetime/test/disabled/datetime.spec.js +4 -4
- package/dist/collection/components/datetime/test/locale/datetime.e2e.js +2 -2
- package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +6 -6
- package/dist/collection/components/datetime/test/month-year-picker/datetime.e2e.js +1 -1
- package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +43 -41
- package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +1 -1
- package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +4 -4
- package/dist/collection/components/datetime/test/values/datetime.e2e.js +15 -12
- package/dist/collection/components/datetime/utils/data.js +1 -1
- package/dist/collection/components/datetime-button/datetime-button.ios.css +107 -0
- package/dist/collection/components/datetime-button/datetime-button.js +5 -5
- package/dist/collection/components/datetime-button/{datetime-button.css → datetime-button.md.css} +9 -6
- package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +12 -0
- package/dist/collection/components/fab/fab.js +2 -2
- package/dist/collection/components/fab-button/fab-button.ios.css +13 -13
- package/dist/collection/components/fab-button/fab-button.js +2 -2
- package/dist/collection/components/fab-button/fab-button.md.css +4 -4
- package/dist/collection/components/fab-button/test/a11y/fab-button.e2e.js +50 -0
- package/dist/collection/components/fab-list/fab-list.css +4 -42
- 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.ios.css +5 -29
- package/dist/collection/components/input/input.js +2 -41
- package/dist/collection/components/input/input.md.css +9 -76
- package/dist/collection/components/input/test/a11y/input.e2e.js +41 -3
- package/dist/collection/components/item/item.ios.css +3 -3
- package/dist/collection/components/item/item.md.css +6 -25
- 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.ios.css +2 -2
- package/dist/collection/components/item-option/item-option.js +2 -2
- package/dist/collection/components/item-option/item-option.md.css +1 -1
- 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/item-sliding/test/a11y/item-sliding.e2e.js +28 -0
- package/dist/collection/components/label/label.js +1 -1
- package/dist/collection/components/label/label.md.css +1 -1
- package/dist/collection/components/label/test/a11y/label.e2e.js +20 -0
- package/dist/collection/components/list/list.js +1 -1
- package/dist/collection/components/list/list.md.css +2 -26
- 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/loading.md.css +1 -1
- package/dist/collection/components/loading/test/a11y/loading.e2e.js +21 -5
- package/dist/collection/components/menu/menu.ios.css +72 -53
- package/dist/collection/components/menu/menu.js +21 -15
- package/dist/collection/components/menu/menu.md.css +72 -53
- package/dist/collection/components/menu-button/menu-button.ios.css +1 -1
- package/dist/collection/components/menu-button/menu-button.js +2 -2
- package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +14 -0
- package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
- package/dist/collection/components/modal/gestures/swipe-to-close.js +1 -1
- package/dist/collection/components/modal/modal.js +3 -3
- package/dist/collection/components/nav/nav.js +23 -3
- package/dist/collection/components/nav/test/nav-controller.spec.js +36 -36
- 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.ios.css +97 -234
- package/dist/collection/components/picker/picker.js +488 -738
- package/dist/collection/components/picker/picker.md.css +98 -226
- package/dist/collection/components/{picker-internal/test/a11y/picker-internal.e2e.js → picker/test/a11y/picker.e2e.js} +2 -2
- package/dist/collection/components/picker/test/basic/picker.e2e.js +99 -13
- package/dist/collection/components/picker/test/custom/picker.e2e.js +85 -0
- package/dist/collection/components/{picker-internal/test/keyboard-entry/picker-internal.e2e.js → picker/test/keyboard-entry/picker.e2e.js} +79 -42
- package/dist/collection/components/{picker-column-internal/picker-column-internal.md.css → picker-column/picker-column.css} +96 -83
- package/dist/collection/components/picker-column/picker-column.js +499 -335
- package/dist/collection/components/{picker-column-internal/test/basic/picker-column-internal.e2e.js → picker-column/test/basic/picker-column.e2e.js} +8 -8
- package/dist/collection/components/picker-column/test/disabled/picker-column.e2e.js +91 -0
- package/dist/collection/components/picker-column/test/slots/picker-column.e2e.js +39 -0
- package/dist/collection/components/picker-column-option/picker-column-option.ios.css +87 -0
- package/dist/collection/components/picker-column-option/picker-column-option.js +173 -0
- package/dist/collection/components/{picker-column-internal/picker-column-internal.ios.css → picker-column-option/picker-column-option.md.css} +6 -53
- package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +18 -0
- package/dist/collection/components/picker-column-option/test/basic/picker-column-option.e2e.js +37 -0
- package/dist/collection/components/picker-column-option/test/picker-column-option.spec.js +29 -0
- package/dist/collection/components/{picker-internal/picker-internal.md.css → picker-legacy/picker.ios.css} +157 -115
- package/dist/collection/components/picker-legacy/picker.js +811 -0
- package/dist/collection/components/{picker-internal/picker-internal.ios.css → picker-legacy/picker.md.css} +142 -117
- package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +25 -0
- package/dist/collection/components/{picker → picker-legacy}/test/is-open/picker.e2e.js +4 -4
- package/dist/collection/components/{picker → picker-legacy}/test/picker-id.spec.js +5 -5
- package/dist/collection/components/{picker → picker-legacy}/test/trigger/picker.e2e.js +1 -1
- package/dist/collection/components/{picker-column → picker-legacy-column}/picker-column.ios.css +2 -26
- package/dist/collection/components/picker-legacy-column/picker-column.js +419 -0
- package/dist/collection/components/{picker-column → picker-legacy-column}/picker-column.md.css +3 -27
- package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column-aria.spec.js +3 -3
- package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column-dynamic.spec.js +2 -2
- package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column.spec.js +2 -2
- package/dist/collection/components/{picker-column → picker-legacy-column}/test/standalone/picker-column.e2e.js +3 -3
- package/dist/collection/components/popover/popover.ios.css +2 -26
- package/dist/collection/components/popover/popover.js +2 -2
- package/dist/collection/components/progress-bar/progress-bar.ios.css +17 -11
- package/dist/collection/components/progress-bar/progress-bar.js +4 -1
- package/dist/collection/components/progress-bar/progress-bar.md.css +8 -10
- package/dist/collection/components/progress-bar/test/a11y/progress-bar.e2e.js +24 -0
- package/dist/collection/components/radio/radio.ios.css +7 -44
- package/dist/collection/components/radio/radio.md.css +7 -44
- package/dist/collection/components/radio/test/a11y/radio.e2e.js +114 -81
- package/dist/collection/components/radio-group/radio-group.js +1 -1
- package/dist/collection/components/range/range.ios.css +10 -79
- package/dist/collection/components/range/range.md.css +17 -133
- package/dist/collection/components/range/test/a11y/range.e2e.js +18 -8
- package/dist/collection/components/refresher/refresher.ios.css +3 -26
- package/dist/collection/components/refresher/refresher.js +1 -1
- package/dist/collection/components/refresher/refresher.md.css +5 -28
- package/dist/collection/components/refresher/test/a11y/refresher.e2e.js +26 -0
- 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.css +1 -1
- package/dist/collection/components/router-link/router-link.js +2 -2
- package/dist/collection/components/router-link/test/a11y/router-link.e2e.js +23 -0
- 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.ios.css +8 -56
- package/dist/collection/components/searchbar/searchbar.js +4 -4
- package/dist/collection/components/searchbar/searchbar.md.css +6 -78
- package/dist/collection/components/segment/segment.js +2 -2
- package/dist/collection/components/segment/test/a11y/segment.e2e.js +23 -0
- package/dist/collection/components/segment-button/segment-button.js +3 -3
- package/dist/collection/components/segment-button/segment-button.md.css +2 -2
- package/dist/collection/components/select/select.ios.css +6 -24
- package/dist/collection/components/select/select.md.css +10 -71
- package/dist/collection/components/select/test/a11y/select.e2e.js +68 -4
- 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 +4 -4
- package/dist/collection/components/select-popover/test/a11y/select-popover.e2e.js +32 -0
- 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.ios.css +2 -54
- package/dist/collection/components/split-pane/split-pane.js +48 -14
- package/dist/collection/components/split-pane/split-pane.md.css +2 -54
- package/dist/collection/components/split-pane/test/wrapped-menu/split-pane.e2e.js +41 -0
- package/dist/collection/components/tab/tab.js +2 -2
- package/dist/collection/components/tab-bar/tab-bar.ios.css +1 -1
- package/dist/collection/components/tab-bar/tab-bar.js +2 -2
- package/dist/collection/components/tab-bar/tab-bar.md.css +1 -1
- package/dist/collection/components/tab-button/tab-button.ios.css +16 -94
- package/dist/collection/components/tab-button/tab-button.js +2 -2
- package/dist/collection/components/tab-button/tab-button.md.css +10 -93
- package/dist/collection/components/tabs/tabs.js +1 -1
- package/dist/collection/components/text/text.js +2 -2
- package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +41 -3
- package/dist/collection/components/textarea/textarea.ios.css +9 -98
- package/dist/collection/components/textarea/textarea.js +5 -84
- package/dist/collection/components/textarea/textarea.md.css +13 -156
- package/dist/collection/components/thumbnail/thumbnail.js +1 -1
- package/dist/collection/components/title/title.ios.css +2 -21
- package/dist/collection/components/title/title.js +2 -2
- package/dist/collection/components/toast/test/a11y/toast.e2e.js +56 -24
- package/dist/collection/components/toast/toast.ios.css +6 -53
- package/dist/collection/components/toast/toast.js +9 -3
- package/dist/collection/components/toast/toast.md.css +7 -54
- package/dist/collection/components/toggle/test/a11y/toggle.e2e.js +8 -2
- package/dist/collection/components/toggle/toggle.ios.css +11 -29
- package/dist/collection/components/toggle/toggle.md.css +5 -23
- package/dist/collection/components/toolbar/toolbar.js +2 -2
- package/dist/collection/css/test/a11y/typography.e2e.js +18 -0
- package/dist/collection/themes/test/colors/theme.e2e.js +114 -0
- package/dist/collection/utils/gesture/button-active.js +1 -1
- package/dist/collection/utils/gesture/gesture-controller.js +1 -1
- package/dist/collection/utils/overlays.js +11 -4
- package/dist/collection/utils/test/overlays/overlays-scroll-blocking.spec.js +65 -0
- package/dist/collection/utils/test/playwright/generator.js +1 -0
- package/dist/collection/utils/test/playwright/page/utils/set-content.js +1 -1
- package/dist/docs.json +547 -165
- package/dist/esm/{button-active-4bee452c.js → button-active-35dc239f.js} +2 -2
- package/dist/esm/{data-0f3ab200.js → data-691286f1.js} +1 -1
- package/dist/esm/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
- package/dist/esm/{index-2cf77112.js → index-39782642.js} +2 -2
- package/dist/esm/index.js +3 -3
- package/dist/esm/ion-action-sheet.entry.js +8 -8
- package/dist/esm/ion-alert.entry.js +6 -6
- package/dist/esm/ion-app_8.entry.js +15 -16
- package/dist/esm/ion-avatar_3.entry.js +3 -3
- package/dist/esm/ion-back-button.entry.js +1 -1
- package/dist/esm/ion-backdrop.entry.js +1 -13
- package/dist/esm/ion-button_2.entry.js +2 -2
- package/dist/esm/ion-checkbox.entry.js +2 -2
- package/dist/esm/ion-col_3.entry.js +3 -3
- package/dist/esm/ion-datetime-button.entry.js +6 -6
- package/dist/esm/ion-datetime_3.entry.js +49 -69
- package/dist/esm/ion-fab_3.entry.js +9 -9
- package/dist/esm/ion-img.entry.js +1 -1
- package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
- package/dist/esm/ion-input.entry.js +4 -6
- package/dist/esm/ion-item-option_3.entry.js +7 -7
- package/dist/esm/ion-item_8.entry.js +15 -15
- package/dist/esm/ion-loading.entry.js +5 -4
- package/dist/esm/ion-menu_3.entry.js +31 -26
- package/dist/esm/ion-modal.entry.js +7 -7
- package/dist/esm/ion-nav_2.entry.js +8 -5
- package/dist/esm/ion-picker-column-option.entry.js +102 -0
- package/dist/esm/{ion-picker-column-internal.entry.js → ion-picker-column.entry.js} +105 -89
- package/dist/esm/{ion-picker-internal.entry.js → ion-picker.entry.js} +30 -23
- package/dist/esm/ion-popover.entry.js +5 -4
- package/dist/esm/ion-progress-bar.entry.js +6 -3
- package/dist/esm/ion-radio_2.entry.js +3 -3
- package/dist/esm/ion-range.entry.js +3 -3
- package/dist/esm/ion-refresher_2.entry.js +7 -7
- package/dist/esm/ion-reorder_2.entry.js +3 -3
- package/dist/esm/ion-ripple-effect.entry.js +1 -1
- package/dist/esm/ion-route_4.entry.js +3 -3
- package/dist/esm/ion-searchbar.entry.js +6 -6
- package/dist/esm/ion-segment_2.entry.js +7 -7
- package/dist/esm/ion-select_3.entry.js +7 -6
- package/dist/esm/ion-spinner.entry.js +1 -1
- package/dist/esm/ion-split-pane.entry.js +26 -16
- package/dist/esm/ion-tab-bar_2.entry.js +8 -8
- package/dist/esm/ion-tab_2.entry.js +3 -3
- package/dist/esm/ion-text.entry.js +2 -2
- package/dist/esm/ion-textarea.entry.js +8 -68
- package/dist/esm/ion-toast.entry.js +15 -9
- package/dist/esm/ion-toggle.entry.js +3 -3
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{overlays-33ae3ea0.js → overlays-2d8629c6.js} +11 -4
- package/dist/esm/{swipe-back-c06602f2.js → swipe-back-7f7620ca.js} +2 -2
- package/dist/esm-es5/button-active-35dc239f.js +4 -0
- package/dist/esm-es5/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
- package/dist/esm-es5/{index-2cf77112.js → index-39782642.js} +1 -1
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
- package/dist/esm-es5/ion-alert.entry.js +1 -1
- package/dist/esm-es5/ion-app_8.entry.js +1 -1
- package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
- package/dist/esm-es5/ion-back-button.entry.js +1 -1
- package/dist/esm-es5/ion-backdrop.entry.js +1 -1
- package/dist/esm-es5/ion-button_2.entry.js +1 -1
- package/dist/esm-es5/ion-checkbox.entry.js +1 -1
- package/dist/esm-es5/ion-col_3.entry.js +1 -1
- package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
- package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
- package/dist/esm-es5/ion-fab_3.entry.js +1 -1
- package/dist/esm-es5/ion-img.entry.js +1 -1
- package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
- package/dist/esm-es5/ion-input.entry.js +1 -1
- package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
- package/dist/esm-es5/ion-item_8.entry.js +1 -1
- package/dist/esm-es5/ion-loading.entry.js +1 -1
- package/dist/esm-es5/ion-menu_3.entry.js +1 -1
- package/dist/esm-es5/ion-modal.entry.js +1 -1
- package/dist/esm-es5/ion-nav_2.entry.js +1 -1
- package/dist/esm-es5/ion-picker-column-option.entry.js +4 -0
- package/dist/esm-es5/ion-picker-column.entry.js +4 -0
- package/dist/esm-es5/ion-picker.entry.js +4 -0
- package/dist/esm-es5/ion-popover.entry.js +1 -1
- package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
- package/dist/esm-es5/ion-radio_2.entry.js +1 -1
- package/dist/esm-es5/ion-range.entry.js +1 -1
- package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
- package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
- package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
- package/dist/esm-es5/ion-route_4.entry.js +1 -1
- package/dist/esm-es5/ion-searchbar.entry.js +1 -1
- package/dist/esm-es5/ion-segment_2.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.entry.js +1 -1
- package/dist/esm-es5/ion-spinner.entry.js +1 -1
- package/dist/esm-es5/ion-split-pane.entry.js +1 -1
- package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
- package/dist/esm-es5/ion-tab_2.entry.js +1 -1
- package/dist/esm-es5/ion-text.entry.js +1 -1
- package/dist/esm-es5/ion-textarea.entry.js +1 -1
- package/dist/esm-es5/ion-toast.entry.js +1 -1
- package/dist/esm-es5/ion-toggle.entry.js +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/overlays-2d8629c6.js +4 -0
- package/dist/esm-es5/{swipe-back-c06602f2.js → swipe-back-7f7620ca.js} +1 -1
- package/dist/html.html-data.json +152 -13
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-04cca62a.system.entry.js +4 -0
- package/dist/ionic/p-0543054b.entry.js +4 -0
- package/dist/ionic/p-0729b5cd.entry.js +4 -0
- package/dist/ionic/p-08bb849b.entry.js +4 -0
- package/dist/ionic/p-09fffdb0.system.entry.js +4 -0
- package/dist/ionic/p-0b955124.system.js +1 -1
- package/dist/ionic/p-0c840add.entry.js +4 -0
- package/dist/ionic/p-0caf81c6.system.entry.js +4 -0
- package/dist/ionic/{p-cdc277a6.js → p-0d25b742.js} +1 -1
- package/dist/ionic/p-1029611c.entry.js +4 -0
- package/dist/ionic/p-11b295f4.entry.js +4 -0
- package/dist/ionic/{p-bc2c03d7.system.entry.js → p-12b75934.system.entry.js} +1 -1
- package/dist/ionic/p-13264eba.system.entry.js +4 -0
- package/dist/ionic/{p-6f38d0c5.system.entry.js → p-156299c1.system.entry.js} +1 -1
- package/dist/ionic/p-15639026.entry.js +4 -0
- package/dist/ionic/p-156e6059.system.entry.js +4 -0
- package/dist/ionic/p-178690c0.system.entry.js +4 -0
- package/dist/ionic/p-1831387a.system.entry.js +4 -0
- package/dist/ionic/p-19385313.entry.js +4 -0
- package/dist/ionic/{p-c7c8429a.system.js → p-20d469d0.system.js} +1 -1
- package/dist/ionic/p-24058a38.system.entry.js +4 -0
- package/dist/ionic/p-24ff2729.system.entry.js +4 -0
- package/dist/ionic/{p-7c32fb95.system.entry.js → p-2569497d.system.entry.js} +1 -1
- package/dist/ionic/p-276804d2.entry.js +4 -0
- package/dist/ionic/p-2a515f11.system.entry.js +4 -0
- package/dist/ionic/p-2c8e5c80.entry.js +4 -0
- package/dist/ionic/p-315f773b.system.entry.js +4 -0
- package/dist/ionic/p-31d9a349.entry.js +4 -0
- package/dist/ionic/{p-0e29919c.system.entry.js → p-364fd2ae.system.entry.js} +1 -1
- package/dist/ionic/p-3c2c3769.system.entry.js +4 -0
- package/dist/ionic/{p-31b2326e.system.js → p-3e1e14d9.system.js} +1 -1
- package/dist/ionic/p-3f155d29.entry.js +4 -0
- package/dist/ionic/p-3fa8e0f9.entry.js +4 -0
- package/dist/ionic/p-40314c02.entry.js +4 -0
- package/dist/ionic/{p-78edc0cd.system.entry.js → p-43c2aeae.system.entry.js} +2 -2
- package/dist/ionic/{p-ac20160b.system.entry.js → p-445754d1.system.entry.js} +1 -1
- package/dist/ionic/{p-ce2eabd5.entry.js → p-4853de94.entry.js} +1 -1
- package/dist/ionic/p-49457fe6.entry.js +4 -0
- package/dist/ionic/p-499f2482.entry.js +4 -0
- package/dist/ionic/p-4fb92810.system.entry.js +4 -0
- package/dist/ionic/{p-aa7ae6aa.entry.js → p-55a4d7cf.entry.js} +1 -1
- package/dist/ionic/{p-1f6cdf2c.system.entry.js → p-5898aad5.system.entry.js} +1 -1
- package/dist/ionic/{p-1c531ca2.entry.js → p-590ecff0.entry.js} +1 -1
- package/dist/ionic/p-595c7065.entry.js +4 -0
- package/dist/ionic/p-595f9dfe.system.entry.js +4 -0
- package/dist/ionic/p-5e175db3.system.entry.js +4 -0
- package/dist/ionic/{p-fe92da17.entry.js → p-5ee49d72.entry.js} +1 -1
- package/dist/ionic/p-5ef79cfe.system.entry.js +4 -0
- package/dist/ionic/p-5f739516.system.js +4 -0
- package/dist/ionic/{p-400574bf.entry.js → p-6028d77a.entry.js} +1 -1
- package/dist/ionic/p-61c078b4.system.entry.js +4 -0
- package/dist/ionic/p-6c48dd91.system.js +4 -0
- package/dist/ionic/p-6ea89932.js +4 -0
- package/dist/ionic/{p-d95c8e90.entry.js → p-78aade1a.entry.js} +1 -1
- package/dist/ionic/{p-92c2178e.system.entry.js → p-78dfbc32.system.entry.js} +2 -2
- package/dist/ionic/p-7a89f3f3.system.entry.js +4 -0
- package/dist/ionic/p-7dfcdac4.system.entry.js +4 -0
- package/dist/ionic/p-7dfdf838.system.entry.js +4 -0
- package/dist/ionic/p-7efa91b5.entry.js +4 -0
- package/dist/ionic/{p-97eca294.entry.js → p-7f19f4cd.entry.js} +1 -1
- package/dist/ionic/p-854484fa.entry.js +4 -0
- package/dist/ionic/p-892757c2.system.entry.js +4 -0
- package/dist/ionic/p-8a0113a9.entry.js +4 -0
- package/dist/ionic/{p-df281664.system.entry.js → p-8af445b5.system.entry.js} +2 -2
- package/dist/ionic/p-8bd7a47e.entry.js +4 -0
- package/dist/ionic/p-8e58d0a5.system.entry.js +4 -0
- package/dist/ionic/{p-f5d2dc9b.js → p-8ededb41.js} +1 -1
- package/dist/ionic/p-90fcbf72.js +4 -0
- package/dist/ionic/p-912ee727.entry.js +4 -0
- package/dist/ionic/p-938ccce5.entry.js +4 -0
- package/dist/ionic/p-951d75bb.entry.js +4 -0
- package/dist/ionic/{p-bb3615f7.js → p-9b97df10.js} +1 -1
- package/dist/ionic/{p-20a6513f.system.entry.js → p-a074634d.system.entry.js} +2 -2
- package/dist/ionic/{p-fd9a9db3.system.js → p-a0da38e6.system.js} +1 -1
- package/dist/ionic/p-ab08eda4.system.entry.js +4 -0
- package/dist/ionic/{p-eda7a1db.system.entry.js → p-ac955b58.system.entry.js} +1 -1
- package/dist/ionic/p-b17f058b.system.js +4 -0
- package/dist/ionic/{p-dbb4c012.entry.js → p-b1e1d6dd.entry.js} +1 -1
- package/dist/ionic/p-b27577e5.system.entry.js +4 -0
- package/dist/ionic/p-bfcaea5f.entry.js +4 -0
- package/dist/ionic/p-c4045831.entry.js +4 -0
- package/dist/ionic/p-c4e9201d.entry.js +4 -0
- package/dist/ionic/{p-a051c371.entry.js → p-c9de921c.entry.js} +1 -1
- package/dist/ionic/p-c9f6626c.system.entry.js +4 -0
- package/dist/ionic/p-cd5cb2da.system.entry.js +4 -0
- package/dist/ionic/p-d8834a0d.entry.js +4 -0
- package/dist/ionic/p-db504106.entry.js +4 -0
- package/dist/ionic/{p-0eef8b34.system.entry.js → p-dd79d499.system.entry.js} +1 -1
- package/dist/ionic/p-e1054dac.system.entry.js +4 -0
- package/dist/ionic/{p-d8607ede.entry.js → p-e2f91d98.entry.js} +1 -1
- package/dist/ionic/p-e82bc15e.entry.js +4 -0
- package/dist/ionic/p-e9c2c532.entry.js +4 -0
- package/dist/ionic/p-ef065e0d.system.entry.js +4 -0
- package/dist/ionic/p-f7d618b7.entry.js +4 -0
- package/dist/ionic/p-fa203b3a.system.entry.js +4 -0
- package/dist/ionic/{p-9a6ab80a.system.entry.js → p-fa667cfb.system.entry.js} +1 -1
- package/dist/ionic/{p-5a0c301f.entry.js → p-fd14f2b4.entry.js} +1 -1
- package/dist/ionic/p-fe990e42.system.entry.js +4 -0
- package/dist/types/components/action-sheet/action-sheet-interface.d.ts +8 -0
- package/dist/types/components/backdrop/backdrop.d.ts +0 -3
- package/dist/types/components/datetime/datetime.d.ts +0 -1
- package/dist/types/components/datetime/utils/data.d.ts +11 -7
- package/dist/types/components/input/input.d.ts +0 -6
- package/dist/types/components/menu/menu.d.ts +12 -2
- package/dist/types/components/nav/nav.d.ts +4 -1
- package/dist/types/components/picker/picker-interfaces.d.ts +8 -0
- package/dist/types/components/picker/picker.d.ts +75 -129
- package/dist/types/components/picker-column/picker-column-interfaces.d.ts +4 -0
- package/dist/types/components/picker-column/picker-column.d.ts +99 -39
- package/dist/types/components/picker-column-option/picker-column-option.d.ts +66 -0
- package/dist/types/components/picker-legacy/picker.d.ts +158 -0
- package/dist/types/components/picker-legacy-column/picker-column.d.ts +46 -0
- package/dist/types/components/split-pane/split-pane.d.ts +14 -2
- package/dist/types/components/textarea/textarea.d.ts +0 -17
- package/dist/types/components/toast/toast-interface.d.ts +0 -4
- package/dist/types/components.d.ts +159 -142
- package/dist/types/interface.d.ts +1 -1
- package/dist/types/utils/config.d.ts +2 -2
- package/dist/types/utils/gesture/gesture-controller.d.ts +1 -0
- package/dist/types/utils/overlays.d.ts +5 -2
- package/hydrate/index.js +1746 -1683
- package/package.json +1 -1
- package/components/ion-picker-column-internal.d.ts +0 -11
- package/components/ion-picker-column-internal.js +0 -9
- package/components/ion-picker-internal.js +0 -9
- package/components/picker-column-internal.js +0 -392
- package/dist/collection/components/picker-column-internal/picker-column-internal.js +0 -566
- package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +0 -162
- package/dist/collection/components/picker-internal/picker-internal.js +0 -560
- package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +0 -118
- package/dist/collection/components/textarea/test/legacy/a11y/textarea.e2e.js +0 -31
- package/dist/collection/components/textarea/test/legacy/autogrow/textarea.e2e.js +0 -58
- package/dist/collection/components/textarea/test/legacy/basic/textarea.e2e.js +0 -43
- package/dist/collection/components/textarea/test/legacy/clear-on-edit/textarea.e2e.js +0 -25
- package/dist/esm-es5/button-active-4bee452c.js +0 -4
- package/dist/esm-es5/ion-picker-column-internal.entry.js +0 -4
- package/dist/esm-es5/ion-picker-internal.entry.js +0 -4
- package/dist/esm-es5/overlays-33ae3ea0.js +0 -4
- package/dist/ionic/p-016976a7.system.entry.js +0 -4
- package/dist/ionic/p-078fd095.system.entry.js +0 -4
- package/dist/ionic/p-0ae25399.system.entry.js +0 -4
- package/dist/ionic/p-108f730a.entry.js +0 -4
- package/dist/ionic/p-1f583f73.entry.js +0 -4
- package/dist/ionic/p-20f7a91e.system.entry.js +0 -4
- package/dist/ionic/p-2da0a76c.entry.js +0 -4
- package/dist/ionic/p-30c9e049.system.entry.js +0 -4
- package/dist/ionic/p-333f06ed.entry.js +0 -4
- package/dist/ionic/p-389ff4d2.system.entry.js +0 -4
- package/dist/ionic/p-396c1a55.entry.js +0 -4
- package/dist/ionic/p-3a54c070.system.entry.js +0 -4
- package/dist/ionic/p-3a98f8db.entry.js +0 -4
- package/dist/ionic/p-3cb2ab30.entry.js +0 -4
- package/dist/ionic/p-3cdbaa49.entry.js +0 -4
- package/dist/ionic/p-48af4316.system.entry.js +0 -4
- package/dist/ionic/p-4c256bc2.system.entry.js +0 -4
- package/dist/ionic/p-4dfc27eb.system.entry.js +0 -4
- package/dist/ionic/p-51f08a9f.entry.js +0 -4
- package/dist/ionic/p-5b6aa59a.entry.js +0 -4
- package/dist/ionic/p-5e60dbc8.entry.js +0 -4
- package/dist/ionic/p-5eea8b4c.system.js +0 -4
- package/dist/ionic/p-61c0f8bf.system.entry.js +0 -4
- package/dist/ionic/p-680f96e8.system.entry.js +0 -4
- package/dist/ionic/p-6a34980d.entry.js +0 -4
- package/dist/ionic/p-6b02edd6.js +0 -4
- package/dist/ionic/p-70026e8f.system.entry.js +0 -4
- package/dist/ionic/p-776b144b.system.js +0 -4
- package/dist/ionic/p-7dc7514a.entry.js +0 -4
- package/dist/ionic/p-84513dfb.entry.js +0 -4
- package/dist/ionic/p-84879f61.system.entry.js +0 -4
- package/dist/ionic/p-8569d759.system.entry.js +0 -4
- package/dist/ionic/p-8ebd9951.entry.js +0 -4
- package/dist/ionic/p-9beb5039.system.js +0 -4
- package/dist/ionic/p-9f5b40c0.system.entry.js +0 -4
- package/dist/ionic/p-9f6397ce.entry.js +0 -4
- package/dist/ionic/p-a19f5ae1.entry.js +0 -4
- package/dist/ionic/p-a1bfaa5c.system.entry.js +0 -4
- package/dist/ionic/p-aaa4ffb3.system.entry.js +0 -4
- package/dist/ionic/p-ac979ebf.system.entry.js +0 -4
- package/dist/ionic/p-b37e4ee5.system.entry.js +0 -4
- package/dist/ionic/p-b498de69.entry.js +0 -4
- package/dist/ionic/p-bd259c65.system.entry.js +0 -4
- package/dist/ionic/p-c3790581.entry.js +0 -4
- package/dist/ionic/p-c851b204.system.entry.js +0 -4
- package/dist/ionic/p-cd055d60.system.entry.js +0 -4
- package/dist/ionic/p-d7260b87.entry.js +0 -4
- package/dist/ionic/p-d74ca358.entry.js +0 -4
- package/dist/ionic/p-dce9bc53.entry.js +0 -4
- package/dist/ionic/p-dd60faa5.system.entry.js +0 -4
- package/dist/ionic/p-df468a8f.entry.js +0 -4
- package/dist/ionic/p-e0569db4.entry.js +0 -4
- package/dist/ionic/p-e68980ff.system.entry.js +0 -4
- package/dist/ionic/p-e6aaff14.system.entry.js +0 -4
- package/dist/ionic/p-ea8fbf09.entry.js +0 -4
- package/dist/ionic/p-efe9180b.entry.js +0 -4
- package/dist/ionic/p-f1ad3b3d.entry.js +0 -4
- package/dist/ionic/p-f1cc690e.entry.js +0 -4
- package/dist/ionic/p-f46775e4.entry.js +0 -4
- package/dist/ionic/p-f7b43141.system.entry.js +0 -4
- package/dist/ionic/p-f88dd429.entry.js +0 -4
- package/dist/ionic/p-f89ae259.js +0 -4
- package/dist/ionic/p-f97b9cdd.system.entry.js +0 -4
- package/dist/ionic/p-f9d0e6f4.system.entry.js +0 -4
- package/dist/ionic/p-fd3f475f.entry.js +0 -4
- package/dist/types/components/picker-column-internal/picker-column-internal-interfaces.d.ts +0 -5
- package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +0 -102
- package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +0 -8
- package/dist/types/components/picker-internal/picker-internal.d.ts +0 -102
- /package/dist/collection/components/{picker-internal/picker-internal-interfaces.js → picker/picker-interfaces.js} +0 -0
- /package/dist/collection/components/{picker-column-internal/picker-column-internal-interfaces.js → picker-column/picker-column-interfaces.js} +0 -0
- /package/dist/collection/components/{picker → picker-legacy}/animations/ios.enter.js +0 -0
- /package/dist/collection/components/{picker → picker-legacy}/animations/ios.leave.js +0 -0
- /package/dist/collection/components/{picker → picker-legacy}/picker-interface.js +0 -0
- /package/dist/collection/components/{picker-column → picker-legacy-column}/test/test.utils.js +0 -0
- /package/dist/esm-es5/{data-0f3ab200.js → data-691286f1.js} +0 -0
- /package/dist/ionic/{p-f7dce541.js → p-5289aade.js} +0 -0
- /package/dist/ionic/{p-7330c044.system.js → p-66e6860f.system.js} +0 -0
- /package/dist/types/components/{picker → picker-legacy}/animations/ios.enter.d.ts +0 -0
- /package/dist/types/components/{picker → picker-legacy}/animations/ios.leave.d.ts +0 -0
- /package/dist/types/components/{picker → picker-legacy}/picker-interface.d.ts +0 -0
- /package/dist/types/components/{picker-column → picker-legacy-column}/test/test.utils.d.ts +0 -0
|
@@ -2,418 +2,582 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { Host, h } from "@stencil/core";
|
|
5
|
-
import {
|
|
5
|
+
import { doc } from "../../utils/browser/index";
|
|
6
|
+
import { getElementRoot, raf } from "../../utils/helpers";
|
|
6
7
|
import { hapticSelectionChanged, hapticSelectionEnd, hapticSelectionStart } from "../../utils/native/haptic";
|
|
7
|
-
import {
|
|
8
|
+
import { isPlatform } from "../../utils/platform";
|
|
9
|
+
import { createColorClasses } from "../../utils/theme";
|
|
8
10
|
import { getIonMode } from "../../global/ionic-global";
|
|
9
11
|
/**
|
|
10
|
-
* @
|
|
12
|
+
* @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
|
|
13
|
+
*
|
|
14
|
+
* @slot prefix - Content to show on the left side of the picker options.
|
|
15
|
+
* @slot suffix - Content to show on the right side of the picker options.
|
|
11
16
|
*/
|
|
12
|
-
export class
|
|
17
|
+
export class PickerColumn {
|
|
13
18
|
constructor() {
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
this.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const mode = getIonMode(this);
|
|
37
|
-
if (mode === 'ios') {
|
|
38
|
-
pickerRotateFactor = -0.46;
|
|
39
|
-
pickerScaleFactor = 1;
|
|
40
|
-
}
|
|
41
|
-
this.rotateFactor = pickerRotateFactor;
|
|
42
|
-
this.scaleFactor = pickerScaleFactor;
|
|
43
|
-
this.gesture = (await import('../../utils/gesture')).createGesture({
|
|
44
|
-
el: this.el,
|
|
45
|
-
gestureName: 'picker-swipe',
|
|
46
|
-
gesturePriority: 100,
|
|
47
|
-
threshold: 0,
|
|
48
|
-
passive: false,
|
|
49
|
-
onStart: (ev) => this.onStart(ev),
|
|
50
|
-
onMove: (ev) => this.onMove(ev),
|
|
51
|
-
onEnd: (ev) => this.onEnd(ev),
|
|
52
|
-
});
|
|
53
|
-
this.gesture.enable();
|
|
54
|
-
// Options have not been initialized yet
|
|
55
|
-
// Animation must be disabled through the `noAnimate` flag
|
|
56
|
-
// Otherwise, the options will render
|
|
57
|
-
// at the top of the column and transition down
|
|
58
|
-
this.tmrId = setTimeout(() => {
|
|
59
|
-
this.noAnimate = false;
|
|
60
|
-
// After initialization, `refresh()` will be called
|
|
61
|
-
// At this point, animation will be enabled. The options will
|
|
62
|
-
// animate as they are being selected.
|
|
63
|
-
this.refresh(true);
|
|
64
|
-
}, 250);
|
|
65
|
-
}
|
|
66
|
-
componentDidLoad() {
|
|
67
|
-
this.onDomChange();
|
|
68
|
-
}
|
|
69
|
-
componentDidUpdate() {
|
|
70
|
-
// Options may have changed since last update.
|
|
71
|
-
if (this.colDidChange) {
|
|
72
|
-
// Animation must be disabled through the `onDomChange` parameter.
|
|
73
|
-
// Otherwise, the recently added options will render
|
|
74
|
-
// at the top of the column and transition down
|
|
75
|
-
this.onDomChange(true, false);
|
|
76
|
-
this.colDidChange = false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
disconnectedCallback() {
|
|
80
|
-
if (this.rafId !== undefined)
|
|
81
|
-
cancelAnimationFrame(this.rafId);
|
|
82
|
-
if (this.tmrId)
|
|
83
|
-
clearTimeout(this.tmrId);
|
|
84
|
-
if (this.gesture) {
|
|
85
|
-
this.gesture.destroy();
|
|
86
|
-
this.gesture = undefined;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
emitColChange() {
|
|
90
|
-
this.ionPickerColChange.emit(this.col);
|
|
91
|
-
}
|
|
92
|
-
setSelected(selectedIndex, duration) {
|
|
93
|
-
// if there is a selected index, then figure out it's y position
|
|
94
|
-
// if there isn't a selected index, then just use the top y position
|
|
95
|
-
const y = selectedIndex > -1 ? -(selectedIndex * this.optHeight) : 0;
|
|
96
|
-
this.velocity = 0;
|
|
97
|
-
// set what y position we're at
|
|
98
|
-
if (this.rafId !== undefined)
|
|
99
|
-
cancelAnimationFrame(this.rafId);
|
|
100
|
-
this.update(y, duration, true);
|
|
101
|
-
this.emitColChange();
|
|
102
|
-
}
|
|
103
|
-
update(y, duration, saveY) {
|
|
104
|
-
if (!this.optsEl) {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
// ensure we've got a good round number :)
|
|
108
|
-
let translateY = 0;
|
|
109
|
-
let translateZ = 0;
|
|
110
|
-
const { col, rotateFactor } = this;
|
|
111
|
-
const prevSelected = col.selectedIndex;
|
|
112
|
-
const selectedIndex = (col.selectedIndex = this.indexForY(-y));
|
|
113
|
-
const durationStr = duration === 0 ? '' : duration + 'ms';
|
|
114
|
-
const scaleStr = `scale(${this.scaleFactor})`;
|
|
115
|
-
const children = this.optsEl.children;
|
|
116
|
-
for (let i = 0; i < children.length; i++) {
|
|
117
|
-
const button = children[i];
|
|
118
|
-
const opt = col.options[i];
|
|
119
|
-
const optOffset = i * this.optHeight + y;
|
|
120
|
-
let transform = '';
|
|
121
|
-
if (rotateFactor !== 0) {
|
|
122
|
-
const rotateX = optOffset * rotateFactor;
|
|
123
|
-
if (Math.abs(rotateX) <= 90) {
|
|
124
|
-
translateY = 0;
|
|
125
|
-
translateZ = 90;
|
|
126
|
-
transform = `rotateX(${rotateX}deg) `;
|
|
19
|
+
this.isScrolling = false;
|
|
20
|
+
this.isColumnVisible = false;
|
|
21
|
+
this.canExitInputMode = true;
|
|
22
|
+
this.centerPickerItemInView = (target, smooth = true, canExitInputMode = true) => {
|
|
23
|
+
const { isColumnVisible, scrollEl } = this;
|
|
24
|
+
if (isColumnVisible && scrollEl) {
|
|
25
|
+
// (Vertical offset from parent) - (three empty picker rows) + (half the height of the target to ensure the scroll triggers)
|
|
26
|
+
const top = target.offsetTop - 3 * target.clientHeight + target.clientHeight / 2;
|
|
27
|
+
if (scrollEl.scrollTop !== top) {
|
|
28
|
+
/**
|
|
29
|
+
* Setting this flag prevents input
|
|
30
|
+
* mode from exiting in the picker column's
|
|
31
|
+
* scroll callback. This is useful when the user manually
|
|
32
|
+
* taps an item or types on the keyboard as both
|
|
33
|
+
* of these can cause a scroll to occur.
|
|
34
|
+
*/
|
|
35
|
+
this.canExitInputMode = canExitInputMode;
|
|
36
|
+
scrollEl.scroll({
|
|
37
|
+
top,
|
|
38
|
+
left: 0,
|
|
39
|
+
behavior: smooth ? 'smooth' : undefined,
|
|
40
|
+
});
|
|
127
41
|
}
|
|
128
|
-
else {
|
|
129
|
-
translateY = -9999;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
translateZ = 0;
|
|
134
|
-
translateY = optOffset;
|
|
135
|
-
}
|
|
136
|
-
const selected = selectedIndex === i;
|
|
137
|
-
transform += `translate3d(0px,${translateY}px,${translateZ}px) `;
|
|
138
|
-
if (this.scaleFactor !== 1 && !selected) {
|
|
139
|
-
transform += scaleStr;
|
|
140
42
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
43
|
+
};
|
|
44
|
+
this.setPickerItemActiveState = (item, isActive) => {
|
|
45
|
+
if (isActive) {
|
|
46
|
+
item.classList.add(PICKER_ITEM_ACTIVE_CLASS);
|
|
145
47
|
}
|
|
146
|
-
else
|
|
147
|
-
|
|
148
|
-
button.style.transitionDuration = durationStr;
|
|
48
|
+
else {
|
|
49
|
+
item.classList.remove(PICKER_ITEM_ACTIVE_CLASS);
|
|
149
50
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* When ionInputModeChange is emitted, each column
|
|
54
|
+
* needs to check if it is the one being made available
|
|
55
|
+
* for text entry.
|
|
56
|
+
*/
|
|
57
|
+
this.inputModeChange = (ev) => {
|
|
58
|
+
if (!this.numericInput) {
|
|
59
|
+
return;
|
|
153
60
|
}
|
|
154
|
-
|
|
61
|
+
const { useInputMode, inputModeColumn } = ev.detail;
|
|
155
62
|
/**
|
|
156
|
-
*
|
|
157
|
-
*
|
|
63
|
+
* If inputModeColumn is undefined then this means
|
|
64
|
+
* all numericInput columns are being selected.
|
|
158
65
|
*/
|
|
159
|
-
|
|
160
|
-
if (
|
|
161
|
-
|
|
66
|
+
const isColumnActive = inputModeColumn === undefined || inputModeColumn === this.el;
|
|
67
|
+
if (!useInputMode || !isColumnActive) {
|
|
68
|
+
this.setInputModeActive(false);
|
|
69
|
+
return;
|
|
162
70
|
}
|
|
163
|
-
|
|
164
|
-
|
|
71
|
+
this.setInputModeActive(true);
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Setting isActive will cause a re-render.
|
|
75
|
+
* As a result, we do not want to cause the
|
|
76
|
+
* re-render mid scroll as this will cause
|
|
77
|
+
* the picker column to jump back to
|
|
78
|
+
* whatever value was selected at the
|
|
79
|
+
* start of the scroll interaction.
|
|
80
|
+
*/
|
|
81
|
+
this.setInputModeActive = (state) => {
|
|
82
|
+
if (this.isScrolling) {
|
|
83
|
+
this.scrollEndCallback = () => {
|
|
84
|
+
this.isActive = state;
|
|
85
|
+
};
|
|
86
|
+
return;
|
|
165
87
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
88
|
+
this.isActive = state;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* When the column scrolls, the component
|
|
92
|
+
* needs to determine which item is centered
|
|
93
|
+
* in the view and will emit an ionChange with
|
|
94
|
+
* the item object.
|
|
95
|
+
*/
|
|
96
|
+
this.initializeScrollListener = () => {
|
|
97
|
+
/**
|
|
98
|
+
* The haptics for the wheel picker are
|
|
99
|
+
* an iOS-only feature. As a result, they should
|
|
100
|
+
* be disabled on Android.
|
|
101
|
+
*/
|
|
102
|
+
const enableHaptics = isPlatform('ios');
|
|
103
|
+
const { el, scrollEl } = this;
|
|
104
|
+
let timeout;
|
|
105
|
+
let activeEl = this.activeItem;
|
|
106
|
+
const scrollCallback = () => {
|
|
107
|
+
raf(() => {
|
|
108
|
+
if (!scrollEl)
|
|
109
|
+
return;
|
|
110
|
+
if (timeout) {
|
|
111
|
+
clearTimeout(timeout);
|
|
112
|
+
timeout = undefined;
|
|
113
|
+
}
|
|
114
|
+
if (!this.isScrolling) {
|
|
115
|
+
enableHaptics && hapticSelectionStart();
|
|
116
|
+
this.isScrolling = true;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Select item in the center of the column
|
|
120
|
+
* which is the month/year that we want to select
|
|
121
|
+
*/
|
|
122
|
+
const bbox = scrollEl.getBoundingClientRect();
|
|
123
|
+
const centerX = bbox.x + bbox.width / 2;
|
|
124
|
+
const centerY = bbox.y + bbox.height / 2;
|
|
125
|
+
/**
|
|
126
|
+
* elementFromPoint returns the top-most element.
|
|
127
|
+
* This means that if an ion-backdrop is overlaying the
|
|
128
|
+
* picker then the appropriate picker column option will
|
|
129
|
+
* not be selected. To account for this, we use elementsFromPoint
|
|
130
|
+
* and use an Array.find to find the appropriate column option
|
|
131
|
+
* at that point.
|
|
132
|
+
*
|
|
133
|
+
* Additionally, the picker column could be used in the
|
|
134
|
+
* Shadow DOM (i.e. in ion-datetime) so we need to make
|
|
135
|
+
* sure we are choosing the correct host otherwise
|
|
136
|
+
* the elements returns by elementsFromPoint will be
|
|
137
|
+
* retargeted. To account for this, we check to see
|
|
138
|
+
* if the picker column has a parent shadow root. If
|
|
139
|
+
* so, we use that shadow root when doing elementsFromPoint.
|
|
140
|
+
* Otherwise, we just use the document.
|
|
141
|
+
*/
|
|
142
|
+
const rootNode = el.getRootNode();
|
|
143
|
+
const hasParentShadow = rootNode instanceof ShadowRoot;
|
|
144
|
+
const referenceNode = hasParentShadow ? rootNode : doc;
|
|
145
|
+
/**
|
|
146
|
+
* If the reference node is undefined
|
|
147
|
+
* then it's likely that doc is undefined
|
|
148
|
+
* due to being in an SSR environment.
|
|
149
|
+
*/
|
|
150
|
+
if (referenceNode === undefined) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const elementsAtPoint = referenceNode.elementsFromPoint(centerX, centerY);
|
|
154
|
+
/**
|
|
155
|
+
* elementsFromPoint can returns multiple elements
|
|
156
|
+
* so find the relevant picker column option if one exists.
|
|
157
|
+
*/
|
|
158
|
+
const newActiveElement = elementsAtPoint.find((el) => el.tagName === 'ION-PICKER-COLUMN-OPTION');
|
|
159
|
+
if (activeEl !== undefined) {
|
|
160
|
+
this.setPickerItemActiveState(activeEl, false);
|
|
161
|
+
}
|
|
162
|
+
if (newActiveElement === undefined || newActiveElement.disabled) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* If we are selecting a new value,
|
|
167
|
+
* we need to run haptics again.
|
|
168
|
+
*/
|
|
169
|
+
if (newActiveElement !== activeEl) {
|
|
170
|
+
enableHaptics && hapticSelectionChanged();
|
|
171
|
+
if (this.canExitInputMode) {
|
|
172
|
+
/**
|
|
173
|
+
* The native iOS wheel picker
|
|
174
|
+
* only dismisses the keyboard
|
|
175
|
+
* once the selected item has changed
|
|
176
|
+
* as a result of a swipe
|
|
177
|
+
* from the user. If `canExitInputMode` is
|
|
178
|
+
* `false` then this means that the
|
|
179
|
+
* scroll is happening as a result of
|
|
180
|
+
* the `value` property programmatically changing
|
|
181
|
+
* either by an application or by the user via the keyboard.
|
|
182
|
+
*/
|
|
183
|
+
this.exitInputMode();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
activeEl = newActiveElement;
|
|
187
|
+
this.setPickerItemActiveState(newActiveElement, true);
|
|
188
|
+
timeout = setTimeout(() => {
|
|
189
|
+
this.isScrolling = false;
|
|
190
|
+
enableHaptics && hapticSelectionEnd();
|
|
191
|
+
/**
|
|
192
|
+
* Certain tasks (such as those that
|
|
193
|
+
* cause re-renders) should only be done
|
|
194
|
+
* once scrolling has finished, otherwise
|
|
195
|
+
* flickering may occur.
|
|
196
|
+
*/
|
|
197
|
+
const { scrollEndCallback } = this;
|
|
198
|
+
if (scrollEndCallback) {
|
|
199
|
+
scrollEndCallback();
|
|
200
|
+
this.scrollEndCallback = undefined;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Reset this flag as the
|
|
204
|
+
* next scroll interaction could
|
|
205
|
+
* be a scroll from the user. In this
|
|
206
|
+
* case, we should exit input mode.
|
|
207
|
+
*/
|
|
208
|
+
this.canExitInputMode = true;
|
|
209
|
+
this.setValue(newActiveElement.value);
|
|
210
|
+
}, 250);
|
|
211
|
+
});
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* Wrap this in an raf so that the scroll callback
|
|
215
|
+
* does not fire when component is initially shown.
|
|
216
|
+
*/
|
|
217
|
+
raf(() => {
|
|
218
|
+
if (!scrollEl)
|
|
219
|
+
return;
|
|
220
|
+
scrollEl.addEventListener('scroll', scrollCallback);
|
|
221
|
+
this.destroyScrollListener = () => {
|
|
222
|
+
scrollEl.removeEventListener('scroll', scrollCallback);
|
|
223
|
+
};
|
|
224
|
+
});
|
|
225
|
+
};
|
|
226
|
+
/**
|
|
227
|
+
* Tells the parent picker to
|
|
228
|
+
* exit text entry mode. This is only called
|
|
229
|
+
* when the selected item changes during scroll, so
|
|
230
|
+
* we know that the user likely wants to scroll
|
|
231
|
+
* instead of type.
|
|
232
|
+
*/
|
|
233
|
+
this.exitInputMode = () => {
|
|
234
|
+
const { parentEl } = this;
|
|
235
|
+
if (parentEl == null)
|
|
236
|
+
return;
|
|
237
|
+
parentEl.exitInputMode();
|
|
238
|
+
/**
|
|
239
|
+
* setInputModeActive only takes
|
|
240
|
+
* effect once scrolling stops to avoid
|
|
241
|
+
* a component re-render while scrolling.
|
|
242
|
+
* However, we want the visual active
|
|
243
|
+
* indicator to go away immediately, so
|
|
244
|
+
* we call classList.remove here.
|
|
245
|
+
*/
|
|
246
|
+
this.el.classList.remove('picker-column-active');
|
|
247
|
+
};
|
|
248
|
+
this.isActive = false;
|
|
249
|
+
this.disabled = false;
|
|
250
|
+
this.value = undefined;
|
|
251
|
+
this.color = 'primary';
|
|
252
|
+
this.numericInput = false;
|
|
253
|
+
}
|
|
254
|
+
valueChange() {
|
|
255
|
+
if (this.isColumnVisible) {
|
|
256
|
+
/**
|
|
257
|
+
* Only scroll the active item into view when the picker column
|
|
258
|
+
* is actively visible to the user.
|
|
259
|
+
*/
|
|
260
|
+
this.scrollActiveItemIntoView(true);
|
|
175
261
|
}
|
|
176
262
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
263
|
+
/**
|
|
264
|
+
* Only setup scroll listeners
|
|
265
|
+
* when the picker is visible, otherwise
|
|
266
|
+
* the container will have a scroll
|
|
267
|
+
* height of 0px.
|
|
268
|
+
*/
|
|
269
|
+
componentWillLoad() {
|
|
270
|
+
const visibleCallback = (entries) => {
|
|
271
|
+
const ev = entries[0];
|
|
272
|
+
if (ev.isIntersecting) {
|
|
273
|
+
const { activeItem, el } = this;
|
|
274
|
+
this.isColumnVisible = true;
|
|
275
|
+
/**
|
|
276
|
+
* Because this initial call to scrollActiveItemIntoView has to fire before
|
|
277
|
+
* the scroll listener is set up, we need to manage the active class manually.
|
|
278
|
+
*/
|
|
279
|
+
const oldActive = getElementRoot(el).querySelector(`.${PICKER_ITEM_ACTIVE_CLASS}`);
|
|
280
|
+
if (oldActive) {
|
|
281
|
+
this.setPickerItemActiveState(oldActive, false);
|
|
282
|
+
}
|
|
283
|
+
this.scrollActiveItemIntoView();
|
|
284
|
+
if (activeItem) {
|
|
285
|
+
this.setPickerItemActiveState(activeItem, true);
|
|
286
|
+
}
|
|
287
|
+
this.initializeScrollListener();
|
|
199
288
|
}
|
|
200
289
|
else {
|
|
201
|
-
this.
|
|
202
|
-
this.
|
|
203
|
-
|
|
290
|
+
this.isColumnVisible = false;
|
|
291
|
+
if (this.destroyScrollListener) {
|
|
292
|
+
this.destroyScrollListener();
|
|
293
|
+
this.destroyScrollListener = undefined;
|
|
294
|
+
}
|
|
204
295
|
}
|
|
296
|
+
};
|
|
297
|
+
new IntersectionObserver(visibleCallback, { threshold: 0.001 }).observe(this.el);
|
|
298
|
+
const parentEl = (this.parentEl = this.el.closest('ion-picker'));
|
|
299
|
+
if (parentEl !== null) {
|
|
300
|
+
// TODO(FW-2832): type
|
|
301
|
+
parentEl.addEventListener('ionInputModeChange', (ev) => this.inputModeChange(ev));
|
|
205
302
|
}
|
|
206
|
-
else if (this.y % this.optHeight !== 0) {
|
|
207
|
-
// needs to still get locked into a position so options line up
|
|
208
|
-
const currentPos = Math.abs(this.y % this.optHeight);
|
|
209
|
-
// create a velocity in the direction it needs to scroll
|
|
210
|
-
this.velocity = currentPos > this.optHeight / 2 ? 1 : -1;
|
|
211
|
-
this.decelerate();
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
indexForY(y) {
|
|
215
|
-
return Math.min(Math.max(Math.abs(Math.round(y / this.optHeight)), 0), this.col.options.length - 1);
|
|
216
303
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
let minY = options.length - 1;
|
|
231
|
-
let maxY = 0;
|
|
232
|
-
for (let i = 0; i < options.length; i++) {
|
|
233
|
-
if (!options[i].disabled) {
|
|
234
|
-
minY = Math.min(minY, i);
|
|
235
|
-
maxY = Math.max(maxY, i);
|
|
304
|
+
componentDidRender() {
|
|
305
|
+
const { el, activeItem, isColumnVisible, value } = this;
|
|
306
|
+
if (isColumnVisible && !activeItem) {
|
|
307
|
+
const firstOption = el.querySelector('ion-picker-column-option');
|
|
308
|
+
/**
|
|
309
|
+
* If the picker column does not have an active item and the current value
|
|
310
|
+
* does not match the first item in the picker column, that means
|
|
311
|
+
* the value is out of bounds. In this case, we assign the value to the
|
|
312
|
+
* first item to match the scroll position of the column.
|
|
313
|
+
*
|
|
314
|
+
*/
|
|
315
|
+
if (firstOption !== null && firstOption.value !== value) {
|
|
316
|
+
this.setValue(firstOption.value);
|
|
236
317
|
}
|
|
237
318
|
}
|
|
238
|
-
this.minY = -(minY * this.optHeight);
|
|
239
|
-
this.maxY = -(maxY * this.optHeight);
|
|
240
319
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
// update the scroll position relative to pointer start position
|
|
247
|
-
let y = this.y + detail.deltaY;
|
|
248
|
-
if (y > this.minY) {
|
|
249
|
-
// scrolling up higher than scroll area
|
|
250
|
-
y = Math.pow(y, 0.8);
|
|
251
|
-
this.bounceFrom = y;
|
|
320
|
+
/** @internal */
|
|
321
|
+
async scrollActiveItemIntoView(smooth = false) {
|
|
322
|
+
const activeEl = this.activeItem;
|
|
323
|
+
if (activeEl) {
|
|
324
|
+
this.centerPickerItemInView(activeEl, smooth, false);
|
|
252
325
|
}
|
|
253
|
-
else if (y < this.maxY) {
|
|
254
|
-
// scrolling down below scroll area
|
|
255
|
-
y += Math.pow(this.maxY - y, 0.9);
|
|
256
|
-
this.bounceFrom = y;
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
this.bounceFrom = 0;
|
|
260
|
-
}
|
|
261
|
-
this.update(y, 0, false);
|
|
262
326
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
327
|
+
/**
|
|
328
|
+
* Sets the value prop and fires the ionChange event.
|
|
329
|
+
* This is used when we need to fire ionChange from
|
|
330
|
+
* user-generated events that cannot be caught with normal
|
|
331
|
+
* input/change event listeners.
|
|
332
|
+
* @internal
|
|
333
|
+
*/
|
|
334
|
+
async setValue(value) {
|
|
335
|
+
if (this.disabled === true || this.value === value) {
|
|
268
336
|
return;
|
|
269
337
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
this.update(this.maxY, 100, true);
|
|
273
|
-
this.emitColChange();
|
|
274
|
-
return;
|
|
275
|
-
}
|
|
276
|
-
this.velocity = clamp(-MAX_PICKER_SPEED, detail.velocityY * 23, MAX_PICKER_SPEED);
|
|
277
|
-
if (this.velocity === 0 && detail.deltaY === 0) {
|
|
278
|
-
const opt = detail.event.target.closest('.picker-opt');
|
|
279
|
-
if (opt === null || opt === void 0 ? void 0 : opt.hasAttribute('opt-index')) {
|
|
280
|
-
this.setSelected(parseInt(opt.getAttribute('opt-index'), 10), TRANSITION_DURATION);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
else {
|
|
284
|
-
this.y += detail.deltaY;
|
|
285
|
-
if (Math.abs(detail.velocityY) < 0.05) {
|
|
286
|
-
const isScrollingUp = detail.deltaY > 0;
|
|
287
|
-
const optHeightFraction = (Math.abs(this.y) % this.optHeight) / this.optHeight;
|
|
288
|
-
if (isScrollingUp && optHeightFraction > 0.5) {
|
|
289
|
-
this.velocity = Math.abs(this.velocity) * -1;
|
|
290
|
-
}
|
|
291
|
-
else if (!isScrollingUp && optHeightFraction <= 0.5) {
|
|
292
|
-
this.velocity = Math.abs(this.velocity);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
this.decelerate();
|
|
296
|
-
}
|
|
338
|
+
this.value = value;
|
|
339
|
+
this.ionChange.emit({ value });
|
|
297
340
|
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
min = Math.min(min, i);
|
|
306
|
-
max = Math.max(max, i);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Only update selected value if column has a
|
|
311
|
-
* velocity of 0. If it does not, then the
|
|
312
|
-
* column is animating might land on
|
|
313
|
-
* a value different than the value at
|
|
314
|
-
* selectedIndex
|
|
315
|
-
*/
|
|
316
|
-
if (this.velocity !== 0) {
|
|
317
|
-
return;
|
|
318
|
-
}
|
|
319
|
-
const selectedIndex = clamp(min, (_a = this.col.selectedIndex) !== null && _a !== void 0 ? _a : 0, max);
|
|
320
|
-
if (this.col.prevSelected !== selectedIndex || forceRefresh) {
|
|
321
|
-
const y = selectedIndex * this.optHeight * -1;
|
|
322
|
-
const duration = animated ? TRANSITION_DURATION : 0;
|
|
323
|
-
this.velocity = 0;
|
|
324
|
-
this.update(y, duration, true);
|
|
341
|
+
/**
|
|
342
|
+
* Sets focus on the scrollable container within the picker column.
|
|
343
|
+
* Use this method instead of the global `pickerColumn.focus()`.
|
|
344
|
+
*/
|
|
345
|
+
async setFocus() {
|
|
346
|
+
if (this.scrollEl) {
|
|
347
|
+
this.scrollEl.focus();
|
|
325
348
|
}
|
|
326
349
|
}
|
|
327
|
-
|
|
328
|
-
const
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
350
|
+
get activeItem() {
|
|
351
|
+
const { value } = this;
|
|
352
|
+
const options = Array.from(this.el.querySelectorAll('ion-picker-column-option'));
|
|
353
|
+
return options.find((option) => {
|
|
354
|
+
/**
|
|
355
|
+
* If the whole picker column is disabled, the current value should appear active
|
|
356
|
+
* If the current value item is specifically disabled, it should not appear active
|
|
357
|
+
*/
|
|
358
|
+
if (!this.disabled && option.disabled) {
|
|
359
|
+
return false;
|
|
360
|
+
}
|
|
361
|
+
return option.value === value;
|
|
362
|
+
});
|
|
335
363
|
}
|
|
336
364
|
render() {
|
|
337
|
-
const
|
|
365
|
+
const { color, disabled, isActive, numericInput } = this;
|
|
338
366
|
const mode = getIonMode(this);
|
|
339
|
-
return (h(Host, { key: '
|
|
340
|
-
|
|
341
|
-
|
|
367
|
+
return (h(Host, { key: '4803f7215ee2272e74d76b562553098dc4e2f0bc', class: createColorClasses(color, {
|
|
368
|
+
[mode]: true,
|
|
369
|
+
['picker-column-active']: isActive,
|
|
370
|
+
['picker-column-numeric-input']: numericInput,
|
|
371
|
+
['picker-column-disabled']: disabled,
|
|
372
|
+
}) }, h("slot", { key: 'f486e4903f7818021c8d02e3251300ef0bd64e7f', name: "prefix" }), h("div", { key: '3f0f2c4e77b1bd55b425235fa428c95c793d65ba', class: "picker-opts", tabindex: disabled ? undefined : 0, ref: (el) => {
|
|
373
|
+
this.scrollEl = el;
|
|
374
|
+
} }, h("div", { key: '84a373222f1e2084312de67781bdf72f6b40a9e9', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '948311d8ea52ff1ead1e52c27a2d959164cb9b67', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '7cf18267fda32b762bf20f7213810bc800136a4f', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("slot", { key: 'c068963fd65ea1eb70e2fc3dc8125c6b4deff68d' }), h("div", { key: '63442e50269c3266c907d525e66782c8e753af60', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '4f18258bd9f1822725420208491315b970d19aff', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '5d1d3e37d88872284a756ab63078943f732d2293', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), h("slot", { key: '7c68b8237cc1a3954d174df34aa3ab2797466a38', name: "suffix" })));
|
|
342
375
|
}
|
|
343
376
|
static get is() { return "ion-picker-column"; }
|
|
377
|
+
static get encapsulation() { return "shadow"; }
|
|
344
378
|
static get originalStyleUrls() {
|
|
345
379
|
return {
|
|
346
|
-
"
|
|
347
|
-
"md": ["picker-column.md.scss"]
|
|
380
|
+
"$": ["picker-column.scss"]
|
|
348
381
|
};
|
|
349
382
|
}
|
|
350
383
|
static get styleUrls() {
|
|
351
384
|
return {
|
|
352
|
-
"
|
|
353
|
-
"md": ["picker-column.md.css"]
|
|
385
|
+
"$": ["picker-column.css"]
|
|
354
386
|
};
|
|
355
387
|
}
|
|
356
388
|
static get properties() {
|
|
357
389
|
return {
|
|
358
|
-
"
|
|
359
|
-
"type": "
|
|
390
|
+
"disabled": {
|
|
391
|
+
"type": "boolean",
|
|
360
392
|
"mutable": false,
|
|
361
393
|
"complexType": {
|
|
362
|
-
"original": "
|
|
363
|
-
"resolved": "
|
|
394
|
+
"original": "boolean",
|
|
395
|
+
"resolved": "boolean",
|
|
396
|
+
"references": {}
|
|
397
|
+
},
|
|
398
|
+
"required": false,
|
|
399
|
+
"optional": false,
|
|
400
|
+
"docs": {
|
|
401
|
+
"tags": [],
|
|
402
|
+
"text": "If `true`, the user cannot interact with the picker."
|
|
403
|
+
},
|
|
404
|
+
"attribute": "disabled",
|
|
405
|
+
"reflect": false,
|
|
406
|
+
"defaultValue": "false"
|
|
407
|
+
},
|
|
408
|
+
"value": {
|
|
409
|
+
"type": "any",
|
|
410
|
+
"mutable": true,
|
|
411
|
+
"complexType": {
|
|
412
|
+
"original": "string | number",
|
|
413
|
+
"resolved": "number | string | undefined",
|
|
414
|
+
"references": {}
|
|
415
|
+
},
|
|
416
|
+
"required": false,
|
|
417
|
+
"optional": true,
|
|
418
|
+
"docs": {
|
|
419
|
+
"tags": [],
|
|
420
|
+
"text": "The selected option in the picker."
|
|
421
|
+
},
|
|
422
|
+
"attribute": "value",
|
|
423
|
+
"reflect": false
|
|
424
|
+
},
|
|
425
|
+
"color": {
|
|
426
|
+
"type": "string",
|
|
427
|
+
"mutable": false,
|
|
428
|
+
"complexType": {
|
|
429
|
+
"original": "Color",
|
|
430
|
+
"resolved": "\"danger\" | \"dark\" | \"light\" | \"medium\" | \"primary\" | \"secondary\" | \"success\" | \"tertiary\" | \"warning\" | string & Record<never, never> | undefined",
|
|
364
431
|
"references": {
|
|
365
|
-
"
|
|
432
|
+
"Color": {
|
|
366
433
|
"location": "import",
|
|
367
|
-
"path": "
|
|
368
|
-
"id": "src/
|
|
434
|
+
"path": "../../interface",
|
|
435
|
+
"id": "src/interface.d.ts::Color"
|
|
369
436
|
}
|
|
370
437
|
}
|
|
371
438
|
},
|
|
372
|
-
"required":
|
|
373
|
-
"optional":
|
|
439
|
+
"required": false,
|
|
440
|
+
"optional": true,
|
|
374
441
|
"docs": {
|
|
375
442
|
"tags": [],
|
|
376
|
-
"text": "
|
|
377
|
-
}
|
|
443
|
+
"text": "The color to use from your application's color palette.\nDefault options are: `\"primary\"`, `\"secondary\"`, `\"tertiary\"`, `\"success\"`, `\"warning\"`, `\"danger\"`, `\"light\"`, `\"medium\"`, and `\"dark\"`.\nFor more information on colors, see [theming](/docs/theming/basics)."
|
|
444
|
+
},
|
|
445
|
+
"attribute": "color",
|
|
446
|
+
"reflect": true,
|
|
447
|
+
"defaultValue": "'primary'"
|
|
448
|
+
},
|
|
449
|
+
"numericInput": {
|
|
450
|
+
"type": "boolean",
|
|
451
|
+
"mutable": false,
|
|
452
|
+
"complexType": {
|
|
453
|
+
"original": "boolean",
|
|
454
|
+
"resolved": "boolean",
|
|
455
|
+
"references": {}
|
|
456
|
+
},
|
|
457
|
+
"required": false,
|
|
458
|
+
"optional": false,
|
|
459
|
+
"docs": {
|
|
460
|
+
"tags": [{
|
|
461
|
+
"name": "internal",
|
|
462
|
+
"text": undefined
|
|
463
|
+
}],
|
|
464
|
+
"text": "If `true`, tapping the picker will\nreveal a number input keyboard that lets\nthe user type in values for each picker\ncolumn. This is useful when working\nwith time pickers."
|
|
465
|
+
},
|
|
466
|
+
"attribute": "numeric-input",
|
|
467
|
+
"reflect": false,
|
|
468
|
+
"defaultValue": "false"
|
|
378
469
|
}
|
|
379
470
|
};
|
|
380
471
|
}
|
|
472
|
+
static get states() {
|
|
473
|
+
return {
|
|
474
|
+
"isActive": {}
|
|
475
|
+
};
|
|
476
|
+
}
|
|
381
477
|
static get events() {
|
|
382
478
|
return [{
|
|
383
|
-
"method": "
|
|
384
|
-
"name": "
|
|
479
|
+
"method": "ionChange",
|
|
480
|
+
"name": "ionChange",
|
|
385
481
|
"bubbles": true,
|
|
386
482
|
"cancelable": true,
|
|
387
483
|
"composed": true,
|
|
388
484
|
"docs": {
|
|
485
|
+
"tags": [],
|
|
486
|
+
"text": "Emitted when the value has changed."
|
|
487
|
+
},
|
|
488
|
+
"complexType": {
|
|
489
|
+
"original": "PickerColumnChangeEventDetail",
|
|
490
|
+
"resolved": "PickerColumnChangeEventDetail",
|
|
491
|
+
"references": {
|
|
492
|
+
"PickerColumnChangeEventDetail": {
|
|
493
|
+
"location": "import",
|
|
494
|
+
"path": "./picker-column-interfaces",
|
|
495
|
+
"id": "src/components/picker-column/picker-column-interfaces.ts::PickerColumnChangeEventDetail"
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}];
|
|
500
|
+
}
|
|
501
|
+
static get methods() {
|
|
502
|
+
return {
|
|
503
|
+
"scrollActiveItemIntoView": {
|
|
504
|
+
"complexType": {
|
|
505
|
+
"signature": "(smooth?: boolean) => Promise<void>",
|
|
506
|
+
"parameters": [{
|
|
507
|
+
"name": "smooth",
|
|
508
|
+
"type": "boolean",
|
|
509
|
+
"docs": ""
|
|
510
|
+
}],
|
|
511
|
+
"references": {
|
|
512
|
+
"Promise": {
|
|
513
|
+
"location": "global",
|
|
514
|
+
"id": "global::Promise"
|
|
515
|
+
}
|
|
516
|
+
},
|
|
517
|
+
"return": "Promise<void>"
|
|
518
|
+
},
|
|
519
|
+
"docs": {
|
|
520
|
+
"text": "",
|
|
389
521
|
"tags": [{
|
|
390
522
|
"name": "internal",
|
|
391
523
|
"text": undefined
|
|
524
|
+
}]
|
|
525
|
+
}
|
|
526
|
+
},
|
|
527
|
+
"setValue": {
|
|
528
|
+
"complexType": {
|
|
529
|
+
"signature": "(value: PickerColumnValue) => Promise<void>",
|
|
530
|
+
"parameters": [{
|
|
531
|
+
"name": "value",
|
|
532
|
+
"type": "string | number | undefined",
|
|
533
|
+
"docs": ""
|
|
392
534
|
}],
|
|
393
|
-
"
|
|
535
|
+
"references": {
|
|
536
|
+
"Promise": {
|
|
537
|
+
"location": "global",
|
|
538
|
+
"id": "global::Promise"
|
|
539
|
+
},
|
|
540
|
+
"PickerColumnValue": {
|
|
541
|
+
"location": "import",
|
|
542
|
+
"path": "./picker-column-interfaces",
|
|
543
|
+
"id": "src/components/picker-column/picker-column-interfaces.ts::PickerColumnValue"
|
|
544
|
+
}
|
|
545
|
+
},
|
|
546
|
+
"return": "Promise<void>"
|
|
394
547
|
},
|
|
548
|
+
"docs": {
|
|
549
|
+
"text": "Sets the value prop and fires the ionChange event.\nThis is used when we need to fire ionChange from\nuser-generated events that cannot be caught with normal\ninput/change event listeners.",
|
|
550
|
+
"tags": [{
|
|
551
|
+
"name": "internal",
|
|
552
|
+
"text": undefined
|
|
553
|
+
}]
|
|
554
|
+
}
|
|
555
|
+
},
|
|
556
|
+
"setFocus": {
|
|
395
557
|
"complexType": {
|
|
396
|
-
"
|
|
397
|
-
"
|
|
558
|
+
"signature": "() => Promise<void>",
|
|
559
|
+
"parameters": [],
|
|
398
560
|
"references": {
|
|
399
|
-
"
|
|
400
|
-
"location": "
|
|
401
|
-
"
|
|
402
|
-
"id": "src/components/picker/picker-interface.ts::PickerColumn"
|
|
561
|
+
"Promise": {
|
|
562
|
+
"location": "global",
|
|
563
|
+
"id": "global::Promise"
|
|
403
564
|
}
|
|
404
|
-
}
|
|
565
|
+
},
|
|
566
|
+
"return": "Promise<void>"
|
|
567
|
+
},
|
|
568
|
+
"docs": {
|
|
569
|
+
"text": "Sets focus on the scrollable container within the picker column.\nUse this method instead of the global `pickerColumn.focus()`.",
|
|
570
|
+
"tags": []
|
|
405
571
|
}
|
|
406
|
-
}
|
|
572
|
+
}
|
|
573
|
+
};
|
|
407
574
|
}
|
|
408
575
|
static get elementRef() { return "el"; }
|
|
409
576
|
static get watchers() {
|
|
410
577
|
return [{
|
|
411
|
-
"propName": "
|
|
412
|
-
"methodName": "
|
|
578
|
+
"propName": "value",
|
|
579
|
+
"methodName": "valueChange"
|
|
413
580
|
}];
|
|
414
581
|
}
|
|
415
582
|
}
|
|
416
|
-
const
|
|
417
|
-
const DECELERATION_FRICTION = 0.97;
|
|
418
|
-
const MAX_PICKER_SPEED = 90;
|
|
419
|
-
const TRANSITION_DURATION = 150;
|
|
583
|
+
const PICKER_ITEM_ACTIVE_CLASS = 'option-active';
|