import type { Disposable } from './utils';
export type NavigationAction = 'POP' | 'PUSH' | 'REPLACE';
export interface NavigationLocation {
    /**
     * The fully qualified URL incl. the origin and base path.
     */
    href: string;
    /**
     * The location.pathname property is a string that contains an initial "/"
     * followed by the remainder of the URL up to the ?.
     */
    pathname: string;
    /**
     * The location.search property is a string that contains an initial "?"
     * followed by the key=value pairs in the query string. If there are no
     * parameters, this value may be the empty string (i.e. '').
     */
    search: string;
    /**
     * The location.hash property is a string that contains an initial "#"
     * followed by fragment identifier of the URL. If there is no fragment
     * identifier, this value may be the empty string (i.e. '').
     */
    hash: string;
    /**
     * The location.state property is a user-supplied State object that is
     * associated with this location. This can be a useful place to store
     * any information you do not want to put in the URL, e.g. session-specific
     * data.
     */
    state: unknown;
    /**
     * The location.key property is a unique string associated with this location.
     * On the initial location, this will be the string default. On all subsequent
     * locations, this string will be a unique identifier.
     */
    key?: string;
}
export interface NavigationListener {
    (update: NavigationUpdate): void;
}
export interface NavigationBlocker {
    (tx: NavigationTransition): void;
}
export interface NavigationUpdate {
    action: NavigationAction;
    location: NavigationLocation;
}
export interface NavigationTransition extends NavigationUpdate {
    retry?(): void;
}
export interface NavigationApi {
    /**
     * Pushes a new location onto the history stack.
     */
    push(target: string, state?: any): void;
    /**
     * Replaces the current location with another.
     */
    replace(target: string, state?: any): void;
    /**
     * Changes the current index in the history stack by a given delta.
     */
    go(n: number): void;
    /**
     * Prevents changes to the history stack from happening.
     * This is useful when you want to prevent the user navigating
     * away from the current page, for example when they have some
     * unsaved data on the current page.
     * @param blocker The function being called with a transition request.
     * @returns The disposable for stopping the block.
     */
    block(blocker: NavigationBlocker): Disposable;
    /**
     * Starts listening for location changes and calls the given
     * callback with an Update when it does.
     * @param listener The function being called when the route changes.
     * @returns The disposable for stopping the block.
     */
    listen(listener: NavigationListener): Disposable;
    /**
     * Gets the current navigation / application path.
     */
    path: string;
    /**
     * Gets the current navigation path incl. search and hash parts.
     */
    url: string;
    /**
     * The original router behind the navigation. Don't depend on this
     * as the implementation is router specific and may change over time.
     */
    router: any;
    /**
     * Gets the public path of the application.
     */
    publicPath: string;
}
