import React, { HTMLAttributes, MouseEventHandler } from 'react'; type Point = [number, number]; export type DragInfo = { /** 开始位置 */ start: Point; /** 当前位置 */ current: Point; /** 拖拽距离,往右下拖拽为正数,往左上拖拽为负数 */ diff: Point; /** {@link GestureOptions.onDragStart}的返回值 */ data: D; }; export interface DragEndInfo extends DragInfo { /** 从按下到抬起经过的时长(ms) */ duration: number; /** 拖拽速度(px/ms) */ speed: Point; } export type PinchStartInfo = { /** 两指中点 */ startMiddle: Point; /** 两指间距 */ startSpacing: number; }; export interface PinchInfo

extends PinchStartInfo { currentMiddle: Point; diffMiddle: Point; currentSpacing: number; diffSpacing: number; data: P; } type SharedGestureOptions = { disabled?: boolean; /** 通常无需使用,若元素受zoom样式的影响,可传入zoom值修正 */ zoom?: number; /** 托管点击事件 */ onClick?: MouseEventHandler; }; export interface DraggableGestureOptions extends SharedGestureOptions { /** 按下后经过一段时间才触发拖拽事件,默认`0`,单位ms */ delay?: number; /** 拖拽一段距离后才触发拖拽事件,默认`0`,单位px */ distance?: number; /** 允许点击事件触发的抖动距离,默认`2`,单位px */ clickVibration?: number; onDragStart?(e: React.PointerEvent): D; onDrag?(info: DragInfo, e: PointerEvent): void; onDragEnd?(info: DragEndInfo): void; onDragCancel?(info: DragEndInfo): void; /** 若设为true,则会禁用浏览器默认拖拽行为,通常在触屏端使用,默认为`true` */ preventNativeTouchMove?: boolean; } export interface PinchableGestureOptions

extends SharedGestureOptions { onPinchStart?(info: PinchStartInfo): P; onPinch?(info: PinchInfo

): void; onPinchEnd?(info: PinchInfo

): void; } export declare function useDraggable({ disabled, ...options }: DraggableGestureOptions): HandleProps; export declare function usePinchable

({ disabled, ...options }: PinchableGestureOptions

): HandleProps; export interface GestureOptions extends Omit, 'disabled'>, Omit, 'disabled'> { /** 是否可拖拽,默认为`true` */ draggable?: boolean; /** 是否可捏合缩放,默认为`false` */ pinchable?: boolean; } export type HandleProps = Required, 'onPointerDown'>> & Pick, 'onTouchStart' | 'onClick'>; export declare function useGesture(options: GestureOptions): { draggableHandles: HandleProps; pinchableHandles: HandleProps; }; export {};