{"version":3,"file":"router.mjs","names":["computed","nextTick","onScopeDispose","resolveDynamicComponent","toRef","getCurrentInstance","hasEvent","IN_BROWSER","propsFactory","useRoute","vm","_vm$proxy","proxy","$route","useRouter","_getCurrentInstance","$router","useLink","props","attrs","RouterLink","isLink","href","to","isClickable","value","link","undefined","route","navigate","isActive","_link$isExactActive","_link$isActive","exact","isExactActive","makeRouterProps","String","replace","Boolean","Object","inTransition","useBackButton","router","cb","popped","removeBefore","removeAfter","window","addEventListener","onPopstate","beforeEach","from","next","setTimeout","afterEach","_removeBefore","_removeAfter","removeEventListener","e","_e$state","state","replaced"],"sources":["../../src/composables/router.tsx"],"sourcesContent":["// Utilities\nimport {\n  computed,\n  nextTick,\n  onScopeDispose,\n  resolveDynamicComponent,\n  toRef,\n} from 'vue'\nimport { getCurrentInstance, hasEvent, IN_BROWSER, propsFactory } from '@/utils'\n\n// Types\nimport type { ComputedRef, PropType, Ref, SetupContext } from 'vue'\nimport type {\n  RouterLink as _RouterLink,\n  useLink as _useLink,\n  NavigationGuardNext,\n  RouteLocationNormalizedLoaded,\n  RouteLocationRaw,\n  Router,\n  UseLinkOptions,\n} from 'vue-router'\nimport type { EventProp } from '@/utils'\n\nexport function useRoute(): Ref<RouteLocationNormalizedLoaded | undefined> {\n  const vm = getCurrentInstance('useRoute')\n\n  return computed(() => vm?.proxy?.$route)\n}\n\nexport function useRouter(): Router | undefined {\n  return getCurrentInstance('useRouter')?.proxy?.$router\n}\n\nexport interface LinkProps {\n  href: string | undefined\n  replace: boolean | undefined\n  to: RouteLocationRaw | undefined\n  exact: boolean | undefined\n}\n\nexport interface LinkListeners {\n  onClick?: EventProp | undefined\n  onClickOnce?: EventProp | undefined\n}\n\nexport interface UseLink\n  extends Omit<Partial<ReturnType<typeof _useLink>>, 'href'> {\n  isLink: ComputedRef<boolean>\n  isClickable: ComputedRef<boolean>\n  href: Ref<string | undefined>\n}\n\nexport function useLink(\n  props: LinkProps & LinkListeners,\n  attrs: SetupContext['attrs']\n): UseLink {\n  const RouterLink = resolveDynamicComponent('RouterLink') as\n    | typeof _RouterLink\n    | string\n\n  const isLink = computed(() => !!(props.href || props.to))\n  const isClickable = computed(() => {\n    return isLink?.value || hasEvent(attrs, 'click') || hasEvent(props, 'click')\n  })\n\n  if (typeof RouterLink === 'string') {\n    return {\n      isLink,\n      isClickable,\n      href: toRef(props, 'href'),\n    }\n  }\n\n  const link = props.to\n    ? RouterLink.useLink(props as UseLinkOptions)\n    : undefined\n\n  return {\n    isLink,\n    isClickable,\n    route: link?.route,\n    navigate: link?.navigate,\n    isActive:\n      link &&\n      computed(() =>\n        props.exact ? link.isExactActive?.value : link.isActive?.value\n      ),\n    href: computed(() => (props.to ? link?.route.value.href : props.href)),\n  }\n}\n\nexport const makeRouterProps = propsFactory(\n  {\n    href: String,\n    replace: Boolean,\n    to: [String, Object] as PropType<RouteLocationRaw>,\n    exact: Boolean,\n  },\n  'router'\n)\n\nlet inTransition = false\nexport function useBackButton(\n  router: Router | undefined,\n  cb: (next: NavigationGuardNext) => void\n) {\n  let popped = false\n  let removeBefore: (() => void) | undefined\n  let removeAfter: (() => void) | undefined\n\n  if (IN_BROWSER) {\n    nextTick(() => {\n      window.addEventListener('popstate', onPopstate)\n      removeBefore = router?.beforeEach((to, from, next) => {\n        if (!inTransition) {\n          setTimeout(() => (popped ? cb(next) : next()))\n        } else {\n          popped ? cb(next) : next()\n        }\n        inTransition = true\n      })\n      removeAfter = router?.afterEach(() => {\n        inTransition = false\n      })\n    })\n    onScopeDispose(() => {\n      window.removeEventListener('popstate', onPopstate)\n      removeBefore?.()\n      removeAfter?.()\n    })\n  }\n\n  function onPopstate(e: PopStateEvent) {\n    if (e.state?.replaced) return\n\n    popped = true\n    setTimeout(() => (popped = false))\n  }\n}\n"],"mappings":"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"}