react-native-gesture-handler 2.9.0 → 2.10.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +1 -0
- package/RNGestureHandler.podspec +1 -1
- package/android/build.gradle +69 -29
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +2 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +39 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +8 -2
- package/ios/Handlers/RNNativeViewHandler.mm +4 -4
- package/ios/RNGestureHandlerButtonComponentView.h +2 -2
- package/ios/RNGestureHandlerButtonComponentView.mm +2 -2
- package/ios/RNGestureHandlerManager.mm +9 -9
- package/ios/RNGestureHandlerModule.mm +16 -16
- package/ios/RNGestureHandlerRootViewComponentView.mm +2 -2
- package/ios/RNRootViewGestureRecognizer.m +3 -3
- package/lib/commonjs/EnableNewWebImplementation.js +35 -0
- package/lib/commonjs/EnableNewWebImplementation.js.map +1 -0
- package/lib/commonjs/GestureHandlerRootViewContext.js +15 -0
- package/lib/commonjs/GestureHandlerRootViewContext.js.map +1 -0
- package/lib/commonjs/RNGestureHandlerModule.macos.js +6 -6
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +6 -6
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.windows.js +6 -6
- package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.web.js +6 -5
- package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerButton.js +3 -5
- package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
- package/lib/commonjs/{GestureHandlerRootView.android.js → components/GestureHandlerRootView.android.js} +8 -7
- package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -0
- package/lib/commonjs/{GestureHandlerRootView.js → components/GestureHandlerRootView.js} +8 -2
- package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -0
- package/lib/commonjs/{GestureHandlerRootView.web.js → components/GestureHandlerRootView.web.js} +7 -1
- package/lib/commonjs/components/GestureHandlerRootView.web.js.map +1 -0
- package/lib/commonjs/components/Swipeable.js +17 -3
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/{gestureHandlerRootHOC.js.map → components/gestureHandlerRootHOC.js.map} +1 -1
- package/lib/commonjs/handlers/createHandler.js +21 -13
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js +5 -4
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +19 -9
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +22 -19
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/commonjs/index.js +16 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils.js +0 -6
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +3 -0
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/ManualGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -6
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +2 -12
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -6
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -6
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/tools/CircularBuffer.js +59 -0
- package/lib/commonjs/web/tools/CircularBuffer.js.map +1 -0
- package/lib/commonjs/web/tools/LeastSquareSolver.js +204 -0
- package/lib/commonjs/web/tools/LeastSquareSolver.js.map +1 -0
- package/lib/commonjs/web/tools/PointerEventManager.js +27 -0
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerTracker.js +11 -7
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
- package/lib/commonjs/web/tools/VelocityTracker.js +111 -0
- package/lib/commonjs/web/tools/VelocityTracker.js.map +1 -0
- package/lib/commonjs/web_hammer/GestureHandler.js +1 -1
- package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
- package/lib/module/EnableNewWebImplementation.js +22 -0
- package/lib/module/EnableNewWebImplementation.js.map +1 -0
- package/lib/module/GestureHandlerRootViewContext.js +3 -0
- package/lib/module/GestureHandlerRootViewContext.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.macos.js +6 -6
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +6 -6
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.windows.js +6 -6
- package/lib/module/RNGestureHandlerModule.windows.js.map +1 -1
- package/lib/module/components/GestureComponents.web.js +5 -6
- package/lib/module/components/GestureComponents.web.js.map +1 -1
- package/lib/module/components/GestureHandlerButton.js +1 -4
- package/lib/module/components/GestureHandlerButton.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.android.js +14 -0
- package/lib/module/components/GestureHandlerRootView.android.js.map +1 -0
- package/lib/module/{GestureHandlerRootView.js → components/GestureHandlerRootView.js} +5 -2
- package/lib/module/components/GestureHandlerRootView.js.map +1 -0
- package/lib/module/components/GestureHandlerRootView.web.js +9 -0
- package/lib/module/components/GestureHandlerRootView.web.js.map +1 -0
- package/lib/module/components/Swipeable.js +17 -3
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/{gestureHandlerRootHOC.js.map → components/gestureHandlerRootHOC.js.map} +1 -1
- package/lib/module/handlers/createHandler.js +20 -13
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js +5 -4
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +18 -10
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js +19 -16
- package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/module/index.js +4 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils.js +0 -4
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +0 -5
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +3 -0
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/ManualGestureHandler.js +0 -5
- package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -6
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +2 -9
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +0 -5
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +0 -6
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +0 -6
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/tools/CircularBuffer.js +50 -0
- package/lib/module/web/tools/CircularBuffer.js.map +1 -0
- package/lib/module/web/tools/LeastSquareSolver.js +195 -0
- package/lib/module/web/tools/LeastSquareSolver.js.map +1 -0
- package/lib/module/web/tools/PointerEventManager.js +27 -0
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/web/tools/PointerTracker.js +8 -7
- package/lib/module/web/tools/PointerTracker.js.map +1 -1
- package/lib/module/web/tools/VelocityTracker.js +98 -0
- package/lib/module/web/tools/VelocityTracker.js.map +1 -0
- package/lib/module/web_hammer/GestureHandler.js +1 -1
- package/lib/module/web_hammer/GestureHandler.js.map +1 -1
- package/lib/typescript/EnableNewWebImplementation.d.ts +3 -0
- package/lib/typescript/GestureHandlerRootViewContext.d.ts +3 -0
- package/lib/typescript/components/GestureComponents.web.d.ts +1 -1
- package/lib/typescript/components/Swipeable.d.ts +12 -1
- package/lib/typescript/{gestureHandlerRootHOC.d.ts → components/gestureHandlerRootHOC.d.ts} +1 -1
- package/lib/typescript/index.d.ts +4 -4
- package/lib/typescript/utils.d.ts +0 -1
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/TapGestureHandler.d.ts +0 -1
- package/lib/typescript/web/tools/CircularBuffer.d.ts +11 -0
- package/lib/typescript/web/tools/LeastSquareSolver.d.ts +12 -0
- package/lib/typescript/web/tools/PointerEventManager.d.ts +2 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +1 -0
- package/lib/typescript/web/tools/VelocityTracker.d.ts +13 -0
- package/package.json +3 -3
- package/src/EnableNewWebImplementation.ts +35 -0
- package/src/GestureHandlerRootViewContext.ts +3 -0
- package/src/RNGestureHandlerModule.macos.ts +6 -6
- package/src/RNGestureHandlerModule.web.ts +6 -6
- package/src/RNGestureHandlerModule.windows.ts +6 -6
- package/src/components/GestureComponents.web.tsx +5 -6
- package/src/components/GestureHandlerButton.tsx +2 -7
- package/src/components/GestureHandlerRootView.android.tsx +24 -0
- package/src/{GestureHandlerRootView.tsx → components/GestureHandlerRootView.tsx} +7 -2
- package/src/{GestureHandlerRootView.web.tsx → components/GestureHandlerRootView.web.tsx} +6 -1
- package/src/components/Swipeable.tsx +30 -4
- package/src/{gestureHandlerRootHOC.tsx → components/gestureHandlerRootHOC.tsx} +1 -1
- package/src/handlers/createHandler.tsx +20 -9
- package/src/handlers/gestureHandlerCommon.ts +5 -6
- package/src/handlers/gestures/GestureDetector.tsx +19 -9
- package/src/handlers/gestures/reanimatedWrapper.ts +21 -20
- package/src/index.ts +7 -3
- package/src/utils.ts +0 -5
- package/src/web/handlers/FlingGestureHandler.ts +0 -5
- package/src/web/handlers/GestureHandler.ts +3 -0
- package/src/web/handlers/ManualGestureHandler.ts +0 -5
- package/src/web/handlers/NativeViewGestureHandler.ts +0 -6
- package/src/web/handlers/PanGestureHandler.ts +2 -9
- package/src/web/handlers/PinchGestureHandler.ts +0 -5
- package/src/web/handlers/RotationGestureHandler.ts +0 -7
- package/src/web/handlers/TapGestureHandler.ts +0 -6
- package/src/web/tools/CircularBuffer.ts +42 -0
- package/src/web/tools/LeastSquareSolver.ts +182 -0
- package/src/web/tools/PointerEventManager.ts +29 -0
- package/src/web/tools/PointerTracker.ts +7 -7
- package/src/web/tools/VelocityTracker.ts +98 -0
- package/src/web_hammer/GestureHandler.ts +1 -1
- package/lib/commonjs/EnableExperimentalWebImplementation.js +0 -31
- package/lib/commonjs/EnableExperimentalWebImplementation.js.map +0 -1
- package/lib/commonjs/GestureHandlerRootView.android.js.map +0 -1
- package/lib/commonjs/GestureHandlerRootView.js.map +0 -1
- package/lib/commonjs/GestureHandlerRootView.web.js.map +0 -1
- package/lib/module/EnableExperimentalWebImplementation.js +0 -20
- package/lib/module/EnableExperimentalWebImplementation.js.map +0 -1
- package/lib/module/GestureHandlerRootView.android.js +0 -14
- package/lib/module/GestureHandlerRootView.android.js.map +0 -1
- package/lib/module/GestureHandlerRootView.js.map +0 -1
- package/lib/module/GestureHandlerRootView.web.js +0 -6
- package/lib/module/GestureHandlerRootView.web.js.map +0 -1
- package/lib/typescript/EnableExperimentalWebImplementation.d.ts +0 -2
- package/src/EnableExperimentalWebImplementation.ts +0 -27
- package/src/GestureHandlerRootView.android.tsx +0 -24
- /package/lib/commonjs/{gestureHandlerRootHOC.js → components/gestureHandlerRootHOC.js} +0 -0
- /package/lib/commonjs/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js +0 -0
- /package/lib/commonjs/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js.map +0 -0
- /package/lib/commonjs/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js +0 -0
- /package/lib/commonjs/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js.map +0 -0
- /package/lib/module/{gestureHandlerRootHOC.js → components/gestureHandlerRootHOC.js} +0 -0
- /package/lib/module/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js +0 -0
- /package/lib/module/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js.map +0 -0
- /package/lib/module/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js +0 -0
- /package/lib/module/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js.map +0 -0
- /package/lib/typescript/{GestureHandlerRootView.android.d.ts → components/GestureHandlerRootView.android.d.ts} +0 -0
- /package/lib/typescript/{GestureHandlerRootView.d.ts → components/GestureHandlerRootView.d.ts} +0 -0
- /package/lib/typescript/{GestureHandlerRootView.web.d.ts → components/GestureHandlerRootView.web.d.ts} +0 -0
- /package/lib/typescript/{fabric → specs}/RNGestureHandlerButtonNativeComponent.d.ts +0 -0
- /package/lib/typescript/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.d.ts +0 -0
- /package/src/{fabric → specs}/RNGestureHandlerButtonNativeComponent.ts +0 -0
- /package/src/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.ts +0 -0
@@ -9,5 +9,4 @@ export default class ManualGestureHandler extends GestureHandler {
|
|
9
9
|
protected onPointerOutOfBounds(event: AdaptedEvent): void;
|
10
10
|
protected onPointerUp(event: AdaptedEvent): void;
|
11
11
|
protected onPointerRemove(event: AdaptedEvent): void;
|
12
|
-
protected onPointerCancel(event: AdaptedEvent): void;
|
13
12
|
}
|
@@ -18,7 +18,6 @@ export default class NativeViewGestureHandler extends GestureHandler {
|
|
18
18
|
protected onPointerUp(event: AdaptedEvent): void;
|
19
19
|
protected onPointerRemove(event: AdaptedEvent): void;
|
20
20
|
private onUp;
|
21
|
-
protected onPointerCancel(event: AdaptedEvent): void;
|
22
21
|
shouldRecognizeSimultaneously(handler: GestureHandler): boolean;
|
23
22
|
shouldBeCancelledByOther(_handler: GestureHandler): boolean;
|
24
23
|
disallowsInterruption(): boolean;
|
@@ -47,7 +47,6 @@ export default class PanGestureHandler extends GestureHandler {
|
|
47
47
|
protected onPointerUp(event: AdaptedEvent): void;
|
48
48
|
protected onPointerRemove(event: AdaptedEvent): void;
|
49
49
|
protected onPointerMove(event: AdaptedEvent): void;
|
50
|
-
protected onPointerCancel(event: AdaptedEvent): void;
|
51
50
|
protected onPointerOutOfBounds(event: AdaptedEvent): void;
|
52
51
|
private shouldActivate;
|
53
52
|
private shouldFail;
|
@@ -21,7 +21,6 @@ export default class PinchGestureHandler extends GestureHandler {
|
|
21
21
|
protected onPointerRemove(event: AdaptedEvent): void;
|
22
22
|
protected onPointerMove(event: AdaptedEvent): void;
|
23
23
|
protected onPointerOutOfBounds(event: AdaptedEvent): void;
|
24
|
-
protected onPointerCancel(event: AdaptedEvent): void;
|
25
24
|
private tryBegin;
|
26
25
|
activate(force?: boolean): void;
|
27
26
|
protected onReset(): void;
|
@@ -23,7 +23,6 @@ export default class RotationGestureHandler extends GestureHandler {
|
|
23
23
|
protected onPointerOutOfBounds(event: AdaptedEvent): void;
|
24
24
|
protected onPointerUp(event: AdaptedEvent): void;
|
25
25
|
protected onPointerRemove(event: AdaptedEvent): void;
|
26
|
-
protected onPointerCancel(event: AdaptedEvent): void;
|
27
26
|
protected tryBegin(): void;
|
28
27
|
activate(_force?: boolean): void;
|
29
28
|
protected onReset(): void;
|
@@ -36,7 +36,6 @@ export default class TapGestureHandler extends GestureHandler {
|
|
36
36
|
protected onPointerRemove(event: AdaptedEvent): void;
|
37
37
|
protected onPointerMove(event: AdaptedEvent): void;
|
38
38
|
protected onPointerOutOfBounds(event: AdaptedEvent): void;
|
39
|
-
protected onPointerCancel(event: AdaptedEvent): void;
|
40
39
|
private updateState;
|
41
40
|
private trySettingPosition;
|
42
41
|
private shouldFail;
|
@@ -0,0 +1,12 @@
|
|
1
|
+
declare class PolynomialFit {
|
2
|
+
coefficients: number[];
|
3
|
+
constructor(degree: number);
|
4
|
+
}
|
5
|
+
export default class LeastSquareSolver {
|
6
|
+
private x;
|
7
|
+
private y;
|
8
|
+
private w;
|
9
|
+
constructor(x: number[], y: number[], w: number[]);
|
10
|
+
solve(degree: number): PolynomialFit | null;
|
11
|
+
}
|
12
|
+
export {};
|
@@ -1,6 +1,8 @@
|
|
1
1
|
import { AdaptedEvent, EventTypes } from '../interfaces';
|
2
2
|
import EventManager from './EventManager';
|
3
3
|
export default class PointerEventManager extends EventManager {
|
4
|
+
private trackedPointers;
|
4
5
|
setListeners(): void;
|
5
6
|
protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent;
|
7
|
+
resetManager(): void;
|
6
8
|
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { AdaptedEvent } from '../interfaces';
|
2
|
+
export default class VelocityTracker {
|
3
|
+
private assumePointerMoveStoppedMilliseconds;
|
4
|
+
private historySize;
|
5
|
+
private horizonMilliseconds;
|
6
|
+
private minSampleSize;
|
7
|
+
private samples;
|
8
|
+
constructor();
|
9
|
+
add(event: AdaptedEvent): void;
|
10
|
+
private getVelocityEstimate;
|
11
|
+
getVelocity(): [number, number];
|
12
|
+
reset(): void;
|
13
|
+
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "react-native-gesture-handler",
|
3
|
-
"version": "2.
|
3
|
+
"version": "2.10.0",
|
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",
|
@@ -142,11 +142,11 @@
|
|
142
142
|
"eslintIgnore": [
|
143
143
|
"node_modules/",
|
144
144
|
"lib/",
|
145
|
-
"src/
|
145
|
+
"src/specs/*NativeComponent.js"
|
146
146
|
],
|
147
147
|
"codegenConfig": {
|
148
148
|
"name": "rngesturehandler_codegen",
|
149
149
|
"type": "components",
|
150
|
-
"jsSrcsDir": "./src/
|
150
|
+
"jsSrcsDir": "./src/specs"
|
151
151
|
}
|
152
152
|
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import { Platform } from 'react-native';
|
2
|
+
|
3
|
+
let useNewWebImplementation = true;
|
4
|
+
let getWasCalled = false;
|
5
|
+
|
6
|
+
export function enableExperimentalWebImplementation(
|
7
|
+
_shouldEnable = true
|
8
|
+
): void {
|
9
|
+
// NO-OP since the new implementation is now the default
|
10
|
+
}
|
11
|
+
|
12
|
+
export function enableLegacyWebImplementation(
|
13
|
+
shouldUseLegacyImplementation = true
|
14
|
+
): void {
|
15
|
+
if (
|
16
|
+
Platform.OS !== 'web' ||
|
17
|
+
useNewWebImplementation === !shouldUseLegacyImplementation
|
18
|
+
) {
|
19
|
+
return;
|
20
|
+
}
|
21
|
+
|
22
|
+
if (getWasCalled) {
|
23
|
+
console.error(
|
24
|
+
'Some parts of this application have already started using the new gesture handler implementation. No changes will be applied. You can try enabling legacy implementation earlier.'
|
25
|
+
);
|
26
|
+
return;
|
27
|
+
}
|
28
|
+
|
29
|
+
useNewWebImplementation = !shouldUseLegacyImplementation;
|
30
|
+
}
|
31
|
+
|
32
|
+
export function isNewWebImplementationEnabled(): boolean {
|
33
|
+
getWasCalled = true;
|
34
|
+
return useNewWebImplementation;
|
35
|
+
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { ActionType } from './ActionType';
|
2
|
-
import {
|
2
|
+
import { isNewWebImplementationEnabled } from './EnableNewWebImplementation';
|
3
3
|
|
4
4
|
//GestureHandlers
|
5
5
|
import InteractionManager from './web/tools/InteractionManager';
|
@@ -57,7 +57,7 @@ export default {
|
|
57
57
|
handlerTag: number,
|
58
58
|
config: T
|
59
59
|
) {
|
60
|
-
if (
|
60
|
+
if (isNewWebImplementationEnabled()) {
|
61
61
|
if (!(handlerName in Gestures)) {
|
62
62
|
throw new Error(
|
63
63
|
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
@@ -92,14 +92,14 @@ export default {
|
|
92
92
|
_actionType: ActionType,
|
93
93
|
propsRef: React.RefObject<unknown>
|
94
94
|
) {
|
95
|
-
if (
|
95
|
+
if (isNewWebImplementationEnabled()) {
|
96
96
|
NodeManager.getHandler(handlerTag).init(newView, propsRef);
|
97
97
|
} else {
|
98
98
|
HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
|
99
99
|
}
|
100
100
|
},
|
101
101
|
updateGestureHandler(handlerTag: number, newConfig: Config) {
|
102
|
-
if (
|
102
|
+
if (isNewWebImplementationEnabled()) {
|
103
103
|
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
104
104
|
|
105
105
|
InteractionManager.getInstance().configureInteractions(
|
@@ -111,14 +111,14 @@ export default {
|
|
111
111
|
}
|
112
112
|
},
|
113
113
|
getGestureHandlerNode(handlerTag: number) {
|
114
|
-
if (
|
114
|
+
if (isNewWebImplementationEnabled()) {
|
115
115
|
return NodeManager.getHandler(handlerTag);
|
116
116
|
} else {
|
117
117
|
return HammerNodeManager.getHandler(handlerTag);
|
118
118
|
}
|
119
119
|
},
|
120
120
|
dropGestureHandler(handlerTag: number) {
|
121
|
-
if (
|
121
|
+
if (isNewWebImplementationEnabled()) {
|
122
122
|
NodeManager.dropGestureHandler(handlerTag);
|
123
123
|
} else {
|
124
124
|
HammerNodeManager.dropGestureHandler(handlerTag);
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
|
3
3
|
import { ActionType } from './ActionType';
|
4
|
-
import {
|
4
|
+
import { isNewWebImplementationEnabled } from './EnableNewWebImplementation';
|
5
5
|
|
6
6
|
//GestureHandlers
|
7
7
|
import InteractionManager from './web/tools/InteractionManager';
|
@@ -59,7 +59,7 @@ export default {
|
|
59
59
|
handlerTag: number,
|
60
60
|
config: T
|
61
61
|
) {
|
62
|
-
if (
|
62
|
+
if (isNewWebImplementationEnabled()) {
|
63
63
|
if (!(handlerName in Gestures)) {
|
64
64
|
throw new Error(
|
65
65
|
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
@@ -101,7 +101,7 @@ export default {
|
|
101
101
|
return;
|
102
102
|
}
|
103
103
|
|
104
|
-
if (
|
104
|
+
if (isNewWebImplementationEnabled()) {
|
105
105
|
//@ts-ignore Types should be HTMLElement or React.Component
|
106
106
|
NodeManager.getHandler(handlerTag).init(newView, propsRef);
|
107
107
|
} else {
|
@@ -110,7 +110,7 @@ export default {
|
|
110
110
|
}
|
111
111
|
},
|
112
112
|
updateGestureHandler(handlerTag: number, newConfig: Config) {
|
113
|
-
if (
|
113
|
+
if (isNewWebImplementationEnabled()) {
|
114
114
|
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
115
115
|
|
116
116
|
InteractionManager.getInstance().configureInteractions(
|
@@ -122,14 +122,14 @@ export default {
|
|
122
122
|
}
|
123
123
|
},
|
124
124
|
getGestureHandlerNode(handlerTag: number) {
|
125
|
-
if (
|
125
|
+
if (isNewWebImplementationEnabled()) {
|
126
126
|
return NodeManager.getHandler(handlerTag);
|
127
127
|
} else {
|
128
128
|
return HammerNodeManager.getHandler(handlerTag);
|
129
129
|
}
|
130
130
|
},
|
131
131
|
dropGestureHandler(handlerTag: number) {
|
132
|
-
if (
|
132
|
+
if (isNewWebImplementationEnabled()) {
|
133
133
|
NodeManager.dropGestureHandler(handlerTag);
|
134
134
|
} else {
|
135
135
|
HammerNodeManager.dropGestureHandler(handlerTag);
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
|
3
3
|
import { ActionType } from './ActionType';
|
4
|
-
import {
|
4
|
+
import { isNewWebImplementationEnabled } from './EnableNewWebImplementation';
|
5
5
|
|
6
6
|
//GestureHandlers
|
7
7
|
import InteractionManager from './web/tools/InteractionManager';
|
@@ -59,7 +59,7 @@ export default {
|
|
59
59
|
handlerTag: number,
|
60
60
|
config: T
|
61
61
|
) {
|
62
|
-
if (
|
62
|
+
if (isNewWebImplementationEnabled()) {
|
63
63
|
if (!(handlerName in Gestures)) {
|
64
64
|
throw new Error(
|
65
65
|
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
@@ -101,7 +101,7 @@ export default {
|
|
101
101
|
return;
|
102
102
|
}
|
103
103
|
|
104
|
-
if (
|
104
|
+
if (isNewWebImplementationEnabled()) {
|
105
105
|
//@ts-ignore Types should be HTMLElement or React.Component
|
106
106
|
NodeManager.getHandler(handlerTag).init(newView, propsRef);
|
107
107
|
} else {
|
@@ -110,7 +110,7 @@ export default {
|
|
110
110
|
}
|
111
111
|
},
|
112
112
|
updateGestureHandler(handlerTag: number, newConfig: Config) {
|
113
|
-
if (
|
113
|
+
if (isNewWebImplementationEnabled()) {
|
114
114
|
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
115
115
|
|
116
116
|
InteractionManager.getInstance().configureInteractions(
|
@@ -122,14 +122,14 @@ export default {
|
|
122
122
|
}
|
123
123
|
},
|
124
124
|
getGestureHandlerNode(handlerTag: number) {
|
125
|
-
if (
|
125
|
+
if (isNewWebImplementationEnabled()) {
|
126
126
|
return NodeManager.getHandler(handlerTag);
|
127
127
|
} else {
|
128
128
|
return HammerNodeManager.getHandler(handlerTag);
|
129
129
|
}
|
130
130
|
},
|
131
131
|
dropGestureHandler(handlerTag: number) {
|
132
|
-
if (
|
132
|
+
if (isNewWebImplementationEnabled()) {
|
133
133
|
NodeManager.dropGestureHandler(handlerTag);
|
134
134
|
} else {
|
135
135
|
HammerNodeManager.dropGestureHandler(handlerTag);
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import * as React from 'react';
|
2
2
|
import {
|
3
|
-
DrawerLayoutAndroid as RNDrawerLayoutAndroid,
|
4
3
|
FlatList as RNFlatList,
|
5
4
|
Switch as RNSwitch,
|
6
5
|
TextInput as RNTextInput,
|
@@ -21,11 +20,11 @@ export const Switch = createNativeWrapper(RNSwitch, {
|
|
21
20
|
disallowInterruption: true,
|
22
21
|
});
|
23
22
|
export const TextInput = createNativeWrapper(RNTextInput);
|
24
|
-
export const DrawerLayoutAndroid =
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
export const DrawerLayoutAndroid = () => {
|
24
|
+
console.warn('DrawerLayoutAndroid is not supported on web!');
|
25
|
+
return <View />;
|
26
|
+
};
|
27
|
+
|
29
28
|
// RefreshControl is implemented as a functional component, rendering a View
|
30
29
|
// NativeViewGestureHandler needs to set a ref on its child, which cannot be done
|
31
30
|
// on functional components
|
@@ -1,10 +1,5 @@
|
|
1
|
-
|
2
|
-
import { HostComponent, requireNativeComponent } from 'react-native';
|
1
|
+
import { HostComponent } from 'react-native';
|
3
2
|
import { RawButtonProps } from './GestureButtons';
|
4
|
-
import
|
5
|
-
|
6
|
-
const RNGestureHandlerButtonNativeComponent = shouldUseCodegenNativeComponent()
|
7
|
-
? require('../fabric/RNGestureHandlerButtonNativeComponent').default
|
8
|
-
: requireNativeComponent('RNGestureHandlerButton');
|
3
|
+
import RNGestureHandlerButtonNativeComponent from '../specs/RNGestureHandlerButtonNativeComponent';
|
9
4
|
|
10
5
|
export default RNGestureHandlerButtonNativeComponent as HostComponent<RawButtonProps>;
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import * as React from 'react';
|
2
|
+
import { PropsWithChildren } from 'react';
|
3
|
+
import { ViewProps } from 'react-native';
|
4
|
+
import { maybeInitializeFabric } from '../init';
|
5
|
+
import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
|
6
|
+
import GestureHandlerRootViewNativeComponent from '../specs/RNGestureHandlerRootViewNativeComponent';
|
7
|
+
|
8
|
+
export interface GestureHandlerRootViewProps
|
9
|
+
extends PropsWithChildren<ViewProps> {}
|
10
|
+
|
11
|
+
export default function GestureHandlerRootView(
|
12
|
+
props: GestureHandlerRootViewProps
|
13
|
+
) {
|
14
|
+
// try initialize fabric on the first render, at this point we can
|
15
|
+
// reliably check if fabric is enabled (the function contains a flag
|
16
|
+
// to make sure it's called only once)
|
17
|
+
maybeInitializeFabric();
|
18
|
+
|
19
|
+
return (
|
20
|
+
<GestureHandlerRootViewContext.Provider value>
|
21
|
+
<GestureHandlerRootViewNativeComponent {...props} />
|
22
|
+
</GestureHandlerRootViewContext.Provider>
|
23
|
+
);
|
24
|
+
}
|
@@ -1,7 +1,8 @@
|
|
1
1
|
import * as React from 'react';
|
2
2
|
import { PropsWithChildren } from 'react';
|
3
3
|
import { View, ViewProps } from 'react-native';
|
4
|
-
import { maybeInitializeFabric } from '
|
4
|
+
import { maybeInitializeFabric } from '../init';
|
5
|
+
import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
|
5
6
|
|
6
7
|
export interface GestureHandlerRootViewProps
|
7
8
|
extends PropsWithChildren<ViewProps> {}
|
@@ -14,5 +15,9 @@ export default function GestureHandlerRootView(
|
|
14
15
|
// to make sure it's called only once)
|
15
16
|
maybeInitializeFabric();
|
16
17
|
|
17
|
-
return
|
18
|
+
return (
|
19
|
+
<GestureHandlerRootViewContext.Provider value>
|
20
|
+
<View {...props} />
|
21
|
+
</GestureHandlerRootViewContext.Provider>
|
22
|
+
);
|
18
23
|
}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import * as React from 'react';
|
2
2
|
import { PropsWithChildren } from 'react';
|
3
3
|
import { View, ViewProps } from 'react-native';
|
4
|
+
import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
|
4
5
|
|
5
6
|
export interface GestureHandlerRootViewProps
|
6
7
|
extends PropsWithChildren<ViewProps> {}
|
@@ -8,5 +9,9 @@ export interface GestureHandlerRootViewProps
|
|
8
9
|
export default function GestureHandlerRootView(
|
9
10
|
props: GestureHandlerRootViewProps
|
10
11
|
) {
|
11
|
-
return
|
12
|
+
return (
|
13
|
+
<GestureHandlerRootViewContext.Provider value>
|
14
|
+
<View {...props} />
|
15
|
+
</GestureHandlerRootViewContext.Provider>
|
16
|
+
);
|
12
17
|
}
|
@@ -73,6 +73,18 @@ export interface SwipeableProps
|
|
73
73
|
*/
|
74
74
|
rightThreshold?: number;
|
75
75
|
|
76
|
+
/**
|
77
|
+
* Distance that the panel must be dragged from the left edge to be considered
|
78
|
+
* a swipe. The default value is 10.
|
79
|
+
*/
|
80
|
+
dragOffsetFromLeftEdge?: number;
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Distance that the panel must be dragged from the right edge to be considered
|
84
|
+
* a swipe. The default value is 10.
|
85
|
+
*/
|
86
|
+
dragOffsetFromRightEdge?: number;
|
87
|
+
|
76
88
|
/**
|
77
89
|
* Value indicating if the swipeable panel can be pulled further than the left
|
78
90
|
* actions panel's width. It is set to true by default as long as the left
|
@@ -156,7 +168,8 @@ export interface SwipeableProps
|
|
156
168
|
* */
|
157
169
|
renderLeftActions?: (
|
158
170
|
progressAnimatedValue: AnimatedInterpolation,
|
159
|
-
dragAnimatedValue: AnimatedInterpolation
|
171
|
+
dragAnimatedValue: AnimatedInterpolation,
|
172
|
+
swipeable: Swipeable
|
160
173
|
) => React.ReactNode;
|
161
174
|
/**
|
162
175
|
*
|
@@ -442,9 +455,22 @@ export default class Swipeable extends Component<
|
|
442
455
|
this.animateRow(this.currentOffset(), -rightWidth);
|
443
456
|
};
|
444
457
|
|
458
|
+
reset = () => {
|
459
|
+
const { dragX, rowTranslation } = this.state;
|
460
|
+
dragX.setValue(0);
|
461
|
+
rowTranslation.setValue(0);
|
462
|
+
this.setState({ rowState: 0 });
|
463
|
+
};
|
464
|
+
|
445
465
|
render() {
|
446
466
|
const { rowState } = this.state;
|
447
|
-
const {
|
467
|
+
const {
|
468
|
+
children,
|
469
|
+
renderLeftActions,
|
470
|
+
renderRightActions,
|
471
|
+
dragOffsetFromLeftEdge = 10,
|
472
|
+
dragOffsetFromRightEdge = 10,
|
473
|
+
} = this.props;
|
448
474
|
|
449
475
|
const left = renderLeftActions && (
|
450
476
|
<Animated.View
|
@@ -455,7 +481,7 @@ export default class Swipeable extends Component<
|
|
455
481
|
// it for some reason
|
456
482
|
{ transform: [{ translateX: this.leftActionTranslate! }] },
|
457
483
|
]}>
|
458
|
-
{renderLeftActions(this.showLeftAction!, this.transX
|
484
|
+
{renderLeftActions(this.showLeftAction!, this.transX!, this)}
|
459
485
|
<View
|
460
486
|
onLayout={({ nativeEvent }) =>
|
461
487
|
this.setState({ leftWidth: nativeEvent.layout.x })
|
@@ -481,7 +507,7 @@ export default class Swipeable extends Component<
|
|
481
507
|
|
482
508
|
return (
|
483
509
|
<PanGestureHandler
|
484
|
-
activeOffsetX={[-
|
510
|
+
activeOffsetX={[-dragOffsetFromRightEdge, dragOffsetFromLeftEdge]}
|
485
511
|
{...this.props}
|
486
512
|
onGestureEvent={this.onGestureEvent}
|
487
513
|
onHandlerStateChange={this.onHandlerStateChange}>
|
@@ -4,7 +4,7 @@ import hoistNonReactStatics from 'hoist-non-react-statics';
|
|
4
4
|
import GestureHandlerRootView from './GestureHandlerRootView';
|
5
5
|
|
6
6
|
export default function gestureHandlerRootHOC<
|
7
|
-
P extends
|
7
|
+
P extends Record<string, unknown>
|
8
8
|
>(
|
9
9
|
Component: React.ComponentType<P>,
|
10
10
|
containerStyles?: StyleProp<ViewStyle>
|
@@ -28,6 +28,7 @@ import { ValueOf } from '../typeUtils';
|
|
28
28
|
import { isFabric, isJestEnv, tagMessage } from '../utils';
|
29
29
|
import { ActionType } from '../ActionType';
|
30
30
|
import { PressabilityDebugView } from './PressabilityDebugView';
|
31
|
+
import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
|
31
32
|
|
32
33
|
const UIManagerAny = UIManager as any;
|
33
34
|
|
@@ -168,13 +169,14 @@ export default function createHandler<
|
|
168
169
|
HandlerState
|
169
170
|
> {
|
170
171
|
static displayName = name;
|
172
|
+
static contextType = GestureHandlerRootViewContext;
|
171
173
|
|
172
174
|
private handlerTag: number;
|
173
175
|
private config: Record<string, unknown>;
|
174
176
|
private propsRef: React.MutableRefObject<unknown>;
|
177
|
+
private isMountedRef: React.MutableRefObject<boolean | null>;
|
175
178
|
private viewNode: any;
|
176
179
|
private viewTag?: number;
|
177
|
-
private updateEnqueued: ReturnType<typeof setImmediate> | null = null;
|
178
180
|
private inspectorToggleListener?: EmitterSubscription;
|
179
181
|
|
180
182
|
constructor(props: T & InternalEventHandlers) {
|
@@ -182,6 +184,7 @@ export default function createHandler<
|
|
182
184
|
this.handlerTag = getNextHandlerTag();
|
183
185
|
this.config = {};
|
184
186
|
this.propsRef = React.createRef();
|
187
|
+
this.isMountedRef = React.createRef();
|
185
188
|
this.state = { allowTouches };
|
186
189
|
if (props.id) {
|
187
190
|
if (handlerIDToTag[props.id] !== undefined) {
|
@@ -193,6 +196,7 @@ export default function createHandler<
|
|
193
196
|
|
194
197
|
componentDidMount() {
|
195
198
|
const props: HandlerProps<U> = this.props;
|
199
|
+
this.isMountedRef.current = true;
|
196
200
|
|
197
201
|
if (DEV_ON_ANDROID) {
|
198
202
|
this.inspectorToggleListener = DeviceEventEmitter.addListener(
|
@@ -207,11 +211,10 @@ export default function createHandler<
|
|
207
211
|
// If there are unresolved refs (e.g. ".current" has not yet been set)
|
208
212
|
// passed as `simultaneousHandlers` or `waitFor`, we enqueue a call to
|
209
213
|
// _update method that will try to update native handler props using
|
210
|
-
//
|
214
|
+
// queueMicrotask. This makes it so update() function gets called after all
|
211
215
|
// react components are mounted and we expect the missing ref object to
|
212
216
|
// be resolved by then.
|
213
|
-
|
214
|
-
this.updateEnqueued = null;
|
217
|
+
queueMicrotask(() => {
|
215
218
|
this.update(UNRESOLVED_REFS_RETRY_LIMIT);
|
216
219
|
});
|
217
220
|
}
|
@@ -237,11 +240,9 @@ export default function createHandler<
|
|
237
240
|
|
238
241
|
componentWillUnmount() {
|
239
242
|
this.inspectorToggleListener?.remove();
|
243
|
+
this.isMountedRef.current = false;
|
240
244
|
RNGestureHandlerModule.dropGestureHandler(this.handlerTag);
|
241
245
|
scheduleFlushOperations();
|
242
|
-
if (this.updateEnqueued) {
|
243
|
-
clearImmediate(this.updateEnqueued);
|
244
|
-
}
|
245
246
|
// We can't use this.props.id directly due to TS generic type narrowing bug, see https://github.com/microsoft/TypeScript/issues/13995 for more context
|
246
247
|
const handlerID: string | undefined = this.props.id;
|
247
248
|
if (handlerID) {
|
@@ -365,14 +366,17 @@ export default function createHandler<
|
|
365
366
|
};
|
366
367
|
|
367
368
|
private update(remainingTries: number) {
|
369
|
+
if (!this.isMountedRef.current) {
|
370
|
+
return;
|
371
|
+
}
|
372
|
+
|
368
373
|
const props: HandlerProps<U> = this.props;
|
369
374
|
|
370
375
|
// When ref is set via a function i.e. `ref={(r) => refObject.current = r}` instead of
|
371
376
|
// `ref={refObject}` it's possible that it won't be resolved in time. Seems like trying
|
372
377
|
// again is easy enough fix.
|
373
378
|
if (hasUnresolvedRefs(props) && remainingTries > 0) {
|
374
|
-
|
375
|
-
this.updateEnqueued = null;
|
379
|
+
queueMicrotask(() => {
|
376
380
|
this.update(remainingTries - 1);
|
377
381
|
});
|
378
382
|
} else {
|
@@ -398,6 +402,13 @@ export default function createHandler<
|
|
398
402
|
}
|
399
403
|
|
400
404
|
render() {
|
405
|
+
if (__DEV__ && !this.context) {
|
406
|
+
throw new Error(
|
407
|
+
name +
|
408
|
+
' must be used as a descendant of GestureHandlerRootView. Otherwise the gestures will not be recognized. See https://docs.swmansion.com/react-native-gesture-handler/docs/installation for more details.'
|
409
|
+
);
|
410
|
+
}
|
411
|
+
|
401
412
|
let gestureEventHandler = this.onGestureHandlerEvent;
|
402
413
|
// Another instance of https://github.com/microsoft/TypeScript/issues/13995
|
403
414
|
type OnGestureEventHandlers = {
|
@@ -191,16 +191,15 @@ export function findNodeHandle(
|
|
191
191
|
return findNodeHandleRN(node);
|
192
192
|
}
|
193
193
|
|
194
|
-
let
|
195
|
-
typeof requestAnimationFrame
|
196
|
-
> | null = null;
|
194
|
+
let flushOperationsScheduled = false;
|
197
195
|
|
198
196
|
export function scheduleFlushOperations() {
|
199
|
-
if (
|
200
|
-
|
197
|
+
if (!flushOperationsScheduled) {
|
198
|
+
flushOperationsScheduled = true;
|
199
|
+
queueMicrotask(() => {
|
201
200
|
RNGestureHandlerModule.flushOperations();
|
202
201
|
|
203
|
-
|
202
|
+
flushOperationsScheduled = false;
|
204
203
|
});
|
205
204
|
}
|
206
205
|
}
|