import { AllowedComponentProps } from 'vue'; import { App } from 'vue'; import { Component } from 'vue'; import { ComponentCustomProps } from 'vue'; import { ComponentPublicInstance } from 'vue'; import { ComputedRef } from 'vue'; import { DefineComponent } from 'vue'; import type { InjectionKey } from 'vue'; import { Ref } from 'vue'; import { UnwrapRef } from 'vue'; import { VNode } from 'vue'; import { VNodeProps } from 'vue'; declare type Awaitable = T | Promise; /** * Creates an in-memory based history. The main purpose of this history is to handle SSR. It starts in a special location that is nowhere. * It's up to the user to replace that location with the starter location by either calling `router.push` or `router.replace`. * * @param base - Base applied to all urls, defaults to '/' * @returns a history object that can be passed to the router constructor */ export declare function createMemoryHistory(base?: string): RouterHistory; /** * Creates a Router instance that can be used by a Vue app. * * @param options - {@link RouterOptions} */ export declare function createRouter(options: RouterOptions): Router; /** * Creates a Router Matcher. * * @internal * @param routes - array of initial routes * @param globalOptions - global route options */ export declare function createRouterMatcher(routes: Readonly, globalOptions: PathParserOptions): RouterMatcher; /** * Creates a hash history. Useful for web applications with no host (e.g. `file://`) or when configuring a server to * handle any URL is not possible. * * @param base - optional base to provide. Defaults to `location.pathname + location.search` If there is a `` tag * in the `head`, its value will be ignored in favor of this parameter **but note it affects all the history.pushState() * calls**, meaning that if you use a `` tag, it's `href` value **has to match this parameter** (ignoring anything * after the `#`). * * @example * ```js * // at https://example.com/folder * createWebHashHistory() // gives a url of `https://example.com/folder#` * createWebHashHistory('/folder/') // gives a url of `https://example.com/folder/#` * // if the `#` is provided in the base, it won't be added by `createWebHashHistory` * createWebHashHistory('/folder/#/app/') // gives a url of `https://example.com/folder/#/app/` * // you should avoid doing this because it changes the original url and breaks copying urls * createWebHashHistory('/other-folder/') // gives a url of `https://example.com/other-folder/#` * * // at file:///usr/etc/folder/index.html * // for locations with no `host`, the base is ignored * createWebHashHistory('/iAmIgnored') // gives a url of `file:///usr/etc/folder/index.html#` * ``` */ export declare function createWebHashHistory(base?: string): RouterHistory; /** * Creates an HTML5 history. Most common history for single page applications. * * @param base - */ export declare function createWebHistory(base?: string): RouterHistory; /** * Internal type to define an ErrorHandler * * @param error - error thrown * @param to - location we were navigating to when the error happened * @param from - location we were navigating from when the error happened * @internal */ declare interface _ErrorListener { (error: any, to: RouteLocationNormalized, from: RouteLocationNormalizedLoaded): any; } /** * Flags so we can combine them when checking for multiple errors. This is the internal version of * {@link NavigationFailureType}. * * @internal */ export declare const enum ErrorTypes { MATCHER_NOT_FOUND = 1, NAVIGATION_GUARD_REDIRECT = 2, NAVIGATION_ABORTED = 4, NAVIGATION_CANCELLED = 8, NAVIGATION_DUPLICATED = 16 } declare type HistoryLocation = string; /** * Allowed HTML history.state */ export declare interface HistoryState { [x: number]: HistoryStateValue; [x: string]: HistoryStateValue; } /** * Allowed arrays for history.state. * * @internal */ declare interface HistoryStateArray extends Array { } /** * Allowed variables in HTML5 history state. Note that pushState clones the state * passed and does not accept everything: e.g.: it doesn't accept symbols, nor * functions as values. It also ignores Symbols as keys. * * @internal */ declare type HistoryStateValue = string | number | boolean | null | undefined | HistoryState | HistoryStateArray; /** * Check if an object is a {@link NavigationFailure}. * * @param error - possible {@link NavigationFailure} * @param type - optional types to check for * * @example * ```js * import { isNavigationFailure, NavigationFailureType } from 'vue-router' * * router.afterEach((to, from, failure) => { * // Any kind of navigation failure * if (isNavigationFailure(failure)) { * // ... * } * // Only duplicated navigations * if (isNavigationFailure(failure, NavigationFailureType.duplicated)) { * // ... * } * // Aborted or canceled navigations * if (isNavigationFailure(failure, NavigationFailureType.aborted | NavigationFailureType.canceled)) { * // ... * } * }) * ``` */ export declare function isNavigationFailure(error: any, type?: ErrorTypes.NAVIGATION_GUARD_REDIRECT): error is NavigationRedirectError; export declare function isNavigationFailure(error: any, type?: ErrorTypes | NavigationFailureType): error is NavigationFailure; declare type Lazy = () => Promise; /** * Ensures a route is loaded, so it can be passed as o prop to ``. * * @param route - resolved route to load */ export declare function loadRouteLocation(route: RouteLocationNormalized): Promise; /** * @internal */ export declare interface LocationAsRelativeRaw { name?: RouteRecordName; /** * Ignored path property since we are dealing with a relative location. Only `undefined` is allowed. */ path?: undefined; params?: RouteParamsRaw; } /** * Normalized query object that appears in {@link RouteLocationNormalized} * * @public */ export declare type LocationQuery = Record; /** * Loose {@link LocationQuery} object that can be passed to functions like * {@link Router.push} and {@link Router.replace} or anywhere when creating a * {@link RouteLocationRaw} * * @public */ export declare type LocationQueryRaw = Record; /** * Possible values in normalized {@link LocationQuery}. `null` renders the query * param but without an `=`. * * @example * ``` * ?isNull&isEmpty=&other=other * gives * `{ isNull: null, isEmpty: '', other: 'other' }`. * ``` * * @internal */ export declare type LocationQueryValue = string | null; /** * Possible values when defining a query. * * @internal */ export declare type LocationQueryValueRaw = LocationQueryValue | number | undefined; /** * RouteRecord being rendered by the closest ancestor Router View. Used for * `onBeforeRouteUpdate` and `onBeforeRouteLeave`. rvlm stands for Router View * Location Matched * * @internal */ export declare const matchedRouteKey: InjectionKey>; /** * Normalized/resolved Route location that returned by the matcher. */ declare interface MatcherLocation { /** * Name of the matched record */ name: RouteRecordName | null | undefined; /** * Percentage encoded pathname section of the URL. */ path: string; /** * Object of decoded params extracted from the `path`. */ params: RouteParams; /** * Merged `meta` properties from all the matched route records. */ meta: RouteMeta; /** * Array of {@link RouteRecord} containing components as they were * passed when adding records. It can also contain redirect records. This * can't be used directly */ matched: RouteRecord[]; } /** * @internal */ declare interface MatcherLocationAsName { name: RouteRecordName; /** * Ignored path property since we are dealing with a relative location. Only `undefined` is allowed. */ path?: undefined; params?: RouteParams; } /** * @internal */ export declare interface MatcherLocationAsPath { path: string; } /** * @internal */ declare interface MatcherLocationAsRelative { /** * Ignored path property since we are dealing with a relative location. Only `undefined` is allowed. */ path?: undefined; params?: RouteParams; } /** * Route location that can be passed to the matcher. */ declare type MatcherLocationRaw = MatcherLocationAsPath | MatcherLocationAsName | MatcherLocationAsRelative; declare interface NavigationCallback { (to: HistoryLocation, from: HistoryLocation, information: NavigationInformation): void; } declare enum NavigationDirection { back = "back", forward = "forward", unknown = "" } /** * Extended Error that contains extra information regarding a failed navigation. */ export declare interface NavigationFailure extends Error { /** * Type of the navigation. One of {@link NavigationFailureType} */ type: ErrorTypes.NAVIGATION_CANCELLED | ErrorTypes.NAVIGATION_ABORTED | ErrorTypes.NAVIGATION_DUPLICATED; /** * Route location we were navigating from */ from: RouteLocationNormalized; /** * Route location we were navigating to */ to: RouteLocationNormalized; } /** * Enumeration with all possible types for navigation failures. Can be passed to * {@link isNavigationFailure} to check for specific failures. */ export declare enum NavigationFailureType { /** * An aborted navigation is a navigation that failed because a navigation * guard returned `false` or called `next(false)` */ aborted = 4, /** * A cancelled navigation is a navigation that failed because a more recent * navigation finished started (not necessarily finished). */ cancelled = 8, /** * A duplicated navigation is a navigation that failed because it was * initiated while already being at the exact same location. */ duplicated = 16 } /** * Navigation guard. See [Navigation * Guards](/guide/advanced/navigation-guards.md). */ export declare interface NavigationGuard { (to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext): NavigationGuardReturn | Promise; } export declare interface NavigationGuardNext { (): void; (error: Error): void; (location: RouteLocationRaw): void; (valid: boolean | undefined): void; (cb: NavigationGuardNextCallback): void; } declare type NavigationGuardNextCallback = (vm: ComponentPublicInstance) => unknown; declare type NavigationGuardReturn = void | Error | RouteLocationRaw | boolean | NavigationGuardNextCallback; /** * {@inheritDoc NavigationGuard} */ export declare interface NavigationGuardWithThis { (this: T, to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext): NavigationGuardReturn | Promise; } export declare interface NavigationHookAfter { (to: RouteLocationNormalized, from: RouteLocationNormalized, failure?: NavigationFailure | void): any; } declare interface NavigationInformation { type: NavigationType; direction: NavigationDirection; delta: number; } /** * Internal error used to detect a redirection. * * @internal */ export declare interface NavigationRedirectError extends Omit { type: ErrorTypes.NAVIGATION_GUARD_REDIRECT; to: RouteLocationRaw; } declare enum NavigationType { pop = "pop", push = "push" } /** * Add a navigation guard that triggers whenever the component for the current * location is about to be left. Similar to {@link beforeRouteLeave} but can be * used in any component. The guard is removed when the component is unmounted. * * @param leaveGuard - {@link NavigationGuard} */ export declare function onBeforeRouteLeave(leaveGuard: NavigationGuard): void; /** * Add a navigation guard that triggers whenever the current location is about * to be updated. Similar to {@link beforeRouteUpdate} but can be used in any * component. The guard is removed when the component is unmounted. * * @param updateGuard - {@link NavigationGuard} */ export declare function onBeforeRouteUpdate(updateGuard: NavigationGuard): void; /** * Transforms a queryString into a {@link LocationQuery} object. Accept both, a * version with the leading `?` and without Should work as URLSearchParams * @internal * * @param search - search string to parse * @returns a query object */ export declare function parseQuery(search: string): LocationQuery; declare type PathParams = Record; declare interface PathParser { /** * The regexp used to match a url */ re: RegExp; /** * The score of the parser */ score: Array; /** * Keys that appeared in the path */ keys: PathParserParamKey[]; /** * Parses a url and returns the matched params or null if it doesn't match. An * optional param that isn't preset will be an empty string. A repeatable * param will be an array if there is at least one value. * * @param path - url to parse * @returns a Params object, empty if there are no params. `null` if there is * no match */ parse(path: string): PathParams | null; /** * Creates a string version of the url * * @param params - object of params * @returns a url */ stringify(params: PathParams): string; } export declare type PathParserOptions = Pick<_PathParserOptions, 'end' | 'sensitive' | 'strict'>; /** * @internal */ export declare interface _PathParserOptions { /** * Makes the RegExp case-sensitive. * * @defaultValue `false` */ sensitive?: boolean; /** * Whether to disallow a trailing slash or not. * * @defaultValue `false` */ strict?: boolean; /** * Should the RegExp match from the beginning by prepending a `^` to it. * @internal * * @defaultValue `true` */ start?: boolean; /** * Should the RegExp match until the end by appending a `$` to it. * * @defaultValue `true` */ end?: boolean; } /** * A param in a url like `/users/:id` */ declare interface PathParserParamKey { name: string; repeatable: boolean; optional: boolean; } /** * Allowed Component definitions in route records provided by the user */ declare type RawRouteComponent = RouteComponent | Lazy; /** * Allowed Component in {@link RouteLocationMatched} */ export declare type RouteComponent = Component | DefineComponent; /** * {@link RouteLocationRaw} resolved using the matcher */ export declare interface RouteLocation extends _RouteLocationBase { /** * Array of {@link RouteRecord} containing components as they were * passed when adding records. It can also contain redirect records. This * can't be used directly */ matched: RouteRecord[]; } /** * Base properties for a normalized route location. * * @internal */ export declare interface _RouteLocationBase extends Pick { /** * The whole location including the `search` and `hash`. This string is * percentage encoded. */ fullPath: string; /** * Object representation of the `search` property of the current location. */ query: LocationQuery; /** * Hash of the current location. If present, starts with a `#`. */ hash: string; /** * Contains the location we were initially trying to access before ending up * on the current location. */ redirectedFrom: RouteLocation | undefined; } /** * Allows overriding the current route returned by `useRoute` in tests. rl * stands for route location * * @internal */ export declare const routeLocationKey: InjectionKey; export declare interface RouteLocationMatched extends RouteRecordNormalized { components: Record | null | undefined; } /** * Route Location that can infer the necessary params based on the name. * * @internal */ export declare interface RouteLocationNamedRaw extends RouteQueryAndHash, LocationAsRelativeRaw, RouteLocationOptions { } /** * Similar to {@link RouteLocation} but its * {@link RouteLocationNormalized.matched} cannot contain redirect records */ export declare interface RouteLocationNormalized extends _RouteLocationBase { /** * Array of {@link RouteRecordNormalized} */ matched: RouteRecordNormalized[]; } /** * {@link RouteLocationRaw} with */ export declare interface RouteLocationNormalizedLoaded extends _RouteLocationBase { /** * Array of {@link RouteLocationMatched} containing only plain components (any * lazy-loaded components have been loaded and were replaced inside the * `components` object) so it can be directly used to display routes. It * cannot contain redirect records either */ matched: RouteLocationMatched[]; } /** * Common options for all navigation methods. */ export declare interface RouteLocationOptions { /** * Replace the entry in the history instead of pushing a new entry */ replace?: boolean; /** * Triggers the navigation even if the location is the same as the current one. * Note this will also add a new entry to the history unless `replace: true` * is passed. */ force?: boolean; /** * State to save using the History API. This cannot contain any reactive * values and some primitives like Symbols are forbidden. More info at * https://developer.mozilla.org/en-US/docs/Web/API/History/state */ state?: HistoryState; } /** * Route Location that can infer the possible paths. * * @internal */ export declare interface RouteLocationPathRaw extends RouteQueryAndHash, MatcherLocationAsPath, RouteLocationOptions { } /** * User-level route location */ export declare type RouteLocationRaw = string | RouteLocationPathRaw | RouteLocationNamedRaw; /** * Interface to type `meta` fields in route records. * * @example * * ```ts * // typings.d.ts or router.ts * import 'vue-router'; * * declare module 'vue-router' { * interface RouteMeta { * requiresAuth?: boolean * } * } * ``` */ export declare interface RouteMeta extends Record { } export declare type RouteParams = Record; export declare type RouteParamsRaw = Record[]>; /** * @internal */ export declare type RouteParamValue = string; /** * @internal */ export declare type RouteParamValueRaw = RouteParamValue | number | null | undefined; /** * @internal */ export declare interface RouteQueryAndHash { query?: LocationQueryRaw; hash?: string; } /** * Router instance. */ export declare interface Router { /** * @internal */ /** * Current {@link RouteLocationNormalized} */ readonly currentRoute: Ref; /** * Original options object passed to create the Router */ readonly options: RouterOptions; /** * Allows turning off the listening of history events. This is a low level api for micro-frontends. */ listening: boolean; /** * Add a new {@link RouteRecordRaw | route record} as the child of an existing route. * * @param parentName - Parent Route Record where `route` should be appended at * @param route - Route Record to add */ addRoute(parentName: RouteRecordName, route: RouteRecordRaw): () => void; /** * Add a new {@link RouteRecordRaw | route record} to the router. * * @param route - Route Record to add */ addRoute(route: RouteRecordRaw): () => void; /** * Remove an existing route by its name. * * @param name - Name of the route to remove */ removeRoute(name: RouteRecordName): void; /** * Checks if a route with a given name exists * * @param name - Name of the route to check */ hasRoute(name: RouteRecordName): boolean; /** * Get a full list of all the {@link RouteRecord | route records}. */ getRoutes(): RouteRecord[]; /** * Returns the {@link RouteLocation | normalized version} of a * {@link RouteLocationRaw | route location}. Also includes an `href` property * that includes any existing `base`. By default, the `currentLocation` used is * `router.currentRoute` and should only be overridden in advanced use cases. * * @param to - Raw route location to resolve * @param currentLocation - Optional current location to resolve against */ resolve(to: RouteLocationRaw, currentLocation?: RouteLocationNormalizedLoaded): RouteLocation & { href: string; }; /** * Programmatically navigate to a new URL by pushing an entry in the history * stack. * * @param to - Route location to navigate to */ push(to: RouteLocationRaw): Promise; /** * Programmatically navigate to a new URL by replacing the current entry in * the history stack. * * @param to - Route location to navigate to */ replace(to: RouteLocationRaw): Promise; /** * Go back in history if possible by calling `history.back()`. Equivalent to * `router.go(-1)`. */ back(): ReturnType; /** * Go forward in history if possible by calling `history.forward()`. * Equivalent to `router.go(1)`. */ forward(): ReturnType; /** * Allows you to move forward or backward through the history. Calls * `history.go()`. * * @param delta - The position in the history to which you want to move, * relative to the current page */ go(delta: number): void; /** * Add a navigation guard that executes before any navigation. Returns a * function that removes the registered guard. * * @param guard - navigation guard to add */ beforeEach(guard: NavigationGuardWithThis): () => void; /** * Add a navigation guard that executes before navigation is about to be * resolved. At this state all component have been fetched and other * navigation guards have been successful. Returns a function that removes the * registered guard. * * @param guard - navigation guard to add * @returns a function that removes the registered guard * * @example * ```js * router.beforeResolve(to => { * if (to.meta.requiresAuth && !isAuthenticated) return false * }) * ``` * */ beforeResolve(guard: NavigationGuardWithThis): () => void; /** * Add a navigation hook that is executed after every navigation. Returns a * function that removes the registered hook. * * @param guard - navigation hook to add * @returns a function that removes the registered hook * * @example * ```js * router.afterEach((to, from, failure) => { * if (isNavigationFailure(failure)) { * console.log('failed navigation', failure) * } * }) * ``` */ afterEach(guard: NavigationHookAfter): () => void; /** * Adds an error handler that is called every time a non caught error happens * during navigation. This includes errors thrown synchronously and * asynchronously, errors returned or passed to `next` in any navigation * guard, and errors occurred when trying to resolve an async component that * is required to render a route. * * @param handler - error handler to register */ onError(handler: _ErrorListener): () => void; /** * Returns a Promise that resolves when the router has completed the initial * navigation, which means it has resolved all async enter hooks and async * components that are associated with the initial route. If the initial * navigation already happened, the promise resolves immediately. * * This is useful in server-side rendering to ensure consistent output on both * the server and the client. Note that on server side, you need to manually * push the initial location while on client side, the router automatically * picks it up from the URL. */ isReady(): Promise; /** * Called automatically by `app.use(router)`. Should not be called manually by * the user. This will trigger the initial navigation when on client side. * * @internal * @param app - Application that uses the router */ install(app: App): void; } /** * {@inheritDoc RouteRecordNormalized} */ export declare type RouteRecord = RouteRecordNormalized; /** * Internal type for common properties among all kind of {@link RouteRecordRaw}. */ export declare interface _RouteRecordBase extends PathParserOptions { /** * Path of the record. Should start with `/` unless the record is the child of * another record. * * @example `/users/:id` matches `/users/1` as well as `/users/posva`. */ path: string; /** * Where to redirect if the route is directly matched. The redirection happens * before any navigation guard and triggers a new navigation with the new * target location. */ redirect?: RouteRecordRedirectOption; /** * Aliases for the record. Allows defining extra paths that will behave like a * copy of the record. Allows having paths shorthands like `/users/:id` and * `/u/:id`. All `alias` and `path` values must share the same params. */ alias?: string | string[]; /** * Name for the route record. Must be unique. */ name?: RouteRecordName; /** * Before Enter guard specific to this record. Note `beforeEnter` has no * effect if the record has a `redirect` property. */ beforeEnter?: NavigationGuardWithThis | NavigationGuardWithThis[]; /** * Arbitrary data attached to the record. */ meta?: RouteMeta; /** * Array of nested routes. */ children?: RouteRecordRaw[]; /** * Allow passing down params as props to the component rendered by `router-view`. */ props?: _RouteRecordProps | Record; } declare interface RouteRecordMatcher extends PathParser { record: RouteRecord; parent: RouteRecordMatcher | undefined; children: RouteRecordMatcher[]; alias: RouteRecordMatcher[]; } /** * Route Record defining multiple named components with the `components` option. */ export declare interface RouteRecordMultipleViews extends _RouteRecordBase { /** * Components to display when the URL matches this route. Allow using named views. */ components: Record; component?: never; children?: never; redirect?: never; /** * Allow passing down params as props to the component rendered by * `router-view`. Should be an object with the same keys as `components` or a * boolean to be applied to every component. */ props?: Record | boolean; } /** * Route Record defining multiple named components with the `components` option and children. */ export declare interface RouteRecordMultipleViewsWithChildren extends _RouteRecordBase { /** * Components to display when the URL matches this route. Allow using named views. */ components?: Record | null | undefined; component?: never; children: RouteRecordRaw[]; /** * Allow passing down params as props to the component rendered by * `router-view`. Should be an object with the same keys as `components` or a * boolean to be applied to every component. */ props?: Record | boolean; } /** * Possible values for a user-defined route record's name */ export declare type RouteRecordName = string | symbol; /** * Normalized version of a {@link RouteRecord | route record}. */ export declare interface RouteRecordNormalized { /** * {@inheritDoc _RouteRecordBase.path} */ path: _RouteRecordBase['path']; /** * {@inheritDoc _RouteRecordBase.redirect} */ redirect: _RouteRecordBase['redirect'] | undefined; /** * {@inheritDoc _RouteRecordBase.name} */ name: _RouteRecordBase['name']; /** * {@inheritDoc RouteRecordMultipleViews.components} */ components: RouteRecordMultipleViews['components'] | null | undefined; /** * Nested route records. */ children: RouteRecordRaw[]; /** * {@inheritDoc _RouteRecordBase.meta} */ meta: Exclude<_RouteRecordBase['meta'], void>; /** * {@inheritDoc RouteRecordMultipleViews.props} */ props: Record; /** * Registered beforeEnter guards */ beforeEnter: _RouteRecordBase['beforeEnter']; /** * Registered leave guards * * @internal */ leaveGuards: Set; /** * Registered update guards * * @internal */ updateGuards: Set; /** * Registered beforeRouteEnter callbacks passed to `next` or returned in guards * * @internal */ enterCallbacks: Record; /** * Mounted route component instances * Having the instances on the record mean beforeRouteUpdate and * beforeRouteLeave guards can only be invoked with the latest mounted app * instance if there are multiple application instances rendering the same * view, basically duplicating the content on the page, which shouldn't happen * in practice. It will work if multiple apps are rendering different named * views. */ instances: Record; /** * Defines if this record is the alias of another one. This property is * `undefined` if the record is the original one. */ aliasOf: RouteRecordNormalized | undefined; } /** * @internal */ declare type _RouteRecordProps = boolean | Record | ((to: RouteLocationNormalized) => Record); export declare type RouteRecordRaw = RouteRecordSingleView | RouteRecordSingleViewWithChildren | RouteRecordMultipleViews | RouteRecordMultipleViewsWithChildren | RouteRecordRedirect; /** * Route Record that defines a redirect. Cannot have `component` or `components` * as it is never rendered. */ export declare interface RouteRecordRedirect extends _RouteRecordBase { redirect: RouteRecordRedirectOption; component?: never; components?: never; props?: never; } /** * @internal */ export declare type RouteRecordRedirectOption = RouteLocationRaw | ((to: RouteLocation) => RouteLocationRaw); /** * Route Record defining one single component with the `component` option. */ export declare interface RouteRecordSingleView extends _RouteRecordBase { /** * Component to display when the URL matches this route. */ component: RawRouteComponent; components?: never; children?: never; redirect?: never; /** * Allow passing down params as props to the component rendered by `router-view`. */ props?: _RouteRecordProps; } /** * Route Record defining one single component with a nested view. */ export declare interface RouteRecordSingleViewWithChildren extends _RouteRecordBase { /** * Component to display when the URL matches this route. */ component?: RawRouteComponent | null | undefined; components?: never; children: RouteRecordRaw[]; /** * Allow passing down params as props to the component rendered by `router-view`. */ props?: _RouteRecordProps; } /** * Interface implemented by History implementations that can be passed to the * router as {@link Router.history} * * @alpha */ export declare interface RouterHistory { /** * Base path that is prepended to every url. This allows hosting an SPA at a * sub-folder of a domain like `example.com/sub-folder` by having a `base` of * `/sub-folder` */ readonly base: string; /** * Current History location */ readonly location: HistoryLocation; /** * Current History state */ readonly state: HistoryState; /** * Navigates to a location. In the case of an HTML5 History implementation, * this will call `history.pushState` to effectively change the URL. * * @param to - location to push * @param data - optional {@link HistoryState} to be associated with the * navigation entry */ push(to: HistoryLocation, data?: HistoryState): void; /** * Same as {@link RouterHistory.push} but performs a `history.replaceState` * instead of `history.pushState` * * @param to - location to set * @param data - optional {@link HistoryState} to be associated with the * navigation entry */ replace(to: HistoryLocation, data?: HistoryState): void; /** * Traverses history in a given direction. * * @example * ```js * myHistory.go(-1) // equivalent to window.history.back() * myHistory.go(1) // equivalent to window.history.forward() * ``` * * @param delta - distance to travel. If delta is \< 0, it will go back, * if it's \> 0, it will go forward by that amount of entries. * @param triggerListeners - whether this should trigger listeners attached to * the history */ go(delta: number, triggerListeners?: boolean): void; /** * Attach a listener to the History implementation that is triggered when the * navigation is triggered from outside (like the Browser back and forward * buttons) or when passing `true` to {@link RouterHistory.back} and * {@link RouterHistory.forward} * * @param callback - listener to attach * @returns a callback to remove the listener */ listen(callback: NavigationCallback): () => void; /** * Generates the corresponding href to be used in an anchor tag. * * @param location - history location that should create an href */ createHref(location: HistoryLocation): string; /** * Clears any event listener attached by the history implementation. */ destroy(): void; } /** * Allows overriding the router instance returned by `useRouter` in tests. r * stands for router * * @internal */ export declare const routerKey: InjectionKey; /** * Component to render a link that triggers a navigation on click. */ export declare const RouterLink: _RouterLinkI; /** * Typed version of the `RouterLink` component. Its generic defaults to the typed router, so it can be inferred * automatically for JSX. * * @internal */ export declare interface _RouterLinkI { new (): { $props: AllowedComponentProps & ComponentCustomProps & VNodeProps & RouterLinkProps; $slots: { default?: ({ route, href, isActive, isExactActive, navigate, }: UnwrapRef>) => VNode[]; }; }; /** * Access to `useLink()` without depending on using vue-router * * @internal */ useLink: typeof useLink; } declare interface RouterLinkOptions { /** * Route Location the link should navigate to when clicked on. */ to: RouteLocationRaw; /** * Calls `router.replace` instead of `router.push`. */ replace?: boolean; } export declare interface RouterLinkProps extends RouterLinkOptions { /** * Whether RouterLink should not wrap its content in an `a` tag. Useful when * using `v-slot` to create a custom RouterLink */ custom?: boolean; /** * Class to apply when the link is active */ activeClass?: string; /** * Class to apply when the link is exact active */ exactActiveClass?: string; /** * Value passed to the attribute `aria-current` when the link is exact active. * * @defaultValue `'page'` */ ariaCurrentValue?: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false'; } /** * Internal RouterMatcher * * @internal */ export declare interface RouterMatcher { addRoute: (record: RouteRecordRaw, parent?: RouteRecordMatcher) => () => void; removeRoute: { (matcher: RouteRecordMatcher): void; (name: RouteRecordName): void; }; getRoutes: () => RouteRecordMatcher[]; getRecordMatcher: (name: RouteRecordName) => RouteRecordMatcher | undefined; /** * Resolves a location. Gives access to the route record that corresponds to the actual path as well as filling the corresponding params objects * * @param location - MatcherLocationRaw to resolve to a url * @param currentLocation - MatcherLocation of the current location */ resolve: (location: MatcherLocationRaw, currentLocation: MatcherLocation) => MatcherLocation; } /** * Options to initialize a {@link Router} instance. */ export declare interface RouterOptions extends PathParserOptions { /** * History implementation used by the router. Most web applications should use * `createWebHistory` but it requires the server to be properly configured. * You can also use a _hash_ based history with `createWebHashHistory` that * does not require any configuration on the server but isn't handled at all * by search engines and does poorly on SEO. * * @example * ```js * createRouter({ * history: createWebHistory(), * // other options... * }) * ``` */ history: RouterHistory; /** * Initial list of routes that should be added to the router. */ routes: Readonly; /** * Function to control scrolling when navigating between pages. Can return a * Promise to delay scrolling. Check {@link ScrollBehavior}. * * @example * ```js * function scrollBehavior(to, from, savedPosition) { * // `to` and `from` are both route locations * // `savedPosition` can be null if there isn't one * } * ``` */ scrollBehavior?: RouterScrollBehavior; /** * Custom implementation to parse a query. See its counterpart, * {@link RouterOptions.stringifyQuery}. * * @example * Let's say you want to use the [qs package](https://github.com/ljharb/qs) * to parse queries, you can provide both `parseQuery` and `stringifyQuery`: * ```js * import qs from 'qs' * * createRouter({ * // other options... * parseQuery: qs.parse, * stringifyQuery: qs.stringify, * }) * ``` */ parseQuery?: typeof parseQuery; /** * Custom implementation to stringify a query object. Should not prepend a leading `?`. * {@link RouterOptions.parseQuery | parseQuery} counterpart to handle query parsing. */ stringifyQuery?: typeof stringifyQuery; /** * Default class applied to active {@link RouterLink}. If none is provided, * `router-link-active` will be applied. */ linkActiveClass?: string; /** * Default class applied to exact active {@link RouterLink}. If none is provided, * `router-link-exact-active` will be applied. */ linkExactActiveClass?: string; } /** * Type of the `scrollBehavior` option that can be passed to `createRouter`. */ export declare interface RouterScrollBehavior { /** * @param to - Route location where we are navigating to * @param from - Route location where we are navigating from * @param savedPosition - saved position if it exists, `null` otherwise */ (to: RouteLocationNormalized, from: RouteLocationNormalizedLoaded, savedPosition: _ScrollPositionNormalized | null): Awaitable; } /** * Component to display the current route the user is at. */ export declare const RouterView: new () => { $props: AllowedComponentProps & ComponentCustomProps & VNodeProps & RouterViewProps; $slots: { default?: (({ Component, route, }: { Component: VNode; route: RouteLocationNormalizedLoaded; }) => VNode[]) | undefined; }; }; /** * Allows overriding the current route used by router-view. Internally this is * used when the `route` prop is passed. * * @internal */ export declare const routerViewLocationKey: InjectionKey>; export declare interface RouterViewProps { name?: string; route?: RouteLocationNormalized; } declare type ScrollPosition = ScrollPositionCoordinates | ScrollPositionElement; /** * Scroll position similar to * {@link https://developer.mozilla.org/en-US/docs/Web/API/ScrollToOptions | `ScrollToOptions`}. * Note that not all browsers support `behavior`. */ declare type ScrollPositionCoordinates = { behavior?: ScrollOptions['behavior']; left?: number; top?: number; }; declare interface ScrollPositionElement extends ScrollToOptions { /** * A valid CSS selector. Note some characters must be escaped in id selectors (https://mathiasbynens.be/notes/css-escapes). * @example * Here are a few examples: * * - `.title` * - `.content:first-child` * - `#marker` * - `#marker\~with\~symbols` * - `#marker.with.dot`: selects `class="with dot" id="marker"`, not `id="marker.with.dot"` * */ el: string | Element; } /** * Internal normalized version of {@link ScrollPositionCoordinates} that always * has `left` and `top` coordinates. Must be a type to be assignable to HistoryStateValue. * * @internal */ declare type _ScrollPositionNormalized = { behavior?: ScrollOptions['behavior']; left: number; top: number; }; /** * Initial route location where the router is. Can be used in navigation guards * to differentiate the initial navigation. * * @example * ```js * import { START_LOCATION } from 'vue-router' * * router.beforeEach((to, from) => { * if (from === START_LOCATION) { * // initial navigation * } * }) * ``` */ export declare const START_LOCATION: RouteLocationNormalizedLoaded; /** * Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it * doesn't prepend a `?` * * @internal * * @param query - query object to stringify * @returns string version of the query without the leading `?` */ export declare function stringifyQuery(query: LocationQueryRaw): string; /** * Allows customizing existing types of the router that are used globally like `$router`, ``, and `beforeRouteLeave()`. **ONLY FOR INTERNAL USAGE**. * * @internal */ export declare interface TypesConfig { } export declare function useLink(props: UseLinkOptions): { route: ComputedRef; href: ComputedRef; isActive: ComputedRef; isExactActive: ComputedRef; navigate: (e?: MouseEvent) => Promise; }; export declare type UseLinkOptions = VueUseOptions; /** * Returns the current route location. Equivalent to using `$route` inside * templates. */ export declare function useRoute(): RouteLocationNormalizedLoaded; /** * Returns the router instance. Equivalent to using `$router` inside * templates. */ export declare function useRouter(): Router; /** * Allows overriding the router view depth to control which component in * `matched` is rendered. rvd stands for Router View Depth * * @internal */ export declare const viewDepthKey: InjectionKey>; /** * Type to transform a static object into one that allows passing Refs as * values. * @internal */ declare type VueUseOptions = { [k in keyof T]: Ref | T[k]; }; export { } // TODO: figure out why it cannot be 'vue' like said in docs declare module '@vue/runtime-core' { export interface ComponentCustomOptions { /** * Guard called when the router is navigating to the route that is rendering * this component from a different route. Differently from `beforeRouteUpdate` * and `beforeRouteLeave`, `beforeRouteEnter` does not have access to the * component instance through `this` because it triggers before the component * is even mounted. * * @param to - RouteLocationRaw we are navigating to * @param from - RouteLocationRaw we are navigating from * @param next - function to validate, cancel or modify (by redirecting) the * navigation */ beforeRouteEnter?: TypesConfig extends Record<'beforeRouteEnter', infer T> ? T : NavigationGuardWithThis /** * Guard called whenever the route that renders this component has changed, but * it is reused for the new route. This allows you to guard for changes in * params, the query or the hash. * * @param to - RouteLocationRaw we are navigating to * @param from - RouteLocationRaw we are navigating from * @param next - function to validate, cancel or modify (by redirecting) the * navigation */ beforeRouteUpdate?: TypesConfig extends Record<'beforeRouteUpdate', infer T> ? T : NavigationGuard /** * Guard called when the router is navigating away from the current route that * is rendering this component. * * @param to - RouteLocationRaw we are navigating to * @param from - RouteLocationRaw we are navigating from * @param next - function to validate, cancel or modify (by redirecting) the * navigation */ beforeRouteLeave?: TypesConfig extends Record<'beforeRouteLeave', infer T> ? T : NavigationGuard } export interface ComponentCustomProperties { /** * Normalized current location. See {@link RouteLocationNormalizedLoaded}. */ $route: TypesConfig extends Record<'$route', infer T> ? T : RouteLocationNormalizedLoaded /** * {@link Router} instance used by the application. */ $router: TypesConfig extends Record<'$router', infer T> ? T : Router } export interface GlobalComponents { RouterView: TypesConfig extends Record<'RouterView', infer T> ? T : typeof RouterView RouterLink: TypesConfig extends Record<'RouterLink', infer T> ? T : typeof RouterLink } }