import { AnyAction } from '@dineug/r-html';
type Dispatch = (actions: AnyAction[]) => void;
export type Command = {
    undo: (dispatch: Dispatch) => void;
    redo: (dispatch: Dispatch) => void;
};
export type CommandKey = keyof Command;
export type History = {
    readonly cursor: number;
    readonly size: number;
    hasUndo: () => boolean;
    hasRedo: () => boolean;
    undo: () => void;
    redo: () => void;
    push: (command: Command) => void;
    clear: () => void;
    setLimit: (limit: number) => void;
    clone: (options: HistoryOptions) => History;
};
type HasHistory = {
    hasRedo: boolean;
    hasUndo: boolean;
};
export type HistoryOptions = {
    notify: (has: HasHistory) => void;
    dispatch: Dispatch;
};
type HistoryState = {
    commands: Command[];
    cursor: number;
    limit: number;
};
export declare function createHistory({ notify, dispatch }: HistoryOptions, initialState?: HistoryState): History;
export {};
