{"version":3,"file":"nuxt-link.qV4hQ9Dd.js","sources":["../../../../../../app/node_modules/nuxt/dist/app/composables/preload.js","../../../../../../app/node_modules/nuxt/dist/app/components/nuxt-link.js"],"sourcesContent":["import { useNuxtApp } from \"../nuxt.js\";\nimport { toArray } from \"../utils.js\";\nimport { useRouter } from \"./router.js\";\nexport const preloadComponents = async (components) => {\n if (import.meta.server) {\n return;\n }\n const nuxtApp = useNuxtApp();\n components = toArray(components);\n await Promise.all(components.map((name) => _loadAsyncComponent(nuxtApp.vueApp._context.components[name])));\n};\nexport const prefetchComponents = (components) => {\n return preloadComponents(components);\n};\nfunction _loadAsyncComponent(component) {\n if (component?.__asyncLoader && !component.__asyncResolved) {\n return component.__asyncLoader();\n }\n}\nexport async function preloadRouteComponents(to, router = useRouter()) {\n if (import.meta.server) {\n return;\n }\n const { path, matched } = router.resolve(to);\n if (!matched.length) {\n return;\n }\n if (!router._routePreloaded) {\n router._routePreloaded = /* @__PURE__ */ new Set();\n }\n if (router._routePreloaded.has(path)) {\n return;\n }\n const promises = router._preloadPromises = router._preloadPromises || [];\n if (promises.length > 4) {\n return Promise.all(promises).then(() => preloadRouteComponents(to, router));\n }\n router._routePreloaded.add(path);\n const components = matched.map((component) => component.components?.default).filter((component) => typeof component === \"function\");\n for (const component of components) {\n const promise = Promise.resolve(component()).catch(() => {\n }).finally(() => promises.splice(promises.indexOf(promise)));\n promises.push(promise);\n }\n await Promise.all(promises);\n}\n","import { computed, defineComponent, h, inject, onBeforeUnmount, onMounted, provide, ref, resolveComponent } from \"vue\";\nimport { hasProtocol, joinURL, parseQuery, parseURL, withTrailingSlash, withoutTrailingSlash } from \"ufo\";\nimport { preloadRouteComponents } from \"../composables/preload.js\";\nimport { onNuxtReady } from \"../composables/ready.js\";\nimport { navigateTo, useRouter } from \"../composables/router.js\";\nimport { useNuxtApp, useRuntimeConfig } from \"../nuxt.js\";\nimport { cancelIdleCallback, requestIdleCallback } from \"../compat/idle-callback.js\";\nimport { nuxtLinkDefaults } from \"#build/nuxt.config.mjs\";\nconst firstNonUndefined = (...args) => args.find((arg) => arg !== void 0);\nconst DEFAULT_EXTERNAL_REL_ATTRIBUTE = \"noopener noreferrer\";\nconst NuxtLinkDevKeySymbol = Symbol(\"nuxt-link-dev-key\");\n// @__NO_SIDE_EFFECTS__\nexport function defineNuxtLink(options) {\n const componentName = options.componentName || \"NuxtLink\";\n const checkPropConflicts = (props, main, sub) => {\n if (import.meta.dev && props[main] !== void 0 && props[sub] !== void 0) {\n console.warn(`[${componentName}] \\`${main}\\` and \\`${sub}\\` cannot be used together. \\`${sub}\\` will be ignored.`);\n }\n };\n const resolveTrailingSlashBehavior = (to, resolve) => {\n if (!to || options.trailingSlash !== \"append\" && options.trailingSlash !== \"remove\") {\n return to;\n }\n if (typeof to === \"string\") {\n return applyTrailingSlashBehavior(to, options.trailingSlash);\n }\n const path = \"path\" in to ? to.path : resolve(to).path;\n return {\n ...to,\n name: void 0,\n // named routes would otherwise always override trailing slash behavior\n path: applyTrailingSlashBehavior(path, options.trailingSlash)\n };\n };\n return defineComponent({\n name: componentName,\n props: {\n // Routing\n to: {\n type: [String, Object],\n default: void 0,\n required: false\n },\n href: {\n type: [String, Object],\n default: void 0,\n required: false\n },\n // Attributes\n target: {\n type: String,\n default: void 0,\n required: false\n },\n rel: {\n type: String,\n default: void 0,\n required: false\n },\n noRel: {\n type: Boolean,\n default: void 0,\n required: false\n },\n // Prefetching\n prefetch: {\n type: Boolean,\n default: void 0,\n required: false\n },\n noPrefetch: {\n type: Boolean,\n default: void 0,\n required: false\n },\n // Styling\n activeClass: {\n type: String,\n default: void 0,\n required: false\n },\n exactActiveClass: {\n type: String,\n default: void 0,\n required: false\n },\n prefetchedClass: {\n type: String,\n default: void 0,\n required: false\n },\n // Vue Router's `` additional props\n replace: {\n type: Boolean,\n default: void 0,\n required: false\n },\n ariaCurrentValue: {\n type: String,\n default: void 0,\n required: false\n },\n // Edge cases handling\n external: {\n type: Boolean,\n default: void 0,\n required: false\n },\n // Slot API\n custom: {\n type: Boolean,\n default: void 0,\n required: false\n }\n },\n setup(props, { slots }) {\n const router = useRouter();\n const config = useRuntimeConfig();\n const to = computed(() => {\n checkPropConflicts(props, \"to\", \"href\");\n const path = props.to || props.href || \"\";\n return resolveTrailingSlashBehavior(path, router.resolve);\n });\n const isProtocolURL = computed(() => typeof to.value === \"string\" && hasProtocol(to.value, { acceptRelative: true }));\n const isExternal = computed(() => {\n if (props.external) {\n return true;\n }\n if (props.target && props.target !== \"_self\") {\n return true;\n }\n if (typeof to.value === \"object\") {\n return false;\n }\n return to.value === \"\" || isProtocolURL.value;\n });\n const prefetched = ref(false);\n const el = import.meta.server ? void 0 : ref(null);\n const elRef = import.meta.server ? void 0 : (ref2) => {\n el.value = props.custom ? ref2?.$el?.nextElementSibling : ref2?.$el;\n };\n if (import.meta.client) {\n checkPropConflicts(props, \"prefetch\", \"noPrefetch\");\n const shouldPrefetch = props.prefetch !== false && props.noPrefetch !== true && props.target !== \"_blank\" && !isSlowConnection();\n if (shouldPrefetch) {\n const nuxtApp = useNuxtApp();\n let idleId;\n let unobserve = null;\n onMounted(() => {\n const observer = useObserver();\n onNuxtReady(() => {\n idleId = requestIdleCallback(() => {\n if (el?.value?.tagName) {\n unobserve = observer.observe(el.value, async () => {\n unobserve?.();\n unobserve = null;\n const path = typeof to.value === \"string\" ? to.value : router.resolve(to.value).fullPath;\n await Promise.all([\n nuxtApp.hooks.callHook(\"link:prefetch\", path).catch(() => {\n }),\n !isExternal.value && preloadRouteComponents(to.value, router).catch(() => {\n })\n ]);\n prefetched.value = true;\n });\n }\n });\n });\n });\n onBeforeUnmount(() => {\n if (idleId) {\n cancelIdleCallback(idleId);\n }\n unobserve?.();\n unobserve = null;\n });\n }\n }\n if (import.meta.dev && import.meta.server && !props.custom) {\n const isNuxtLinkChild = inject(NuxtLinkDevKeySymbol, false);\n if (isNuxtLinkChild) {\n console.log(\"[nuxt] [NuxtLink] You can't nest one inside another . This will cause a hydration error on client-side. You can pass the `custom` prop to take full control of the markup.\");\n } else {\n provide(NuxtLinkDevKeySymbol, true);\n }\n }\n return () => {\n if (!isExternal.value) {\n const routerLinkProps = {\n ref: elRef,\n to: to.value,\n activeClass: props.activeClass || options.activeClass,\n exactActiveClass: props.exactActiveClass || options.exactActiveClass,\n replace: props.replace,\n ariaCurrentValue: props.ariaCurrentValue,\n custom: props.custom\n };\n if (!props.custom) {\n if (prefetched.value) {\n routerLinkProps.class = props.prefetchedClass || options.prefetchedClass;\n }\n routerLinkProps.rel = props.rel;\n }\n return h(\n resolveComponent(\"RouterLink\"),\n routerLinkProps,\n slots.default\n );\n }\n const href = typeof to.value === \"object\" ? router.resolve(to.value)?.href ?? null : to.value && !props.external && !isProtocolURL.value ? resolveTrailingSlashBehavior(joinURL(config.app.baseURL, to.value), router.resolve) : to.value || null;\n const target = props.target || null;\n checkPropConflicts(props, \"noRel\", \"rel\");\n const rel = props.noRel ? null : firstNonUndefined(props.rel, options.externalRelAttribute, href ? DEFAULT_EXTERNAL_REL_ATTRIBUTE : \"\") || null;\n const navigate = () => navigateTo(href, { replace: props.replace });\n if (props.custom) {\n if (!slots.default) {\n return null;\n }\n return slots.default({\n href,\n navigate,\n get route() {\n if (!href) {\n return void 0;\n }\n const url = parseURL(href);\n return {\n path: url.pathname,\n fullPath: url.pathname,\n get query() {\n return parseQuery(url.search);\n },\n hash: url.hash,\n // stub properties for compat with vue-router\n params: {},\n name: void 0,\n matched: [],\n redirectedFrom: void 0,\n meta: {},\n href\n };\n },\n rel,\n target,\n isExternal: isExternal.value,\n isActive: false,\n isExactActive: false\n });\n }\n return h(\"a\", { ref: el, href, rel, target }, slots.default?.());\n };\n }\n });\n}\nexport default /* @__PURE__ */ defineNuxtLink(nuxtLinkDefaults);\nfunction applyTrailingSlashBehavior(to, trailingSlash) {\n const normalizeFn = trailingSlash === \"append\" ? withTrailingSlash : withoutTrailingSlash;\n const hasProtocolDifferentFromHttp = hasProtocol(to) && !to.startsWith(\"http\");\n if (hasProtocolDifferentFromHttp) {\n return to;\n }\n return normalizeFn(to, true);\n}\nfunction useObserver() {\n if (import.meta.server) {\n return;\n }\n const nuxtApp = useNuxtApp();\n if (nuxtApp._observer) {\n return nuxtApp._observer;\n }\n let observer = null;\n const callbacks = /* @__PURE__ */ new Map();\n const observe = (element, callback) => {\n if (!observer) {\n observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n const callback2 = callbacks.get(entry.target);\n const isVisible = entry.isIntersecting || entry.intersectionRatio > 0;\n if (isVisible && callback2) {\n callback2();\n }\n }\n });\n }\n callbacks.set(element, callback);\n observer.observe(element);\n return () => {\n callbacks.delete(element);\n observer.unobserve(element);\n if (callbacks.size === 0) {\n observer.disconnect();\n observer = null;\n }\n };\n };\n const _observer = nuxtApp._observer = {\n observe\n };\n return _observer;\n}\nfunction isSlowConnection() {\n if (import.meta.server) {\n return;\n }\n const cn = navigator.connection;\n if (cn && (cn.saveData || /2g/.test(cn.effectiveType))) {\n return true;\n }\n return false;\n}\n"],"names":["preloadRouteComponents","to","router","useRouter","path","matched","promises","components","component","_a","promise","firstNonUndefined","args","arg","DEFAULT_EXTERNAL_REL_ATTRIBUTE","defineNuxtLink","options","componentName","resolveTrailingSlashBehavior","resolve","applyTrailingSlashBehavior","defineComponent","props","slots","config","useRuntimeConfig","computed","isProtocolURL","hasProtocol","isExternal","prefetched","ref","el","elRef","ref2","isSlowConnection","nuxtApp","useNuxtApp","idleId","unobserve","onMounted","observer","useObserver","onNuxtReady","requestIdleCallback","onBeforeUnmount","cancelIdleCallback","routerLinkProps","h","resolveComponent","href","joinURL","target","rel","navigate","navigateTo","url","parseURL","parseQuery","_b","__nuxt_component_0","nuxtLinkDefaults","trailingSlash","normalizeFn","withTrailingSlash","withoutTrailingSlash","callbacks","observe","element","callback","entries","entry","callback2","cn"],"mappings":"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","x_google_ignoreList":[0,1]}