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; }