@ionic/core 8.0.2-nightly.20240429 → 8.0.2-nightly.20240501
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-datetime.js +4 -3
- package/components/ios.transition.js +94 -67
- package/components/select-popover.js +1 -1
- package/css/palettes/dark.always.css +1 -1
- package/css/palettes/dark.always.css.map +1 -1
- package/css/palettes/dark.class.css +1 -1
- package/css/palettes/dark.class.css.map +1 -1
- package/css/palettes/dark.system.css +1 -1
- package/css/palettes/dark.system.css.map +1 -1
- package/dist/cjs/{app-globals-542c4d91.js → app-globals-66b7dc06.js} +1 -1
- package/dist/cjs/{button-active-47528f4c.js → button-active-9135c809.js} +1 -1
- package/dist/cjs/{hardware-back-button-06ae4d9c.js → hardware-back-button-ed931127.js} +2 -2
- package/dist/cjs/{index-c76a1d14.js → index-6047957b.js} +3 -3
- package/dist/cjs/index-8709af32.js +2234 -0
- package/dist/cjs/{index-57b504ac.js → index-c54654c6.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 +8 -7
- 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-password-toggle.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 +5 -5
- package/dist/cjs/ion-nav_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
- package/dist/cjs/ion-picker-column.cjs.entry.js +2 -2
- package/dist/cjs/ion-picker.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 +5 -5
- 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-f3622afe.js → ionic-global-35b86a09.js} +1 -1
- package/dist/cjs/ionic.cjs.js +4 -4
- package/dist/cjs/{ios.transition-288dfa83.js → ios.transition-59b0e1d9.js} +96 -69
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/{md.transition-6e5f6a8d.js → md.transition-0cc7c831.js} +2 -2
- package/dist/cjs/{overlays-32cfd236.js → overlays-2feabb85.js} +2 -2
- package/dist/cjs/{status-tap-c47ff5f5.js → status-tap-5b2775cd.js} +1 -1
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/datetime/datetime.js +4 -3
- package/dist/collection/components/item/test/a11y/item.e2e.js +23 -0
- package/dist/collection/components/select/test/fill/select.e2e.js +25 -0
- package/dist/collection/components/select-popover/select-popover.md.css +8 -1
- package/dist/collection/utils/transition/ios.transition.js +94 -67
- package/dist/docs.json +2 -2
- package/dist/esm/{app-globals-3cbaf9d9.js → app-globals-b99e6d29.js} +1 -1
- package/dist/esm/{button-active-9e3c1f3b.js → button-active-920addb8.js} +1 -1
- package/dist/esm/{hardware-back-button-804f43bb.js → hardware-back-button-2d9760b6.js} +2 -2
- package/dist/esm/{index-8dbae644.js → index-7ae7186a.js} +2 -2
- package/dist/esm/index-9aab3bcf.js +2196 -0
- package/dist/esm/{index-f7fbe1fb.js → index-f4460246.js} +3 -3
- 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 +8 -7
- 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-password-toggle.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 +5 -5
- package/dist/esm/ion-nav_2.entry.js +3 -3
- package/dist/esm/ion-picker-column-option.entry.js +2 -2
- package/dist/esm/ion-picker-column.entry.js +2 -2
- package/dist/esm/ion-picker.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 +5 -5
- 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-d2d8f882.js → ionic-global-4528d288.js} +1 -1
- package/dist/esm/ionic.js +5 -5
- package/dist/esm/{ios.transition-a0041e41.js → ios.transition-72f59adb.js} +96 -69
- package/dist/esm/loader.js +4 -4
- package/dist/esm/{md.transition-0c0602d9.js → md.transition-ef0437fe.js} +2 -2
- package/dist/esm/{overlays-696d25f5.js → overlays-56045efc.js} +2 -2
- package/dist/esm/{status-tap-37a74d1c.js → status-tap-12c27922.js} +1 -1
- package/dist/esm-es5/app-globals-b99e6d29.js +4 -0
- package/dist/esm-es5/{button-active-9e3c1f3b.js → button-active-920addb8.js} +1 -1
- package/dist/esm-es5/{hardware-back-button-804f43bb.js → hardware-back-button-2d9760b6.js} +1 -1
- package/dist/esm-es5/{index-8dbae644.js → index-7ae7186a.js} +1 -1
- package/dist/esm-es5/index-9aab3bcf.js +5 -0
- package/dist/esm-es5/{index-f7fbe1fb.js → index-f4460246.js} +1 -1
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
- package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
- package/dist/esm-es5/ion-alert.entry.js +1 -1
- package/dist/esm-es5/ion-app_8.entry.js +1 -1
- package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
- package/dist/esm-es5/ion-back-button.entry.js +1 -1
- package/dist/esm-es5/ion-backdrop.entry.js +1 -1
- package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
- package/dist/esm-es5/ion-button_2.entry.js +1 -1
- package/dist/esm-es5/ion-card_5.entry.js +1 -1
- package/dist/esm-es5/ion-checkbox.entry.js +1 -1
- package/dist/esm-es5/ion-chip.entry.js +1 -1
- package/dist/esm-es5/ion-col_3.entry.js +1 -1
- package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
- package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
- package/dist/esm-es5/ion-fab_3.entry.js +1 -1
- package/dist/esm-es5/ion-img.entry.js +1 -1
- package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
- package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
- package/dist/esm-es5/ion-input.entry.js +1 -1
- package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
- package/dist/esm-es5/ion-item_8.entry.js +1 -1
- package/dist/esm-es5/ion-loading.entry.js +1 -1
- package/dist/esm-es5/ion-menu_3.entry.js +1 -1
- package/dist/esm-es5/ion-modal.entry.js +1 -1
- package/dist/esm-es5/ion-nav_2.entry.js +1 -1
- package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
- package/dist/esm-es5/ion-picker-column.entry.js +1 -1
- package/dist/esm-es5/ion-picker.entry.js +1 -1
- package/dist/esm-es5/ion-popover.entry.js +1 -1
- package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
- package/dist/esm-es5/ion-radio_2.entry.js +1 -1
- package/dist/esm-es5/ion-range.entry.js +1 -1
- package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
- package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
- package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
- package/dist/esm-es5/ion-route_4.entry.js +1 -1
- package/dist/esm-es5/ion-searchbar.entry.js +1 -1
- package/dist/esm-es5/ion-segment_2.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.entry.js +1 -1
- package/dist/esm-es5/ion-spinner.entry.js +1 -1
- package/dist/esm-es5/ion-split-pane.entry.js +1 -1
- package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
- package/dist/esm-es5/ion-tab_2.entry.js +1 -1
- package/dist/esm-es5/ion-text.entry.js +1 -1
- package/dist/esm-es5/ion-textarea.entry.js +1 -1
- package/dist/esm-es5/ion-toast.entry.js +1 -1
- package/dist/esm-es5/ion-toggle.entry.js +1 -1
- package/dist/esm-es5/{ionic-global-d2d8f882.js → ionic-global-4528d288.js} +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/ios.transition-72f59adb.js +4 -0
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/{md.transition-0c0602d9.js → md.transition-ef0437fe.js} +1 -1
- package/dist/esm-es5/{overlays-696d25f5.js → overlays-56045efc.js} +1 -1
- package/dist/esm-es5/{status-tap-37a74d1c.js → status-tap-12c27922.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-00d9d02d.js +4 -0
- package/dist/ionic/{p-b4d78e71.entry.js → p-022bc8ff.entry.js} +1 -1
- package/dist/ionic/{p-5fbc2eae.system.entry.js → p-0300cf19.system.entry.js} +1 -1
- package/dist/ionic/p-03b86a5e.js +4 -0
- package/dist/ionic/{p-6e9bd6ba.system.entry.js → p-05a8a97d.system.entry.js} +1 -1
- package/dist/ionic/{p-e3005be4.system.entry.js → p-08ea3402.system.entry.js} +1 -1
- package/dist/ionic/{p-e9ef13be.system.entry.js → p-091697a4.system.entry.js} +1 -1
- package/dist/ionic/p-0ae12601.entry.js +4 -0
- package/dist/ionic/{p-4fcef939.entry.js → p-0df52fbc.entry.js} +1 -1
- package/dist/ionic/{p-b76bcd9e.system.entry.js → p-100d079f.system.entry.js} +1 -1
- package/dist/ionic/{p-2f308f7f.system.entry.js → p-15daa308.system.entry.js} +1 -1
- package/dist/ionic/{p-4335f430.system.entry.js → p-16b35bc9.system.entry.js} +1 -1
- package/dist/ionic/{p-5d80b741.entry.js → p-18470679.entry.js} +1 -1
- package/dist/ionic/{p-d918e7ef.system.entry.js → p-19d50867.system.entry.js} +1 -1
- package/dist/ionic/{p-4da143c9.system.entry.js → p-1ae3a136.system.entry.js} +1 -1
- package/dist/ionic/{p-c671b28e.js → p-1cc0b31f.js} +1 -1
- package/dist/ionic/{p-aa0ed22b.system.entry.js → p-22ef5198.system.entry.js} +1 -1
- package/dist/ionic/{p-bdd3053f.entry.js → p-23610251.entry.js} +1 -1
- package/dist/ionic/{p-8f48c966.system.entry.js → p-27206537.system.entry.js} +1 -1
- package/dist/ionic/{p-ba9ca25a.system.entry.js → p-279f3bac.system.entry.js} +1 -1
- package/dist/ionic/{p-fd392e7f.system.entry.js → p-2912d62c.system.entry.js} +1 -1
- package/dist/ionic/{p-c3ca0292.system.entry.js → p-2bd9b326.system.entry.js} +1 -1
- package/dist/ionic/{p-6730a2f1.entry.js → p-2c588aa2.entry.js} +1 -1
- package/dist/ionic/{p-0af79ebd.entry.js → p-2d641da7.entry.js} +1 -1
- package/dist/ionic/p-2ff0e0aa.system.js +4 -0
- package/dist/ionic/{p-63deb2c3.entry.js → p-307c6b05.entry.js} +1 -1
- package/dist/ionic/{p-c07e7a5d.entry.js → p-3098a7cb.entry.js} +1 -1
- package/dist/ionic/{p-7536b4b3.system.js → p-30baae57.system.js} +1 -1
- package/dist/ionic/{p-806aad8f.system.js → p-31d27232.system.js} +1 -1
- package/dist/ionic/{p-6123d531.entry.js → p-32df9442.entry.js} +1 -1
- package/dist/ionic/{p-08c4d048.entry.js → p-3a3d5a1a.entry.js} +1 -1
- package/dist/ionic/{p-16016625.system.js → p-3b185894.system.js} +1 -1
- package/dist/ionic/{p-c7e0b81a.entry.js → p-3b974a28.entry.js} +1 -1
- package/dist/ionic/{p-09478200.entry.js → p-3bece4aa.entry.js} +1 -1
- package/dist/ionic/{p-8664c316.entry.js → p-3ce83c9b.entry.js} +1 -1
- package/dist/ionic/p-3d015cdb.system.js +5 -0
- package/dist/ionic/{p-26d33af2.system.entry.js → p-3dd57c9c.system.entry.js} +1 -1
- package/dist/ionic/{p-320cfcab.entry.js → p-3fefc7cd.entry.js} +1 -1
- package/dist/ionic/{p-e885f3c4.entry.js → p-430a7e95.entry.js} +1 -1
- package/dist/ionic/{p-aa8ac217.system.entry.js → p-439b8b3c.system.entry.js} +1 -1
- package/dist/ionic/{p-a5721afd.system.entry.js → p-44edbb29.system.entry.js} +1 -1
- package/dist/ionic/{p-b17549e8.system.entry.js → p-47212f88.system.entry.js} +1 -1
- package/dist/ionic/{p-d77dc6ea.entry.js → p-4824398b.entry.js} +1 -1
- package/dist/ionic/{p-2b1e669d.system.entry.js → p-4ba654fa.system.entry.js} +1 -1
- package/dist/ionic/{p-2a3e98fb.system.entry.js → p-4c103f8d.system.entry.js} +1 -1
- package/dist/ionic/{p-c687e632.entry.js → p-4f17f03d.entry.js} +1 -1
- package/dist/ionic/{p-94180ecc.entry.js → p-508d5d0d.entry.js} +1 -1
- package/dist/ionic/{p-515a47f5.entry.js → p-5091f63c.entry.js} +1 -1
- package/dist/ionic/{p-33d926c3.entry.js → p-52f53904.entry.js} +1 -1
- package/dist/ionic/{p-d3ceed28.entry.js → p-53c46dd1.entry.js} +1 -1
- package/dist/ionic/{p-4e548bd7.system.entry.js → p-55f99a39.system.entry.js} +1 -1
- package/dist/ionic/{p-1e4d7975.system.js → p-5734ac17.system.js} +1 -1
- package/dist/ionic/{p-c62571da.entry.js → p-5b183a1c.entry.js} +1 -1
- package/dist/ionic/{p-d11c336d.js → p-5cc6dcf5.js} +1 -1
- package/dist/ionic/{p-2c3c7cb9.system.entry.js → p-5d26afde.system.entry.js} +1 -1
- package/dist/ionic/{p-bd6d9610.entry.js → p-5d723a0a.entry.js} +1 -1
- package/dist/ionic/{p-ebe0aa6d.entry.js → p-606f069c.entry.js} +1 -1
- package/dist/ionic/{p-1930d8e7.entry.js → p-6143e16a.entry.js} +1 -1
- package/dist/ionic/{p-d5460f2d.system.entry.js → p-61d8c43c.system.entry.js} +1 -1
- package/dist/ionic/{p-93e43f42.system.entry.js → p-628967e3.system.entry.js} +1 -1
- package/dist/ionic/p-637e85a2.entry.js +4 -0
- package/dist/ionic/{p-385964e6.entry.js → p-657157d7.entry.js} +1 -1
- package/dist/ionic/p-6636ef29.js +4 -0
- package/dist/ionic/{p-45aec799.system.entry.js → p-670c9f57.system.entry.js} +1 -1
- package/dist/ionic/{p-9b31ebfa.entry.js → p-672b53f3.entry.js} +1 -1
- package/dist/ionic/p-6a5fe8b0.js +4 -0
- package/dist/ionic/{p-5a3a3373.entry.js → p-6c3666d5.entry.js} +1 -1
- package/dist/ionic/{p-5a6d3cd9.entry.js → p-6c64aef2.entry.js} +1 -1
- package/dist/ionic/{p-b571cab1.entry.js → p-74806c03.entry.js} +1 -1
- package/dist/ionic/{p-b799a007.entry.js → p-762156c0.entry.js} +1 -1
- package/dist/ionic/{p-5ff497dc.system.entry.js → p-77731f19.system.entry.js} +1 -1
- package/dist/ionic/{p-d1a8f599.entry.js → p-797fc793.entry.js} +1 -1
- package/dist/ionic/{p-c4676693.entry.js → p-7cf7ef9f.entry.js} +1 -1
- package/dist/ionic/{p-748e6b2b.system.entry.js → p-7d6fd45f.system.entry.js} +1 -1
- package/dist/ionic/p-7f189103.system.entry.js +4 -0
- package/dist/ionic/{p-ec723b9f.system.entry.js → p-7f512c4d.system.entry.js} +1 -1
- package/dist/ionic/{p-c977c5bc.entry.js → p-8162bcf4.entry.js} +1 -1
- package/dist/ionic/p-842c9fca.system.js +4 -0
- package/dist/ionic/{p-2ab5db0d.system.entry.js → p-86a7576c.system.entry.js} +1 -1
- package/dist/ionic/{p-bbbe3138.system.entry.js → p-939dbcc6.system.entry.js} +1 -1
- package/dist/ionic/{p-9384565a.entry.js → p-98f6116f.entry.js} +1 -1
- package/dist/ionic/{p-fd633973.entry.js → p-99c42ae3.entry.js} +1 -1
- package/dist/ionic/{p-470f73c4.entry.js → p-9c5b6727.entry.js} +1 -1
- package/dist/ionic/{p-051d2d23.js → p-9da86308.js} +1 -1
- package/dist/ionic/{p-34511b1d.js → p-9ec42be0.js} +1 -1
- package/dist/ionic/{p-a0fa6344.system.entry.js → p-a23a7b64.system.entry.js} +1 -1
- package/dist/ionic/{p-1980c728.system.js → p-a39d3482.system.js} +1 -1
- package/dist/ionic/{p-45034312.system.entry.js → p-a51b22fb.system.entry.js} +1 -1
- package/dist/ionic/{p-0b12d1ee.system.entry.js → p-a822c02f.system.entry.js} +1 -1
- package/dist/ionic/{p-48888af6.system.entry.js → p-a87cdd33.system.entry.js} +1 -1
- package/dist/ionic/{p-77ce6034.js → p-a953ef66.js} +1 -1
- package/dist/ionic/p-aa71aee7.js +4 -0
- package/dist/ionic/{p-7f59064a.entry.js → p-af6c2b39.entry.js} +1 -1
- package/dist/ionic/p-b4a034c8.system.js +4 -0
- package/dist/ionic/{p-142a778b.system.entry.js → p-b6d4e78d.system.entry.js} +1 -1
- package/dist/ionic/{p-4737e73a.entry.js → p-b9c741b6.entry.js} +1 -1
- package/dist/ionic/{p-031b070b.system.entry.js → p-bae97f84.system.entry.js} +1 -1
- package/dist/ionic/{p-283fd4e1.system.entry.js → p-c41435e6.system.entry.js} +1 -1
- package/dist/ionic/{p-45664cb9.system.js → p-cab332d1.system.js} +1 -1
- package/dist/ionic/{p-3ef93daf.entry.js → p-cac9bd5d.entry.js} +1 -1
- package/dist/ionic/{p-75f262d3.entry.js → p-cc3fc234.entry.js} +1 -1
- package/dist/ionic/{p-c23627c3.entry.js → p-cfbf4588.entry.js} +1 -1
- package/dist/ionic/p-d0d2827d.system.entry.js +4 -0
- package/dist/ionic/{p-34619a37.system.entry.js → p-d78ce4cc.system.entry.js} +1 -1
- package/dist/ionic/{p-23e440b6.entry.js → p-d979153a.entry.js} +1 -1
- package/dist/ionic/{p-b1f78948.system.entry.js → p-dba28cb1.system.entry.js} +1 -1
- package/dist/ionic/p-dba5cb84.js +5 -0
- package/dist/ionic/{p-53a3b33c.system.entry.js → p-dc242acb.system.entry.js} +1 -1
- package/dist/ionic/{p-c9ba1908.entry.js → p-df517d1f.entry.js} +1 -1
- package/dist/ionic/{p-d6229f05.system.entry.js → p-e1f7425b.system.entry.js} +1 -1
- package/dist/ionic/{p-fc6301cd.system.entry.js → p-e58a04ae.system.entry.js} +1 -1
- package/dist/ionic/{p-4e5288de.system.js → p-e81f22e3.system.js} +1 -1
- package/dist/ionic/{p-3f3add1a.entry.js → p-e95ac94c.entry.js} +1 -1
- package/dist/ionic/{p-8caca06c.system.entry.js → p-eaac2522.system.entry.js} +1 -1
- package/dist/ionic/{p-a592f1b8.system.entry.js → p-eed23392.system.entry.js} +1 -1
- package/dist/ionic/{p-aa0f60b2.system.js → p-f14daa66.system.js} +1 -1
- package/dist/ionic/{p-cb4f96f3.system.js → p-f2026596.system.js} +1 -1
- package/dist/ionic/p-f350f4c2.entry.js +4 -0
- package/dist/ionic/{p-8627f783.system.entry.js → p-f8b4ac1f.system.entry.js} +1 -1
- package/dist/ionic/{p-63265e00.system.entry.js → p-fb088c7d.system.entry.js} +1 -1
- package/hydrate/index.js +43143 -39113
- package/package.json +6 -6
- package/dist/cjs/index-1437d080.js +0 -11980
- package/dist/esm/index-5dc2b88e.js +0 -11942
- package/dist/esm-es5/app-globals-3cbaf9d9.js +0 -4
- package/dist/esm-es5/index-5dc2b88e.js +0 -18
- package/dist/esm-es5/ios.transition-a0041e41.js +0 -4
- package/dist/ionic/p-06d5221c.js +0 -4
- package/dist/ionic/p-06fad524.system.js +0 -4
- package/dist/ionic/p-0b3861eb.entry.js +0 -4
- package/dist/ionic/p-20304962.js +0 -4
- package/dist/ionic/p-2fa34b5c.entry.js +0 -4
- package/dist/ionic/p-32048e4c.system.js +0 -18
- package/dist/ionic/p-4ad48ec9.system.entry.js +0 -4
- package/dist/ionic/p-4af0b730.js +0 -8
- package/dist/ionic/p-58f89707.js +0 -4
- package/dist/ionic/p-8c4fc85f.system.js +0 -4
- package/dist/ionic/p-b0093947.system.js +0 -4
- package/dist/ionic/p-cc856712.entry.js +0 -4
- package/dist/ionic/p-cd1b9056.js +0 -4
- package/dist/ionic/p-f4bc5429.system.entry.js +0 -4
- package/dist/ionic/p-fdf40b09.js +0 -4
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
6
|
const animation = require('./animation-b4fdf128.js');
|
|
7
|
-
const index = require('./index-
|
|
7
|
+
const index = require('./index-6047957b.js');
|
|
8
8
|
require('./index-c8d52405.js');
|
|
9
|
-
require('./index-
|
|
9
|
+
require('./index-8709af32.js');
|
|
10
10
|
require('./helpers-afaa9001.js');
|
|
11
11
|
|
|
12
12
|
const DURATION = 540;
|
|
@@ -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,31 @@ 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
|
+
/**
|
|
113
|
+
* Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
|
|
114
|
+
* to re-compute this here since the HEIGHT_SCALE may have changed.
|
|
115
|
+
*/
|
|
116
|
+
TEXT_START_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
|
|
117
|
+
}
|
|
111
118
|
const backButtonIconEl = shadow(backButtonEl).querySelector('ion-icon');
|
|
112
119
|
const backButtonIconBox = backButtonIconEl.getBoundingClientRect();
|
|
113
120
|
/**
|
|
@@ -204,11 +211,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
204
211
|
top: '0px',
|
|
205
212
|
[CONTAINER_ORIGIN_X]: '0px',
|
|
206
213
|
})
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
214
|
+
/**
|
|
215
|
+
* The write hooks must be set on this animation as it is guaranteed to run. Other
|
|
216
|
+
* animations such as the back button text animation will not run if the back button
|
|
217
|
+
* has no visible text.
|
|
218
|
+
*/
|
|
212
219
|
.beforeAddWrite(() => {
|
|
213
220
|
backButtonEl.style.setProperty('display', 'none');
|
|
214
221
|
clonedBackButtonEl.style.setProperty(TEXT_ORIGIN_X, BACK_BUTTON_START_OFFSET);
|
|
@@ -217,6 +224,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
217
224
|
backButtonEl.style.setProperty('display', '');
|
|
218
225
|
clonedBackButtonEl.style.setProperty('display', 'none');
|
|
219
226
|
clonedBackButtonEl.style.removeProperty(TEXT_ORIGIN_X);
|
|
227
|
+
})
|
|
228
|
+
.keyframes(CONTAINER_KEYFRAMES);
|
|
229
|
+
enteringBackButtonTextAnimation
|
|
230
|
+
.beforeStyles({
|
|
231
|
+
'transform-origin': `${TEXT_ORIGIN_X} top`,
|
|
220
232
|
})
|
|
221
233
|
.keyframes(TEXT_KEYFRAMES);
|
|
222
234
|
enteringBackButtonIconAnimation
|
|
@@ -230,7 +242,7 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
230
242
|
enteringBackButtonAnimation,
|
|
231
243
|
]);
|
|
232
244
|
};
|
|
233
|
-
const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonTextEl, backButtonTextBox) => {
|
|
245
|
+
const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonBox, backButtonTextEl, backButtonTextBox) => {
|
|
234
246
|
var _a, _b;
|
|
235
247
|
/**
|
|
236
248
|
* The horizontal transform origin for the large title
|
|
@@ -250,52 +262,67 @@ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, larg
|
|
|
250
262
|
* title and the back button due to padding and font weight.
|
|
251
263
|
*/
|
|
252
264
|
const LARGE_TITLE_TRANSLATION_OFFSET = 8;
|
|
265
|
+
let END_TRANSLATE_X = rtl
|
|
266
|
+
? `-${window.innerWidth - backButtonBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
267
|
+
: `${backButtonBox.x + LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
253
268
|
/**
|
|
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.
|
|
269
|
+
* How much to scale the large title up/down by.
|
|
260
270
|
*/
|
|
261
|
-
|
|
262
|
-
? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
263
|
-
: `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
271
|
+
let HEIGHT_SCALE = 0.5;
|
|
264
272
|
/**
|
|
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.
|
|
273
|
+
* The large title always starts full size.
|
|
270
274
|
*/
|
|
271
|
-
const
|
|
272
|
-
const END_TRANSLATE_Y = `${backButtonTextBox.y - LARGE_TITLE_TOP_PADDING}px`;
|
|
275
|
+
const START_SCALE = 'scale(1)';
|
|
273
276
|
/**
|
|
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.
|
|
277
|
+
* By default, we don't worry about having the large title scaled to perfectly
|
|
278
|
+
* match the back button because we don't know if the back button's text matches
|
|
279
|
+
* the large title's text.
|
|
284
280
|
*/
|
|
281
|
+
let END_SCALE = `scale(${HEIGHT_SCALE})`;
|
|
282
|
+
// Text element not rendered if developers pass text="" to the back button
|
|
283
|
+
if (backButtonTextEl && backButtonTextBox) {
|
|
284
|
+
/**
|
|
285
|
+
* The scaled title should (roughly) overlap the back button. This ensures that
|
|
286
|
+
* the back button and title overlap during the animation. Note that since both
|
|
287
|
+
* elements either fade in or fade out over the course of the animation, neither
|
|
288
|
+
* element will be fully visible on top of the other. As a result, the overlap
|
|
289
|
+
* does not need to be perfect, so approximate values are acceptable here.
|
|
290
|
+
*/
|
|
291
|
+
END_TRANSLATE_X = rtl
|
|
292
|
+
? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
293
|
+
: `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
294
|
+
/**
|
|
295
|
+
* In the forward direction, the large title should start at its normal size and
|
|
296
|
+
* then scale down to be (roughly) the size of the back button on the other view.
|
|
297
|
+
* In the backward direction, the large title should start at (roughly) the size
|
|
298
|
+
* of the back button and then scale up to its original size.
|
|
299
|
+
* Note that since both elements either fade in or fade out over the course of the
|
|
300
|
+
* animation, neither element will be fully visible on top of the other. As a result,
|
|
301
|
+
* the overlap does not need to be perfect, so approximate values are acceptable here.
|
|
302
|
+
*/
|
|
303
|
+
/**
|
|
304
|
+
* When the title and back button texts match then they should overlap during the
|
|
305
|
+
* page transition. If the texts do not match up then the large title text scale
|
|
306
|
+
* adjusts to not perfectly match the back button text otherwise the proportions
|
|
307
|
+
* will be incorrect. When the texts match we scale both the width and height to
|
|
308
|
+
* account for font weight differences between the title and back button.
|
|
309
|
+
*/
|
|
310
|
+
const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
|
|
311
|
+
const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
|
|
312
|
+
HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
|
|
313
|
+
/**
|
|
314
|
+
* Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
|
|
315
|
+
* to re-compute this here since the HEIGHT_SCALE may have changed.
|
|
316
|
+
*/
|
|
317
|
+
END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
|
|
318
|
+
}
|
|
285
319
|
/**
|
|
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.
|
|
320
|
+
* The midpoints of the back button and the title should align such that the back
|
|
321
|
+
* button and title appear to be centered with each other.
|
|
293
322
|
*/
|
|
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})`;
|
|
323
|
+
const backButtonMidPoint = backButtonBox.top + backButtonBox.height / 2;
|
|
324
|
+
const titleMidPoint = (largeTitleBox.height * HEIGHT_SCALE) / 2;
|
|
325
|
+
const END_TRANSLATE_Y = `${backButtonMidPoint - titleMidPoint}px`;
|
|
299
326
|
const BACKWARDS_KEYFRAMES = [
|
|
300
327
|
{ offset: 0, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
|
|
301
328
|
{ 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-8709af32.js');
|
|
9
|
+
const appGlobals = require('./app-globals-66b7dc06.js');
|
|
10
|
+
require('./ionic-global-35b86a09.js');
|
|
11
11
|
|
|
12
12
|
const defineCustomElements = async (win, options) => {
|
|
13
13
|
if (typeof window === 'undefined') return undefined;
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
6
|
const animation = require('./animation-b4fdf128.js');
|
|
7
|
-
const index = require('./index-
|
|
7
|
+
const index = require('./index-6047957b.js');
|
|
8
8
|
require('./index-c8d52405.js');
|
|
9
|
-
require('./index-
|
|
9
|
+
require('./index-8709af32.js');
|
|
10
10
|
require('./helpers-afaa9001.js');
|
|
11
11
|
|
|
12
12
|
const mdTransitionAnimation = (_, opts) => {
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
const index = require('./index-c8d52405.js');
|
|
7
7
|
const helpers = require('./helpers-afaa9001.js');
|
|
8
|
-
const hardwareBackButton = require('./hardware-back-button-
|
|
9
|
-
const ionicGlobal = require('./ionic-global-
|
|
8
|
+
const hardwareBackButton = require('./hardware-back-button-ed931127.js');
|
|
9
|
+
const ionicGlobal = require('./ionic-global-35b86a09.js');
|
|
10
10
|
const frameworkDelegate = require('./framework-delegate-55f5683a.js');
|
|
11
11
|
const gestureController = require('./gesture-controller-9436f482.js');
|
|
12
12
|
const index$1 = require('./index-5915f9b3.js');
|
|
@@ -319,7 +319,8 @@ export class Datetime {
|
|
|
319
319
|
* Check below the next line ensures that we did not
|
|
320
320
|
* swipe and abort (i.e. we swiped but we are still on the current month).
|
|
321
321
|
*/
|
|
322
|
-
const
|
|
322
|
+
const condition = isRTL(this.el) ? calendarBodyRef.scrollLeft >= -2 : calendarBodyRef.scrollLeft <= 2;
|
|
323
|
+
const month = condition ? startMonth : endMonth;
|
|
323
324
|
/**
|
|
324
325
|
* The edge of the month must be lined up with
|
|
325
326
|
* the edge of the calendar body in order for
|
|
@@ -1556,7 +1557,7 @@ export class Datetime {
|
|
|
1556
1557
|
const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
|
|
1557
1558
|
const hasWheelVariant = hasDatePresentation && preferWheel;
|
|
1558
1559
|
renderHiddenInput(true, el, name, formatValue(value), disabled);
|
|
1559
|
-
return (h(Host, { key: '
|
|
1560
|
+
return (h(Host, { key: '11508a20af9da98e21eb92d2b882bb7cf8370da6', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
|
|
1560
1561
|
[mode]: true,
|
|
1561
1562
|
['datetime-readonly']: readonly,
|
|
1562
1563
|
['datetime-disabled']: disabled,
|
|
@@ -1566,7 +1567,7 @@ export class Datetime {
|
|
|
1566
1567
|
[`datetime-size-${size}`]: true,
|
|
1567
1568
|
[`datetime-prefer-wheel`]: hasWheelVariant,
|
|
1568
1569
|
[`datetime-grid`]: isGridStyle,
|
|
1569
|
-
})) }, h("div", { key: '
|
|
1570
|
+
})) }, h("div", { key: 'e35a98de33fa67c8b20c1d40620c1c75dee07512', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
|
|
1570
1571
|
}
|
|
1571
1572
|
static get is() { return "ion-datetime"; }
|
|
1572
1573
|
static get encapsulation() { return "shadow"; }
|
|
@@ -4,6 +4,29 @@
|
|
|
4
4
|
import AxeBuilder from "@axe-core/playwright";
|
|
5
5
|
import { expect } from "@playwright/test";
|
|
6
6
|
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
7
|
+
configs({ directions: ['ltr'], palettes: ['dark'] }).forEach(({ config, screenshot, title }) => {
|
|
8
|
+
test.describe(title('item: dark palette'), () => {
|
|
9
|
+
/**
|
|
10
|
+
* This test was originally created to ensure the item border has sufficient
|
|
11
|
+
* contrast. We don't use an Axe test here because Axe not warn about color
|
|
12
|
+
* contrast on the item borders.
|
|
13
|
+
*/
|
|
14
|
+
test('borders should have sufficient contrast', async ({ page }) => {
|
|
15
|
+
test.info().annotations.push({
|
|
16
|
+
type: 'issue',
|
|
17
|
+
description: 'https://github.com/ionic-team/ionic-framework/issues/29386',
|
|
18
|
+
});
|
|
19
|
+
await page.setContent(`
|
|
20
|
+
<ion-list>
|
|
21
|
+
<ion-item>Item</ion-item>
|
|
22
|
+
<ion-item>Item</ion-item>
|
|
23
|
+
</ion-list>
|
|
24
|
+
`, config);
|
|
25
|
+
const list = page.locator('ion-list');
|
|
26
|
+
await expect(list).toHaveScreenshot(screenshot(`item-dark`));
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
});
|
|
7
30
|
configs({ directions: ['ltr'] }).forEach(({ config, screenshot, title }) => {
|
|
8
31
|
test.describe(title('item: axe'), () => {
|
|
9
32
|
test('should not have accessibility violations', async ({ page }) => {
|
|
@@ -189,4 +189,29 @@ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, screenshot, co
|
|
|
189
189
|
await expect(notchCutout).toBeHidden();
|
|
190
190
|
});
|
|
191
191
|
});
|
|
192
|
+
test(title('select: fill outline: fit-content should display select options'), async ({ page }, testInfo) => {
|
|
193
|
+
testInfo.annotations.push({
|
|
194
|
+
type: 'issue',
|
|
195
|
+
description: 'https://github.com/ionic-team/ionic-framework/issues/29321',
|
|
196
|
+
});
|
|
197
|
+
await page.setContent(`
|
|
198
|
+
<ion-select
|
|
199
|
+
fill="outline"
|
|
200
|
+
aria-label="Fruit"
|
|
201
|
+
value="apple"
|
|
202
|
+
interface="popover"
|
|
203
|
+
style="width: fit-content"
|
|
204
|
+
>
|
|
205
|
+
<ion-select-option value="5">5</ion-select-option>
|
|
206
|
+
<ion-select-option value="10">10</ion-select-option>
|
|
207
|
+
<ion-select-option value="15">15</ion-select-option>
|
|
208
|
+
</ion-select>
|
|
209
|
+
`, config);
|
|
210
|
+
const select = page.locator('ion-select');
|
|
211
|
+
const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent');
|
|
212
|
+
await select.click();
|
|
213
|
+
await ionPopoverDidPresent.next();
|
|
214
|
+
const selectPopover = page.locator('ion-select-popover');
|
|
215
|
+
await expect(selectPopover).toHaveScreenshot(screenshot(`select-fill-outline-fit-content`));
|
|
216
|
+
});
|
|
192
217
|
});
|
|
@@ -189,7 +189,14 @@ ion-label {
|
|
|
189
189
|
* }
|
|
190
190
|
*/
|
|
191
191
|
ion-list ion-radio::part(container) {
|
|
192
|
-
|
|
192
|
+
display: none;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
ion-list ion-radio::part(label) {
|
|
196
|
+
margin-left: 0;
|
|
197
|
+
margin-right: 0;
|
|
198
|
+
margin-top: 0;
|
|
199
|
+
margin-bottom: 0;
|
|
193
200
|
}
|
|
194
201
|
|
|
195
202
|
ion-item {
|
|
@@ -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,31 @@ 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
|
+
/**
|
|
107
|
+
* Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
|
|
108
|
+
* to re-compute this here since the HEIGHT_SCALE may have changed.
|
|
109
|
+
*/
|
|
110
|
+
TEXT_START_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
|
|
111
|
+
}
|
|
105
112
|
const backButtonIconEl = shadow(backButtonEl).querySelector('ion-icon');
|
|
106
113
|
const backButtonIconBox = backButtonIconEl.getBoundingClientRect();
|
|
107
114
|
/**
|
|
@@ -198,11 +205,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
198
205
|
top: '0px',
|
|
199
206
|
[CONTAINER_ORIGIN_X]: '0px',
|
|
200
207
|
})
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
208
|
+
/**
|
|
209
|
+
* The write hooks must be set on this animation as it is guaranteed to run. Other
|
|
210
|
+
* animations such as the back button text animation will not run if the back button
|
|
211
|
+
* has no visible text.
|
|
212
|
+
*/
|
|
206
213
|
.beforeAddWrite(() => {
|
|
207
214
|
backButtonEl.style.setProperty('display', 'none');
|
|
208
215
|
clonedBackButtonEl.style.setProperty(TEXT_ORIGIN_X, BACK_BUTTON_START_OFFSET);
|
|
@@ -211,6 +218,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
211
218
|
backButtonEl.style.setProperty('display', '');
|
|
212
219
|
clonedBackButtonEl.style.setProperty('display', 'none');
|
|
213
220
|
clonedBackButtonEl.style.removeProperty(TEXT_ORIGIN_X);
|
|
221
|
+
})
|
|
222
|
+
.keyframes(CONTAINER_KEYFRAMES);
|
|
223
|
+
enteringBackButtonTextAnimation
|
|
224
|
+
.beforeStyles({
|
|
225
|
+
'transform-origin': `${TEXT_ORIGIN_X} top`,
|
|
214
226
|
})
|
|
215
227
|
.keyframes(TEXT_KEYFRAMES);
|
|
216
228
|
enteringBackButtonIconAnimation
|
|
@@ -224,7 +236,7 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
|
|
|
224
236
|
enteringBackButtonAnimation,
|
|
225
237
|
]);
|
|
226
238
|
};
|
|
227
|
-
const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonTextEl, backButtonTextBox) => {
|
|
239
|
+
const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonBox, backButtonTextEl, backButtonTextBox) => {
|
|
228
240
|
var _a, _b;
|
|
229
241
|
/**
|
|
230
242
|
* The horizontal transform origin for the large title
|
|
@@ -244,52 +256,67 @@ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, larg
|
|
|
244
256
|
* title and the back button due to padding and font weight.
|
|
245
257
|
*/
|
|
246
258
|
const LARGE_TITLE_TRANSLATION_OFFSET = 8;
|
|
259
|
+
let END_TRANSLATE_X = rtl
|
|
260
|
+
? `-${window.innerWidth - backButtonBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
261
|
+
: `${backButtonBox.x + LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
247
262
|
/**
|
|
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.
|
|
263
|
+
* How much to scale the large title up/down by.
|
|
254
264
|
*/
|
|
255
|
-
|
|
256
|
-
? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
257
|
-
: `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
265
|
+
let HEIGHT_SCALE = 0.5;
|
|
258
266
|
/**
|
|
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.
|
|
267
|
+
* The large title always starts full size.
|
|
264
268
|
*/
|
|
265
|
-
const
|
|
266
|
-
const END_TRANSLATE_Y = `${backButtonTextBox.y - LARGE_TITLE_TOP_PADDING}px`;
|
|
269
|
+
const START_SCALE = 'scale(1)';
|
|
267
270
|
/**
|
|
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.
|
|
271
|
+
* By default, we don't worry about having the large title scaled to perfectly
|
|
272
|
+
* match the back button because we don't know if the back button's text matches
|
|
273
|
+
* the large title's text.
|
|
278
274
|
*/
|
|
275
|
+
let END_SCALE = `scale(${HEIGHT_SCALE})`;
|
|
276
|
+
// Text element not rendered if developers pass text="" to the back button
|
|
277
|
+
if (backButtonTextEl && backButtonTextBox) {
|
|
278
|
+
/**
|
|
279
|
+
* The scaled title should (roughly) overlap the back button. This ensures that
|
|
280
|
+
* the back button and title overlap during the animation. Note that since both
|
|
281
|
+
* elements either fade in or fade out over the course of the animation, neither
|
|
282
|
+
* element 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.
|
|
284
|
+
*/
|
|
285
|
+
END_TRANSLATE_X = rtl
|
|
286
|
+
? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
|
|
287
|
+
: `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
|
|
288
|
+
/**
|
|
289
|
+
* In the forward direction, the large title should start at its normal size and
|
|
290
|
+
* then scale down to be (roughly) the size of the back button on the other view.
|
|
291
|
+
* In the backward direction, the large title should start at (roughly) the size
|
|
292
|
+
* of the back button and then scale up to its original size.
|
|
293
|
+
* Note that since both elements either fade in or fade out over the course of the
|
|
294
|
+
* animation, neither element will be fully visible on top of the other. As a result,
|
|
295
|
+
* the overlap does not need to be perfect, so approximate values are acceptable here.
|
|
296
|
+
*/
|
|
297
|
+
/**
|
|
298
|
+
* When the title and back button texts match then they should overlap during the
|
|
299
|
+
* page transition. If the texts do not match up then the large title text scale
|
|
300
|
+
* adjusts to not perfectly match the back button text otherwise the proportions
|
|
301
|
+
* will be incorrect. When the texts match we scale both the width and height to
|
|
302
|
+
* account for font weight differences between the title and back button.
|
|
303
|
+
*/
|
|
304
|
+
const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
|
|
305
|
+
const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
|
|
306
|
+
HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
|
|
307
|
+
/**
|
|
308
|
+
* Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
|
|
309
|
+
* to re-compute this here since the HEIGHT_SCALE may have changed.
|
|
310
|
+
*/
|
|
311
|
+
END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
|
|
312
|
+
}
|
|
279
313
|
/**
|
|
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.
|
|
314
|
+
* The midpoints of the back button and the title should align such that the back
|
|
315
|
+
* button and title appear to be centered with each other.
|
|
287
316
|
*/
|
|
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})`;
|
|
317
|
+
const backButtonMidPoint = backButtonBox.top + backButtonBox.height / 2;
|
|
318
|
+
const titleMidPoint = (largeTitleBox.height * HEIGHT_SCALE) / 2;
|
|
319
|
+
const END_TRANSLATE_Y = `${backButtonMidPoint - titleMidPoint}px`;
|
|
293
320
|
const BACKWARDS_KEYFRAMES = [
|
|
294
321
|
{ offset: 0, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
|
|
295
322
|
{ offset: 0.1, opacity: 0 },
|