import { RefObject } from 'react';
/**
 * Вектор, выраженный двумя координатами
 */
declare type Vector = {
    x: number;
    y: number;
};
/**
 * Объект состояния жеста, передается единственным аргументом в колбэк
 */
interface GestureState<T> {
    /**
     * Координаты пальца пользователя в момент предыдущего срабатывания функции
     */
    previousPosition: Vector;
    /**
     * Координаты пальца пользователя в данный момент
     */
    currentPosition: Vector;
    /**
     * Координаты начала жеста
     */
    initialPosition: Vector;
    /**
     * Сдвиг по каждой из осей с момента начала жеста
     */
    movement: Vector;
    /**
     * Расстояние, пройденное с момента предыдущего вызова функции
     */
    delta: Vector;
    /**
     * Время начала жеста (timestamp)
     */
    startTime: number;
    /**
     * Длительность жеста
     */
    elapsedTime: number;
    /**
     * Признак начала жеста
     */
    first: boolean;
    /**
     * Признак окончания жеста
     */
    last: boolean;
    /**
     * Скорость движения пальца по каждой из осей
     */
    velocity: Vector;
    /**
     * Исходный объект события
     */
    event: TouchEvent;
    /**
     * Пользовательские данные
     */
    data: T;
}
/**
 * Тип колбэка
 */
declare type StateChangeCallback<T> = (arg: Readonly<GestureState<T>>) => void;
/**
 * Предоставляет унифицированный интерфейс для работы с
 * простыми тачевыми событиями (где используется один палец)
 */
export declare const useDrag: <T>(elementRef: RefObject<HTMLElement>, onStateChange: StateChangeCallback<T>) => void;
export {};
