import type Viewport from "../viewports/viewport.js";
export default abstract class ViewState<T, Props extends Record<string, any>, State extends Record<string, any>> implements IViewState<T> {
    private _viewportProps;
    private _state;
    constructor(props: Required<Props>, state: State);
    getViewportProps(): Required<Props>;
    getState(): State;
    abstract applyConstraints(props: Required<Props>): Required<Props>;
    abstract shortestPathFrom(viewState: T): Props;
    abstract panStart(params: {
        pos: [number, number];
    }): T;
    abstract pan({ pos, startPos }: {
        pos: [number, number];
        startPos?: [number, number];
    }): T;
    abstract panEnd(): T;
    abstract rotateStart(params: {
        pos: [number, number];
    }): T;
    abstract rotate(params: {
        pos?: [number, number];
        deltaAngleX?: number;
        deltaAngleY: number;
    }): T;
    abstract rotateEnd(): T;
    abstract zoomStart({ pos }: {
        pos: [number, number];
    }): T;
    abstract zoom({ pos, startPos, scale }: {
        pos: [number, number];
        startPos?: [number, number];
        scale: number;
    }): T;
    abstract zoomEnd(): T;
    abstract zoomIn(speed?: number): T;
    abstract zoomOut(speed?: number): T;
    abstract moveLeft(speed?: number): T;
    abstract moveRight(speed?: number): T;
    abstract moveUp(speed?: number): T;
    abstract moveDown(speed?: number): T;
    abstract rotateLeft(speed?: number): T;
    abstract rotateRight(speed?: number): T;
    abstract rotateUp(speed?: number): T;
    abstract rotateDown(speed?: number): T;
}
export interface IViewState<T> {
    makeViewport?: (props: Record<string, any>) => Viewport;
    getViewportProps(): Record<string, any>;
    getState(): Record<string, any>;
    shortestPathFrom(viewState: T): Record<string, any>;
    panStart(params: {
        pos: [number, number];
    }): T;
    pan({ pos, startPos }: {
        pos: [number, number];
        startPos?: [number, number];
    }): T;
    panEnd(): T;
    rotateStart(params: {
        pos: [number, number];
    }): T;
    rotate(params: {
        pos?: [number, number];
        deltaAngleX?: number;
        deltaAngleY?: number;
    }): T;
    rotateEnd(): T;
    zoomStart({ pos }: {
        pos: [number, number];
    }): T;
    zoom({ pos, startPos, scale }: {
        pos: [number, number];
        startPos?: [number, number];
        scale: number;
    }): T;
    zoomEnd(): T;
    zoomIn(speed?: number): T;
    zoomOut(speed?: number): T;
    moveLeft(speed?: number): T;
    moveRight(speed?: number): T;
    moveUp(speed?: number): T;
    moveDown(speed?: number): T;
    rotateLeft(speed?: number): T;
    rotateRight(speed?: number): T;
    rotateUp(speed?: number): T;
    rotateDown(speed?: number): T;
}
//# sourceMappingURL=view-state.d.ts.map