import { Point } from '@vertexvis/geometry';
import { Disposable, Listener } from '@vertexvis/utils';
import { ConfigProvider } from '../config';
import { InteractionApi } from './interactionApi';
import { BaseEvent } from './interactionEvent';
import { InteractionHandler } from './interactionHandler';
import { PanInteraction, PivotInteraction, RotateInteraction, RotatePointInteraction, TwistInteraction, ZoomInteraction } from './mouseInteractions';
export type InteractionType = 'rotate' | 'zoom' | 'pan' | 'twist' | 'rotate-point' | 'pivot';
export declare abstract class BaseInteractionHandler implements InteractionHandler {
    protected downEvent: 'mousedown' | 'pointerdown';
    protected upEvent: 'mouseup' | 'pointerup';
    protected moveEvent: 'mousemove' | 'pointermove';
    private rotateInteraction;
    private rotatePointInteraction;
    private zoomInteraction;
    private panInteraction;
    private twistInteraction;
    private pivotInteraction;
    private getConfig;
    protected interactionApi?: InteractionApi;
    protected element?: HTMLElement;
    protected downPosition?: Point.Point;
    private downPositionCanvas?;
    private primaryInteraction;
    private currentInteraction?;
    private draggingInteraction;
    private lastPrimaryRotateInteraction?;
    private isDragging;
    private lastMoveEvent?;
    private interactionTimer?;
    private keyboardControls;
    protected disableIndividualInteractions: boolean;
    private computedBodyStyle?;
    private primaryInteractionTypeChange;
    constructor(downEvent: 'mousedown' | 'pointerdown', upEvent: 'mouseup' | 'pointerup', moveEvent: 'mousemove' | 'pointermove', rotateInteraction: RotateInteraction, rotatePointInteraction: RotatePointInteraction, zoomInteraction: ZoomInteraction, panInteraction: PanInteraction, twistInteraction: TwistInteraction, pivotInteraction: PivotInteraction, getConfig: ConfigProvider);
    initialize(element: HTMLElement, api: InteractionApi): void;
    dispose(): void;
    onPrimaryInteractionTypeChange(listener: Listener<void>): Disposable;
    setCurrentInteractionType(type?: InteractionType): void;
    getPrimaryInteractionType(): InteractionType;
    getCurrentInteractionType(): InteractionType;
    setPrimaryInteractionType(type: InteractionType): void;
    setDefaultKeyboardControls(keyboardControls: boolean): void;
    protected handleDownEvent(event: BaseEvent): void;
    protected handleWindowMove(event: BaseEvent): void;
    protected handleWindowUp(event: BaseEvent): Promise<void>;
    protected handleDoubleClick(event: BaseEvent): Promise<void>;
    protected beginDrag(event: BaseEvent): void;
    protected drag(event: BaseEvent): void;
    protected endDrag(event: BaseEvent): void;
    protected handleMouseWheel(event: WheelEvent): Promise<void>;
    protected wheelDeltaToPixels(deltaY: number, deltaMode: number): number;
    protected getCanvasPosition(event: BaseEvent): Point.Point | undefined;
    protected isTouch(event: BaseEvent): boolean;
}
