import { RefObject } from 'react';
import { GestureCoordinate as Coord } from './utils';
export interface GestureCoordinate extends Coord {
    timestamp: number;
    target: HTMLElement;
    start?: GestureCoordinate;
    previous?: GestureCoordinate;
    deltaX: number;
    deltaY: number;
    delta: number;
    distanceX: number;
    distanceY: number;
    distance: number;
    velocity: number;
}
export interface GestureAction {
    down: boolean;
    first: boolean;
    coordinate: GestureCoordinate;
}
export interface GestureOptions<T extends HTMLElement> {
    onDown?: (info: GestureCoordinate) => false | void;
    onMove?: (info: GestureCoordinate) => void;
    onUp?: (info: GestureCoordinate) => void;
    onAction?: (info: GestureAction) => void;
    ref?: RefObject<T>;
}
export declare type GestureEvent = MouseEvent | TouchEvent;
/**
 * 获取抽象化的mouse/touch事件
 * TODO: pasive
 * @param options
 */
export default function useGesture<T extends HTMLElement = HTMLDivElement>(options: GestureOptions<T>): {
    ref: RefObject<T>;
    interacting: boolean;
};
