import { TerraDrawModeState } from "../common";
import { HistoryCause, HistoryChange, TerraDrawUndoRedoInterface, TerraDrawUndoRedoOptions } from "./undo-redo-types";
export interface TerraDrawModeUndoRedoInterface extends TerraDrawUndoRedoInterface {
    getMaxStackSize?(): number;
    register(options: {
        getModeState: () => string;
        getModeHistorySizes: () => {
            undoSize: number;
            redoSize: number;
        };
        undoMode: () => void;
        redoMode: () => void;
        clearModeHistory: () => void;
        onHistoryChange: (historyChange: HistoryChange) => void;
    }): void;
    canUndo(): boolean;
    canRedo(): boolean;
    getHistorySizes(): {
        undoSize: number;
        redoSize: number;
    };
    emitPushIfHistoryChangedFromLastSnapshot(): void;
    emitPushIfHistoryChanged(before: {
        undoSize: number;
        redoSize: number;
    }): void;
    emitHistoryChange(cause: HistoryCause): void;
}
export declare class TerraDrawModeUndoRedo implements TerraDrawModeUndoRedoInterface {
    private getModeState;
    private getModeHistorySizes;
    private undoMode;
    private redoMode;
    private clearModeHistory;
    private onHistoryChange;
    private readonly maxStackSize;
    private lastHistorySizes;
    constructor(options?: TerraDrawUndoRedoOptions);
    getMaxStackSize(): number;
    register(options: {
        getModeState: () => TerraDrawModeState;
        getModeHistorySizes: () => {
            undoSize: number;
            redoSize: number;
        };
        undoMode: () => void;
        redoMode: () => void;
        clearModeHistory: () => void;
        onHistoryChange: (historyChange: HistoryChange) => void;
    }): void;
    private inDrawingState;
    canUndo(): boolean;
    canRedo(): boolean;
    undo(): boolean;
    redo(): boolean;
    clearHistory(): void;
    getHistorySizes(): {
        undoSize: number;
        redoSize: number;
    };
    undoSize(): number;
    redoSize(): number;
    emitPushIfHistoryChangedFromLastSnapshot(): void;
    emitPushIfHistoryChanged(before: {
        undoSize: number;
        redoSize: number;
    }): void;
    emitHistoryChange(cause: HistoryCause): void;
}
