import type { ReactTestInstance } from 'react-test-renderer';
import type { FlingGestureHandler } from '../handlers/FlingGestureHandler';
import type { ForceTouchGestureHandler } from '../handlers/ForceTouchGestureHandler';
import type { BaseGestureHandlerProps, GestureEvent, HandlerStateChangeEvent } from '../handlers/gestureHandlerCommon';
import type { ForceTouchGestureHandlerEventPayload, LongPressGestureHandlerEventPayload, NativeViewGestureHandlerPayload, PanGestureHandlerEventPayload, PinchGestureHandlerEventPayload, RotationGestureHandlerEventPayload, TapGestureHandlerEventPayload } from '../handlers/GestureHandlerEventPayload';
import type { FlingGesture } from '../handlers/gestures/flingGesture';
import type { ForceTouchGesture } from '../handlers/gestures/forceTouchGesture';
import type { GestureType } from '../handlers/gestures/gesture';
import { BaseGesture } from '../handlers/gestures/gesture';
import type { LongPressGesture } from '../handlers/gestures/longPressGesture';
import type { NativeGesture } from '../handlers/gestures/nativeGesture';
import type { PanGesture } from '../handlers/gestures/panGesture';
import type { PinchGesture } from '../handlers/gestures/pinchGesture';
import type { RotationGesture } from '../handlers/gestures/rotationGesture';
import type { TapGesture } from '../handlers/gestures/tapGesture';
import type { LongPressGestureHandler } from '../handlers/LongPressGestureHandler';
import type { NativeViewGestureHandler } from '../handlers/NativeViewGestureHandler';
import type { PanGestureHandler } from '../handlers/PanGestureHandler';
import type { PinchGestureHandler } from '../handlers/PinchGestureHandler';
import type { RotationGestureHandler } from '../handlers/RotationGestureHandler';
import type { TapGestureHandler } from '../handlers/TapGestureHandler';
import type { DetectorCallbacks, SingleGesture } from '../v3/types';
type GestureHandlerTestEvent<TEventPayload extends Record<string, unknown> = Record<string, unknown>> = (GestureEvent<TEventPayload> | HandlerStateChangeEvent<TEventPayload>)['nativeEvent'];
type AllGestures = TapGesture | PanGesture | LongPressGesture | RotationGesture | PinchGesture | FlingGesture | ForceTouchGesture | NativeGesture;
type AllHandlers = TapGestureHandler | PanGestureHandler | LongPressGestureHandler | RotationGestureHandler | PinchGestureHandler | FlingGestureHandler | ForceTouchGestureHandler | NativeViewGestureHandler;
type ClassComponentConstructor<P> = new (props: P) => React.Component<P, any, any>;
type ExtractPayloadFromProps<T> = T extends BaseGestureHandlerProps<infer TPayload> ? TPayload : never;
type ExtractConfig<T> = T extends BaseGesture<infer TGesturePayload> ? TGesturePayload : T extends ClassComponentConstructor<infer THandlerProps> ? ExtractPayloadFromProps<THandlerProps> : Record<string, unknown>;
type ExtractHookGesturePayload<T> = T extends {
    detectorCallbacks: DetectorCallbacks<any, infer TExtendedHandlerData>;
} ? TExtendedHandlerData : never;
type ExtractGestureControllerPayload<T> = T extends SingleGesture<any, any, any> ? ExtractHookGesturePayload<T> : T extends BaseGesture<any> ? ExtractConfig<T> : Record<string, unknown>;
export type GestureControllerEvent<TEventPayload extends Record<string, unknown> = Record<string, unknown>> = Partial<TEventPayload> & {
    handlerTag?: never;
    nativeEvent?: never;
    oldState?: never;
    state?: never;
};
export interface GestureController<TEventPayload extends Record<string, unknown> = Record<string, unknown>> {
    begin: (event?: GestureControllerEvent<TEventPayload>) => void;
    activate: (event?: GestureControllerEvent<TEventPayload>) => void;
    update: (event?: GestureControllerEvent<TEventPayload>) => void;
    end: (event?: GestureControllerEvent<TEventPayload>) => void;
    fail: (event?: GestureControllerEvent<TEventPayload>) => void;
    cancel: (event?: GestureControllerEvent<TEventPayload>) => void;
}
export declare function createGestureController<TTarget extends GestureType | SingleGesture<any, any, any>>(componentOrGesture: TTarget): GestureController<ExtractGestureControllerPayload<TTarget>>;
export declare function createGestureController<TEventPayload extends Record<string, unknown> = Record<string, unknown>>(componentOrGesture: ReactTestInstance | string): GestureController<TEventPayload>;
export declare function fireGestureHandler<THandler extends AllGestures | AllHandlers>(componentOrGesture: ReactTestInstance | GestureType | SingleGesture<any, any, any>, eventList?: Partial<GestureHandlerTestEvent<ExtractConfig<THandler>>>[]): void;
export declare function getByGestureTestId(testID: string): BaseGesture<Record<string, unknown>> | BaseGesture<Record<string, never>> | BaseGesture<TapGestureHandlerEventPayload> | BaseGesture<PanGestureHandlerEventPayload> | BaseGesture<LongPressGestureHandlerEventPayload> | BaseGesture<RotationGestureHandlerEventPayload> | BaseGesture<PinchGestureHandlerEventPayload> | BaseGesture<ForceTouchGestureHandlerEventPayload> | BaseGesture<NativeViewGestureHandlerPayload> | BaseGesture<import("../handlers/GestureHandlerEventPayload").HoverGestureHandlerEventPayload> | SingleGesture<any, any, any>;
export {};
//# sourceMappingURL=jestUtils.d.ts.map