react-native-gesture-handler 2.13.4 → 2.14.1
Sign up to get free protection for your applications and to get access to all the features.
- 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 {
|