react-native-gesture-handler 2.13.4 → 2.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +3 -2
- package/android/gradle.properties +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +36 -72
- package/android/src/main/java/com/swmansion/gesturehandler/react/Extensions.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +12 -14
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +8 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +34 -88
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +18 -12
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/FlingGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +22 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/HoverGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/LongPressGestureHandlerEventDataBuilder.kt +33 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/ManualGestureHandlerEventDataBuilder.kt +5 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/NativeGestureHandlerEventDataBuilder.kt +18 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PanGestureHandlerEventDataBuilder.kt +42 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PinchGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/RotationGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/TapGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/jni/CMakeLists.txt +14 -2
- package/ios/Handlers/RNHoverHandler.m +15 -14
- package/ios/RNGestureHandler.m +11 -0
- package/ios/RNGestureHandlerButtonComponentView.mm +2 -0
- package/lib/commonjs/components/gestureHandlerRootHOC.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js +1 -1
- package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/commonjs/getReactNativeVersion.js +22 -0
- package/lib/commonjs/getReactNativeVersion.js.map +1 -0
- package/lib/commonjs/getReactNativeVersion.web.js +11 -0
- package/lib/commonjs/getReactNativeVersion.web.js.map +1 -0
- package/lib/commonjs/handlers/gestureHandlerCommon.js +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +13 -3
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js +8 -0
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +39 -37
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/commonjs/utils.js +0 -13
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +4 -6
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +4 -15
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js +27 -29
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +13 -3
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/components/gestureHandlerRootHOC.js.map +1 -1
- package/lib/module/components/touchables/TouchableNativeFeedback.android.js +1 -1
- package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
- package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/module/getReactNativeVersion.js +10 -0
- package/lib/module/getReactNativeVersion.js.map +1 -0
- package/lib/module/getReactNativeVersion.web.js +4 -0
- package/lib/module/getReactNativeVersion.web.js.map +1 -0
- package/lib/module/handlers/gestureHandlerCommon.js +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +12 -3
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js +8 -0
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js +44 -42
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/module/utils.js +0 -6
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +4 -6
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +4 -15
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js +27 -29
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +12 -3
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/typescript/ActionType.d.ts +1 -1
- package/lib/typescript/Directions.d.ts +1 -1
- package/lib/typescript/PlatformConstants.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
- package/lib/typescript/State.d.ts +1 -1
- package/lib/typescript/TouchEventType.d.ts +1 -1
- package/lib/typescript/components/DrawerLayout.d.ts +9 -9
- package/lib/typescript/components/GestureButtons.d.ts +3 -3
- package/lib/typescript/components/GestureComponents.d.ts +6 -6
- package/lib/typescript/components/GestureComponents.web.d.ts +1 -1
- package/lib/typescript/components/GestureHandlerRootView.android.d.ts +2 -1
- package/lib/typescript/components/GestureHandlerRootView.d.ts +2 -1
- package/lib/typescript/components/GestureHandlerRootView.web.d.ts +2 -1
- package/lib/typescript/components/Swipeable.d.ts +4 -4
- package/lib/typescript/components/gestureHandlerRootHOC.d.ts +1 -1
- package/lib/typescript/components/touchables/GenericTouchable.d.ts +4 -3
- package/lib/typescript/components/touchables/TouchableHighlight.d.ts +4 -3
- package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +7 -6
- package/lib/typescript/components/touchables/TouchableOpacity.d.ts +3 -2
- package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +1 -1
- package/lib/typescript/getReactNativeVersion.d.ts +4 -0
- package/lib/typescript/getReactNativeVersion.web.d.ts +1 -0
- package/lib/typescript/handlers/FlingGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/LongPressGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +3 -3
- package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/PinchGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/RotationGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/TapGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/createHandler.d.ts +1 -1
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +11 -10
- package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +32 -32
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -2
- package/lib/typescript/handlers/gestures/flingGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/gesture.d.ts +7 -5
- package/lib/typescript/handlers/gestures/gestureComposition.d.ts +4 -4
- package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +3 -1
- package/lib/typescript/handlers/gestures/hoverGesture.d.ts +3 -3
- package/lib/typescript/handlers/gestures/longPressGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/manualGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/nativeGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/panGesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/pinchGesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/rotationGesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/tapGesture.d.ts +1 -1
- package/lib/typescript/jestUtils/jestUtils.d.ts +6 -6
- package/lib/typescript/typeUtils.d.ts +1 -1
- package/lib/typescript/utils.d.ts +1 -5
- package/lib/typescript/web/interfaces.d.ts +4 -3
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +0 -1
- package/lib/typescript/web/tools/InteractionManager.d.ts +2 -1
- package/lib/typescript/web_hammer/GestureHandler.d.ts +2 -2
- package/package.json +7 -7
- package/src/components/gestureHandlerRootHOC.tsx +1 -3
- package/src/components/touchables/TouchableNativeFeedback.android.tsx +2 -1
- package/src/components/touchables/TouchableWithoutFeedback.tsx +3 -3
- package/src/getReactNativeVersion.ts +11 -0
- package/src/getReactNativeVersion.web.ts +3 -0
- package/src/handlers/gestureHandlerCommon.ts +6 -1
- package/src/handlers/gestures/GestureDetector.tsx +9 -6
- package/src/handlers/gestures/gesture.ts +9 -1
- package/src/handlers/gestures/gestureStateManager.ts +42 -40
- package/src/utils.ts +0 -8
- package/src/web/handlers/FlingGestureHandler.ts +5 -5
- package/src/web/handlers/GestureHandler.ts +1 -1
- package/src/web/interfaces.ts +1 -0
- package/src/web/tools/GestureHandlerOrchestrator.ts +4 -13
- package/src/web/tools/InteractionManager.ts +37 -30
- package/src/web/tools/PointerEventManager.ts +14 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +0 -8
- /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +0 -0
- /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ContinousBaseGesture } from './gesture';
|
|
2
2
|
import { RotationGestureHandlerEventPayload } from '../RotationGestureHandler';
|
|
3
3
|
import { GestureUpdateEvent } from '../gestureHandlerCommon';
|
|
4
|
-
|
|
4
|
+
type RotationGestureChangeEventPayload = {
|
|
5
5
|
rotationChange: number;
|
|
6
6
|
};
|
|
7
7
|
export declare class RotationGesture extends ContinousBaseGesture<RotationGestureHandlerEventPayload, RotationGestureChangeEventPayload> {
|
|
8
8
|
constructor();
|
|
9
9
|
onChange(callback: (event: GestureUpdateEvent<RotationGestureHandlerEventPayload & RotationGestureChangeEventPayload>) => void): this;
|
|
10
10
|
}
|
|
11
|
-
export
|
|
11
|
+
export type RotationGestureType = InstanceType<typeof RotationGesture>;
|
|
12
12
|
export {};
|
|
@@ -11,4 +11,4 @@ export declare class TapGesture extends BaseGesture<TapGestureHandlerEventPayloa
|
|
|
11
11
|
maxDeltaX(delta: number): this;
|
|
12
12
|
maxDeltaY(delta: number): this;
|
|
13
13
|
}
|
|
14
|
-
export
|
|
14
|
+
export type TapGestureType = InstanceType<typeof TapGesture>;
|
|
@@ -17,12 +17,12 @@ import { PanGestureHandler, PanGestureHandlerEventPayload } from '../handlers/Pa
|
|
|
17
17
|
import { PinchGestureHandler, PinchGestureHandlerEventPayload } from '../handlers/PinchGestureHandler';
|
|
18
18
|
import { RotationGestureHandler, RotationGestureHandlerEventPayload } from '../handlers/RotationGestureHandler';
|
|
19
19
|
import { TapGestureHandler, TapGestureHandlerEventPayload } from '../handlers/TapGestureHandler';
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
type GestureHandlerTestEvent<TEventPayload extends Record<string, unknown> = Record<string, unknown>> = (GestureEvent<TEventPayload> | HandlerStateChangeEvent<TEventPayload>)['nativeEvent'];
|
|
21
|
+
type AllGestures = TapGesture | PanGesture | LongPressGesture | RotationGesture | PinchGesture | FlingGesture | ForceTouchGesture | NativeGesture;
|
|
22
|
+
type AllHandlers = TapGestureHandler | PanGestureHandler | LongPressGestureHandler | RotationGestureHandler | PinchGestureHandler | FlingGestureHandler | ForceTouchGestureHandler | NativeViewGestureHandler;
|
|
23
|
+
type ClassComponentConstructor<P> = new (props: P) => React.Component<P, any, any>;
|
|
24
|
+
type ExtractPayloadFromProps<T> = T extends BaseGestureHandlerProps<infer TPayload> ? TPayload : never;
|
|
25
|
+
type ExtractConfig<T> = T extends BaseGesture<infer TGesturePayload> ? TGesturePayload : T extends ClassComponentConstructor<infer THandlerProps> ? ExtractPayloadFromProps<THandlerProps> : Record<string, unknown>;
|
|
26
26
|
export declare function fireGestureHandler<THandler extends AllGestures | AllHandlers>(componentOrGesture: ReactTestInstance | GestureType, eventList?: Partial<GestureHandlerTestEvent<ExtractConfig<THandler>>>[]): void;
|
|
27
27
|
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>;
|
|
28
28
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type ValueOf<T> = T[keyof T];
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
export declare const REACT_NATIVE_VERSION: {
|
|
2
|
-
major: number;
|
|
3
|
-
minor: number;
|
|
4
|
-
};
|
|
5
1
|
export declare function toArray<T>(object: T | T[]): T[];
|
|
6
|
-
export
|
|
2
|
+
export type withPrevAndCurrentMapFn<T, Transformed> = (previous: Transformed | null, current: T) => Transformed;
|
|
7
3
|
export declare function withPrevAndCurrent<T, Transformed>(array: T[], mapFn: withPrevAndCurrentMapFn<T, Transformed>): Transformed[];
|
|
8
4
|
export declare function hasProperty(object: object, key: string): boolean;
|
|
9
5
|
export declare function isJestEnv(): boolean;
|
|
@@ -14,11 +14,12 @@ export interface HitSlop {
|
|
|
14
14
|
export interface Handler {
|
|
15
15
|
handlerTag: number;
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
type ConfigArgs = number | boolean | HitSlop | UserSelect | ActiveCursor | Directions | Handler[] | null | undefined;
|
|
18
18
|
export interface Config extends Record<string, ConfigArgs> {
|
|
19
19
|
enabled?: boolean;
|
|
20
20
|
simultaneousHandlers?: Handler[] | null;
|
|
21
21
|
waitFor?: Handler[] | null;
|
|
22
|
+
blocksHandlers?: Handler[] | null;
|
|
22
23
|
hitSlop?: HitSlop;
|
|
23
24
|
shouldCancelWhenOutside?: boolean;
|
|
24
25
|
userSelect?: UserSelect;
|
|
@@ -53,7 +54,7 @@ export interface Config extends Record<string, ConfigArgs> {
|
|
|
53
54
|
disallowInterruption?: boolean;
|
|
54
55
|
direction?: Directions;
|
|
55
56
|
}
|
|
56
|
-
|
|
57
|
+
type NativeEventArgs = number | State | boolean | undefined;
|
|
57
58
|
interface NativeEvent extends Record<string, NativeEventArgs> {
|
|
58
59
|
numberOfPointers: number;
|
|
59
60
|
state: State;
|
|
@@ -69,7 +70,7 @@ export interface PointerData {
|
|
|
69
70
|
absoluteX: number;
|
|
70
71
|
absoluteY: number;
|
|
71
72
|
}
|
|
72
|
-
|
|
73
|
+
type TouchNativeArgs = number | State | TouchEventType | PointerData[];
|
|
73
74
|
interface NativeTouchEvent extends Record<string, TouchNativeArgs> {
|
|
74
75
|
handlerTag: number;
|
|
75
76
|
state: State;
|
|
@@ -4,11 +4,12 @@ export default class InteractionManager {
|
|
|
4
4
|
private static instance;
|
|
5
5
|
private readonly waitForRelations;
|
|
6
6
|
private readonly simultaneousRelations;
|
|
7
|
+
private readonly blocksHandlersRelations;
|
|
7
8
|
private constructor();
|
|
8
9
|
configureInteractions(handler: GestureHandler, config: Config): void;
|
|
9
10
|
shouldWaitForHandlerFailure(handler: GestureHandler, otherHandler: GestureHandler): boolean;
|
|
10
11
|
shouldRecognizeSimultaneously(handler: GestureHandler, otherHandler: GestureHandler): boolean;
|
|
11
|
-
shouldRequireHandlerToWaitForFailure(
|
|
12
|
+
shouldRequireHandlerToWaitForFailure(handler: GestureHandler, otherHandler: GestureHandler): boolean;
|
|
12
13
|
shouldHandlerBeCancelledBy(_handler: GestureHandler, _otherHandler: GestureHandler): boolean;
|
|
13
14
|
dropRelationsForHandlerWithTag(handlerTag: number): void;
|
|
14
15
|
reset(): void;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { findNodeHandle } from 'react-native';
|
|
2
2
|
import { State } from '../State';
|
|
3
3
|
import { EventMap } from './constants';
|
|
4
|
-
export
|
|
5
|
-
export
|
|
4
|
+
export type HammerInputExt = Omit<HammerInput, 'destroy' | 'handler' | 'init'>;
|
|
5
|
+
export type Config = Partial<{
|
|
6
6
|
enabled: boolean;
|
|
7
7
|
minPointers: number;
|
|
8
8
|
maxPointers: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-gesture-handler",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.14.1",
|
|
4
4
|
"description": "Experimental implementation of a new declarative API for gesture handling in react-native",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"prepare": "bob build && husky install",
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
"android/src/main/AndroidManifest.xml",
|
|
32
32
|
"android/src/main/java/",
|
|
33
33
|
"android/src/main/jni/",
|
|
34
|
-
"android/src/
|
|
35
|
-
"android/src/
|
|
34
|
+
"android/fabric/src/main/java",
|
|
35
|
+
"android/paper/src/main/java",
|
|
36
36
|
"android/common/src/main/java/",
|
|
37
37
|
"android/reanimated/src/main/java/",
|
|
38
38
|
"android/noreanimated/src/main/java/",
|
|
@@ -77,12 +77,13 @@
|
|
|
77
77
|
"@babel/preset-env": "^7.12.11",
|
|
78
78
|
"@babel/preset-typescript": "^7.12.7",
|
|
79
79
|
"@babel/runtime": "^7.12.5",
|
|
80
|
+
"@react-native/babel-preset": "^0.73.18",
|
|
80
81
|
"@testing-library/jest-native": "^4.0.4",
|
|
81
82
|
"@testing-library/react-native": "^9.0.0",
|
|
82
83
|
"@types/hammerjs": "^2.0.38",
|
|
83
84
|
"@types/hoist-non-react-statics": "^3.3.1",
|
|
84
85
|
"@types/jest": "^27.0.3",
|
|
85
|
-
"@types/react": "^18.
|
|
86
|
+
"@types/react": "^18.2.6",
|
|
86
87
|
"@types/react-test-renderer": "^17.0.0",
|
|
87
88
|
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
|
88
89
|
"@typescript-eslint/parser": "^4.33.0",
|
|
@@ -97,17 +98,16 @@
|
|
|
97
98
|
"husky": "^8.0.1",
|
|
98
99
|
"jest": "^26.6.3",
|
|
99
100
|
"lint-staged": "^12.3.2",
|
|
100
|
-
"metro-react-native-babel-preset": "^0.64.0",
|
|
101
101
|
"prettier": "^2.7.1",
|
|
102
102
|
"react": "18.2.0",
|
|
103
103
|
"react-dom": "^16.12.0",
|
|
104
|
-
"react-native": "0.
|
|
104
|
+
"react-native": "0.73.0-rc.5",
|
|
105
105
|
"react-native-builder-bob": "^0.17.1",
|
|
106
106
|
"react-native-reanimated": "^2.3.1",
|
|
107
107
|
"react-native-web": "^0.11.7",
|
|
108
108
|
"react-test-renderer": "17.0.2",
|
|
109
109
|
"release-it": "^13.6.5",
|
|
110
|
-
"typescript": "
|
|
110
|
+
"typescript": "5.0.4"
|
|
111
111
|
},
|
|
112
112
|
"peerDependencies": {
|
|
113
113
|
"react": "*",
|
|
@@ -3,9 +3,7 @@ import { StyleSheet, StyleProp, ViewStyle } from 'react-native';
|
|
|
3
3
|
import hoistNonReactStatics from 'hoist-non-react-statics';
|
|
4
4
|
import GestureHandlerRootView from './GestureHandlerRootView';
|
|
5
5
|
|
|
6
|
-
export default function gestureHandlerRootHOC<
|
|
7
|
-
P extends Record<string, unknown>
|
|
8
|
-
>(
|
|
6
|
+
export default function gestureHandlerRootHOC<P extends object>(
|
|
9
7
|
Component: React.ComponentType<P>,
|
|
10
8
|
containerStyles?: StyleProp<ViewStyle>
|
|
11
9
|
): React.ComponentType<P> {
|
|
@@ -56,7 +56,8 @@ export default class TouchableNativeFeedback extends Component<TouchableNativeFe
|
|
|
56
56
|
rippleRadius,
|
|
57
57
|
});
|
|
58
58
|
|
|
59
|
-
static canUseNativeForeground = () =>
|
|
59
|
+
static canUseNativeForeground = () =>
|
|
60
|
+
Platform.OS === 'android' && Platform.Version >= 23;
|
|
60
61
|
|
|
61
62
|
getExtraButtonProps() {
|
|
62
63
|
const extraProps: TouchableNativeFeedbackExtraProps = {};
|
|
@@ -2,11 +2,11 @@ import * as React from 'react';
|
|
|
2
2
|
import { PropsWithChildren } from 'react';
|
|
3
3
|
import GenericTouchable, { GenericTouchableProps } from './GenericTouchable';
|
|
4
4
|
|
|
5
|
-
export type TouchableWithoutFeedbackProps =
|
|
5
|
+
export type TouchableWithoutFeedbackProps = GenericTouchableProps;
|
|
6
6
|
|
|
7
7
|
const TouchableWithoutFeedback = React.forwardRef<
|
|
8
|
-
|
|
9
|
-
PropsWithChildren<
|
|
8
|
+
GenericTouchable,
|
|
9
|
+
PropsWithChildren<TouchableWithoutFeedbackProps>
|
|
10
10
|
>((props, ref) => <GenericTouchable ref={ref} {...props} />);
|
|
11
11
|
|
|
12
12
|
TouchableWithoutFeedback.defaultProps = GenericTouchable.defaultProps;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import pack from 'react-native/package.json';
|
|
2
|
+
|
|
3
|
+
const [majorStr, minorStr] = pack.version.split('.');
|
|
4
|
+
const REACT_NATIVE_VERSION = {
|
|
5
|
+
major: parseInt(majorStr, 10),
|
|
6
|
+
minor: parseInt(minorStr, 10),
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export function getReactNativeVersion() {
|
|
10
|
+
return REACT_NATIVE_VERSION;
|
|
11
|
+
}
|
|
@@ -23,7 +23,11 @@ const commonProps = [
|
|
|
23
23
|
'activeCursor',
|
|
24
24
|
] as const;
|
|
25
25
|
|
|
26
|
-
const componentInteractionProps = [
|
|
26
|
+
const componentInteractionProps = [
|
|
27
|
+
'waitFor',
|
|
28
|
+
'simultaneousHandlers',
|
|
29
|
+
'blocksHandlers',
|
|
30
|
+
] as const;
|
|
27
31
|
|
|
28
32
|
export const baseGestureHandlerProps = [
|
|
29
33
|
...commonProps,
|
|
@@ -155,6 +159,7 @@ export type BaseGestureHandlerProps<
|
|
|
155
159
|
id?: string;
|
|
156
160
|
waitFor?: React.Ref<unknown> | React.Ref<unknown>[];
|
|
157
161
|
simultaneousHandlers?: React.Ref<unknown> | React.Ref<unknown>[];
|
|
162
|
+
blocksHandlers?: React.Ref<unknown> | React.Ref<unknown>[];
|
|
158
163
|
testID?: string;
|
|
159
164
|
cancelsTouchesInView?: boolean;
|
|
160
165
|
// TODO(TS) - fix event types
|
|
@@ -37,12 +37,8 @@ import { State } from '../../State';
|
|
|
37
37
|
import { TouchEventType } from '../../TouchEventType';
|
|
38
38
|
import { ComposedGesture } from './gestureComposition';
|
|
39
39
|
import { ActionType } from '../../ActionType';
|
|
40
|
-
import {
|
|
41
|
-
|
|
42
|
-
isJestEnv,
|
|
43
|
-
REACT_NATIVE_VERSION,
|
|
44
|
-
tagMessage,
|
|
45
|
-
} from '../../utils';
|
|
40
|
+
import { isFabric, isJestEnv, tagMessage } from '../../utils';
|
|
41
|
+
import { getReactNativeVersion } from '../../getReactNativeVersion';
|
|
46
42
|
import { getShadowNodeFromRef } from '../../getShadowNodeFromRef';
|
|
47
43
|
import { Platform } from 'react-native';
|
|
48
44
|
import type RNGestureHandlerModuleWeb from '../../RNGestureHandlerModule.web';
|
|
@@ -197,11 +193,17 @@ function attachHandlers({
|
|
|
197
193
|
);
|
|
198
194
|
}
|
|
199
195
|
|
|
196
|
+
let blocksHandlers: number[] = [];
|
|
197
|
+
if (handler.config.blocksHandlers) {
|
|
198
|
+
blocksHandlers = extractValidHandlerTags(handler.config.blocksHandlers);
|
|
199
|
+
}
|
|
200
|
+
|
|
200
201
|
RNGestureHandlerModule.updateGestureHandler(
|
|
201
202
|
handler.handlerTag,
|
|
202
203
|
filterConfig(handler.config, ALLOWED_PROPS, {
|
|
203
204
|
simultaneousHandlers: simultaneousWith,
|
|
204
205
|
waitFor: requireToFail,
|
|
206
|
+
blocksHandlers: blocksHandlers,
|
|
205
207
|
})
|
|
206
208
|
);
|
|
207
209
|
}
|
|
@@ -565,6 +567,7 @@ function validateDetectorChildren(ref: any) {
|
|
|
565
567
|
// / \
|
|
566
568
|
// NativeView NativeView
|
|
567
569
|
if (__DEV__ && Platform.OS !== 'web') {
|
|
570
|
+
const REACT_NATIVE_VERSION = getReactNativeVersion();
|
|
568
571
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
569
572
|
const wrapType =
|
|
570
573
|
REACT_NATIVE_VERSION.minor > 63 || REACT_NATIVE_VERSION.major > 0
|
|
@@ -41,6 +41,7 @@ export interface BaseGestureConfig
|
|
|
41
41
|
ref?: React.MutableRefObject<GestureType | undefined>;
|
|
42
42
|
requireToFail?: GestureRef[];
|
|
43
43
|
simultaneousWith?: GestureRef[];
|
|
44
|
+
blocksHandlers?: GestureRef[];
|
|
44
45
|
needsPointerData?: boolean;
|
|
45
46
|
manualActivation?: boolean;
|
|
46
47
|
runOnJS?: boolean;
|
|
@@ -144,7 +145,7 @@ export abstract class BaseGesture<
|
|
|
144
145
|
}
|
|
145
146
|
|
|
146
147
|
private addDependency(
|
|
147
|
-
key: 'simultaneousWith' | 'requireToFail',
|
|
148
|
+
key: 'simultaneousWith' | 'requireToFail' | 'blocksHandlers',
|
|
148
149
|
gesture: Exclude<GestureRef, number>
|
|
149
150
|
) {
|
|
150
151
|
const value = this.config[key];
|
|
@@ -275,6 +276,13 @@ export abstract class BaseGesture<
|
|
|
275
276
|
return this;
|
|
276
277
|
}
|
|
277
278
|
|
|
279
|
+
blocksExternalGesture(...gestures: Exclude<GestureRef, number>[]) {
|
|
280
|
+
for (const gesture of gestures) {
|
|
281
|
+
this.addDependency('blocksHandlers', gesture);
|
|
282
|
+
}
|
|
283
|
+
return this;
|
|
284
|
+
}
|
|
285
|
+
|
|
278
286
|
withTestId(id: string) {
|
|
279
287
|
this.config.testId = id;
|
|
280
288
|
return this;
|
|
@@ -18,45 +18,47 @@ const warningMessage = tagMessage(
|
|
|
18
18
|
const REANIMATED_AVAILABLE = Reanimated?.useSharedValue !== undefined;
|
|
19
19
|
const setGestureState = Reanimated?.setGestureState;
|
|
20
20
|
|
|
21
|
+
function create(handlerTag: number): GestureStateManagerType {
|
|
22
|
+
'worklet';
|
|
23
|
+
return {
|
|
24
|
+
begin: () => {
|
|
25
|
+
'worklet';
|
|
26
|
+
if (REANIMATED_AVAILABLE) {
|
|
27
|
+
setGestureState(handlerTag, State.BEGAN);
|
|
28
|
+
} else {
|
|
29
|
+
console.warn(warningMessage);
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
activate: () => {
|
|
34
|
+
'worklet';
|
|
35
|
+
if (REANIMATED_AVAILABLE) {
|
|
36
|
+
setGestureState(handlerTag, State.ACTIVE);
|
|
37
|
+
} else {
|
|
38
|
+
console.warn(warningMessage);
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
fail: () => {
|
|
43
|
+
'worklet';
|
|
44
|
+
if (REANIMATED_AVAILABLE) {
|
|
45
|
+
setGestureState(handlerTag, State.FAILED);
|
|
46
|
+
} else {
|
|
47
|
+
console.warn(warningMessage);
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
end: () => {
|
|
52
|
+
'worklet';
|
|
53
|
+
if (REANIMATED_AVAILABLE) {
|
|
54
|
+
setGestureState(handlerTag, State.END);
|
|
55
|
+
} else {
|
|
56
|
+
console.warn(warningMessage);
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
21
62
|
export const GestureStateManager = {
|
|
22
|
-
create
|
|
23
|
-
'worklet';
|
|
24
|
-
return {
|
|
25
|
-
begin: () => {
|
|
26
|
-
'worklet';
|
|
27
|
-
if (REANIMATED_AVAILABLE) {
|
|
28
|
-
setGestureState(handlerTag, State.BEGAN);
|
|
29
|
-
} else {
|
|
30
|
-
console.warn(warningMessage);
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
|
|
34
|
-
activate: () => {
|
|
35
|
-
'worklet';
|
|
36
|
-
if (REANIMATED_AVAILABLE) {
|
|
37
|
-
setGestureState(handlerTag, State.ACTIVE);
|
|
38
|
-
} else {
|
|
39
|
-
console.warn(warningMessage);
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
|
|
43
|
-
fail: () => {
|
|
44
|
-
'worklet';
|
|
45
|
-
if (REANIMATED_AVAILABLE) {
|
|
46
|
-
setGestureState(handlerTag, State.FAILED);
|
|
47
|
-
} else {
|
|
48
|
-
console.warn(warningMessage);
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
|
|
52
|
-
end: () => {
|
|
53
|
-
'worklet';
|
|
54
|
-
if (REANIMATED_AVAILABLE) {
|
|
55
|
-
setGestureState(handlerTag, State.END);
|
|
56
|
-
} else {
|
|
57
|
-
console.warn(warningMessage);
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
},
|
|
63
|
+
create,
|
|
62
64
|
};
|
package/src/utils.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
import pack from 'react-native/package.json';
|
|
2
|
-
|
|
3
|
-
const [majorStr, minorStr] = pack.version.split('.');
|
|
4
|
-
export const REACT_NATIVE_VERSION = {
|
|
5
|
-
major: parseInt(majorStr, 10),
|
|
6
|
-
minor: parseInt(minorStr, 10),
|
|
7
|
-
};
|
|
8
|
-
|
|
9
1
|
export function toArray<T>(object: T | T[]): T[] {
|
|
10
2
|
if (!Array.isArray(object)) {
|
|
11
3
|
return [object];
|
|
@@ -5,7 +5,7 @@ import { AdaptedEvent, Config } from '../interfaces';
|
|
|
5
5
|
import GestureHandler from './GestureHandler';
|
|
6
6
|
|
|
7
7
|
const DEFAULT_MAX_DURATION_MS = 800;
|
|
8
|
-
const DEFAULT_MIN_ACCEPTABLE_DELTA =
|
|
8
|
+
const DEFAULT_MIN_ACCEPTABLE_DELTA = 32;
|
|
9
9
|
const DEFAULT_DIRECTION = Direction.RIGHT;
|
|
10
10
|
const DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;
|
|
11
11
|
|
|
@@ -141,11 +141,11 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
private onUp(event: AdaptedEvent): void {
|
|
144
|
-
this.
|
|
145
|
-
|
|
146
|
-
return;
|
|
144
|
+
if (this.currentState === State.BEGAN) {
|
|
145
|
+
this.endFling();
|
|
147
146
|
}
|
|
148
|
-
|
|
147
|
+
|
|
148
|
+
this.tracker.removeFromTracker(event.pointerId);
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
public activate(force?: boolean): void {
|
package/src/web/interfaces.ts
CHANGED
|
@@ -32,6 +32,7 @@ export interface Config extends Record<string, ConfigArgs> {
|
|
|
32
32
|
enabled?: boolean;
|
|
33
33
|
simultaneousHandlers?: Handler[] | null;
|
|
34
34
|
waitFor?: Handler[] | null;
|
|
35
|
+
blocksHandlers?: Handler[] | null;
|
|
35
36
|
hitSlop?: HitSlop;
|
|
36
37
|
shouldCancelWhenOutside?: boolean;
|
|
37
38
|
userSelect?: UserSelect;
|
|
@@ -9,7 +9,6 @@ export default class GestureHandlerOrchestrator {
|
|
|
9
9
|
|
|
10
10
|
private gestureHandlers: GestureHandler[] = [];
|
|
11
11
|
private awaitingHandlers: GestureHandler[] = [];
|
|
12
|
-
private handlersToCancel: GestureHandler[] = [];
|
|
13
12
|
|
|
14
13
|
private handlingChangeSemaphore = 0;
|
|
15
14
|
private activationIndex = 0;
|
|
@@ -34,7 +33,6 @@ export default class GestureHandlerOrchestrator {
|
|
|
34
33
|
public removeHandlerFromOrchestrator(handler: GestureHandler): void {
|
|
35
34
|
this.gestureHandlers.splice(this.gestureHandlers.indexOf(handler), 1);
|
|
36
35
|
this.awaitingHandlers.splice(this.awaitingHandlers.indexOf(handler), 1);
|
|
37
|
-
this.handlersToCancel.splice(this.handlersToCancel.indexOf(handler), 1);
|
|
38
36
|
}
|
|
39
37
|
|
|
40
38
|
private cleanupFinishedHandlers(): void {
|
|
@@ -177,17 +175,12 @@ export default class GestureHandlerOrchestrator {
|
|
|
177
175
|
handler.setShouldResetProgress(true);
|
|
178
176
|
handler.setActivationIndex(this.activationIndex++);
|
|
179
177
|
|
|
180
|
-
this.gestureHandlers.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
|
|
184
|
-
this.handlersToCancel.push(otherHandler);
|
|
178
|
+
for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
|
|
179
|
+
if (this.shouldHandlerBeCancelledBy(this.gestureHandlers[i], handler)) {
|
|
180
|
+
this.gestureHandlers[i].cancel();
|
|
185
181
|
}
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
for (let i = this.handlersToCancel.length - 1; i >= 0; --i) {
|
|
189
|
-
this.handlersToCancel[i]?.cancel();
|
|
190
182
|
}
|
|
183
|
+
|
|
191
184
|
this.awaitingHandlers.forEach((otherHandler) => {
|
|
192
185
|
if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
|
|
193
186
|
otherHandler?.cancel();
|
|
@@ -212,8 +205,6 @@ export default class GestureHandlerOrchestrator {
|
|
|
212
205
|
}
|
|
213
206
|
}
|
|
214
207
|
}
|
|
215
|
-
|
|
216
|
-
this.handlersToCancel = [];
|
|
217
208
|
}
|
|
218
209
|
|
|
219
210
|
private addAwaitingHandler(handler: GestureHandler): void {
|
|
@@ -5,6 +5,7 @@ export default class InteractionManager {
|
|
|
5
5
|
private static instance: InteractionManager;
|
|
6
6
|
private readonly waitForRelations: Map<number, number[]> = new Map();
|
|
7
7
|
private readonly simultaneousRelations: Map<number, number[]> = new Map();
|
|
8
|
+
private readonly blocksHandlersRelations: Map<number, number[]> = new Map();
|
|
8
9
|
|
|
9
10
|
// Private becaues of singleton
|
|
10
11
|
// eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function
|
|
@@ -40,6 +41,19 @@ export default class InteractionManager {
|
|
|
40
41
|
|
|
41
42
|
this.simultaneousRelations.set(handler.getTag(), simultaneousHandlers);
|
|
42
43
|
}
|
|
44
|
+
|
|
45
|
+
if (config.blocksHandlers) {
|
|
46
|
+
const blocksHandlers: number[] = [];
|
|
47
|
+
config.blocksHandlers.forEach((otherHandler: Handler): void => {
|
|
48
|
+
if (typeof otherHandler === 'number') {
|
|
49
|
+
blocksHandlers.push(otherHandler);
|
|
50
|
+
} else {
|
|
51
|
+
blocksHandlers.push(otherHandler.handlerTag);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
this.blocksHandlersRelations.set(handler.getTag(), blocksHandlers);
|
|
56
|
+
}
|
|
43
57
|
}
|
|
44
58
|
|
|
45
59
|
public shouldWaitForHandlerFailure(
|
|
@@ -49,20 +63,12 @@ export default class InteractionManager {
|
|
|
49
63
|
const waitFor: number[] | undefined = this.waitForRelations.get(
|
|
50
64
|
handler.getTag()
|
|
51
65
|
);
|
|
52
|
-
if (!waitFor) {
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
let shouldWait = false;
|
|
57
|
-
|
|
58
|
-
waitFor.forEach((tag: number): void => {
|
|
59
|
-
if (tag === otherHandler.getTag()) {
|
|
60
|
-
shouldWait = true;
|
|
61
|
-
return; //Returns from callback
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
66
|
|
|
65
|
-
return
|
|
67
|
+
return (
|
|
68
|
+
waitFor?.find((tag: number) => {
|
|
69
|
+
return tag === otherHandler.getTag();
|
|
70
|
+
}) !== undefined
|
|
71
|
+
);
|
|
66
72
|
}
|
|
67
73
|
|
|
68
74
|
public shouldRecognizeSimultaneously(
|
|
@@ -71,28 +77,27 @@ export default class InteractionManager {
|
|
|
71
77
|
): boolean {
|
|
72
78
|
const simultaneousHandlers: number[] | undefined =
|
|
73
79
|
this.simultaneousRelations.get(handler.getTag());
|
|
74
|
-
if (!simultaneousHandlers) {
|
|
75
|
-
return false;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
let shouldRecognizeSimultaneously = false;
|
|
79
80
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
return shouldRecognizeSimultaneously;
|
|
81
|
+
return (
|
|
82
|
+
simultaneousHandlers?.find((tag: number) => {
|
|
83
|
+
return tag === otherHandler.getTag();
|
|
84
|
+
}) !== undefined
|
|
85
|
+
);
|
|
88
86
|
}
|
|
89
87
|
|
|
90
88
|
public shouldRequireHandlerToWaitForFailure(
|
|
91
|
-
|
|
92
|
-
|
|
89
|
+
handler: GestureHandler,
|
|
90
|
+
otherHandler: GestureHandler
|
|
93
91
|
): boolean {
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
const waitFor: number[] | undefined = this.blocksHandlersRelations.get(
|
|
93
|
+
handler.getTag()
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
return (
|
|
97
|
+
waitFor?.find((tag: number) => {
|
|
98
|
+
return tag === otherHandler.getTag();
|
|
99
|
+
}) !== undefined
|
|
100
|
+
);
|
|
96
101
|
}
|
|
97
102
|
|
|
98
103
|
public shouldHandlerBeCancelledBy(
|
|
@@ -106,11 +111,13 @@ export default class InteractionManager {
|
|
|
106
111
|
public dropRelationsForHandlerWithTag(handlerTag: number): void {
|
|
107
112
|
this.waitForRelations.delete(handlerTag);
|
|
108
113
|
this.simultaneousRelations.delete(handlerTag);
|
|
114
|
+
this.blocksHandlersRelations.delete(handlerTag);
|
|
109
115
|
}
|
|
110
116
|
|
|
111
117
|
public reset() {
|
|
112
118
|
this.waitForRelations.clear();
|
|
113
119
|
this.simultaneousRelations.clear();
|
|
120
|
+
this.blocksHandlersRelations.clear();
|
|
114
121
|
}
|
|
115
122
|
|
|
116
123
|
public static getInstance(): InteractionManager {
|