import { useNuxtApp } from "#app/nuxt"; import { START_LOCATION } from "vue-router"; import { useRouter as useRouter$1 } from "#app/composables/router"; import { isChangingPage } from "#app/components/utils"; //#region src/pages/runtime/router.options.ts var router_options_default = { scrollBehavior(to, from, savedPosition) { const nuxtApp = useNuxtApp(); const router = useRouter$1(); const hashScrollBehaviour = router.options?.scrollBehaviorType ?? "auto"; if (to.path.replace(/\/$/, "") === from.path.replace(/\/$/, "")) { if (from.hash && !to.hash) return savedPosition ?? { left: 0, top: 0 }; if (to.hash) return { el: to.hash, top: _getHashElementScrollMarginTop(to.hash), behavior: hashScrollBehaviour }; return false; } if ((typeof to.meta.scrollToTop === "function" ? to.meta.scrollToTop(to, from) : to.meta.scrollToTop) === false) return false; if (from === START_LOCATION) return _calculatePosition(to, from, savedPosition, hashScrollBehaviour); return new Promise((resolve) => { const doScroll = () => { requestAnimationFrame(() => { if (router.currentRoute.value.fullPath !== to.fullPath) { resolve(false); return; } resolve(_calculatePosition(to, from, savedPosition, hashScrollBehaviour)); }); }; nuxtApp.hooks.hookOnce("page:loading:end", () => { const transitionPromise = nuxtApp["~transitionPromise"]; if (transitionPromise) transitionPromise.then(doScroll); else doScroll(); }); }); } }; function _getHashElementScrollMarginTop(hash) { const elem = document.getElementById(hash.slice(1)); if (!elem) return 0; return (Number.parseFloat(getComputedStyle(elem).scrollMarginTop) || 0) + (Number.parseFloat(getComputedStyle(document.documentElement).scrollPaddingTop) || 0); } function _calculatePosition(to, from, savedPosition, defaultHashScrollBehaviour) { if (savedPosition) return savedPosition; if (to.hash) return { el: to.hash, top: _getHashElementScrollMarginTop(to.hash), behavior: isChangingPage(to, from) ? defaultHashScrollBehaviour : "instant" }; return { left: 0, top: 0 }; } //#endregion export { router_options_default as default };