@ionic/core 7.5.8-dev.11701806358.1ca1b519 → 7.5.8-dev.11701876182.1e71e7a0
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/animation.js +12 -11
- package/components/backdrop.js +12 -0
- package/components/checkbox.js +5 -3
- package/components/data.js +1 -1
- package/components/gesture-controller.js +1 -1
- package/components/index4.js +10 -12
- package/components/index5.js +0 -22
- package/components/input-shims.js +12 -7
- package/components/input.utils.js +3 -2
- package/components/ion-content.js +1 -1
- package/components/ion-datetime.js +64 -40
- package/components/ion-infinite-scroll.js +11 -3
- package/components/ion-input.js +31 -8
- package/components/ion-modal.js +2 -2
- package/components/ion-picker-column-internal.d.ts +11 -0
- package/components/ion-picker-column-internal.js +9 -0
- package/components/ion-picker-column.js +2 -2
- package/components/{ion-picker-legacy.d.ts → ion-picker-internal.d.ts} +4 -4
- package/components/ion-picker-internal.js +9 -0
- package/components/ion-picker.js +309 -1
- package/components/ion-range.js +5 -3
- package/components/ion-select.js +44 -29
- package/components/ion-skeleton-text.js +14 -1
- package/components/ion-textarea.js +30 -7
- package/components/ion-toast.js +419 -74
- package/components/ion-toggle.js +5 -3
- package/components/item.js +2 -2
- package/components/label.js +2 -2
- package/components/overlays.js +6 -12
- package/components/picker-column-internal.js +390 -0
- package/components/picker-column.js +317 -363
- package/components/{picker.js → picker-internal.js} +16 -16
- package/components/radio-group.js +2 -0
- package/components/radio.js +45 -5
- package/dist/cjs/{animation-cc40e39c.js → animation-9b401d39.js} +13 -12
- package/dist/cjs/{button-active-9d7e0640.js → button-active-a5185907.js} +2 -2
- package/dist/cjs/{capacitor-46980811.js → capacitor-c04564bf.js} +1 -1
- package/dist/cjs/compare-with-utils-df1001d7.js +44 -0
- package/dist/cjs/{data-e7526b58.js → data-36b9094e.js} +1 -1
- package/dist/cjs/{gesture-controller-9436f482.js → gesture-controller-c40c045a.js} +0 -1
- package/dist/cjs/{haptic-216df36c.js → haptic-b882e0bb.js} +1 -1
- package/dist/cjs/{index-8c1e77d6.js → index-b4f986cd.js} +1 -1
- package/dist/cjs/index-c8d52405.js +10 -0
- package/dist/cjs/{index-5cbb20f9.js → index-ce101dc9.js} +11 -13
- package/dist/cjs/{index-ee07ed59.js → index-d1b59ffa.js} +1 -1
- package/dist/cjs/{index-d4c2e02c.js → index-f8f13389.js} +2 -2
- package/dist/cjs/index.cjs.js +10 -10
- package/dist/cjs/{input-shims-87102b6a.js → input-shims-a23bb0f4.js} +15 -10
- package/dist/cjs/{input.utils-2a11c1fe.js → input.utils-3d0166a2.js} +4 -3
- package/dist/cjs/ion-action-sheet.cjs.entry.js +8 -8
- package/dist/cjs/ion-alert.cjs.entry.js +8 -8
- package/dist/cjs/ion-app_8.cjs.entry.js +10 -10
- package/dist/cjs/ion-backdrop.cjs.entry.js +12 -0
- package/dist/cjs/ion-checkbox.cjs.entry.js +5 -3
- package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
- package/dist/cjs/ion-datetime_3.cjs.entry.js +60 -40
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +11 -3
- package/dist/cjs/ion-input.cjs.entry.js +34 -11
- package/dist/cjs/ion-item-option_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-item_8.cjs.entry.js +17 -4
- package/dist/cjs/ion-loading.cjs.entry.js +3 -4
- package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
- package/dist/cjs/ion-modal.cjs.entry.js +10 -10
- package/dist/cjs/ion-nav_2.cjs.entry.js +2 -2
- package/dist/cjs/{ion-picker-column.cjs.entry.js → ion-picker-column-internal.cjs.entry.js} +74 -107
- package/dist/cjs/{ion-picker.cjs.entry.js → ion-picker-internal.cjs.entry.js} +13 -13
- package/dist/cjs/ion-popover.cjs.entry.js +4 -5
- package/dist/cjs/ion-radio_2.cjs.entry.js +9 -4
- package/dist/cjs/ion-range.cjs.entry.js +6 -4
- package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -7
- package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-segment_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-select_3.cjs.entry.js +51 -36
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-textarea.cjs.entry.js +33 -10
- package/dist/cjs/ion-toast.cjs.entry.js +434 -93
- package/dist/cjs/ion-toggle.cjs.entry.js +9 -7
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/{ios.transition-a4ffb5a2.js → ios.transition-6787b799.js} +3 -3
- package/dist/cjs/{keyboard-9390928c.js → keyboard-0272231f.js} +1 -1
- package/dist/cjs/{keyboard-7d621ee9.js → keyboard-af1bb365.js} +3 -3
- package/dist/cjs/{keyboard-controller-2158b478.js → keyboard-controller-c05e747a.js} +2 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{md.transition-292abe1c.js → md.transition-e033d20a.js} +3 -3
- package/dist/cjs/{notch-controller-1dce508a.js → notch-controller-9735e7ac.js} +1 -1
- package/dist/cjs/{overlays-e8e05b0e.js → overlays-27a6fb16.js} +7 -12
- package/dist/cjs/{swipe-back-b8f2330b.js → swipe-back-2a858bbd.js} +2 -2
- package/dist/collection/collection-manifest.json +6 -7
- package/dist/collection/components/backdrop/backdrop.js +12 -0
- package/dist/collection/components/checkbox/checkbox.ios.css +0 -6
- package/dist/collection/components/checkbox/checkbox.js +4 -1
- package/dist/collection/components/checkbox/checkbox.md.css +0 -6
- package/dist/collection/components/checkbox/test/checkbox.spec.js +14 -0
- package/dist/collection/components/content/content.css +4 -0
- package/dist/collection/components/datetime/datetime.ios.css +38 -83
- package/dist/collection/components/datetime/datetime.js +36 -24
- package/dist/collection/components/datetime/datetime.md.css +38 -88
- package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +1 -1
- package/dist/collection/components/datetime/test/a11y/datetime.spec.js +9 -6
- package/dist/collection/components/datetime/test/basic/datetime.e2e.js +0 -10
- 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 +41 -43
- 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 +12 -15
- package/dist/collection/components/datetime/utils/data.js +1 -1
- package/dist/collection/components/infinite-scroll/infinite-scroll.js +11 -3
- package/dist/collection/components/infinite-scroll/test/small-dom-update/infinite-scroll.e2e.js +31 -0
- package/dist/collection/components/input/input.ios.css +10 -3
- package/dist/collection/components/input/input.js +31 -6
- package/dist/collection/components/input/input.md.css +13 -12
- package/dist/collection/components/input/test/slot/input.e2e.js +51 -0
- package/dist/collection/components/item/item.ios.css +41 -3
- package/dist/collection/components/item/item.md.css +41 -3
- package/dist/collection/components/item/test/basic/item.e2e.js +1 -1
- package/dist/collection/components/item/test/disabled/item.e2e.js +0 -1
- package/dist/collection/components/label/label.ios.css +14 -3
- package/dist/collection/components/label/label.md.css +14 -3
- package/dist/collection/components/modal/gestures/swipe-to-close.js +2 -1
- package/dist/collection/components/note/test/a11y/note.e2e.js +43 -0
- package/dist/collection/components/picker/picker.ios.css +205 -100
- package/dist/collection/components/picker/picker.js +743 -461
- package/dist/collection/components/picker/picker.md.css +194 -98
- package/dist/collection/components/picker/test/basic/picker.e2e.js +13 -99
- package/dist/collection/components/{picker-legacy → picker}/test/is-open/picker.e2e.js +4 -4
- package/dist/collection/components/{picker-legacy → picker}/test/picker-id.spec.js +5 -5
- package/dist/collection/components/{picker-legacy → picker}/test/trigger/picker.e2e.js +1 -1
- package/dist/collection/components/picker-column/picker-column.ios.css +160 -120
- package/dist/collection/components/picker-column/picker-column.js +329 -514
- package/dist/collection/components/picker-column/picker-column.md.css +107 -134
- package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-aria.spec.js +3 -3
- package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-dynamic.spec.js +2 -2
- package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column.spec.js +2 -2
- package/dist/collection/components/{picker-legacy-column → picker-column}/test/standalone/picker-column.e2e.js +3 -3
- package/dist/collection/components/{picker-column-option/picker-column-option.md.css → picker-column-internal/picker-column-internal.ios.css} +53 -6
- package/dist/collection/components/picker-column-internal/picker-column-internal.js +565 -0
- package/dist/collection/components/{picker-legacy-column/picker-column.md.css → picker-column-internal/picker-column-internal.md.css} +63 -113
- package/dist/collection/components/{picker-column/test/basic/picker-column.e2e.js → picker-column-internal/test/basic/picker-column-internal.e2e.js} +8 -8
- package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +162 -0
- package/dist/collection/components/{picker-legacy/picker.md.css → picker-internal/picker-internal.ios.css} +100 -192
- package/dist/collection/components/picker-internal/picker-internal.js +544 -0
- package/dist/collection/components/{picker-legacy-column/picker-column.ios.css → picker-internal/picker-internal.md.css} +101 -98
- package/dist/collection/components/{picker/test/a11y/picker.e2e.js → picker-internal/test/a11y/picker-internal.e2e.js} +2 -2
- package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +118 -0
- package/dist/collection/components/{picker/test/keyboard-entry/picker.e2e.js → picker-internal/test/keyboard-entry/picker-internal.e2e.js} +22 -23
- package/dist/collection/components/radio/radio.ios.css +0 -6
- package/dist/collection/components/radio/radio.js +7 -3
- package/dist/collection/components/radio/radio.md.css +0 -6
- package/dist/collection/components/radio/test/radio.spec.js +14 -0
- package/dist/collection/components/radio-group/radio-group.js +24 -0
- package/dist/collection/components/radio-group/test/radio-group.spec.js +69 -0
- package/dist/collection/components/range/range.ios.css +0 -6
- package/dist/collection/components/range/range.js +4 -1
- package/dist/collection/components/range/range.md.css +0 -6
- package/dist/collection/components/range/test/range.spec.js +16 -0
- package/dist/collection/components/select/select.ios.css +60 -7
- package/dist/collection/components/select/select.js +45 -28
- package/dist/collection/components/select/select.md.css +63 -19
- package/dist/collection/components/select/test/item/select.e2e.js +15 -0
- package/dist/collection/components/select/test/label/select.e2e.js +1 -1
- package/dist/collection/components/select/test/legacy/wrapping/select.e2e.js +1 -1
- package/dist/collection/components/select/test/slot/select.e2e.js +67 -0
- package/dist/collection/components/skeleton-text/skeleton-text.js +39 -0
- package/dist/collection/components/textarea/test/slot/textarea.e2e.js +51 -0
- package/dist/collection/components/textarea/textarea.ios.css +37 -5
- package/dist/collection/components/textarea/textarea.js +30 -5
- package/dist/collection/components/textarea/textarea.md.css +47 -14
- package/dist/collection/components/toast/animations/ios.enter.js +2 -1
- package/dist/collection/components/toast/animations/md.enter.js +4 -3
- package/dist/collection/components/toast/animations/utils.js +20 -14
- package/dist/collection/components/toast/gestures/swipe-to-dismiss.js +267 -0
- package/dist/collection/components/toast/test/swipe-gesture/toast.e2e.js +84 -0
- package/dist/collection/components/toast/test/toast-config.spec.js +25 -0
- package/dist/collection/components/toast/test/toast.spec.js +80 -0
- package/dist/collection/components/toast/toast.ios.css +10 -10
- package/dist/collection/components/toast/toast.js +104 -1
- package/dist/collection/components/toast/toast.md.css +10 -0
- package/dist/collection/components/toggle/test/toggle.spec.js +12 -0
- package/dist/collection/components/toggle/toggle.ios.css +0 -6
- package/dist/collection/components/toggle/toggle.js +4 -1
- package/dist/collection/components/toggle/toggle.md.css +0 -6
- package/dist/collection/utils/animation/animation.js +12 -11
- package/dist/collection/utils/animation/test/animation.spec.js +16 -0
- package/dist/collection/utils/browser/index.js +0 -22
- package/dist/collection/utils/forms/compare-with-utils.js +39 -0
- package/dist/collection/utils/forms/index.js +1 -0
- package/dist/collection/utils/gesture/gesture-controller.js +1 -1
- package/dist/collection/utils/input-shims/input-shims.js +12 -6
- package/dist/collection/utils/menu-controller/index.js +10 -12
- package/dist/collection/utils/overlays.js +5 -11
- package/dist/collection/utils/slot-mutation-controller.js +3 -2
- package/dist/docs.json +265 -561
- package/dist/esm/{animation-fb0e0f6f.js → animation-dde8cc0d.js} +13 -12
- package/dist/esm/{button-active-ed9d848c.js → button-active-c6ee4f50.js} +2 -2
- package/dist/esm/{capacitor-b0e5fe83.js → capacitor-59395cbd.js} +1 -1
- package/dist/esm/compare-with-utils-a96ff2ea.js +41 -0
- package/dist/esm/{data-4b9508c9.js → data-f5c75b4e.js} +1 -1
- package/dist/esm/{gesture-controller-314a54f6.js → gesture-controller-1bf57181.js} +1 -1
- package/dist/esm/{haptic-152c4172.js → haptic-554688a5.js} +1 -1
- package/dist/esm/{index-80492ed3.js → index-0c12c22b.js} +11 -13
- package/dist/esm/{index-d8817fb0.js → index-1932b201.js} +2 -2
- package/dist/esm/{index-39782642.js → index-2cf77112.js} +2 -2
- package/dist/esm/{index-ba9976bb.js → index-82eeb47f.js} +1 -1
- package/dist/esm/index-a5d50daf.js +7 -0
- package/dist/esm/index.js +10 -10
- package/dist/esm/{input-shims-0a2e541d.js → input-shims-6539ce13.js} +14 -9
- package/dist/esm/{input.utils-2846d430.js → input.utils-a5a2d164.js} +4 -3
- package/dist/esm/ion-action-sheet.entry.js +8 -8
- package/dist/esm/ion-alert.entry.js +8 -8
- package/dist/esm/ion-app_8.entry.js +10 -10
- package/dist/esm/ion-backdrop.entry.js +12 -0
- package/dist/esm/ion-checkbox.entry.js +5 -3
- package/dist/esm/ion-datetime-button.entry.js +1 -1
- package/dist/esm/ion-datetime_3.entry.js +59 -39
- package/dist/esm/ion-infinite-scroll_2.entry.js +11 -3
- package/dist/esm/ion-input.entry.js +34 -11
- package/dist/esm/ion-item-option_3.entry.js +1 -1
- package/dist/esm/ion-item_8.entry.js +17 -4
- package/dist/esm/ion-loading.entry.js +3 -4
- package/dist/esm/ion-menu_3.entry.js +7 -7
- package/dist/esm/ion-modal.entry.js +10 -10
- package/dist/esm/ion-nav_2.entry.js +2 -2
- package/dist/esm/{ion-picker-column.entry.js → ion-picker-column-internal.entry.js} +74 -107
- package/dist/esm/{ion-picker.entry.js → ion-picker-internal.entry.js} +13 -13
- package/dist/esm/ion-popover.entry.js +4 -5
- package/dist/esm/ion-radio_2.entry.js +9 -4
- package/dist/esm/ion-range.entry.js +6 -4
- package/dist/esm/ion-refresher_2.entry.js +7 -7
- package/dist/esm/ion-reorder_2.entry.js +4 -4
- package/dist/esm/ion-segment_2.entry.js +1 -1
- package/dist/esm/ion-select_3.entry.js +47 -32
- package/dist/esm/ion-tab-bar_2.entry.js +4 -4
- package/dist/esm/ion-textarea.entry.js +33 -10
- package/dist/esm/ion-toast.entry.js +417 -76
- package/dist/esm/ion-toggle.entry.js +9 -7
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/{ios.transition-fd16bec1.js → ios.transition-802a84a6.js} +3 -3
- package/dist/esm/{keyboard-c402e885.js → keyboard-52278bd7.js} +3 -3
- package/dist/esm/{keyboard-dbb05fb9.js → keyboard-73175e24.js} +1 -1
- package/dist/esm/{keyboard-controller-5d90929a.js → keyboard-controller-ec5c2bfa.js} +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{md.transition-94ac93e1.js → md.transition-43c2874d.js} +3 -3
- package/dist/esm/{notch-controller-d09b6aca.js → notch-controller-fea7f9c5.js} +1 -1
- package/dist/esm/{overlays-fbc5cab5.js → overlays-32ef481d.js} +7 -13
- package/dist/esm/{swipe-back-a8ca7f93.js → swipe-back-a6f386fc.js} +2 -2
- package/dist/esm-es5/{animation-fb0e0f6f.js → animation-dde8cc0d.js} +1 -1
- package/dist/esm-es5/{button-active-ed9d848c.js → button-active-c6ee4f50.js} +1 -1
- package/dist/esm-es5/{capacitor-b0e5fe83.js → capacitor-59395cbd.js} +1 -1
- package/dist/esm-es5/compare-with-utils-a96ff2ea.js +4 -0
- package/dist/esm-es5/{gesture-controller-314a54f6.js → gesture-controller-1bf57181.js} +1 -1
- package/dist/esm-es5/{haptic-152c4172.js → haptic-554688a5.js} +1 -1
- package/dist/esm-es5/index-0c12c22b.js +4 -0
- package/dist/esm-es5/{index-d8817fb0.js → index-1932b201.js} +1 -1
- package/dist/esm-es5/{index-39782642.js → index-2cf77112.js} +1 -1
- package/dist/esm-es5/{index-ba9976bb.js → index-82eeb47f.js} +1 -1
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/input-shims-6539ce13.js +4 -0
- package/dist/esm-es5/input.utils-a5a2d164.js +4 -0
- 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-backdrop.entry.js +1 -1
- package/dist/esm-es5/ion-checkbox.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-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-internal.entry.js +4 -0
- package/dist/esm-es5/ion-picker-internal.entry.js +4 -0
- package/dist/esm-es5/ion-popover.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-segment_2.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.entry.js +1 -1
- package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
- package/dist/esm-es5/ion-textarea.entry.js +1 -1
- package/dist/esm-es5/ion-toast.entry.js +1 -1
- package/dist/esm-es5/ion-toggle.entry.js +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/{ios.transition-fd16bec1.js → ios.transition-802a84a6.js} +1 -1
- package/dist/esm-es5/{keyboard-c402e885.js → keyboard-52278bd7.js} +1 -1
- package/dist/esm-es5/{keyboard-dbb05fb9.js → keyboard-73175e24.js} +1 -1
- package/dist/esm-es5/{keyboard-controller-5d90929a.js → keyboard-controller-ec5c2bfa.js} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/md.transition-43c2874d.js +4 -0
- package/dist/esm-es5/{notch-controller-d09b6aca.js → notch-controller-fea7f9c5.js} +1 -1
- package/dist/esm-es5/overlays-32ef481d.js +4 -0
- package/dist/esm-es5/swipe-back-a6f386fc.js +4 -0
- package/dist/html.html-data.json +15 -153
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-01d14eba.system.entry.js +4 -0
- package/dist/ionic/p-042e6f4b.entry.js +4 -0
- package/dist/ionic/p-05d83227.system.entry.js +4 -0
- package/dist/ionic/{p-32e19bee.system.js → p-0bd51c34.system.js} +1 -1
- package/dist/ionic/p-16756e94.system.entry.js +4 -0
- package/dist/ionic/p-1b19c04b.entry.js +4 -0
- package/dist/ionic/{p-95c26010.system.js → p-1cca10d6.system.js} +1 -1
- package/dist/ionic/p-1e4371bd.js +4 -0
- package/dist/ionic/{p-21c3515a.entry.js → p-251666e2.entry.js} +1 -1
- package/dist/ionic/{p-4e8e09e1.js → p-27281edd.js} +1 -1
- package/dist/ionic/p-28249b10.system.entry.js +4 -0
- package/dist/ionic/p-28a2c2a2.entry.js +4 -0
- package/dist/ionic/p-29d03b3a.js +4 -0
- package/dist/ionic/p-2b7827c7.js +4 -0
- package/dist/ionic/p-2d3b9fa3.system.entry.js +4 -0
- package/dist/ionic/p-2d539df1.entry.js +4 -0
- package/dist/ionic/{p-9c229210.system.entry.js → p-3137c025.system.entry.js} +2 -2
- package/dist/ionic/{p-3e1e14d9.system.js → p-31b2326e.system.js} +1 -1
- package/dist/ionic/{p-30029cc2.system.js → p-31fcb233.system.js} +1 -1
- package/dist/ionic/{p-1d624e03.system.js → p-33a37fad.system.js} +1 -1
- package/dist/ionic/p-35ce400e.system.js +4 -0
- package/dist/ionic/p-36d187af.js +4 -0
- package/dist/ionic/p-376a6063.js +4 -0
- package/dist/ionic/p-38f2c6bb.system.js +4 -0
- package/dist/ionic/p-39c31982.system.entry.js +4 -0
- package/dist/ionic/{p-75445583.js → p-3a75d7fd.js} +1 -1
- package/dist/ionic/{p-1fc72959.entry.js → p-3dd98a73.entry.js} +1 -1
- package/dist/ionic/p-3e6b47e8.system.entry.js +4 -0
- package/dist/ionic/p-3f5179b5.entry.js +4 -0
- package/dist/ionic/p-40f68333.system.js +4 -0
- package/dist/ionic/{p-643a8fae.js → p-42f189f4.js} +1 -1
- package/dist/ionic/p-438e1b8a.entry.js +4 -0
- package/dist/ionic/{p-b752714f.system.entry.js → p-46d400b4.system.entry.js} +1 -1
- package/dist/ionic/p-47b6ba5b.js +4 -0
- package/dist/ionic/{p-5d42b6b4.entry.js → p-4d67d27a.entry.js} +1 -1
- package/dist/ionic/{p-535d2a67.entry.js → p-4f3ae45a.entry.js} +1 -1
- package/dist/ionic/p-517a9885.system.entry.js +4 -0
- package/dist/ionic/p-53ec4f1c.system.js +4 -0
- package/dist/ionic/p-5e4eec2e.entry.js +4 -0
- package/dist/ionic/{p-57477107.system.js → p-5e745192.system.js} +1 -1
- package/dist/ionic/{p-a9a80f5b.entry.js → p-5eda1d7d.entry.js} +1 -1
- package/dist/ionic/{p-e8e86f69.system.entry.js → p-6577aea9.system.entry.js} +1 -1
- package/dist/ionic/p-6a6477b2.js +4 -0
- package/dist/ionic/{p-4890093d.js → p-6de472cb.js} +1 -1
- package/dist/ionic/{p-b4d31b30.system.entry.js → p-6de62649.system.entry.js} +1 -1
- package/dist/ionic/p-72f6ff89.js +4 -0
- package/dist/ionic/p-765f4dde.entry.js +4 -0
- package/dist/ionic/{p-3f6270b3.entry.js → p-78aadecb.entry.js} +1 -1
- package/dist/ionic/p-7d92bf15.system.entry.js +4 -0
- package/dist/ionic/p-7ee0f3f2.entry.js +4 -0
- package/dist/ionic/p-80fa068e.entry.js +4 -0
- package/dist/ionic/p-8314281e.system.js +4 -0
- package/dist/ionic/p-88d5fbd3.js +4 -0
- package/dist/ionic/{p-4911a5d6.entry.js → p-88fde0e0.entry.js} +1 -1
- package/dist/ionic/{p-0e4f2e17.system.js → p-8985cdb6.system.js} +1 -1
- package/dist/ionic/{p-96dbbac1.system.entry.js → p-8acae6b0.system.entry.js} +1 -1
- package/dist/ionic/p-8d69a624.entry.js +4 -0
- package/dist/ionic/p-8de17614.system.entry.js +4 -0
- package/dist/ionic/p-908475e7.system.entry.js +4 -0
- package/dist/ionic/p-91d33c4a.js +4 -0
- package/dist/ionic/p-979d4f5c.system.js +4 -0
- package/dist/ionic/p-9b7f0b0f.entry.js +4 -0
- package/dist/ionic/p-9e447eb1.system.js +4 -0
- package/dist/ionic/{p-f910cc73.system.entry.js → p-9eec42cc.system.entry.js} +1 -1
- package/dist/ionic/p-9f6ee2c0.system.entry.js +4 -0
- package/dist/ionic/{p-77965464.system.entry.js → p-a0bb7b92.system.entry.js} +1 -1
- package/dist/ionic/p-a0d7bb5e.system.js +4 -0
- package/dist/ionic/{p-6d72fb44.entry.js → p-a1987850.entry.js} +1 -1
- package/dist/ionic/p-a3277a67.entry.js +4 -0
- package/dist/ionic/{p-6b7c55cd.entry.js → p-a9978d08.entry.js} +1 -1
- package/dist/ionic/{p-fbf3a689.system.entry.js → p-ada96dd0.system.entry.js} +1 -1
- package/dist/ionic/p-afd6ca9d.entry.js +4 -0
- package/dist/ionic/p-b56d0866.system.entry.js +4 -0
- package/dist/ionic/p-b6f9d32a.entry.js +4 -0
- package/dist/ionic/{p-9b97df10.js → p-bb3615f7.js} +1 -1
- package/dist/ionic/p-c61cc894.js +4 -0
- package/dist/ionic/{p-20d469d0.system.js → p-c7c8429a.system.js} +1 -1
- package/dist/ionic/{p-304383f9.system.js → p-cabad15b.system.js} +1 -1
- package/dist/ionic/p-cce9f61a.system.entry.js +4 -0
- package/dist/ionic/{p-31158892.js → p-cdbeaadc.js} +1 -1
- package/dist/ionic/p-d032f825.system.entry.js +4 -0
- package/dist/ionic/p-d51674c5.system.js +4 -0
- package/dist/ionic/{p-b133e9b4.entry.js → p-ddb30596.entry.js} +1 -1
- package/dist/ionic/{p-98d82c73.system.js → p-ddbb2d5b.system.js} +1 -1
- package/dist/ionic/p-de6f8b28.system.js +4 -0
- package/dist/ionic/p-de756e5c.js +4 -0
- package/dist/ionic/p-dee7c1d0.system.entry.js +4 -0
- package/dist/ionic/p-dfd9432a.entry.js +4 -0
- package/dist/ionic/{p-54dfc9b5.system.js → p-e24ce1e5.system.js} +1 -1
- package/dist/ionic/p-e3584231.system.js +1 -1
- package/dist/ionic/{p-6fd64e7c.system.entry.js → p-e6d68e02.system.entry.js} +1 -1
- package/dist/ionic/p-e94c392d.entry.js +4 -0
- package/dist/ionic/p-f0445d82.system.entry.js +4 -0
- package/dist/ionic/{p-8ededb41.js → p-f5d2dc9b.js} +1 -1
- package/dist/ionic/p-f656e032.system.entry.js +4 -0
- package/dist/ionic/{p-76d3765d.js → p-f70970cf.js} +1 -1
- package/dist/ionic/{p-c18de88a.system.entry.js → p-fba0a6e7.system.entry.js} +1 -1
- package/dist/ionic/p-feae5133.entry.js +4 -0
- package/dist/types/components/backdrop/backdrop.d.ts +3 -0
- package/dist/types/components/checkbox/checkbox.d.ts +1 -0
- package/dist/types/components/datetime/datetime.d.ts +1 -0
- package/dist/types/components/datetime/utils/data.d.ts +2 -2
- package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +7 -0
- package/dist/types/components/input/input.d.ts +2 -0
- package/dist/types/components/menu/menu.d.ts +1 -1
- package/dist/types/components/picker/picker.d.ts +131 -74
- package/dist/types/components/picker-column/picker-column.d.ts +39 -105
- package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +102 -0
- package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +8 -0
- package/dist/types/components/picker-internal/picker-internal.d.ts +102 -0
- package/dist/types/components/radio/radio.d.ts +1 -0
- package/dist/types/components/radio-group/radio-group-interface.d.ts +1 -0
- package/dist/types/components/radio-group/radio-group.d.ts +8 -1
- package/dist/types/components/range/range.d.ts +1 -0
- package/dist/types/components/router/router.d.ts +2 -1
- package/dist/types/components/select/select.d.ts +6 -1
- package/dist/types/components/skeleton-text/skeleton-text.d.ts +9 -1
- package/dist/types/components/textarea/textarea.d.ts +2 -0
- package/dist/types/components/toast/animations/utils.d.ts +15 -4
- package/dist/types/components/toast/gestures/swipe-to-dismiss.d.ts +9 -0
- package/dist/types/components/toast/toast-interface.d.ts +2 -0
- package/dist/types/components/toast/toast.d.ts +28 -1
- package/dist/types/components/toggle/toggle.d.ts +1 -0
- package/dist/types/components.d.ts +159 -169
- package/dist/types/interface.d.ts +2 -6
- package/dist/types/jest.d.ts +5 -0
- package/dist/types/utils/animation/animation-interface.d.ts +4 -4
- package/dist/types/utils/browser/index.d.ts +11 -2
- package/dist/types/utils/config.d.ts +2 -2
- package/dist/types/utils/forms/compare-with-utils.d.ts +18 -0
- package/dist/types/utils/forms/index.d.ts +1 -0
- package/dist/types/utils/gesture/gesture-controller.d.ts +0 -1
- package/dist/types/utils/hardware-back-button.d.ts +4 -0
- package/dist/types/utils/overlays.d.ts +3 -5
- package/dist/types/utils/slot-mutation-controller.d.ts +2 -2
- package/hydrate/index.js +1855 -1509
- package/package.json +1 -1
- package/components/ion-picker-column-option.d.ts +0 -11
- package/components/ion-picker-column-option.js +0 -9
- package/components/ion-picker-legacy-column.d.ts +0 -11
- package/components/ion-picker-legacy-column.js +0 -9
- package/components/ion-picker-legacy.js +0 -309
- package/components/picker-column-option.js +0 -122
- package/components/picker-column2.js +0 -379
- package/dist/cjs/index-306a7476.js +0 -32
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +0 -104
- package/dist/collection/components/item/test/text/item.e2e.js +0 -14
- package/dist/collection/components/picker-column/test/disabled/picker-column.e2e.js +0 -113
- package/dist/collection/components/picker-column/test/slots/picker-column.e2e.js +0 -39
- package/dist/collection/components/picker-column-option/picker-column-option.ios.css +0 -87
- package/dist/collection/components/picker-column-option/picker-column-option.js +0 -173
- package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +0 -18
- package/dist/collection/components/picker-column-option/test/basic/picker-column-option.e2e.js +0 -37
- package/dist/collection/components/picker-legacy/picker.ios.css +0 -367
- package/dist/collection/components/picker-legacy/picker.js +0 -817
- package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +0 -25
- package/dist/collection/components/picker-legacy-column/picker-column.js +0 -419
- package/dist/collection/utils/test/overlays/overlays-scroll-blocking.spec.js +0 -65
- package/dist/esm/index-7a14ecec.js +0 -29
- package/dist/esm/ion-picker-column-option.entry.js +0 -100
- package/dist/esm-es5/index-80492ed3.js +0 -4
- package/dist/esm-es5/input-shims-0a2e541d.js +0 -4
- package/dist/esm-es5/input.utils-2846d430.js +0 -4
- package/dist/esm-es5/ion-picker-column-option.entry.js +0 -4
- package/dist/esm-es5/ion-picker-column.entry.js +0 -4
- package/dist/esm-es5/ion-picker.entry.js +0 -4
- package/dist/esm-es5/md.transition-94ac93e1.js +0 -4
- package/dist/esm-es5/overlays-fbc5cab5.js +0 -4
- package/dist/esm-es5/swipe-back-a8ca7f93.js +0 -4
- package/dist/ionic/p-22e5af95.entry.js +0 -4
- package/dist/ionic/p-232d1f22.entry.js +0 -4
- package/dist/ionic/p-23672c82.system.entry.js +0 -4
- package/dist/ionic/p-26798a7b.system.entry.js +0 -4
- package/dist/ionic/p-27bcbbc7.system.entry.js +0 -4
- package/dist/ionic/p-2ab4e925.system.entry.js +0 -4
- package/dist/ionic/p-2d5aeccc.js +0 -4
- package/dist/ionic/p-2d600c25.system.js +0 -4
- package/dist/ionic/p-308e1341.js +0 -4
- package/dist/ionic/p-32303650.system.entry.js +0 -4
- package/dist/ionic/p-34c39c48.entry.js +0 -4
- package/dist/ionic/p-3ba01a9c.system.entry.js +0 -4
- package/dist/ionic/p-3c58a71b.js +0 -4
- package/dist/ionic/p-3fd26bd6.system.entry.js +0 -4
- package/dist/ionic/p-3fe96156.system.js +0 -4
- package/dist/ionic/p-42ba3902.entry.js +0 -4
- package/dist/ionic/p-4a081ea9.entry.js +0 -4
- package/dist/ionic/p-4a31c99f.entry.js +0 -4
- package/dist/ionic/p-4a36430f.system.entry.js +0 -4
- package/dist/ionic/p-51abefb7.system.js +0 -4
- package/dist/ionic/p-563c41f0.system.entry.js +0 -4
- package/dist/ionic/p-5a68960f.entry.js +0 -4
- package/dist/ionic/p-6c37f051.js +0 -4
- package/dist/ionic/p-73190c5f.entry.js +0 -4
- package/dist/ionic/p-73aa7604.entry.js +0 -4
- package/dist/ionic/p-7b725280.entry.js +0 -4
- package/dist/ionic/p-8017aad2.system.entry.js +0 -4
- package/dist/ionic/p-83af3685.system.js +0 -4
- package/dist/ionic/p-846ee227.entry.js +0 -4
- package/dist/ionic/p-856c430d.js +0 -4
- package/dist/ionic/p-8c97cdc0.entry.js +0 -4
- package/dist/ionic/p-8fa6583d.system.js +0 -4
- package/dist/ionic/p-9282b16f.entry.js +0 -4
- package/dist/ionic/p-93000a81.system.entry.js +0 -4
- package/dist/ionic/p-990ffd0e.js +0 -4
- package/dist/ionic/p-9ba90516.system.entry.js +0 -4
- package/dist/ionic/p-a225bf0f.system.entry.js +0 -4
- package/dist/ionic/p-a60a1ce5.js +0 -4
- package/dist/ionic/p-a8baa23e.entry.js +0 -4
- package/dist/ionic/p-a98dc0c1.entry.js +0 -4
- package/dist/ionic/p-a9e3b5be.system.entry.js +0 -4
- package/dist/ionic/p-ab9456e9.system.entry.js +0 -4
- package/dist/ionic/p-afcf4620.entry.js +0 -4
- package/dist/ionic/p-c2910c78.entry.js +0 -4
- package/dist/ionic/p-c8f0a036.entry.js +0 -4
- package/dist/ionic/p-ca8938f4.js +0 -4
- package/dist/ionic/p-ca9d1792.system.entry.js +0 -4
- package/dist/ionic/p-cde52378.system.entry.js +0 -4
- package/dist/ionic/p-d43f1f3d.system.js +0 -4
- package/dist/ionic/p-d662d908.js +0 -4
- package/dist/ionic/p-d9695ad9.system.js +0 -4
- package/dist/ionic/p-da15f571.system.entry.js +0 -4
- package/dist/ionic/p-e4d90573.js +0 -4
- package/dist/ionic/p-f54c72b0.system.js +0 -4
- package/dist/ionic/p-f7a36cd0.system.js +0 -4
- package/dist/ionic/p-f967631d.js +0 -4
- package/dist/ionic/p-fe4dde76.entry.js +0 -4
- package/dist/ionic/p-ffd5dba4.system.entry.js +0 -4
- package/dist/types/components/picker/picker-interfaces.d.ts +0 -8
- package/dist/types/components/picker-column-option/picker-column-option.d.ts +0 -66
- package/dist/types/components/picker-legacy/picker.d.ts +0 -158
- package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
- /package/dist/collection/components/{picker-legacy → picker}/animations/ios.enter.js +0 -0
- /package/dist/collection/components/{picker-legacy → picker}/animations/ios.leave.js +0 -0
- /package/dist/collection/components/picker/{picker-interfaces.js → picker-interface.js} +0 -0
- /package/dist/collection/components/{picker-legacy-column → picker-column}/test/test.utils.js +0 -0
- /package/dist/collection/components/{picker-column/picker-column-interfaces.js → picker-column-internal/picker-column-internal-interfaces.js} +0 -0
- /package/dist/collection/components/{picker-legacy/picker-interface.js → picker-internal/picker-internal-interfaces.js} +0 -0
- /package/dist/esm-es5/{data-4b9508c9.js → data-f5c75b4e.js} +0 -0
- /package/dist/esm-es5/{index-7a14ecec.js → index-a5d50daf.js} +0 -0
- /package/dist/ionic/{p-368f5215.js → p-2aea8b1e.js} +0 -0
- /package/dist/ionic/{p-0e94957a.system.js → p-792919fd.system.js} +0 -0
- /package/dist/ionic/{p-b347cfd1.js → p-7b30edcc.js} +0 -0
- /package/dist/ionic/{p-f58981c2.system.js → p-82e3d633.system.js} +0 -0
- /package/dist/types/components/{picker-legacy → picker}/animations/ios.enter.d.ts +0 -0
- /package/dist/types/components/{picker-legacy → picker}/animations/ios.leave.d.ts +0 -0
- /package/dist/types/components/{picker-legacy → picker}/picker-interface.d.ts +0 -0
- /package/dist/types/components/{picker-legacy-column → picker-column}/test/test.utils.d.ts +0 -0
- /package/dist/types/components/{picker-column/picker-column-interfaces.d.ts → picker-column-internal/picker-column-internal-interfaces.d.ts} +0 -0
|
@@ -2,390 +2,345 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { Host, h } from "@stencil/core";
|
|
5
|
-
import {
|
|
6
|
-
import { getElementRoot, raf } from "../../utils/helpers";
|
|
5
|
+
import { clamp } from "../../utils/helpers";
|
|
7
6
|
import { hapticSelectionChanged, hapticSelectionEnd, hapticSelectionStart } from "../../utils/native/haptic";
|
|
8
|
-
import {
|
|
9
|
-
import { createColorClasses } from "../../utils/theme";
|
|
7
|
+
import { getClassMap } from "../../utils/theme";
|
|
10
8
|
import { getIonMode } from "../../global/ionic-global";
|
|
11
9
|
/**
|
|
12
|
-
* @
|
|
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.
|
|
10
|
+
* @internal
|
|
16
11
|
*/
|
|
17
|
-
|
|
18
|
-
// the per-mode styles were moved to ion-picker-column-option
|
|
19
|
-
export class PickerColumn {
|
|
12
|
+
export class PickerColumnCmp {
|
|
20
13
|
constructor() {
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
14
|
+
this.optHeight = 0;
|
|
15
|
+
this.rotateFactor = 0;
|
|
16
|
+
this.scaleFactor = 1;
|
|
17
|
+
this.velocity = 0;
|
|
18
|
+
this.y = 0;
|
|
19
|
+
this.noAnimate = true;
|
|
20
|
+
// `colDidChange` is a flag that gets set when the column is changed
|
|
21
|
+
// dynamically. When this flag is set, the column will refresh
|
|
22
|
+
// after the component re-renders to incorporate the new column data.
|
|
23
|
+
// This is necessary because `this.refresh` queries for the option elements,
|
|
24
|
+
// so it needs to wait for the latest elements to be available in the DOM.
|
|
25
|
+
// Ex: column is created with 3 options. User updates the column data
|
|
26
|
+
// to have 5 options. The column will still think it only has 3 options.
|
|
27
|
+
this.colDidChange = false;
|
|
28
|
+
this.col = undefined;
|
|
29
|
+
}
|
|
30
|
+
colChanged() {
|
|
31
|
+
this.colDidChange = true;
|
|
32
|
+
}
|
|
33
|
+
async connectedCallback() {
|
|
34
|
+
let pickerRotateFactor = 0;
|
|
35
|
+
let pickerScaleFactor = 0.81;
|
|
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) `;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
translateY = -9999;
|
|
43
130
|
}
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
this.setPickerItemActiveState = (item, isActive) => {
|
|
47
|
-
if (isActive) {
|
|
48
|
-
item.classList.add(PICKER_ITEM_ACTIVE_CLASS);
|
|
49
|
-
item.part.add(PICKER_ITEM_ACTIVE_PART);
|
|
50
131
|
}
|
|
51
132
|
else {
|
|
52
|
-
|
|
53
|
-
|
|
133
|
+
translateZ = 0;
|
|
134
|
+
translateY = optOffset;
|
|
54
135
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
* for text entry.
|
|
60
|
-
*/
|
|
61
|
-
this.inputModeChange = (ev) => {
|
|
62
|
-
if (!this.numericInput) {
|
|
63
|
-
return;
|
|
136
|
+
const selected = selectedIndex === i;
|
|
137
|
+
transform += `translate3d(0px,${translateY}px,${translateZ}px) `;
|
|
138
|
+
if (this.scaleFactor !== 1 && !selected) {
|
|
139
|
+
transform += scaleStr;
|
|
64
140
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
*/
|
|
70
|
-
const isColumnActive = inputModeColumn === undefined || inputModeColumn === this.el;
|
|
71
|
-
if (!useInputMode || !isColumnActive) {
|
|
72
|
-
this.setInputModeActive(false);
|
|
73
|
-
return;
|
|
141
|
+
// Update transition duration
|
|
142
|
+
if (this.noAnimate) {
|
|
143
|
+
opt.duration = 0;
|
|
144
|
+
button.style.transitionDuration = '';
|
|
74
145
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
* Setting isActive will cause a re-render.
|
|
79
|
-
* As a result, we do not want to cause the
|
|
80
|
-
* re-render mid scroll as this will cause
|
|
81
|
-
* the picker column to jump back to
|
|
82
|
-
* whatever value was selected at the
|
|
83
|
-
* start of the scroll interaction.
|
|
84
|
-
*/
|
|
85
|
-
this.setInputModeActive = (state) => {
|
|
86
|
-
if (this.isScrolling) {
|
|
87
|
-
this.scrollEndCallback = () => {
|
|
88
|
-
this.isActive = state;
|
|
89
|
-
};
|
|
90
|
-
return;
|
|
146
|
+
else if (duration !== opt.duration) {
|
|
147
|
+
opt.duration = duration;
|
|
148
|
+
button.style.transitionDuration = durationStr;
|
|
91
149
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
* in the view and will emit an ionChange with
|
|
98
|
-
* the item object.
|
|
99
|
-
*/
|
|
100
|
-
this.initializeScrollListener = () => {
|
|
101
|
-
/**
|
|
102
|
-
* The haptics for the wheel picker are
|
|
103
|
-
* an iOS-only feature. As a result, they should
|
|
104
|
-
* be disabled on Android.
|
|
105
|
-
*/
|
|
106
|
-
const enableHaptics = isPlatform('ios');
|
|
107
|
-
const { el, scrollEl } = this;
|
|
108
|
-
let timeout;
|
|
109
|
-
let activeEl = this.activeItem;
|
|
110
|
-
const scrollCallback = () => {
|
|
111
|
-
raf(() => {
|
|
112
|
-
if (!scrollEl)
|
|
113
|
-
return;
|
|
114
|
-
if (timeout) {
|
|
115
|
-
clearTimeout(timeout);
|
|
116
|
-
timeout = undefined;
|
|
117
|
-
}
|
|
118
|
-
if (!this.isScrolling) {
|
|
119
|
-
enableHaptics && hapticSelectionStart();
|
|
120
|
-
this.isScrolling = true;
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Select item in the center of the column
|
|
124
|
-
* which is the month/year that we want to select
|
|
125
|
-
*/
|
|
126
|
-
const bbox = scrollEl.getBoundingClientRect();
|
|
127
|
-
const centerX = bbox.x + bbox.width / 2;
|
|
128
|
-
const centerY = bbox.y + bbox.height / 2;
|
|
129
|
-
/**
|
|
130
|
-
* elementFromPoint returns the top-most element.
|
|
131
|
-
* This means that if an ion-backdrop is overlaying the
|
|
132
|
-
* picker then the appropriate picker column option will
|
|
133
|
-
* not be selected. To account for this, we use elementsFromPoint
|
|
134
|
-
* and use an Array.find to find the appropriate column option
|
|
135
|
-
* at that point.
|
|
136
|
-
*
|
|
137
|
-
* Additionally, the picker column could be used in the
|
|
138
|
-
* Shadow DOM (i.e. in ion-datetime) so we need to make
|
|
139
|
-
* sure we are choosing the correct host otherwise
|
|
140
|
-
* the elements returns by elementsFromPoint will be
|
|
141
|
-
* retargeted. To account for this, we check to see
|
|
142
|
-
* if the picker column has a parent shadow root. If
|
|
143
|
-
* so, we use that shadow root when doing elementsFromPoint.
|
|
144
|
-
* Otherwise, we just use the document.
|
|
145
|
-
*/
|
|
146
|
-
const rootNode = el.getRootNode();
|
|
147
|
-
const hasParentShadow = rootNode instanceof ShadowRoot;
|
|
148
|
-
const referenceNode = hasParentShadow ? rootNode : doc;
|
|
149
|
-
/**
|
|
150
|
-
* If the reference node is undefined
|
|
151
|
-
* then it's likely that doc is undefined
|
|
152
|
-
* due to being in an SSR environment.
|
|
153
|
-
*/
|
|
154
|
-
if (referenceNode === undefined) {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
const elementsAtPoint = referenceNode.elementsFromPoint(centerX, centerY);
|
|
158
|
-
/**
|
|
159
|
-
* elementsFromPoint can returns multiple elements
|
|
160
|
-
* so find the relevant picker column option if one exists.
|
|
161
|
-
*/
|
|
162
|
-
const newActiveElement = elementsAtPoint.find((el) => el.tagName === 'ION-PICKER-COLUMN-OPTION');
|
|
163
|
-
if (activeEl !== undefined) {
|
|
164
|
-
this.setPickerItemActiveState(activeEl, false);
|
|
165
|
-
}
|
|
166
|
-
if (newActiveElement === undefined || newActiveElement.disabled) {
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* If we are selecting a new value,
|
|
171
|
-
* we need to run haptics again.
|
|
172
|
-
*/
|
|
173
|
-
if (newActiveElement !== activeEl) {
|
|
174
|
-
enableHaptics && hapticSelectionChanged();
|
|
175
|
-
if (this.canExitInputMode) {
|
|
176
|
-
/**
|
|
177
|
-
* The native iOS wheel picker
|
|
178
|
-
* only dismisses the keyboard
|
|
179
|
-
* once the selected item has changed
|
|
180
|
-
* as a result of a swipe
|
|
181
|
-
* from the user. If `canExitInputMode` is
|
|
182
|
-
* `false` then this means that the
|
|
183
|
-
* scroll is happening as a result of
|
|
184
|
-
* the `value` property programmatically changing
|
|
185
|
-
* either by an application or by the user via the keyboard.
|
|
186
|
-
*/
|
|
187
|
-
this.exitInputMode();
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
activeEl = newActiveElement;
|
|
191
|
-
this.setPickerItemActiveState(newActiveElement, true);
|
|
192
|
-
timeout = setTimeout(() => {
|
|
193
|
-
this.isScrolling = false;
|
|
194
|
-
enableHaptics && hapticSelectionEnd();
|
|
195
|
-
/**
|
|
196
|
-
* Certain tasks (such as those that
|
|
197
|
-
* cause re-renders) should only be done
|
|
198
|
-
* once scrolling has finished, otherwise
|
|
199
|
-
* flickering may occur.
|
|
200
|
-
*/
|
|
201
|
-
const { scrollEndCallback } = this;
|
|
202
|
-
if (scrollEndCallback) {
|
|
203
|
-
scrollEndCallback();
|
|
204
|
-
this.scrollEndCallback = undefined;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Reset this flag as the
|
|
208
|
-
* next scroll interaction could
|
|
209
|
-
* be a scroll from the user. In this
|
|
210
|
-
* case, we should exit input mode.
|
|
211
|
-
*/
|
|
212
|
-
this.canExitInputMode = true;
|
|
213
|
-
this.setValue(newActiveElement.value);
|
|
214
|
-
}, 250);
|
|
215
|
-
});
|
|
216
|
-
};
|
|
217
|
-
/**
|
|
218
|
-
* Wrap this in an raf so that the scroll callback
|
|
219
|
-
* does not fire when component is initially shown.
|
|
220
|
-
*/
|
|
221
|
-
raf(() => {
|
|
222
|
-
if (!scrollEl)
|
|
223
|
-
return;
|
|
224
|
-
scrollEl.addEventListener('scroll', scrollCallback);
|
|
225
|
-
this.destroyScrollListener = () => {
|
|
226
|
-
scrollEl.removeEventListener('scroll', scrollCallback);
|
|
227
|
-
};
|
|
228
|
-
});
|
|
229
|
-
};
|
|
230
|
-
/**
|
|
231
|
-
* Tells the parent picker to
|
|
232
|
-
* exit text entry mode. This is only called
|
|
233
|
-
* when the selected item changes during scroll, so
|
|
234
|
-
* we know that the user likely wants to scroll
|
|
235
|
-
* instead of type.
|
|
236
|
-
*/
|
|
237
|
-
this.exitInputMode = () => {
|
|
238
|
-
const { parentEl } = this;
|
|
239
|
-
if (parentEl == null)
|
|
240
|
-
return;
|
|
241
|
-
parentEl.exitInputMode();
|
|
242
|
-
/**
|
|
243
|
-
* setInputModeActive only takes
|
|
244
|
-
* effect once scrolling stops to avoid
|
|
245
|
-
* a component re-render while scrolling.
|
|
246
|
-
* However, we want the visual active
|
|
247
|
-
* indicator to go away immediately, so
|
|
248
|
-
* we call classList.remove here.
|
|
249
|
-
*/
|
|
250
|
-
this.el.classList.remove('picker-column-active');
|
|
251
|
-
};
|
|
252
|
-
this.isActive = false;
|
|
253
|
-
this.disabled = false;
|
|
254
|
-
this.items = [];
|
|
255
|
-
this.value = undefined;
|
|
256
|
-
this.color = 'primary';
|
|
257
|
-
this.numericInput = false;
|
|
258
|
-
}
|
|
259
|
-
valueChange() {
|
|
260
|
-
if (this.isColumnVisible) {
|
|
150
|
+
// Update transform
|
|
151
|
+
if (transform !== opt.transform) {
|
|
152
|
+
opt.transform = transform;
|
|
153
|
+
}
|
|
154
|
+
button.style.transform = transform;
|
|
261
155
|
/**
|
|
262
|
-
*
|
|
263
|
-
*
|
|
156
|
+
* Ensure that the select column
|
|
157
|
+
* item has the selected class
|
|
264
158
|
*/
|
|
265
|
-
|
|
159
|
+
opt.selected = selected;
|
|
160
|
+
if (selected) {
|
|
161
|
+
button.classList.add(PICKER_OPT_SELECTED);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
button.classList.remove(PICKER_OPT_SELECTED);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
this.col.prevSelected = prevSelected;
|
|
168
|
+
if (saveY) {
|
|
169
|
+
this.y = y;
|
|
170
|
+
}
|
|
171
|
+
if (this.lastIndex !== selectedIndex) {
|
|
172
|
+
// have not set a last index yet
|
|
173
|
+
hapticSelectionChanged();
|
|
174
|
+
this.lastIndex = selectedIndex;
|
|
266
175
|
}
|
|
267
176
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
this.setPickerItemActiveState(activeItem, true);
|
|
291
|
-
}
|
|
292
|
-
this.initializeScrollListener();
|
|
177
|
+
decelerate() {
|
|
178
|
+
if (this.velocity !== 0) {
|
|
179
|
+
// still decelerating
|
|
180
|
+
this.velocity *= DECELERATION_FRICTION;
|
|
181
|
+
// do not let it go slower than a velocity of 1
|
|
182
|
+
this.velocity = this.velocity > 0 ? Math.max(this.velocity, 1) : Math.min(this.velocity, -1);
|
|
183
|
+
let y = this.y + this.velocity;
|
|
184
|
+
if (y > this.minY) {
|
|
185
|
+
// whoops, it's trying to scroll up farther than the options we have!
|
|
186
|
+
y = this.minY;
|
|
187
|
+
this.velocity = 0;
|
|
188
|
+
}
|
|
189
|
+
else if (y < this.maxY) {
|
|
190
|
+
// gahh, it's trying to scroll down farther than we can!
|
|
191
|
+
y = this.maxY;
|
|
192
|
+
this.velocity = 0;
|
|
193
|
+
}
|
|
194
|
+
this.update(y, 0, true);
|
|
195
|
+
const notLockedIn = Math.round(y) % this.optHeight !== 0 || Math.abs(this.velocity) > 1;
|
|
196
|
+
if (notLockedIn) {
|
|
197
|
+
// isn't locked in yet, keep decelerating until it is
|
|
198
|
+
this.rafId = requestAnimationFrame(() => this.decelerate());
|
|
293
199
|
}
|
|
294
200
|
else {
|
|
295
|
-
this.
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
this.destroyScrollListener = undefined;
|
|
299
|
-
}
|
|
201
|
+
this.velocity = 0;
|
|
202
|
+
this.emitColChange();
|
|
203
|
+
hapticSelectionEnd();
|
|
300
204
|
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
//
|
|
306
|
-
|
|
205
|
+
}
|
|
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();
|
|
307
212
|
}
|
|
308
213
|
}
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
214
|
+
indexForY(y) {
|
|
215
|
+
return Math.min(Math.max(Math.abs(Math.round(y / this.optHeight)), 0), this.col.options.length - 1);
|
|
216
|
+
}
|
|
217
|
+
onStart(detail) {
|
|
218
|
+
// We have to prevent default in order to block scrolling under the picker
|
|
219
|
+
// but we DO NOT have to stop propagation, since we still want
|
|
220
|
+
// some "click" events to capture
|
|
221
|
+
if (detail.event.cancelable) {
|
|
222
|
+
detail.event.preventDefault();
|
|
223
|
+
}
|
|
224
|
+
detail.event.stopPropagation();
|
|
225
|
+
hapticSelectionStart();
|
|
226
|
+
// reset everything
|
|
227
|
+
if (this.rafId !== undefined)
|
|
228
|
+
cancelAnimationFrame(this.rafId);
|
|
229
|
+
const options = this.col.options;
|
|
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);
|
|
322
236
|
}
|
|
323
237
|
}
|
|
238
|
+
this.minY = -(minY * this.optHeight);
|
|
239
|
+
this.maxY = -(maxY * this.optHeight);
|
|
324
240
|
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
241
|
+
onMove(detail) {
|
|
242
|
+
if (detail.event.cancelable) {
|
|
243
|
+
detail.event.preventDefault();
|
|
244
|
+
}
|
|
245
|
+
detail.event.stopPropagation();
|
|
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;
|
|
252
|
+
}
|
|
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;
|
|
330
260
|
}
|
|
261
|
+
this.update(y, 0, false);
|
|
331
262
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
* @internal
|
|
338
|
-
*/
|
|
339
|
-
async setValue(value) {
|
|
340
|
-
if (this.value === value) {
|
|
263
|
+
onEnd(detail) {
|
|
264
|
+
if (this.bounceFrom > 0) {
|
|
265
|
+
// bounce back up
|
|
266
|
+
this.update(this.minY, 100, true);
|
|
267
|
+
this.emitColChange();
|
|
341
268
|
return;
|
|
342
269
|
}
|
|
343
|
-
this.
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
270
|
+
else if (this.bounceFrom < 0) {
|
|
271
|
+
// bounce back down
|
|
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();
|
|
353
296
|
}
|
|
354
297
|
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
return false;
|
|
298
|
+
refresh(forceRefresh, animated) {
|
|
299
|
+
var _a;
|
|
300
|
+
let min = this.col.options.length - 1;
|
|
301
|
+
let max = 0;
|
|
302
|
+
const options = this.col.options;
|
|
303
|
+
for (let i = 0; i < options.length; i++) {
|
|
304
|
+
if (!options[i].disabled) {
|
|
305
|
+
min = Math.min(min, i);
|
|
306
|
+
max = Math.max(max, i);
|
|
365
307
|
}
|
|
366
|
-
|
|
367
|
-
|
|
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);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
onDomChange(forceRefresh, animated) {
|
|
328
|
+
const colEl = this.optsEl;
|
|
329
|
+
if (colEl) {
|
|
330
|
+
// DOM READ
|
|
331
|
+
// We perfom a DOM read over a rendered item, this needs to happen after the first render or after the the column has changed
|
|
332
|
+
this.optHeight = colEl.firstElementChild ? colEl.firstElementChild.clientHeight : 0;
|
|
333
|
+
}
|
|
334
|
+
this.refresh(forceRefresh, animated);
|
|
368
335
|
}
|
|
369
336
|
render() {
|
|
370
|
-
const
|
|
337
|
+
const col = this.col;
|
|
371
338
|
const mode = getIonMode(this);
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
* the attribute can be moved to datetime.tsx and set on every
|
|
376
|
-
* instance of ion-picker-column there instead.
|
|
377
|
-
* TODO FW-5580 remove exportparts
|
|
378
|
-
*/
|
|
379
|
-
return (h(Host, { exportparts: `${PICKER_ITEM_PART}, ${PICKER_ITEM_ACTIVE_PART}`, disabled: pickerDisabled, class: createColorClasses(color, {
|
|
380
|
-
[mode]: true,
|
|
381
|
-
['picker-column-active']: isActive,
|
|
382
|
-
['picker-column-numeric-input']: numericInput,
|
|
383
|
-
}) }, h("slot", { name: "prefix" }), h("div", { class: "picker-opts", tabindex: pickerDisabled ? undefined : 0, ref: (el) => {
|
|
384
|
-
this.scrollEl = el;
|
|
385
|
-
} }, h("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("slot", null), h("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { class: "picker-item picker-item-empty", "aria-hidden": "true" }, "\u00A0")), h("slot", { name: "suffix" })));
|
|
339
|
+
return (h(Host, { class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
|
|
340
|
+
'max-width': this.col.columnWidth,
|
|
341
|
+
} }, col.prefix && (h("div", { class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), h("div", { 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", { class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
|
|
386
342
|
}
|
|
387
343
|
static get is() { return "ion-picker-column"; }
|
|
388
|
-
static get encapsulation() { return "shadow"; }
|
|
389
344
|
static get originalStyleUrls() {
|
|
390
345
|
return {
|
|
391
346
|
"ios": ["picker-column.ios.scss"],
|
|
@@ -400,205 +355,65 @@ export class PickerColumn {
|
|
|
400
355
|
}
|
|
401
356
|
static get properties() {
|
|
402
357
|
return {
|
|
403
|
-
"
|
|
404
|
-
"type": "boolean",
|
|
405
|
-
"mutable": false,
|
|
406
|
-
"complexType": {
|
|
407
|
-
"original": "boolean",
|
|
408
|
-
"resolved": "boolean",
|
|
409
|
-
"references": {}
|
|
410
|
-
},
|
|
411
|
-
"required": false,
|
|
412
|
-
"optional": false,
|
|
413
|
-
"docs": {
|
|
414
|
-
"tags": [],
|
|
415
|
-
"text": "If `true`, the user cannot interact with the picker."
|
|
416
|
-
},
|
|
417
|
-
"attribute": "disabled",
|
|
418
|
-
"reflect": false,
|
|
419
|
-
"defaultValue": "false"
|
|
420
|
-
},
|
|
421
|
-
"items": {
|
|
358
|
+
"col": {
|
|
422
359
|
"type": "unknown",
|
|
423
360
|
"mutable": false,
|
|
424
361
|
"complexType": {
|
|
425
|
-
"original": "
|
|
426
|
-
"resolved": "
|
|
362
|
+
"original": "PickerColumn",
|
|
363
|
+
"resolved": "PickerColumn",
|
|
427
364
|
"references": {
|
|
428
|
-
"
|
|
365
|
+
"PickerColumn": {
|
|
429
366
|
"location": "import",
|
|
430
|
-
"path": "
|
|
431
|
-
"id": "src/components/picker
|
|
367
|
+
"path": "../picker/picker-interface",
|
|
368
|
+
"id": "src/components/picker/picker-interface.ts::PickerColumn"
|
|
432
369
|
}
|
|
433
370
|
}
|
|
434
371
|
},
|
|
435
|
-
"required":
|
|
372
|
+
"required": true,
|
|
436
373
|
"optional": false,
|
|
437
374
|
"docs": {
|
|
438
375
|
"tags": [],
|
|
439
|
-
"text": "
|
|
440
|
-
}
|
|
441
|
-
"defaultValue": "[]"
|
|
442
|
-
},
|
|
443
|
-
"value": {
|
|
444
|
-
"type": "any",
|
|
445
|
-
"mutable": true,
|
|
446
|
-
"complexType": {
|
|
447
|
-
"original": "string | number",
|
|
448
|
-
"resolved": "number | string | undefined",
|
|
449
|
-
"references": {}
|
|
450
|
-
},
|
|
451
|
-
"required": false,
|
|
452
|
-
"optional": true,
|
|
453
|
-
"docs": {
|
|
454
|
-
"tags": [],
|
|
455
|
-
"text": "The selected option in the picker."
|
|
456
|
-
},
|
|
457
|
-
"attribute": "value",
|
|
458
|
-
"reflect": false
|
|
459
|
-
},
|
|
460
|
-
"color": {
|
|
461
|
-
"type": "string",
|
|
462
|
-
"mutable": false,
|
|
463
|
-
"complexType": {
|
|
464
|
-
"original": "Color",
|
|
465
|
-
"resolved": "\"danger\" | \"dark\" | \"light\" | \"medium\" | \"primary\" | \"secondary\" | \"success\" | \"tertiary\" | \"warning\" | string & Record<never, never> | undefined",
|
|
466
|
-
"references": {
|
|
467
|
-
"Color": {
|
|
468
|
-
"location": "import",
|
|
469
|
-
"path": "../../interface",
|
|
470
|
-
"id": "src/interface.d.ts::Color"
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
},
|
|
474
|
-
"required": false,
|
|
475
|
-
"optional": true,
|
|
476
|
-
"docs": {
|
|
477
|
-
"tags": [],
|
|
478
|
-
"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)."
|
|
479
|
-
},
|
|
480
|
-
"attribute": "color",
|
|
481
|
-
"reflect": true,
|
|
482
|
-
"defaultValue": "'primary'"
|
|
483
|
-
},
|
|
484
|
-
"numericInput": {
|
|
485
|
-
"type": "boolean",
|
|
486
|
-
"mutable": false,
|
|
487
|
-
"complexType": {
|
|
488
|
-
"original": "boolean",
|
|
489
|
-
"resolved": "boolean",
|
|
490
|
-
"references": {}
|
|
491
|
-
},
|
|
492
|
-
"required": false,
|
|
493
|
-
"optional": false,
|
|
494
|
-
"docs": {
|
|
495
|
-
"tags": [{
|
|
496
|
-
"name": "internal",
|
|
497
|
-
"text": undefined
|
|
498
|
-
}],
|
|
499
|
-
"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."
|
|
500
|
-
},
|
|
501
|
-
"attribute": "numeric-input",
|
|
502
|
-
"reflect": false,
|
|
503
|
-
"defaultValue": "false"
|
|
376
|
+
"text": "Picker column data"
|
|
377
|
+
}
|
|
504
378
|
}
|
|
505
379
|
};
|
|
506
380
|
}
|
|
507
|
-
static get states() {
|
|
508
|
-
return {
|
|
509
|
-
"isActive": {}
|
|
510
|
-
};
|
|
511
|
-
}
|
|
512
381
|
static get events() {
|
|
513
382
|
return [{
|
|
514
|
-
"method": "
|
|
515
|
-
"name": "
|
|
383
|
+
"method": "ionPickerColChange",
|
|
384
|
+
"name": "ionPickerColChange",
|
|
516
385
|
"bubbles": true,
|
|
517
386
|
"cancelable": true,
|
|
518
387
|
"composed": true,
|
|
519
388
|
"docs": {
|
|
520
|
-
"tags": [],
|
|
521
|
-
"text": "Emitted when the value has changed."
|
|
522
|
-
},
|
|
523
|
-
"complexType": {
|
|
524
|
-
"original": "{ value: string | number | undefined }",
|
|
525
|
-
"resolved": "{ value: string | number | undefined; }",
|
|
526
|
-
"references": {}
|
|
527
|
-
}
|
|
528
|
-
}];
|
|
529
|
-
}
|
|
530
|
-
static get methods() {
|
|
531
|
-
return {
|
|
532
|
-
"scrollActiveItemIntoView": {
|
|
533
|
-
"complexType": {
|
|
534
|
-
"signature": "() => Promise<void>",
|
|
535
|
-
"parameters": [],
|
|
536
|
-
"references": {
|
|
537
|
-
"Promise": {
|
|
538
|
-
"location": "global",
|
|
539
|
-
"id": "global::Promise"
|
|
540
|
-
}
|
|
541
|
-
},
|
|
542
|
-
"return": "Promise<void>"
|
|
543
|
-
},
|
|
544
|
-
"docs": {
|
|
545
|
-
"text": "",
|
|
546
389
|
"tags": [{
|
|
547
390
|
"name": "internal",
|
|
548
391
|
"text": undefined
|
|
549
|
-
}]
|
|
550
|
-
}
|
|
551
|
-
},
|
|
552
|
-
"setValue": {
|
|
553
|
-
"complexType": {
|
|
554
|
-
"signature": "(value?: string | number) => Promise<void>",
|
|
555
|
-
"parameters": [{
|
|
556
|
-
"tags": [],
|
|
557
|
-
"text": ""
|
|
558
392
|
}],
|
|
559
|
-
"
|
|
560
|
-
"Promise": {
|
|
561
|
-
"location": "global",
|
|
562
|
-
"id": "global::Promise"
|
|
563
|
-
}
|
|
564
|
-
},
|
|
565
|
-
"return": "Promise<void>"
|
|
393
|
+
"text": "Emitted when the selected value has changed"
|
|
566
394
|
},
|
|
567
|
-
"docs": {
|
|
568
|
-
"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.",
|
|
569
|
-
"tags": [{
|
|
570
|
-
"name": "internal",
|
|
571
|
-
"text": undefined
|
|
572
|
-
}]
|
|
573
|
-
}
|
|
574
|
-
},
|
|
575
|
-
"setFocus": {
|
|
576
395
|
"complexType": {
|
|
577
|
-
"
|
|
578
|
-
"
|
|
396
|
+
"original": "PickerColumn",
|
|
397
|
+
"resolved": "PickerColumn",
|
|
579
398
|
"references": {
|
|
580
|
-
"
|
|
581
|
-
"location": "
|
|
582
|
-
"
|
|
399
|
+
"PickerColumn": {
|
|
400
|
+
"location": "import",
|
|
401
|
+
"path": "../picker/picker-interface",
|
|
402
|
+
"id": "src/components/picker/picker-interface.ts::PickerColumn"
|
|
583
403
|
}
|
|
584
|
-
}
|
|
585
|
-
"return": "Promise<void>"
|
|
586
|
-
},
|
|
587
|
-
"docs": {
|
|
588
|
-
"text": "Sets focus on the scrollable container within the picker column.\nUse this method instead of the global `pickerColumn.focus()`.",
|
|
589
|
-
"tags": []
|
|
404
|
+
}
|
|
590
405
|
}
|
|
591
|
-
}
|
|
592
|
-
};
|
|
406
|
+
}];
|
|
593
407
|
}
|
|
594
408
|
static get elementRef() { return "el"; }
|
|
595
409
|
static get watchers() {
|
|
596
410
|
return [{
|
|
597
|
-
"propName": "
|
|
598
|
-
"methodName": "
|
|
411
|
+
"propName": "col",
|
|
412
|
+
"methodName": "colChanged"
|
|
599
413
|
}];
|
|
600
414
|
}
|
|
601
415
|
}
|
|
602
|
-
const
|
|
603
|
-
const
|
|
604
|
-
const
|
|
416
|
+
const PICKER_OPT_SELECTED = 'picker-opt-selected';
|
|
417
|
+
const DECELERATION_FRICTION = 0.97;
|
|
418
|
+
const MAX_PICKER_SPEED = 90;
|
|
419
|
+
const TRANSITION_DURATION = 150;
|