react-native-gesture-handler 2.5.0 → 2.6.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 +17 -5
- package/android/build.gradle +71 -15
- package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +2 -1
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +30 -9
- package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +5 -2
- package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +2 -1
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +2 -1
- package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +3 -2
- package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +0 -8
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +7 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +1 -1
- package/android/src/main/jni/CMakeLists.txt +59 -0
- package/ios/RNGestureHandlerButtonComponentView.mm +1 -1
- package/ios/RNGestureHandlerManager.mm +0 -5
- package/ios/RNGestureHandlerRootViewComponentView.mm +1 -1
- package/lib/commonjs/EnableExperimentalWebImplementation.js +24 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -0
- package/lib/commonjs/RNGestureHandlerModule.macos.js +87 -30
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +87 -25
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/RNRenderer.js +16 -0
- package/lib/commonjs/RNRenderer.js.map +1 -0
- package/lib/commonjs/RNRenderer.web.js +11 -0
- package/lib/commonjs/RNRenderer.web.js.map +1 -0
- package/lib/commonjs/components/DrawerLayout.js +3 -1
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureButtons.js +42 -9
- package/lib/commonjs/components/GestureButtons.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.js +41 -4
- package/lib/commonjs/components/GestureComponents.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.web.js +7 -2
- package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js +3 -1
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js +2 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +8 -1
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +67 -12
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +7 -0
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/commonjs/index.js +14 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/web/constants.js +3 -51
- package/lib/commonjs/web/constants.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js +169 -0
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -0
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js +167 -0
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -0
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +154 -0
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/GestureHandler.js +538 -0
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +147 -0
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +116 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/PanGestureHandler.js +451 -0
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +171 -0
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +187 -0
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/TapGestureHandler.js +296 -0
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -0
- package/lib/commonjs/web/interfaces.js +34 -0
- package/lib/commonjs/web/interfaces.js.map +1 -0
- package/lib/commonjs/web/tools/EventManager.js +169 -0
- package/lib/commonjs/web/tools/EventManager.js.map +1 -0
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +283 -0
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -0
- package/lib/commonjs/web/tools/InteractionManager.js +102 -0
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -0
- package/lib/commonjs/web/tools/NodeManager.js +48 -0
- package/lib/commonjs/web/tools/NodeManager.js.map +1 -0
- package/lib/commonjs/web/tools/PointerTracker.js +132 -0
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/Errors.js +0 -0
- package/lib/commonjs/{web → web_hammer}/Errors.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/GestureHandler.js +83 -42
- package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
- package/lib/commonjs/web_hammer/NativeViewGestureHandler.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/NodeManager.js +0 -0
- package/lib/commonjs/web_hammer/NodeManager.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js.map +0 -0
- package/lib/commonjs/web_hammer/constants.js +64 -0
- package/lib/commonjs/web_hammer/constants.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/utils.js +0 -0
- package/lib/commonjs/{web → web_hammer}/utils.js.map +0 -0
- package/lib/module/EnableExperimentalWebImplementation.js +15 -0
- package/lib/module/EnableExperimentalWebImplementation.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.macos.js +74 -29
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +73 -24
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/RNRenderer.js +4 -0
- package/lib/module/RNRenderer.js.map +1 -0
- package/lib/module/RNRenderer.web.js +4 -0
- package/lib/module/RNRenderer.web.js.map +1 -0
- package/lib/module/components/DrawerLayout.js +3 -1
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureButtons.js +43 -9
- package/lib/module/components/GestureButtons.js.map +1 -1
- package/lib/module/components/GestureComponents.js +39 -4
- package/lib/module/components/GestureComponents.js.map +1 -1
- package/lib/module/components/GestureComponents.web.js +6 -2
- package/lib/module/components/GestureComponents.web.js.map +1 -1
- package/lib/module/components/Swipeable.js +3 -1
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/GenericTouchable.js +2 -1
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/handlers/createHandler.js +9 -2
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +64 -11
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js +7 -0
- package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/web/constants.js +1 -36
- package/lib/module/web/constants.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js +159 -0
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -0
- package/lib/module/web/detectors/ScaleGestureDetector.js +156 -0
- package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -0
- package/lib/module/web/handlers/FlingGestureHandler.js +139 -0
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/GestureHandler.js +521 -0
- package/lib/module/web/handlers/GestureHandler.js.map +1 -0
- package/lib/module/web/handlers/LongPressGestureHandler.js +133 -0
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js +103 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/PanGestureHandler.js +434 -0
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/PinchGestureHandler.js +155 -0
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/RotationGestureHandler.js +171 -0
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/TapGestureHandler.js +281 -0
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -0
- package/lib/module/web/interfaces.js +26 -0
- package/lib/module/web/interfaces.js.map +1 -0
- package/lib/module/web/tools/EventManager.js +160 -0
- package/lib/module/web/tools/EventManager.js.map +1 -0
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +270 -0
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -0
- package/lib/module/web/tools/InteractionManager.js +93 -0
- package/lib/module/web/tools/InteractionManager.js.map +1 -0
- package/lib/module/web/tools/NodeManager.js +39 -0
- package/lib/module/web/tools/NodeManager.js.map +1 -0
- package/lib/module/web/tools/PointerTracker.js +122 -0
- package/lib/module/web/tools/PointerTracker.js.map +1 -0
- package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/DraggingGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/Errors.js +0 -0
- package/lib/module/{web → web_hammer}/Errors.js.map +0 -0
- package/lib/module/{web → web_hammer}/FlingGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/GestureHandler.js +83 -42
- package/lib/module/web_hammer/GestureHandler.js.map +1 -0
- package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/LongPressGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
- package/lib/module/web_hammer/NativeViewGestureHandler.js.map +1 -0
- package/lib/module/{web → web_hammer}/NodeManager.js +0 -0
- package/lib/module/web_hammer/NodeManager.js.map +1 -0
- package/lib/module/{web → web_hammer}/PanGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/PanGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/PinchGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/PressGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/PressGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/RotationGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/TapGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/TapGestureHandler.js.map +0 -0
- package/lib/module/web_hammer/constants.js +43 -0
- package/lib/module/web_hammer/constants.js.map +1 -0
- package/lib/module/{web → web_hammer}/utils.js +0 -0
- package/lib/module/{web → web_hammer}/utils.js.map +0 -0
- package/lib/typescript/EnableExperimentalWebImplementation.d.ts +2 -0
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +28 -18
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +29 -18
- package/lib/typescript/RNRenderer.d.ts +1 -0
- package/lib/typescript/RNRenderer.web.d.ts +3 -0
- package/lib/typescript/components/DrawerLayout.d.ts +1 -1
- package/lib/typescript/components/GestureButtons.d.ts +16 -0
- package/lib/typescript/components/GestureComponents.d.ts +7 -3
- package/lib/typescript/components/GestureComponents.web.d.ts +1 -0
- package/lib/typescript/components/Swipeable.d.ts +1 -1
- package/lib/typescript/index.d.ts +2 -1
- package/lib/typescript/web/constants.d.ts +1 -33
- package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +30 -0
- package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +30 -0
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +31 -0
- package/lib/typescript/web/handlers/GestureHandler.d.ts +84 -0
- package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +33 -0
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +16 -0
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +68 -0
- package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +30 -0
- package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +30 -0
- package/lib/typescript/web/handlers/TapGestureHandler.d.ts +49 -0
- package/lib/typescript/web/interfaces.d.ts +97 -0
- package/lib/typescript/web/tools/EventManager.d.ts +28 -0
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +28 -0
- package/lib/typescript/web/tools/InteractionManager.d.ts +13 -0
- package/lib/typescript/web/tools/NodeManager.d.ts +11 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +28 -0
- package/lib/typescript/{web → web_hammer}/DiscreteGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/DraggingGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/Errors.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/FlingGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/GestureHandler.d.ts +6 -0
- package/lib/typescript/{web → web_hammer}/IndiscreteGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/LongPressGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/NodeManager.d.ts +8 -0
- package/lib/typescript/{web → web_hammer}/PanGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/PinchGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/PressGestureHandler.d.ts +2 -0
- package/lib/typescript/{web → web_hammer}/RotationGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/TapGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/constants.d.ts +39 -0
- package/lib/typescript/{web → web_hammer}/utils.d.ts +0 -0
- package/package.json +1 -1
- package/src/EnableExperimentalWebImplementation.ts +18 -0
- package/src/RNGestureHandlerModule.macos.ts +81 -29
- package/src/RNGestureHandlerModule.web.ts +89 -26
- package/src/RNRenderer.ts +3 -0
- package/src/RNRenderer.web.ts +3 -0
- package/src/components/DrawerLayout.tsx +3 -4
- package/src/components/GestureButtons.tsx +57 -0
- package/src/components/GestureComponents.tsx +66 -6
- package/src/components/GestureComponents.web.tsx +5 -0
- package/src/components/Swipeable.tsx +3 -1
- package/src/components/touchables/GenericTouchable.tsx +1 -0
- package/src/handlers/createHandler.tsx +13 -2
- package/src/handlers/gestures/GestureDetector.tsx +78 -12
- package/src/handlers/gestures/reanimatedWrapper.ts +7 -0
- package/src/index.ts +3 -0
- package/src/web/constants.ts +1 -41
- package/src/web/detectors/RotationGestureDetector.ts +199 -0
- package/src/web/detectors/ScaleGestureDetector.ts +208 -0
- package/src/web/handlers/FlingGestureHandler.ts +146 -0
- package/src/web/handlers/GestureHandler.ts +572 -0
- package/src/web/handlers/LongPressGestureHandler.ts +122 -0
- package/src/web/handlers/NativeViewGestureHandler.ts +109 -0
- package/src/web/handlers/PanGestureHandler.ts +488 -0
- package/src/web/handlers/PinchGestureHandler.ts +162 -0
- package/src/web/handlers/RotationGestureHandler.ts +181 -0
- package/src/web/handlers/TapGestureHandler.ts +275 -0
- package/src/web/interfaces.ts +114 -0
- package/src/web/tools/EventManager.ts +186 -0
- package/src/web/tools/GestureHandlerOrchestrator.ts +329 -0
- package/src/web/tools/InteractionManager.ts +108 -0
- package/src/web/tools/NodeManager.ts +43 -0
- package/src/web/tools/PointerTracker.ts +130 -0
- package/src/{web → web_hammer}/DiscreteGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/DraggingGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/Errors.ts +0 -0
- package/src/{web → web_hammer}/FlingGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/GestureHandler.ts +102 -55
- package/src/{web → web_hammer}/IndiscreteGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/LongPressGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/NativeViewGestureHandler.ts +4 -0
- package/src/{web → web_hammer}/NodeManager.ts +6 -3
- package/src/{web → web_hammer}/PanGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/PinchGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/PressGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/RotationGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/TapGestureHandler.ts +0 -0
- package/src/web_hammer/constants.ts +48 -0
- package/src/{web → web_hammer}/utils.ts +0 -0
- package/android/src/main/jni/Android.mk +0 -52
- package/android/src/main/jni/OnLoad.cpp +0 -9
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +0 -71
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +0 -34
- package/lib/commonjs/web/GestureHandler.js.map +0 -1
- package/lib/commonjs/web/NativeViewGestureHandler.js.map +0 -1
- package/lib/commonjs/web/NodeManager.js.map +0 -1
- package/lib/module/web/GestureHandler.js.map +0 -1
- package/lib/module/web/NativeViewGestureHandler.js.map +0 -1
- package/lib/module/web/NodeManager.js.map +0 -1
- package/lib/typescript/web/NodeManager.d.ts +0 -8
@@ -0,0 +1,521 @@
|
|
1
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
2
|
+
|
3
|
+
/* eslint-disable @typescript-eslint/no-empty-function */
|
4
|
+
import { findNodeHandle } from 'react-native';
|
5
|
+
import { State } from '../../State';
|
6
|
+
import EventManager from '../tools/EventManager';
|
7
|
+
import GestureHandlerOrchestrator from '../tools/GestureHandlerOrchestrator';
|
8
|
+
import PointerTracker from '../tools/PointerTracker';
|
9
|
+
export default class GestureHandler {
|
10
|
+
// Orchestrator properties
|
11
|
+
constructor() {
|
12
|
+
_defineProperty(this, "lastSentState", null);
|
13
|
+
|
14
|
+
_defineProperty(this, "currentState", State.UNDETERMINED);
|
15
|
+
|
16
|
+
_defineProperty(this, "shouldCancellWhenOutside", false);
|
17
|
+
|
18
|
+
_defineProperty(this, "hasCustomActivationCriteria", void 0);
|
19
|
+
|
20
|
+
_defineProperty(this, "enabled", false);
|
21
|
+
|
22
|
+
_defineProperty(this, "ref", void 0);
|
23
|
+
|
24
|
+
_defineProperty(this, "propsRef", void 0);
|
25
|
+
|
26
|
+
_defineProperty(this, "config", {
|
27
|
+
enabled: false
|
28
|
+
});
|
29
|
+
|
30
|
+
_defineProperty(this, "handlerTag", void 0);
|
31
|
+
|
32
|
+
_defineProperty(this, "view", null);
|
33
|
+
|
34
|
+
_defineProperty(this, "eventManager", void 0);
|
35
|
+
|
36
|
+
_defineProperty(this, "tracker", new PointerTracker());
|
37
|
+
|
38
|
+
_defineProperty(this, "interactionManager", void 0);
|
39
|
+
|
40
|
+
_defineProperty(this, "activationIndex", 0);
|
41
|
+
|
42
|
+
_defineProperty(this, "awaiting", false);
|
43
|
+
|
44
|
+
_defineProperty(this, "active", false);
|
45
|
+
|
46
|
+
_defineProperty(this, "shouldResetProgress", false);
|
47
|
+
|
48
|
+
_defineProperty(this, "sendEvent", (event, newState, oldState) => {
|
49
|
+
const {
|
50
|
+
onGestureHandlerEvent,
|
51
|
+
onGestureHandlerStateChange
|
52
|
+
} = this.propsRef.current;
|
53
|
+
const resultEvent = this.transformEventData(event, newState, oldState); // In the new API oldState field has to be undefined, unless we send event state changed
|
54
|
+
// Here the order is flipped to avoid workarounds such as making backup of the state and setting it to undefined first, then changing it back
|
55
|
+
// Flipping order with setting oldState to undefined solves issue, when events were being sent twice instead of once
|
56
|
+
// However, this may cause trouble in the future (but for now we don't know that)
|
57
|
+
|
58
|
+
if (this.lastSentState !== newState) {
|
59
|
+
this.lastSentState = newState;
|
60
|
+
invokeNullableMethod(onGestureHandlerStateChange, resultEvent);
|
61
|
+
}
|
62
|
+
|
63
|
+
if (this.currentState === State.ACTIVE) {
|
64
|
+
resultEvent.nativeEvent.oldState = undefined;
|
65
|
+
invokeNullableMethod(onGestureHandlerEvent, resultEvent);
|
66
|
+
}
|
67
|
+
});
|
68
|
+
|
69
|
+
this.hasCustomActivationCriteria = false;
|
70
|
+
} //
|
71
|
+
// Initializing handler
|
72
|
+
//
|
73
|
+
|
74
|
+
|
75
|
+
init(ref, propsRef) {
|
76
|
+
this.propsRef = propsRef;
|
77
|
+
this.ref = ref;
|
78
|
+
this.currentState = State.UNDETERMINED;
|
79
|
+
this.setView(ref);
|
80
|
+
this.setEventManager();
|
81
|
+
}
|
82
|
+
|
83
|
+
setView(ref) {
|
84
|
+
if (!ref) {
|
85
|
+
this.view = null;
|
86
|
+
return;
|
87
|
+
}
|
88
|
+
|
89
|
+
this.view = findNodeHandle(ref);
|
90
|
+
this.view.style['touchAction'] = 'none';
|
91
|
+
this.view.style['webkitUserSelect'] = 'none';
|
92
|
+
this.view.style['userSelect'] = 'none'; //@ts-ignore This one disables default events on Safari
|
93
|
+
|
94
|
+
this.view.style['WebkitTouchCallout'] = 'none';
|
95
|
+
}
|
96
|
+
|
97
|
+
setEventManager() {
|
98
|
+
if (!this.view) {
|
99
|
+
return;
|
100
|
+
}
|
101
|
+
|
102
|
+
this.eventManager = new EventManager(this.view);
|
103
|
+
this.eventManager.setOnPointerDown(this.onPointerDown.bind(this));
|
104
|
+
this.eventManager.setOnPointerUp(this.onPointerUp.bind(this));
|
105
|
+
this.eventManager.setOnPointerMove(this.onPointerMove.bind(this));
|
106
|
+
this.eventManager.setOnPointerEnter(this.onPointerEnter.bind(this));
|
107
|
+
this.eventManager.setOnPointerOut(this.onPointerOut.bind(this));
|
108
|
+
this.eventManager.setOnPointerCancel(this.onPointerCancel.bind(this));
|
109
|
+
this.eventManager.setOnPointerOutOfBounds(this.onPointerOutOfBounds.bind(this));
|
110
|
+
this.eventManager.setListeners();
|
111
|
+
}
|
112
|
+
|
113
|
+
setInteractionManager(manager) {
|
114
|
+
this.interactionManager = manager;
|
115
|
+
} //
|
116
|
+
// Resetting handler
|
117
|
+
//
|
118
|
+
|
119
|
+
|
120
|
+
onCancel() {}
|
121
|
+
|
122
|
+
onReset() {}
|
123
|
+
|
124
|
+
resetProgress() {}
|
125
|
+
|
126
|
+
reset() {
|
127
|
+
this.tracker.resetTracker();
|
128
|
+
this.onReset();
|
129
|
+
this.currentState = State.UNDETERMINED;
|
130
|
+
} //
|
131
|
+
// State logic
|
132
|
+
//
|
133
|
+
|
134
|
+
|
135
|
+
moveToState(newState, event) {
|
136
|
+
if (this.currentState === newState) {
|
137
|
+
return;
|
138
|
+
}
|
139
|
+
|
140
|
+
const oldState = this.currentState;
|
141
|
+
this.currentState = newState;
|
142
|
+
GestureHandlerOrchestrator.getInstance().onHandlerStateChange(this, newState, oldState, event);
|
143
|
+
this.onStateChange(newState, oldState);
|
144
|
+
}
|
145
|
+
|
146
|
+
onStateChange(_newState, _oldState) {}
|
147
|
+
|
148
|
+
begin(event) {
|
149
|
+
if (!this.checkHitSlop(event)) {
|
150
|
+
return;
|
151
|
+
}
|
152
|
+
|
153
|
+
if (this.currentState === State.UNDETERMINED) {
|
154
|
+
this.moveToState(State.BEGAN, event);
|
155
|
+
}
|
156
|
+
}
|
157
|
+
|
158
|
+
fail(event) {
|
159
|
+
if (this.currentState === State.ACTIVE || this.currentState === State.BEGAN) {
|
160
|
+
this.moveToState(State.FAILED, event);
|
161
|
+
}
|
162
|
+
|
163
|
+
this.resetProgress();
|
164
|
+
}
|
165
|
+
|
166
|
+
cancel(event) {
|
167
|
+
if (this.currentState === State.ACTIVE || this.currentState === State.UNDETERMINED || this.currentState === State.BEGAN) {
|
168
|
+
this.onCancel();
|
169
|
+
this.moveToState(State.CANCELLED, event);
|
170
|
+
}
|
171
|
+
}
|
172
|
+
|
173
|
+
activate(event, _force = false) {
|
174
|
+
if (this.currentState === State.UNDETERMINED || this.currentState === State.BEGAN) {
|
175
|
+
this.moveToState(State.ACTIVE, event);
|
176
|
+
}
|
177
|
+
}
|
178
|
+
|
179
|
+
end(event) {
|
180
|
+
if (this.currentState === State.BEGAN || this.currentState === State.ACTIVE) {
|
181
|
+
this.moveToState(State.END, event);
|
182
|
+
}
|
183
|
+
|
184
|
+
this.resetProgress();
|
185
|
+
} //
|
186
|
+
// Methods for orchestrator
|
187
|
+
//
|
188
|
+
|
189
|
+
|
190
|
+
isAwaiting() {
|
191
|
+
return this.awaiting;
|
192
|
+
}
|
193
|
+
|
194
|
+
setAwaiting(value) {
|
195
|
+
this.awaiting = value;
|
196
|
+
}
|
197
|
+
|
198
|
+
isActive() {
|
199
|
+
return this.active;
|
200
|
+
}
|
201
|
+
|
202
|
+
setActive(value) {
|
203
|
+
this.active = value;
|
204
|
+
}
|
205
|
+
|
206
|
+
getShouldResetProgress() {
|
207
|
+
return this.shouldResetProgress;
|
208
|
+
}
|
209
|
+
|
210
|
+
setShouldResetProgress(value) {
|
211
|
+
this.shouldResetProgress = value;
|
212
|
+
}
|
213
|
+
|
214
|
+
getActivationIndex() {
|
215
|
+
return this.activationIndex;
|
216
|
+
}
|
217
|
+
|
218
|
+
setActivationIndex(value) {
|
219
|
+
this.activationIndex = value;
|
220
|
+
}
|
221
|
+
|
222
|
+
shouldWaitForHandlerFailure(handler) {
|
223
|
+
if (handler === this) {
|
224
|
+
return false;
|
225
|
+
}
|
226
|
+
|
227
|
+
return this.interactionManager.shouldWaitForHandlerFailure(this, handler);
|
228
|
+
}
|
229
|
+
|
230
|
+
shouldRequireToWaitForFailure(handler) {
|
231
|
+
if (handler === this) {
|
232
|
+
return false;
|
233
|
+
}
|
234
|
+
|
235
|
+
return this.interactionManager.shouldRequireHandlerToWaitForFailure(this, handler);
|
236
|
+
}
|
237
|
+
|
238
|
+
shouldRecognizeSimultaneously(handler) {
|
239
|
+
if (handler === this) {
|
240
|
+
return true;
|
241
|
+
}
|
242
|
+
|
243
|
+
return this.interactionManager.shouldRecognizeSimultaneously(this, handler);
|
244
|
+
}
|
245
|
+
|
246
|
+
shouldBeCancelledByOther(handler) {
|
247
|
+
if (handler === this) {
|
248
|
+
return false;
|
249
|
+
}
|
250
|
+
|
251
|
+
return this.interactionManager.shouldHandlerBeCancelledBy(this, handler);
|
252
|
+
} //
|
253
|
+
// Event actions
|
254
|
+
//
|
255
|
+
|
256
|
+
|
257
|
+
onPointerDown(_event) {
|
258
|
+
GestureHandlerOrchestrator.getInstance().recordHandlerIfNotPresent(this);
|
259
|
+
} // Adding another pointer to existing ones
|
260
|
+
|
261
|
+
|
262
|
+
onPointerAdd(_event) {}
|
263
|
+
|
264
|
+
onPointerUp(_event) {} // Removing pointer, when there is more than one pointers
|
265
|
+
|
266
|
+
|
267
|
+
onPointerRemove(_event) {}
|
268
|
+
|
269
|
+
onPointerMove(event) {
|
270
|
+
this.tryToSendMoveEvent(event, false);
|
271
|
+
}
|
272
|
+
|
273
|
+
onPointerOut(_event) {}
|
274
|
+
|
275
|
+
onPointerEnter(_event) {}
|
276
|
+
|
277
|
+
onPointerCancel(_event) {}
|
278
|
+
|
279
|
+
onPointerOutOfBounds(event) {
|
280
|
+
this.tryToSendMoveEvent(event, true);
|
281
|
+
}
|
282
|
+
|
283
|
+
tryToSendMoveEvent(event, out) {
|
284
|
+
if (this.currentState === State.ACTIVE && (!out || out && !this.shouldCancellWhenOutside)) {
|
285
|
+
this.sendEvent(event, this.currentState, this.currentState);
|
286
|
+
}
|
287
|
+
} //
|
288
|
+
// Events Sending
|
289
|
+
//
|
290
|
+
|
291
|
+
|
292
|
+
transformEventData(event, newState, oldState) {
|
293
|
+
var _this$eventManager;
|
294
|
+
|
295
|
+
return {
|
296
|
+
nativeEvent: {
|
297
|
+
numberOfPointers: this.tracker.getTrackedPointersCount(),
|
298
|
+
state: newState,
|
299
|
+
pointerInside: (_this$eventManager = this.eventManager) === null || _this$eventManager === void 0 ? void 0 : _this$eventManager.isPointerInBounds({
|
300
|
+
x: event.x,
|
301
|
+
y: event.y
|
302
|
+
}),
|
303
|
+
...this.transformNativeEvent(event),
|
304
|
+
handlerTag: this.handlerTag,
|
305
|
+
target: this.ref,
|
306
|
+
oldState: newState !== oldState ? oldState : undefined
|
307
|
+
},
|
308
|
+
timeStamp: Date.now()
|
309
|
+
};
|
310
|
+
}
|
311
|
+
|
312
|
+
transformNativeEvent(_event) {
|
313
|
+
return {};
|
314
|
+
} //
|
315
|
+
// Handling config
|
316
|
+
//
|
317
|
+
|
318
|
+
|
319
|
+
updateGestureConfig({
|
320
|
+
enabled = true,
|
321
|
+
...props
|
322
|
+
}) {
|
323
|
+
this.config = {
|
324
|
+
enabled,
|
325
|
+
...props
|
326
|
+
};
|
327
|
+
this.validateHitSlops();
|
328
|
+
}
|
329
|
+
|
330
|
+
checkCustomActivationCriteria(criterias) {
|
331
|
+
for (const key in this.config) {
|
332
|
+
if (criterias.indexOf(key) >= 0) {
|
333
|
+
this.hasCustomActivationCriteria = true;
|
334
|
+
}
|
335
|
+
}
|
336
|
+
}
|
337
|
+
|
338
|
+
validateHitSlops() {
|
339
|
+
if (!this.config.hitSlop) {
|
340
|
+
return;
|
341
|
+
}
|
342
|
+
|
343
|
+
if (this.config.hitSlop.left !== undefined && this.config.hitSlop.right !== undefined && this.config.hitSlop.width !== undefined) {
|
344
|
+
throw new Error('HitSlop Error: Cannot define left, right and width at the same time');
|
345
|
+
}
|
346
|
+
|
347
|
+
if (this.config.hitSlop.width !== undefined && this.config.hitSlop.left === undefined && this.config.hitSlop.right === undefined) {
|
348
|
+
throw new Error('HitSlop Error: When width is defined, either left or right has to be defined');
|
349
|
+
}
|
350
|
+
|
351
|
+
if (this.config.hitSlop.height !== undefined && this.config.hitSlop.top !== undefined && this.config.hitSlop.bottom !== undefined) {
|
352
|
+
throw new Error('HitSlop Error: Cannot define top, bottom and height at the same time');
|
353
|
+
}
|
354
|
+
|
355
|
+
if (this.config.hitSlop.height !== undefined && this.config.hitSlop.top === undefined && this.config.hitSlop.bottom === undefined) {
|
356
|
+
throw new Error('HitSlop Error: When height is defined, either top or bottom has to be defined');
|
357
|
+
}
|
358
|
+
}
|
359
|
+
|
360
|
+
checkHitSlop(event) {
|
361
|
+
if (!this.config.hitSlop || !this.view) {
|
362
|
+
return true;
|
363
|
+
}
|
364
|
+
|
365
|
+
const width = this.view.getBoundingClientRect().width;
|
366
|
+
const height = this.view.getBoundingClientRect().height;
|
367
|
+
let left = 0;
|
368
|
+
let top = 0;
|
369
|
+
let right = width;
|
370
|
+
let bottom = height;
|
371
|
+
|
372
|
+
if (this.config.hitSlop.horizontal !== undefined) {
|
373
|
+
left -= this.config.hitSlop.horizontal;
|
374
|
+
right += this.config.hitSlop.horizontal;
|
375
|
+
}
|
376
|
+
|
377
|
+
if (this.config.hitSlop.vertical !== undefined) {
|
378
|
+
top -= this.config.hitSlop.vertical;
|
379
|
+
bottom += this.config.hitSlop.vertical;
|
380
|
+
}
|
381
|
+
|
382
|
+
if (this.config.hitSlop.left !== undefined) {
|
383
|
+
left = -this.config.hitSlop.left;
|
384
|
+
}
|
385
|
+
|
386
|
+
if (this.config.hitSlop.right !== undefined) {
|
387
|
+
right = width + this.config.hitSlop.right;
|
388
|
+
}
|
389
|
+
|
390
|
+
if (this.config.hitSlop.top !== undefined) {
|
391
|
+
top = -this.config.hitSlop.top;
|
392
|
+
}
|
393
|
+
|
394
|
+
if (this.config.hitSlop.bottom !== undefined) {
|
395
|
+
bottom = width + this.config.hitSlop.bottom;
|
396
|
+
}
|
397
|
+
|
398
|
+
if (this.config.hitSlop.width !== undefined) {
|
399
|
+
if (this.config.hitSlop.left !== undefined) {
|
400
|
+
right = left + this.config.hitSlop.width;
|
401
|
+
} else if (this.config.hitSlop.right !== undefined) {
|
402
|
+
left = right - this.config.hitSlop.width;
|
403
|
+
}
|
404
|
+
}
|
405
|
+
|
406
|
+
if (this.config.hitSlop.height !== undefined) {
|
407
|
+
if (this.config.hitSlop.top !== undefined) {
|
408
|
+
bottom = top + this.config.hitSlop.height;
|
409
|
+
} else if (this.config.hitSlop.bottom !== undefined) {
|
410
|
+
top = bottom - this.config.hitSlop.height;
|
411
|
+
}
|
412
|
+
}
|
413
|
+
|
414
|
+
if (event.offsetX >= left && event.offsetX <= right && event.offsetY >= top && event.offsetY <= bottom) {
|
415
|
+
return true;
|
416
|
+
}
|
417
|
+
|
418
|
+
return false;
|
419
|
+
}
|
420
|
+
|
421
|
+
resetConfig() {} //
|
422
|
+
// Getters and setters
|
423
|
+
//
|
424
|
+
|
425
|
+
|
426
|
+
getTag() {
|
427
|
+
return this.handlerTag;
|
428
|
+
}
|
429
|
+
|
430
|
+
setTag(tag) {
|
431
|
+
this.handlerTag = tag;
|
432
|
+
}
|
433
|
+
|
434
|
+
getConfig() {
|
435
|
+
return this.config;
|
436
|
+
}
|
437
|
+
|
438
|
+
getShouldEnableGestureOnSetup() {
|
439
|
+
throw new Error('Must override GestureHandler.shouldEnableGestureOnSetup');
|
440
|
+
}
|
441
|
+
|
442
|
+
getView() {
|
443
|
+
return this.view;
|
444
|
+
}
|
445
|
+
|
446
|
+
getEventManager() {
|
447
|
+
return this.eventManager;
|
448
|
+
}
|
449
|
+
|
450
|
+
getTracker() {
|
451
|
+
return this.tracker;
|
452
|
+
}
|
453
|
+
|
454
|
+
getTrackedPointersID() {
|
455
|
+
return this.tracker.getTrackedPointersID();
|
456
|
+
}
|
457
|
+
|
458
|
+
getState() {
|
459
|
+
return this.currentState;
|
460
|
+
}
|
461
|
+
|
462
|
+
setShouldCancelWhenOutside(flag) {
|
463
|
+
this.shouldCancellWhenOutside = flag;
|
464
|
+
}
|
465
|
+
|
466
|
+
getShouldCancelWhenOutside() {
|
467
|
+
return this.shouldCancellWhenOutside;
|
468
|
+
}
|
469
|
+
|
470
|
+
}
|
471
|
+
|
472
|
+
function invokeNullableMethod(method, event) {
|
473
|
+
if (!method) {
|
474
|
+
return;
|
475
|
+
}
|
476
|
+
|
477
|
+
if (typeof method === 'function') {
|
478
|
+
method(event);
|
479
|
+
return;
|
480
|
+
}
|
481
|
+
|
482
|
+
if ('__getHandler' in method && typeof method.__getHandler === 'function') {
|
483
|
+
const handler = method.__getHandler();
|
484
|
+
|
485
|
+
invokeNullableMethod(handler, event);
|
486
|
+
return;
|
487
|
+
}
|
488
|
+
|
489
|
+
if (!('__nodeConfig' in method)) {
|
490
|
+
return;
|
491
|
+
}
|
492
|
+
|
493
|
+
const {
|
494
|
+
argMapping
|
495
|
+
} = method.__nodeConfig;
|
496
|
+
|
497
|
+
if (!Array.isArray(argMapping)) {
|
498
|
+
return;
|
499
|
+
}
|
500
|
+
|
501
|
+
for (const [index, [key, value]] of argMapping.entries()) {
|
502
|
+
if (!(key in event.nativeEvent)) {
|
503
|
+
continue;
|
504
|
+
} // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
505
|
+
|
506
|
+
|
507
|
+
const nativeValue = event.nativeEvent[key]; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
508
|
+
|
509
|
+
if (value !== null && value !== void 0 && value.setValue) {
|
510
|
+
//Reanimated API
|
511
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
512
|
+
value.setValue(nativeValue);
|
513
|
+
} else {
|
514
|
+
//RN Animated API
|
515
|
+
method.__nodeConfig.argMapping[index] = [key, nativeValue];
|
516
|
+
}
|
517
|
+
}
|
518
|
+
|
519
|
+
return;
|
520
|
+
}
|
521
|
+
//# sourceMappingURL=GestureHandler.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["GestureHandler.ts"],"names":["findNodeHandle","State","EventManager","GestureHandlerOrchestrator","PointerTracker","GestureHandler","constructor","UNDETERMINED","enabled","event","newState","oldState","onGestureHandlerEvent","onGestureHandlerStateChange","propsRef","current","resultEvent","transformEventData","lastSentState","invokeNullableMethod","currentState","ACTIVE","nativeEvent","undefined","hasCustomActivationCriteria","init","ref","setView","setEventManager","view","style","eventManager","setOnPointerDown","onPointerDown","bind","setOnPointerUp","onPointerUp","setOnPointerMove","onPointerMove","setOnPointerEnter","onPointerEnter","setOnPointerOut","onPointerOut","setOnPointerCancel","onPointerCancel","setOnPointerOutOfBounds","onPointerOutOfBounds","setListeners","setInteractionManager","manager","interactionManager","onCancel","onReset","resetProgress","reset","tracker","resetTracker","moveToState","getInstance","onHandlerStateChange","onStateChange","_newState","_oldState","begin","checkHitSlop","BEGAN","fail","FAILED","cancel","CANCELLED","activate","_force","end","END","isAwaiting","awaiting","setAwaiting","value","isActive","active","setActive","getShouldResetProgress","shouldResetProgress","setShouldResetProgress","getActivationIndex","activationIndex","setActivationIndex","shouldWaitForHandlerFailure","handler","shouldRequireToWaitForFailure","shouldRequireHandlerToWaitForFailure","shouldRecognizeSimultaneously","shouldBeCancelledByOther","shouldHandlerBeCancelledBy","_event","recordHandlerIfNotPresent","onPointerAdd","onPointerRemove","tryToSendMoveEvent","out","shouldCancellWhenOutside","sendEvent","numberOfPointers","getTrackedPointersCount","state","pointerInside","isPointerInBounds","x","y","transformNativeEvent","handlerTag","target","timeStamp","Date","now","updateGestureConfig","props","config","validateHitSlops","checkCustomActivationCriteria","criterias","key","indexOf","hitSlop","left","right","width","Error","height","top","bottom","getBoundingClientRect","horizontal","vertical","offsetX","offsetY","resetConfig","getTag","setTag","tag","getConfig","getShouldEnableGestureOnSetup","getView","getEventManager","getTracker","getTrackedPointersID","getState","setShouldCancelWhenOutside","flag","getShouldCancelWhenOutside","method","__getHandler","argMapping","__nodeConfig","Array","isArray","index","entries","nativeValue","setValue"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-function */\nimport { findNodeHandle } from 'react-native';\nimport { State } from '../../State';\nimport {\n Config,\n AdaptedPointerEvent,\n PropsRef,\n ResultEvent,\n} from '../interfaces';\nimport EventManager from '../tools/EventManager';\nimport GestureHandlerOrchestrator from '../tools/GestureHandlerOrchestrator';\nimport InteractionManager from '../tools/InteractionManager';\nimport PointerTracker from '../tools/PointerTracker';\n\nexport default abstract class GestureHandler {\n private lastSentState: State | null = null;\n protected currentState: State = State.UNDETERMINED;\n\n protected shouldCancellWhenOutside = false;\n protected hasCustomActivationCriteria: boolean;\n protected enabled = false;\n\n private ref!: number;\n private propsRef!: React.RefObject<unknown>;\n protected config: Config = { enabled: false };\n private handlerTag!: number;\n protected view: HTMLElement | null = null;\n\n protected eventManager!: EventManager;\n protected tracker: PointerTracker = new PointerTracker();\n protected interactionManager!: InteractionManager;\n\n // Orchestrator properties\n protected activationIndex = 0;\n protected awaiting = false;\n protected active = false;\n protected shouldResetProgress = false;\n\n public constructor() {\n this.hasCustomActivationCriteria = false;\n }\n\n //\n // Initializing handler\n //\n\n protected init(ref: number, propsRef: React.RefObject<unknown>) {\n this.propsRef = propsRef;\n this.ref = ref;\n\n this.currentState = State.UNDETERMINED;\n\n this.setView(ref);\n this.setEventManager();\n }\n\n private setView(ref: number) {\n if (!ref) {\n this.view = null;\n return;\n }\n\n this.view = (findNodeHandle(ref) as unknown) as HTMLElement;\n this.view.style['touchAction'] = 'none';\n this.view.style['webkitUserSelect'] = 'none';\n this.view.style['userSelect'] = 'none';\n\n //@ts-ignore This one disables default events on Safari\n this.view.style['WebkitTouchCallout'] = 'none';\n }\n\n private setEventManager(): void {\n if (!this.view) {\n return;\n }\n\n this.eventManager = new EventManager(this.view);\n\n this.eventManager.setOnPointerDown(this.onPointerDown.bind(this));\n this.eventManager.setOnPointerUp(this.onPointerUp.bind(this));\n this.eventManager.setOnPointerMove(this.onPointerMove.bind(this));\n this.eventManager.setOnPointerEnter(this.onPointerEnter.bind(this));\n this.eventManager.setOnPointerOut(this.onPointerOut.bind(this));\n this.eventManager.setOnPointerCancel(this.onPointerCancel.bind(this));\n this.eventManager.setOnPointerOutOfBounds(\n this.onPointerOutOfBounds.bind(this)\n );\n\n this.eventManager.setListeners();\n }\n\n public setInteractionManager(manager: InteractionManager): void {\n this.interactionManager = manager;\n }\n\n //\n // Resetting handler\n //\n\n protected onCancel(): void {}\n protected onReset(): void {}\n protected resetProgress(): void {}\n\n public reset(): void {\n this.tracker.resetTracker();\n this.onReset();\n this.currentState = State.UNDETERMINED;\n }\n\n //\n // State logic\n //\n\n public moveToState(newState: State, event: AdaptedPointerEvent) {\n if (this.currentState === newState) {\n return;\n }\n\n const oldState = this.currentState;\n this.currentState = newState;\n\n GestureHandlerOrchestrator.getInstance().onHandlerStateChange(\n this,\n newState,\n oldState,\n event\n );\n\n this.onStateChange(newState, oldState);\n }\n\n protected onStateChange(_newState: State, _oldState: State): void {}\n\n public begin(event: AdaptedPointerEvent): void {\n if (!this.checkHitSlop(event)) {\n return;\n }\n\n if (this.currentState === State.UNDETERMINED) {\n this.moveToState(State.BEGAN, event);\n }\n }\n\n public fail(event: AdaptedPointerEvent): void {\n if (\n this.currentState === State.ACTIVE ||\n this.currentState === State.BEGAN\n ) {\n this.moveToState(State.FAILED, event);\n }\n\n this.resetProgress();\n }\n\n public cancel(event: AdaptedPointerEvent): void {\n if (\n this.currentState === State.ACTIVE ||\n this.currentState === State.UNDETERMINED ||\n this.currentState === State.BEGAN\n ) {\n this.onCancel();\n this.moveToState(State.CANCELLED, event);\n }\n }\n\n protected activate(event: AdaptedPointerEvent, _force = false) {\n if (\n this.currentState === State.UNDETERMINED ||\n this.currentState === State.BEGAN\n ) {\n this.moveToState(State.ACTIVE, event);\n }\n }\n\n public end(event: AdaptedPointerEvent) {\n if (\n this.currentState === State.BEGAN ||\n this.currentState === State.ACTIVE\n ) {\n this.moveToState(State.END, event);\n }\n\n this.resetProgress();\n }\n\n //\n // Methods for orchestrator\n //\n\n public isAwaiting(): boolean {\n return this.awaiting;\n }\n public setAwaiting(value: boolean): void {\n this.awaiting = value;\n }\n\n public isActive(): boolean {\n return this.active;\n }\n public setActive(value: boolean): void {\n this.active = value;\n }\n\n public getShouldResetProgress(): boolean {\n return this.shouldResetProgress;\n }\n public setShouldResetProgress(value: boolean): void {\n this.shouldResetProgress = value;\n }\n\n public getActivationIndex(): number {\n return this.activationIndex;\n }\n public setActivationIndex(value: number): void {\n this.activationIndex = value;\n }\n\n public shouldWaitForHandlerFailure(handler: GestureHandler): boolean {\n if (handler === this) {\n return false;\n }\n\n return this.interactionManager.shouldWaitForHandlerFailure(this, handler);\n }\n\n public shouldRequireToWaitForFailure(handler: GestureHandler): boolean {\n if (handler === this) {\n return false;\n }\n\n return this.interactionManager.shouldRequireHandlerToWaitForFailure(\n this,\n handler\n );\n }\n\n public shouldRecognizeSimultaneously(handler: GestureHandler): boolean {\n if (handler === this) {\n return true;\n }\n\n return this.interactionManager.shouldRecognizeSimultaneously(this, handler);\n }\n\n public shouldBeCancelledByOther(handler: GestureHandler): boolean {\n if (handler === this) {\n return false;\n }\n\n return this.interactionManager.shouldHandlerBeCancelledBy(this, handler);\n }\n\n //\n // Event actions\n //\n\n protected onPointerDown(_event: AdaptedPointerEvent): void {\n GestureHandlerOrchestrator.getInstance().recordHandlerIfNotPresent(this);\n }\n // Adding another pointer to existing ones\n protected onPointerAdd(_event: AdaptedPointerEvent): void {}\n protected onPointerUp(_event: AdaptedPointerEvent): void {}\n // Removing pointer, when there is more than one pointers\n protected onPointerRemove(_event: AdaptedPointerEvent): void {}\n protected onPointerMove(event: AdaptedPointerEvent): void {\n this.tryToSendMoveEvent(event, false);\n }\n protected onPointerOut(_event: AdaptedPointerEvent): void {}\n protected onPointerEnter(_event: AdaptedPointerEvent): void {}\n protected onPointerCancel(_event: AdaptedPointerEvent): void {}\n protected onPointerOutOfBounds(event: AdaptedPointerEvent): void {\n this.tryToSendMoveEvent(event, true);\n }\n private tryToSendMoveEvent(event: AdaptedPointerEvent, out: boolean): void {\n if (\n this.currentState === State.ACTIVE &&\n (!out || (out && !this.shouldCancellWhenOutside))\n ) {\n this.sendEvent(event, this.currentState, this.currentState);\n }\n }\n\n //\n // Events Sending\n //\n\n public sendEvent = (\n event: AdaptedPointerEvent,\n newState: State,\n oldState: State\n ): void => {\n const {\n onGestureHandlerEvent,\n onGestureHandlerStateChange,\n }: PropsRef = this.propsRef.current as PropsRef;\n\n const resultEvent: ResultEvent = this.transformEventData(\n event,\n newState,\n oldState\n );\n\n // In the new API oldState field has to be undefined, unless we send event state changed\n // Here the order is flipped to avoid workarounds such as making backup of the state and setting it to undefined first, then changing it back\n // Flipping order with setting oldState to undefined solves issue, when events were being sent twice instead of once\n // However, this may cause trouble in the future (but for now we don't know that)\n\n if (this.lastSentState !== newState) {\n this.lastSentState = newState;\n invokeNullableMethod(onGestureHandlerStateChange, resultEvent);\n }\n if (this.currentState === State.ACTIVE) {\n resultEvent.nativeEvent.oldState = undefined;\n invokeNullableMethod(onGestureHandlerEvent, resultEvent);\n }\n };\n\n private transformEventData(\n event: AdaptedPointerEvent,\n newState: State,\n oldState: State\n ): ResultEvent {\n return {\n nativeEvent: {\n numberOfPointers: this.tracker.getTrackedPointersCount(),\n state: newState,\n pointerInside: this.eventManager?.isPointerInBounds({\n x: event.x,\n y: event.y,\n }),\n ...this.transformNativeEvent(event),\n handlerTag: this.handlerTag,\n target: this.ref,\n oldState: newState !== oldState ? oldState : undefined,\n },\n timeStamp: Date.now(),\n };\n }\n\n protected transformNativeEvent(_event: AdaptedPointerEvent) {\n return {};\n }\n\n //\n // Handling config\n //\n\n public updateGestureConfig({ enabled = true, ...props }): void {\n this.config = { enabled, ...props };\n this.validateHitSlops();\n }\n\n protected checkCustomActivationCriteria(criterias: string[]): void {\n for (const key in this.config) {\n if (criterias.indexOf(key) >= 0) {\n this.hasCustomActivationCriteria = true;\n }\n }\n }\n\n private validateHitSlops(): void {\n if (!this.config.hitSlop) {\n return;\n }\n\n if (\n this.config.hitSlop.left !== undefined &&\n this.config.hitSlop.right !== undefined &&\n this.config.hitSlop.width !== undefined\n ) {\n throw new Error(\n 'HitSlop Error: Cannot define left, right and width at the same time'\n );\n }\n\n if (\n this.config.hitSlop.width !== undefined &&\n this.config.hitSlop.left === undefined &&\n this.config.hitSlop.right === undefined\n ) {\n throw new Error(\n 'HitSlop Error: When width is defined, either left or right has to be defined'\n );\n }\n\n if (\n this.config.hitSlop.height !== undefined &&\n this.config.hitSlop.top !== undefined &&\n this.config.hitSlop.bottom !== undefined\n ) {\n throw new Error(\n 'HitSlop Error: Cannot define top, bottom and height at the same time'\n );\n }\n\n if (\n this.config.hitSlop.height !== undefined &&\n this.config.hitSlop.top === undefined &&\n this.config.hitSlop.bottom === undefined\n ) {\n throw new Error(\n 'HitSlop Error: When height is defined, either top or bottom has to be defined'\n );\n }\n }\n\n private checkHitSlop(event: AdaptedPointerEvent): boolean {\n if (!this.config.hitSlop || !this.view) {\n return true;\n }\n\n const width = this.view.getBoundingClientRect().width;\n const height = this.view.getBoundingClientRect().height;\n\n let left = 0;\n let top = 0;\n let right: number = width;\n let bottom: number = height;\n\n if (this.config.hitSlop.horizontal !== undefined) {\n left -= this.config.hitSlop.horizontal;\n right += this.config.hitSlop.horizontal;\n }\n\n if (this.config.hitSlop.vertical !== undefined) {\n top -= this.config.hitSlop.vertical;\n bottom += this.config.hitSlop.vertical;\n }\n\n if (this.config.hitSlop.left !== undefined) {\n left = -this.config.hitSlop.left;\n }\n\n if (this.config.hitSlop.right !== undefined) {\n right = width + this.config.hitSlop.right;\n }\n\n if (this.config.hitSlop.top !== undefined) {\n top = -this.config.hitSlop.top;\n }\n\n if (this.config.hitSlop.bottom !== undefined) {\n bottom = width + this.config.hitSlop.bottom;\n }\n if (this.config.hitSlop.width !== undefined) {\n if (this.config.hitSlop.left !== undefined) {\n right = left + this.config.hitSlop.width;\n } else if (this.config.hitSlop.right !== undefined) {\n left = right - this.config.hitSlop.width;\n }\n }\n\n if (this.config.hitSlop.height !== undefined) {\n if (this.config.hitSlop.top !== undefined) {\n bottom = top + this.config.hitSlop.height;\n } else if (this.config.hitSlop.bottom !== undefined) {\n top = bottom - this.config.hitSlop.height;\n }\n }\n\n if (\n event.offsetX >= left &&\n event.offsetX <= right &&\n event.offsetY >= top &&\n event.offsetY <= bottom\n ) {\n return true;\n }\n return false;\n }\n\n protected resetConfig(): void {}\n\n //\n // Getters and setters\n //\n\n public getTag(): number {\n return this.handlerTag;\n }\n public setTag(tag: number): void {\n this.handlerTag = tag;\n }\n\n protected getConfig() {\n return this.config;\n }\n\n public getShouldEnableGestureOnSetup(): boolean {\n throw new Error('Must override GestureHandler.shouldEnableGestureOnSetup');\n }\n\n public getView(): HTMLElement | null {\n return this.view;\n }\n\n public getEventManager(): EventManager {\n return this.eventManager;\n }\n\n public getTracker(): PointerTracker {\n return this.tracker;\n }\n\n public getTrackedPointersID(): number[] {\n return this.tracker.getTrackedPointersID();\n }\n\n public getState(): State {\n return this.currentState;\n }\n\n protected setShouldCancelWhenOutside(flag: boolean) {\n this.shouldCancellWhenOutside = flag;\n }\n protected getShouldCancelWhenOutside(): boolean {\n return this.shouldCancellWhenOutside;\n }\n}\n\nfunction invokeNullableMethod(\n method:\n | ((event: ResultEvent) => void)\n | { __getHandler: () => (event: ResultEvent) => void }\n | { __nodeConfig: { argMapping: unknown[] } },\n event: ResultEvent\n): void {\n if (!method) {\n return;\n }\n\n if (typeof method === 'function') {\n method(event);\n return;\n }\n\n if ('__getHandler' in method && typeof method.__getHandler === 'function') {\n const handler = method.__getHandler();\n invokeNullableMethod(handler, event);\n return;\n }\n\n if (!('__nodeConfig' in method)) {\n return;\n }\n\n const { argMapping } = method.__nodeConfig;\n if (!Array.isArray(argMapping)) {\n return;\n }\n\n for (const [index, [key, value]] of argMapping.entries()) {\n if (!(key in event.nativeEvent)) {\n continue;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const nativeValue = event.nativeEvent[key];\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (value?.setValue) {\n //Reanimated API\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n value.setValue(nativeValue);\n } else {\n //RN Animated API\n method.__nodeConfig.argMapping[index] = [key, nativeValue];\n }\n }\n\n return;\n}\n"]}
|