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,270 @@
|
|
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
|
+
import { State } from '../../State';
|
4
|
+
import PointerTracker from './PointerTracker';
|
5
|
+
export default class GestureHandlerOrchestrator {
|
6
|
+
// Private beacuse of Singleton
|
7
|
+
// eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function
|
8
|
+
constructor() {
|
9
|
+
_defineProperty(this, "gestureHandlers", []);
|
10
|
+
|
11
|
+
_defineProperty(this, "awaitingHandlers", []);
|
12
|
+
|
13
|
+
_defineProperty(this, "handlersToCancel", []);
|
14
|
+
|
15
|
+
_defineProperty(this, "handlingChangeSemaphore", 0);
|
16
|
+
|
17
|
+
_defineProperty(this, "activationIndex", 0);
|
18
|
+
}
|
19
|
+
|
20
|
+
scheduleFinishedHandlersCleanup() {
|
21
|
+
if (this.handlingChangeSemaphore === 0) {
|
22
|
+
this.cleanupFinishedHandlers();
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
cleanHandler(handler) {
|
27
|
+
handler.reset();
|
28
|
+
handler.setActive(false);
|
29
|
+
handler.setAwaiting(false);
|
30
|
+
handler.setActivationIndex(Number.MAX_VALUE);
|
31
|
+
}
|
32
|
+
|
33
|
+
cleanupFinishedHandlers() {
|
34
|
+
for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
|
35
|
+
const handler = this.gestureHandlers[i];
|
36
|
+
|
37
|
+
if (!handler) {
|
38
|
+
continue;
|
39
|
+
}
|
40
|
+
|
41
|
+
if (this.isFinished(handler.getState()) && !handler.isAwaiting()) {
|
42
|
+
this.gestureHandlers.splice(i, 1);
|
43
|
+
this.cleanHandler(handler);
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
hasOtherHandlerToWaitFor(handler) {
|
49
|
+
let hasToWait = false;
|
50
|
+
this.gestureHandlers.forEach(otherHandler => {
|
51
|
+
if (otherHandler && !this.isFinished(otherHandler.getState()) && this.shouldHandlerWaitForOther(handler, otherHandler)) {
|
52
|
+
hasToWait = true;
|
53
|
+
return;
|
54
|
+
}
|
55
|
+
});
|
56
|
+
return hasToWait;
|
57
|
+
}
|
58
|
+
|
59
|
+
tryActivate(handler, event) {
|
60
|
+
if (this.hasOtherHandlerToWaitFor(handler)) {
|
61
|
+
this.addAwaitingHandler(handler);
|
62
|
+
} else {
|
63
|
+
this.makeActive(handler, event);
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
cleanupAwaitingHandlers(handler) {
|
68
|
+
for (let i = 0; i < this.awaitingHandlers.length; ++i) {
|
69
|
+
if (!this.awaitingHandlers[i].isAwaiting() && this.shouldHandlerWaitForOther(this.awaitingHandlers[i], handler)) {
|
70
|
+
this.cleanHandler(this.awaitingHandlers[i]);
|
71
|
+
this.awaitingHandlers.splice(i, 1);
|
72
|
+
}
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
onHandlerStateChange(handler, newState, oldState, event) {
|
77
|
+
this.handlingChangeSemaphore += 1;
|
78
|
+
|
79
|
+
if (this.isFinished(newState)) {
|
80
|
+
this.awaitingHandlers.forEach(otherHandler => {
|
81
|
+
if (this.shouldHandlerWaitForOther(otherHandler, handler)) {
|
82
|
+
if (newState === State.END) {
|
83
|
+
otherHandler === null || otherHandler === void 0 ? void 0 : otherHandler.cancel(event);
|
84
|
+
otherHandler === null || otherHandler === void 0 ? void 0 : otherHandler.setAwaiting(false);
|
85
|
+
} else {
|
86
|
+
this.tryActivate(otherHandler, event);
|
87
|
+
}
|
88
|
+
}
|
89
|
+
});
|
90
|
+
}
|
91
|
+
|
92
|
+
if (newState === State.ACTIVE) {
|
93
|
+
this.tryActivate(handler, event);
|
94
|
+
} else if (oldState === State.ACTIVE || oldState === State.END) {
|
95
|
+
if (handler.isActive()) {
|
96
|
+
handler.sendEvent(event, newState, oldState);
|
97
|
+
} else if (oldState === State.ACTIVE) {
|
98
|
+
handler.sendEvent(event, newState, State.BEGAN);
|
99
|
+
}
|
100
|
+
} else if (oldState !== State.UNDETERMINED || newState !== State.CANCELLED) {
|
101
|
+
handler.sendEvent(event, newState, oldState);
|
102
|
+
}
|
103
|
+
|
104
|
+
this.handlingChangeSemaphore -= 1;
|
105
|
+
this.scheduleFinishedHandlersCleanup();
|
106
|
+
|
107
|
+
if (this.awaitingHandlers.indexOf(handler) < 0) {
|
108
|
+
this.cleanupAwaitingHandlers(handler);
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
makeActive(handler, event) {
|
113
|
+
const currentState = handler.getState();
|
114
|
+
handler.setActive(true);
|
115
|
+
handler.setShouldResetProgress(true);
|
116
|
+
handler.setActivationIndex(this.activationIndex++);
|
117
|
+
this.gestureHandlers.forEach(otherHandler => {
|
118
|
+
// Order of arguments is correct - we check whether current handler should cancel existing handlers
|
119
|
+
if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
|
120
|
+
this.handlersToCancel.push(otherHandler);
|
121
|
+
}
|
122
|
+
});
|
123
|
+
|
124
|
+
for (let i = this.handlersToCancel.length - 1; i >= 0; --i) {
|
125
|
+
var _this$handlersToCance;
|
126
|
+
|
127
|
+
(_this$handlersToCance = this.handlersToCancel[i]) === null || _this$handlersToCance === void 0 ? void 0 : _this$handlersToCance.cancel(event);
|
128
|
+
}
|
129
|
+
|
130
|
+
this.awaitingHandlers.forEach(otherHandler => {
|
131
|
+
if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
|
132
|
+
otherHandler === null || otherHandler === void 0 ? void 0 : otherHandler.cancel(event);
|
133
|
+
otherHandler === null || otherHandler === void 0 ? void 0 : otherHandler.setAwaiting(true);
|
134
|
+
}
|
135
|
+
});
|
136
|
+
handler.sendEvent(event, State.ACTIVE, State.BEGAN);
|
137
|
+
|
138
|
+
if (currentState !== State.ACTIVE) {
|
139
|
+
handler.sendEvent(event, State.END, State.ACTIVE);
|
140
|
+
|
141
|
+
if (currentState !== State.END) {
|
142
|
+
handler.sendEvent(event, State.UNDETERMINED, State.END);
|
143
|
+
}
|
144
|
+
}
|
145
|
+
|
146
|
+
if (handler.isAwaiting()) {
|
147
|
+
handler.setAwaiting(false);
|
148
|
+
handler.end(event);
|
149
|
+
}
|
150
|
+
|
151
|
+
this.handlersToCancel = [];
|
152
|
+
}
|
153
|
+
|
154
|
+
addAwaitingHandler(handler) {
|
155
|
+
let alreadyExists = false;
|
156
|
+
this.awaitingHandlers.forEach(otherHandler => {
|
157
|
+
if (otherHandler === handler) {
|
158
|
+
alreadyExists = true;
|
159
|
+
return;
|
160
|
+
}
|
161
|
+
});
|
162
|
+
|
163
|
+
if (alreadyExists) {
|
164
|
+
return;
|
165
|
+
}
|
166
|
+
|
167
|
+
this.awaitingHandlers.push(handler);
|
168
|
+
handler.setAwaiting(true);
|
169
|
+
handler.setActivationIndex(this.activationIndex++);
|
170
|
+
}
|
171
|
+
|
172
|
+
recordHandlerIfNotPresent(handler) {
|
173
|
+
let alreadyExists = false;
|
174
|
+
this.gestureHandlers.forEach(otherHandler => {
|
175
|
+
if (otherHandler === handler) {
|
176
|
+
alreadyExists = true;
|
177
|
+
return;
|
178
|
+
}
|
179
|
+
});
|
180
|
+
|
181
|
+
if (alreadyExists) {
|
182
|
+
return;
|
183
|
+
}
|
184
|
+
|
185
|
+
this.gestureHandlers.push(handler);
|
186
|
+
handler.setActive(false);
|
187
|
+
handler.setAwaiting(false);
|
188
|
+
handler.setActivationIndex(Number.MAX_SAFE_INTEGER);
|
189
|
+
}
|
190
|
+
|
191
|
+
shouldHandlerWaitForOther(handler, otherHandler) {
|
192
|
+
return handler !== otherHandler && (handler.shouldWaitForHandlerFailure(otherHandler) || otherHandler.shouldRequireToWaitForFailure(handler));
|
193
|
+
}
|
194
|
+
|
195
|
+
canRunSimultaneously(gh1, gh2) {
|
196
|
+
return gh1 === gh2 || gh1.shouldRecognizeSimultaneously(gh2) || gh2.shouldRecognizeSimultaneously(gh1);
|
197
|
+
}
|
198
|
+
|
199
|
+
shouldHandlerBeCancelledBy(handler, otherHandler) {
|
200
|
+
const handlerPointers = handler.getTrackedPointersID();
|
201
|
+
const otherPointers = otherHandler.getTrackedPointersID();
|
202
|
+
|
203
|
+
if (!PointerTracker.shareCommonPointers(handlerPointers, otherPointers) && handler.getView() !== otherHandler.getView()) {
|
204
|
+
return this.checkOverlap(handler, otherHandler);
|
205
|
+
}
|
206
|
+
|
207
|
+
if (this.canRunSimultaneously(handler, otherHandler)) {
|
208
|
+
return false;
|
209
|
+
}
|
210
|
+
|
211
|
+
if (handler !== otherHandler && (handler.isAwaiting() || handler.getState() === State.ACTIVE)) {
|
212
|
+
// For now it always returns false
|
213
|
+
return handler.shouldBeCancelledByOther(otherHandler);
|
214
|
+
}
|
215
|
+
|
216
|
+
return true;
|
217
|
+
}
|
218
|
+
|
219
|
+
checkOverlap(handler, otherHandler) {
|
220
|
+
// If handlers don't have common pointers, default return value is false.
|
221
|
+
// However, if at least on pointer overlaps with both handlers, we return true
|
222
|
+
// This solves issue in overlapping parents example
|
223
|
+
// TODO: Find better way to handle that issue, for example by activation order and handler cancelling
|
224
|
+
const handlerPointers = handler.getTrackedPointersID();
|
225
|
+
const otherPointers = otherHandler.getTrackedPointersID();
|
226
|
+
let overlap = false;
|
227
|
+
handlerPointers.forEach(pointer => {
|
228
|
+
const handlerX = handler.getTracker().getLastX(pointer);
|
229
|
+
const handlerY = handler.getTracker().getLastY(pointer);
|
230
|
+
|
231
|
+
if (handler.getEventManager().isPointerInBounds({
|
232
|
+
x: handlerX,
|
233
|
+
y: handlerY
|
234
|
+
}) && otherHandler.getEventManager().isPointerInBounds({
|
235
|
+
x: handlerX,
|
236
|
+
y: handlerY
|
237
|
+
})) {
|
238
|
+
overlap = true;
|
239
|
+
}
|
240
|
+
});
|
241
|
+
otherPointers.forEach(pointer => {
|
242
|
+
const otherX = otherHandler.getTracker().getLastX(pointer);
|
243
|
+
const otherY = otherHandler.getTracker().getLastY(pointer);
|
244
|
+
|
245
|
+
if (handler.getEventManager().isPointerInBounds({
|
246
|
+
x: otherX,
|
247
|
+
y: otherY
|
248
|
+
}) && otherHandler.getEventManager().isPointerInBounds({
|
249
|
+
x: otherX,
|
250
|
+
y: otherY
|
251
|
+
})) {
|
252
|
+
overlap = true;
|
253
|
+
}
|
254
|
+
});
|
255
|
+
return overlap;
|
256
|
+
}
|
257
|
+
|
258
|
+
isFinished(state) {
|
259
|
+
return state === State.END || state === State.FAILED || state === State.CANCELLED;
|
260
|
+
}
|
261
|
+
|
262
|
+
static getInstance() {
|
263
|
+
if (!GestureHandlerOrchestrator.instance) GestureHandlerOrchestrator.instance = new GestureHandlerOrchestrator();
|
264
|
+
return GestureHandlerOrchestrator.instance;
|
265
|
+
}
|
266
|
+
|
267
|
+
}
|
268
|
+
|
269
|
+
_defineProperty(GestureHandlerOrchestrator, "instance", void 0);
|
270
|
+
//# sourceMappingURL=GestureHandlerOrchestrator.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["GestureHandlerOrchestrator.ts"],"names":["State","PointerTracker","GestureHandlerOrchestrator","constructor","scheduleFinishedHandlersCleanup","handlingChangeSemaphore","cleanupFinishedHandlers","cleanHandler","handler","reset","setActive","setAwaiting","setActivationIndex","Number","MAX_VALUE","i","gestureHandlers","length","isFinished","getState","isAwaiting","splice","hasOtherHandlerToWaitFor","hasToWait","forEach","otherHandler","shouldHandlerWaitForOther","tryActivate","event","addAwaitingHandler","makeActive","cleanupAwaitingHandlers","awaitingHandlers","onHandlerStateChange","newState","oldState","END","cancel","ACTIVE","isActive","sendEvent","BEGAN","UNDETERMINED","CANCELLED","indexOf","currentState","setShouldResetProgress","activationIndex","shouldHandlerBeCancelledBy","handlersToCancel","push","end","alreadyExists","recordHandlerIfNotPresent","MAX_SAFE_INTEGER","shouldWaitForHandlerFailure","shouldRequireToWaitForFailure","canRunSimultaneously","gh1","gh2","shouldRecognizeSimultaneously","handlerPointers","getTrackedPointersID","otherPointers","shareCommonPointers","getView","checkOverlap","shouldBeCancelledByOther","overlap","pointer","handlerX","getTracker","getLastX","handlerY","getLastY","getEventManager","isPointerInBounds","x","y","otherX","otherY","state","FAILED","getInstance","instance"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { AdaptedPointerEvent } from '../interfaces';\n\nimport GestureHandler from '../handlers/GestureHandler';\nimport PointerTracker from './PointerTracker';\n\nexport default class GestureHandlerOrchestrator {\n private static instance: GestureHandlerOrchestrator;\n\n private gestureHandlers: GestureHandler[] = [];\n private awaitingHandlers: GestureHandler[] = [];\n private handlersToCancel: GestureHandler[] = [];\n\n private handlingChangeSemaphore = 0;\n private activationIndex = 0;\n\n // Private beacuse of Singleton\n // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n private constructor() {}\n\n private scheduleFinishedHandlersCleanup(): void {\n if (this.handlingChangeSemaphore === 0) {\n this.cleanupFinishedHandlers();\n }\n }\n\n private cleanHandler(handler: GestureHandler): void {\n handler.reset();\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_VALUE);\n }\n\n private cleanupFinishedHandlers(): void {\n for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {\n const handler = this.gestureHandlers[i];\n if (!handler) {\n continue;\n }\n\n if (this.isFinished(handler.getState()) && !handler.isAwaiting()) {\n this.gestureHandlers.splice(i, 1);\n\n this.cleanHandler(handler);\n }\n }\n }\n\n private hasOtherHandlerToWaitFor(handler: GestureHandler): boolean {\n let hasToWait = false;\n this.gestureHandlers.forEach((otherHandler) => {\n if (\n otherHandler &&\n !this.isFinished(otherHandler.getState()) &&\n this.shouldHandlerWaitForOther(handler, otherHandler)\n ) {\n hasToWait = true;\n return;\n }\n });\n\n return hasToWait;\n }\n\n private tryActivate(\n handler: GestureHandler,\n event: AdaptedPointerEvent\n ): void {\n if (this.hasOtherHandlerToWaitFor(handler)) {\n this.addAwaitingHandler(handler);\n } else {\n this.makeActive(handler, event);\n }\n }\n\n private cleanupAwaitingHandlers(handler: GestureHandler): void {\n for (let i = 0; i < this.awaitingHandlers.length; ++i) {\n if (\n !this.awaitingHandlers[i].isAwaiting() &&\n this.shouldHandlerWaitForOther(this.awaitingHandlers[i], handler)\n ) {\n this.cleanHandler(this.awaitingHandlers[i]);\n this.awaitingHandlers.splice(i, 1);\n }\n }\n }\n\n public onHandlerStateChange(\n handler: GestureHandler,\n newState: State,\n oldState: State,\n event: AdaptedPointerEvent\n ): void {\n this.handlingChangeSemaphore += 1;\n\n if (this.isFinished(newState)) {\n this.awaitingHandlers.forEach((otherHandler) => {\n if (this.shouldHandlerWaitForOther(otherHandler, handler)) {\n if (newState === State.END) {\n otherHandler?.cancel(event);\n otherHandler?.setAwaiting(false);\n } else {\n this.tryActivate(otherHandler, event);\n }\n }\n });\n }\n\n if (newState === State.ACTIVE) {\n this.tryActivate(handler, event);\n } else if (oldState === State.ACTIVE || oldState === State.END) {\n if (handler.isActive()) {\n handler.sendEvent(event, newState, oldState);\n } else if (oldState === State.ACTIVE) {\n handler.sendEvent(event, newState, State.BEGAN);\n }\n } else if (\n oldState !== State.UNDETERMINED ||\n newState !== State.CANCELLED\n ) {\n handler.sendEvent(event, newState, oldState);\n }\n\n this.handlingChangeSemaphore -= 1;\n\n this.scheduleFinishedHandlersCleanup();\n\n if (this.awaitingHandlers.indexOf(handler) < 0) {\n this.cleanupAwaitingHandlers(handler);\n }\n }\n\n private makeActive(\n handler: GestureHandler,\n event: AdaptedPointerEvent\n ): void {\n const currentState = handler.getState();\n\n handler.setActive(true);\n handler.setShouldResetProgress(true);\n handler.setActivationIndex(this.activationIndex++);\n\n this.gestureHandlers.forEach((otherHandler) => {\n // Order of arguments is correct - we check whether current handler should cancel existing handlers\n if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {\n this.handlersToCancel.push(otherHandler);\n }\n });\n\n for (let i = this.handlersToCancel.length - 1; i >= 0; --i) {\n this.handlersToCancel[i]?.cancel(event);\n }\n this.awaitingHandlers.forEach((otherHandler) => {\n if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {\n otherHandler?.cancel(event);\n otherHandler?.setAwaiting(true);\n }\n });\n\n handler.sendEvent(event, State.ACTIVE, State.BEGAN);\n\n if (currentState !== State.ACTIVE) {\n handler.sendEvent(event, State.END, State.ACTIVE);\n if (currentState !== State.END) {\n handler.sendEvent(event, State.UNDETERMINED, State.END);\n }\n }\n\n if (handler.isAwaiting()) {\n handler.setAwaiting(false);\n handler.end(event);\n }\n\n this.handlersToCancel = [];\n }\n\n private addAwaitingHandler(handler: GestureHandler): void {\n let alreadyExists = false;\n\n this.awaitingHandlers.forEach((otherHandler) => {\n if (otherHandler === handler) {\n alreadyExists = true;\n return;\n }\n });\n\n if (alreadyExists) {\n return;\n }\n\n this.awaitingHandlers.push(handler);\n\n handler.setAwaiting(true);\n handler.setActivationIndex(this.activationIndex++);\n }\n\n public recordHandlerIfNotPresent(handler: GestureHandler): void {\n let alreadyExists = false;\n\n this.gestureHandlers.forEach((otherHandler) => {\n if (otherHandler === handler) {\n alreadyExists = true;\n return;\n }\n });\n\n if (alreadyExists) {\n return;\n }\n\n this.gestureHandlers.push(handler);\n\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_SAFE_INTEGER);\n }\n\n private shouldHandlerWaitForOther(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n return (\n handler !== otherHandler &&\n (handler.shouldWaitForHandlerFailure(otherHandler) ||\n otherHandler.shouldRequireToWaitForFailure(handler))\n );\n }\n\n private canRunSimultaneously(\n gh1: GestureHandler,\n gh2: GestureHandler\n ): boolean {\n return (\n gh1 === gh2 ||\n gh1.shouldRecognizeSimultaneously(gh2) ||\n gh2.shouldRecognizeSimultaneously(gh1)\n );\n }\n\n private shouldHandlerBeCancelledBy(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n if (\n !PointerTracker.shareCommonPointers(handlerPointers, otherPointers) &&\n handler.getView() !== otherHandler.getView()\n ) {\n return this.checkOverlap(handler, otherHandler);\n }\n\n if (this.canRunSimultaneously(handler, otherHandler)) {\n return false;\n }\n\n if (\n handler !== otherHandler &&\n (handler.isAwaiting() || handler.getState() === State.ACTIVE)\n ) {\n // For now it always returns false\n return handler.shouldBeCancelledByOther(otherHandler);\n }\n\n return true;\n }\n\n private checkOverlap(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n // If handlers don't have common pointers, default return value is false.\n // However, if at least on pointer overlaps with both handlers, we return true\n // This solves issue in overlapping parents example\n\n // TODO: Find better way to handle that issue, for example by activation order and handler cancelling\n\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n let overlap = false;\n\n handlerPointers.forEach((pointer: number) => {\n const handlerX: number = handler.getTracker().getLastX(pointer);\n const handlerY: number = handler.getTracker().getLastY(pointer);\n\n if (\n handler\n .getEventManager()\n .isPointerInBounds({ x: handlerX, y: handlerY }) &&\n otherHandler\n .getEventManager()\n .isPointerInBounds({ x: handlerX, y: handlerY })\n ) {\n overlap = true;\n }\n });\n\n otherPointers.forEach((pointer: number) => {\n const otherX: number = otherHandler.getTracker().getLastX(pointer);\n const otherY: number = otherHandler.getTracker().getLastY(pointer);\n\n if (\n handler.getEventManager().isPointerInBounds({ x: otherX, y: otherY }) &&\n otherHandler\n .getEventManager()\n .isPointerInBounds({ x: otherX, y: otherY })\n ) {\n overlap = true;\n }\n });\n\n return overlap;\n }\n\n private isFinished(state: State): boolean {\n return (\n state === State.END || state === State.FAILED || state === State.CANCELLED\n );\n }\n\n public static getInstance(): GestureHandlerOrchestrator {\n if (!GestureHandlerOrchestrator.instance)\n GestureHandlerOrchestrator.instance = new GestureHandlerOrchestrator();\n\n return GestureHandlerOrchestrator.instance;\n }\n}\n"]}
|
@@ -0,0 +1,93 @@
|
|
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
|
+
export default class InteractionManager {
|
4
|
+
constructor() {
|
5
|
+
_defineProperty(this, "waitForRelations", new Map());
|
6
|
+
|
7
|
+
_defineProperty(this, "simultaneousRelations", new Map());
|
8
|
+
}
|
9
|
+
|
10
|
+
configureInteractions(handler, config) {
|
11
|
+
this.dropRelationsForHandlerWithTag(handler.getTag());
|
12
|
+
|
13
|
+
if (config.waitFor) {
|
14
|
+
const waitFor = [];
|
15
|
+
config.waitFor.forEach(handler => {
|
16
|
+
if (typeof handler === 'number') {
|
17
|
+
waitFor.push(handler);
|
18
|
+
} else {
|
19
|
+
waitFor.push(handler.handlerTag);
|
20
|
+
}
|
21
|
+
});
|
22
|
+
this.waitForRelations.set(handler.getTag(), waitFor);
|
23
|
+
}
|
24
|
+
|
25
|
+
if (config.simultaneousHandlers) {
|
26
|
+
const simultaneousHandlers = [];
|
27
|
+
config.simultaneousHandlers.forEach(handler => {
|
28
|
+
if (typeof handler === 'number') {
|
29
|
+
simultaneousHandlers.push(handler);
|
30
|
+
} else {
|
31
|
+
simultaneousHandlers.push(handler.handlerTag);
|
32
|
+
}
|
33
|
+
});
|
34
|
+
this.simultaneousRelations.set(handler.getTag(), simultaneousHandlers);
|
35
|
+
}
|
36
|
+
|
37
|
+
handler.setInteractionManager(this);
|
38
|
+
}
|
39
|
+
|
40
|
+
shouldWaitForHandlerFailure(handler, otherHandler) {
|
41
|
+
const waitFor = this.waitForRelations.get(handler.getTag());
|
42
|
+
|
43
|
+
if (!waitFor) {
|
44
|
+
return false;
|
45
|
+
}
|
46
|
+
|
47
|
+
let shouldWait = false;
|
48
|
+
waitFor.forEach(tag => {
|
49
|
+
if (tag === otherHandler.getTag()) {
|
50
|
+
shouldWait = true;
|
51
|
+
return; //Returns from callback
|
52
|
+
}
|
53
|
+
});
|
54
|
+
return shouldWait;
|
55
|
+
}
|
56
|
+
|
57
|
+
shouldRecognizeSimultaneously(handler, otherHandler) {
|
58
|
+
const simultaneousHandlers = this.simultaneousRelations.get(handler.getTag());
|
59
|
+
|
60
|
+
if (!simultaneousHandlers) {
|
61
|
+
return false;
|
62
|
+
}
|
63
|
+
|
64
|
+
let shouldRecognizeSimultaneously = false;
|
65
|
+
simultaneousHandlers.forEach(tag => {
|
66
|
+
if (tag === otherHandler.getTag()) {
|
67
|
+
shouldRecognizeSimultaneously = true;
|
68
|
+
return;
|
69
|
+
}
|
70
|
+
});
|
71
|
+
return shouldRecognizeSimultaneously;
|
72
|
+
}
|
73
|
+
|
74
|
+
shouldRequireHandlerToWaitForFailure(_handler, _otherHandler) {
|
75
|
+
return false;
|
76
|
+
}
|
77
|
+
|
78
|
+
shouldHandlerBeCancelledBy(_handler, _otherHandler) {
|
79
|
+
return false;
|
80
|
+
}
|
81
|
+
|
82
|
+
dropRelationsForHandlerWithTag(handlerTag) {
|
83
|
+
this.waitForRelations.delete(handlerTag);
|
84
|
+
this.simultaneousRelations.delete(handlerTag);
|
85
|
+
}
|
86
|
+
|
87
|
+
reset() {
|
88
|
+
this.waitForRelations.clear();
|
89
|
+
this.simultaneousRelations.clear();
|
90
|
+
}
|
91
|
+
|
92
|
+
}
|
93
|
+
//# sourceMappingURL=InteractionManager.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["InteractionManager.ts"],"names":["InteractionManager","Map","configureInteractions","handler","config","dropRelationsForHandlerWithTag","getTag","waitFor","forEach","push","handlerTag","waitForRelations","set","simultaneousHandlers","simultaneousRelations","setInteractionManager","shouldWaitForHandlerFailure","otherHandler","get","shouldWait","tag","shouldRecognizeSimultaneously","shouldRequireHandlerToWaitForFailure","_handler","_otherHandler","shouldHandlerBeCancelledBy","delete","reset","clear"],"mappings":"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","sourcesContent":["import GestureHandler from '../handlers/GestureHandler';\nimport { Config, Handler } from '../interfaces';\n\nexport default class InteractionManager {\n private readonly waitForRelations: Map<number, number[]> = new Map();\n private readonly simultaneousRelations: Map<number, number[]> = new Map();\n\n public configureInteractions(handler: GestureHandler, config: Config) {\n this.dropRelationsForHandlerWithTag(handler.getTag());\n\n if (config.waitFor) {\n const waitFor: number[] = [];\n config.waitFor.forEach((handler: Handler): void => {\n if (typeof handler === 'number') {\n waitFor.push(handler);\n } else {\n waitFor.push(handler.handlerTag);\n }\n });\n\n this.waitForRelations.set(handler.getTag(), waitFor);\n }\n\n if (config.simultaneousHandlers) {\n const simultaneousHandlers: number[] = [];\n config.simultaneousHandlers.forEach((handler: Handler): void => {\n if (typeof handler === 'number') {\n simultaneousHandlers.push(handler);\n } else {\n simultaneousHandlers.push(handler.handlerTag);\n }\n });\n\n this.simultaneousRelations.set(handler.getTag(), simultaneousHandlers);\n }\n handler.setInteractionManager(this);\n }\n\n public shouldWaitForHandlerFailure(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n const waitFor: number[] | undefined = this.waitForRelations.get(\n handler.getTag()\n );\n if (!waitFor) {\n return false;\n }\n\n let shouldWait = false;\n\n waitFor.forEach((tag: number): void => {\n if (tag === otherHandler.getTag()) {\n shouldWait = true;\n return; //Returns from callback\n }\n });\n\n return shouldWait;\n }\n\n public shouldRecognizeSimultaneously(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n const simultaneousHandlers:\n | number[]\n | undefined = this.simultaneousRelations.get(handler.getTag());\n if (!simultaneousHandlers) {\n return false;\n }\n\n let shouldRecognizeSimultaneously = false;\n\n simultaneousHandlers.forEach((tag: number): void => {\n if (tag === otherHandler.getTag()) {\n shouldRecognizeSimultaneously = true;\n return;\n }\n });\n\n return shouldRecognizeSimultaneously;\n }\n\n public shouldRequireHandlerToWaitForFailure(\n _handler: GestureHandler,\n _otherHandler: GestureHandler\n ): boolean {\n return false;\n }\n\n public shouldHandlerBeCancelledBy(\n _handler: GestureHandler,\n _otherHandler: GestureHandler\n ): boolean {\n return false;\n }\n\n public dropRelationsForHandlerWithTag(handlerTag: number): void {\n this.waitForRelations.delete(handlerTag);\n this.simultaneousRelations.delete(handlerTag);\n }\n\n public reset() {\n this.waitForRelations.clear();\n this.simultaneousRelations.clear();\n }\n}\n"]}
|
@@ -0,0 +1,39 @@
|
|
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-next-line @typescript-eslint/no-extraneous-class
|
4
|
+
export default class NodeManager {
|
5
|
+
static getHandler(tag) {
|
6
|
+
if (tag in this.gestures) {
|
7
|
+
return this.gestures[tag];
|
8
|
+
}
|
9
|
+
|
10
|
+
throw new Error(`No handler for tag ${tag}`);
|
11
|
+
}
|
12
|
+
|
13
|
+
static createGestureHandler(handlerTag, handler) {
|
14
|
+
if (handlerTag in this.gestures) {
|
15
|
+
throw new Error(`Handler with tag ${handlerTag} already exists`);
|
16
|
+
}
|
17
|
+
|
18
|
+
this.gestures[handlerTag] = handler;
|
19
|
+
this.gestures[handlerTag].setTag(handlerTag);
|
20
|
+
}
|
21
|
+
|
22
|
+
static dropGestureHandler(handlerTag) {
|
23
|
+
if (!(handlerTag in this.gestures)) {
|
24
|
+
return;
|
25
|
+
} // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
26
|
+
|
27
|
+
|
28
|
+
delete this.gestures[handlerTag];
|
29
|
+
}
|
30
|
+
|
31
|
+
static getNodes() {
|
32
|
+
return { ...this.gestures
|
33
|
+
};
|
34
|
+
}
|
35
|
+
|
36
|
+
}
|
37
|
+
|
38
|
+
_defineProperty(NodeManager, "gestures", {});
|
39
|
+
//# sourceMappingURL=NodeManager.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["NodeManager.ts"],"names":["NodeManager","getHandler","tag","gestures","Error","createGestureHandler","handlerTag","handler","setTag","dropGestureHandler","getNodes"],"mappings":";;AAGA;AACA,eAAe,MAAMA,WAAN,CAAkB;AAMd,SAAVC,UAAU,CAACC,GAAD,EAAc;AAC7B,QAAIA,GAAG,IAAI,KAAKC,QAAhB,EAA0B;AACxB,aAAO,KAAKA,QAAL,CAAcD,GAAd,CAAP;AACD;;AAED,UAAM,IAAIE,KAAJ,CAAW,sBAAqBF,GAAI,EAApC,CAAN;AACD;;AAE0B,SAApBG,oBAAoB,CACzBC,UADyB,EAEzBC,OAFyB,EAGzB;AACA,QAAID,UAAU,IAAI,KAAKH,QAAvB,EAAiC;AAC/B,YAAM,IAAIC,KAAJ,CAAW,oBAAmBE,UAAW,iBAAzC,CAAN;AACD;;AAED,SAAKH,QAAL,CAAcG,UAAd,IAA4BC,OAA5B;AACA,SAAKJ,QAAL,CAAcG,UAAd,EAA0BE,MAA1B,CAAiCF,UAAjC;AACD;;AAEwB,SAAlBG,kBAAkB,CAACH,UAAD,EAAqB;AAC5C,QAAI,EAAEA,UAAU,IAAI,KAAKH,QAArB,CAAJ,EAAoC;AAClC;AACD,KAH2C,CAK5C;;;AACA,WAAO,KAAKA,QAAL,CAAcG,UAAd,CAAP;AACD;;AAEc,SAARI,QAAQ,GAAG;AAChB,WAAO,EAAE,GAAG,KAAKP;AAAV,KAAP;AACD;;AArC8B;;gBAAZH,W,cAIf,E","sourcesContent":["import { ValueOf } from '../../typeUtils';\nimport { Gestures } from '../../RNGestureHandlerModule.web';\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport default class NodeManager {\n private static gestures: Record<\n number,\n InstanceType<ValueOf<typeof Gestures>>\n > = {};\n\n static getHandler(tag: number) {\n if (tag in this.gestures) {\n return this.gestures[tag];\n }\n\n throw new Error(`No handler for tag ${tag}`);\n }\n\n static createGestureHandler(\n handlerTag: number,\n handler: InstanceType<ValueOf<typeof Gestures>>\n ) {\n if (handlerTag in this.gestures) {\n throw new Error(`Handler with tag ${handlerTag} already exists`);\n }\n\n this.gestures[handlerTag] = handler;\n this.gestures[handlerTag].setTag(handlerTag);\n }\n\n static dropGestureHandler(handlerTag: number) {\n if (!(handlerTag in this.gestures)) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.gestures[handlerTag];\n }\n\n static getNodes() {\n return { ...this.gestures };\n }\n}\n"]}
|
@@ -0,0 +1,122 @@
|
|
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
|
+
const VELOCITY_FACTOR = 0.2;
|
4
|
+
export default class PointerTracker {
|
5
|
+
constructor() {
|
6
|
+
_defineProperty(this, "trackedPointers", new Map());
|
7
|
+
}
|
8
|
+
|
9
|
+
addToTracker(event) {
|
10
|
+
if (this.trackedPointers.has(event.pointerId)) {
|
11
|
+
return;
|
12
|
+
}
|
13
|
+
|
14
|
+
const newElement = {
|
15
|
+
lastX: event.x,
|
16
|
+
lastY: event.y,
|
17
|
+
timeStamp: event.time,
|
18
|
+
velocityX: 0,
|
19
|
+
velocityY: 0
|
20
|
+
};
|
21
|
+
this.trackedPointers.set(event.pointerId, newElement);
|
22
|
+
}
|
23
|
+
|
24
|
+
removeFromTracker(pointerId) {
|
25
|
+
this.trackedPointers.delete(pointerId);
|
26
|
+
}
|
27
|
+
|
28
|
+
track(event) {
|
29
|
+
const element = this.trackedPointers.get(event.pointerId);
|
30
|
+
|
31
|
+
if (!element) {
|
32
|
+
return;
|
33
|
+
}
|
34
|
+
|
35
|
+
const dx = event.x - element.lastX;
|
36
|
+
const dy = event.y - element.lastY;
|
37
|
+
const dt = event.time - element.timeStamp;
|
38
|
+
element.velocityX = dx / dt * 1000 * VELOCITY_FACTOR;
|
39
|
+
element.velocityY = dy / dt * 1000 * VELOCITY_FACTOR;
|
40
|
+
element.lastX = event.x;
|
41
|
+
element.lastY = event.y;
|
42
|
+
this.trackedPointers.set(event.pointerId, element);
|
43
|
+
}
|
44
|
+
|
45
|
+
getVelocityX(pointerId) {
|
46
|
+
var _this$trackedPointers;
|
47
|
+
|
48
|
+
return (_this$trackedPointers = this.trackedPointers.get(pointerId)) === null || _this$trackedPointers === void 0 ? void 0 : _this$trackedPointers.velocityX;
|
49
|
+
}
|
50
|
+
|
51
|
+
getVelocityY(pointerId) {
|
52
|
+
var _this$trackedPointers2;
|
53
|
+
|
54
|
+
return (_this$trackedPointers2 = this.trackedPointers.get(pointerId)) === null || _this$trackedPointers2 === void 0 ? void 0 : _this$trackedPointers2.velocityY;
|
55
|
+
}
|
56
|
+
|
57
|
+
getLastX(pointerId) {
|
58
|
+
var _this$trackedPointers3;
|
59
|
+
|
60
|
+
return (_this$trackedPointers3 = this.trackedPointers.get(pointerId)) === null || _this$trackedPointers3 === void 0 ? void 0 : _this$trackedPointers3.lastX;
|
61
|
+
}
|
62
|
+
|
63
|
+
getLastY(pointerId) {
|
64
|
+
var _this$trackedPointers4;
|
65
|
+
|
66
|
+
return (_this$trackedPointers4 = this.trackedPointers.get(pointerId)) === null || _this$trackedPointers4 === void 0 ? void 0 : _this$trackedPointers4.lastY;
|
67
|
+
}
|
68
|
+
|
69
|
+
getLastAvgX() {
|
70
|
+
return this.getSumX() / this.trackedPointers.size;
|
71
|
+
}
|
72
|
+
|
73
|
+
getLastAvgY() {
|
74
|
+
return this.getSumY() / this.trackedPointers.size;
|
75
|
+
}
|
76
|
+
|
77
|
+
getSumX(ignoredPointer) {
|
78
|
+
let sumX = 0;
|
79
|
+
this.trackedPointers.forEach((value, key) => {
|
80
|
+
if (key !== ignoredPointer) {
|
81
|
+
sumX += value.lastX;
|
82
|
+
}
|
83
|
+
});
|
84
|
+
return sumX;
|
85
|
+
}
|
86
|
+
|
87
|
+
getSumY(ignoredPointer) {
|
88
|
+
let sumY = 0;
|
89
|
+
this.trackedPointers.forEach((value, key) => {
|
90
|
+
if (key !== ignoredPointer) {
|
91
|
+
sumY += value.lastY;
|
92
|
+
}
|
93
|
+
});
|
94
|
+
return sumY;
|
95
|
+
}
|
96
|
+
|
97
|
+
getTrackedPointersCount() {
|
98
|
+
return this.trackedPointers.size;
|
99
|
+
}
|
100
|
+
|
101
|
+
getTrackedPointersID() {
|
102
|
+
const keys = [];
|
103
|
+
this.trackedPointers.forEach((_value, key) => {
|
104
|
+
keys.push(key);
|
105
|
+
});
|
106
|
+
return keys;
|
107
|
+
}
|
108
|
+
|
109
|
+
getData() {
|
110
|
+
return this.trackedPointers;
|
111
|
+
}
|
112
|
+
|
113
|
+
resetTracker() {
|
114
|
+
this.trackedPointers.clear();
|
115
|
+
}
|
116
|
+
|
117
|
+
static shareCommonPointers(stPointers, ndPointers) {
|
118
|
+
return stPointers.some(pointerId => ndPointers.includes(pointerId));
|
119
|
+
}
|
120
|
+
|
121
|
+
}
|
122
|
+
//# sourceMappingURL=PointerTracker.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["PointerTracker.ts"],"names":["VELOCITY_FACTOR","PointerTracker","Map","addToTracker","event","trackedPointers","has","pointerId","newElement","lastX","x","lastY","y","timeStamp","time","velocityX","velocityY","set","removeFromTracker","delete","track","element","get","dx","dy","dt","getVelocityX","getVelocityY","getLastX","getLastY","getLastAvgX","getSumX","size","getLastAvgY","getSumY","ignoredPointer","sumX","forEach","value","key","sumY","getTrackedPointersCount","getTrackedPointersID","keys","_value","push","getData","resetTracker","clear","shareCommonPointers","stPointers","ndPointers","some","includes"],"mappings":"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","sourcesContent":["import { AdaptedPointerEvent } from '../interfaces';\n\ninterface TrackerElement {\n lastX: number;\n lastY: number;\n\n timeStamp: number;\n\n velocityX: number;\n velocityY: number;\n}\n\nconst VELOCITY_FACTOR = 0.2;\n\nexport default class PointerTracker {\n private trackedPointers: Map<number, TrackerElement> = new Map<\n number,\n TrackerElement\n >();\n\n public addToTracker(event: AdaptedPointerEvent): void {\n if (this.trackedPointers.has(event.pointerId)) {\n return;\n }\n\n const newElement: TrackerElement = {\n lastX: event.x,\n lastY: event.y,\n timeStamp: event.time,\n velocityX: 0,\n velocityY: 0,\n };\n\n this.trackedPointers.set(event.pointerId, newElement);\n }\n\n public removeFromTracker(pointerId: number): void {\n this.trackedPointers.delete(pointerId);\n }\n\n public track(event: AdaptedPointerEvent): void {\n const element: TrackerElement = this.trackedPointers.get(\n event.pointerId\n ) as TrackerElement;\n\n if (!element) {\n return;\n }\n\n const dx = event.x - element.lastX;\n const dy = event.y - element.lastY;\n const dt = event.time - element.timeStamp;\n\n element.velocityX = (dx / dt) * 1000 * VELOCITY_FACTOR;\n element.velocityY = (dy / dt) * 1000 * VELOCITY_FACTOR;\n\n element.lastX = event.x;\n element.lastY = event.y;\n\n this.trackedPointers.set(event.pointerId, element);\n }\n\n public getVelocityX(pointerId: number): number {\n return this.trackedPointers.get(pointerId)?.velocityX as number;\n }\n public getVelocityY(pointerId: number): number {\n return this.trackedPointers.get(pointerId)?.velocityY as number;\n }\n public getLastX(pointerId: number): number {\n return this.trackedPointers.get(pointerId)?.lastX as number;\n }\n public getLastY(pointerId: number): number {\n return this.trackedPointers.get(pointerId)?.lastY as number;\n }\n public getLastAvgX(): number {\n return this.getSumX() / this.trackedPointers.size;\n }\n public getLastAvgY(): number {\n return this.getSumY() / this.trackedPointers.size;\n }\n public getSumX(ignoredPointer?: number): number {\n let sumX = 0;\n\n this.trackedPointers.forEach((value, key) => {\n if (key !== ignoredPointer) {\n sumX += value.lastX;\n }\n });\n\n return sumX;\n }\n public getSumY(ignoredPointer?: number): number {\n let sumY = 0;\n\n this.trackedPointers.forEach((value, key) => {\n if (key !== ignoredPointer) {\n sumY += value.lastY;\n }\n });\n\n return sumY;\n }\n public getTrackedPointersCount(): number {\n return this.trackedPointers.size;\n }\n public getTrackedPointersID(): number[] {\n const keys: number[] = [];\n\n this.trackedPointers.forEach((_value, key) => {\n keys.push(key);\n });\n\n return keys;\n }\n\n public getData(): Map<number, TrackerElement> {\n return this.trackedPointers;\n }\n\n public resetTracker(): void {\n this.trackedPointers.clear();\n }\n\n public static shareCommonPointers(\n stPointers: number[],\n ndPointers: number[]\n ): boolean {\n return stPointers.some((pointerId) => ndPointers.includes(pointerId));\n }\n}\n"]}
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|