import { Naja, Options } from '../Naja';
import { TypedEventListener } from '../utils';
declare const originalTitleKey: unique symbol;
declare module '../Naja' {
    interface Options {
        history?: HistoryMode;
        href?: string;
        [originalTitleKey]?: string;
    }
    interface Payload {
        postGet?: boolean;
        url?: string;
    }
}
export interface HistoryState extends Record<string, any> {
    source: string;
    cursor: number;
    href: string;
}
export interface HistoryAdapter {
    replaceState(state: HistoryState, title: string, url: string): void;
    pushState(state: HistoryState, title: string, url: string): void;
}
export type HistoryMode = boolean | 'replace';
export declare class HistoryHandler extends EventTarget {
    private readonly naja;
    private initialized;
    private cursor;
    popStateHandler: (event: PopStateEvent) => void;
    historyAdapter: HistoryAdapter;
    constructor(naja: Naja);
    set uiCache(value: boolean);
    private handlePopState;
    private initialize;
    private saveOriginalTitle;
    private saveUrl;
    private saveRedirectedUrl;
    private replaceInitialState;
    private configureMode;
    static normalizeMode(mode: string | boolean | null | undefined): HistoryMode;
    private pushNewState;
    private buildState;
    addEventListener: <K extends keyof HistoryHandlerEventMap | string>(type: K, listener: TypedEventListener<HistoryHandler, K extends keyof HistoryHandlerEventMap ? HistoryHandlerEventMap[K] : CustomEvent>, options?: boolean | AddEventListenerOptions) => void;
    removeEventListener: <K extends keyof HistoryHandlerEventMap | string>(type: K, listener: TypedEventListener<HistoryHandler, K extends keyof HistoryHandlerEventMap ? HistoryHandlerEventMap[K] : CustomEvent>, options?: boolean | AddEventListenerOptions) => void;
}
export type BuildStateEvent = CustomEvent<{
    state: HistoryState;
    operation: 'pushState' | 'replaceState';
    options: Options;
}>;
export type RestoreStateEvent = CustomEvent<{
    state: HistoryState;
    direction: number;
    options: Options;
}>;
interface HistoryHandlerEventMap {
    buildState: BuildStateEvent;
    restoreState: RestoreStateEvent;
}
export {};
