import Eventful from 'tvrender/lib/core/Eventful.js';
import { ZRenderType } from 'tvrender/lib/zrender.js';
import { ZRElementEvent, RoamOptionMixin } from '../../util/types.js';
import { Bind3 } from 'tvrender/lib/core/util.js';
import { KineticAnimation } from './kineticAnimation.js';
import Group from 'tvrender/lib/graphic/Group.js';
export declare type RoamType = RoamOptionMixin['roam'];
interface RoamOption {
    zoomOnMouseWheel?: boolean | 'ctrl' | 'shift' | 'alt';
    moveOnMouseMove?: boolean | 'ctrl' | 'shift' | 'alt';
    moveOnMouseWheel?: boolean | 'ctrl' | 'shift' | 'alt';
    /**
     * If fixed the page when pan
     */
    preventDefaultMouseMove?: boolean;
}
declare type RoamBehavior = 'zoomOnMouseWheel' | 'moveOnMouseMove' | 'moveOnMouseWheel';
export interface RoamEventParams {
    'zoom': {
        scale: number;
        originX: number;
        originY: number;
        inSitu?: boolean;
        isPinch?: boolean;
        isAvailableBehavior: Bind3<typeof isAvailableBehavior, null, RoamBehavior, ZRElementEvent>;
    };
    'scrollMove': {
        scrollDelta: number;
        originX: number;
        originY: number;
        isAvailableBehavior: Bind3<typeof isAvailableBehavior, null, RoamBehavior, ZRElementEvent>;
    };
    'pan': {
        dx: number;
        dy: number;
        oldX: number;
        oldY: number;
        newX: number;
        newY: number;
        isTouch: boolean;
        isAvailableBehavior: Bind3<typeof isAvailableBehavior, null, RoamBehavior, ZRElementEvent>;
    };
    'dragEnd': {
        isAvailableBehavior: Bind3<typeof isAvailableBehavior, null, RoamBehavior, ZRElementEvent>;
    };
    'kineticScroll': {
        lastBarRightSideDiffBarCount: number;
        isAvailableBehavior: Bind3<typeof isAvailableBehavior, null, RoamBehavior, ZRElementEvent>;
    };
}
export interface RoamControllerHost {
    target: Group;
    zoom: number;
    zoomLimit: {
        min?: number;
        max?: number;
    };
}
declare class RoamController extends Eventful<{
    [key in keyof RoamEventParams]: (params: RoamEventParams[key]) => void | undefined;
}> {
    pointerChecker: (e: ZRElementEvent, x: number, y: number) => boolean;
    private _zr;
    private _opt;
    private _dragging;
    private _pinching;
    private _lastPinchTime;
    private _x;
    private _y;
    private _startX;
    private _startY;
    private kineticScrollId;
    kineticScroll: KineticAnimation | null;
    startPositionX: number;
    minScrollUnit: number;
    _prevPinchScale: number;
    _startPinchDistance: number;
    _originX: number;
    readonly enable: (this: this, controlType?: RoamType, opt?: RoamOption) => void;
    readonly disable: () => void;
    constructor(zr: ZRenderType);
    isDragging(): boolean;
    isPinching(): boolean;
    setPointerChecker(pointerChecker: RoamController['pointerChecker']): void;
    dispose(): void;
    private _mousedownHandler;
    private _mousemoveHandler;
    private _mouseupHandler;
    private _mousewheelHandler;
    private _pinchHandler;
    private _kineticScroll;
    private _startKineticScroll;
}
declare function isAvailableBehavior(behaviorToCheck: RoamBehavior, e: ZRElementEvent, settings: Pick<RoamOption, RoamBehavior>): boolean;
export default RoamController;
