@ionic/core 7.8.4 → 7.8.5-dev.11712853167.1d02271c
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/ion-modal.js +43 -19
- package/components/ios.transition.js +90 -67
- package/dist/cjs/{app-globals-91158c0d.js → app-globals-c5eb104c.js} +1 -1
- package/dist/cjs/{button-active-aff0cd49.js → button-active-181d142e.js} +1 -1
- package/dist/cjs/{hardware-back-button-d76ddd64.js → hardware-back-button-adba3ac7.js} +2 -2
- package/dist/cjs/{index-9d02ee85.js → index-034460de.js} +3 -3
- package/dist/cjs/{index-ea0555d6.js → index-22617dd6.js} +25 -2
- package/dist/cjs/{index-e39d723a.js → index-5c38afe7.js} +2 -2
- package/dist/cjs/index.cjs.js +8 -8
- package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-action-sheet.cjs.entry.js +5 -5
- package/dist/cjs/ion-alert.cjs.entry.js +5 -5
- package/dist/cjs/ion-app_8.cjs.entry.js +6 -6
- 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 -2
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
- package/dist/cjs/ion-checkbox.cjs.entry.js +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 +2 -2
- package/dist/cjs/ion-datetime_3.cjs.entry.js +4 -4
- 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 +2 -2
- package/dist/cjs/ion-item-option_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
- package/dist/cjs/ion-loading.cjs.entry.js +4 -4
- package/dist/cjs/ion-menu_3.cjs.entry.js +5 -5
- package/dist/cjs/ion-modal.cjs.entry.js +48 -24
- package/dist/cjs/ion-nav_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-picker-column-internal.cjs.entry.js +2 -2
- package/dist/cjs/ion-picker-internal.cjs.entry.js +1 -1
- package/dist/cjs/ion-popover.cjs.entry.js +5 -5
- 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 +2 -2
- package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
- 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 +2 -2
- package/dist/cjs/ion-segment_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-select_3.cjs.entry.js +4 -4
- 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 +2 -2
- package/dist/cjs/ion-toast.cjs.entry.js +4 -4
- package/dist/cjs/ion-toggle.cjs.entry.js +2 -2
- package/dist/cjs/{ionic-global-a54cbba1.js → ionic-global-c5503e93.js} +1 -1
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-259214c9.js → ios.transition-26c5adb2.js} +92 -69
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/{md.transition-6eb6de75.js → md.transition-75533d44.js} +2 -2
- package/dist/cjs/{overlays-d2e50d5e.js → overlays-129dfc13.js} +2 -2
- package/dist/cjs/{status-tap-1d7f8e6d.js → status-tap-03d82840.js} +1 -1
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/modal/gestures/sheet.js +45 -20
- package/dist/collection/utils/transition/ios.transition.js +90 -67
- package/dist/docs.json +2 -2
- package/dist/esm/{app-globals-ffe436be.js → app-globals-318eef52.js} +1 -1
- package/dist/esm/{button-active-365a5048.js → button-active-414be235.js} +1 -1
- package/dist/esm/{hardware-back-button-65a9e284.js → hardware-back-button-6107a37c.js} +2 -2
- package/dist/esm/{index-4feaf001.js → index-68278972.js} +3 -3
- package/dist/esm/{index-7ab328b6.js → index-6e05b96e.js} +2 -2
- package/dist/esm/{index-73fa3fe8.js → index-a1a47f01.js} +25 -2
- package/dist/esm/index.js +8 -8
- package/dist/esm/ion-accordion_2.entry.js +2 -2
- package/dist/esm/ion-action-sheet.entry.js +5 -5
- package/dist/esm/ion-alert.entry.js +5 -5
- package/dist/esm/ion-app_8.entry.js +6 -6
- 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 -2
- package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
- package/dist/esm/ion-button_2.entry.js +2 -2
- package/dist/esm/ion-card_5.entry.js +2 -2
- package/dist/esm/ion-checkbox.entry.js +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 +2 -2
- package/dist/esm/ion-datetime_3.entry.js +4 -4
- 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 +2 -2
- package/dist/esm/ion-item-option_3.entry.js +2 -2
- package/dist/esm/ion-item_8.entry.js +2 -2
- package/dist/esm/ion-loading.entry.js +4 -4
- package/dist/esm/ion-menu_3.entry.js +5 -5
- package/dist/esm/ion-modal.entry.js +48 -24
- package/dist/esm/ion-nav_2.entry.js +3 -3
- package/dist/esm/ion-picker-column-internal.entry.js +2 -2
- package/dist/esm/ion-picker-internal.entry.js +1 -1
- package/dist/esm/ion-popover.entry.js +5 -5
- 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 +2 -2
- package/dist/esm/ion-refresher_2.entry.js +2 -2
- package/dist/esm/ion-reorder_2.entry.js +2 -2
- 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 +2 -2
- package/dist/esm/ion-segment_2.entry.js +2 -2
- package/dist/esm/ion-select_3.entry.js +4 -4
- 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 +2 -2
- package/dist/esm/ion-toast.entry.js +4 -4
- package/dist/esm/ion-toggle.entry.js +2 -2
- package/dist/esm/{ionic-global-d89a6ff6.js → ionic-global-94f25d1b.js} +1 -1
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-1e29344b.js → ios.transition-471e5da1.js} +92 -69
- package/dist/esm/loader.js +4 -4
- package/dist/esm/{md.transition-b2a9590f.js → md.transition-12c07448.js} +2 -2
- package/dist/esm/{overlays-ad4b0449.js → overlays-b874c3c3.js} +2 -2
- package/dist/esm/{status-tap-0575d437.js → status-tap-dfea3607.js} +1 -1
- package/dist/esm-es5/app-globals-318eef52.js +4 -0
- package/dist/esm-es5/{button-active-365a5048.js → button-active-414be235.js} +1 -1
- package/dist/esm-es5/{hardware-back-button-65a9e284.js → hardware-back-button-6107a37c.js} +1 -1
- package/dist/esm-es5/{index-4feaf001.js → index-68278972.js} +1 -1
- package/dist/esm-es5/{index-7ab328b6.js → index-6e05b96e.js} +1 -1
- package/dist/esm-es5/index-a1a47f01.js +5 -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-internal.entry.js +1 -1
- package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
- package/dist/esm-es5/ion-popover.entry.js +1 -1
- package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
- package/dist/esm-es5/ion-radio_2.entry.js +1 -1
- package/dist/esm-es5/ion-range.entry.js +1 -1
- package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
- package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
- package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
- package/dist/esm-es5/ion-route_4.entry.js +1 -1
- package/dist/esm-es5/ion-searchbar.entry.js +1 -1
- package/dist/esm-es5/ion-segment_2.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.entry.js +1 -1
- package/dist/esm-es5/ion-spinner.entry.js +1 -1
- package/dist/esm-es5/ion-split-pane.entry.js +1 -1
- package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
- package/dist/esm-es5/ion-tab_2.entry.js +1 -1
- package/dist/esm-es5/ion-text.entry.js +1 -1
- package/dist/esm-es5/ion-textarea.entry.js +1 -1
- package/dist/esm-es5/ion-toast.entry.js +1 -1
- package/dist/esm-es5/ion-toggle.entry.js +1 -1
- package/dist/esm-es5/{ionic-global-d89a6ff6.js → ionic-global-94f25d1b.js} +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/ios.transition-471e5da1.js +4 -0
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/{md.transition-b2a9590f.js → md.transition-12c07448.js} +1 -1
- package/dist/esm-es5/{overlays-ad4b0449.js → overlays-b874c3c3.js} +1 -1
- package/dist/esm-es5/{status-tap-0575d437.js → status-tap-dfea3607.js} +1 -1
- 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-6f71c22a.system.js → p-0020292d.system.js} +1 -1
- package/dist/ionic/{p-38a6676c.system.entry.js → p-03934b94.system.entry.js} +1 -1
- package/dist/ionic/{p-fc181726.entry.js → p-05fed772.entry.js} +1 -1
- package/dist/ionic/p-0aac3a1c.js +4 -0
- package/dist/ionic/{p-2937c804.js → p-0b743628.js} +1 -1
- package/dist/ionic/{p-af95011e.entry.js → p-125d2908.entry.js} +1 -1
- package/dist/ionic/p-1a244094.js +4 -0
- package/dist/ionic/{p-62fd7981.js → p-1e151efb.js} +1 -1
- package/dist/ionic/{p-d2a8f5fa.system.entry.js → p-21040a67.system.entry.js} +1 -1
- package/dist/ionic/{p-0eefae7b.entry.js → p-23632fd0.entry.js} +1 -1
- package/dist/ionic/p-2433bf5e.system.js +4 -0
- package/dist/ionic/{p-f903eb7d.system.entry.js → p-247e63fd.system.entry.js} +1 -1
- package/dist/ionic/{p-04f8ce80.system.entry.js → p-26a2dee6.system.entry.js} +1 -1
- package/dist/ionic/{p-57120260.system.js → p-280f1fe7.system.js} +1 -1
- package/dist/ionic/{p-abbbeaba.system.entry.js → p-297e4ce7.system.entry.js} +1 -1
- package/dist/ionic/{p-f3633fec.system.entry.js → p-2a072db2.system.entry.js} +1 -1
- package/dist/ionic/{p-32ea2e50.system.entry.js → p-2b3b0b54.system.entry.js} +1 -1
- package/dist/ionic/{p-570dc347.entry.js → p-2b899443.entry.js} +1 -1
- package/dist/ionic/{p-fc72a291.system.entry.js → p-2bb08088.system.entry.js} +1 -1
- package/dist/ionic/{p-46e80228.entry.js → p-2bb106c7.entry.js} +1 -1
- package/dist/ionic/p-2c1408df.system.js +5 -0
- package/dist/ionic/{p-eb1a11f5.system.entry.js → p-2e125dd9.system.entry.js} +1 -1
- package/dist/ionic/p-3420329d.js +4 -0
- package/dist/ionic/{p-3809bcb3.entry.js → p-374838e4.entry.js} +1 -1
- package/dist/ionic/{p-a729bebd.system.entry.js → p-37634767.system.entry.js} +2 -2
- package/dist/ionic/p-37aab7f7.js +4 -0
- package/dist/ionic/{p-1074dc9c.entry.js → p-3c79d175.entry.js} +1 -1
- package/dist/ionic/{p-cd02f6a0.system.entry.js → p-411bb8ab.system.entry.js} +1 -1
- package/dist/ionic/{p-e1d3938b.system.entry.js → p-414c5031.system.entry.js} +1 -1
- package/dist/ionic/{p-8cef747b.system.entry.js → p-43e8c02c.system.entry.js} +1 -1
- package/dist/ionic/{p-fa2c6408.entry.js → p-43f5c725.entry.js} +1 -1
- package/dist/ionic/{p-c433a6e5.system.entry.js → p-4882ea93.system.entry.js} +1 -1
- package/dist/ionic/{p-2ee0f9ea.entry.js → p-4c17462c.entry.js} +1 -1
- package/dist/ionic/{p-bea20d99.entry.js → p-4c180665.entry.js} +1 -1
- package/dist/ionic/{p-1a5e8ef6.entry.js → p-4da978ac.entry.js} +1 -1
- package/dist/ionic/{p-cc7671a8.js → p-4e9552a3.js} +1 -1
- package/dist/ionic/{p-7ba16351.entry.js → p-4f529650.entry.js} +1 -1
- package/dist/ionic/{p-653571b9.entry.js → p-4f9c9520.entry.js} +1 -1
- package/dist/ionic/{p-860b3f85.system.entry.js → p-501fdfc9.system.entry.js} +1 -1
- package/dist/ionic/p-5241515e.entry.js +4 -0
- package/dist/ionic/{p-bc88ef1d.entry.js → p-53f0e4b3.entry.js} +1 -1
- package/dist/ionic/{p-ffd75444.entry.js → p-566a486f.entry.js} +1 -1
- package/dist/ionic/{p-02acfd9b.entry.js → p-56f612c8.entry.js} +1 -1
- package/dist/ionic/{p-ea911adc.entry.js → p-5c5f0e52.entry.js} +1 -1
- package/dist/ionic/{p-e1033126.entry.js → p-5de97589.entry.js} +1 -1
- package/dist/ionic/{p-d984a2c0.system.entry.js → p-606fe277.system.entry.js} +1 -1
- package/dist/ionic/{p-c902b920.entry.js → p-62c92975.entry.js} +1 -1
- package/dist/ionic/{p-ca86ce8b.system.js → p-638865d1.system.js} +1 -1
- package/dist/ionic/{p-b3865ce7.system.entry.js → p-64504c7e.system.entry.js} +1 -1
- package/dist/ionic/{p-088feb27.entry.js → p-69da5865.entry.js} +1 -1
- package/dist/ionic/{p-e0cb34f8.system.entry.js → p-6ac774c4.system.entry.js} +1 -1
- package/dist/ionic/{p-73c93bea.entry.js → p-6ad1136b.entry.js} +1 -1
- package/dist/ionic/{p-c018f9fe.system.entry.js → p-700367a8.system.entry.js} +1 -1
- package/dist/ionic/{p-778a6434.system.entry.js → p-74c2643d.system.entry.js} +1 -1
- package/dist/ionic/{p-69aef109.system.entry.js → p-776f7b9e.system.entry.js} +1 -1
- package/dist/ionic/{p-7227be31.system.entry.js → p-7b54e97a.system.entry.js} +1 -1
- package/dist/ionic/{p-7827a8be.entry.js → p-815c676c.entry.js} +1 -1
- package/dist/ionic/{p-646666ae.system.entry.js → p-81c8fa81.system.entry.js} +1 -1
- package/dist/ionic/{p-ec6ebf53.entry.js → p-8444e4c0.entry.js} +1 -1
- package/dist/ionic/{p-d7a4999f.system.js → p-85ea810f.system.js} +1 -1
- package/dist/ionic/{p-22e338ed.system.js → p-8668ffee.system.js} +1 -1
- package/dist/ionic/{p-d72271fc.system.entry.js → p-8a335b91.system.entry.js} +1 -1
- package/dist/ionic/{p-372821dd.entry.js → p-8e501f6d.entry.js} +1 -1
- package/dist/ionic/{p-e31d0fc8.entry.js → p-91a2236e.entry.js} +1 -1
- package/dist/ionic/{p-efab9748.system.entry.js → p-93f86b06.system.entry.js} +1 -1
- package/dist/ionic/{p-1ebd49bd.entry.js → p-99d8b626.entry.js} +1 -1
- package/dist/ionic/{p-8f0f6730.system.entry.js → p-9bb9bf60.system.entry.js} +1 -1
- package/dist/ionic/{p-94d5c60d.system.entry.js → p-9c59ee42.system.entry.js} +1 -1
- package/dist/ionic/{p-f5f7036b.system.entry.js → p-9d3363aa.system.entry.js} +1 -1
- package/dist/ionic/{p-e8f0395c.entry.js → p-9dcea5cf.entry.js} +1 -1
- package/dist/ionic/{p-f1daa176.entry.js → p-9e66b84e.entry.js} +1 -1
- package/dist/ionic/{p-4bba20da.entry.js → p-9eb085d3.entry.js} +1 -1
- package/dist/ionic/{p-978deeb5.entry.js → p-9fbfbaef.entry.js} +1 -1
- package/dist/ionic/{p-1f8e1929.system.entry.js → p-9fdb1942.system.entry.js} +1 -1
- package/dist/ionic/{p-6bd4492c.system.js → p-a04ecf1a.system.js} +1 -1
- package/dist/ionic/{p-cad68eca.system.entry.js → p-a258956b.system.entry.js} +1 -1
- package/dist/ionic/{p-fa6e566d.entry.js → p-a79c1471.entry.js} +1 -1
- package/dist/ionic/p-a875459d.system.js +4 -0
- package/dist/ionic/{p-859d74d5.entry.js → p-a8c3c9d7.entry.js} +1 -1
- package/dist/ionic/{p-5772a3f2.entry.js → p-a995f103.entry.js} +1 -1
- package/dist/ionic/{p-0a5d04a9.system.entry.js → p-aa0d4e1d.system.entry.js} +1 -1
- package/dist/ionic/{p-5f1f7b4b.entry.js → p-ad60590b.entry.js} +1 -1
- package/dist/ionic/{p-ed009d87.entry.js → p-b3623a7a.entry.js} +1 -1
- package/dist/ionic/{p-901f55f0.entry.js → p-b8f79d94.entry.js} +1 -1
- package/dist/ionic/p-bb5bbcdf.js +4 -0
- package/dist/ionic/{p-a91da641.system.entry.js → p-bb732fc5.system.entry.js} +1 -1
- package/dist/ionic/{p-bbdabfe2.entry.js → p-bba6295f.entry.js} +1 -1
- package/dist/ionic/{p-e070ac08.entry.js → p-be403dff.entry.js} +1 -1
- package/dist/ionic/{p-9e47fa2b.entry.js → p-bf1d7fb7.entry.js} +1 -1
- package/dist/ionic/{p-475d3ec9.system.entry.js → p-c12ba45a.system.entry.js} +1 -1
- package/dist/ionic/{p-f414cdd1.system.entry.js → p-c37c6e02.system.entry.js} +1 -1
- package/dist/ionic/{p-a423cc03.entry.js → p-c52eaf99.entry.js} +1 -1
- package/dist/ionic/{p-9c7d36c2.system.entry.js → p-c89f8a0f.system.entry.js} +1 -1
- package/dist/ionic/{p-09e6390b.system.entry.js → p-ce14e639.system.entry.js} +1 -1
- package/dist/ionic/{p-213ed770.entry.js → p-d42e9dd3.entry.js} +1 -1
- package/dist/ionic/{p-27547811.entry.js → p-d4918a1c.entry.js} +1 -1
- package/dist/ionic/{p-0d6f7a8d.js → p-d68ecea4.js} +1 -1
- package/dist/ionic/{p-a8a7559f.system.entry.js → p-d979d307.system.entry.js} +2 -2
- package/dist/ionic/p-da4e89b0.system.entry.js +4 -0
- package/dist/ionic/{p-347df354.system.entry.js → p-db82f522.system.entry.js} +1 -1
- package/dist/ionic/{p-fb1c7d14.entry.js → p-dbabce3e.entry.js} +1 -1
- package/dist/ionic/{p-5dc045c4.system.entry.js → p-dc93d7a5.system.entry.js} +2 -2
- package/dist/ionic/p-de6623db.system.js +4 -0
- package/dist/ionic/{p-a6f245a3.entry.js → p-dec423a3.entry.js} +1 -1
- package/dist/ionic/{p-3c7a1de4.system.entry.js → p-e06d65b3.system.entry.js} +1 -1
- package/dist/ionic/{p-9377ed64.system.js → p-e34eefb5.system.js} +1 -1
- package/dist/ionic/{p-f0a3c05c.system.js → p-e933e886.system.js} +1 -1
- package/dist/ionic/p-ead0d463.js +5 -0
- package/dist/ionic/{p-4e12129a.system.entry.js → p-ede01836.system.entry.js} +2 -2
- package/dist/ionic/{p-2389b3f9.js → p-efef9f3a.js} +1 -1
- package/dist/ionic/p-f3d07c09.system.entry.js +4 -0
- package/dist/ionic/{p-99d12446.system.entry.js → p-f52f47f6.system.entry.js} +1 -1
- package/dist/ionic/{p-34474b14.system.js → p-f549716b.system.js} +1 -1
- package/dist/ionic/{p-2682335f.entry.js → p-f9d9b0ab.entry.js} +1 -1
- package/dist/ionic/{p-dba4d4d3.system.entry.js → p-fa1bd328.system.entry.js} +1 -1
- package/dist/ionic/{p-e723ba57.system.entry.js → p-febc627c.system.entry.js} +1 -1
- package/hydrate/index.js +152 -98
- package/package.json +1 -1
- package/dist/esm-es5/app-globals-ffe436be.js +0 -4
- package/dist/esm-es5/index-73fa3fe8.js +0 -5
- package/dist/esm-es5/ios.transition-1e29344b.js +0 -4
- package/dist/ionic/p-0c6c8ee3.entry.js +0 -4
- package/dist/ionic/p-332c71da.system.js +0 -5
- package/dist/ionic/p-47bf8d13.js +0 -4
- package/dist/ionic/p-49f4eca2.js +0 -4
- package/dist/ionic/p-5f06ce0e.system.entry.js +0 -4
- package/dist/ionic/p-7a7015a5.system.js +0 -4
- package/dist/ionic/p-7f524a94.system.entry.js +0 -4
- package/dist/ionic/p-ba5911d9.js +0 -4
- package/dist/ionic/p-c96c06b2.js +0 -4
- package/dist/ionic/p-c9efc963.system.js +0 -4
- package/dist/ionic/p-d5539f7e.js +0 -4
- package/dist/ionic/p-f0d5d883.system.js +0 -4
- package/dist/ionic/p-f419feca.js +0 -5
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
6
|
const animation = require('./animation-c2840aea.js');
|
|
7
|
-
const index = require('./index-
|
|
7
|
+
const index = require('./index-034460de.js');
|
|
8
8
|
require('./index-c8d52405.js');
|
|
9
9
|
require('./helpers-da4c0ed1.js');
|
|
10
|
-
require('./index-
|
|
10
|
+
require('./index-22617dd6.js');
|
|
11
11
|
|
|
12
12
|
const DURATION = 540;
|
|
13
13
|
// TODO(FW-2832): types
|
|
@@ -61,20 +61,22 @@ const createLargeTitleTransition = (rootAnimation, rtl, backDirection, enteringE
|
|
|
61
61
|
const leavingLargeTitleBox = leavingLargeTitle.getBoundingClientRect();
|
|
62
62
|
const enteringBackButtonBox = enteringBackButton.getBoundingClientRect();
|
|
63
63
|
const enteringBackButtonTextEl = shadow(enteringBackButton).querySelector('.button-text');
|
|
64
|
-
|
|
64
|
+
// Text element not rendered if developers pass text="" to the back button
|
|
65
|
+
const enteringBackButtonTextBox = enteringBackButtonTextEl === null || enteringBackButtonTextEl === void 0 ? void 0 : enteringBackButtonTextEl.getBoundingClientRect();
|
|
65
66
|
const leavingLargeTitleTextEl = shadow(leavingLargeTitle).querySelector('.toolbar-title');
|
|
66
67
|
const leavingLargeTitleTextBox = leavingLargeTitleTextEl.getBoundingClientRect();
|
|
67
|
-
animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
|
|
68
|
+
animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
|
|
68
69
|
animateBackButton(rootAnimation, rtl, backDirection, enteringBackButton, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox, leavingLargeTitle, leavingLargeTitleTextBox);
|
|
69
70
|
}
|
|
70
71
|
else if (shouldAnimationBackward) {
|
|
71
72
|
const enteringLargeTitleBox = enteringLargeTitle.getBoundingClientRect();
|
|
72
73
|
const leavingBackButtonBox = leavingBackButton.getBoundingClientRect();
|
|
73
74
|
const leavingBackButtonTextEl = shadow(leavingBackButton).querySelector('.button-text');
|
|
74
|
-
|
|
75
|
+
// Text element not rendered if developers pass text="" to the back button
|
|
76
|
+
const leavingBackButtonTextBox = leavingBackButtonTextEl === null || leavingBackButtonTextEl === void 0 ? void 0 : leavingBackButtonTextEl.getBoundingClientRect();
|
|
75
77
|
const enteringLargeTitleTextEl = shadow(enteringLargeTitle).querySelector('.toolbar-title');
|
|
76
78
|
const enteringLargeTitleTextBox = enteringLargeTitleTextEl.getBoundingClientRect();
|
|
77
|
-
animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
|
|
79
|
+
animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
|
|
78
80
|
animateBackButton(rootAnimation, rtl, backDirection, leavingBackButton, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox, enteringLargeTitle, enteringLargeTitleTextBox);
|
|
79
81
|
}
|
|
80
82
|
return {
|
|
@@ -88,26 +90,29 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
88
90
|
const TEXT_ORIGIN_X = rtl ? 'right' : 'left';
|
|
89
91
|
const ICON_ORIGIN_X = rtl ? 'left' : 'right';
|
|
90
92
|
const CONTAINER_ORIGIN_X = rtl ? 'right' : 'left';
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
* If the texts do not match up then the back button text scale adjusts
|
|
95
|
-
* to not perfectly match the large title text otherwise the
|
|
96
|
-
* proportions will be incorrect.
|
|
97
|
-
* When the texts match we scale both the width and height to account for
|
|
98
|
-
* font weight differences between the title and back button.
|
|
99
|
-
*/
|
|
100
|
-
const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
|
|
101
|
-
const WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
|
|
102
|
-
/**
|
|
103
|
-
* We subtract an offset to account for slight sizing/padding
|
|
104
|
-
* differences between the title and the back button.
|
|
105
|
-
*/
|
|
106
|
-
const HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
|
|
107
|
-
const TEXT_START_SCALE = doTitleAndButtonTextsMatch
|
|
108
|
-
? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`
|
|
109
|
-
: `scale(${HEIGHT_SCALE})`;
|
|
93
|
+
let WIDTH_SCALE = 1;
|
|
94
|
+
let HEIGHT_SCALE = 1;
|
|
95
|
+
let TEXT_START_SCALE = `scale(${HEIGHT_SCALE})`;
|
|
110
96
|
const TEXT_END_SCALE = 'scale(1)';
|
|
97
|
+
if (backButtonTextEl && backButtonTextBox) {
|
|
98
|
+
/**
|
|
99
|
+
* When the title and back button texts match then they should overlap during the
|
|
100
|
+
* page transition. If the texts do not match up then the back button text scale
|
|
101
|
+
* adjusts to not perfectly match the large title text otherwise the proportions
|
|
102
|
+
* will be incorrect. When the texts match we scale both the width and height to
|
|
103
|
+
* account for font weight differences between the title and back button.
|
|
104
|
+
*/
|
|
105
|
+
const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
|
|
106
|
+
WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
|
|
107
|
+
/**
|
|
108
|
+
* Subtract an offset to account for slight sizing/padding differences between the
|
|
109
|
+
* title and the back button.
|
|
110
|
+
*/
|
|
111
|
+
HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
|
|
112
|
+
if (doTitleAndButtonTextsMatch) {
|
|
113
|
+
TEXT_START_SCALE = `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
111
116
|
const backButtonIconEl = shadow(backButtonEl).querySelector('ion-icon');
|
|
112
117
|
const backButtonIconBox = backButtonIconEl.getBoundingClientRect();
|
|
113
118
|
/**
|
|
@@ -204,11 +209,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
204
209
|
top: '0px',
|
|
205
210
|
[CONTAINER_ORIGIN_X]: '0px',
|
|
206
211
|
})
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
+
/**
|
|
213
|
+
* The write hooks must be set on this animation as it is guaranteed to run. Other
|
|
214
|
+
* animations such as the back button text animation will not run if the back button
|
|
215
|
+
* has no visible text.
|
|
216
|
+
*/
|
|
212
217
|
.beforeAddWrite(() => {
|
|
213
218
|
backButtonEl.style.setProperty('display', 'none');
|
|
214
219
|
clonedBackButtonEl.style.setProperty(TEXT_ORIGIN_X, BACK_BUTTON_START_OFFSET);
|
|
@@ -217,6 +222,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
217
222
|
backButtonEl.style.setProperty('display', '');
|
|
218
223
|
clonedBackButtonEl.style.setProperty('display', 'none');
|
|
219
224
|
clonedBackButtonEl.style.removeProperty(TEXT_ORIGIN_X);
|
|
225
|
+
})
|
|
226
|
+
.keyframes(CONTAINER_KEYFRAMES);
|
|
227
|
+
enteringBackButtonTextAnimation
|
|
228
|
+
.beforeStyles({
|
|
229
|
+
'transform-origin': `${TEXT_ORIGIN_X} top`,
|
|
220
230
|
})
|
|
221
231
|
.keyframes(TEXT_KEYFRAMES);
|
|
222
232
|
enteringBackButtonIconAnimation
|
|
@@ -230,7 +240,7 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
230
240
|
enteringBackButtonAnimation,
|
|
231
241
|
]);
|
|
232
242
|
};
|
|
233
|
-
const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonTextEl, backButtonTextBox) => {
|
|
243
|
+
const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonBox, backButtonTextEl, backButtonTextBox) => {
|
|
234
244
|
var _a, _b;
|
|
235
245
|
/**
|
|
236
246
|
* The horizontal transform origin for the large title
|
|
@@ -250,52 +260,65 @@ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, larg
|
|
|
250
260
|
* title and the back button due to padding and font weight.
|
|
251
261
|
*/
|
|
252
262
|
const LARGE_TITLE_TRANSLATION_OFFSET = 8;
|
|
263
|
+
let END_TRANSLATE_X = rtl
|
|
264
|
+
? `-${window.innerWidth - backButtonBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
265
|
+
: `${backButtonBox.x + LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
253
266
|
/**
|
|
254
|
-
*
|
|
255
|
-
* This ensures that the back button and title overlap during
|
|
256
|
-
* the animation. Note that since both elements either fade in
|
|
257
|
-
* or fade out over the course of the animation, neither element
|
|
258
|
-
* will be fully visible on top of the other. As a result, the overlap
|
|
259
|
-
* does not need to be perfect, so approximate values are acceptable here.
|
|
267
|
+
* How much to scale the large title up/down by.
|
|
260
268
|
*/
|
|
261
|
-
|
|
262
|
-
? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
263
|
-
: `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
269
|
+
let HEIGHT_SCALE = 0.5;
|
|
264
270
|
/**
|
|
265
|
-
* The
|
|
266
|
-
* should match with the top of the
|
|
267
|
-
* back button text element.
|
|
268
|
-
* We subtract 2px to account for the top padding
|
|
269
|
-
* on the large title element.
|
|
271
|
+
* The large title always starts full size.
|
|
270
272
|
*/
|
|
271
|
-
const
|
|
272
|
-
const END_TRANSLATE_Y = `${backButtonTextBox.y - LARGE_TITLE_TOP_PADDING}px`;
|
|
273
|
+
const START_SCALE = 'scale(1)';
|
|
273
274
|
/**
|
|
274
|
-
*
|
|
275
|
-
*
|
|
276
|
-
*
|
|
277
|
-
* large title should start at (roughly) the size of the back button
|
|
278
|
-
* and then scale up to its original size.
|
|
279
|
-
*
|
|
280
|
-
* Note that since both elements either fade in
|
|
281
|
-
* or fade out over the course of the animation, neither element
|
|
282
|
-
* will be fully visible on top of the other. As a result, the overlap
|
|
283
|
-
* does not need to be perfect, so approximate values are acceptable here.
|
|
275
|
+
* By default, we don't worry about having the large title scaled to perfectly
|
|
276
|
+
* match the back button because we don't know if the back button's text matches
|
|
277
|
+
* the large title's text.
|
|
284
278
|
*/
|
|
279
|
+
let END_SCALE = `scale(${HEIGHT_SCALE})`;
|
|
280
|
+
// Text element not rendered if developers pass text="" to the back button
|
|
281
|
+
if (backButtonTextEl && backButtonTextBox) {
|
|
282
|
+
/**
|
|
283
|
+
* The scaled title should (roughly) overlap the back button. This ensures that
|
|
284
|
+
* the back button and title overlap during the animation. Note that since both
|
|
285
|
+
* elements either fade in or fade out over the course of the animation, neither
|
|
286
|
+
* element will be fully visible on top of the other. As a result, the overlap
|
|
287
|
+
* does not need to be perfect, so approximate values are acceptable here.
|
|
288
|
+
*/
|
|
289
|
+
END_TRANSLATE_X = rtl
|
|
290
|
+
? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
291
|
+
: `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
292
|
+
/**
|
|
293
|
+
* In the forward direction, the large title should start at its normal size and
|
|
294
|
+
* then scale down to be (roughly) the size of the back button on the other view.
|
|
295
|
+
* In the backward direction, the large title should start at (roughly) the size
|
|
296
|
+
* of the back button and then scale up to its original size.
|
|
297
|
+
* Note that since both elements either fade in or fade out over the course of the
|
|
298
|
+
* animation, neither element will be fully visible on top of the other. As a result,
|
|
299
|
+
* the overlap does not need to be perfect, so approximate values are acceptable here.
|
|
300
|
+
*/
|
|
301
|
+
/**
|
|
302
|
+
* When the title and back button texts match then they should overlap during the
|
|
303
|
+
* page transition. If the texts do not match up then the large title text scale
|
|
304
|
+
* adjusts to not perfectly match the back button text otherwise the proportions
|
|
305
|
+
* will be incorrect. When the texts match we scale both the width and height to
|
|
306
|
+
* account for font weight differences between the title and back button.
|
|
307
|
+
*/
|
|
308
|
+
const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
|
|
309
|
+
const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
|
|
310
|
+
HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
|
|
311
|
+
if (doTitleAndButtonTextsMatch) {
|
|
312
|
+
END_SCALE = `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
285
315
|
/**
|
|
286
|
-
*
|
|
287
|
-
*
|
|
288
|
-
* If the texts do not match up then the large title text scale adjusts
|
|
289
|
-
* to not perfectly match the back button text otherwise the
|
|
290
|
-
* proportions will be incorrect.
|
|
291
|
-
* When the texts match we scale both the width and height to account for
|
|
292
|
-
* font weight differences between the title and back button.
|
|
316
|
+
* The midpoints of the back button and the title should align such that the back
|
|
317
|
+
* button and title appear to be centered with each other.
|
|
293
318
|
*/
|
|
294
|
-
const
|
|
295
|
-
const
|
|
296
|
-
const
|
|
297
|
-
const START_SCALE = 'scale(1)';
|
|
298
|
-
const END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
|
|
319
|
+
const backButtonMidPoint = backButtonBox.top + backButtonBox.height / 2;
|
|
320
|
+
const titleMidPoint = (largeTitleBox.height * HEIGHT_SCALE) / 2;
|
|
321
|
+
const END_TRANSLATE_Y = `${backButtonMidPoint - titleMidPoint}px`;
|
|
299
322
|
const BACKWARDS_KEYFRAMES = [
|
|
300
323
|
{ offset: 0, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
|
|
301
324
|
{ offset: 0.1, opacity: 0 },
|
package/dist/cjs/loader.cjs.js
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
7
7
|
|
|
8
|
-
const index = require('./index-
|
|
9
|
-
const appGlobals = require('./app-globals-
|
|
10
|
-
require('./ionic-global-
|
|
8
|
+
const index = require('./index-22617dd6.js');
|
|
9
|
+
const appGlobals = require('./app-globals-c5eb104c.js');
|
|
10
|
+
require('./ionic-global-c5503e93.js');
|
|
11
11
|
|
|
12
12
|
const defineCustomElements = async (win, options) => {
|
|
13
13
|
if (typeof window === 'undefined') return undefined;
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
6
|
const animation = require('./animation-c2840aea.js');
|
|
7
|
-
const index = require('./index-
|
|
7
|
+
const index = require('./index-034460de.js');
|
|
8
8
|
require('./index-c8d52405.js');
|
|
9
9
|
require('./helpers-da4c0ed1.js');
|
|
10
|
-
require('./index-
|
|
10
|
+
require('./index-22617dd6.js');
|
|
11
11
|
|
|
12
12
|
const mdTransitionAnimation = (_, opts) => {
|
|
13
13
|
var _a, _b, _c;
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
6
|
const index = require('./index-c8d52405.js');
|
|
7
|
-
const hardwareBackButton = require('./hardware-back-button-
|
|
8
|
-
const ionicGlobal = require('./ionic-global-
|
|
7
|
+
const hardwareBackButton = require('./hardware-back-button-adba3ac7.js');
|
|
8
|
+
const ionicGlobal = require('./ionic-global-c5503e93.js');
|
|
9
9
|
const frameworkDelegate = require('./framework-delegate-e0e13baa.js');
|
|
10
10
|
const helpers = require('./helpers-da4c0ed1.js');
|
|
11
11
|
const index$1 = require('./index-5915f9b3.js');
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
+
import { isIonContent, findClosestIonContent } from "../../../utils/content/index";
|
|
4
5
|
import { createGesture } from "../../../utils/gesture/index";
|
|
5
|
-
import { clamp, raf } from "../../../utils/helpers";
|
|
6
|
+
import { clamp, raf, getElementRoot } from "../../../utils/helpers";
|
|
6
7
|
import { getBackdropValueForSheet } from "../utils";
|
|
7
8
|
import { calculateSpringStep, handleCanDismiss } from "./utils";
|
|
8
9
|
export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], getCurrentBreakpoint, onDismiss, onBreakpointChange) => {
|
|
@@ -87,19 +88,32 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
87
88
|
}
|
|
88
89
|
const canStart = (detail) => {
|
|
89
90
|
/**
|
|
90
|
-
* If the
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
91
|
+
* If we are swiping on the content, swiping should only be possible if the content
|
|
92
|
+
* is scrolled all the way to the top so that we do not interfere with scrolling.
|
|
93
|
+
*
|
|
94
|
+
* We cannot assume that the `ion-content` target will remain consistent between swipes.
|
|
95
|
+
* For example, when using ion-nav within a modal it is possible to swipe, push a view,
|
|
96
|
+
* and then swipe again. The target content will not be the same between swipes.
|
|
94
97
|
*/
|
|
95
|
-
const
|
|
98
|
+
const contentEl = findClosestIonContent(detail.event.target);
|
|
96
99
|
currentBreakpoint = getCurrentBreakpoint();
|
|
97
|
-
if (currentBreakpoint === 1 &&
|
|
98
|
-
|
|
100
|
+
if (currentBreakpoint === 1 && contentEl) {
|
|
101
|
+
/**
|
|
102
|
+
* The modal should never swipe to close on the content with a refresher.
|
|
103
|
+
* Note 1: We cannot solve this by making this gesture have a higher priority than
|
|
104
|
+
* the refresher gesture as the iOS native refresh gesture uses a scroll listener in
|
|
105
|
+
* addition to a gesture.
|
|
106
|
+
*
|
|
107
|
+
* Note 2: Do not use getScrollElement here because we need this to be a synchronous
|
|
108
|
+
* operation, and getScrollElement is asynchronous.
|
|
109
|
+
*/
|
|
110
|
+
const scrollEl = isIonContent(contentEl) ? getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
|
|
111
|
+
const hasRefresherInContent = !!contentEl.querySelector('ion-refresher');
|
|
112
|
+
return !hasRefresherInContent && scrollEl.scrollTop === 0;
|
|
99
113
|
}
|
|
100
114
|
return true;
|
|
101
115
|
};
|
|
102
|
-
const onStart = () => {
|
|
116
|
+
const onStart = (detail) => {
|
|
103
117
|
/**
|
|
104
118
|
* If canDismiss is anything other than `true`
|
|
105
119
|
* then users should be able to swipe down
|
|
@@ -114,11 +128,10 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
114
128
|
*/
|
|
115
129
|
canDismissBlocksGesture = baseEl.canDismiss !== undefined && baseEl.canDismiss !== true && minBreakpoint === 0;
|
|
116
130
|
/**
|
|
117
|
-
* If
|
|
118
|
-
*
|
|
119
|
-
* the sheet will expand and the content will scroll.
|
|
131
|
+
* If we are pulling down, then it is possible we are pulling on the content.
|
|
132
|
+
* We do not want scrolling to happen at the same time as the gesture.
|
|
120
133
|
*/
|
|
121
|
-
if (contentEl) {
|
|
134
|
+
if (detail.deltaY > 0 && contentEl) {
|
|
122
135
|
contentEl.scrollY = false;
|
|
123
136
|
}
|
|
124
137
|
raf(() => {
|
|
@@ -131,6 +144,15 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
131
144
|
animation.progressStart(true, 1 - currentBreakpoint);
|
|
132
145
|
};
|
|
133
146
|
const onMove = (detail) => {
|
|
147
|
+
/**
|
|
148
|
+
* If we are pulling down, then it is possible we are pulling on the content.
|
|
149
|
+
* We do not want scrolling to happen at the same time as the gesture.
|
|
150
|
+
* This accounts for when the user scrolls down, scrolls all the way up, and then
|
|
151
|
+
* pulls down again such that the modal should start to move.
|
|
152
|
+
*/
|
|
153
|
+
if (detail.deltaY > 0 && contentEl) {
|
|
154
|
+
contentEl.scrollY = false;
|
|
155
|
+
}
|
|
134
156
|
/**
|
|
135
157
|
* Given the change in gesture position on the Y axis,
|
|
136
158
|
* compute where the offset of the animation should be
|
|
@@ -233,6 +255,16 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
233
255
|
else if (!shouldRemainOpen) {
|
|
234
256
|
onDismiss();
|
|
235
257
|
}
|
|
258
|
+
/**
|
|
259
|
+
* If the sheet is going to be fully expanded then we should enable
|
|
260
|
+
* scrolling immediately. The sheet modal animation takes ~500ms to finish
|
|
261
|
+
* so if we wait until then there is a visible delay for when scrolling is
|
|
262
|
+
* re-enabled. Native iOS allows for scrolling on the sheet modal as soon
|
|
263
|
+
* as the gesture is released, so we align with that.
|
|
264
|
+
*/
|
|
265
|
+
if (contentEl && snapToBreakpoint === breakpoints[breakpoints.length - 1]) {
|
|
266
|
+
contentEl.scrollY = true;
|
|
267
|
+
}
|
|
236
268
|
return new Promise((resolve) => {
|
|
237
269
|
animation
|
|
238
270
|
.onFinish(() => {
|
|
@@ -251,13 +283,6 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
|
|
|
251
283
|
animation.progressStart(true, 1 - snapToBreakpoint);
|
|
252
284
|
currentBreakpoint = snapToBreakpoint;
|
|
253
285
|
onBreakpointChange(currentBreakpoint);
|
|
254
|
-
/**
|
|
255
|
-
* If the sheet is fully expanded, we can safely
|
|
256
|
-
* enable scrolling again.
|
|
257
|
-
*/
|
|
258
|
-
if (contentEl && currentBreakpoint === breakpoints[breakpoints.length - 1]) {
|
|
259
|
-
contentEl.scrollY = true;
|
|
260
|
-
}
|
|
261
286
|
/**
|
|
262
287
|
* Backdrop should become enabled
|
|
263
288
|
* after the backdropBreakpoint value
|
|
@@ -55,20 +55,22 @@ const createLargeTitleTransition = (rootAnimation, rtl, backDirection, enteringE
|
|
|
55
55
|
const leavingLargeTitleBox = leavingLargeTitle.getBoundingClientRect();
|
|
56
56
|
const enteringBackButtonBox = enteringBackButton.getBoundingClientRect();
|
|
57
57
|
const enteringBackButtonTextEl = shadow(enteringBackButton).querySelector('.button-text');
|
|
58
|
-
|
|
58
|
+
// Text element not rendered if developers pass text="" to the back button
|
|
59
|
+
const enteringBackButtonTextBox = enteringBackButtonTextEl === null || enteringBackButtonTextEl === void 0 ? void 0 : enteringBackButtonTextEl.getBoundingClientRect();
|
|
59
60
|
const leavingLargeTitleTextEl = shadow(leavingLargeTitle).querySelector('.toolbar-title');
|
|
60
61
|
const leavingLargeTitleTextBox = leavingLargeTitleTextEl.getBoundingClientRect();
|
|
61
|
-
animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
|
|
62
|
+
animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
|
|
62
63
|
animateBackButton(rootAnimation, rtl, backDirection, enteringBackButton, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox, leavingLargeTitle, leavingLargeTitleTextBox);
|
|
63
64
|
}
|
|
64
65
|
else if (shouldAnimationBackward) {
|
|
65
66
|
const enteringLargeTitleBox = enteringLargeTitle.getBoundingClientRect();
|
|
66
67
|
const leavingBackButtonBox = leavingBackButton.getBoundingClientRect();
|
|
67
68
|
const leavingBackButtonTextEl = shadow(leavingBackButton).querySelector('.button-text');
|
|
68
|
-
|
|
69
|
+
// Text element not rendered if developers pass text="" to the back button
|
|
70
|
+
const leavingBackButtonTextBox = leavingBackButtonTextEl === null || leavingBackButtonTextEl === void 0 ? void 0 : leavingBackButtonTextEl.getBoundingClientRect();
|
|
69
71
|
const enteringLargeTitleTextEl = shadow(enteringLargeTitle).querySelector('.toolbar-title');
|
|
70
72
|
const enteringLargeTitleTextBox = enteringLargeTitleTextEl.getBoundingClientRect();
|
|
71
|
-
animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
|
|
73
|
+
animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
|
|
72
74
|
animateBackButton(rootAnimation, rtl, backDirection, leavingBackButton, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox, enteringLargeTitle, enteringLargeTitleTextBox);
|
|
73
75
|
}
|
|
74
76
|
return {
|
|
@@ -82,26 +84,29 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
82
84
|
const TEXT_ORIGIN_X = rtl ? 'right' : 'left';
|
|
83
85
|
const ICON_ORIGIN_X = rtl ? 'left' : 'right';
|
|
84
86
|
const CONTAINER_ORIGIN_X = rtl ? 'right' : 'left';
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
* If the texts do not match up then the back button text scale adjusts
|
|
89
|
-
* to not perfectly match the large title text otherwise the
|
|
90
|
-
* proportions will be incorrect.
|
|
91
|
-
* When the texts match we scale both the width and height to account for
|
|
92
|
-
* font weight differences between the title and back button.
|
|
93
|
-
*/
|
|
94
|
-
const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
|
|
95
|
-
const WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
|
|
96
|
-
/**
|
|
97
|
-
* We subtract an offset to account for slight sizing/padding
|
|
98
|
-
* differences between the title and the back button.
|
|
99
|
-
*/
|
|
100
|
-
const HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
|
|
101
|
-
const TEXT_START_SCALE = doTitleAndButtonTextsMatch
|
|
102
|
-
? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`
|
|
103
|
-
: `scale(${HEIGHT_SCALE})`;
|
|
87
|
+
let WIDTH_SCALE = 1;
|
|
88
|
+
let HEIGHT_SCALE = 1;
|
|
89
|
+
let TEXT_START_SCALE = `scale(${HEIGHT_SCALE})`;
|
|
104
90
|
const TEXT_END_SCALE = 'scale(1)';
|
|
91
|
+
if (backButtonTextEl && backButtonTextBox) {
|
|
92
|
+
/**
|
|
93
|
+
* When the title and back button texts match then they should overlap during the
|
|
94
|
+
* page transition. If the texts do not match up then the back button text scale
|
|
95
|
+
* adjusts to not perfectly match the large title text otherwise the proportions
|
|
96
|
+
* will be incorrect. When the texts match we scale both the width and height to
|
|
97
|
+
* account for font weight differences between the title and back button.
|
|
98
|
+
*/
|
|
99
|
+
const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
|
|
100
|
+
WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
|
|
101
|
+
/**
|
|
102
|
+
* Subtract an offset to account for slight sizing/padding differences between the
|
|
103
|
+
* title and the back button.
|
|
104
|
+
*/
|
|
105
|
+
HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
|
|
106
|
+
if (doTitleAndButtonTextsMatch) {
|
|
107
|
+
TEXT_START_SCALE = `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
105
110
|
const backButtonIconEl = shadow(backButtonEl).querySelector('ion-icon');
|
|
106
111
|
const backButtonIconBox = backButtonIconEl.getBoundingClientRect();
|
|
107
112
|
/**
|
|
@@ -198,11 +203,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
198
203
|
top: '0px',
|
|
199
204
|
[CONTAINER_ORIGIN_X]: '0px',
|
|
200
205
|
})
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
+
/**
|
|
207
|
+
* The write hooks must be set on this animation as it is guaranteed to run. Other
|
|
208
|
+
* animations such as the back button text animation will not run if the back button
|
|
209
|
+
* has no visible text.
|
|
210
|
+
*/
|
|
206
211
|
.beforeAddWrite(() => {
|
|
207
212
|
backButtonEl.style.setProperty('display', 'none');
|
|
208
213
|
clonedBackButtonEl.style.setProperty(TEXT_ORIGIN_X, BACK_BUTTON_START_OFFSET);
|
|
@@ -211,6 +216,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
211
216
|
backButtonEl.style.setProperty('display', '');
|
|
212
217
|
clonedBackButtonEl.style.setProperty('display', 'none');
|
|
213
218
|
clonedBackButtonEl.style.removeProperty(TEXT_ORIGIN_X);
|
|
219
|
+
})
|
|
220
|
+
.keyframes(CONTAINER_KEYFRAMES);
|
|
221
|
+
enteringBackButtonTextAnimation
|
|
222
|
+
.beforeStyles({
|
|
223
|
+
'transform-origin': `${TEXT_ORIGIN_X} top`,
|
|
214
224
|
})
|
|
215
225
|
.keyframes(TEXT_KEYFRAMES);
|
|
216
226
|
enteringBackButtonIconAnimation
|
|
@@ -224,7 +234,7 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
224
234
|
enteringBackButtonAnimation,
|
|
225
235
|
]);
|
|
226
236
|
};
|
|
227
|
-
const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonTextEl, backButtonTextBox) => {
|
|
237
|
+
const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonBox, backButtonTextEl, backButtonTextBox) => {
|
|
228
238
|
var _a, _b;
|
|
229
239
|
/**
|
|
230
240
|
* The horizontal transform origin for the large title
|
|
@@ -244,52 +254,65 @@ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, larg
|
|
|
244
254
|
* title and the back button due to padding and font weight.
|
|
245
255
|
*/
|
|
246
256
|
const LARGE_TITLE_TRANSLATION_OFFSET = 8;
|
|
257
|
+
let END_TRANSLATE_X = rtl
|
|
258
|
+
? `-${window.innerWidth - backButtonBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
259
|
+
: `${backButtonBox.x + LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
247
260
|
/**
|
|
248
|
-
*
|
|
249
|
-
* This ensures that the back button and title overlap during
|
|
250
|
-
* the animation. Note that since both elements either fade in
|
|
251
|
-
* or fade out over the course of the animation, neither element
|
|
252
|
-
* will be fully visible on top of the other. As a result, the overlap
|
|
253
|
-
* does not need to be perfect, so approximate values are acceptable here.
|
|
261
|
+
* How much to scale the large title up/down by.
|
|
254
262
|
*/
|
|
255
|
-
|
|
256
|
-
? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
257
|
-
: `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
263
|
+
let HEIGHT_SCALE = 0.5;
|
|
258
264
|
/**
|
|
259
|
-
* The
|
|
260
|
-
* should match with the top of the
|
|
261
|
-
* back button text element.
|
|
262
|
-
* We subtract 2px to account for the top padding
|
|
263
|
-
* on the large title element.
|
|
265
|
+
* The large title always starts full size.
|
|
264
266
|
*/
|
|
265
|
-
const
|
|
266
|
-
const END_TRANSLATE_Y = `${backButtonTextBox.y - LARGE_TITLE_TOP_PADDING}px`;
|
|
267
|
+
const START_SCALE = 'scale(1)';
|
|
267
268
|
/**
|
|
268
|
-
*
|
|
269
|
-
*
|
|
270
|
-
*
|
|
271
|
-
* large title should start at (roughly) the size of the back button
|
|
272
|
-
* and then scale up to its original size.
|
|
273
|
-
*
|
|
274
|
-
* Note that since both elements either fade in
|
|
275
|
-
* or fade out over the course of the animation, neither element
|
|
276
|
-
* will be fully visible on top of the other. As a result, the overlap
|
|
277
|
-
* does not need to be perfect, so approximate values are acceptable here.
|
|
269
|
+
* By default, we don't worry about having the large title scaled to perfectly
|
|
270
|
+
* match the back button because we don't know if the back button's text matches
|
|
271
|
+
* the large title's text.
|
|
278
272
|
*/
|
|
273
|
+
let END_SCALE = `scale(${HEIGHT_SCALE})`;
|
|
274
|
+
// Text element not rendered if developers pass text="" to the back button
|
|
275
|
+
if (backButtonTextEl && backButtonTextBox) {
|
|
276
|
+
/**
|
|
277
|
+
* The scaled title should (roughly) overlap the back button. This ensures that
|
|
278
|
+
* the back button and title overlap during the animation. Note that since both
|
|
279
|
+
* elements either fade in or fade out over the course of the animation, neither
|
|
280
|
+
* element will be fully visible on top of the other. As a result, the overlap
|
|
281
|
+
* does not need to be perfect, so approximate values are acceptable here.
|
|
282
|
+
*/
|
|
283
|
+
END_TRANSLATE_X = rtl
|
|
284
|
+
? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
285
|
+
: `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
286
|
+
/**
|
|
287
|
+
* In the forward direction, the large title should start at its normal size and
|
|
288
|
+
* then scale down to be (roughly) the size of the back button on the other view.
|
|
289
|
+
* In the backward direction, the large title should start at (roughly) the size
|
|
290
|
+
* of the back button and then scale up to its original size.
|
|
291
|
+
* Note that since both elements either fade in or fade out over the course of the
|
|
292
|
+
* animation, neither element will be fully visible on top of the other. As a result,
|
|
293
|
+
* the overlap does not need to be perfect, so approximate values are acceptable here.
|
|
294
|
+
*/
|
|
295
|
+
/**
|
|
296
|
+
* When the title and back button texts match then they should overlap during the
|
|
297
|
+
* page transition. If the texts do not match up then the large title text scale
|
|
298
|
+
* adjusts to not perfectly match the back button text otherwise the proportions
|
|
299
|
+
* will be incorrect. When the texts match we scale both the width and height to
|
|
300
|
+
* account for font weight differences between the title and back button.
|
|
301
|
+
*/
|
|
302
|
+
const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
|
|
303
|
+
const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
|
|
304
|
+
HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
|
|
305
|
+
if (doTitleAndButtonTextsMatch) {
|
|
306
|
+
END_SCALE = `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
279
309
|
/**
|
|
280
|
-
*
|
|
281
|
-
*
|
|
282
|
-
* If the texts do not match up then the large title text scale adjusts
|
|
283
|
-
* to not perfectly match the back button text otherwise the
|
|
284
|
-
* proportions will be incorrect.
|
|
285
|
-
* When the texts match we scale both the width and height to account for
|
|
286
|
-
* font weight differences between the title and back button.
|
|
310
|
+
* The midpoints of the back button and the title should align such that the back
|
|
311
|
+
* button and title appear to be centered with each other.
|
|
287
312
|
*/
|
|
288
|
-
const
|
|
289
|
-
const
|
|
290
|
-
const
|
|
291
|
-
const START_SCALE = 'scale(1)';
|
|
292
|
-
const END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
|
|
313
|
+
const backButtonMidPoint = backButtonBox.top + backButtonBox.height / 2;
|
|
314
|
+
const titleMidPoint = (largeTitleBox.height * HEIGHT_SCALE) / 2;
|
|
315
|
+
const END_TRANSLATE_Y = `${backButtonMidPoint - titleMidPoint}px`;
|
|
293
316
|
const BACKWARDS_KEYFRAMES = [
|
|
294
317
|
{ offset: 0, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
|
|
295
318
|
{ offset: 0.1, opacity: 0 },
|