{"version":3,"file":"router.mjs","names":["computed","nextTick","onScopeDispose","reactive","resolveDynamicComponent","toRef","deepEqual","getCurrentInstance","hasEvent","IN_BROWSER","propsFactory","useRoute","vm","proxy","$route","useRouter","$router","useLink","props","attrs","RouterLink","isLink","href","to","isClickable","value","linkProps","routerLink","link","undefined","route","isActive","exact","isExactActive","query","navigate","makeRouterProps","String","replace","Boolean","Object","inTransition","useBackButton","router","cb","popped","removeBefore","removeAfter","window","addEventListener","onPopstate","beforeEach","from","next","setTimeout","afterEach","removeEventListener","e","state","replaced"],"sources":["../../src/composables/router.tsx"],"sourcesContent":["// Utilities\nimport {\n computed,\n nextTick,\n onScopeDispose, reactive,\n resolveDynamicComponent,\n toRef,\n} from 'vue'\nimport { deepEqual, getCurrentInstance, hasEvent, IN_BROWSER, propsFactory } from '@/util'\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 '@/util'\n\nexport function useRoute (): Ref {\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 extends Omit>, 'href'> {\n isLink: ComputedRef\n isClickable: ComputedRef\n href: Ref\n linkProps: Record\n}\n\nexport function useLink (props: LinkProps & LinkListeners, attrs: SetupContext['attrs']): UseLink {\n const RouterLink = resolveDynamicComponent('RouterLink') as typeof _RouterLink | 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' || !('useLink' in RouterLink)) {\n const href = toRef(props, 'href')\n return {\n isLink,\n isClickable,\n href,\n linkProps: reactive({ href }),\n }\n }\n // vue-router useLink `to` prop needs to be reactive and useLink will crash if undefined\n const linkProps = computed(() => ({\n ...props,\n to: toRef(() => props.to || ''),\n }))\n\n const routerLink = RouterLink.useLink(linkProps.value as UseLinkOptions)\n // Actual link needs to be undefined when to prop is not used\n const link = computed(() => props.to ? routerLink : undefined)\n const route = useRoute()\n const isActive = computed(() => {\n if (!link.value) return false\n if (!props.exact) return link.value.isActive?.value ?? false\n if (!route.value) return link.value.isExactActive?.value ?? false\n\n return link.value.isExactActive?.value && deepEqual(link.value.route.value.query, route.value.query)\n })\n const href = computed(() => props.to ? link.value?.route.value.href : props.href)\n\n return {\n isLink,\n isClickable,\n isActive,\n route: link.value?.route,\n navigate: link.value?.navigate,\n href,\n linkProps: reactive({\n href,\n 'aria-current': computed(() => isActive.value ? 'page' : undefined),\n }),\n }\n}\n\nexport const makeRouterProps = propsFactory({\n href: String,\n replace: Boolean,\n to: [String, Object] as PropType,\n exact: Boolean,\n}, 'router')\n\nlet inTransition = false\nexport function useBackButton (router: Router | undefined, cb: (next: NavigationGuardNext) => void) {\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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","ignoreList":[]}