import { ReactNode } from 'react'; type ExtractArgs = T[keyof T] extends (...args: infer A) => any ? A : any[]; type EventState> = T & { (key?: keyof T, fun?: T[keyof T]): EventState; (target?: Partial): EventState; }; type Vec2 = [x: number, y: number]; type DragDevice = 'mouse' | 'touch' | 'pointer'; interface DragState { _active: boolean; active: boolean; device: DragDevice; _value: Vec2; value: Vec2; delta: Vec2; offset: Vec2; movement: Vec2; target: El; event: Event; memo: any; isDragStart: boolean; isDragging: boolean; isDragEnd: boolean; drag(self: DragState): void; dragStart(e: Event): void; dragging(e: Event): void; dragEnd(e: Event): void; mount(target: El): void; clean(el: null): void; ref(traget: El | null): void; } type DragArg = Partial> | DragState['drag']; declare const useDrag: (arg: DragArg) => EventState>; interface DragProps extends Partial> { children(self: DragState): ReactNode; } declare const Drag: (props: DragProps) => ReactNode; export { Drag, type DragProps, useDrag as default, useDrag };