import { Component, ReactNode, HTMLProps, RefObject, MouseEvent as ReactMouseEvent } from 'react';
import { IPoint } from '../helpers/point';
import { DraggableEvent } from './helpers/draggable-event';
import { EventWithPosition } from '../helpers/events';
export interface Control {
isGrabbed: () => boolean;
setOffset: typeof Draggable.prototype.setOffset;
toggleTransition: typeof Draggable.prototype.toggleTransition;
isTransitionEnabled: () => boolean;
}
export type Delta2d = {
dx: number;
dy: number;
};
export type DraggableEventHandler = (e: DraggableEvent) => void;
export interface DraggableProps {
axis?: 'x' | 'y';
active?: boolean;
onDragStart?: DraggableEventHandler;
onDragMove?: DraggableEventHandler;
onDragEnd?: DraggableEventHandler;
takeControl?: (c: Control) => void;
transitionDuration?: number;
containerProps?: HTMLProps;
children?: ReactNode;
}
/**
* Область, которую можно прокручивать перетаскиванием.
*/
export declare class Draggable extends Component {
isGrabbed: boolean;
hasTransition: boolean;
needPreventClick: boolean;
currentOffset: IPoint;
clientPosition: IPoint;
dragStartClientPosition: IPoint;
draggableRef: RefObject;
offList: Array;
/**
* Конструктор компонента области, которую можно прокручивать перетаскиванием.
* @param props Свойства.
*/
constructor(props: DraggableProps);
/**
* Запускает инициализацию обработки глобальных событий.
* Запускает передачу управления родительскому компоненту.
*/
componentDidMount(): void;
/**
* Инициализирует обработчики глобальных событий.
*/
initGlobalListeners(): void;
/**
* Передает управление родительскому компоненту через "takeControl".
*/
passControl(): void;
/**
* Выполняет отписку от глобальных событий.
*/
componentWillUnmount(): void;
/**
* Сохраняет данные захвата по событию клика/прикосновения.
* @param event Событие передвижения.
*/
startCapture(event: EventWithPosition): void;
/**
* Проверяет, находится ли курсор в области родителя draggable.
* @param event Событие окончания захвата.
* @return Boolean Флаг нахождения курсора в пределах родителя draggable.
*/
isPointInRect(event: MouseEvent | TouchEvent): boolean;
/**
* Обновляет смещение и все данные при необходимости.
* @param event Событие передвижения.
*/
handleMove(event: MouseEvent | TouchEvent): void;
/**
* Отключает захват движения.
* Запускает соответствующий callback.
* @param event Событие окончания захвата.
*/
handleMoveEnd(event: MouseEvent | TouchEvent): void;
/**
* Предотвращает клик если было произведено смещение мышью.
* @param event Событие окончания захвата.
*/
handleClickCapture(event: ReactMouseEvent): void;
/**
* Возвращает разницу последней сохраненной позиции и позиции в переданном событии.
* @param event Touch- или mouse-событие.
* @return Разница.
*/
getClientDelta(event: MouseEvent | TouchEvent): Delta2d;
/**
* Переключает состояние активности захвата движения.
* @param active Активен ли захват движения.
*/
toggleGrabbed(active: boolean): void;
/**
* Переключает состояние плавного перехода через CSS-свойство "transition".
* @param active Нужен ли плавный переход.
*/
toggleTransition(active: boolean): void;
/**
* Возвращает true, если css свойство transition активно, false в противном случае.
* @return Активно ли css свойство transition.
*/
isTransitionEnabled(): boolean;
/**
* Сохраняет данные позиции на экземпляре.
* @param event Событие.
*/
saveClientPosition(event: EventWithPosition): void;
/**
* Переключает состояние необходимости предотвратить клик.
* @param needPrevent Активен ли захват движения.
*/
togglePreventClickNeed(needPrevent: boolean): void;
/**
* Устанавливает смещение через CSS-свойство transform.
* Сохраняет данные смещения на экземпляре.
* @param x Смещение по оси абсцисс.
* @param y Смещение по оси ординат.
*/
setOffset(x: number, y: number): void;
/**
* Рендер.
* @inheritdoc
*/
render(): import("react").JSX.Element;
}