react-native-gesture-handler 2.4.1 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +4 -2
- 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/GestureHandler.kt +9 -5
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +32 -6
- package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +5 -2
- package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +105 -23
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +30 -2
- 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/RNGestureHandlerButtonViewManager.kt +74 -84
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +7 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +5 -1
- package/android/src/main/jni/CMakeLists.txt +59 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +12 -9
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +1 -0
- package/ios/Handlers/RNFlingHandler.m +43 -1
- package/ios/Handlers/{RNNativeViewHandler.m → RNNativeViewHandler.mm} +13 -1
- package/ios/Handlers/RNPanHandler.m +27 -0
- package/ios/RNGestureHandler.h +1 -0
- package/ios/RNGestureHandler.m +22 -4
- package/ios/RNGestureHandlerButtonComponentView.mm +1 -1
- package/ios/RNGestureHandlerManager.mm +10 -7
- package/ios/RNGestureHandlerModule.mm +4 -1
- package/ios/RNGestureHandlerRootViewComponentView.mm +1 -1
- package/ios/RNManualActivationRecognizer.m +10 -3
- package/ios/RNRootViewGestureRecognizer.m +12 -1
- package/lib/commonjs/EnableExperimentalWebImplementation.js +24 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -0
- package/lib/commonjs/RNGestureHandlerModule.macos.js +138 -0
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -0
- 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 +41 -12
- 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 +5 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js +2 -1
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PressabilityDebugView.js +14 -0
- package/lib/commonjs/handlers/PressabilityDebugView.js.map +1 -0
- package/lib/commonjs/handlers/PressabilityDebugView.web.js +12 -0
- package/lib/commonjs/handlers/PressabilityDebugView.web.js.map +1 -0
- package/lib/commonjs/handlers/createHandler.js +33 -12
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +150 -75
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js +13 -2
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +13 -9
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/commonjs/handlers/gestures/panGesture.js +5 -0
- package/lib/commonjs/handlers/gestures/panGesture.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/utils.js +6 -3
- package/lib/commonjs/utils.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 +1 -1
- package/lib/module/EnableExperimentalWebImplementation.js +15 -0
- package/lib/module/EnableExperimentalWebImplementation.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.macos.js +102 -0
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -0
- 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 +41 -12
- 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 +5 -1
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/module/handlers/ForceTouchGestureHandler.js +1 -1
- package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/module/handlers/PanGestureHandler.js +1 -1
- package/lib/module/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/handlers/PressabilityDebugView.js +3 -0
- package/lib/module/handlers/PressabilityDebugView.js.map +1 -0
- package/lib/module/handlers/PressabilityDebugView.web.js +5 -0
- package/lib/module/handlers/PressabilityDebugView.web.js.map +1 -0
- package/lib/module/handlers/createHandler.js +35 -14
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +147 -74
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js +13 -2
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js +13 -9
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/module/handlers/gestures/panGesture.js +5 -0
- package/lib/module/handlers/gestures/panGesture.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/utils.js +2 -1
- package/lib/module/utils.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 +1 -1
- package/lib/typescript/EnableExperimentalWebImplementation.d.ts +2 -0
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +44 -0
- 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 +4 -1
- package/lib/typescript/components/GestureButtons.d.ts +22 -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/fabric/RNGestureHandlerButtonNativeComponent.d.ts +1 -0
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -1
- package/lib/typescript/handlers/PressabilityDebugView.d.ts +1 -0
- package/lib/typescript/handlers/PressabilityDebugView.web.d.ts +1 -0
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
- package/lib/typescript/handlers/gestures/gesture.d.ts +3 -0
- package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -0
- 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 +114 -0
- 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 +37 -14
- package/src/components/GestureButtons.tsx +64 -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 +2 -0
- package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +1 -0
- package/src/handlers/ForceTouchGestureHandler.ts +3 -2
- package/src/handlers/PanGestureHandler.ts +2 -0
- package/src/handlers/PressabilityDebugView.tsx +2 -0
- package/src/handlers/PressabilityDebugView.web.tsx +4 -0
- package/src/handlers/{createHandler.ts → createHandler.tsx} +45 -19
- package/src/handlers/gestureHandlerCommon.ts +2 -0
- package/src/handlers/gestures/GestureDetector.tsx +185 -93
- package/src/handlers/gestures/gesture.ts +16 -0
- package/src/handlers/gestures/gestureStateManager.ts +13 -8
- package/src/handlers/gestures/panGesture.ts +5 -0
- package/src/handlers/gestures/reanimatedWrapper.ts +7 -0
- package/src/index.ts +3 -0
- package/src/utils.ts +3 -1
- 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 +1 -1
- package/android/src/main/jni/Android.mk +0 -53
- 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/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
- 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,169 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.default = void 0;
|
7
|
+
|
8
|
+
var _interfaces = require("../interfaces");
|
9
|
+
|
10
|
+
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; }
|
11
|
+
|
12
|
+
class EventManager {
|
13
|
+
constructor(view) {
|
14
|
+
_defineProperty(this, "activePointers", []);
|
15
|
+
|
16
|
+
_defineProperty(this, "view", void 0);
|
17
|
+
|
18
|
+
this.view = view;
|
19
|
+
}
|
20
|
+
|
21
|
+
setListeners() {
|
22
|
+
this.view.addEventListener('pointerdown', event => {
|
23
|
+
if (!this.isPointerInBounds({
|
24
|
+
x: event.clientX,
|
25
|
+
y: event.clientY
|
26
|
+
})) {
|
27
|
+
return;
|
28
|
+
}
|
29
|
+
|
30
|
+
const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.DOWN);
|
31
|
+
const target = event.target;
|
32
|
+
target.setPointerCapture(adaptedEvent.pointerId);
|
33
|
+
this.addActivePointer(adaptedEvent.pointerId);
|
34
|
+
this.onPointerDown(adaptedEvent);
|
35
|
+
});
|
36
|
+
this.view.addEventListener('pointerup', event => {
|
37
|
+
const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.UP);
|
38
|
+
const target = event.target;
|
39
|
+
this.onPointerUp(adaptedEvent);
|
40
|
+
target.releasePointerCapture(adaptedEvent.pointerId);
|
41
|
+
this.removeActivePointer(adaptedEvent.pointerId);
|
42
|
+
});
|
43
|
+
this.view.addEventListener('pointermove', event => {
|
44
|
+
if (event.pointerType === 'mouse' && event.buttons !== _interfaces.MouseButtons.LEFT) {
|
45
|
+
return;
|
46
|
+
}
|
47
|
+
|
48
|
+
const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.MOVE);
|
49
|
+
const inBounds = this.isPointerInBounds({
|
50
|
+
x: adaptedEvent.x,
|
51
|
+
y: adaptedEvent.y
|
52
|
+
});
|
53
|
+
const pointerIndex = this.activePointers.indexOf(adaptedEvent.pointerId);
|
54
|
+
|
55
|
+
if (inBounds) {
|
56
|
+
if (pointerIndex < 0) {
|
57
|
+
adaptedEvent.eventType = _interfaces.EventTypes.ENTER;
|
58
|
+
this.onPointerEnter(adaptedEvent);
|
59
|
+
this.addActivePointer(adaptedEvent.pointerId);
|
60
|
+
} else {
|
61
|
+
this.onPointerMove(adaptedEvent);
|
62
|
+
}
|
63
|
+
} else {
|
64
|
+
if (pointerIndex >= 0) {
|
65
|
+
adaptedEvent.eventType = _interfaces.EventTypes.OUT;
|
66
|
+
this.onPointerOut(adaptedEvent);
|
67
|
+
this.removeActivePointer(adaptedEvent.pointerId);
|
68
|
+
} else {
|
69
|
+
this.onPointerOutOfBounds(adaptedEvent);
|
70
|
+
}
|
71
|
+
}
|
72
|
+
});
|
73
|
+
this.view.addEventListener('pointercancel', event => {
|
74
|
+
event.preventDefault();
|
75
|
+
const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.CANCEL);
|
76
|
+
this.onPointerCancel(adaptedEvent);
|
77
|
+
});
|
78
|
+
}
|
79
|
+
|
80
|
+
onPointerDown(_event) {}
|
81
|
+
|
82
|
+
onPointerUp(_event) {}
|
83
|
+
|
84
|
+
onPointerMove(_event) {}
|
85
|
+
|
86
|
+
onPointerOut(_event) {}
|
87
|
+
|
88
|
+
onPointerEnter(_event) {}
|
89
|
+
|
90
|
+
onPointerCancel(_event) {}
|
91
|
+
|
92
|
+
onPointerOutOfBounds(_event) {}
|
93
|
+
|
94
|
+
setOnPointerDown(callback) {
|
95
|
+
this.onPointerDown = callback;
|
96
|
+
}
|
97
|
+
|
98
|
+
setOnPointerUp(callback) {
|
99
|
+
this.onPointerUp = callback;
|
100
|
+
}
|
101
|
+
|
102
|
+
setOnPointerMove(callback) {
|
103
|
+
this.onPointerMove = callback;
|
104
|
+
}
|
105
|
+
|
106
|
+
setOnPointerOut(callback) {
|
107
|
+
this.onPointerOut = callback;
|
108
|
+
}
|
109
|
+
|
110
|
+
setOnPointerEnter(callback) {
|
111
|
+
this.onPointerEnter = callback;
|
112
|
+
}
|
113
|
+
|
114
|
+
setOnPointerCancel(callback) {
|
115
|
+
this.onPointerCancel = callback;
|
116
|
+
}
|
117
|
+
|
118
|
+
setOnPointerOutOfBounds(callback) {
|
119
|
+
this.onPointerOutOfBounds = callback;
|
120
|
+
}
|
121
|
+
|
122
|
+
mapEvent(event, eventType) {
|
123
|
+
return {
|
124
|
+
x: event.clientX,
|
125
|
+
y: event.clientY,
|
126
|
+
offsetX: event.offsetX,
|
127
|
+
offsetY: event.offsetY,
|
128
|
+
pointerId: event.pointerId,
|
129
|
+
eventType: eventType,
|
130
|
+
pointerType: event.pointerType,
|
131
|
+
buttons: event.buttons,
|
132
|
+
time: event.timeStamp
|
133
|
+
};
|
134
|
+
}
|
135
|
+
|
136
|
+
isPointerInBounds({
|
137
|
+
x,
|
138
|
+
y
|
139
|
+
}) {
|
140
|
+
if (!this.view) {
|
141
|
+
return false;
|
142
|
+
}
|
143
|
+
|
144
|
+
const rect = this.view.getBoundingClientRect();
|
145
|
+
return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
|
146
|
+
}
|
147
|
+
|
148
|
+
addActivePointer(pointerId) {
|
149
|
+
if (this.activePointers.indexOf(pointerId) >= 0) {
|
150
|
+
return;
|
151
|
+
}
|
152
|
+
|
153
|
+
this.activePointers.push(pointerId);
|
154
|
+
}
|
155
|
+
|
156
|
+
removeActivePointer(pointerId) {
|
157
|
+
const index = this.activePointers.indexOf(pointerId);
|
158
|
+
|
159
|
+
if (index < 0) {
|
160
|
+
return;
|
161
|
+
}
|
162
|
+
|
163
|
+
this.activePointers.splice(index, 1);
|
164
|
+
}
|
165
|
+
|
166
|
+
}
|
167
|
+
|
168
|
+
exports.default = EventManager;
|
169
|
+
//# sourceMappingURL=EventManager.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["EventManager.ts"],"names":["EventManager","constructor","view","setListeners","addEventListener","event","isPointerInBounds","x","clientX","y","clientY","adaptedEvent","mapEvent","EventTypes","DOWN","target","setPointerCapture","pointerId","addActivePointer","onPointerDown","UP","onPointerUp","releasePointerCapture","removeActivePointer","pointerType","buttons","MouseButtons","LEFT","MOVE","inBounds","pointerIndex","activePointers","indexOf","eventType","ENTER","onPointerEnter","onPointerMove","OUT","onPointerOut","onPointerOutOfBounds","preventDefault","CANCEL","onPointerCancel","_event","setOnPointerDown","callback","setOnPointerUp","setOnPointerMove","setOnPointerOut","setOnPointerEnter","setOnPointerCancel","setOnPointerOutOfBounds","offsetX","offsetY","time","timeStamp","rect","getBoundingClientRect","left","right","top","bottom","push","index","splice"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-function */\n\nimport { EventTypes, AdaptedPointerEvent, MouseButtons } from '../interfaces';\n\nexport default class EventManager {\n private activePointers: number[] = [];\n private readonly view: HTMLElement;\n\n constructor(view: HTMLElement) {\n this.view = view;\n }\n\n public setListeners() {\n this.view.addEventListener('pointerdown', (event: PointerEvent): void => {\n if (\n !this.isPointerInBounds({\n x: event.clientX,\n y: event.clientY,\n })\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedPointerEvent = this.mapEvent(\n event,\n EventTypes.DOWN\n );\n const target = event.target as HTMLElement;\n\n target.setPointerCapture(adaptedEvent.pointerId);\n this.addActivePointer(adaptedEvent.pointerId);\n this.onPointerDown(adaptedEvent);\n });\n\n this.view.addEventListener('pointerup', (event: PointerEvent): void => {\n const adaptedEvent: AdaptedPointerEvent = this.mapEvent(\n event,\n EventTypes.UP\n );\n const target = event.target as HTMLElement;\n\n this.onPointerUp(adaptedEvent);\n target.releasePointerCapture(adaptedEvent.pointerId);\n this.removeActivePointer(adaptedEvent.pointerId);\n });\n\n this.view.addEventListener('pointermove', (event: PointerEvent): void => {\n if (\n event.pointerType === 'mouse' &&\n event.buttons !== MouseButtons.LEFT\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedPointerEvent = this.mapEvent(\n event,\n EventTypes.MOVE\n );\n\n const inBounds: boolean = this.isPointerInBounds({\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.activePointers.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.addActivePointer(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.OUT;\n this.onPointerOut(adaptedEvent);\n this.removeActivePointer(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('pointercancel', (event: PointerEvent): void => {\n event.preventDefault();\n\n const adaptedEvent: AdaptedPointerEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n this.onPointerCancel(adaptedEvent);\n });\n }\n\n private onPointerDown(_event: AdaptedPointerEvent): void {}\n private onPointerUp(_event: AdaptedPointerEvent): void {}\n private onPointerMove(_event: AdaptedPointerEvent): void {}\n private onPointerOut(_event: AdaptedPointerEvent): void {}\n private onPointerEnter(_event: AdaptedPointerEvent): void {}\n private onPointerCancel(_event: AdaptedPointerEvent): void {}\n private onPointerOutOfBounds(_event: AdaptedPointerEvent): void {}\n\n public setOnPointerDown(\n callback: (event: AdaptedPointerEvent) => void\n ): void {\n this.onPointerDown = callback;\n }\n public setOnPointerUp(callback: (event: AdaptedPointerEvent) => void): void {\n this.onPointerUp = callback;\n }\n public setOnPointerMove(\n callback: (event: AdaptedPointerEvent) => void\n ): void {\n this.onPointerMove = callback;\n }\n public setOnPointerOut(callback: (event: AdaptedPointerEvent) => void): void {\n this.onPointerOut = callback;\n }\n public setOnPointerEnter(\n callback: (event: AdaptedPointerEvent) => void\n ): void {\n this.onPointerEnter = callback;\n }\n public setOnPointerCancel(\n callback: (event: AdaptedPointerEvent) => void\n ): void {\n this.onPointerCancel = callback;\n }\n public setOnPointerOutOfBounds(\n callback: (event: AdaptedPointerEvent) => void\n ): void {\n this.onPointerOutOfBounds = callback;\n }\n\n private mapEvent(\n event: PointerEvent,\n eventType: EventTypes\n ): AdaptedPointerEvent {\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n pointerId: event.pointerId,\n eventType: eventType,\n pointerType: event.pointerType,\n buttons: event.buttons,\n time: event.timeStamp,\n };\n }\n\n public isPointerInBounds({ x, y }: { x: number; y: number }): boolean {\n if (!this.view) {\n return false;\n }\n\n const rect: DOMRect = this.view.getBoundingClientRect();\n\n return (\n x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom\n );\n }\n\n private addActivePointer(pointerId: number): void {\n if (this.activePointers.indexOf(pointerId) >= 0) {\n return;\n }\n\n this.activePointers.push(pointerId);\n }\n\n private removeActivePointer(pointerId: number): void {\n const index: number = this.activePointers.indexOf(pointerId);\n\n if (index < 0) {\n return;\n }\n\n this.activePointers.splice(index, 1);\n }\n}\n"]}
|
@@ -0,0 +1,283 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.default = void 0;
|
7
|
+
|
8
|
+
var _State = require("../../State");
|
9
|
+
|
10
|
+
var _PointerTracker = _interopRequireDefault(require("./PointerTracker"));
|
11
|
+
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
13
|
+
|
14
|
+
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; }
|
15
|
+
|
16
|
+
class GestureHandlerOrchestrator {
|
17
|
+
// Private beacuse of Singleton
|
18
|
+
// eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function
|
19
|
+
constructor() {
|
20
|
+
_defineProperty(this, "gestureHandlers", []);
|
21
|
+
|
22
|
+
_defineProperty(this, "awaitingHandlers", []);
|
23
|
+
|
24
|
+
_defineProperty(this, "handlersToCancel", []);
|
25
|
+
|
26
|
+
_defineProperty(this, "handlingChangeSemaphore", 0);
|
27
|
+
|
28
|
+
_defineProperty(this, "activationIndex", 0);
|
29
|
+
}
|
30
|
+
|
31
|
+
scheduleFinishedHandlersCleanup() {
|
32
|
+
if (this.handlingChangeSemaphore === 0) {
|
33
|
+
this.cleanupFinishedHandlers();
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
cleanHandler(handler) {
|
38
|
+
handler.reset();
|
39
|
+
handler.setActive(false);
|
40
|
+
handler.setAwaiting(false);
|
41
|
+
handler.setActivationIndex(Number.MAX_VALUE);
|
42
|
+
}
|
43
|
+
|
44
|
+
cleanupFinishedHandlers() {
|
45
|
+
for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
|
46
|
+
const handler = this.gestureHandlers[i];
|
47
|
+
|
48
|
+
if (!handler) {
|
49
|
+
continue;
|
50
|
+
}
|
51
|
+
|
52
|
+
if (this.isFinished(handler.getState()) && !handler.isAwaiting()) {
|
53
|
+
this.gestureHandlers.splice(i, 1);
|
54
|
+
this.cleanHandler(handler);
|
55
|
+
}
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
hasOtherHandlerToWaitFor(handler) {
|
60
|
+
let hasToWait = false;
|
61
|
+
this.gestureHandlers.forEach(otherHandler => {
|
62
|
+
if (otherHandler && !this.isFinished(otherHandler.getState()) && this.shouldHandlerWaitForOther(handler, otherHandler)) {
|
63
|
+
hasToWait = true;
|
64
|
+
return;
|
65
|
+
}
|
66
|
+
});
|
67
|
+
return hasToWait;
|
68
|
+
}
|
69
|
+
|
70
|
+
tryActivate(handler, event) {
|
71
|
+
if (this.hasOtherHandlerToWaitFor(handler)) {
|
72
|
+
this.addAwaitingHandler(handler);
|
73
|
+
} else {
|
74
|
+
this.makeActive(handler, event);
|
75
|
+
}
|
76
|
+
}
|
77
|
+
|
78
|
+
cleanupAwaitingHandlers(handler) {
|
79
|
+
for (let i = 0; i < this.awaitingHandlers.length; ++i) {
|
80
|
+
if (!this.awaitingHandlers[i].isAwaiting() && this.shouldHandlerWaitForOther(this.awaitingHandlers[i], handler)) {
|
81
|
+
this.cleanHandler(this.awaitingHandlers[i]);
|
82
|
+
this.awaitingHandlers.splice(i, 1);
|
83
|
+
}
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
onHandlerStateChange(handler, newState, oldState, event) {
|
88
|
+
this.handlingChangeSemaphore += 1;
|
89
|
+
|
90
|
+
if (this.isFinished(newState)) {
|
91
|
+
this.awaitingHandlers.forEach(otherHandler => {
|
92
|
+
if (this.shouldHandlerWaitForOther(otherHandler, handler)) {
|
93
|
+
if (newState === _State.State.END) {
|
94
|
+
otherHandler === null || otherHandler === void 0 ? void 0 : otherHandler.cancel(event);
|
95
|
+
otherHandler === null || otherHandler === void 0 ? void 0 : otherHandler.setAwaiting(false);
|
96
|
+
} else {
|
97
|
+
this.tryActivate(otherHandler, event);
|
98
|
+
}
|
99
|
+
}
|
100
|
+
});
|
101
|
+
}
|
102
|
+
|
103
|
+
if (newState === _State.State.ACTIVE) {
|
104
|
+
this.tryActivate(handler, event);
|
105
|
+
} else if (oldState === _State.State.ACTIVE || oldState === _State.State.END) {
|
106
|
+
if (handler.isActive()) {
|
107
|
+
handler.sendEvent(event, newState, oldState);
|
108
|
+
} else if (oldState === _State.State.ACTIVE) {
|
109
|
+
handler.sendEvent(event, newState, _State.State.BEGAN);
|
110
|
+
}
|
111
|
+
} else if (oldState !== _State.State.UNDETERMINED || newState !== _State.State.CANCELLED) {
|
112
|
+
handler.sendEvent(event, newState, oldState);
|
113
|
+
}
|
114
|
+
|
115
|
+
this.handlingChangeSemaphore -= 1;
|
116
|
+
this.scheduleFinishedHandlersCleanup();
|
117
|
+
|
118
|
+
if (this.awaitingHandlers.indexOf(handler) < 0) {
|
119
|
+
this.cleanupAwaitingHandlers(handler);
|
120
|
+
}
|
121
|
+
}
|
122
|
+
|
123
|
+
makeActive(handler, event) {
|
124
|
+
const currentState = handler.getState();
|
125
|
+
handler.setActive(true);
|
126
|
+
handler.setShouldResetProgress(true);
|
127
|
+
handler.setActivationIndex(this.activationIndex++);
|
128
|
+
this.gestureHandlers.forEach(otherHandler => {
|
129
|
+
// Order of arguments is correct - we check whether current handler should cancel existing handlers
|
130
|
+
if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
|
131
|
+
this.handlersToCancel.push(otherHandler);
|
132
|
+
}
|
133
|
+
});
|
134
|
+
|
135
|
+
for (let i = this.handlersToCancel.length - 1; i >= 0; --i) {
|
136
|
+
var _this$handlersToCance;
|
137
|
+
|
138
|
+
(_this$handlersToCance = this.handlersToCancel[i]) === null || _this$handlersToCance === void 0 ? void 0 : _this$handlersToCance.cancel(event);
|
139
|
+
}
|
140
|
+
|
141
|
+
this.awaitingHandlers.forEach(otherHandler => {
|
142
|
+
if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
|
143
|
+
otherHandler === null || otherHandler === void 0 ? void 0 : otherHandler.cancel(event);
|
144
|
+
otherHandler === null || otherHandler === void 0 ? void 0 : otherHandler.setAwaiting(true);
|
145
|
+
}
|
146
|
+
});
|
147
|
+
handler.sendEvent(event, _State.State.ACTIVE, _State.State.BEGAN);
|
148
|
+
|
149
|
+
if (currentState !== _State.State.ACTIVE) {
|
150
|
+
handler.sendEvent(event, _State.State.END, _State.State.ACTIVE);
|
151
|
+
|
152
|
+
if (currentState !== _State.State.END) {
|
153
|
+
handler.sendEvent(event, _State.State.UNDETERMINED, _State.State.END);
|
154
|
+
}
|
155
|
+
}
|
156
|
+
|
157
|
+
if (handler.isAwaiting()) {
|
158
|
+
handler.setAwaiting(false);
|
159
|
+
handler.end(event);
|
160
|
+
}
|
161
|
+
|
162
|
+
this.handlersToCancel = [];
|
163
|
+
}
|
164
|
+
|
165
|
+
addAwaitingHandler(handler) {
|
166
|
+
let alreadyExists = false;
|
167
|
+
this.awaitingHandlers.forEach(otherHandler => {
|
168
|
+
if (otherHandler === handler) {
|
169
|
+
alreadyExists = true;
|
170
|
+
return;
|
171
|
+
}
|
172
|
+
});
|
173
|
+
|
174
|
+
if (alreadyExists) {
|
175
|
+
return;
|
176
|
+
}
|
177
|
+
|
178
|
+
this.awaitingHandlers.push(handler);
|
179
|
+
handler.setAwaiting(true);
|
180
|
+
handler.setActivationIndex(this.activationIndex++);
|
181
|
+
}
|
182
|
+
|
183
|
+
recordHandlerIfNotPresent(handler) {
|
184
|
+
let alreadyExists = false;
|
185
|
+
this.gestureHandlers.forEach(otherHandler => {
|
186
|
+
if (otherHandler === handler) {
|
187
|
+
alreadyExists = true;
|
188
|
+
return;
|
189
|
+
}
|
190
|
+
});
|
191
|
+
|
192
|
+
if (alreadyExists) {
|
193
|
+
return;
|
194
|
+
}
|
195
|
+
|
196
|
+
this.gestureHandlers.push(handler);
|
197
|
+
handler.setActive(false);
|
198
|
+
handler.setAwaiting(false);
|
199
|
+
handler.setActivationIndex(Number.MAX_SAFE_INTEGER);
|
200
|
+
}
|
201
|
+
|
202
|
+
shouldHandlerWaitForOther(handler, otherHandler) {
|
203
|
+
return handler !== otherHandler && (handler.shouldWaitForHandlerFailure(otherHandler) || otherHandler.shouldRequireToWaitForFailure(handler));
|
204
|
+
}
|
205
|
+
|
206
|
+
canRunSimultaneously(gh1, gh2) {
|
207
|
+
return gh1 === gh2 || gh1.shouldRecognizeSimultaneously(gh2) || gh2.shouldRecognizeSimultaneously(gh1);
|
208
|
+
}
|
209
|
+
|
210
|
+
shouldHandlerBeCancelledBy(handler, otherHandler) {
|
211
|
+
const handlerPointers = handler.getTrackedPointersID();
|
212
|
+
const otherPointers = otherHandler.getTrackedPointersID();
|
213
|
+
|
214
|
+
if (!_PointerTracker.default.shareCommonPointers(handlerPointers, otherPointers) && handler.getView() !== otherHandler.getView()) {
|
215
|
+
return this.checkOverlap(handler, otherHandler);
|
216
|
+
}
|
217
|
+
|
218
|
+
if (this.canRunSimultaneously(handler, otherHandler)) {
|
219
|
+
return false;
|
220
|
+
}
|
221
|
+
|
222
|
+
if (handler !== otherHandler && (handler.isAwaiting() || handler.getState() === _State.State.ACTIVE)) {
|
223
|
+
// For now it always returns false
|
224
|
+
return handler.shouldBeCancelledByOther(otherHandler);
|
225
|
+
}
|
226
|
+
|
227
|
+
return true;
|
228
|
+
}
|
229
|
+
|
230
|
+
checkOverlap(handler, otherHandler) {
|
231
|
+
// If handlers don't have common pointers, default return value is false.
|
232
|
+
// However, if at least on pointer overlaps with both handlers, we return true
|
233
|
+
// This solves issue in overlapping parents example
|
234
|
+
// TODO: Find better way to handle that issue, for example by activation order and handler cancelling
|
235
|
+
const handlerPointers = handler.getTrackedPointersID();
|
236
|
+
const otherPointers = otherHandler.getTrackedPointersID();
|
237
|
+
let overlap = false;
|
238
|
+
handlerPointers.forEach(pointer => {
|
239
|
+
const handlerX = handler.getTracker().getLastX(pointer);
|
240
|
+
const handlerY = handler.getTracker().getLastY(pointer);
|
241
|
+
|
242
|
+
if (handler.getEventManager().isPointerInBounds({
|
243
|
+
x: handlerX,
|
244
|
+
y: handlerY
|
245
|
+
}) && otherHandler.getEventManager().isPointerInBounds({
|
246
|
+
x: handlerX,
|
247
|
+
y: handlerY
|
248
|
+
})) {
|
249
|
+
overlap = true;
|
250
|
+
}
|
251
|
+
});
|
252
|
+
otherPointers.forEach(pointer => {
|
253
|
+
const otherX = otherHandler.getTracker().getLastX(pointer);
|
254
|
+
const otherY = otherHandler.getTracker().getLastY(pointer);
|
255
|
+
|
256
|
+
if (handler.getEventManager().isPointerInBounds({
|
257
|
+
x: otherX,
|
258
|
+
y: otherY
|
259
|
+
}) && otherHandler.getEventManager().isPointerInBounds({
|
260
|
+
x: otherX,
|
261
|
+
y: otherY
|
262
|
+
})) {
|
263
|
+
overlap = true;
|
264
|
+
}
|
265
|
+
});
|
266
|
+
return overlap;
|
267
|
+
}
|
268
|
+
|
269
|
+
isFinished(state) {
|
270
|
+
return state === _State.State.END || state === _State.State.FAILED || state === _State.State.CANCELLED;
|
271
|
+
}
|
272
|
+
|
273
|
+
static getInstance() {
|
274
|
+
if (!GestureHandlerOrchestrator.instance) GestureHandlerOrchestrator.instance = new GestureHandlerOrchestrator();
|
275
|
+
return GestureHandlerOrchestrator.instance;
|
276
|
+
}
|
277
|
+
|
278
|
+
}
|
279
|
+
|
280
|
+
exports.default = GestureHandlerOrchestrator;
|
281
|
+
|
282
|
+
_defineProperty(GestureHandlerOrchestrator, "instance", void 0);
|
283
|
+
//# sourceMappingURL=GestureHandlerOrchestrator.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["GestureHandlerOrchestrator.ts"],"names":["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","State","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","PointerTracker","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,102 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.default = void 0;
|
7
|
+
|
8
|
+
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; }
|
9
|
+
|
10
|
+
class InteractionManager {
|
11
|
+
constructor() {
|
12
|
+
_defineProperty(this, "waitForRelations", new Map());
|
13
|
+
|
14
|
+
_defineProperty(this, "simultaneousRelations", new Map());
|
15
|
+
}
|
16
|
+
|
17
|
+
configureInteractions(handler, config) {
|
18
|
+
this.dropRelationsForHandlerWithTag(handler.getTag());
|
19
|
+
|
20
|
+
if (config.waitFor) {
|
21
|
+
const waitFor = [];
|
22
|
+
config.waitFor.forEach(handler => {
|
23
|
+
if (typeof handler === 'number') {
|
24
|
+
waitFor.push(handler);
|
25
|
+
} else {
|
26
|
+
waitFor.push(handler.handlerTag);
|
27
|
+
}
|
28
|
+
});
|
29
|
+
this.waitForRelations.set(handler.getTag(), waitFor);
|
30
|
+
}
|
31
|
+
|
32
|
+
if (config.simultaneousHandlers) {
|
33
|
+
const simultaneousHandlers = [];
|
34
|
+
config.simultaneousHandlers.forEach(handler => {
|
35
|
+
if (typeof handler === 'number') {
|
36
|
+
simultaneousHandlers.push(handler);
|
37
|
+
} else {
|
38
|
+
simultaneousHandlers.push(handler.handlerTag);
|
39
|
+
}
|
40
|
+
});
|
41
|
+
this.simultaneousRelations.set(handler.getTag(), simultaneousHandlers);
|
42
|
+
}
|
43
|
+
|
44
|
+
handler.setInteractionManager(this);
|
45
|
+
}
|
46
|
+
|
47
|
+
shouldWaitForHandlerFailure(handler, otherHandler) {
|
48
|
+
const waitFor = this.waitForRelations.get(handler.getTag());
|
49
|
+
|
50
|
+
if (!waitFor) {
|
51
|
+
return false;
|
52
|
+
}
|
53
|
+
|
54
|
+
let shouldWait = false;
|
55
|
+
waitFor.forEach(tag => {
|
56
|
+
if (tag === otherHandler.getTag()) {
|
57
|
+
shouldWait = true;
|
58
|
+
return; //Returns from callback
|
59
|
+
}
|
60
|
+
});
|
61
|
+
return shouldWait;
|
62
|
+
}
|
63
|
+
|
64
|
+
shouldRecognizeSimultaneously(handler, otherHandler) {
|
65
|
+
const simultaneousHandlers = this.simultaneousRelations.get(handler.getTag());
|
66
|
+
|
67
|
+
if (!simultaneousHandlers) {
|
68
|
+
return false;
|
69
|
+
}
|
70
|
+
|
71
|
+
let shouldRecognizeSimultaneously = false;
|
72
|
+
simultaneousHandlers.forEach(tag => {
|
73
|
+
if (tag === otherHandler.getTag()) {
|
74
|
+
shouldRecognizeSimultaneously = true;
|
75
|
+
return;
|
76
|
+
}
|
77
|
+
});
|
78
|
+
return shouldRecognizeSimultaneously;
|
79
|
+
}
|
80
|
+
|
81
|
+
shouldRequireHandlerToWaitForFailure(_handler, _otherHandler) {
|
82
|
+
return false;
|
83
|
+
}
|
84
|
+
|
85
|
+
shouldHandlerBeCancelledBy(_handler, _otherHandler) {
|
86
|
+
return false;
|
87
|
+
}
|
88
|
+
|
89
|
+
dropRelationsForHandlerWithTag(handlerTag) {
|
90
|
+
this.waitForRelations.delete(handlerTag);
|
91
|
+
this.simultaneousRelations.delete(handlerTag);
|
92
|
+
}
|
93
|
+
|
94
|
+
reset() {
|
95
|
+
this.waitForRelations.clear();
|
96
|
+
this.simultaneousRelations.clear();
|
97
|
+
}
|
98
|
+
|
99
|
+
}
|
100
|
+
|
101
|
+
exports.default = InteractionManager;
|
102
|
+
//# 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,48 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.default = void 0;
|
7
|
+
|
8
|
+
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; }
|
9
|
+
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
11
|
+
class NodeManager {
|
12
|
+
static getHandler(tag) {
|
13
|
+
if (tag in this.gestures) {
|
14
|
+
return this.gestures[tag];
|
15
|
+
}
|
16
|
+
|
17
|
+
throw new Error(`No handler for tag ${tag}`);
|
18
|
+
}
|
19
|
+
|
20
|
+
static createGestureHandler(handlerTag, handler) {
|
21
|
+
if (handlerTag in this.gestures) {
|
22
|
+
throw new Error(`Handler with tag ${handlerTag} already exists`);
|
23
|
+
}
|
24
|
+
|
25
|
+
this.gestures[handlerTag] = handler;
|
26
|
+
this.gestures[handlerTag].setTag(handlerTag);
|
27
|
+
}
|
28
|
+
|
29
|
+
static dropGestureHandler(handlerTag) {
|
30
|
+
if (!(handlerTag in this.gestures)) {
|
31
|
+
return;
|
32
|
+
} // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
33
|
+
|
34
|
+
|
35
|
+
delete this.gestures[handlerTag];
|
36
|
+
}
|
37
|
+
|
38
|
+
static getNodes() {
|
39
|
+
return { ...this.gestures
|
40
|
+
};
|
41
|
+
}
|
42
|
+
|
43
|
+
}
|
44
|
+
|
45
|
+
exports.default = NodeManager;
|
46
|
+
|
47
|
+
_defineProperty(NodeManager, "gestures", {});
|
48
|
+
//# sourceMappingURL=NodeManager.js.map
|