{"version":3,"sources":["../src/composables/router/suspense-route-bucket.ts","../src/composables/router/scroll-behavior.ts","../src/utils.ts","../src/logger.ts","../src/injections.ts","../src/composables/page-error.ts","../src/components/VErrorPage/VErrorPage.tsx","../src/composables/page-control.ts","../src/composables/plugin.ts","../src/composables/state.ts","../src/components/VPage.tsx","../src/components/VPageProgress/VPageProgress.tsx","../src/components/VPageLink.ts","../src/components/VPageRoot/VPageRoot.tsx"],"names":["name","_createVNode","Component","EV","ref","computed","IN_WINDOW","stringifyQuery","prefetch","inject","defineComponent","h","_Fragment"],"mappings":"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","file":"vue-page.mjs","sourcesContent":["import { EV } from '@fastkit/ev';\nimport { ref, VNode, ComputedRef, computed } from 'vue';\n\nexport type SuspenseRouteSource = VNode;\n\nexport interface SuspenseRouteBucketPayload {\n  bucket: SuspenseRouteBucket;\n  source: SuspenseRouteSource;\n}\n\nexport interface SuspenseRouteBucketEventMap {\n  push: SuspenseRouteBucketPayload;\n  remove: SuspenseRouteBucketPayload;\n  start: SuspenseRouteBucketPayload;\n  finish: SuspenseRouteBucketPayload;\n}\n\nexport interface SuspenseRouteBucketProgress {\n  total: number;\n  resolved: number;\n}\n\nclass SuspenseRouteBucket extends EV<SuspenseRouteBucketEventMap> {\n  private readonly _sources = ref<SuspenseRouteSource[]>([]);\n\n  private readonly _total = ref(0);\n\n  private readonly _progress: ComputedRef<SuspenseRouteBucketProgress>;\n\n  get sources() {\n    return this._sources.value;\n  }\n\n  get total() {\n    return this._total.value;\n  }\n\n  get progress() {\n    return this._progress.value;\n  }\n\n  constructor() {\n    super();\n    this._progress = computed(() => {\n      const { total, sources } = this;\n      return {\n        total,\n        resolved: total - sources.length,\n      };\n    });\n    this.push = this.push.bind(this);\n    this.remove = this.remove.bind(this);\n  }\n\n  push(source?: SuspenseRouteSource) {\n    if (!source) return;\n    const { sources } = this;\n    if (!sources.includes(source)) {\n      sources.push(source);\n      this._total.value++;\n      const payload: SuspenseRouteBucketPayload = { bucket: this, source };\n      this.emit('push', payload);\n      if (sources.length === 1) {\n        this.emit('start', payload);\n      }\n    }\n  }\n\n  remove(source?: SuspenseRouteSource) {\n    if (!source) return;\n    const { sources } = this;\n    const index = sources.indexOf(source);\n    if (index !== -1) {\n      sources.splice(index, 1);\n      const payload: SuspenseRouteBucketPayload = { bucket: this, source };\n      this.emit('remove', payload);\n      if (sources.length === 0) {\n        this._total.value = 0;\n        this.emit('finish', payload);\n      }\n    }\n  }\n\n  ensureReady() {\n    return new Promise<void>((resolve) => {\n      const { total } = this;\n      if (total === 0) return resolve();\n      this.once('finish', () => {\n        resolve();\n      });\n    });\n  }\n}\n\nlet _suspenseRouteBucket: SuspenseRouteBucket | undefined;\n\nexport function getSuspenseRouteBucket() {\n  if (!_suspenseRouteBucket) {\n    _suspenseRouteBucket = new SuspenseRouteBucket();\n  }\n  return _suspenseRouteBucket;\n}\n","import { ComponentCustomOptions } from 'vue';\nimport type { RouterScrollBehavior, RouteLocationNormalized } from 'vue-router';\nimport { getRouteMatchedComponents } from '@fastkit/vue-utils';\nimport { getSuspenseRouteBucket } from './suspense-route-bucket';\n\nexport type RawRouterScrollBehavior = 'top' | RouterScrollBehavior;\n\ndeclare module 'vue' {\n  // eslint-disable-next-line no-shadow\n  export interface ComponentCustomOptions {\n    scrollBehavior?: RawRouterScrollBehavior;\n  }\n}\n\nexport type ScrollBehaviorMessengerFn = (canceled: boolean) => any;\n\nexport class ScrollBehaviorMessenger {\n  private static fns: ScrollBehaviorMessengerFn[] = [];\n\n  static trigger() {\n    this.fns.forEach((fn) => fn(false));\n    this.fns = [];\n  }\n\n  static reserveNextPosition(position: any) {\n    return new Promise<any>((resolve) => {\n      this.fns.push((canceled) => {\n        resolve(canceled ? undefined : position);\n      });\n    });\n  }\n\n  static release() {\n    this.fns.forEach((fn) => fn(true));\n    this.fns = [];\n  }\n}\n\nfunction resolveRawRouterScrollBehavior(\n  source: RawRouterScrollBehavior,\n): RouterScrollBehavior {\n  if (source === 'top') {\n    source = (to, from, savedPosition) => savedPosition || { top: 0, left: 0 };\n  }\n  return source;\n}\n\nfunction extractMatchedBehaviors(route: RouteLocationNormalized) {\n  const components = getRouteMatchedComponents(\n    route,\n  ) as ComponentCustomOptions[];\n  const behaviors: RouterScrollBehavior[] = [];\n  components.forEach(({ scrollBehavior }) => {\n    if (scrollBehavior != null) {\n      behaviors.push(resolveRawRouterScrollBehavior(scrollBehavior));\n    }\n  });\n  return behaviors;\n}\n\nfunction findLastMatchedBehavior(\n  route: RouteLocationNormalized,\n): RouterScrollBehavior | undefined {\n  const behaviors = extractMatchedBehaviors(route);\n  return behaviors[behaviors.length - 1];\n}\n\nexport function createScrollBehavior(): RouterScrollBehavior {\n  const scrollBehavior: RouterScrollBehavior = (to, from, savedPosition) => {\n    // If the returned position is falsy or an empty object, will retain current scroll position\n    let position: any = false;\n    const isRouteChanged = to !== from;\n\n    // savedPosition is only available for popstate navigations (back button)\n    if (savedPosition) {\n      position = savedPosition;\n    } else if (isRouteChanged) {\n      const matchedBehavior =\n        findLastMatchedBehavior(to) || resolveRawRouterScrollBehavior('top');\n      position = matchedBehavior(to, from, savedPosition);\n    } else if (to.path === from.path && to.hash !== from.hash) {\n      // nextTick(() => nuxt.$emit('triggerScroll'));\n    }\n\n    return getSuspenseRouteBucket()\n      .ensureReady()\n      .then(async () => {\n        // coords will be used if no selector is provided,\n        // or if the selector didn't match any element.\n        if (to.hash) {\n          let { hash } = to;\n          // CSS.escape() is not supported with IE and Edge.\n          if (\n            typeof window.CSS !== 'undefined' &&\n            typeof window.CSS.escape !== 'undefined'\n          ) {\n            hash = `#${window.CSS.escape(hash.substr(1))}`;\n          }\n          try {\n            const el = document.querySelector(hash);\n            if (el) {\n              // scroll to anchor by returning the selector\n              position = { el: hash };\n              // Respect any scroll-margin-top set in CSS when scrolling to anchor\n              // const _scrollMarginTop = getComputedStyle(el).scrollMarginTop;\n              // if (_scrollMarginTop != null) {\n              //   position.behavior =\n              // }\n              // const y = Number(getComputedStyle(el)['scroll-margin-top']?.replace('px', ''))\n              // if (y) {\n              //   position.offset = { y }\n              // }\n            }\n          } catch (e) {\n            // eslint-disable-next-line no-console\n            console.warn(\n              'Failed to save scroll position. Please add CSS.escape() polyfill (https://github.com/mathiasbynens/CSS.escape).',\n            );\n          }\n        }\n\n        return ScrollBehaviorMessenger.reserveNextPosition(position);\n      });\n  };\n  return scrollBehavior;\n}\n","import {\n  stringifyQuery,\n  RouteLocationMatched,\n  RouteLocationNormalized,\n} from 'vue-router';\nimport { isObject, IN_WINDOW } from '@fastkit/helpers';\nimport { RouteMatchedItem, RawRouteComponent } from '@fastkit/vue-utils';\nimport {\n  WatchQueryOption,\n  RouterViewSlotProps,\n  VuePageKeyOverride,\n} from './schemes';\n\nexport function parseWatchQueryOption(\n  route: RouteLocationNormalized,\n  opts?: WatchQueryOption,\n): string {\n  // if (!opts) return route.path;\n  if (opts === true) {\n    opts = Object.keys(route.query);\n  }\n  if (!opts || !opts.length) return '';\n  const query: RouteLocationNormalized['query'] = {};\n  opts.forEach((row) => {\n    query[row] = route.query[row];\n  });\n  const queryStr = stringifyQuery(query);\n  // let key = route.path;\n  let key = '&';\n  if (queryStr) {\n    key += `?${queryStr}`;\n  }\n  return key;\n}\n\nexport function extractWatchQueryOption(\n  source: any,\n): WatchQueryOption | undefined {\n  if (!isObject<any>(source)) return;\n  if (source.watchQuery) return source.watchQuery;\n  if (isObject(source.type) && source.type.watchQuery) {\n    return source.type.watchQuery;\n  }\n}\n\nexport function generateWatchQueryKeySuffix(routeProps: {\n  Component: RouterViewSlotProps['Component'] | RawRouteComponent;\n  route: RouteLocationNormalized;\n}): string {\n  const option = extractWatchQueryOption(routeProps.Component);\n  return parseWatchQueryOption(routeProps.route, option);\n}\n\nconst interpolatePath = (\n  route: {\n    params: RouteLocationNormalized['params'];\n  },\n  match: {\n    path: RouteLocationMatched['path'];\n  },\n) =>\n  match.path\n    .replace(/(:\\w+)\\([^)]+\\)/g, '$1')\n    .replace(/(:\\w+)[?+*]/g, '$1')\n    .replace(/:\\w+/g, (r) => route.params[r.slice(1)]?.toString() || '');\n\nexport const generateRouteKey = (\n  routeProps: RouterViewSlotProps,\n  override?: VuePageKeyOverride,\n): string => {\n  const matchedRoute = routeProps.route.matched.find(\n    (m) =>\n      routeProps.Component &&\n      m.components?.default === routeProps.Component.type,\n  );\n  if (!matchedRoute) {\n    return '';\n  }\n  const source =\n    override ??\n    matchedRoute?.meta.key ??\n    interpolatePath(routeProps.route, matchedRoute);\n  return typeof source === 'function' ? source(routeProps.route) : source;\n};\n\nexport const generateRouteKeyWithWatchQuery = (\n  routeProps: RouterViewSlotProps,\n  override?: VuePageKeyOverride,\n) => {\n  const routeKey = generateRouteKey(routeProps, override);\n  if (!routeKey) return routeKey;\n  return `${routeKey}${generateWatchQueryKeySuffix(routeProps)}`;\n};\n\nexport function routeKeyWithWatchQueryByRouteItem(\n  route: RouteLocationNormalized,\n  item: RouteMatchedItem,\n) {\n  const routeKey = interpolatePath(route, item.route);\n  const routeProps = {\n    Component: item.Component,\n    route,\n  };\n  return `${routeKey}${generateWatchQueryKeySuffix(routeProps)}`;\n}\n\nlet __forcePrefetchStates: {\n  [pageKey: string]: boolean;\n} = {};\n\nexport function getForcePrefetchStates(pageKey: string) {\n  return __forcePrefetchStates[pageKey];\n}\n\nexport function consumeForcePrefetchStates(pageKey: string) {\n  const value = getForcePrefetchStates(pageKey);\n  setForcePrefetchStates(pageKey, false);\n  return value;\n}\n\nexport function setForcePrefetchStates(pageKey: string, value: boolean) {\n  if (IN_WINDOW) return;\n  if (value) {\n    __forcePrefetchStates[pageKey] = value;\n  } else {\n    delete __forcePrefetchStates[pageKey];\n  }\n}\n\nexport function resetForcePrefetchStates() {\n  __forcePrefetchStates = {};\n}\n","import { TinyLogger, createTinyError } from '@fastkit/tiny-logger';\n\nconst name = 'vue-page';\n\nexport const logger = new TinyLogger(name);\n\nexport const VuePageError = createTinyError(name);\n","import { InjectionKey, inject, onBeforeUnmount } from 'vue';\nimport type { VuePageControl, UseVuePageControlOptions } from './composables';\nimport { VuePageError } from './logger';\n\nexport const VuePageControlInjectionKey: InjectionKey<VuePageControl> =\n  Symbol('VuePageControl');\n\nexport function useVuePageControl(opts: UseVuePageControlOptions = {}) {\n  const pageControl = inject(VuePageControlInjectionKey, null);\n  if (!pageControl) {\n    throw new VuePageError(`missing provided VuePageControl.`);\n  }\n\n  const { onStart, onFinish, onError } = opts;\n  if (onStart || onFinish) {\n    onStart && pageControl.on('start', onStart);\n    onFinish && pageControl.on('finish', onFinish);\n    onError && pageControl.on('error', onError);\n\n    onBeforeUnmount(() => {\n      onStart && pageControl.off('start', onStart);\n      onFinish && pageControl.off('finish', onFinish);\n      onError && pageControl.off('error', onError);\n    });\n  }\n  return pageControl;\n}\n","const name = 'VuePageControlError';\n\nexport interface VuePageControlErrorSettings {\n  statusCode?: number;\n  message?: string;\n  stack?: string;\n}\n\nexport function isVuePageControlError(\n  source: unknown,\n): source is VuePageControlError {\n  return source instanceof VuePageControlError;\n}\n\nexport class VuePageControlError extends Error {\n  readonly name = name;\n\n  readonly statusCode: number;\n\n  constructor(\n    rawSettings: VuePageControlErrorSettings | unknown | string | Error = {},\n  ) {\n    let settings: VuePageControlErrorSettings;\n    if (rawSettings instanceof Error) {\n      if (isVuePageControlError(rawSettings)) {\n        settings = {\n          statusCode: rawSettings.statusCode,\n          message: rawSettings.message,\n          stack: rawSettings.stack,\n        };\n      } else {\n        settings = {\n          message: rawSettings.message,\n          stack: rawSettings.stack,\n        };\n      }\n    } else {\n      settings =\n        // eslint-disable-next-line no-nested-ternary\n        typeof rawSettings === 'string'\n          ? { message: rawSettings }\n          : rawSettings && typeof rawSettings === 'object'\n            ? {\n                statusCode: (rawSettings as VuePageControlErrorSettings)\n                  .statusCode,\n                message: (rawSettings as VuePageControlErrorSettings).message,\n                stack: (rawSettings as VuePageControlErrorSettings).stack,\n              }\n            : {};\n    }\n\n    const {\n      statusCode = 500,\n      message = 'An error has occurred.',\n      stack,\n    } = settings;\n    super(message);\n    this.statusCode = statusCode;\n    if (stack) {\n      this.stack = stack;\n    }\n  }\n\n  toJSON() {\n    return {\n      name: this.name,\n      statusCode: this.statusCode,\n      message: this.message,\n      stack: this.stack,\n    };\n  }\n}\n","import { createVNode as _createVNode } from \"vue\";\nimport { defineComponent } from 'vue';\nimport { useVuePageControl } from '../../injections';\nimport { VuePageControlError } from '../../composables/page-error';\nexport const VErrorPage = defineComponent({\n  name: 'VErrorPage',\n  setup() {\n    const control = useVuePageControl();\n    return () => {\n      const pageError = control.pageError || new VuePageControlError();\n      return _createVNode(\"div\", {\n        \"class\": \"v-error-page\",\n        \"style\": {\n          padding: '32px',\n          fontSize: '16px',\n          lineHeight: '1.5'\n        }\n      }, [_createVNode(\"h1\", {\n        \"class\": \"v-error-page__status-code\",\n        \"style\": {\n          fontSize: '3em',\n          margin: '16px 0'\n        }\n      }, [pageError.statusCode]), _createVNode(\"p\", {\n        \"class\": \"v-error-page__message\",\n        \"style\": {\n          margin: '1em 0'\n        }\n      }, [pageError.message]), _createVNode(\"pre\", {\n        \"class\": \"v-error-page__stack\",\n        \"style\": {\n          whiteSpace: 'pre-wrap'\n        }\n      }, [_createVNode(\"code\", {\n        \"style\": {\n          fontFamily: 'monospace, monospace',\n          fontSize: '0.75em'\n        }\n      }, [pageError.stack])])]);\n    };\n  }\n});","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-shadow */\n/* eslint-disable @typescript-eslint/ban-types */\nimport {\n  App,\n  ref,\n  Ref,\n  ComputedRef,\n  computed,\n  VNode,\n  Component,\n  InjectionKey,\n  reactive,\n} from 'vue';\nimport type {\n  Router,\n  RouteLocationNormalized,\n  RouteQueryAndHash,\n  MatcherLocationAsPath,\n  LocationQueryRaw,\n  LocationAsRelativeRaw,\n} from 'vue-router';\nimport { stringifyQuery, useLink, RouterLink } from 'vue-router';\nimport { IN_WINDOW, isPromise } from '@fastkit/helpers';\nimport {\n  extractRouteMatchedItems,\n  RouteMatchedItem,\n  getRouteQuery,\n  RouteQueryType,\n  isComponentCustomOptions,\n} from '@fastkit/vue-utils';\nimport { EV } from '@fastkit/ev';\nimport type { ServerResponse, IncomingMessage } from 'node:http';\nimport { Cookies, CookiesContext } from '@fastkit/cookies';\nimport { ResolvedRouteLocation, WatchQueryOption } from '../schemes';\nimport {\n  routeKeyWithWatchQueryByRouteItem,\n  setForcePrefetchStates,\n} from '../utils';\nimport { useVuePageControl } from '../injections';\nimport { VuePageControlError } from './page-error';\nimport { VErrorPage } from '../components/VErrorPage';\nimport { StateInjectionKey } from './state';\n\ntype InitialState = Record<string, unknown>;\n\nexport interface VuePageInjectionKey<T> extends String {}\n\nexport type VuePagePrefetchFn = (\n  this: void,\n  queue: VuePagePrefetchQueue,\n) => void | Promise<void>;\n\nexport type RawPrefetchContext = VuePagePrefetchFn | PrefetchContext;\n\nexport interface WrittenResponse {\n  status?: number;\n  statusText?: string;\n  headers?: Record<string, string>;\n}\n\nexport type WriteResponseFn = (params: WrittenResponse) => void;\n\nexport type RedirectFn = (location: string, status?: number) => void;\n\nexport interface PrefetchHandlerContext {\n  control: VuePageControl;\n  to: RouteLocationNormalized;\n  from: RouteLocationNormalized;\n  matched: {\n    from?: RouteMatchedItem;\n    to: RouteMatchedItem;\n  };\n  pageKey: string;\n}\n\nexport type PrefetchHandler = (ctx: PrefetchHandlerContext) => boolean | void;\n\ndeclare module 'vue' {\n  interface ComponentCustomOptions {\n    prefetch?: RawPrefetchContext;\n    prefetchHandler?: PrefetchHandler;\n    watchQuery?: WatchQueryOption;\n    middleware?: VuePageControlMiddlewareFn | VuePageControlMiddlewareFn[];\n  }\n}\n\nfunction extractPrefetch(Component: unknown): {\n  prefetch?: VuePagePrefetchFn;\n  middleware: VuePageControlMiddlewareFn[];\n  prefetchHandler?: PrefetchHandler;\n} | void {\n  if (!isComponentCustomOptions(Component)) return;\n  let { prefetch, middleware = [] } = Component;\n\n  if (!Array.isArray(middleware)) {\n    middleware = [middleware];\n  }\n\n  const { prefetchHandler } = Component;\n  if (prefetch && typeof prefetch === 'object') {\n    prefetch = prefetch.prefetch;\n  }\n  if (typeof prefetch === 'function' || middleware.length) {\n    return {\n      prefetch,\n      prefetchHandler,\n      middleware,\n    };\n  }\n}\n\nfunction updateWatchQueryOption(Component: unknown, queries: string[]) {\n  if (!isComponentCustomOptions(Component)) return;\n  if (Component.watchQuery === true) return;\n  Component.watchQuery = Component.watchQuery || [];\n  const { watchQuery } = Component;\n  for (const query of queries) {\n    if (!watchQuery.includes(query)) {\n      watchQuery.push(query);\n    }\n  }\n}\n\ninterface RouteMatchedItemWithPrefetch extends RouteMatchedItem {\n  prefetch?: RawPrefetchContext;\n  middleware: VuePageControlMiddlewareFn[];\n  updateQueries(queries: string[]): void;\n}\n\ninterface RequiredRouteMatchedItemWithPrefetch\n  extends RouteMatchedItemWithPrefetch {\n  prefetch: RawPrefetchContext;\n}\n\nexport function extractRouteMatchedItemsWithPrefetch(\n  control: VuePageControl,\n  to: RouteLocationNormalized,\n  from: RouteLocationNormalized,\n) {\n  const extracted: RouteMatchedItemWithPrefetch[] = [];\n  const fromMatched = extractRouteMatchedItems(from);\n  const fromItems: { [key: string]: RouteMatchedItem } = {};\n\n  fromMatched.forEach((_item) => {\n    const fromKey = routeKeyWithWatchQueryByRouteItem(from, _item);\n    fromItems[fromKey] = _item;\n  });\n\n  const matched = extractRouteMatchedItems(to);\n\n  matched.forEach((_item) => {\n    const prefetchSettings = extractPrefetch(_item.Component);\n    if (!prefetchSettings) return;\n\n    const { prefetchHandler, middleware } = prefetchSettings;\n    let { prefetch } = prefetchSettings;\n\n    const pageKey = routeKeyWithWatchQueryByRouteItem(to, _item);\n    const fromItem = fromItems[pageKey];\n\n    let forcePrefetch: boolean | undefined | void;\n\n    if (prefetchHandler) {\n      const ctx: PrefetchHandlerContext = {\n        control,\n        to,\n        from,\n        matched: {\n          from: fromItem,\n          to: _item,\n        },\n        pageKey,\n      };\n\n      forcePrefetch = prefetchHandler(ctx);\n    }\n\n    setForcePrefetchStates(pageKey, forcePrefetch || false);\n\n    if (!forcePrefetch && fromItem) {\n      // 遷移前にすでに実行されているprefetchの場合（ネストされたルートにおけるルートビュー等）はpreftechをキャンセルする\n      prefetch = undefined;\n    }\n\n    function updateQueries(queries: string[]) {\n      updateWatchQueryOption(_item.Component, queries);\n    }\n    extracted.push({ ..._item, prefetch, updateQueries, middleware });\n  });\n  return {\n    extracted,\n    matched,\n  };\n}\n\nexport type VuePageControlMiddlewareFn = (\n  ctx: VuePageControl,\n) => void | Promise<void>;\n\nexport function createMiddleware(source: VuePageControlMiddlewareFn) {\n  return source;\n}\n\ntype RedirectOptions = {\n  statusCode?: number;\n};\n\nexport type RawVuePageControlRedirectSpec =\n  | string\n  | (RouteQueryAndHash & MatcherLocationAsPath & RedirectOptions)\n  | (RouteQueryAndHash & LocationAsRelativeRaw & RedirectOptions);\n\nexport interface VuePageControlRedirectSpec\n  extends RouteQueryAndHash,\n    MatcherLocationAsPath,\n    Omit<LocationAsRelativeRaw, 'path'> {\n  statusCode: number;\n  query?: LocationQueryRaw;\n}\n\nconst DEFAULT_REDIRECT_STATUS = 302;\n\nconst STATE_BUCKET_SYMBOL = 'pgc-state';\nconst QUERY_BUCKET_SYMBOL = 'pgc-query';\n\nfunction resolveRawVuePageControlRedirectSpec(\n  source: RawVuePageControlRedirectSpec,\n): VuePageControlRedirectSpec {\n  if (typeof source === 'string') {\n    source = { path: source };\n  }\n  const { statusCode = DEFAULT_REDIRECT_STATUS, query, hash } = source;\n  const { path } = source as MatcherLocationAsPath;\n  const { name, params } = source as LocationAsRelativeRaw;\n  return {\n    statusCode,\n    query,\n    hash,\n    path,\n    name,\n    params,\n  };\n}\n\nexport interface VuePageControlSettings {\n  app: App;\n  router: Router;\n  RouterLink?: any;\n  useLink?: typeof useLink;\n  initialState?: InitialState;\n  initialRoute: ResolvedRouteLocation;\n  ErrorComponent?: Component;\n  request?: IncomingMessage;\n  response?: ServerResponse;\n  serverRedirect?: RedirectFn;\n  writeResponse?: WriteResponseFn;\n  middleware?: VuePageControlMiddlewareFn[];\n}\n\ntype RawProvided<T> = T | ((queue: VuePagePrefetchQueue) => T | Promise<T>);\n\nexport interface VuePagePrefetchProgress {\n  resolved: number;\n  total: number;\n  per: number;\n  finished: boolean;\n}\n\nexport interface VuePageControlEventMap {\n  start: VuePagePrefetchProgress;\n  finish: VuePagePrefetchProgress;\n  error: VuePageControlError;\n}\n\nconst ERROR_STATE_NAME = '__vpe__';\n\nexport class VuePageControl extends EV<VuePageControlEventMap> {\n  readonly app: App;\n\n  readonly router: Router;\n\n  readonly cookies: Cookies;\n\n  readonly RouterLink: typeof RouterLink;\n\n  readonly useLink: typeof useLink;\n\n  private _from: Ref<RouteLocationNormalized | null> = ref(null);\n\n  private _to: Ref<RouteLocationNormalized | null> = ref(null);\n\n  private _initialState: InitialState;\n\n  private _beforeRoute: Ref<ResolvedRouteLocation | null> = ref(null);\n\n  private _route: Ref<ResolvedRouteLocation>;\n\n  private _stopFn?: () => void;\n\n  private _prefetchQueues: Ref<(() => VuePagePrefetchQueue)[]> = ref([]);\n\n  private _initialStateConsumed = false;\n\n  private _runningQueues: ComputedRef<VuePagePrefetchQueue[]>;\n\n  private _preftechProgress: ComputedRef<VuePagePrefetchProgress>;\n\n  private _suspenseComponents: Ref<(() => VNode)[]> = ref([]);\n\n  private _err: Ref<(() => VuePageControlError) | null> = ref(null);\n\n  private _ErrorComponent: Component;\n\n  readonly request?: IncomingMessage;\n\n  readonly response?: ServerResponse;\n\n  private readonly _serverRedirect?: RedirectFn;\n\n  private readonly _writeResponse?: WriteResponseFn;\n\n  readonly isClient: boolean;\n\n  readonly middleware: VuePageControlMiddlewareFn[];\n\n  private _redirectSpec?: VuePageControlRedirectSpec;\n\n  private _providedMap: Map<string | InjectionKey<any>, any> = new Map();\n\n  private _transitioning = ref(false);\n\n  private _serverRedirected = ref(false);\n\n  get isServer() {\n    return !this.isClient;\n  }\n\n  get serverRedirected() {\n    return this._serverRedirected.value;\n  }\n\n  get from() {\n    return this._from.value;\n  }\n\n  get to() {\n    return this._to.value;\n  }\n\n  get initialState() {\n    return this._initialState;\n  }\n\n  get beforeRoute() {\n    return this._beforeRoute.value;\n  }\n\n  get route() {\n    return this._route.value;\n  }\n\n  get prefetchQueues() {\n    return this._prefetchQueues.value.map((g) => g());\n  }\n\n  get initialStateConsumed() {\n    return this._initialStateConsumed;\n  }\n\n  get runningQueues() {\n    return this._runningQueues.value;\n  }\n\n  get preftechProgress() {\n    return this._preftechProgress.value;\n  }\n\n  get suspenseComponents() {\n    return this._suspenseComponents.value.map((g) => g());\n  }\n\n  get pageError() {\n    const _err = this._err.value;\n    return _err && _err();\n  }\n\n  get ErrorComponent() {\n    return this._ErrorComponent;\n  }\n\n  get transitioning() {\n    return this._transitioning.value;\n  }\n\n  constructor(settings: VuePageControlSettings) {\n    super();\n\n    const {\n      app,\n      router,\n      initialState = {},\n      initialRoute,\n      ErrorComponent,\n      request,\n      response,\n      serverRedirect,\n      writeResponse,\n      middleware = [],\n    } = settings;\n\n    this.app = app;\n    this.router = router;\n    this.request = request;\n    this.response = response;\n    this.isClient = typeof window !== 'undefined';\n    this.RouterLink = settings.RouterLink || RouterLink;\n    this.useLink = settings.useLink || useLink;\n\n    const cookiesContext: CookiesContext = this.isClient\n      ? document\n      : { req: request, res: response };\n    this.cookies = new Cookies(cookiesContext, { bucket: reactive({}) });\n\n    this.middleware = middleware;\n    this._serverRedirect = serverRedirect;\n\n    this._writeResponse = writeResponse;\n\n    this._ErrorComponent = ErrorComponent || VErrorPage;\n\n    initialState[STATE_BUCKET_SYMBOL] = initialState[STATE_BUCKET_SYMBOL] || {};\n    initialState[QUERY_BUCKET_SYMBOL] = initialState[QUERY_BUCKET_SYMBOL] || {};\n\n    initialState[STATE_BUCKET_SYMBOL] = reactive<any>(\n      initialState[STATE_BUCKET_SYMBOL],\n    );\n    this._initialState = initialState;\n\n    this._route = ref(initialRoute as any) as Ref<ResolvedRouteLocation>;\n    this._runningQueues = computed(() =>\n      this.prefetchQueues.filter((q) => q.running),\n    );\n    this._preftechProgress = computed(() => {\n      const { prefetchQueues, runningQueues } = this;\n      const total = prefetchQueues.length;\n      const resolved = total - runningQueues.length;\n      const per = total === 0 ? 0 : resolved / total;\n      return {\n        total,\n        resolved,\n        per,\n        finished: resolved >= total,\n      };\n    });\n\n    (\n      [\n        '_handleBeforeResolve',\n        '_handleAfterEach',\n        'setInitialState',\n        'injectData',\n        'onSuspensePending',\n        'redirect',\n      ] as const\n    ).forEach((fn) => {\n      const _fn = this[fn];\n      this[fn] = _fn.bind(this) as any;\n    });\n\n    if (IN_WINDOW) {\n      const initialError = this.consumeInitialState(ERROR_STATE_NAME);\n      if (initialError) {\n        this._setPageError(initialError);\n      }\n    }\n\n    this._init();\n  }\n\n  /** @private */\n  _getQueryBucket(provideKey: string): string[] {\n    const obj = this.initialState[QUERY_BUCKET_SYMBOL] as any;\n    let bucket = obj[provideKey] as string[];\n    if (!bucket) {\n      bucket = [];\n      obj[provideKey] = bucket;\n    }\n    return bucket;\n  }\n\n  /** @private */\n  _pushQueryToBucket(provideKey: string, query: string) {\n    const bucket = this._getQueryBucket(provideKey);\n    if (!bucket.includes(query)) {\n      bucket.push(query);\n    }\n  }\n\n  async initState<T extends object>(\n    key: StateInjectionKey<T>,\n    initializer: () => T | Promise<T>,\n  ): Promise<T> {\n    const bucket = this.initialState[STATE_BUCKET_SYMBOL] as any;\n    let data = bucket[key as any] as T;\n    if (data === undefined) {\n      data =\n        typeof initializer === 'function' ? await initializer() : initializer;\n    }\n    bucket[key as any] = reactive(data);\n    this.app.provide(key as any, data);\n    return data;\n  }\n\n  useState<T  extends object>(key: StateInjectionKey<T>): T | undefined; // eslint-disable-line prettier/prettier\n\n  useState<T extends object>(key: StateInjectionKey<T>, defaultValue: T | (() => T)): T; // eslint-disable-line prettier/prettier\n\n  useState<T extends object>(\n    key: StateInjectionKey<T>,\n    defaultValue?: T | (() => T),\n  ): T | undefined {\n    const bucket = this.initialState[STATE_BUCKET_SYMBOL] as any;\n    let data = bucket[key as any] as T | undefined;\n    if (data === undefined) {\n      data =\n        typeof defaultValue === 'function'\n          ? (defaultValue as any)() // @TODO TS2349: This expression is not callable.\n          : defaultValue;\n    }\n    return data;\n  }\n\n  provide<T>(key: InjectionKey<T> | string, value: T) {\n    this.app.provide(key, value);\n    this._providedMap.set(key, value);\n  }\n\n  inject<T>(key: InjectionKey<T> | string): T | undefined;\n\n  inject<T>(key: InjectionKey<T> | string, defaultValue: T, treatDefaultAsFactory?: false): T; // eslint-disable-line prettier/prettier\n\n  inject<T>(key: InjectionKey<T> | string, defaultValue: T | (() => T), treatDefaultAsFactory: true): T; // eslint-disable-line prettier/prettier\n\n  inject<T>(\n    key: InjectionKey<T> | string,\n    defaultValue?: T | (() => T),\n    treatDefaultAsFactory?: boolean,\n  ): T | undefined {\n    let value = this._providedMap.get(key);\n    if (value === undefined && defaultValue !== undefined) {\n      value =\n        treatDefaultAsFactory && typeof defaultValue === 'function'\n          ? (defaultValue as () => T)()\n          : defaultValue;\n    }\n    return value;\n  }\n\n  addMiddleware(middleware: VuePageControlMiddlewareFn) {\n    this.middleware.push(middleware);\n  }\n\n  writeResponse(params: WrittenResponse) {\n    const { _writeResponse } = this;\n    if (!_writeResponse) {\n      throw new Error('missing provided writeResponse function.');\n    }\n    return _writeResponse(params);\n  }\n\n  onSuspensePending(Component: VNode) {\n    if (!this.suspenseComponents.includes(Component)) {\n      this._suspenseComponents.value.push(() => Component);\n    }\n  }\n\n  onSuspenseResolved(Component: VNode) {\n    const index = this.suspenseComponents.indexOf(Component);\n    if (index !== -1) {\n      this._suspenseComponents.value.splice(index, 1);\n    }\n  }\n\n  setInitialState(key: string, data: any) {\n    if (this.initialState) {\n      this.initialState[key] = data;\n    }\n  }\n\n  consumeInitialState(key: string) {\n    const { initialState } = this;\n    if (!initialState) return;\n    const v = initialState[key];\n    delete initialState[key];\n    return v;\n  }\n\n  injectData<T, D extends T | undefined, N extends Boolean>(\n    key: VuePageInjectionKey<T>,\n    defaultData?: D,\n    allowNull?: N,\n  ): D extends T ? T : N extends true ? T | D : T {\n    const queue = this.prefetchQueues.find(\n      ({ _provideKey }) => _provideKey === key,\n    );\n    const data = queue && queue.resolvedData;\n    const result = data === undefined ? defaultData : data;\n    if (!allowNull && result == null) {\n      throw new Error(`missing provided data. \"${key}\"`);\n    }\n    return result as any;\n  }\n\n  private _stop() {\n    if (this._stopFn) {\n      this._stopFn();\n      delete this._stopFn;\n    }\n  }\n\n  private _init() {\n    this._stop();\n\n    const fns: (() => void)[] = [];\n    fns.push(\n      this.router.beforeResolve(this._handleBeforeResolve),\n      this.router.afterEach(this._handleAfterEach),\n    );\n    this._stopFn = () => {\n      fns.forEach((fn) => fn());\n      delete this._stopFn;\n    };\n  }\n\n  private async _handleAfterEach(\n    to: RouteLocationNormalized,\n    from: RouteLocationNormalized,\n  ) {\n    delete this._redirectSpec;\n    this._transitioning.value = false;\n\n    const { router } = this;\n    this._beforeRoute.value = router.resolve(from);\n    this._route.value = router.resolve(to);\n    this.emit('finish', this.preftechProgress);\n  }\n\n  private _closePrefetchs() {\n    this.prefetchQueues.forEach((queue) => queue.close());\n    this._prefetchQueues.value = [];\n  }\n\n  redirect(redirectSpec: RawVuePageControlRedirectSpec) {\n    this._redirectSpec = resolveRawVuePageControlRedirectSpec(redirectSpec);\n    if (!this.transitioning) {\n      this._triggerRedirect();\n    }\n  }\n\n  private _triggerRedirect() {\n    const { _redirectSpec } = this;\n    if (!_redirectSpec) return;\n    let { path, query, hash } = _redirectSpec;\n    const { statusCode, name, params } = _redirectSpec;\n    if (name) {\n      const tmp = this.router.resolve({ name, params, query, hash });\n      path = tmp.path;\n      query = tmp.query;\n      hash = tmp.hash;\n    }\n    const queryStr = query ? stringifyQuery(query) : query;\n    // eslint-disable-next-line no-nested-ternary\n    const queryAppends = queryStr\n      ? path.includes('?')\n        ? `&${queryStr}`\n        : `?${queryStr}`\n      : '';\n\n    let fullPath = `${path}${queryAppends}`;\n\n    // apply base url\n    if (/^\\//.test(fullPath)) {\n      const { base } = this.router.options.history;\n      fullPath = `${base}/${fullPath.replace(/^\\//, '')}`;\n    }\n\n    if (this.isClient) {\n      const isInSite = /(^[.]{1,2}\\/)|(^\\/(?!\\/))/.test(fullPath);\n      if (isInSite) {\n        this.router.replace({ path, query, hash });\n      } else {\n        window.location.replace(fullPath);\n      }\n      return false;\n    }\n\n    if (!this._serverRedirect) {\n      throw new Error('required server redirect function.');\n    }\n\n    this._serverRedirected.value = true;\n    this._serverRedirect(fullPath, statusCode);\n  }\n\n  private async _handleBeforeResolve(\n    to: RouteLocationNormalized,\n    from: RouteLocationNormalized,\n  ) {\n    this._to.value = to;\n    this._from.value = from;\n\n    this._closePrefetchs();\n    delete this._redirectSpec;\n\n    if (IN_WINDOW && !this.initialStateConsumed && this.pageError) {\n      this._initialStateConsumed = true;\n      return;\n    }\n\n    try {\n      const { extracted, matched } = extractRouteMatchedItemsWithPrefetch(\n        this,\n        to,\n        from,\n      );\n      if (!matched.length) {\n        throw new VuePageControlError({\n          statusCode: 404,\n          message: 'This page could not be found',\n        });\n      }\n\n      this._transitioning.value = true;\n\n      const allMiddleware = [...this.middleware];\n\n      extracted.forEach(({ middleware }) => {\n        allMiddleware.push(...middleware);\n      });\n\n      for (const middlewareFn of allMiddleware) {\n        await middlewareFn(this);\n        if (this._redirectSpec) {\n          break;\n        }\n      }\n\n      if (this._redirectSpec) {\n        return this._triggerRedirect();\n      }\n\n      const requiredItems: RequiredRouteMatchedItemWithPrefetch[] =\n        extracted.filter(\n          (e) => !!e.prefetch,\n        ) as RequiredRouteMatchedItemWithPrefetch[];\n\n      if (!requiredItems.length) {\n        this._initialStateConsumed = true;\n        this._deletePageError();\n        return;\n      }\n\n      const queueSetups: Promise<any>[] = [];\n      let queues = requiredItems.map((item) => {\n        const queue = new VuePagePrefetchQueue(this, item, to);\n        if (queue._setupPromise) {\n          queueSetups.push(queue._setupPromise);\n        }\n        return queue;\n      });\n\n      this._prefetchQueues.value = queues.map((q) => () => q);\n\n      this.emit('start', this.preftechProgress);\n\n      await Promise.all(queueSetups);\n\n      if (this._redirectSpec) {\n        return this._triggerRedirect();\n      }\n\n      queues.forEach((queue) => {\n        const { item, provideKey } = queue;\n        if (provideKey) {\n          item.updateQueries(this._getQueryBucket(provideKey));\n        }\n      });\n\n      const providePromises: Promise<any>[] = [];\n\n      queues = queues.filter(({ _providePromise }) => {\n        if (!_providePromise) return false;\n        providePromises.push(_providePromise);\n        return true;\n      });\n\n      this._prefetchQueues.value = queues.map((q) => () => q);\n\n      await Promise.all(providePromises);\n\n      if (this._redirectSpec) {\n        return this._triggerRedirect();\n      }\n\n      this._initialStateConsumed = true;\n      this._deletePageError();\n    } catch (_err) {\n      this._setPageError(_err);\n    }\n  }\n\n  private _deletePageError() {\n    this._err.value = null;\n  }\n\n  private _setPageError(_err: unknown, withEmit = true) {\n    const err = new VuePageControlError(_err);\n    this._err.value = () => err;\n    if (!IN_WINDOW) {\n      this.setInitialState(ERROR_STATE_NAME, err.toJSON());\n      this._writeStates(err.statusCode);\n    }\n    withEmit && this.emit('error', err);\n    return err;\n  }\n\n  private _writeStates(status: number) {\n    if (IN_WINDOW || !this.response) return;\n    if (this.response.headersSent) return;\n    this.response.statusCode = status;\n    this.writeResponse({\n      status,\n    });\n  }\n}\n\nexport interface VuePagePrefetchQueueEventMap {\n  close: void;\n}\n\nexport class VuePagePrefetchQueue extends EV<VuePagePrefetchQueueEventMap> {\n  readonly control: VuePageControl;\n\n  readonly item: RouteMatchedItemWithPrefetch;\n\n  readonly route: RouteLocationNormalized;\n\n  private readonly _resolved = ref(false);\n\n  private readonly _canceled = ref(false);\n\n  private readonly _running: ComputedRef<boolean>;\n\n  private _resolvedData?: any;\n\n  /** @private */\n  _providePromise?: Promise<any>;\n\n  /** @private */\n  _provideKey?: string;\n\n  /** @private */\n  _setupPromise?: void | Promise<void>;\n\n  get resolved() {\n    return this._resolved.value;\n  }\n\n  get canceled() {\n    return this._canceled.value;\n  }\n\n  get provideKey() {\n    return this._provideKey;\n  }\n\n  get resolvedData() {\n    return this._resolvedData;\n  }\n\n  get params() {\n    return this.route.params;\n  }\n\n  get query() {\n    return this.route.query;\n  }\n\n  get running() {\n    return this._running.value;\n  }\n\n  constructor(\n    control: VuePageControl,\n    item: RequiredRouteMatchedItemWithPrefetch,\n    to: RouteLocationNormalized,\n  ) {\n    super();\n\n    this.control = control;\n    this.item = item;\n    this.route = to;\n\n    (\n      ['close', 'cancel', 'provide', 'injectOtherQueue', 'getQuery'] as const\n    ).forEach((fn) => {\n      const _fn = this[fn];\n      this[fn] = _fn.bind(this) as any;\n    });\n    this._running = computed(() => !this.resolved && !this.canceled);\n\n    const prefetchFn =\n      typeof item.prefetch === 'function'\n        ? item.prefetch\n        : item.prefetch.prefetch;\n\n    this._setupPromise = prefetchFn(this);\n  }\n\n  getQuery(key: string): string | undefined;\n\n  // eslint-disable-next-line no-dupe-class-members\n  getQuery(key: string, type: undefined, defaultValue: string): string;\n\n  // eslint-disable-next-line no-dupe-class-members\n  getQuery(key: string, type: StringConstructor): string | undefined;\n\n  // eslint-disable-next-line no-dupe-class-members\n  getQuery(key: string, type: StringConstructor, defaultValue: string): string;\n\n  // eslint-disable-next-line no-dupe-class-members\n  getQuery(key: string, type: NumberConstructor): number | undefined;\n\n  // eslint-disable-next-line no-dupe-class-members\n  getQuery(key: string, type: NumberConstructor, defaultValue: number): number;\n\n  // eslint-disable-next-line no-dupe-class-members\n  getQuery(key: string, type: BooleanConstructor): boolean;\n\n  // eslint-disable-next-line no-dupe-class-members\n  getQuery(\n    key: string,\n    type: BooleanConstructor,\n    defaultValue: boolean,\n  ): boolean;\n\n  // eslint-disable-next-line no-dupe-class-members\n  getQuery(\n    key: string,\n    // eslint-disable-next-line default-param-last\n    type: RouteQueryType = String,\n    defaultValue?: string | number | boolean,\n  ): string | number | boolean | undefined {\n    const { provideKey } = this;\n    if (!provideKey) {\n      throw new Error('missing provideKey');\n    }\n    this.control._pushQueryToBucket(provideKey, key);\n    return getRouteQuery(this.query, key, type as any, defaultValue as any);\n  }\n\n  close() {\n    this._canceled.value = true;\n    this.emit('close', undefined);\n    this.offAll();\n    delete this._providePromise;\n    delete this._setupPromise;\n    delete this._resolvedData;\n    delete (this as any).item;\n    delete (this as any).control;\n  }\n\n  cancel() {\n    return this.close();\n  }\n\n  provide<T>(key: VuePageInjectionKey<T>, data: RawProvided<T>) {\n    this._provideKey = key as string;\n    let promise: Promise<any>;\n\n    if (IN_WINDOW && !this.control.initialStateConsumed) {\n      const consumed = this.control.consumeInitialState(key as string);\n      promise = Promise.resolve(consumed);\n    } else if (typeof data !== 'function') {\n      promise = Promise.resolve(data);\n    } else {\n      const payload = (data as any)(this);\n      promise = isPromise(payload) ? payload : Promise.resolve(payload);\n    }\n\n    this._providePromise = promise.then((v) => {\n      this._resolved.value = true;\n      this._resolvedData = v;\n      if (!IN_WINDOW) {\n        this.control.setInitialState(key as string, v);\n      }\n      return v;\n    });\n    return this._providePromise;\n  }\n\n  injectOtherQueue<T, D extends T | undefined>(\n    key: VuePageInjectionKey<T>,\n    defaultData?: D,\n  ): Promise<T | D> {\n    const queue = this.control.prefetchQueues.find(\n      ({ _provideKey }) => _provideKey === key,\n    );\n    if (!queue || !queue._providePromise)\n      return Promise.resolve(defaultData as D);\n\n    return queue._providePromise.then((value) => {\n      const v = (value === undefined ? defaultData : value) as T | D;\n      return v;\n    });\n  }\n}\n\nexport interface UseVuePageControlOptions {\n  onStart?: (progress: VuePagePrefetchProgress) => any;\n  onFinish?: (progress: VuePagePrefetchProgress) => any;\n  onError?: (error: VuePageControlError) => any;\n}\n\nexport type PrefetchContext<T = any> = {\n  key: VuePageInjectionKey<T>;\n  prefetch: VuePagePrefetchFn;\n  inject: <D extends T | undefined, N extends Boolean>(\n    defaultValue?: D,\n    allowNull?: N,\n  ) => D extends T ? T : N extends true ? T | D : T;\n};\n\nexport function createPrefetch<T>(\n  key: VuePageInjectionKey<T>,\n  data: RawProvided<T>,\n): PrefetchContext<T> {\n  const prefetch: VuePagePrefetchFn = function prefetch(queue) {\n    return queue.provide(key, data);\n  };\n\n  function inject<D extends T | undefined, N extends Boolean>(\n    defaultValue?: D,\n    allowNull?: N,\n  ): D extends T ? T : N extends true ? T | D : T {\n    const pageControl = useVuePageControl();\n    return pageControl.injectData(key, defaultValue, allowNull);\n  }\n\n  return { key, prefetch, inject };\n}\n","import { VuePageControl, VuePageControlSettings } from './page-control';\nimport { VuePageControlInjectionKey } from '../injections';\n\ndeclare module 'vue' {\n  export interface ComponentCustomProperties {\n    $vpc: VuePageControl;\n  }\n}\nexport function installVuePageControl(settings: VuePageControlSettings) {\n  const pageControl = new VuePageControl(settings);\n  settings.app.provide(VuePageControlInjectionKey, pageControl);\n  settings.app.config.globalProperties.$vpc = pageControl;\n  return pageControl;\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport { inject, provide } from 'vue';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface StateInjectionKey<T extends object> extends String {}\n\nexport function useState<T extends object>(key: StateInjectionKey<T>): T | undefined; // eslint-disable-line prettier/prettier\nexport function useState<T extends object>(key: StateInjectionKey<T>, defaultValue: T | (() => T)): T; // eslint-disable-line prettier/prettier\nexport function useState<T extends object>(\n  key: StateInjectionKey<T>,\n  defaultValue?: T | (() => T),\n): T | undefined {\n  return inject(key as any, defaultValue, true) as any;\n}\n\nexport function provideState<T extends object>(\n  key: StateInjectionKey<T>,\n  value: T,\n) {\n  return provide(key as any, value);\n}\n","import { resolveDirective as _resolveDirective, createVNode as _createVNode } from \"vue\";\nimport { defineComponent, Transition, ref, computed, h } from 'vue';\nimport { RouterView } from 'vue-router';\nimport { withCtx } from '@fastkit/vue-utils';\nimport { generateRouteKeyWithWatchQuery, consumeForcePrefetchStates } from '../utils';\nimport { ScrollBehaviorMessenger } from '../composables';\nconst DEFAULT_TRANSITION = 'page';\nexport const VPage = defineComponent({\n  name: 'VPage',\n  props: {\n    pageKey: {\n      type: [Function, String],\n      default: null\n    }\n  },\n  setup(props) {\n    // const pageControl = useVuePageControl();\n    const currentComponent = ref(null);\n    const transition = computed(() => {\n      const vnode = currentComponent.value;\n      if (!vnode) return DEFAULT_TRANSITION;\n      return DEFAULT_TRANSITION;\n    });\n\n    /**\n     * @TODO\n     */\n    // function onSuspensePending(Component: VNode) {\n    //   currentComponent.value = Component;\n    //   pageControl.onSuspensePending(Component);\n    // }\n\n    // function onSuspenseResolved(Component: VNode) {\n    //   pageControl.onSuspenseResolved(Component);\n    // }\n\n    return () => _createVNode(RouterView, null, {\n      default: withCtx(routeProps => {\n        const {\n          Component\n        } = routeProps;\n        let key = generateRouteKeyWithWatchQuery(routeProps, props.pageKey);\n        if (consumeForcePrefetchStates(key)) {\n          key = `${key}:${Date.now()}`;\n        }\n        return [_createVNode(Transition, {\n          \"name\": transition.value,\n          \"mode\": \"out-in\",\n          \"onEnter\": ev => {\n            ScrollBehaviorMessenger.trigger();\n          },\n          \"onEnterCancelled\": () => {\n            ScrollBehaviorMessenger.release();\n          }\n        }, {\n          default: () => [Component ? h(Component, {\n            key\n          }) : undefined]\n        })];\n      })\n    });\n  }\n});","import { createVNode as _createVNode } from \"vue\";\nimport { defineComponent, computed, ref, nextTick } from 'vue';\nimport { NumberishPropOption, resolveNumberish } from '@fastkit/vue-utils';\nimport { useVuePageControl } from '../../injections';\nexport const VPageProgress = defineComponent({\n  name: 'VPageProgress',\n  props: {\n    color: String,\n    failedColor: String,\n    height: NumberishPropOption,\n    throttle: NumberishPropOption,\n    duration: NumberishPropOption,\n    continuous: Boolean,\n    rtl: Boolean\n  },\n  setup(props) {\n    useVuePageControl({\n      onStart: () => {\n        start();\n      },\n      onFinish: () => {\n        finish();\n      },\n      onError: () => {\n        canSucceed.value = false;\n      }\n    });\n    let _timer = null;\n    let _throttle = null;\n    let _cut;\n    const show = ref(false);\n    const percent = ref(0);\n    const skipTimerCount = ref(0);\n    const canSucceed = ref(true);\n    const throttle = computed(() => resolveNumberish(props.throttle, 200));\n    const duration = computed(() => resolveNumberish(props.duration, 3000));\n    const reversed = ref(props.rtl);\n    const continuous = computed(() => props.continuous);\n    const color = computed(() => props.color || 'black');\n    const failedColor = computed(() => props.failedColor || 'red');\n    const height = computed(() => resolveNumberish(props.height, 2));\n    const width = computed(() => `${percent.value}%`);\n    const styles = computed(() => ({\n      position: 'fixed',\n      top: 0,\n      left: props.rtl ? 'auto' : 0,\n      right: 0,\n      zIndex: 999999,\n      width: width.value,\n      height: `${height.value}px`,\n      background: canSucceed.value ? color.value : failedColor.value,\n      opacity: 1,\n      // transition: `width ${duration.value}ms`,\n      transition: `width 0.1s, opacity 0.4s`\n    }));\n    function clear() {\n      _timer !== null && clearInterval(_timer);\n      _throttle !== null && clearTimeout(_throttle);\n      _timer = null;\n    }\n\n    // function set(num: number) {\n    //   show.value = true;\n    //   canSucceed.value = true;\n    //   percent.value = Math.min(100, Math.max(0, Math.floor(num)));\n    // }\n\n    function increase(num) {\n      percent.value = Math.min(100, Math.floor(percent.value + num));\n    }\n    function decrease(num) {\n      percent.value = Math.max(0, Math.floor(percent.value - num));\n    }\n\n    // function pause() {\n    //   _timer !== null && window.clearInterval(_timer);\n    // }\n\n    // function resume() {\n    //   startTimer();\n    // }\n\n    function finish() {\n      percent.value = reversed.value ? 0 : 100;\n      hide();\n    }\n    function hide() {\n      clear();\n      window.setTimeout(() => {\n        show.value = false;\n        nextTick(() => {\n          percent.value = 0;\n          reversed.value = false;\n        });\n      }, 500);\n    }\n\n    // function fail(error: unknown) {\n    //   canSucceed.value = false;\n    // }\n\n    function start() {\n      clear();\n      percent.value = 0;\n      reversed.value = false;\n      skipTimerCount.value = 0;\n      canSucceed.value = true;\n      if (throttle.value) {\n        _throttle = window.setTimeout(() => startTimer(), throttle.value);\n      } else {\n        startTimer();\n      }\n    }\n    function startTimer() {\n      if (!show.value) {\n        show.value = true;\n      }\n      _timer = window.setInterval(() => {\n        if (typeof _cut === 'undefined') {\n          _cut = 10000 / Math.floor(duration.value);\n        }\n        if (skipTimerCount.value > 0) {\n          skipTimerCount.value--;\n          return;\n        }\n        if (reversed.value) {\n          decrease(_cut);\n        } else {\n          increase(_cut);\n        }\n        if (continuous.value && (percent.value >= 100 || percent.value <= 0)) {\n          skipTimerCount.value = 1;\n          reversed.value = !reversed.value;\n        }\n      }, 100);\n    }\n    return () => {\n      if (!show.value) return;\n      return _createVNode(\"div\", {\n        \"class\": \"v-page-progress\",\n        \"style\": styles.value\n      }, null);\n    };\n  }\n});","import { h, defineComponent } from 'vue';\nimport type { RouterLink } from 'vue-router';\nimport { useVuePageControl } from '../injections';\n\nexport const VPageLink = defineComponent({\n  name: 'VPageLink',\n  setup(_props, ctx) {\n    const vpc = useVuePageControl();\n    return () => h(vpc.RouterLink as any, ctx.attrs, ctx.slots);\n  },\n}) as unknown as typeof RouterLink;\n","import { createVNode as _createVNode, Fragment as _Fragment } from \"vue\";\nimport { defineComponent, h } from 'vue';\nimport { ClientOnly } from '@fastkit/vue-utils';\nimport { useRouter } from 'vue-router';\nimport { VPageProgress } from '../VPageProgress';\nimport { useVuePageControl } from '../../injections';\nexport const VPageRoot = defineComponent({\n  name: 'VPageRoot',\n  setup(props, ctx) {\n    const control = useVuePageControl();\n    useRouter();\n    return () => {\n      if (control.serverRedirected) {\n        return [];\n      }\n      const {\n        pageError\n      } = control;\n      const content = pageError ? h(control.ErrorComponent, {\n        key: 'error'\n      }) : ctx.slots.default?.();\n      return _createVNode(_Fragment, null, [content, _createVNode(ClientOnly, null, {\n        default: () => [_createVNode(VPageProgress, null, null)]\n      })]);\n    };\n  }\n});"]}