import type React from 'react'; import type Controller from './Controller'; import type Recognizer from './recognizers/Recognizer'; export declare type Omit = Pick>; export declare type AtLeastOneOf; }> = Partial & U[keyof U]; export declare type Vector2 = [number, number]; export declare type Fn = any; declare type DomTarget = EventTarget | React.RefObject; export interface GenericOptions { domTarget?: DomTarget; window?: EventTarget; eventOptions?: { capture?: boolean; passive?: boolean; }; enabled?: boolean; transform?: (v: Vector2) => Vector2; } export interface GestureOptions { enabled?: boolean; initial?: Vector2 | ((state: State[T]) => Vector2); threshold?: number | Vector2; triggerAllEvents?: boolean; rubberband?: boolean | number | Vector2; transform?: (v: Vector2) => Vector2; } export declare type Bounds = { top?: number; bottom?: number; left?: number; right?: number; }; export declare type CoordinatesConfig = GestureOptions & { axis?: 'x' | 'y'; lockDirection?: boolean; bounds?: Bounds | ((state: State[T]) => Bounds); }; export declare type DistanceAngleBounds = { min?: number; max?: number; }; export declare type DistanceAngleConfig = GestureOptions & { distanceBounds?: DistanceAngleBounds | ((state: State[T]) => DistanceAngleBounds); angleBounds?: DistanceAngleBounds | ((state: State[T]) => DistanceAngleBounds); }; export declare type DragConfig = CoordinatesConfig<'drag'> & { filterTaps?: boolean; useTouch?: boolean; swipeVelocity?: number | Vector2; swipeDistance?: number | Vector2; swipeDuration?: number; experimental_preventWindowScrollY?: boolean; delay?: boolean | number; }; export declare type UseDragConfig = GenericOptions & DragConfig; export declare type UsePinchConfig = GenericOptions & DistanceAngleConfig<'pinch'>; export declare type UseWheelConfig = GenericOptions & CoordinatesConfig<'wheel'>; export declare type UseScrollConfig = GenericOptions & CoordinatesConfig<'scroll'>; export declare type UseMoveConfig = GenericOptions & CoordinatesConfig<'move'>; export declare type UseHoverConfig = GenericOptions; export declare type UseGestureConfig = GenericOptions & { drag?: DragConfig; wheel?: CoordinatesConfig<'wheel'>; scroll?: CoordinatesConfig<'scroll'>; move?: CoordinatesConfig<'move'>; pinch?: DistanceAngleConfig<'pinch'>; hover?: { enabled?: boolean; }; }; export interface InternalGenericOptions { domTarget?: DomTarget; eventOptions: { capture?: boolean; passive?: boolean; }; window?: EventTarget; enabled: boolean; transform?: (v: Vector2) => Vector2; } export interface InternalGestureOptions { enabled: boolean; initial: Vector2 | ((state: State[T]) => Vector2); threshold: Vector2; triggerAllEvents: boolean; rubberband: Vector2; bounds: [Vector2, Vector2] | ((state: State[T]) => [Vector2, Vector2]); transform?: (v: Vector2) => Vector2; } export interface InternalCoordinatesOptions extends InternalGestureOptions { axis?: 'x' | 'y'; lockDirection: boolean; } export interface InternalDistanceAngleOptions extends InternalGestureOptions { } export interface InternalDragOptions extends InternalCoordinatesOptions<'drag'> { filterTaps: boolean; useTouch: boolean; experimental_preventWindowScrollY: boolean; swipeVelocity: Vector2; swipeDistance: Vector2; swipeDuration: number; delay: number; } export declare type InternalConfig = InternalGenericOptions & { drag?: InternalDragOptions; wheel?: InternalCoordinatesOptions<'wheel'>; scroll?: InternalCoordinatesOptions<'scroll'>; move?: InternalCoordinatesOptions<'move'>; pinch?: InternalDistanceAngleOptions<'pinch'>; hover?: { enabled: boolean; transform?: (v: Vector2) => Vector2; }; }; export declare type WebKitGestureEvent = PointerEvent & { scale: number; rotation: number; }; export declare type DomEvents = TouchEvent | PointerEvent | WheelEvent | UIEvent | WebKitGestureEvent | React.TouchEvent | React.PointerEvent | React.WheelEvent | React.UIEvent; export interface ReactEventHandlers { onMouseDown?: React.MouseEventHandler; onMouseDownCapture?: React.MouseEventHandler; onMouseEnter?: React.MouseEventHandler; onMouseLeave?: React.MouseEventHandler; onMouseMove?: React.MouseEventHandler; onMouseMoveCapture?: React.MouseEventHandler; onMouseOut?: React.MouseEventHandler; onMouseOutCapture?: React.MouseEventHandler; onMouseOver?: React.MouseEventHandler; onMouseOverCapture?: React.MouseEventHandler; onMouseUp?: React.MouseEventHandler; onMouseUpCapture?: React.MouseEventHandler; onTouchCancel?: React.TouchEventHandler; onTouchCancelCapture?: React.TouchEventHandler; onTouchEnd?: React.TouchEventHandler; onTouchEndCapture?: React.TouchEventHandler; onTouchMove?: React.TouchEventHandler; onTouchMoveCapture?: React.TouchEventHandler; onTouchStart?: React.TouchEventHandler; onTouchStartCapture?: React.TouchEventHandler; onPointerDown?: React.PointerEventHandler; onPointerDownCapture?: React.PointerEventHandler; onPointerMove?: React.PointerEventHandler; onPointerMoveCapture?: React.PointerEventHandler; onPointerUp?: React.PointerEventHandler; onPointerUpCapture?: React.PointerEventHandler; onPointerCancel?: React.PointerEventHandler; onPointerCancelCapture?: React.PointerEventHandler; onPointerEnter?: React.PointerEventHandler; onPointerEnterCapture?: React.PointerEventHandler; onPointerLeave?: React.PointerEventHandler; onPointerLeaveCapture?: React.PointerEventHandler; onPointerOver?: React.PointerEventHandler; onPointerOverCapture?: React.PointerEventHandler; onPointerOut?: React.PointerEventHandler; onPointerOutCapture?: React.PointerEventHandler; onGotPointerCapture?: React.PointerEventHandler; onGotPointerCaptureCapture?: React.PointerEventHandler; onLostPointerCapture?: React.PointerEventHandler; onLostPointerCaptureCapture?: React.PointerEventHandler; onScroll?: React.UIEventHandler; onScrollCapture?: React.UIEventHandler; onWheel?: React.WheelEventHandler; onWheelCapture?: React.WheelEventHandler; onGestureStart?: Fn; onGestureChange?: Fn; onGestureEnd?: Fn; onClick?: React.MouseEventHandler; onClickCapture?: React.MouseEventHandler; } export declare type ReactEventHandlerKey = keyof ReactEventHandlers; export declare type IngKey = 'hovering' | 'scrolling' | 'wheeling' | 'dragging' | 'moving' | 'pinching'; export declare type CoordinatesKey = 'drag' | 'wheel' | 'move' | 'scroll'; export declare type DistanceAngleKey = 'pinch'; export declare type GestureKey = CoordinatesKey | DistanceAngleKey | 'hover'; export declare type StateKey = T extends 'hover' ? 'move' : T; export declare type SharedGestureState = { [ingKey in IngKey]: boolean; } & { touches: number; down: boolean; buttons: number; shiftKey: boolean; altKey: boolean; metaKey: boolean; ctrlKey: boolean; locked: boolean; }; export declare type EventTypes = { drag: React.PointerEvent | PointerEvent; wheel: React.WheelEvent | WheelEvent; scroll: React.UIEvent | UIEvent; move: React.PointerEvent | PointerEvent; pinch: React.TouchEvent | TouchEvent | React.WheelEvent | WheelEvent | WebKitGestureEvent; hover: React.PointerEvent | PointerEvent; }; export interface CommonGestureState { _active: boolean; _blocked: boolean; _intentional: [false | number, false | number]; _movement: Vector2; _initial: Vector2; _bounds: [Vector2, Vector2]; _threshold: Vector2; _lastEventType?: string; _dragTarget?: EventTarget | (EventTarget & Element) | null; _dragPointerId?: number | null; _dragStarted: boolean; _dragPreventScroll: boolean; _dragIsTap: boolean; _dragDelayed: boolean; event?: React.UIEvent | UIEvent; intentional: boolean; values: Vector2; velocities: Vector2; delta: Vector2; movement: Vector2; offset: Vector2; lastOffset: Vector2; initial: Vector2; previous: Vector2; direction: Vector2; first: boolean; last: boolean; active: boolean; startTime: number; timeStamp: number; elapsedTime: number; cancel(): void; canceled: boolean; memo?: any; args?: any; } export interface Coordinates { axis?: 'x' | 'y'; xy: Vector2; velocity: number; vxvy: Vector2; distance: number; } export interface DragState { _pointerId?: number; tap: boolean; swipe: Vector2; } export interface PinchState { _pointerIds: [number, number]; } export interface DistanceAngle { da: Vector2; vdva: Vector2; origin: Vector2; turns: number; } export declare type State = { shared: SharedGestureState; drag: CommonGestureState & Coordinates & DragState; wheel: CommonGestureState & Coordinates; scroll: CommonGestureState & Coordinates; move: CommonGestureState & Coordinates; pinch: CommonGestureState & DistanceAngle & PinchState; }; export declare type GestureState = State[T]; export declare type PartialGestureState = Partial>; export declare type FullGestureState = SharedGestureState & State[T]; export declare type Handler = (state: Omit>, 'event'> & { event: K; }) => any | void; export declare type InternalHandlers = { [Key in GestureKey]?: Handler; }; declare type ReactDomAttributes = React.DOMAttributes; declare type NativeHandlersKeys = keyof Omit; export declare type AnyGestureEventTypes = Partial<{ drag: any; wheel: any; scroll: any; move: any; pinch: any; hover: any; } & { [key in NativeHandlersKeys]: any; }>; declare type check = undefined extends T[Key] ? EventTypes[Key] : T[Key]; export declare type UserHandlers = { onDrag: Handler<'drag', check>; onDragStart: Handler<'drag', check>; onDragEnd: Handler<'drag', check>; onPinch: Handler<'pinch', check>; onPinchStart: Handler<'pinch', check>; onPinchEnd: Handler<'pinch', check>; onWheel: Handler<'wheel', check>; onWheelStart: Handler<'wheel', check>; onWheelEnd: Handler<'wheel', check>; onMove: Handler<'move', check>; onMoveStart: Handler<'move', check>; onMoveEnd: Handler<'move', check>; onScroll: Handler<'scroll', check>; onScrollStart: Handler<'scroll', check>; onScrollEnd: Handler<'scroll', check>; onHover: Handler<'hover', check>; }; export declare type RecognizerClass = { new (controller: Controller, args: any): Recognizer; }; export declare type NativeHandlers = { [key in NativeHandlersKeys]: (state: SharedGestureState & { event: undefined extends T[key] ? Event : T[key]; args: any; }, ...args: any) => void; }; export declare type Handlers = Partial & NativeHandlers>; export declare type HookReturnType = T['domTarget'] extends object ? void | undefined : ReactEventHandlers; export {};