{"version":3,"file":"useRouterLink.mjs","sources":["../../../../src/composables/useRouterLink.ts"],"sourcesContent":["import { computed, PropType, getCurrentInstance, type ExtractPropTypes } from 'vue'\n\nimport { useGlobalConfig } from '../services/global-config'\n\nexport const useRouterLinkProps = {\n  tag: { type: String, default: 'span' },\n  to: { type: [String, Object] as PropType<string | Record<string, any>>, default: undefined },\n  replace: { type: Boolean, default: undefined },\n  append: { type: Boolean, default: undefined },\n  exact: { type: Boolean, default: undefined },\n  activeClass: { type: String, default: undefined },\n  exactActiveClass: { type: String, default: undefined },\n  href: { type: String, default: undefined },\n  target: { type: String, default: undefined },\n  disabled: { type: Boolean, default: false },\n}\n\nexport const useRouterLink = (props: ExtractPropTypes<typeof useRouterLinkProps>) => {\n  const currentInstance = getCurrentInstance()\n\n  const globalProperties = computed(() => currentInstance?.appContext.config.globalProperties)\n  const vueRouter = computed(() => globalProperties.value?.$router)\n  const vueRoute = computed(() => globalProperties.value?.$route)\n\n  const { getGlobalConfig } = useGlobalConfig()\n\n  const tagComputed = computed(() => {\n    if (props.disabled) { return props.tag }\n\n    if (props.href && !props.to) { return 'a' }\n\n    const globalConfig = getGlobalConfig()\n\n    if (globalConfig.routerComponent && props.to) { return globalConfig.routerComponent }\n\n    if (props.to && vueRouter.value !== undefined) { return 'router-link' }\n    if (props.to && vueRouter.value === undefined) { return 'a' }\n\n    return props.tag || 'div'\n  })\n\n  const isLinkTag = computed(() => {\n    if (props.disabled) { return false }\n\n    return Boolean(props.href || props.to)\n  })\n\n  const linkAttributesComputed = computed(() => {\n    if (!isLinkTag.value) { return {} }\n\n    return tagComputed.value === 'a'\n      ? {\n        target: props.target,\n        href: hrefComputed.value,\n      }\n      : {\n        target: props.target,\n        to: props.to,\n        replace: props.replace,\n        append: props.append,\n        activeClass: props.activeClass,\n        exact: props.exact,\n        exactActiveClass: props.exactActiveClass,\n      }\n  })\n\n  const isActiveRouterLink = computed(() => {\n    if (!vueRouter.value || !props.to) { return false }\n\n    const to = vueRouter.value.resolve(props.to).href\n    const currentHref = vueRouter.value.currentRoute.value.path\n\n    return to.replace('#', '') === currentHref.replace('#', '')\n  })\n\n  const hrefComputed = computed(() => {\n    if (props.href) { return props.href }\n\n    if (vueRoute.value === undefined && props.to) {\n      return props.to\n    }\n\n    // to resolve href on server for SEO optimization\n    // https://github.com/nuxt/nuxt.js/issues/8204\n    return props.to ? vueRouter.value?.resolve(props.to, vueRoute.value).href : undefined\n  })\n\n  return {\n    isLinkTag,\n    tagComputed,\n    hrefComputed,\n    isActiveRouterLink,\n    linkAttributesComputed,\n  }\n}\n"],"names":[],"mappings":"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"}