react-native-gesture-handler 2.16.0-rc.0 → 2.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +2 -0
- package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +9 -0
- package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +3 -0
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/core/DiagonalDirections.kt +8 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/FlingGestureHandler.kt +61 -24
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +17 -22
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +30 -11
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureUtils.kt +3 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/Vector.kt +66 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +119 -19
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +1 -4
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +4 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +1 -4
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +4 -7
- package/apple/Handlers/RNLongPressHandler.m +5 -13
- package/apple/Handlers/RNPinchHandler.m +12 -1
- package/apple/RNGestureHandler.m +3 -1
- package/lib/commonjs/Directions.js +19 -6
- package/lib/commonjs/Directions.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js +97 -4
- package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.native.js +16 -0
- package/lib/commonjs/RNGestureHandlerModule.native.js.map +1 -0
- package/lib/commonjs/RNRenderer.js +5 -10
- package/lib/commonjs/RNRenderer.js.map +1 -1
- package/lib/commonjs/RNRenderer.native.js +16 -0
- package/lib/commonjs/RNRenderer.native.js.map +1 -0
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.js +19 -82
- package/lib/commonjs/components/GestureComponents.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.native.js +115 -0
- package/lib/commonjs/components/GestureComponents.native.js.map +1 -0
- package/lib/commonjs/components/GestureHandlerButton.js +13 -3
- package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerButton.native.js +14 -0
- package/lib/commonjs/components/GestureHandlerButton.native.js.map +1 -0
- package/lib/commonjs/components/GestureHandlerRootView.js +0 -6
- package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
- package/lib/commonjs/components/{GestureHandlerRootView.web.js → GestureHandlerRootView.native.js} +7 -1
- package/lib/commonjs/components/GestureHandlerRootView.native.js.map +1 -0
- package/lib/commonjs/components/Swipeable.js +3 -1
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js +1 -0
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/getReactNativeVersion.js +1 -12
- package/lib/commonjs/getReactNativeVersion.js.map +1 -1
- package/lib/commonjs/getReactNativeVersion.native.js +22 -0
- package/lib/commonjs/getReactNativeVersion.native.js.map +1 -0
- package/lib/commonjs/getShadowNodeFromRef.js +5 -34
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
- package/lib/commonjs/getShadowNodeFromRef.native.js +44 -0
- package/lib/commonjs/getShadowNodeFromRef.native.js.map +1 -0
- package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PressabilityDebugView.js +5 -7
- package/lib/commonjs/handlers/PressabilityDebugView.js.map +1 -1
- package/lib/commonjs/handlers/PressabilityDebugView.native.js +14 -0
- package/lib/commonjs/handlers/PressabilityDebugView.native.js.map +1 -0
- package/lib/commonjs/handlers/createHandler.js +11 -5
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/customDirectEventTypes.js +11 -0
- package/lib/commonjs/handlers/customDirectEventTypes.js.map +1 -0
- package/lib/commonjs/handlers/customDirectEventTypes.native.js +14 -0
- package/lib/commonjs/handlers/customDirectEventTypes.native.js.map +1 -0
- package/lib/commonjs/handlers/gestureHandlerCommon.js +13 -2
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +25 -0
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/flingGesture.js +13 -0
- package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/forceTouchGesture.js +17 -0
- package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js +135 -0
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureObjects.js +66 -0
- package/lib/commonjs/handlers/gestures/gestureObjects.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.web.js +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -1
- package/lib/commonjs/handlers/gestures/hoverGesture.js +1 -1
- package/lib/commonjs/handlers/gestures/hoverGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/longPressGesture.js +12 -0
- package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/nativeGesture.js +10 -0
- package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/panGesture.js +76 -0
- package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/tapGesture.js +42 -0
- package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -1
- package/lib/commonjs/index.js +8 -8
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/mocks.js +2 -0
- package/lib/commonjs/mocks.js.map +1 -1
- package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/commonjs/utils.js +5 -1
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/Gestures.js +66 -0
- package/lib/commonjs/web/Gestures.js.map +1 -0
- package/lib/commonjs/web/constants.js +3 -8
- package/lib/commonjs/web/constants.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +36 -12
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +11 -9
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/IGestureHandler.js +2 -0
- package/lib/commonjs/web/handlers/IGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +5 -6
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +3 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js +1 -13
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/EventManager.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +114 -115
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +10 -5
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js +12 -3
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +55 -27
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/TouchEventManager.js +26 -5
- package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/Vector.js +58 -0
- package/lib/commonjs/web/tools/Vector.js.map +1 -0
- package/lib/commonjs/web/utils.js +9 -1
- package/lib/commonjs/web/utils.js.map +1 -1
- package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
- package/lib/module/Directions.js +16 -4
- package/lib/module/Directions.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.js +84 -4
- package/lib/module/RNGestureHandlerModule.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.native.js +5 -0
- package/lib/module/RNGestureHandlerModule.native.js.map +1 -0
- package/lib/module/RNRenderer.js +3 -3
- package/lib/module/RNRenderer.js.map +1 -1
- package/lib/module/RNRenderer.native.js +4 -0
- package/lib/module/RNRenderer.native.js.map +1 -0
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureComponents.js +18 -80
- package/lib/module/components/GestureComponents.js.map +1 -1
- package/lib/module/components/GestureComponents.native.js +90 -0
- package/lib/module/components/GestureComponents.native.js.map +1 -0
- package/lib/module/components/GestureHandlerButton.js +8 -2
- package/lib/module/components/GestureHandlerButton.js.map +1 -1
- package/lib/module/components/GestureHandlerButton.native.js +3 -0
- package/lib/module/components/GestureHandlerButton.native.js.map +1 -0
- package/lib/module/components/GestureHandlerRootView.js +0 -5
- package/lib/module/components/GestureHandlerRootView.js.map +1 -1
- package/lib/module/components/{GestureHandlerRootView.web.js → GestureHandlerRootView.native.js} +6 -1
- package/lib/module/components/GestureHandlerRootView.native.js.map +1 -0
- package/lib/module/components/Swipeable.js +3 -1
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/GenericTouchable.js +1 -0
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/getReactNativeVersion.js +1 -7
- package/lib/module/getReactNativeVersion.js.map +1 -1
- package/lib/module/getReactNativeVersion.native.js +10 -0
- package/lib/module/getReactNativeVersion.native.js.map +1 -0
- package/lib/module/getShadowNodeFromRef.js +4 -33
- package/lib/module/getShadowNodeFromRef.js.map +1 -1
- package/lib/module/getShadowNodeFromRef.native.js +37 -0
- package/lib/module/getShadowNodeFromRef.native.js.map +1 -0
- package/lib/module/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/handlers/PressabilityDebugView.js +4 -2
- package/lib/module/handlers/PressabilityDebugView.js.map +1 -1
- package/lib/module/handlers/PressabilityDebugView.native.js +3 -0
- package/lib/module/handlers/PressabilityDebugView.native.js.map +1 -0
- package/lib/module/handlers/createHandler.js +11 -6
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/customDirectEventTypes.js +5 -0
- package/lib/module/handlers/customDirectEventTypes.js.map +1 -0
- package/lib/module/handlers/customDirectEventTypes.native.js +3 -0
- package/lib/module/handlers/customDirectEventTypes.native.js.map +1 -0
- package/lib/module/handlers/gestureHandlerCommon.js +11 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +25 -0
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/flingGesture.js +13 -0
- package/lib/module/handlers/gestures/flingGesture.js.map +1 -1
- package/lib/module/handlers/gestures/forceTouchGesture.js +17 -0
- package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js +135 -0
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureObjects.js +67 -0
- package/lib/module/handlers/gestures/gestureObjects.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.web.js +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -1
- package/lib/module/handlers/gestures/hoverGesture.js +1 -1
- package/lib/module/handlers/gestures/hoverGesture.js.map +1 -1
- package/lib/module/handlers/gestures/longPressGesture.js +12 -0
- package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
- package/lib/module/handlers/gestures/nativeGesture.js +10 -0
- package/lib/module/handlers/gestures/nativeGesture.js.map +1 -1
- package/lib/module/handlers/gestures/panGesture.js +76 -0
- package/lib/module/handlers/gestures/panGesture.js.map +1 -1
- package/lib/module/handlers/gestures/tapGesture.js +42 -0
- package/lib/module/handlers/gestures/tapGesture.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/mocks.js +2 -0
- package/lib/module/mocks.js.map +1 -1
- package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/module/utils.js +5 -1
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/Gestures.js +39 -0
- package/lib/module/web/Gestures.js.map +1 -0
- package/lib/module/web/constants.js +1 -6
- package/lib/module/web/constants.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +34 -12
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +10 -9
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/IGestureHandler.js +2 -0
- package/lib/module/web/handlers/IGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js +5 -6
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +3 -1
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js +0 -11
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/EventManager.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +114 -115
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerWebDelegate.js +9 -4
- package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js +9 -3
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web/tools/NodeManager.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +53 -26
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/web/tools/TouchEventManager.js +26 -5
- package/lib/module/web/tools/TouchEventManager.js.map +1 -1
- package/lib/module/web/tools/Vector.js +47 -0
- package/lib/module/web/tools/Vector.js.map +1 -0
- package/lib/module/web/utils.js +2 -0
- package/lib/module/web/utils.js.map +1 -1
- package/lib/module/web_hammer/NodeManager.js.map +1 -1
- package/lib/typescript/Directions.d.ts +7 -0
- package/lib/typescript/RNGestureHandlerModule.d.ts +15 -2
- package/lib/typescript/RNGestureHandlerModule.native.d.ts +2 -0
- package/lib/typescript/RNRenderer.d.ts +3 -1
- package/lib/typescript/RNRenderer.native.d.ts +1 -0
- package/lib/typescript/components/DrawerLayout.d.ts +1 -2
- package/lib/typescript/components/GestureComponents.d.ts +7 -21
- package/lib/typescript/components/GestureComponents.native.d.ts +22 -0
- package/lib/typescript/components/GestureHandlerButton.d.ts +3 -3
- package/lib/typescript/components/GestureHandlerButton.native.d.ts +4 -0
- package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -1
- package/lib/typescript/getReactNativeVersion.d.ts +1 -4
- package/lib/typescript/getReactNativeVersion.native.d.ts +4 -0
- package/lib/typescript/getShadowNodeFromRef.d.ts +1 -1
- package/lib/typescript/getShadowNodeFromRef.native.d.ts +1 -0
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/PanGestureHandler.d.ts +4 -4
- package/lib/typescript/handlers/PressabilityDebugView.d.ts +1 -1
- package/lib/typescript/handlers/PressabilityDebugView.native.d.ts +1 -0
- package/lib/typescript/handlers/customDirectEventTypes.d.ts +2 -0
- package/lib/typescript/handlers/customDirectEventTypes.native.d.ts +1 -0
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +11 -2
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +38 -1
- package/lib/typescript/handlers/gestures/flingGesture.d.ts +11 -0
- package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +14 -0
- package/lib/typescript/handlers/gestures/gesture.d.ts +114 -2
- package/lib/typescript/handlers/gestures/gestureObjects.d.ts +57 -0
- package/lib/typescript/handlers/gestures/hoverGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/longPressGesture.d.ts +10 -0
- package/lib/typescript/handlers/gestures/nativeGesture.d.ts +8 -0
- package/lib/typescript/handlers/gestures/panGesture.d.ts +67 -4
- package/lib/typescript/handlers/gestures/tapGesture.d.ts +35 -0
- package/lib/typescript/index.d.ts +1 -1
- package/lib/typescript/mocks.d.ts +1 -0
- package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +4 -1
- package/lib/typescript/web/Gestures.d.ts +36 -0
- package/lib/typescript/web/constants.d.ts +1 -6
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +3 -3
- package/lib/typescript/web/handlers/GestureHandler.d.ts +13 -11
- package/lib/typescript/web/handlers/IGestureHandler.d.ts +38 -0
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/web/interfaces.d.ts +8 -10
- package/lib/typescript/web/tools/EventManager.d.ts +15 -12
- package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +3 -4
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +7 -5
- package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +3 -3
- package/lib/typescript/web/tools/InteractionManager.d.ts +6 -6
- package/lib/typescript/web/tools/NodeManager.d.ts +4 -3
- package/lib/typescript/web/tools/PointerEventManager.d.ts +11 -2
- package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -1
- package/lib/typescript/web/tools/Vector.d.ts +15 -0
- package/lib/typescript/web/utils.d.ts +4 -4
- package/lib/typescript/web_hammer/NodeManager.d.ts +1 -1
- package/package.json +4 -2
- package/src/Directions.ts +21 -4
- package/src/RNGestureHandlerModule.native.ts +5 -0
- package/src/RNGestureHandlerModule.ts +104 -4
- package/src/RNRenderer.native.ts +3 -0
- package/src/RNRenderer.ts +3 -3
- package/src/components/DrawerLayout.tsx +1 -1
- package/src/components/GestureComponents.native.tsx +148 -0
- package/src/components/GestureComponents.tsx +24 -131
- package/src/components/GestureHandlerButton.native.tsx +5 -0
- package/src/components/GestureHandlerButton.tsx +5 -4
- package/src/components/{GestureHandlerRootView.web.tsx → GestureHandlerRootView.native.tsx} +6 -0
- package/src/components/GestureHandlerRootView.tsx +0 -6
- package/src/components/Swipeable.tsx +2 -0
- package/src/components/touchables/GenericTouchable.tsx +3 -0
- package/src/getReactNativeVersion.native.ts +11 -0
- package/src/getReactNativeVersion.ts +1 -9
- package/src/getShadowNodeFromRef.native.ts +44 -0
- package/src/getShadowNodeFromRef.ts +4 -41
- package/src/handlers/PanGestureHandler.ts +8 -4
- package/src/handlers/PressabilityDebugView.native.tsx +2 -0
- package/src/handlers/PressabilityDebugView.tsx +4 -2
- package/src/handlers/createHandler.tsx +24 -14
- package/src/handlers/customDirectEventTypes.native.ts +2 -0
- package/src/handlers/customDirectEventTypes.ts +5 -0
- package/src/handlers/gestureHandlerCommon.ts +28 -1
- package/src/handlers/gestures/GestureDetector.tsx +62 -4
- package/src/handlers/gestures/flingGesture.ts +11 -0
- package/src/handlers/gestures/forceTouchGesture.ts +14 -0
- package/src/handlers/gestures/gesture.ts +114 -1
- package/src/handlers/gestures/gestureObjects.ts +57 -0
- package/src/handlers/gestures/gestureStateManager.web.ts +1 -1
- package/src/handlers/gestures/hoverGesture.ts +1 -1
- package/src/handlers/gestures/longPressGesture.ts +10 -0
- package/src/handlers/gestures/nativeGesture.ts +8 -0
- package/src/handlers/gestures/panGesture.ts +75 -4
- package/src/handlers/gestures/tapGesture.ts +35 -0
- package/src/index.ts +1 -1
- package/src/mocks.ts +2 -0
- package/src/specs/RNGestureHandlerButtonNativeComponent.ts +4 -0
- package/src/utils.ts +9 -2
- package/src/web/Gestures.ts +41 -0
- package/src/web/constants.ts +1 -7
- package/src/web/handlers/FlingGestureHandler.ts +54 -24
- package/src/web/handlers/GestureHandler.ts +23 -19
- package/src/web/handlers/IGestureHandler.ts +50 -0
- package/src/web/handlers/NativeViewGestureHandler.ts +5 -6
- package/src/web/handlers/PanGestureHandler.ts +4 -0
- package/src/web/interfaces.ts +14 -10
- package/src/web/tools/EventManager.ts +16 -14
- package/src/web/tools/GestureHandlerDelegate.ts +3 -4
- package/src/web/tools/GestureHandlerOrchestrator.ts +160 -145
- package/src/web/tools/GestureHandlerWebDelegate.ts +14 -9
- package/src/web/tools/InteractionManager.ts +18 -12
- package/src/web/tools/NodeManager.ts +4 -3
- package/src/web/tools/PointerEventManager.ts +181 -166
- package/src/web/tools/TouchEventManager.ts +126 -114
- package/src/web/tools/Vector.ts +60 -0
- package/src/web/utils.ts +7 -4
- package/src/web_hammer/NodeManager.ts +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +0 -163
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +0 -1
- package/lib/commonjs/RNRenderer.web.js +0 -11
- package/lib/commonjs/RNRenderer.web.js.map +0 -1
- package/lib/commonjs/components/GestureComponents.web.js +0 -52
- package/lib/commonjs/components/GestureComponents.web.js.map +0 -1
- package/lib/commonjs/components/GestureHandlerButton.web.js +0 -24
- package/lib/commonjs/components/GestureHandlerButton.web.js.map +0 -1
- package/lib/commonjs/components/GestureHandlerRootView.web.js.map +0 -1
- package/lib/commonjs/getReactNativeVersion.web.js +0 -11
- package/lib/commonjs/getReactNativeVersion.web.js.map +0 -1
- package/lib/commonjs/getShadowNodeFromRef.web.js +0 -15
- package/lib/commonjs/getShadowNodeFromRef.web.js.map +0 -1
- package/lib/commonjs/handlers/PressabilityDebugView.web.js +0 -12
- package/lib/commonjs/handlers/PressabilityDebugView.web.js.map +0 -1
- package/lib/module/RNGestureHandlerModule.web.js +0 -122
- package/lib/module/RNGestureHandlerModule.web.js.map +0 -1
- package/lib/module/RNRenderer.web.js +0 -4
- package/lib/module/RNRenderer.web.js.map +0 -1
- package/lib/module/components/GestureComponents.web.js +0 -28
- package/lib/module/components/GestureComponents.web.js.map +0 -1
- package/lib/module/components/GestureHandlerButton.web.js +0 -9
- package/lib/module/components/GestureHandlerButton.web.js.map +0 -1
- package/lib/module/components/GestureHandlerRootView.web.js.map +0 -1
- package/lib/module/getReactNativeVersion.web.js +0 -4
- package/lib/module/getReactNativeVersion.web.js.map +0 -1
- package/lib/module/getShadowNodeFromRef.web.js +0 -8
- package/lib/module/getShadowNodeFromRef.web.js.map +0 -1
- package/lib/module/handlers/PressabilityDebugView.web.js +0 -5
- package/lib/module/handlers/PressabilityDebugView.web.js.map +0 -1
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +0 -50
- package/lib/typescript/RNRenderer.web.d.ts +0 -3
- package/lib/typescript/components/GestureComponents.web.d.ts +0 -8
- package/lib/typescript/components/GestureHandlerButton.web.d.ts +0 -4
- package/lib/typescript/getReactNativeVersion.web.d.ts +0 -1
- package/lib/typescript/getShadowNodeFromRef.web.d.ts +0 -1
- package/lib/typescript/handlers/PressabilityDebugView.web.d.ts +0 -1
- package/src/RNGestureHandlerModule.web.ts +0 -146
- package/src/RNRenderer.web.ts +0 -3
- package/src/components/GestureComponents.web.tsx +0 -41
- package/src/components/GestureHandlerButton.web.tsx +0 -6
- package/src/getReactNativeVersion.web.ts +0 -3
- package/src/getShadowNodeFromRef.web.ts +0 -7
- package/src/handlers/PressabilityDebugView.web.tsx +0 -4
- /package/lib/typescript/components/{GestureHandlerRootView.web.d.ts → GestureHandlerRootView.native.d.ts} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { findNodeHandle } from 'react-native';
|
|
2
|
-
import type
|
|
2
|
+
import type IGestureHandler from '../handlers/IGestureHandler';
|
|
3
3
|
import {
|
|
4
4
|
GestureHandlerDelegate,
|
|
5
5
|
MeasureResult,
|
|
@@ -9,20 +9,21 @@ import TouchEventManager from './TouchEventManager';
|
|
|
9
9
|
import { State } from '../../State';
|
|
10
10
|
import { isPointerInBounds } from '../utils';
|
|
11
11
|
import EventManager from './EventManager';
|
|
12
|
-
import { Config
|
|
12
|
+
import { Config } from '../interfaces';
|
|
13
|
+
import { MouseButton } from '../../handlers/gestureHandlerCommon';
|
|
13
14
|
|
|
14
15
|
export class GestureHandlerWebDelegate
|
|
15
|
-
implements GestureHandlerDelegate<HTMLElement>
|
|
16
|
+
implements GestureHandlerDelegate<HTMLElement, IGestureHandler>
|
|
16
17
|
{
|
|
17
18
|
private view!: HTMLElement;
|
|
18
|
-
private gestureHandler!:
|
|
19
|
+
private gestureHandler!: IGestureHandler;
|
|
19
20
|
private eventManagers: EventManager<unknown>[] = [];
|
|
20
21
|
|
|
21
22
|
getView(): HTMLElement {
|
|
22
23
|
return this.view;
|
|
23
24
|
}
|
|
24
25
|
|
|
25
|
-
init(viewRef: number, handler:
|
|
26
|
+
init(viewRef: number, handler: IGestureHandler): void {
|
|
26
27
|
if (!viewRef) {
|
|
27
28
|
throw new Error(
|
|
28
29
|
`Cannot find HTML Element for handler ${handler.getTag()}`
|
|
@@ -32,10 +33,6 @@ export class GestureHandlerWebDelegate
|
|
|
32
33
|
this.gestureHandler = handler;
|
|
33
34
|
this.view = findNodeHandle(viewRef) as unknown as HTMLElement;
|
|
34
35
|
|
|
35
|
-
this.view.style['touchAction'] = 'none';
|
|
36
|
-
//@ts-ignore This one disables default events on Safari
|
|
37
|
-
this.view.style['WebkitTouchCallout'] = 'none';
|
|
38
|
-
|
|
39
36
|
const config = handler.getConfig();
|
|
40
37
|
|
|
41
38
|
this.addContextMenuListeners(config);
|
|
@@ -48,6 +45,10 @@ export class GestureHandlerWebDelegate
|
|
|
48
45
|
this.view.style['userSelect'] = config.userSelect;
|
|
49
46
|
}
|
|
50
47
|
|
|
48
|
+
this.view.style['touchAction'] = config.touchAction ?? 'none';
|
|
49
|
+
//@ts-ignore This one disables default events on Safari
|
|
50
|
+
this.view.style['WebkitTouchCallout'] = 'none';
|
|
51
|
+
|
|
51
52
|
this.eventManagers.push(new PointerEventManager(this.view));
|
|
52
53
|
this.eventManagers.push(new TouchEventManager(this.view));
|
|
53
54
|
|
|
@@ -150,5 +151,9 @@ export class GestureHandlerWebDelegate
|
|
|
150
151
|
|
|
151
152
|
public destroy(config: Config): void {
|
|
152
153
|
this.removeContextMenuListeners(config);
|
|
154
|
+
|
|
155
|
+
this.eventManagers.forEach((manager) => {
|
|
156
|
+
manager.unregisterListeners();
|
|
157
|
+
});
|
|
153
158
|
}
|
|
154
159
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type IGestureHandler from '../handlers/IGestureHandler';
|
|
2
|
+
import { State } from '../../State';
|
|
2
3
|
import { Config, Handler } from '../interfaces';
|
|
3
4
|
|
|
4
5
|
export default class InteractionManager {
|
|
@@ -11,7 +12,7 @@ export default class InteractionManager {
|
|
|
11
12
|
// eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function
|
|
12
13
|
private constructor() {}
|
|
13
14
|
|
|
14
|
-
public configureInteractions(handler:
|
|
15
|
+
public configureInteractions(handler: IGestureHandler, config: Config) {
|
|
15
16
|
this.dropRelationsForHandlerWithTag(handler.getTag());
|
|
16
17
|
|
|
17
18
|
if (config.waitFor) {
|
|
@@ -57,8 +58,8 @@ export default class InteractionManager {
|
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
public shouldWaitForHandlerFailure(
|
|
60
|
-
handler:
|
|
61
|
-
otherHandler:
|
|
61
|
+
handler: IGestureHandler,
|
|
62
|
+
otherHandler: IGestureHandler
|
|
62
63
|
): boolean {
|
|
63
64
|
const waitFor: number[] | undefined = this.waitForRelations.get(
|
|
64
65
|
handler.getTag()
|
|
@@ -72,8 +73,8 @@ export default class InteractionManager {
|
|
|
72
73
|
}
|
|
73
74
|
|
|
74
75
|
public shouldRecognizeSimultaneously(
|
|
75
|
-
handler:
|
|
76
|
-
otherHandler:
|
|
76
|
+
handler: IGestureHandler,
|
|
77
|
+
otherHandler: IGestureHandler
|
|
77
78
|
): boolean {
|
|
78
79
|
const simultaneousHandlers: number[] | undefined =
|
|
79
80
|
this.simultaneousRelations.get(handler.getTag());
|
|
@@ -86,8 +87,8 @@ export default class InteractionManager {
|
|
|
86
87
|
}
|
|
87
88
|
|
|
88
89
|
public shouldRequireHandlerToWaitForFailure(
|
|
89
|
-
handler:
|
|
90
|
-
otherHandler:
|
|
90
|
+
handler: IGestureHandler,
|
|
91
|
+
otherHandler: IGestureHandler
|
|
91
92
|
): boolean {
|
|
92
93
|
const waitFor: number[] | undefined = this.blocksHandlersRelations.get(
|
|
93
94
|
handler.getTag()
|
|
@@ -101,11 +102,16 @@ export default class InteractionManager {
|
|
|
101
102
|
}
|
|
102
103
|
|
|
103
104
|
public shouldHandlerBeCancelledBy(
|
|
104
|
-
_handler:
|
|
105
|
-
|
|
105
|
+
_handler: IGestureHandler,
|
|
106
|
+
otherHandler: IGestureHandler
|
|
106
107
|
): boolean {
|
|
107
|
-
//
|
|
108
|
-
|
|
108
|
+
// We check constructor name instead of using `instanceof` in order do avoid circular dependencies
|
|
109
|
+
const isNativeHandler =
|
|
110
|
+
otherHandler.constructor.name === 'NativeViewGestureHandler';
|
|
111
|
+
const isActive = otherHandler.getState() === State.ACTIVE;
|
|
112
|
+
const isButton = otherHandler.isButton?.() === true;
|
|
113
|
+
|
|
114
|
+
return isNativeHandler && isActive && !isButton;
|
|
109
115
|
}
|
|
110
116
|
|
|
111
117
|
public dropRelationsForHandlerWithTag(handlerTag: number): void {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ValueOf } from '../../typeUtils';
|
|
2
|
-
import { Gestures } from '
|
|
2
|
+
import { Gestures } from '../Gestures';
|
|
3
|
+
import type IGestureHandler from '../handlers/IGestureHandler';
|
|
3
4
|
|
|
4
5
|
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
5
6
|
export default abstract class NodeManager {
|
|
@@ -8,9 +9,9 @@ export default abstract class NodeManager {
|
|
|
8
9
|
InstanceType<ValueOf<typeof Gestures>>
|
|
9
10
|
> = {};
|
|
10
11
|
|
|
11
|
-
public static getHandler(tag: number) {
|
|
12
|
+
public static getHandler(tag: number): IGestureHandler {
|
|
12
13
|
if (tag in this.gestures) {
|
|
13
|
-
return this.gestures[tag];
|
|
14
|
+
return this.gestures[tag] as IGestureHandler;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
throw new Error(`No handler for tag ${tag}`);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { AdaptedEvent, EventTypes, MouseButton } from '../interfaces';
|
|
2
1
|
import EventManager from './EventManager';
|
|
2
|
+
import { MouseButton } from '../../handlers/gestureHandlerCommon';
|
|
3
|
+
import { AdaptedEvent, EventTypes, Point } from '../interfaces';
|
|
3
4
|
import { PointerTypeMapping, isPointerInBounds } from '../utils';
|
|
4
5
|
import { PointerType } from '../../PointerType';
|
|
5
6
|
|
|
@@ -12,6 +13,7 @@ const PointerTypes = {
|
|
|
12
13
|
export default class PointerEventManager extends EventManager<HTMLElement> {
|
|
13
14
|
private trackedPointers = new Set<number>();
|
|
14
15
|
private readonly mouseButtonsMapper = new Map<number, MouseButton>();
|
|
16
|
+
private lastPosition: Point;
|
|
15
17
|
|
|
16
18
|
constructor(view: HTMLElement) {
|
|
17
19
|
super(view);
|
|
@@ -21,200 +23,213 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
|
|
|
21
23
|
this.mouseButtonsMapper.set(2, MouseButton.RIGHT);
|
|
22
24
|
this.mouseButtonsMapper.set(3, MouseButton.BUTTON_4);
|
|
23
25
|
this.mouseButtonsMapper.set(4, MouseButton.BUTTON_5);
|
|
26
|
+
|
|
27
|
+
this.lastPosition = {
|
|
28
|
+
x: -Infinity,
|
|
29
|
+
y: -Infinity,
|
|
30
|
+
};
|
|
24
31
|
}
|
|
25
32
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
private pointerDownCallback = (event: PointerEvent) => {
|
|
34
|
+
if (event.pointerType === PointerTypes.Touch) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (!isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);
|
|
42
|
+
const target = event.target as HTMLElement;
|
|
43
|
+
|
|
44
|
+
if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
|
|
45
|
+
target.setPointerCapture(adaptedEvent.pointerId);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
this.markAsInBounds(adaptedEvent.pointerId);
|
|
49
|
+
this.trackedPointers.add(adaptedEvent.pointerId);
|
|
50
|
+
|
|
51
|
+
if (++this.activePointersCounter > 1) {
|
|
52
|
+
adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;
|
|
53
|
+
this.onPointerAdd(adaptedEvent);
|
|
54
|
+
} else {
|
|
55
|
+
this.onPointerDown(adaptedEvent);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
private pointerUpCallback = (event: PointerEvent) => {
|
|
60
|
+
if (event.pointerType === PointerTypes.Touch) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// When we call reset on gesture handlers, it also resets their event managers
|
|
65
|
+
// In some handlers (like RotationGestureHandler) reset is called before all pointers leave view
|
|
66
|
+
// This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view
|
|
67
|
+
// Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly
|
|
68
|
+
if (this.activePointersCounter === 0) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);
|
|
73
|
+
const target = event.target as HTMLElement;
|
|
74
|
+
|
|
75
|
+
if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
|
|
76
|
+
target.releasePointerCapture(adaptedEvent.pointerId);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
this.markAsOutOfBounds(adaptedEvent.pointerId);
|
|
80
|
+
this.trackedPointers.delete(adaptedEvent.pointerId);
|
|
81
|
+
|
|
82
|
+
if (--this.activePointersCounter > 0) {
|
|
83
|
+
adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;
|
|
84
|
+
this.onPointerRemove(adaptedEvent);
|
|
85
|
+
} else {
|
|
86
|
+
this.onPointerUp(adaptedEvent);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
private pointerMoveCallback = (event: PointerEvent) => {
|
|
91
|
+
if (event.pointerType === PointerTypes.Touch) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Stylus triggers `pointermove` event when it detects changes in pressure. Since it is very sensitive to those changes,
|
|
96
|
+
// it constantly sends events, even though there was no change in position. To fix that we check whether
|
|
97
|
+
// pointer has actually moved and if not, we do not send event.
|
|
98
|
+
if (
|
|
99
|
+
event.pointerType === PointerTypes.Stylus &&
|
|
100
|
+
event.x === this.lastPosition.x &&
|
|
101
|
+
event.y === this.lastPosition.y
|
|
102
|
+
) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);
|
|
107
|
+
const target = event.target as HTMLElement;
|
|
108
|
+
|
|
109
|
+
// You may be wondering why are we setting pointer capture here, when we
|
|
110
|
+
// already set it in `pointerdown` handler. Well, that's a great question,
|
|
111
|
+
// for which I don't have an answer. Specification (https://www.w3.org/TR/pointerevents2/#dom-element-setpointercapture)
|
|
112
|
+
// says that the requirement for `setPointerCapture` to work is that pointer
|
|
113
|
+
// must be in 'active buttons state`, otherwise it will fail silently, which
|
|
114
|
+
// is lovely. Obviously, when `pointerdown` is fired, one of the buttons
|
|
115
|
+
// (when using mouse) is pressed, but that doesn't mean that `setPointerCapture`
|
|
116
|
+
// will succeed, for some reason. Since it fails silently, we don't actually know
|
|
117
|
+
// if it worked or not (there's `gotpointercapture` event, but the complexity of
|
|
118
|
+
// incorporating it here seems stupid), so we just call it again here, every time
|
|
119
|
+
// pointer moves until it succeeds.
|
|
120
|
+
// God, I do love web development.
|
|
121
|
+
if (
|
|
122
|
+
!target.hasPointerCapture(event.pointerId) &&
|
|
123
|
+
!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)
|
|
124
|
+
) {
|
|
125
|
+
target.setPointerCapture(event.pointerId);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const inBounds: boolean = isPointerInBounds(this.view, {
|
|
129
|
+
x: adaptedEvent.x,
|
|
130
|
+
y: adaptedEvent.y,
|
|
131
|
+
});
|
|
36
132
|
|
|
37
|
-
|
|
38
|
-
|
|
133
|
+
const pointerIndex: number = this.pointersInBounds.indexOf(
|
|
134
|
+
adaptedEvent.pointerId
|
|
135
|
+
);
|
|
39
136
|
|
|
40
|
-
|
|
41
|
-
|
|
137
|
+
if (inBounds) {
|
|
138
|
+
if (pointerIndex < 0) {
|
|
139
|
+
adaptedEvent.eventType = EventTypes.ENTER;
|
|
140
|
+
this.onPointerEnter(adaptedEvent);
|
|
141
|
+
this.markAsInBounds(adaptedEvent.pointerId);
|
|
142
|
+
} else {
|
|
143
|
+
this.onPointerMove(adaptedEvent);
|
|
42
144
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;
|
|
49
|
-
this.onPointerAdd(adaptedEvent);
|
|
145
|
+
} else {
|
|
146
|
+
if (pointerIndex >= 0) {
|
|
147
|
+
adaptedEvent.eventType = EventTypes.LEAVE;
|
|
148
|
+
this.onPointerLeave(adaptedEvent);
|
|
149
|
+
this.markAsOutOfBounds(adaptedEvent.pointerId);
|
|
50
150
|
} else {
|
|
51
|
-
this.
|
|
151
|
+
this.onPointerOutOfBounds(adaptedEvent);
|
|
52
152
|
}
|
|
53
|
-
}
|
|
153
|
+
}
|
|
54
154
|
|
|
55
|
-
this.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
155
|
+
this.lastPosition.x = event.x;
|
|
156
|
+
this.lastPosition.y = event.y;
|
|
157
|
+
};
|
|
59
158
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
if (this.activePointersCounter === 0) {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
159
|
+
private pointerCancelCallback = (event: PointerEvent) => {
|
|
160
|
+
if (event.pointerType === PointerTypes.Touch) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
67
163
|
|
|
68
|
-
|
|
69
|
-
const target = event.target as HTMLElement;
|
|
164
|
+
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.CANCEL);
|
|
70
165
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
166
|
+
this.onPointerCancel(adaptedEvent);
|
|
167
|
+
this.markAsOutOfBounds(adaptedEvent.pointerId);
|
|
168
|
+
this.activePointersCounter = 0;
|
|
169
|
+
this.trackedPointers.clear();
|
|
170
|
+
};
|
|
74
171
|
|
|
75
|
-
|
|
76
|
-
|
|
172
|
+
private pointerEnterCallback = (event: PointerEvent) => {
|
|
173
|
+
if (event.pointerType === PointerTypes.Touch) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
77
176
|
|
|
78
|
-
|
|
79
|
-
adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;
|
|
80
|
-
this.onPointerRemove(adaptedEvent);
|
|
81
|
-
} else {
|
|
82
|
-
this.onPointerUp(adaptedEvent);
|
|
83
|
-
}
|
|
84
|
-
});
|
|
177
|
+
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);
|
|
85
178
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
y: null,
|
|
89
|
-
};
|
|
179
|
+
this.onPointerMoveOver(adaptedEvent);
|
|
180
|
+
};
|
|
90
181
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
182
|
+
private pointerLeaveCallback = (event: PointerEvent) => {
|
|
183
|
+
if (event.pointerType === PointerTypes.Touch) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
95
186
|
|
|
96
|
-
|
|
97
|
-
// it constantly sends events, even though there was no change in position. To fix that we check whether
|
|
98
|
-
// pointer has actually moved and if not, we do not send event.
|
|
99
|
-
if (
|
|
100
|
-
event.pointerType === PointerTypes.Stylus &&
|
|
101
|
-
event.x === lastPosition.x &&
|
|
102
|
-
event.y === lastPosition.y
|
|
103
|
-
) {
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
187
|
+
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);
|
|
106
188
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
// You may be wondering why are we setting pointer capture here, when we
|
|
111
|
-
// already set it in `pointerdown` handler. Well, that's a great question,
|
|
112
|
-
// for which I don't have an answer. Specification (https://www.w3.org/TR/pointerevents2/#dom-element-setpointercapture)
|
|
113
|
-
// says that the requirement for `setPointerCapture` to work is that pointer
|
|
114
|
-
// must be in 'active buttons state`, otherwise it will fail silently, which
|
|
115
|
-
// is lovely. Obviously, when `pointerdown` is fired, one of the buttons
|
|
116
|
-
// (when using mouse) is pressed, but that doesn't mean that `setPointerCapture`
|
|
117
|
-
// will succeed, for some reason. Since it fails silently, we don't actually know
|
|
118
|
-
// if it worked or not (there's `gotpointercapture` event, but the complexity of
|
|
119
|
-
// incorporating it here seems stupid), so we just call it again here, every time
|
|
120
|
-
// pointer moves until it succeeds.
|
|
121
|
-
// God, I do love web development.
|
|
122
|
-
if (
|
|
123
|
-
!target.hasPointerCapture(event.pointerId) &&
|
|
124
|
-
!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)
|
|
125
|
-
) {
|
|
126
|
-
target.setPointerCapture(event.pointerId);
|
|
127
|
-
}
|
|
189
|
+
this.onPointerMoveOut(adaptedEvent);
|
|
190
|
+
};
|
|
128
191
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
y: adaptedEvent.y,
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
const pointerIndex: number = this.pointersInBounds.indexOf(
|
|
135
|
-
adaptedEvent.pointerId
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
if (inBounds) {
|
|
139
|
-
if (pointerIndex < 0) {
|
|
140
|
-
adaptedEvent.eventType = EventTypes.ENTER;
|
|
141
|
-
this.onPointerEnter(adaptedEvent);
|
|
142
|
-
this.markAsInBounds(adaptedEvent.pointerId);
|
|
143
|
-
} else {
|
|
144
|
-
this.onPointerMove(adaptedEvent);
|
|
145
|
-
}
|
|
146
|
-
} else {
|
|
147
|
-
if (pointerIndex >= 0) {
|
|
148
|
-
adaptedEvent.eventType = EventTypes.LEAVE;
|
|
149
|
-
this.onPointerLeave(adaptedEvent);
|
|
150
|
-
this.markAsOutOfBounds(adaptedEvent.pointerId);
|
|
151
|
-
} else {
|
|
152
|
-
this.onPointerOutOfBounds(adaptedEvent);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
lastPosition.x = event.x;
|
|
157
|
-
lastPosition.y = event.y;
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
this.view.addEventListener('pointercancel', (event: PointerEvent): void => {
|
|
161
|
-
if (event.pointerType === PointerTypes.Touch) {
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
const adaptedEvent: AdaptedEvent = this.mapEvent(
|
|
166
|
-
event,
|
|
167
|
-
EventTypes.CANCEL
|
|
168
|
-
);
|
|
192
|
+
private lostPointerCaptureCallback = (event: PointerEvent) => {
|
|
193
|
+
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.CANCEL);
|
|
169
194
|
|
|
195
|
+
if (this.trackedPointers.has(adaptedEvent.pointerId)) {
|
|
196
|
+
// in some cases the `pointerup` event is not fired, but `lostpointercapture` is
|
|
197
|
+
// we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it
|
|
170
198
|
this.onPointerCancel(adaptedEvent);
|
|
171
|
-
|
|
199
|
+
|
|
172
200
|
this.activePointersCounter = 0;
|
|
173
201
|
this.trackedPointers.clear();
|
|
174
|
-
}
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
public registerListeners(): void {
|
|
206
|
+
this.view.addEventListener('pointerdown', this.pointerDownCallback);
|
|
207
|
+
this.view.addEventListener('pointerup', this.pointerUpCallback);
|
|
208
|
+
this.view.addEventListener('pointermove', this.pointerMoveCallback);
|
|
209
|
+
this.view.addEventListener('pointercancel', this.pointerCancelCallback);
|
|
175
210
|
|
|
176
211
|
// onPointerEnter and onPointerLeave are triggered by a custom logic responsible for
|
|
177
212
|
// handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.
|
|
178
213
|
// We therefore use pointerenter and pointerleave events to handle the hover gesture,
|
|
179
214
|
// mapping them to onPointerMoveOver and onPointerMoveOut respectively.
|
|
180
|
-
|
|
181
|
-
this.view.addEventListener('
|
|
182
|
-
if (event.pointerType === PointerTypes.Touch) {
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);
|
|
187
|
-
|
|
188
|
-
this.onPointerMoveOver(adaptedEvent);
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
this.view.addEventListener('pointerleave', (event: PointerEvent): void => {
|
|
192
|
-
if (event.pointerType === PointerTypes.Touch) {
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);
|
|
197
|
-
|
|
198
|
-
this.onPointerMoveOut(adaptedEvent);
|
|
199
|
-
});
|
|
200
|
-
|
|
215
|
+
this.view.addEventListener('pointerenter', this.pointerEnterCallback);
|
|
216
|
+
this.view.addEventListener('pointerleave', this.pointerLeaveCallback);
|
|
201
217
|
this.view.addEventListener(
|
|
202
218
|
'lostpointercapture',
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
}
|
|
219
|
+
this.lostPointerCaptureCallback
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
public unregisterListeners(): void {
|
|
224
|
+
this.view.removeEventListener('pointerdown', this.pointerDownCallback);
|
|
225
|
+
this.view.removeEventListener('pointerup', this.pointerUpCallback);
|
|
226
|
+
this.view.removeEventListener('pointermove', this.pointerMoveCallback);
|
|
227
|
+
this.view.removeEventListener('pointercancel', this.pointerCancelCallback);
|
|
228
|
+
this.view.removeEventListener('pointerenter', this.pointerEnterCallback);
|
|
229
|
+
this.view.removeEventListener('pointerleave', this.pointerLeaveCallback);
|
|
230
|
+
this.view.removeEventListener(
|
|
231
|
+
'lostpointercapture',
|
|
232
|
+
this.lostPointerCaptureCallback
|
|
218
233
|
);
|
|
219
234
|
}
|
|
220
235
|
|