@ionic/core 7.5.8-dev.11703088210.14a72b83 → 7.5.8-dev.11705350665.1a40ee3a
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/backdrop.js +0 -12
- package/components/button.js +2 -2
- package/components/data.js +1 -1
- package/components/gesture-controller.js +1 -1
- package/components/index2.js +91 -0
- package/components/ion-content.js +3 -4
- package/components/ion-datetime.js +40 -64
- package/components/ion-input.js +2 -0
- 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 +309 -0
- package/components/ion-picker.js +1 -309
- package/components/ion-refresher-content.js +3 -10
- package/components/ion-refresher.js +183 -4
- package/components/ion-searchbar.js +2 -0
- package/components/ion-textarea.js +2 -0
- package/components/overlays.js +11 -4
- package/components/picker-column-option.js +122 -0
- package/components/picker-column.js +351 -322
- package/components/picker-column2.js +379 -0
- package/components/{picker-internal.js → picker.js} +29 -22
- package/css/core.css +10 -0
- package/css/core.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/dist/cjs/{app-globals-28656db1.js → app-globals-0af482c7.js} +1 -1
- package/dist/cjs/{button-active-75b38d77.js → button-active-9d7e0640.js} +2 -2
- package/dist/cjs/{data-36b9094e.js → data-e7526b58.js} +1 -1
- package/dist/cjs/{gesture-controller-c40c045a.js → gesture-controller-9436f482.js} +1 -0
- package/dist/cjs/{index-097270a3.js → index-5cbb20f9.js} +1 -1
- package/dist/cjs/{index-b0102f48.js → index-bbb4336c.js} +39 -1
- package/dist/cjs/{index-cb3e0ab7.js → index-ec51e99c.js} +94 -3
- package/dist/cjs/{index-d1b59ffa.js → index-ee07ed59.js} +1 -1
- package/dist/cjs/index.cjs.js +9 -9
- package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -6
- package/dist/cjs/ion-alert.cjs.entry.js +6 -6
- package/dist/cjs/ion-app_8.cjs.entry.js +8 -9
- package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
- package/dist/cjs/ion-backdrop.cjs.entry.js +2 -14
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-button_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
- package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/ion-chip.cjs.entry.js +2 -2
- package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-datetime-button.cjs.entry.js +3 -3
- package/dist/cjs/ion-datetime_3.cjs.entry.js +38 -58
- package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-img.cjs.entry.js +2 -2
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-input.cjs.entry.js +4 -2
- package/dist/cjs/ion-item-option_3.cjs.entry.js +3 -3
- package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
- package/dist/cjs/ion-loading.cjs.entry.js +4 -3
- package/dist/cjs/ion-menu_3.cjs.entry.js +6 -6
- package/dist/cjs/ion-modal.cjs.entry.js +6 -6
- package/dist/cjs/ion-nav_2.cjs.entry.js +5 -4
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +104 -0
- package/dist/cjs/{ion-picker-column-internal.cjs.entry.js → ion-picker-column.cjs.entry.js} +106 -89
- package/dist/cjs/{ion-picker-internal.cjs.entry.js → ion-picker.cjs.entry.js} +27 -20
- package/dist/cjs/ion-popover.cjs.entry.js +5 -4
- package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
- package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-range.cjs.entry.js +3 -3
- package/dist/cjs/ion-refresher_2.cjs.entry.js +17 -32
- package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
- package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
- package/dist/cjs/ion-searchbar.cjs.entry.js +4 -2
- package/dist/cjs/ion-segment_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-select_3.cjs.entry.js +4 -3
- package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
- package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-text.cjs.entry.js +2 -2
- package/dist/cjs/ion-textarea.cjs.entry.js +4 -2
- package/dist/cjs/ion-toast.cjs.entry.js +4 -3
- package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
- package/dist/cjs/{ionic-global-62510d64.js → ionic-global-f4a2093b.js} +1 -1
- package/dist/cjs/ionic.cjs.js +5 -5
- package/dist/cjs/{ios.transition-d9c0e4fb.js → ios.transition-039d6aeb.js} +4 -2
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-4fac8a87.js → md.transition-ce763350.js} +4 -2
- package/dist/cjs/{overlays-b1471172.js → overlays-e8e05b0e.js} +12 -5
- package/dist/cjs/{status-tap-0aa8e1f2.js → status-tap-415acac6.js} +1 -1
- package/dist/cjs/{swipe-back-2a858bbd.js → swipe-back-b8f2330b.js} +2 -2
- package/dist/collection/collection-manifest.json +8 -7
- package/dist/collection/components/backdrop/backdrop.js +0 -12
- package/dist/collection/components/button/button.ios.css +1 -1
- package/dist/collection/components/button/button.md.css +1 -1
- package/dist/collection/components/button/test/wrap/button.e2e.js +12 -24
- package/dist/collection/components/content/content.css +0 -4
- package/dist/collection/components/content/content.js +2 -3
- package/dist/collection/components/datetime/datetime.ios.css +91 -37
- package/dist/collection/components/datetime/datetime.js +24 -36
- package/dist/collection/components/datetime/datetime.md.css +96 -37
- 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/input/input.js +4 -2
- package/dist/collection/components/picker/picker.ios.css +112 -211
- package/dist/collection/components/picker/picker.js +472 -744
- package/dist/collection/components/picker/picker.md.css +108 -198
- 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} +63 -32
- 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 +497 -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} +207 -98
- package/dist/collection/components/picker-legacy/picker.js +817 -0
- package/dist/collection/components/{picker-internal/picker-internal.ios.css → picker-legacy/picker.md.css} +192 -100
- 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-legacy-column/picker-column.js +419 -0
- 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/refresher/refresher.utils.js +11 -19
- package/dist/collection/components/refresher-content/refresher-content.js +3 -9
- package/dist/collection/components/searchbar/searchbar.js +3 -1
- package/dist/collection/components/textarea/textarea.js +4 -2
- 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/transition/index.js +91 -0
- package/dist/docs.json +484 -47
- package/dist/esm/{app-globals-c23144fc.js → app-globals-722340c4.js} +1 -1
- package/dist/esm/{button-active-7013b5a1.js → button-active-ed9d848c.js} +2 -2
- package/dist/esm/{data-f5c75b4e.js → data-4b9508c9.js} +1 -1
- package/dist/esm/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
- package/dist/esm/{index-39329c6f.js → index-08d686eb.js} +39 -1
- package/dist/esm/{index-2cf77112.js → index-39782642.js} +2 -2
- package/dist/esm/{index-7a818ed3.js → index-80492ed3.js} +1 -1
- package/dist/esm/{index-bebaae5d.js → index-933484ae.js} +94 -3
- package/dist/esm/index.js +9 -9
- package/dist/esm/ion-accordion_2.entry.js +2 -2
- package/dist/esm/ion-action-sheet.entry.js +6 -6
- package/dist/esm/ion-alert.entry.js +6 -6
- package/dist/esm/ion-app_8.entry.js +8 -9
- package/dist/esm/ion-avatar_3.entry.js +2 -2
- package/dist/esm/ion-back-button.entry.js +2 -2
- package/dist/esm/ion-backdrop.entry.js +2 -14
- package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
- package/dist/esm/ion-button_2.entry.js +4 -4
- package/dist/esm/ion-card_5.entry.js +2 -2
- package/dist/esm/ion-checkbox.entry.js +2 -2
- package/dist/esm/ion-chip.entry.js +2 -2
- package/dist/esm/ion-col_3.entry.js +2 -2
- package/dist/esm/ion-datetime-button.entry.js +3 -3
- package/dist/esm/ion-datetime_3.entry.js +37 -57
- package/dist/esm/ion-fab_3.entry.js +2 -2
- package/dist/esm/ion-img.entry.js +2 -2
- package/dist/esm/ion-infinite-scroll_2.entry.js +2 -2
- package/dist/esm/ion-input.entry.js +4 -2
- package/dist/esm/ion-item-option_3.entry.js +3 -3
- package/dist/esm/ion-item_8.entry.js +2 -2
- package/dist/esm/ion-loading.entry.js +4 -3
- package/dist/esm/ion-menu_3.entry.js +6 -6
- package/dist/esm/ion-modal.entry.js +6 -6
- package/dist/esm/ion-nav_2.entry.js +5 -4
- package/dist/esm/ion-picker-column-option.entry.js +100 -0
- package/dist/esm/{ion-picker-column-internal.entry.js → ion-picker-column.entry.js} +106 -89
- package/dist/esm/{ion-picker-internal.entry.js → ion-picker.entry.js} +27 -20
- package/dist/esm/ion-popover.entry.js +5 -4
- package/dist/esm/ion-progress-bar.entry.js +2 -2
- package/dist/esm/ion-radio_2.entry.js +2 -2
- package/dist/esm/ion-range.entry.js +3 -3
- package/dist/esm/ion-refresher_2.entry.js +17 -32
- package/dist/esm/ion-reorder_2.entry.js +3 -3
- package/dist/esm/ion-ripple-effect.entry.js +2 -2
- package/dist/esm/ion-route_4.entry.js +2 -2
- package/dist/esm/ion-searchbar.entry.js +4 -2
- package/dist/esm/ion-segment_2.entry.js +3 -3
- package/dist/esm/ion-select_3.entry.js +4 -3
- package/dist/esm/ion-spinner.entry.js +2 -2
- package/dist/esm/ion-split-pane.entry.js +2 -2
- package/dist/esm/ion-tab-bar_2.entry.js +2 -2
- package/dist/esm/ion-tab_2.entry.js +1 -1
- package/dist/esm/ion-text.entry.js +2 -2
- package/dist/esm/ion-textarea.entry.js +4 -2
- package/dist/esm/ion-toast.entry.js +4 -3
- package/dist/esm/ion-toggle.entry.js +3 -3
- package/dist/esm/{ionic-global-6c78e871.js → ionic-global-c0cda98e.js} +1 -1
- package/dist/esm/ionic.js +6 -6
- package/dist/esm/{ios.transition-daa373e9.js → ios.transition-9e42996d.js} +4 -2
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-91c3d3cc.js → md.transition-8cbb4e1d.js} +4 -2
- package/dist/esm/{overlays-64e67e2c.js → overlays-fbc5cab5.js} +12 -5
- package/dist/esm/{status-tap-9dd45200.js → status-tap-2b93b1b5.js} +1 -1
- package/dist/esm/{swipe-back-a6f386fc.js → swipe-back-a8ca7f93.js} +2 -2
- package/dist/esm-es5/app-globals-722340c4.js +4 -0
- package/dist/esm-es5/{button-active-7013b5a1.js → button-active-ed9d848c.js} +1 -1
- package/dist/esm-es5/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
- package/dist/esm-es5/{index-39329c6f.js → index-08d686eb.js} +1 -1
- package/dist/esm-es5/{index-2cf77112.js → index-39782642.js} +1 -1
- package/dist/esm-es5/{index-7a818ed3.js → index-80492ed3.js} +1 -1
- package/dist/esm-es5/index-933484ae.js +4 -0
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
- package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
- package/dist/esm-es5/ion-alert.entry.js +1 -1
- package/dist/esm-es5/ion-app_8.entry.js +1 -1
- package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
- package/dist/esm-es5/ion-back-button.entry.js +1 -1
- package/dist/esm-es5/ion-backdrop.entry.js +1 -1
- package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
- package/dist/esm-es5/ion-button_2.entry.js +1 -1
- package/dist/esm-es5/ion-card_5.entry.js +1 -1
- package/dist/esm-es5/ion-checkbox.entry.js +1 -1
- package/dist/esm-es5/ion-chip.entry.js +1 -1
- package/dist/esm-es5/ion-col_3.entry.js +1 -1
- package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
- package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
- package/dist/esm-es5/ion-fab_3.entry.js +1 -1
- package/dist/esm-es5/ion-img.entry.js +1 -1
- package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
- package/dist/esm-es5/ion-input.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-global-6c78e871.js → ionic-global-c0cda98e.js} +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/ios.transition-9e42996d.js +4 -0
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/md.transition-8cbb4e1d.js +4 -0
- package/dist/esm-es5/overlays-fbc5cab5.js +4 -0
- package/dist/esm-es5/{status-tap-9dd45200.js → status-tap-2b93b1b5.js} +1 -1
- package/dist/esm-es5/swipe-back-a8ca7f93.js +4 -0
- package/dist/html.html-data.json +154 -3
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/ionic.js +1 -1
- package/dist/ionic/{p-a0945c3a.system.entry.js → p-0e53f8ea.system.entry.js} +1 -1
- package/dist/ionic/{p-161d0916.entry.js → p-1161a793.entry.js} +1 -1
- package/dist/ionic/{p-89026d53.entry.js → p-1208f939.entry.js} +1 -1
- package/dist/ionic/{p-ad78c421.system.js → p-16bd5224.system.js} +1 -1
- package/dist/ionic/p-1786bc72.js +4 -0
- package/dist/ionic/{p-312221db.entry.js → p-17da5ed1.entry.js} +1 -1
- package/dist/ionic/{p-5fb707e0.entry.js → p-18ba8221.entry.js} +1 -1
- package/dist/ionic/{p-1631b52f.system.js → p-1d624e03.system.js} +1 -1
- package/dist/ionic/{p-3f5ae764.entry.js → p-1fc72959.entry.js} +1 -1
- package/dist/ionic/{p-1ff22253.entry.js → p-2092f39f.entry.js} +1 -1
- package/dist/ionic/{p-c7c8429a.system.js → p-20d469d0.system.js} +1 -1
- package/dist/ionic/{p-46dbd723.entry.js → p-21c3515a.entry.js} +1 -1
- package/dist/ionic/{p-2657f213.entry.js → p-22e5af95.entry.js} +1 -1
- package/dist/ionic/{p-6744eca5.entry.js → p-232d1f22.entry.js} +1 -1
- package/dist/ionic/p-26798a7b.system.entry.js +4 -0
- package/dist/ionic/p-27bcbbc7.system.entry.js +4 -0
- package/dist/ionic/{p-b81a8111.system.entry.js → p-2938823a.system.entry.js} +1 -1
- package/dist/ionic/p-294725bb.js +4 -0
- package/dist/ionic/{p-df361680.system.entry.js → p-2ab4e925.system.entry.js} +1 -1
- package/dist/ionic/{p-8c202d6e.system.entry.js → p-32303650.system.entry.js} +1 -1
- package/dist/ionic/{p-18032a93.entry.js → p-34c39c48.entry.js} +1 -1
- package/dist/ionic/p-350f7292.system.entry.js +4 -0
- package/dist/ionic/{p-86c2bbc8.entry.js → p-353b349d.entry.js} +1 -1
- package/dist/ionic/p-36d194c5.entry.js +4 -0
- package/dist/ionic/p-3993ae66.entry.js +4 -0
- package/dist/ionic/{p-31b2326e.system.js → p-3e1e14d9.system.js} +1 -1
- package/dist/ionic/{p-a3a145d3.entry.js → p-3f6270b3.entry.js} +1 -1
- package/dist/ionic/{p-23a27e78.system.entry.js → p-3fd26bd6.system.entry.js} +1 -1
- package/dist/ionic/{p-426bdba9.system.js → p-3fe96156.system.js} +1 -1
- package/dist/ionic/p-400b61c7.system.entry.js +4 -0
- package/dist/ionic/{p-e26030f8.system.js → p-4155f352.system.js} +1 -1
- package/dist/ionic/{p-405f1a72.entry.js → p-42ba3902.entry.js} +1 -1
- package/dist/ionic/{p-2a7e6572.system.entry.js → p-464975c5.system.entry.js} +1 -1
- package/dist/ionic/{p-ee4a54e3.entry.js → p-4911a5d6.entry.js} +1 -1
- package/dist/ionic/p-49c5f1a3.js +4 -0
- package/dist/ionic/{p-5f46d93e.entry.js → p-4a31c99f.entry.js} +1 -1
- package/dist/ionic/{p-f34d6a49.entry.js → p-4bee86bd.entry.js} +1 -1
- package/dist/ionic/{p-2cd9cb80.system.entry.js → p-4fb51e61.system.entry.js} +1 -1
- package/dist/ionic/p-510d9b43.js +4 -0
- package/dist/ionic/{p-d3e123c0.entry.js → p-51a087d6.entry.js} +1 -1
- package/dist/ionic/p-51abefb7.system.js +4 -0
- package/dist/ionic/{p-aac289d2.system.entry.js → p-564af202.system.entry.js} +1 -1
- package/dist/ionic/p-588fdf40.entry.js +4 -0
- package/dist/ionic/p-5a1aac13.system.entry.js +4 -0
- package/dist/ionic/{p-a5c81b99.entry.js → p-5a68960f.entry.js} +1 -1
- package/dist/ionic/{p-34d6f520.system.js → p-5b365ca7.system.js} +1 -1
- package/dist/ionic/{p-eef8d7e8.system.entry.js → p-5bebc7b3.system.entry.js} +1 -1
- package/dist/ionic/{p-a1b4dba7.entry.js → p-5d42b6b4.entry.js} +1 -1
- package/dist/ionic/{p-21f015cf.js → p-5ecae037.js} +1 -1
- package/dist/ionic/{p-57c0d5bf.system.entry.js → p-6555a5e7.system.entry.js} +1 -1
- package/dist/ionic/p-65e27aae.system.entry.js +4 -0
- package/dist/ionic/{p-71d986ae.entry.js → p-6b7c55cd.entry.js} +1 -1
- package/dist/ionic/{p-70ecb18b.entry.js → p-6d72fb44.entry.js} +1 -1
- package/dist/ionic/{p-1cbc21e2.system.entry.js → p-6e70dd1a.system.entry.js} +1 -1
- package/dist/ionic/{p-64af4468.entry.js → p-6fbecbda.entry.js} +1 -1
- package/dist/ionic/{p-27a5f2c7.system.entry.js → p-6fd64e7c.system.entry.js} +1 -1
- package/dist/ionic/p-73190c5f.entry.js +4 -0
- package/dist/ionic/p-73aa7604.entry.js +4 -0
- package/dist/ionic/p-76d3765d.js +4 -0
- package/dist/ionic/{p-2ac9d078.system.entry.js → p-77965464.system.entry.js} +1 -1
- package/dist/ionic/{p-6cf08720.entry.js → p-7b725280.entry.js} +1 -1
- package/dist/ionic/p-8017aad2.system.entry.js +4 -0
- package/dist/ionic/{p-27e6473f.entry.js → p-8adc9a45.entry.js} +1 -1
- package/dist/ionic/p-8c0e5060.system.js +4 -0
- package/dist/ionic/p-8c97cdc0.entry.js +4 -0
- package/dist/ionic/p-8e42850f.entry.js +4 -0
- package/dist/ionic/{p-f5d2dc9b.js → p-8ededb41.js} +1 -1
- package/dist/ionic/{p-67598744.entry.js → p-8f5d30f5.entry.js} +1 -1
- package/dist/ionic/p-8fa6583d.system.js +4 -0
- package/dist/ionic/p-91af3c52.system.entry.js +4 -0
- package/dist/ionic/{p-3acad8ff.system.entry.js → p-93000a81.system.entry.js} +1 -1
- package/dist/ionic/{p-41f7af3f.system.entry.js → p-96dbbac1.system.entry.js} +1 -1
- package/dist/ionic/{p-a0db3de9.system.entry.js → p-9709ebd8.system.entry.js} +1 -1
- package/dist/ionic/{p-12cdcb59.js → p-9738fd82.js} +1 -1
- package/dist/ionic/{p-a70b5d24.entry.js → p-98f3d827.entry.js} +1 -1
- package/dist/ionic/{p-bb3615f7.js → p-9b97df10.js} +1 -1
- package/dist/ionic/p-9e48593b.system.js +4 -0
- package/dist/ionic/{p-315ad733.system.entry.js → p-a225bf0f.system.entry.js} +1 -1
- package/dist/ionic/{p-53a3283e.entry.js → p-a4afcc88.entry.js} +1 -1
- package/dist/ionic/p-a60a1ce5.js +4 -0
- package/dist/ionic/p-a8baa23e.entry.js +4 -0
- package/dist/ionic/{p-99fe0543.entry.js → p-a98dc0c1.entry.js} +1 -1
- package/dist/ionic/p-a9a80f5b.entry.js +4 -0
- package/dist/ionic/{p-90db28f8.system.entry.js → p-a9e3b5be.system.entry.js} +1 -1
- package/dist/ionic/{p-a843a90e.system.entry.js → p-ab9456e9.system.entry.js} +1 -1
- package/dist/ionic/p-ae712b95.entry.js +4 -0
- package/dist/ionic/p-afcf4620.entry.js +4 -0
- package/dist/ionic/{p-3535a36c.entry.js → p-b133e9b4.entry.js} +1 -1
- package/dist/ionic/{p-98ac0e27.system.entry.js → p-b3b3efba.system.entry.js} +2 -2
- package/dist/ionic/{p-58ff9e5b.system.js → p-b4a51c42.system.js} +1 -1
- package/dist/ionic/p-b4d31b30.system.entry.js +4 -0
- package/dist/ionic/{p-3cb5466e.entry.js → p-b5f9f14c.entry.js} +1 -1
- package/dist/ionic/{p-b0fcf130.system.entry.js → p-b6f5e4f2.system.entry.js} +1 -1
- package/dist/ionic/{p-7ae5ca1f.system.entry.js → p-b7010c69.system.entry.js} +1 -1
- package/dist/ionic/{p-a99f14a7.system.entry.js → p-b752714f.system.entry.js} +1 -1
- package/dist/ionic/p-c006d974.entry.js +4 -0
- package/dist/ionic/{p-ca32685b.system.entry.js → p-c18de88a.system.entry.js} +1 -1
- package/dist/ionic/{p-acdd8148.js → p-c3c3333a.js} +1 -1
- package/dist/ionic/p-c41bff4e.system.entry.js +4 -0
- package/dist/ionic/{p-8261be6c.system.entry.js → p-c847fb35.system.entry.js} +1 -1
- package/dist/ionic/{p-e3c44332.system.entry.js → p-c91ccbfa.system.entry.js} +1 -1
- package/dist/ionic/{p-9f376964.system.entry.js → p-c9a21dfd.system.entry.js} +1 -1
- package/dist/ionic/p-ca8938f4.js +4 -0
- package/dist/ionic/{p-ad953217.system.entry.js → p-caf21b46.system.entry.js} +1 -1
- package/dist/ionic/{p-5a7d5905.system.entry.js → p-cde52378.system.entry.js} +1 -1
- package/dist/ionic/{p-1c6c6098.entry.js → p-cfe57b1b.entry.js} +1 -1
- package/dist/ionic/{p-c04accad.entry.js → p-d37b441e.entry.js} +1 -1
- package/dist/ionic/{p-f8c5a0dd.system.js → p-d3b030b8.system.js} +1 -1
- package/dist/ionic/p-d3c773d0.entry.js +4 -0
- package/dist/ionic/{p-91f9e81b.js → p-d662d908.js} +1 -1
- package/dist/ionic/p-d9ec6cf0.system.js +4 -0
- package/dist/ionic/p-da15f571.system.entry.js +4 -0
- package/dist/ionic/{p-c5ae50be.system.js → p-e3584231.system.js} +1 -1
- package/dist/ionic/{p-8a75f7bf.system.entry.js → p-e7ea9815.system.entry.js} +1 -1
- package/dist/ionic/{p-5f127075.system.entry.js → p-e8e86f69.system.entry.js} +1 -1
- package/dist/ionic/p-ea69616e.entry.js +4 -0
- package/dist/ionic/{p-4f71a9cf.system.entry.js → p-ef126ae8.system.entry.js} +1 -1
- package/dist/ionic/p-f6160677.system.entry.js +4 -0
- package/dist/ionic/{p-e4045e04.entry.js → p-f8a5bb89.entry.js} +1 -1
- package/dist/ionic/{p-93dac17a.system.entry.js → p-f910cc73.system.entry.js} +1 -1
- package/dist/ionic/{p-bc97b5cd.system.entry.js → p-fbf3a689.system.entry.js} +1 -1
- package/dist/ionic/p-ffd5dba4.system.entry.js +4 -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 +5 -1
- package/dist/types/components/menu/menu.d.ts +1 -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/refresher/refresher.utils.d.ts +0 -16
- package/dist/types/components/searchbar/searchbar.d.ts +2 -0
- package/dist/types/components/textarea/textarea.d.ts +5 -1
- package/dist/types/components.d.ts +161 -129
- package/dist/types/interface.d.ts +1 -1
- package/dist/types/utils/config.d.ts +8 -2
- package/dist/types/utils/gesture/gesture-controller.d.ts +1 -0
- package/dist/types/utils/overlays.d.ts +5 -2
- package/hydrate/index.d.ts +1 -1
- package/hydrate/index.js +1409 -1229
- package/package.json +2 -2
- 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 -390
- package/components/refresher.utils.js +0 -196
- package/dist/collection/components/picker-column-internal/picker-column-internal.js +0 -565
- 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 -544
- package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +0 -118
- package/dist/esm-es5/app-globals-c23144fc.js +0 -4
- package/dist/esm-es5/index-bebaae5d.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/ios.transition-daa373e9.js +0 -4
- package/dist/esm-es5/md.transition-91c3d3cc.js +0 -4
- package/dist/esm-es5/overlays-64e67e2c.js +0 -4
- package/dist/esm-es5/swipe-back-a6f386fc.js +0 -4
- package/dist/ionic/p-0263eb49.system.js +0 -4
- package/dist/ionic/p-06600f70.js +0 -4
- package/dist/ionic/p-0827d00e.system.entry.js +0 -4
- package/dist/ionic/p-19545a49.system.entry.js +0 -4
- package/dist/ionic/p-1e7daa1f.entry.js +0 -4
- package/dist/ionic/p-2507b0c0.entry.js +0 -4
- package/dist/ionic/p-33f3cd49.entry.js +0 -4
- package/dist/ionic/p-35ce400e.system.js +0 -4
- package/dist/ionic/p-45db7949.system.entry.js +0 -4
- package/dist/ionic/p-58dd7c15.entry.js +0 -4
- package/dist/ionic/p-5c7f13cd.system.entry.js +0 -4
- package/dist/ionic/p-6a6477b2.js +0 -4
- package/dist/ionic/p-742e11cf.system.entry.js +0 -4
- package/dist/ionic/p-7484b1d6.system.js +0 -4
- package/dist/ionic/p-78ebf1b6.system.entry.js +0 -4
- package/dist/ionic/p-83fada9e.system.entry.js +0 -4
- package/dist/ionic/p-89cfbc88.system.entry.js +0 -4
- package/dist/ionic/p-8a10752d.entry.js +0 -4
- package/dist/ionic/p-abab375b.system.js +0 -4
- package/dist/ionic/p-ac4a7fc0.js +0 -4
- package/dist/ionic/p-af959b5d.entry.js +0 -4
- package/dist/ionic/p-b11ceee2.entry.js +0 -4
- package/dist/ionic/p-b5e33ebc.system.entry.js +0 -4
- package/dist/ionic/p-b8f2134e.js +0 -4
- package/dist/ionic/p-bbe3feee.entry.js +0 -4
- package/dist/ionic/p-cde72008.js +0 -4
- package/dist/ionic/p-d0251fc4.entry.js +0 -4
- package/dist/ionic/p-d1530ea9.entry.js +0 -4
- package/dist/ionic/p-ddccf1f4.js +0 -4
- package/dist/ionic/p-e145b9f9.entry.js +0 -4
- package/dist/ionic/p-e8e530fc.entry.js +0 -4
- package/dist/ionic/p-eab6401e.js +0 -4
- package/dist/ionic/p-edc5c693.system.entry.js +0 -4
- package/dist/ionic/p-f0384573.system.entry.js +0 -4
- package/dist/ionic/p-f10de9d5.system.js +0 -4
- package/dist/ionic/p-f444fea5.entry.js +0 -4
- package/dist/ionic/p-fcf49977.system.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}/picker-column.ios.css +0 -0
- /package/dist/collection/components/{picker-column → picker-legacy-column}/picker-column.md.css +0 -0
- /package/dist/collection/components/{picker-column → picker-legacy-column}/test/test.utils.js +0 -0
- /package/dist/esm-es5/{data-f5c75b4e.js → data-4b9508c9.js} +0 -0
- /package/dist/ionic/{p-2aea8b1e.js → p-368f5215.js} +0 -0
- /package/dist/ionic/{p-82e3d633.system.js → p-f58981c2.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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ionic/core",
|
|
3
|
-
"version": "7.5.8-dev.
|
|
3
|
+
"version": "7.5.8-dev.11705350665.1a40ee3a",
|
|
4
4
|
"description": "Base components for Ionic",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ionic",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"loader/"
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@stencil/core": "^4.8.
|
|
34
|
+
"@stencil/core": "^4.8.1",
|
|
35
35
|
"ionicons": "^7.2.1",
|
|
36
36
|
"tslib": "^2.1.0"
|
|
37
37
|
},
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Components, JSX } from "../dist/types/components";
|
|
2
|
-
|
|
3
|
-
interface IonPickerColumnInternal extends Components.IonPickerColumnInternal, HTMLElement {}
|
|
4
|
-
export const IonPickerColumnInternal: {
|
|
5
|
-
prototype: IonPickerColumnInternal;
|
|
6
|
-
new (): IonPickerColumnInternal;
|
|
7
|
-
};
|
|
8
|
-
/**
|
|
9
|
-
* Used to define this component and all nested components recursively.
|
|
10
|
-
*/
|
|
11
|
-
export const defineCustomElement: () => void;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
-
*/
|
|
4
|
-
import { P as PickerColumnInternal, d as defineCustomElement$1 } from './picker-column-internal.js';
|
|
5
|
-
|
|
6
|
-
const IonPickerColumnInternal = PickerColumnInternal;
|
|
7
|
-
const defineCustomElement = defineCustomElement$1;
|
|
8
|
-
|
|
9
|
-
export { IonPickerColumnInternal, defineCustomElement };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
-
*/
|
|
4
|
-
import { P as PickerInternal, d as defineCustomElement$1 } from './picker-internal.js';
|
|
5
|
-
|
|
6
|
-
const IonPickerInternal = PickerInternal;
|
|
7
|
-
const defineCustomElement = defineCustomElement$1;
|
|
8
|
-
|
|
9
|
-
export { IonPickerInternal, defineCustomElement };
|
|
@@ -1,390 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
-
*/
|
|
4
|
-
import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
|
|
5
|
-
import { r as raf, g as getElementRoot } from './helpers.js';
|
|
6
|
-
import { a as hapticSelectionStart, b as hapticSelectionChanged, h as hapticSelectionEnd } from './haptic.js';
|
|
7
|
-
import { a as isPlatform, b as getIonMode } from './ionic-global.js';
|
|
8
|
-
import { c as createColorClasses } from './theme.js';
|
|
9
|
-
|
|
10
|
-
const pickerColumnInternalIosCss = ":host{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;height:200px;outline:none;font-size:22px;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;overflow-x:hidden;overflow-y:scroll;scrollbar-width:none;text-align:center}:host::-webkit-scrollbar{display:none}:host .picker-item{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:block;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden;scroll-snap-align:center}:host .picker-item-empty,:host .picker-item[disabled]{cursor:default}:host .picker-item-empty,:host(:not([disabled])) .picker-item[disabled]{scroll-snap-align:none}:host([disabled]){overflow-y:hidden}:host .picker-item[disabled]{opacity:0.4}:host(.picker-column-active) .picker-item.picker-item-active{color:var(--ion-color-base)}@media (any-hover: hover){:host(:focus){outline:none;background:rgba(var(--ion-color-base-rgb), 0.2)}}";
|
|
11
|
-
|
|
12
|
-
const pickerColumnInternalMdCss = ":host{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;height:200px;outline:none;font-size:22px;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;overflow-x:hidden;overflow-y:scroll;scrollbar-width:none;text-align:center}:host::-webkit-scrollbar{display:none}:host .picker-item{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:block;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden;scroll-snap-align:center}:host .picker-item-empty,:host .picker-item[disabled]{cursor:default}:host .picker-item-empty,:host(:not([disabled])) .picker-item[disabled]{scroll-snap-align:none}:host([disabled]){overflow-y:hidden}:host .picker-item[disabled]{opacity:0.4}:host(.picker-column-active) .picker-item.picker-item-active{color:var(--ion-color-base)}@media (any-hover: hover){:host(:focus){outline:none;background:rgba(var(--ion-color-base-rgb), 0.2)}}:host .picker-item-active{color:var(--ion-color-base)}";
|
|
13
|
-
|
|
14
|
-
const PickerColumnInternal = /*@__PURE__*/ proxyCustomElement(class PickerColumnInternal extends HTMLElement {
|
|
15
|
-
constructor() {
|
|
16
|
-
super();
|
|
17
|
-
this.__registerHost();
|
|
18
|
-
this.__attachShadow();
|
|
19
|
-
this.ionChange = createEvent(this, "ionChange", 7);
|
|
20
|
-
this.isScrolling = false;
|
|
21
|
-
this.isColumnVisible = false;
|
|
22
|
-
this.canExitInputMode = true;
|
|
23
|
-
this.centerPickerItemInView = (target, smooth = true, canExitInputMode = true) => {
|
|
24
|
-
const { el, isColumnVisible } = this;
|
|
25
|
-
if (isColumnVisible) {
|
|
26
|
-
// (Vertical offset from parent) - (three empty picker rows) + (half the height of the target to ensure the scroll triggers)
|
|
27
|
-
const top = target.offsetTop - 3 * target.clientHeight + target.clientHeight / 2;
|
|
28
|
-
if (el.scrollTop !== top) {
|
|
29
|
-
/**
|
|
30
|
-
* Setting this flag prevents input
|
|
31
|
-
* mode from exiting in the picker column's
|
|
32
|
-
* scroll callback. This is useful when the user manually
|
|
33
|
-
* taps an item or types on the keyboard as both
|
|
34
|
-
* of these can cause a scroll to occur.
|
|
35
|
-
*/
|
|
36
|
-
this.canExitInputMode = canExitInputMode;
|
|
37
|
-
el.scroll({
|
|
38
|
-
top,
|
|
39
|
-
left: 0,
|
|
40
|
-
behavior: smooth ? 'smooth' : undefined,
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
this.setPickerItemActiveState = (item, isActive) => {
|
|
46
|
-
if (isActive) {
|
|
47
|
-
item.classList.add(PICKER_ITEM_ACTIVE_CLASS);
|
|
48
|
-
item.part.add(PICKER_ITEM_ACTIVE_PART);
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
item.classList.remove(PICKER_ITEM_ACTIVE_CLASS);
|
|
52
|
-
item.part.remove(PICKER_ITEM_ACTIVE_PART);
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
/**
|
|
56
|
-
* When ionInputModeChange is emitted, each column
|
|
57
|
-
* needs to check if it is the one being made available
|
|
58
|
-
* for text entry.
|
|
59
|
-
*/
|
|
60
|
-
this.inputModeChange = (ev) => {
|
|
61
|
-
if (!this.numericInput) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
const { useInputMode, inputModeColumn } = ev.detail;
|
|
65
|
-
/**
|
|
66
|
-
* If inputModeColumn is undefined then this means
|
|
67
|
-
* all numericInput columns are being selected.
|
|
68
|
-
*/
|
|
69
|
-
const isColumnActive = inputModeColumn === undefined || inputModeColumn === this.el;
|
|
70
|
-
if (!useInputMode || !isColumnActive) {
|
|
71
|
-
this.setInputModeActive(false);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
this.setInputModeActive(true);
|
|
75
|
-
};
|
|
76
|
-
/**
|
|
77
|
-
* Setting isActive will cause a re-render.
|
|
78
|
-
* As a result, we do not want to cause the
|
|
79
|
-
* re-render mid scroll as this will cause
|
|
80
|
-
* the picker column to jump back to
|
|
81
|
-
* whatever value was selected at the
|
|
82
|
-
* start of the scroll interaction.
|
|
83
|
-
*/
|
|
84
|
-
this.setInputModeActive = (state) => {
|
|
85
|
-
if (this.isScrolling) {
|
|
86
|
-
this.scrollEndCallback = () => {
|
|
87
|
-
this.isActive = state;
|
|
88
|
-
};
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
this.isActive = state;
|
|
92
|
-
};
|
|
93
|
-
/**
|
|
94
|
-
* When the column scrolls, the component
|
|
95
|
-
* needs to determine which item is centered
|
|
96
|
-
* in the view and will emit an ionChange with
|
|
97
|
-
* the item object.
|
|
98
|
-
*/
|
|
99
|
-
this.initializeScrollListener = () => {
|
|
100
|
-
/**
|
|
101
|
-
* The haptics for the wheel picker are
|
|
102
|
-
* an iOS-only feature. As a result, they should
|
|
103
|
-
* be disabled on Android.
|
|
104
|
-
*/
|
|
105
|
-
const enableHaptics = isPlatform('ios');
|
|
106
|
-
const { el } = this;
|
|
107
|
-
let timeout;
|
|
108
|
-
let activeEl = this.activeItem;
|
|
109
|
-
const scrollCallback = () => {
|
|
110
|
-
raf(() => {
|
|
111
|
-
if (timeout) {
|
|
112
|
-
clearTimeout(timeout);
|
|
113
|
-
timeout = undefined;
|
|
114
|
-
}
|
|
115
|
-
if (!this.isScrolling) {
|
|
116
|
-
enableHaptics && hapticSelectionStart();
|
|
117
|
-
this.isScrolling = true;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Select item in the center of the column
|
|
121
|
-
* which is the month/year that we want to select
|
|
122
|
-
*/
|
|
123
|
-
const bbox = el.getBoundingClientRect();
|
|
124
|
-
const centerX = bbox.x + bbox.width / 2;
|
|
125
|
-
const centerY = bbox.y + bbox.height / 2;
|
|
126
|
-
const activeElement = el.shadowRoot.elementFromPoint(centerX, centerY);
|
|
127
|
-
if (activeEl !== null) {
|
|
128
|
-
this.setPickerItemActiveState(activeEl, false);
|
|
129
|
-
}
|
|
130
|
-
if (activeElement === null || activeElement.disabled) {
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* If we are selecting a new value,
|
|
135
|
-
* we need to run haptics again.
|
|
136
|
-
*/
|
|
137
|
-
if (activeElement !== activeEl) {
|
|
138
|
-
enableHaptics && hapticSelectionChanged();
|
|
139
|
-
if (this.canExitInputMode) {
|
|
140
|
-
/**
|
|
141
|
-
* The native iOS wheel picker
|
|
142
|
-
* only dismisses the keyboard
|
|
143
|
-
* once the selected item has changed
|
|
144
|
-
* as a result of a swipe
|
|
145
|
-
* from the user. If `canExitInputMode` is
|
|
146
|
-
* `false` then this means that the
|
|
147
|
-
* scroll is happening as a result of
|
|
148
|
-
* the `value` property programmatically changing
|
|
149
|
-
* either by an application or by the user via the keyboard.
|
|
150
|
-
*/
|
|
151
|
-
this.exitInputMode();
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
activeEl = activeElement;
|
|
155
|
-
this.setPickerItemActiveState(activeElement, true);
|
|
156
|
-
timeout = setTimeout(() => {
|
|
157
|
-
this.isScrolling = false;
|
|
158
|
-
enableHaptics && hapticSelectionEnd();
|
|
159
|
-
/**
|
|
160
|
-
* Certain tasks (such as those that
|
|
161
|
-
* cause re-renders) should only be done
|
|
162
|
-
* once scrolling has finished, otherwise
|
|
163
|
-
* flickering may occur.
|
|
164
|
-
*/
|
|
165
|
-
const { scrollEndCallback } = this;
|
|
166
|
-
if (scrollEndCallback) {
|
|
167
|
-
scrollEndCallback();
|
|
168
|
-
this.scrollEndCallback = undefined;
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Reset this flag as the
|
|
172
|
-
* next scroll interaction could
|
|
173
|
-
* be a scroll from the user. In this
|
|
174
|
-
* case, we should exit input mode.
|
|
175
|
-
*/
|
|
176
|
-
this.canExitInputMode = true;
|
|
177
|
-
const dataIndex = activeElement.getAttribute('data-index');
|
|
178
|
-
/**
|
|
179
|
-
* If no value it is
|
|
180
|
-
* possible we hit one of the
|
|
181
|
-
* empty padding columns.
|
|
182
|
-
*/
|
|
183
|
-
if (dataIndex === null) {
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
const index = parseInt(dataIndex, 10);
|
|
187
|
-
const selectedItem = this.items[index];
|
|
188
|
-
if (selectedItem.value !== this.value) {
|
|
189
|
-
this.setValue(selectedItem.value);
|
|
190
|
-
}
|
|
191
|
-
}, 250);
|
|
192
|
-
});
|
|
193
|
-
};
|
|
194
|
-
/**
|
|
195
|
-
* Wrap this in an raf so that the scroll callback
|
|
196
|
-
* does not fire when component is initially shown.
|
|
197
|
-
*/
|
|
198
|
-
raf(() => {
|
|
199
|
-
el.addEventListener('scroll', scrollCallback);
|
|
200
|
-
this.destroyScrollListener = () => {
|
|
201
|
-
el.removeEventListener('scroll', scrollCallback);
|
|
202
|
-
};
|
|
203
|
-
});
|
|
204
|
-
};
|
|
205
|
-
/**
|
|
206
|
-
* Tells the parent picker to
|
|
207
|
-
* exit text entry mode. This is only called
|
|
208
|
-
* when the selected item changes during scroll, so
|
|
209
|
-
* we know that the user likely wants to scroll
|
|
210
|
-
* instead of type.
|
|
211
|
-
*/
|
|
212
|
-
this.exitInputMode = () => {
|
|
213
|
-
const { parentEl } = this;
|
|
214
|
-
if (parentEl == null)
|
|
215
|
-
return;
|
|
216
|
-
parentEl.exitInputMode();
|
|
217
|
-
/**
|
|
218
|
-
* setInputModeActive only takes
|
|
219
|
-
* effect once scrolling stops to avoid
|
|
220
|
-
* a component re-render while scrolling.
|
|
221
|
-
* However, we want the visual active
|
|
222
|
-
* indicator to go away immediately, so
|
|
223
|
-
* we call classList.remove here.
|
|
224
|
-
*/
|
|
225
|
-
this.el.classList.remove('picker-column-active');
|
|
226
|
-
};
|
|
227
|
-
this.isActive = false;
|
|
228
|
-
this.disabled = false;
|
|
229
|
-
this.items = [];
|
|
230
|
-
this.value = undefined;
|
|
231
|
-
this.color = 'primary';
|
|
232
|
-
this.numericInput = false;
|
|
233
|
-
}
|
|
234
|
-
valueChange() {
|
|
235
|
-
if (this.isColumnVisible) {
|
|
236
|
-
/**
|
|
237
|
-
* Only scroll the active item into view when the picker column
|
|
238
|
-
* is actively visible to the user.
|
|
239
|
-
*/
|
|
240
|
-
this.scrollActiveItemIntoView();
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Only setup scroll listeners
|
|
245
|
-
* when the picker is visible, otherwise
|
|
246
|
-
* the container will have a scroll
|
|
247
|
-
* height of 0px.
|
|
248
|
-
*/
|
|
249
|
-
componentWillLoad() {
|
|
250
|
-
const visibleCallback = (entries) => {
|
|
251
|
-
const ev = entries[0];
|
|
252
|
-
if (ev.isIntersecting) {
|
|
253
|
-
const { activeItem, el } = this;
|
|
254
|
-
this.isColumnVisible = true;
|
|
255
|
-
/**
|
|
256
|
-
* Because this initial call to scrollActiveItemIntoView has to fire before
|
|
257
|
-
* the scroll listener is set up, we need to manage the active class manually.
|
|
258
|
-
*/
|
|
259
|
-
const oldActive = getElementRoot(el).querySelector(`.${PICKER_ITEM_ACTIVE_CLASS}`);
|
|
260
|
-
if (oldActive) {
|
|
261
|
-
this.setPickerItemActiveState(oldActive, false);
|
|
262
|
-
}
|
|
263
|
-
this.scrollActiveItemIntoView();
|
|
264
|
-
if (activeItem) {
|
|
265
|
-
this.setPickerItemActiveState(activeItem, true);
|
|
266
|
-
}
|
|
267
|
-
this.initializeScrollListener();
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
this.isColumnVisible = false;
|
|
271
|
-
if (this.destroyScrollListener) {
|
|
272
|
-
this.destroyScrollListener();
|
|
273
|
-
this.destroyScrollListener = undefined;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
};
|
|
277
|
-
new IntersectionObserver(visibleCallback, { threshold: 0.001 }).observe(this.el);
|
|
278
|
-
const parentEl = (this.parentEl = this.el.closest('ion-picker-internal'));
|
|
279
|
-
if (parentEl !== null) {
|
|
280
|
-
// TODO(FW-2832): type
|
|
281
|
-
parentEl.addEventListener('ionInputModeChange', (ev) => this.inputModeChange(ev));
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
componentDidRender() {
|
|
285
|
-
var _a;
|
|
286
|
-
const { activeItem, items, isColumnVisible, value } = this;
|
|
287
|
-
if (isColumnVisible) {
|
|
288
|
-
if (activeItem) {
|
|
289
|
-
this.scrollActiveItemIntoView();
|
|
290
|
-
}
|
|
291
|
-
else if (((_a = items[0]) === null || _a === void 0 ? void 0 : _a.value) !== value) {
|
|
292
|
-
/**
|
|
293
|
-
* If the picker column does not have an active item and the current value
|
|
294
|
-
* does not match the first item in the picker column, that means
|
|
295
|
-
* the value is out of bounds. In this case, we assign the value to the
|
|
296
|
-
* first item to match the scroll position of the column.
|
|
297
|
-
*
|
|
298
|
-
*/
|
|
299
|
-
this.setValue(items[0].value);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
/** @internal */
|
|
304
|
-
async scrollActiveItemIntoView() {
|
|
305
|
-
const activeEl = this.activeItem;
|
|
306
|
-
if (activeEl) {
|
|
307
|
-
this.centerPickerItemInView(activeEl, false, false);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Sets the value prop and fires the ionChange event.
|
|
312
|
-
* This is used when we need to fire ionChange from
|
|
313
|
-
* user-generated events that cannot be caught with normal
|
|
314
|
-
* input/change event listeners.
|
|
315
|
-
* @internal
|
|
316
|
-
*/
|
|
317
|
-
async setValue(value) {
|
|
318
|
-
const { items } = this;
|
|
319
|
-
this.value = value;
|
|
320
|
-
const findItem = items.find((item) => item.value === value && item.disabled !== true);
|
|
321
|
-
if (findItem) {
|
|
322
|
-
this.ionChange.emit(findItem);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
get activeItem() {
|
|
326
|
-
// If the whole picker column is disabled, the current value should appear active
|
|
327
|
-
// If the current value item is specifically disabled, it should not appear active
|
|
328
|
-
const selector = `.picker-item[data-value="${this.value}"]${this.disabled ? '' : ':not([disabled])'}`;
|
|
329
|
-
return getElementRoot(this.el).querySelector(selector);
|
|
330
|
-
}
|
|
331
|
-
render() {
|
|
332
|
-
const { items, color, disabled: pickerDisabled, isActive, numericInput } = this;
|
|
333
|
-
const mode = getIonMode(this);
|
|
334
|
-
/**
|
|
335
|
-
* exportparts is needed so ion-datetime can expose the parts
|
|
336
|
-
* from two layers of shadow nesting. If this causes problems,
|
|
337
|
-
* the attribute can be moved to datetime.tsx and set on every
|
|
338
|
-
* instance of ion-picker-column-internal there instead.
|
|
339
|
-
*/
|
|
340
|
-
return (h(Host, { exportparts: `${PICKER_ITEM_PART}, ${PICKER_ITEM_ACTIVE_PART}`, disabled: pickerDisabled, tabindex: pickerDisabled ? null : 0, class: createColorClasses(color, {
|
|
341
|
-
[mode]: true,
|
|
342
|
-
['picker-column-active']: isActive,
|
|
343
|
-
['picker-column-numeric-input']: numericInput,
|
|
344
|
-
}) }, 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"), items.map((item, index) => {
|
|
345
|
-
const isItemDisabled = pickerDisabled || item.disabled || false;
|
|
346
|
-
return (h("button", { tabindex: "-1", class: {
|
|
347
|
-
'picker-item': true,
|
|
348
|
-
}, "data-value": item.value, "data-index": index, onClick: (ev) => {
|
|
349
|
-
this.centerPickerItemInView(ev.target, true);
|
|
350
|
-
}, disabled: isItemDisabled, part: PICKER_ITEM_PART }, item.text));
|
|
351
|
-
}), 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")));
|
|
352
|
-
}
|
|
353
|
-
get el() { return this; }
|
|
354
|
-
static get watchers() { return {
|
|
355
|
-
"value": ["valueChange"]
|
|
356
|
-
}; }
|
|
357
|
-
static get style() { return {
|
|
358
|
-
ios: pickerColumnInternalIosCss,
|
|
359
|
-
md: pickerColumnInternalMdCss
|
|
360
|
-
}; }
|
|
361
|
-
}, [33, "ion-picker-column-internal", {
|
|
362
|
-
"disabled": [4],
|
|
363
|
-
"items": [16],
|
|
364
|
-
"value": [1032],
|
|
365
|
-
"color": [513],
|
|
366
|
-
"numericInput": [4, "numeric-input"],
|
|
367
|
-
"isActive": [32],
|
|
368
|
-
"scrollActiveItemIntoView": [64],
|
|
369
|
-
"setValue": [64]
|
|
370
|
-
}, undefined, {
|
|
371
|
-
"value": ["valueChange"]
|
|
372
|
-
}]);
|
|
373
|
-
const PICKER_ITEM_ACTIVE_CLASS = 'picker-item-active';
|
|
374
|
-
const PICKER_ITEM_PART = 'wheel-item';
|
|
375
|
-
const PICKER_ITEM_ACTIVE_PART = 'active';
|
|
376
|
-
function defineCustomElement() {
|
|
377
|
-
if (typeof customElements === "undefined") {
|
|
378
|
-
return;
|
|
379
|
-
}
|
|
380
|
-
const components = ["ion-picker-column-internal"];
|
|
381
|
-
components.forEach(tagName => { switch (tagName) {
|
|
382
|
-
case "ion-picker-column-internal":
|
|
383
|
-
if (!customElements.get(tagName)) {
|
|
384
|
-
customElements.define(tagName, PickerColumnInternal);
|
|
385
|
-
}
|
|
386
|
-
break;
|
|
387
|
-
} });
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
export { PickerColumnInternal as P, defineCustomElement as d };
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
-
*/
|
|
4
|
-
import { writeTask } from '@stencil/core/internal/client';
|
|
5
|
-
import { c as createAnimation } from './animation.js';
|
|
6
|
-
import { t as transitionEndAsync, c as componentOnReady, m as clamp } from './helpers.js';
|
|
7
|
-
|
|
8
|
-
const getRefresherAnimationType = (contentEl) => {
|
|
9
|
-
const previousSibling = contentEl.previousElementSibling;
|
|
10
|
-
const hasHeader = previousSibling !== null && previousSibling.tagName === 'ION-HEADER';
|
|
11
|
-
return hasHeader ? 'translate' : 'scale';
|
|
12
|
-
};
|
|
13
|
-
const createPullingAnimation = (type, pullingSpinner, refresherEl) => {
|
|
14
|
-
return type === 'scale'
|
|
15
|
-
? createScaleAnimation(pullingSpinner, refresherEl)
|
|
16
|
-
: createTranslateAnimation(pullingSpinner, refresherEl);
|
|
17
|
-
};
|
|
18
|
-
const createBaseAnimation = (pullingRefresherIcon) => {
|
|
19
|
-
const spinner = pullingRefresherIcon.querySelector('ion-spinner');
|
|
20
|
-
const circle = spinner.shadowRoot.querySelector('circle');
|
|
21
|
-
const spinnerArrowContainer = pullingRefresherIcon.querySelector('.spinner-arrow-container');
|
|
22
|
-
const arrowContainer = pullingRefresherIcon.querySelector('.arrow-container');
|
|
23
|
-
const arrow = arrowContainer ? arrowContainer.querySelector('ion-icon') : null;
|
|
24
|
-
const baseAnimation = createAnimation().duration(1000).easing('ease-out');
|
|
25
|
-
const spinnerArrowContainerAnimation = createAnimation()
|
|
26
|
-
.addElement(spinnerArrowContainer)
|
|
27
|
-
.keyframes([
|
|
28
|
-
{ offset: 0, opacity: '0.3' },
|
|
29
|
-
{ offset: 0.45, opacity: '0.3' },
|
|
30
|
-
{ offset: 0.55, opacity: '1' },
|
|
31
|
-
{ offset: 1, opacity: '1' },
|
|
32
|
-
]);
|
|
33
|
-
const circleInnerAnimation = createAnimation()
|
|
34
|
-
.addElement(circle)
|
|
35
|
-
.keyframes([
|
|
36
|
-
{ offset: 0, strokeDasharray: '1px, 200px' },
|
|
37
|
-
{ offset: 0.2, strokeDasharray: '1px, 200px' },
|
|
38
|
-
{ offset: 0.55, strokeDasharray: '100px, 200px' },
|
|
39
|
-
{ offset: 1, strokeDasharray: '100px, 200px' },
|
|
40
|
-
]);
|
|
41
|
-
const circleOuterAnimation = createAnimation()
|
|
42
|
-
.addElement(spinner)
|
|
43
|
-
.keyframes([
|
|
44
|
-
{ offset: 0, transform: 'rotate(-90deg)' },
|
|
45
|
-
{ offset: 1, transform: 'rotate(210deg)' },
|
|
46
|
-
]);
|
|
47
|
-
/**
|
|
48
|
-
* Only add arrow animation if present
|
|
49
|
-
* this allows users to customize the spinners
|
|
50
|
-
* without errors being thrown
|
|
51
|
-
*/
|
|
52
|
-
if (arrowContainer && arrow) {
|
|
53
|
-
const arrowContainerAnimation = createAnimation()
|
|
54
|
-
.addElement(arrowContainer)
|
|
55
|
-
.keyframes([
|
|
56
|
-
{ offset: 0, transform: 'rotate(0deg)' },
|
|
57
|
-
{ offset: 0.3, transform: 'rotate(0deg)' },
|
|
58
|
-
{ offset: 0.55, transform: 'rotate(280deg)' },
|
|
59
|
-
{ offset: 1, transform: 'rotate(400deg)' },
|
|
60
|
-
]);
|
|
61
|
-
const arrowAnimation = createAnimation()
|
|
62
|
-
.addElement(arrow)
|
|
63
|
-
.keyframes([
|
|
64
|
-
{ offset: 0, transform: 'translateX(2px) scale(0)' },
|
|
65
|
-
{ offset: 0.3, transform: 'translateX(2px) scale(0)' },
|
|
66
|
-
{ offset: 0.55, transform: 'translateX(-1.5px) scale(1)' },
|
|
67
|
-
{ offset: 1, transform: 'translateX(-1.5px) scale(1)' },
|
|
68
|
-
]);
|
|
69
|
-
baseAnimation.addAnimation([arrowContainerAnimation, arrowAnimation]);
|
|
70
|
-
}
|
|
71
|
-
return baseAnimation.addAnimation([spinnerArrowContainerAnimation, circleInnerAnimation, circleOuterAnimation]);
|
|
72
|
-
};
|
|
73
|
-
const createScaleAnimation = (pullingRefresherIcon, refresherEl) => {
|
|
74
|
-
/**
|
|
75
|
-
* Do not take the height of the refresher icon
|
|
76
|
-
* because at this point the DOM has not updated,
|
|
77
|
-
* so the refresher icon is still hidden with
|
|
78
|
-
* display: none.
|
|
79
|
-
* The `ion-refresher` container height
|
|
80
|
-
* is roughly the amount we need to offset
|
|
81
|
-
* the icon by when pulling down.
|
|
82
|
-
*/
|
|
83
|
-
const height = refresherEl.clientHeight;
|
|
84
|
-
const spinnerAnimation = createAnimation()
|
|
85
|
-
.addElement(pullingRefresherIcon)
|
|
86
|
-
.keyframes([
|
|
87
|
-
{ offset: 0, transform: `scale(0) translateY(-${height}px)` },
|
|
88
|
-
{ offset: 1, transform: 'scale(1) translateY(100px)' },
|
|
89
|
-
]);
|
|
90
|
-
return createBaseAnimation(pullingRefresherIcon).addAnimation([spinnerAnimation]);
|
|
91
|
-
};
|
|
92
|
-
const createTranslateAnimation = (pullingRefresherIcon, refresherEl) => {
|
|
93
|
-
/**
|
|
94
|
-
* Do not take the height of the refresher icon
|
|
95
|
-
* because at this point the DOM has not updated,
|
|
96
|
-
* so the refresher icon is still hidden with
|
|
97
|
-
* display: none.
|
|
98
|
-
* The `ion-refresher` container height
|
|
99
|
-
* is roughly the amount we need to offset
|
|
100
|
-
* the icon by when pulling down.
|
|
101
|
-
*/
|
|
102
|
-
const height = refresherEl.clientHeight;
|
|
103
|
-
const spinnerAnimation = createAnimation()
|
|
104
|
-
.addElement(pullingRefresherIcon)
|
|
105
|
-
.keyframes([
|
|
106
|
-
{ offset: 0, transform: `translateY(-${height}px)` },
|
|
107
|
-
{ offset: 1, transform: 'translateY(100px)' },
|
|
108
|
-
]);
|
|
109
|
-
return createBaseAnimation(pullingRefresherIcon).addAnimation([spinnerAnimation]);
|
|
110
|
-
};
|
|
111
|
-
const createSnapBackAnimation = (pullingRefresherIcon) => {
|
|
112
|
-
return createAnimation()
|
|
113
|
-
.duration(125)
|
|
114
|
-
.addElement(pullingRefresherIcon)
|
|
115
|
-
.fromTo('transform', 'translateY(var(--ion-pulling-refresher-translate, 100px))', 'translateY(0px)');
|
|
116
|
-
};
|
|
117
|
-
// iOS Native Refresher
|
|
118
|
-
// -----------------------------
|
|
119
|
-
const setSpinnerOpacity = (spinner, opacity) => {
|
|
120
|
-
spinner.style.setProperty('opacity', opacity.toString());
|
|
121
|
-
};
|
|
122
|
-
const handleScrollWhilePulling = (ticks, numTicks, pullAmount) => {
|
|
123
|
-
const max = 1;
|
|
124
|
-
writeTask(() => {
|
|
125
|
-
ticks.forEach((el, i) => {
|
|
126
|
-
/**
|
|
127
|
-
* Compute the opacity of each tick
|
|
128
|
-
* mark as a percentage of the pullAmount
|
|
129
|
-
* offset by max / numTicks so
|
|
130
|
-
* the tick marks are shown staggered.
|
|
131
|
-
*/
|
|
132
|
-
const min = i * (max / numTicks);
|
|
133
|
-
const range = max - min;
|
|
134
|
-
const start = pullAmount - min;
|
|
135
|
-
const progression = clamp(0, start / range, 1);
|
|
136
|
-
el.style.setProperty('opacity', progression.toString());
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
};
|
|
140
|
-
const handleScrollWhileRefreshing = (spinner, lastVelocityY) => {
|
|
141
|
-
writeTask(() => {
|
|
142
|
-
// If user pulls down quickly, the spinner should spin faster
|
|
143
|
-
spinner.style.setProperty('--refreshing-rotation-duration', lastVelocityY >= 1.0 ? '0.5s' : '2s');
|
|
144
|
-
spinner.style.setProperty('opacity', '1');
|
|
145
|
-
});
|
|
146
|
-
};
|
|
147
|
-
const translateElement = (el, value, duration = 200) => {
|
|
148
|
-
if (!el) {
|
|
149
|
-
return Promise.resolve();
|
|
150
|
-
}
|
|
151
|
-
const trans = transitionEndAsync(el, duration);
|
|
152
|
-
writeTask(() => {
|
|
153
|
-
el.style.setProperty('transition', `${duration}ms all ease-out`);
|
|
154
|
-
if (value === undefined) {
|
|
155
|
-
el.style.removeProperty('transform');
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
el.style.setProperty('transform', `translate3d(0px, ${value}, 0px)`);
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
return trans;
|
|
162
|
-
};
|
|
163
|
-
// Utils
|
|
164
|
-
// -----------------------------
|
|
165
|
-
/**
|
|
166
|
-
* In order to use the native iOS refresher the device must support rubber band scrolling.
|
|
167
|
-
* As part of this, we need to exclude Desktop Safari because it has a slightly different rubber band effect that is not compatible with the native refresher in Ionic.
|
|
168
|
-
*
|
|
169
|
-
* We also need to be careful not to include devices that spoof their user agent.
|
|
170
|
-
* For example, when using iOS emulation in Chrome the user agent will be spoofed such that
|
|
171
|
-
* navigator.maxTouchPointer > 0. To work around this,
|
|
172
|
-
* we check to see if the apple-pay-logo is supported as a named image which is only
|
|
173
|
-
* true on Apple devices.
|
|
174
|
-
*
|
|
175
|
-
* We previously checked referencEl.style.webkitOverflowScrolling to explicitly check
|
|
176
|
-
* for rubber band support. However, this property was removed on iPadOS and it's possible
|
|
177
|
-
* that this will be removed on iOS in the future too.
|
|
178
|
-
*
|
|
179
|
-
*/
|
|
180
|
-
const supportsRubberBandScrolling = () => {
|
|
181
|
-
return navigator.maxTouchPoints > 0 && CSS.supports('background: -webkit-named-image(apple-pay-logo-black)');
|
|
182
|
-
};
|
|
183
|
-
const shouldUseNativeRefresher = async (referenceEl, mode) => {
|
|
184
|
-
const refresherContent = referenceEl.querySelector('ion-refresher-content');
|
|
185
|
-
if (!refresherContent) {
|
|
186
|
-
return Promise.resolve(false);
|
|
187
|
-
}
|
|
188
|
-
await new Promise((resolve) => componentOnReady(refresherContent, resolve));
|
|
189
|
-
const pullingSpinner = referenceEl.querySelector('ion-refresher-content .refresher-pulling ion-spinner');
|
|
190
|
-
const refreshingSpinner = referenceEl.querySelector('ion-refresher-content .refresher-refreshing ion-spinner');
|
|
191
|
-
return (pullingSpinner !== null &&
|
|
192
|
-
refreshingSpinner !== null &&
|
|
193
|
-
((mode === 'ios' && supportsRubberBandScrolling()) || mode === 'md'));
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
export { setSpinnerOpacity as a, handleScrollWhilePulling as b, createPullingAnimation as c, createSnapBackAnimation as d, supportsRubberBandScrolling as e, getRefresherAnimationType as g, handleScrollWhileRefreshing as h, shouldUseNativeRefresher as s, translateElement as t };
|