react-native-gesture-handler 2.16.1 → 2.17.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +9 -3
- package/android/build.gradle +105 -0
- package/android/gradle.properties +7 -0
- package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +7 -7
- package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +16 -8
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +9 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +4 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +1 -0
- package/apple/RNGestureHandlerButtonComponentView.mm +10 -0
- package/apple/RNGestureHandlerModule.mm +2 -3
- package/lib/commonjs/RNGestureHandlerModule.js +4 -97
- package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +109 -0
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -0
- package/lib/commonjs/RNRenderer.js +10 -5
- package/lib/commonjs/RNRenderer.js.map +1 -1
- package/lib/commonjs/RNRenderer.web.js +11 -0
- package/lib/commonjs/RNRenderer.web.js.map +1 -0
- package/lib/commonjs/components/GestureButtons.js +27 -12
- package/lib/commonjs/components/GestureButtons.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.js +82 -19
- package/lib/commonjs/components/GestureComponents.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.web.js +52 -0
- package/lib/commonjs/components/GestureComponents.web.js.map +1 -0
- package/lib/commonjs/components/GestureHandlerButton.js +3 -13
- package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerButton.web.js +24 -0
- package/lib/commonjs/components/GestureHandlerButton.web.js.map +1 -0
- package/lib/commonjs/components/GestureHandlerRootView.js +6 -0
- package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
- package/lib/commonjs/components/{GestureHandlerRootView.native.js → GestureHandlerRootView.web.js} +1 -7
- package/lib/commonjs/components/GestureHandlerRootView.web.js.map +1 -0
- package/lib/commonjs/getReactNativeVersion.js +12 -1
- package/lib/commonjs/getReactNativeVersion.js.map +1 -1
- package/lib/commonjs/getReactNativeVersion.web.js +11 -0
- package/lib/commonjs/getReactNativeVersion.web.js.map +1 -0
- package/lib/commonjs/getShadowNodeFromRef.js +34 -5
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
- package/lib/commonjs/getShadowNodeFromRef.web.js +15 -0
- package/lib/commonjs/getShadowNodeFromRef.web.js.map +1 -0
- package/lib/commonjs/handlers/PressabilityDebugView.js +7 -5
- package/lib/commonjs/handlers/PressabilityDebugView.js.map +1 -1
- 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 +1 -3
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/customDirectEventTypes.js +8 -5
- package/lib/commonjs/handlers/customDirectEventTypes.js.map +1 -1
- package/lib/commonjs/handlers/customDirectEventTypes.web.js +11 -0
- package/lib/commonjs/handlers/customDirectEventTypes.web.js.map +1 -0
- package/lib/commonjs/handlers/gestureHandlerCommon.js +3 -3
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.js +42 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.js.map +1 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js +83 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/dropHandlers.js +25 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/dropHandlers.js.map +1 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/index.js +143 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/index.js.map +1 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/needsToReattach.js +25 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/needsToReattach.js.map +1 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/types.js +6 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/types.js.map +1 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js +80 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/useAnimatedGesture.js +180 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/useAnimatedGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js +55 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js +47 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/utils.js +176 -0
- package/lib/commonjs/handlers/gestures/GestureDetector/utils.js.map +1 -0
- package/lib/commonjs/handlers/gestures/gestureComposition.js +3 -1
- package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +8 -0
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/commonjs/utils.js +36 -0
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js +6 -8
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js +5 -6
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +1 -0
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +56 -64
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +1 -0
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/ManualGestureHandler.js +1 -0
- package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +7 -4
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +28 -18
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +1 -0
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +1 -0
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +18 -12
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +1 -6
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +7 -2
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerTracker.js +89 -57
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
- package/lib/commonjs/web/tools/TouchEventManager.js +6 -2
- package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/Vector.js +2 -1
- package/lib/commonjs/web/tools/Vector.js.map +1 -1
- package/lib/commonjs/web/utils.js +31 -0
- package/lib/commonjs/web/utils.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.js +4 -84
- package/lib/module/RNGestureHandlerModule.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +85 -0
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -0
- package/lib/module/RNRenderer.js +3 -3
- package/lib/module/RNRenderer.js.map +1 -1
- package/lib/module/RNRenderer.web.js +4 -0
- package/lib/module/RNRenderer.web.js.map +1 -0
- package/lib/module/components/GestureButtons.js +24 -6
- package/lib/module/components/GestureButtons.js.map +1 -1
- package/lib/module/components/GestureComponents.js +80 -18
- package/lib/module/components/GestureComponents.js.map +1 -1
- package/lib/module/components/GestureComponents.web.js +28 -0
- package/lib/module/components/GestureComponents.web.js.map +1 -0
- package/lib/module/components/GestureHandlerButton.js +2 -8
- package/lib/module/components/GestureHandlerButton.js.map +1 -1
- package/lib/module/components/GestureHandlerButton.web.js +9 -0
- package/lib/module/components/GestureHandlerButton.web.js.map +1 -0
- package/lib/module/components/GestureHandlerRootView.js +5 -0
- package/lib/module/components/GestureHandlerRootView.js.map +1 -1
- package/lib/module/components/{GestureHandlerRootView.native.js → GestureHandlerRootView.web.js} +1 -6
- package/lib/module/components/GestureHandlerRootView.web.js.map +1 -0
- package/lib/module/getReactNativeVersion.js +7 -1
- package/lib/module/getReactNativeVersion.js.map +1 -1
- package/lib/module/getReactNativeVersion.web.js +4 -0
- package/lib/module/getReactNativeVersion.web.js.map +1 -0
- package/lib/module/getShadowNodeFromRef.js +33 -4
- package/lib/module/getShadowNodeFromRef.js.map +1 -1
- package/lib/module/getShadowNodeFromRef.web.js +8 -0
- package/lib/module/getShadowNodeFromRef.web.js.map +1 -0
- package/lib/module/handlers/PressabilityDebugView.js +2 -4
- package/lib/module/handlers/PressabilityDebugView.js.map +1 -1
- 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 +2 -4
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/customDirectEventTypes.js +2 -4
- package/lib/module/handlers/customDirectEventTypes.js.map +1 -1
- package/lib/module/handlers/customDirectEventTypes.web.js +5 -0
- package/lib/module/handlers/customDirectEventTypes.web.js.map +1 -0
- package/lib/module/handlers/gestureHandlerCommon.js +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/Wrap.js +26 -0
- package/lib/module/handlers/gestures/GestureDetector/Wrap.js.map +1 -0
- package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js +65 -0
- package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -0
- package/lib/module/handlers/gestures/GestureDetector/dropHandlers.js +12 -0
- package/lib/module/handlers/gestures/GestureDetector/dropHandlers.js.map +1 -0
- package/lib/module/handlers/gestures/GestureDetector/index.js +115 -0
- package/lib/module/handlers/gestures/GestureDetector/index.js.map +1 -0
- package/lib/module/handlers/gestures/GestureDetector/needsToReattach.js +18 -0
- package/lib/module/handlers/gestures/GestureDetector/needsToReattach.js.map +1 -0
- package/lib/module/handlers/gestures/GestureDetector/types.js +2 -0
- package/lib/module/handlers/gestures/GestureDetector/types.js.map +1 -0
- package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js +64 -0
- package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -0
- package/lib/module/handlers/gestures/GestureDetector/useAnimatedGesture.js +165 -0
- package/lib/module/handlers/gestures/GestureDetector/useAnimatedGesture.js.map +1 -0
- package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js +41 -0
- package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -0
- package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js +36 -0
- package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -0
- package/lib/module/handlers/gestures/GestureDetector/utils.js +142 -0
- package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -0
- package/lib/module/handlers/gestures/gestureComposition.js +3 -1
- package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js +8 -0
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/module/utils.js +34 -0
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js +6 -8
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/module/web/detectors/ScaleGestureDetector.js +5 -6
- package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +1 -0
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +56 -64
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js +1 -0
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/ManualGestureHandler.js +1 -0
- package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js +7 -4
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +28 -18
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +1 -0
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +1 -0
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +18 -12
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +1 -6
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +8 -3
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/web/tools/PointerTracker.js +89 -57
- package/lib/module/web/tools/PointerTracker.js.map +1 -1
- package/lib/module/web/tools/TouchEventManager.js +7 -3
- package/lib/module/web/tools/TouchEventManager.js.map +1 -1
- package/lib/module/web/tools/Vector.js +2 -1
- package/lib/module/web/tools/Vector.js.map +1 -1
- package/lib/module/web/utils.js +29 -0
- package/lib/module/web/utils.js.map +1 -1
- package/lib/typescript/RNGestureHandlerModule.d.ts +2 -15
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +15 -0
- package/lib/typescript/RNRenderer.d.ts +1 -3
- package/lib/typescript/RNRenderer.web.d.ts +3 -0
- package/lib/typescript/components/GestureButtons.d.ts +3 -34
- package/lib/typescript/components/GestureComponents.d.ts +21 -7
- package/lib/typescript/components/GestureComponents.web.d.ts +8 -0
- package/lib/typescript/components/GestureHandlerButton.d.ts +3 -3
- package/lib/typescript/components/GestureHandlerButton.web.d.ts +4 -0
- package/lib/typescript/getReactNativeVersion.d.ts +4 -1
- package/lib/typescript/getReactNativeVersion.web.d.ts +1 -0
- package/lib/typescript/getShadowNodeFromRef.d.ts +1 -1
- package/lib/typescript/getShadowNodeFromRef.web.d.ts +1 -0
- package/lib/typescript/handlers/PressabilityDebugView.d.ts +1 -1
- package/lib/typescript/handlers/PressabilityDebugView.web.d.ts +1 -0
- package/lib/typescript/handlers/customDirectEventTypes.d.ts +1 -2
- package/lib/typescript/handlers/customDirectEventTypes.web.d.ts +2 -0
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -2
- package/lib/typescript/handlers/gestures/GestureDetector/Wrap.d.ts +13 -0
- package/lib/typescript/handlers/gestures/GestureDetector/attachHandlers.d.ts +13 -0
- package/lib/typescript/handlers/gestures/GestureDetector/dropHandlers.d.ts +2 -0
- package/lib/typescript/handlers/gestures/{GestureDetector.d.ts → GestureDetector/index.d.ts} +4 -12
- package/lib/typescript/handlers/gestures/GestureDetector/needsToReattach.d.ts +3 -0
- package/lib/typescript/handlers/gestures/GestureDetector/types.d.ts +20 -0
- package/lib/typescript/handlers/gestures/GestureDetector/updateHandlers.d.ts +4 -0
- package/lib/typescript/handlers/gestures/GestureDetector/useAnimatedGesture.d.ts +2 -0
- package/lib/typescript/handlers/gestures/GestureDetector/useDetectorUpdater.d.ts +5 -0
- package/lib/typescript/handlers/gestures/GestureDetector/useViewRefHandler.d.ts +3 -0
- package/lib/typescript/handlers/gestures/GestureDetector/utils.d.ts +12 -0
- package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts +1 -1
- package/lib/typescript/utils.d.ts +10 -0
- package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -0
- package/lib/typescript/web/interfaces.d.ts +1 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +34 -31
- package/lib/typescript/web/utils.d.ts +4 -0
- package/package.json +5 -5
- package/src/RNGestureHandlerModule.ts +4 -104
- package/src/RNGestureHandlerModule.web.ts +105 -0
- package/src/RNRenderer.ts +3 -3
- package/src/RNRenderer.web.ts +3 -0
- package/src/components/GestureButtons.tsx +36 -4
- package/src/components/GestureComponents.tsx +131 -24
- package/src/components/GestureComponents.web.tsx +41 -0
- package/src/components/GestureHandlerButton.tsx +4 -5
- package/src/components/GestureHandlerButton.web.tsx +6 -0
- package/src/components/GestureHandlerRootView.tsx +6 -0
- package/src/components/{GestureHandlerRootView.native.tsx → GestureHandlerRootView.web.tsx} +0 -6
- package/src/getReactNativeVersion.ts +9 -1
- package/src/getReactNativeVersion.web.ts +3 -0
- package/src/getShadowNodeFromRef.ts +41 -4
- package/src/getShadowNodeFromRef.web.ts +7 -0
- package/src/handlers/PressabilityDebugView.tsx +2 -4
- package/src/handlers/PressabilityDebugView.web.tsx +4 -0
- package/src/handlers/createHandler.tsx +1 -3
- package/src/handlers/customDirectEventTypes.ts +2 -5
- package/src/handlers/customDirectEventTypes.web.ts +5 -0
- package/src/handlers/gestureHandlerCommon.ts +4 -1
- package/src/handlers/gestures/GestureDetector/Wrap.tsx +35 -0
- package/src/handlers/gestures/GestureDetector/attachHandlers.ts +112 -0
- package/src/handlers/gestures/GestureDetector/dropHandlers.ts +14 -0
- package/src/handlers/gestures/GestureDetector/index.tsx +187 -0
- package/src/handlers/gestures/GestureDetector/needsToReattach.ts +27 -0
- package/src/handlers/gestures/GestureDetector/types.ts +32 -0
- package/src/handlers/gestures/GestureDetector/updateHandlers.ts +94 -0
- package/src/handlers/gestures/GestureDetector/useAnimatedGesture.ts +206 -0
- package/src/handlers/gestures/GestureDetector/useDetectorUpdater.ts +69 -0
- package/src/handlers/gestures/GestureDetector/useViewRefHandler.ts +54 -0
- package/src/handlers/gestures/GestureDetector/utils.ts +185 -0
- package/src/handlers/gestures/gestureComposition.ts +2 -0
- package/src/handlers/gestures/gestureStateManager.ts +12 -4
- package/src/handlers/gestures/reanimatedWrapper.ts +19 -17
- package/src/utils.ts +39 -0
- package/src/web/detectors/RotationGestureDetector.ts +6 -8
- package/src/web/detectors/ScaleGestureDetector.ts +5 -6
- package/src/web/handlers/FlingGestureHandler.ts +2 -0
- package/src/web/handlers/GestureHandler.ts +53 -62
- package/src/web/handlers/LongPressGestureHandler.ts +2 -0
- package/src/web/handlers/ManualGestureHandler.ts +2 -0
- package/src/web/handlers/NativeViewGestureHandler.ts +8 -4
- package/src/web/handlers/PanGestureHandler.ts +32 -19
- package/src/web/handlers/PinchGestureHandler.ts +2 -0
- package/src/web/handlers/RotationGestureHandler.ts +2 -0
- package/src/web/handlers/TapGestureHandler.ts +20 -12
- package/src/web/interfaces.ts +1 -0
- package/src/web/tools/GestureHandlerOrchestrator.ts +1 -7
- package/src/web/tools/PointerEventManager.ts +10 -3
- package/src/web/tools/PointerTracker.ts +81 -74
- package/src/web/tools/TouchEventManager.ts +5 -3
- package/src/web/tools/Vector.ts +2 -4
- package/src/web/utils.ts +34 -0
- package/lib/commonjs/RNGestureHandlerModule.native.js +0 -16
- package/lib/commonjs/RNGestureHandlerModule.native.js.map +0 -1
- package/lib/commonjs/RNRenderer.native.js +0 -16
- package/lib/commonjs/RNRenderer.native.js.map +0 -1
- package/lib/commonjs/components/GestureComponents.native.js +0 -115
- package/lib/commonjs/components/GestureComponents.native.js.map +0 -1
- package/lib/commonjs/components/GestureHandlerButton.native.js +0 -14
- package/lib/commonjs/components/GestureHandlerButton.native.js.map +0 -1
- package/lib/commonjs/components/GestureHandlerRootView.native.js.map +0 -1
- package/lib/commonjs/getReactNativeVersion.native.js +0 -22
- package/lib/commonjs/getReactNativeVersion.native.js.map +0 -1
- package/lib/commonjs/getShadowNodeFromRef.native.js +0 -44
- package/lib/commonjs/getShadowNodeFromRef.native.js.map +0 -1
- package/lib/commonjs/handlers/PressabilityDebugView.native.js +0 -14
- package/lib/commonjs/handlers/PressabilityDebugView.native.js.map +0 -1
- package/lib/commonjs/handlers/customDirectEventTypes.native.js +0 -14
- package/lib/commonjs/handlers/customDirectEventTypes.native.js.map +0 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +0 -704
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +0 -1
- package/lib/module/RNGestureHandlerModule.native.js +0 -5
- package/lib/module/RNGestureHandlerModule.native.js.map +0 -1
- package/lib/module/RNRenderer.native.js +0 -4
- package/lib/module/RNRenderer.native.js.map +0 -1
- package/lib/module/components/GestureComponents.native.js +0 -90
- package/lib/module/components/GestureComponents.native.js.map +0 -1
- package/lib/module/components/GestureHandlerButton.native.js +0 -3
- package/lib/module/components/GestureHandlerButton.native.js.map +0 -1
- package/lib/module/components/GestureHandlerRootView.native.js.map +0 -1
- package/lib/module/getReactNativeVersion.native.js +0 -10
- package/lib/module/getReactNativeVersion.native.js.map +0 -1
- package/lib/module/getShadowNodeFromRef.native.js +0 -37
- package/lib/module/getShadowNodeFromRef.native.js.map +0 -1
- package/lib/module/handlers/PressabilityDebugView.native.js +0 -3
- package/lib/module/handlers/PressabilityDebugView.native.js.map +0 -1
- package/lib/module/handlers/customDirectEventTypes.native.js +0 -3
- package/lib/module/handlers/customDirectEventTypes.native.js.map +0 -1
- package/lib/module/handlers/gestures/GestureDetector.js +0 -654
- package/lib/module/handlers/gestures/GestureDetector.js.map +0 -1
- package/lib/typescript/RNGestureHandlerModule.native.d.ts +0 -2
- package/lib/typescript/RNRenderer.native.d.ts +0 -1
- package/lib/typescript/components/GestureComponents.native.d.ts +0 -22
- package/lib/typescript/components/GestureHandlerButton.native.d.ts +0 -4
- package/lib/typescript/getReactNativeVersion.native.d.ts +0 -4
- package/lib/typescript/getShadowNodeFromRef.native.d.ts +0 -1
- package/lib/typescript/handlers/PressabilityDebugView.native.d.ts +0 -1
- package/lib/typescript/handlers/customDirectEventTypes.native.d.ts +0 -1
- package/src/RNGestureHandlerModule.native.ts +0 -5
- package/src/RNRenderer.native.ts +0 -3
- package/src/components/GestureComponents.native.tsx +0 -148
- package/src/components/GestureHandlerButton.native.tsx +0 -5
- package/src/getReactNativeVersion.native.ts +0 -11
- package/src/getShadowNodeFromRef.native.ts +0 -44
- package/src/handlers/PressabilityDebugView.native.tsx +0 -2
- package/src/handlers/customDirectEventTypes.native.ts +0 -2
- package/src/handlers/gestures/GestureDetector.tsx +0 -894
- /package/lib/typescript/components/{GestureHandlerRootView.native.d.ts → GestureHandlerRootView.web.d.ts} +0 -0
@@ -0,0 +1,206 @@
|
|
1
|
+
import { HandlerCallbacks, CALLBACK_TYPE } from '../gesture';
|
2
|
+
import { Reanimated } from '../reanimatedWrapper';
|
3
|
+
import {
|
4
|
+
GestureTouchEvent,
|
5
|
+
GestureUpdateEvent,
|
6
|
+
GestureStateChangeEvent,
|
7
|
+
} from '../../gestureHandlerCommon';
|
8
|
+
import {
|
9
|
+
GestureStateManager,
|
10
|
+
GestureStateManagerType,
|
11
|
+
} from '../gestureStateManager';
|
12
|
+
import { State } from '../../../State';
|
13
|
+
import { TouchEventType } from '../../../TouchEventType';
|
14
|
+
import { tagMessage } from '../../../utils';
|
15
|
+
import { AttachedGestureState } from './types';
|
16
|
+
|
17
|
+
function getHandler(
|
18
|
+
type: CALLBACK_TYPE,
|
19
|
+
gesture: HandlerCallbacks<Record<string, unknown>>
|
20
|
+
) {
|
21
|
+
'worklet';
|
22
|
+
switch (type) {
|
23
|
+
case CALLBACK_TYPE.BEGAN:
|
24
|
+
return gesture.onBegin;
|
25
|
+
case CALLBACK_TYPE.START:
|
26
|
+
return gesture.onStart;
|
27
|
+
case CALLBACK_TYPE.UPDATE:
|
28
|
+
return gesture.onUpdate;
|
29
|
+
case CALLBACK_TYPE.CHANGE:
|
30
|
+
return gesture.onChange;
|
31
|
+
case CALLBACK_TYPE.END:
|
32
|
+
return gesture.onEnd;
|
33
|
+
case CALLBACK_TYPE.FINALIZE:
|
34
|
+
return gesture.onFinalize;
|
35
|
+
case CALLBACK_TYPE.TOUCHES_DOWN:
|
36
|
+
return gesture.onTouchesDown;
|
37
|
+
case CALLBACK_TYPE.TOUCHES_MOVE:
|
38
|
+
return gesture.onTouchesMove;
|
39
|
+
case CALLBACK_TYPE.TOUCHES_UP:
|
40
|
+
return gesture.onTouchesUp;
|
41
|
+
case CALLBACK_TYPE.TOUCHES_CANCELLED:
|
42
|
+
return gesture.onTouchesCancelled;
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
function touchEventTypeToCallbackType(
|
47
|
+
eventType: TouchEventType
|
48
|
+
): CALLBACK_TYPE {
|
49
|
+
'worklet';
|
50
|
+
switch (eventType) {
|
51
|
+
case TouchEventType.TOUCHES_DOWN:
|
52
|
+
return CALLBACK_TYPE.TOUCHES_DOWN;
|
53
|
+
case TouchEventType.TOUCHES_MOVE:
|
54
|
+
return CALLBACK_TYPE.TOUCHES_MOVE;
|
55
|
+
case TouchEventType.TOUCHES_UP:
|
56
|
+
return CALLBACK_TYPE.TOUCHES_UP;
|
57
|
+
case TouchEventType.TOUCHES_CANCELLED:
|
58
|
+
return CALLBACK_TYPE.TOUCHES_CANCELLED;
|
59
|
+
}
|
60
|
+
return CALLBACK_TYPE.UNDEFINED;
|
61
|
+
}
|
62
|
+
|
63
|
+
function runWorklet(
|
64
|
+
type: CALLBACK_TYPE,
|
65
|
+
gesture: HandlerCallbacks<Record<string, unknown>>,
|
66
|
+
event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent,
|
67
|
+
...args: unknown[]
|
68
|
+
) {
|
69
|
+
'worklet';
|
70
|
+
const handler = getHandler(type, gesture);
|
71
|
+
if (gesture.isWorklet[type]) {
|
72
|
+
// @ts-ignore Logic below makes sure the correct event is send to the
|
73
|
+
// correct handler.
|
74
|
+
handler?.(event, ...args);
|
75
|
+
} else if (handler) {
|
76
|
+
console.warn(tagMessage('Animated gesture callback must be a worklet'));
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
function isStateChangeEvent(
|
81
|
+
event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent
|
82
|
+
): event is GestureStateChangeEvent {
|
83
|
+
'worklet';
|
84
|
+
// @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point
|
85
|
+
return event.oldState != null;
|
86
|
+
}
|
87
|
+
|
88
|
+
function isTouchEvent(
|
89
|
+
event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent
|
90
|
+
): event is GestureTouchEvent {
|
91
|
+
'worklet';
|
92
|
+
return event.eventType != null;
|
93
|
+
}
|
94
|
+
|
95
|
+
export function useAnimatedGesture(
|
96
|
+
preparedGesture: AttachedGestureState,
|
97
|
+
needsRebuild: boolean
|
98
|
+
) {
|
99
|
+
if (!Reanimated) {
|
100
|
+
return;
|
101
|
+
}
|
102
|
+
|
103
|
+
// Hooks are called conditionally, but the condition is whether the
|
104
|
+
// react-native-reanimated is installed, which shouldn't change while running
|
105
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
106
|
+
const sharedHandlersCallbacks = Reanimated.useSharedValue<
|
107
|
+
HandlerCallbacks<Record<string, unknown>>[] | null
|
108
|
+
>(null);
|
109
|
+
|
110
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
111
|
+
const lastUpdateEvent = Reanimated.useSharedValue<
|
112
|
+
(GestureUpdateEvent | undefined)[]
|
113
|
+
>([]);
|
114
|
+
|
115
|
+
// not every gesture needs a state controller, init them lazily
|
116
|
+
const stateControllers: GestureStateManagerType[] = [];
|
117
|
+
|
118
|
+
const callback = (
|
119
|
+
event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent
|
120
|
+
) => {
|
121
|
+
'worklet';
|
122
|
+
|
123
|
+
const currentCallback = sharedHandlersCallbacks.value;
|
124
|
+
if (!currentCallback) {
|
125
|
+
return;
|
126
|
+
}
|
127
|
+
|
128
|
+
for (let i = 0; i < currentCallback.length; i++) {
|
129
|
+
const gesture = currentCallback[i];
|
130
|
+
|
131
|
+
if (event.handlerTag !== gesture.handlerTag) {
|
132
|
+
continue;
|
133
|
+
}
|
134
|
+
|
135
|
+
if (isStateChangeEvent(event)) {
|
136
|
+
if (
|
137
|
+
event.oldState === State.UNDETERMINED &&
|
138
|
+
event.state === State.BEGAN
|
139
|
+
) {
|
140
|
+
runWorklet(CALLBACK_TYPE.BEGAN, gesture, event);
|
141
|
+
} else if (
|
142
|
+
(event.oldState === State.BEGAN ||
|
143
|
+
event.oldState === State.UNDETERMINED) &&
|
144
|
+
event.state === State.ACTIVE
|
145
|
+
) {
|
146
|
+
runWorklet(CALLBACK_TYPE.START, gesture, event);
|
147
|
+
lastUpdateEvent.value[gesture.handlerTag] = undefined;
|
148
|
+
} else if (
|
149
|
+
event.oldState !== event.state &&
|
150
|
+
event.state === State.END
|
151
|
+
) {
|
152
|
+
if (event.oldState === State.ACTIVE) {
|
153
|
+
runWorklet(CALLBACK_TYPE.END, gesture, event, true);
|
154
|
+
}
|
155
|
+
runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, true);
|
156
|
+
} else if (
|
157
|
+
(event.state === State.FAILED || event.state === State.CANCELLED) &&
|
158
|
+
event.state !== event.oldState
|
159
|
+
) {
|
160
|
+
if (event.oldState === State.ACTIVE) {
|
161
|
+
runWorklet(CALLBACK_TYPE.END, gesture, event, false);
|
162
|
+
}
|
163
|
+
runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, false);
|
164
|
+
}
|
165
|
+
} else if (isTouchEvent(event)) {
|
166
|
+
if (!stateControllers[i]) {
|
167
|
+
stateControllers[i] = GestureStateManager.create(event.handlerTag);
|
168
|
+
}
|
169
|
+
|
170
|
+
if (event.eventType !== TouchEventType.UNDETERMINED) {
|
171
|
+
runWorklet(
|
172
|
+
touchEventTypeToCallbackType(event.eventType),
|
173
|
+
gesture,
|
174
|
+
event,
|
175
|
+
stateControllers[i]
|
176
|
+
);
|
177
|
+
}
|
178
|
+
} else {
|
179
|
+
runWorklet(CALLBACK_TYPE.UPDATE, gesture, event);
|
180
|
+
|
181
|
+
if (gesture.onChange && gesture.changeEventCalculator) {
|
182
|
+
runWorklet(
|
183
|
+
CALLBACK_TYPE.CHANGE,
|
184
|
+
gesture,
|
185
|
+
gesture.changeEventCalculator?.(
|
186
|
+
event,
|
187
|
+
lastUpdateEvent.value[gesture.handlerTag]
|
188
|
+
)
|
189
|
+
);
|
190
|
+
|
191
|
+
lastUpdateEvent.value[gesture.handlerTag] = event;
|
192
|
+
}
|
193
|
+
}
|
194
|
+
}
|
195
|
+
};
|
196
|
+
|
197
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
198
|
+
const event = Reanimated.useEvent(
|
199
|
+
callback,
|
200
|
+
['onGestureHandlerStateChange', 'onGestureHandlerEvent'],
|
201
|
+
needsRebuild
|
202
|
+
);
|
203
|
+
|
204
|
+
preparedGesture.animatedEventHandler = event;
|
205
|
+
preparedGesture.animatedHandlers = sharedHandlersCallbacks;
|
206
|
+
}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
import React, { useCallback } from 'react';
|
2
|
+
import { findNodeHandle } from 'react-native';
|
3
|
+
import { GestureType } from '../gesture';
|
4
|
+
import { ComposedGesture } from '../gestureComposition';
|
5
|
+
|
6
|
+
import {
|
7
|
+
AttachedGestureState,
|
8
|
+
GestureDetectorState,
|
9
|
+
WebEventHandler,
|
10
|
+
} from './types';
|
11
|
+
import { attachHandlers } from './attachHandlers';
|
12
|
+
import { updateHandlers } from './updateHandlers';
|
13
|
+
import { needsToReattach } from './needsToReattach';
|
14
|
+
import { dropHandlers } from './dropHandlers';
|
15
|
+
import { useForceRender, validateDetectorChildren } from './utils';
|
16
|
+
|
17
|
+
// Returns a function that's responsible for updating the attached gestures
|
18
|
+
// If the view has changed, it will reattach the handlers to the new view
|
19
|
+
// If the view remains the same, it will update the handlers with the new config
|
20
|
+
export function useDetectorUpdater(
|
21
|
+
state: GestureDetectorState,
|
22
|
+
preparedGesture: AttachedGestureState,
|
23
|
+
gesturesToAttach: GestureType[],
|
24
|
+
gestureConfig: ComposedGesture | GestureType,
|
25
|
+
webEventHandlersRef: React.RefObject<WebEventHandler>
|
26
|
+
) {
|
27
|
+
const forceRender = useForceRender();
|
28
|
+
const updateAttachedGestures = useCallback(
|
29
|
+
// skipConfigUpdate is used to prevent unnecessary updates when only checking if the view has changed
|
30
|
+
(skipConfigUpdate?: boolean) => {
|
31
|
+
// if the underlying view has changed we need to reattach handlers to the new view
|
32
|
+
const viewTag = findNodeHandle(state.viewRef) as number;
|
33
|
+
const didUnderlyingViewChange = viewTag !== state.previousViewTag;
|
34
|
+
|
35
|
+
if (
|
36
|
+
didUnderlyingViewChange ||
|
37
|
+
needsToReattach(preparedGesture, gesturesToAttach)
|
38
|
+
) {
|
39
|
+
validateDetectorChildren(state.viewRef);
|
40
|
+
dropHandlers(preparedGesture);
|
41
|
+
attachHandlers({
|
42
|
+
preparedGesture,
|
43
|
+
gestureConfig,
|
44
|
+
gesturesToAttach,
|
45
|
+
webEventHandlersRef,
|
46
|
+
viewTag,
|
47
|
+
});
|
48
|
+
|
49
|
+
if (didUnderlyingViewChange) {
|
50
|
+
state.previousViewTag = viewTag;
|
51
|
+
state.forceRebuildReanimatedEvent = true;
|
52
|
+
forceRender();
|
53
|
+
}
|
54
|
+
} else if (!skipConfigUpdate) {
|
55
|
+
updateHandlers(preparedGesture, gestureConfig, gesturesToAttach);
|
56
|
+
}
|
57
|
+
},
|
58
|
+
[
|
59
|
+
forceRender,
|
60
|
+
gestureConfig,
|
61
|
+
gesturesToAttach,
|
62
|
+
preparedGesture,
|
63
|
+
state,
|
64
|
+
webEventHandlersRef,
|
65
|
+
]
|
66
|
+
);
|
67
|
+
|
68
|
+
return updateAttachedGestures;
|
69
|
+
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import { isFabric, tagMessage } from '../../../utils';
|
2
|
+
import { getShadowNodeFromRef } from '../../../getShadowNodeFromRef';
|
3
|
+
|
4
|
+
import { GestureDetectorState } from './types';
|
5
|
+
import React, { useCallback } from 'react';
|
6
|
+
import { findNodeHandle } from 'react-native';
|
7
|
+
|
8
|
+
declare const global: {
|
9
|
+
isFormsStackingContext: (node: unknown) => boolean | null; // JSI function
|
10
|
+
};
|
11
|
+
|
12
|
+
// Ref handler for the Wrap component attached under the GestureDetector.
|
13
|
+
// It's responsible for setting the viewRef on the state and triggering the reattaching of handlers
|
14
|
+
// if the view has changed.
|
15
|
+
export function useViewRefHandler(
|
16
|
+
state: GestureDetectorState,
|
17
|
+
updateAttachedGestures: (skipConfigUpdate?: boolean) => void
|
18
|
+
) {
|
19
|
+
const refHandler = useCallback(
|
20
|
+
(ref: React.Component | null) => {
|
21
|
+
if (ref === null) {
|
22
|
+
return;
|
23
|
+
}
|
24
|
+
|
25
|
+
state.viewRef = ref;
|
26
|
+
|
27
|
+
// if it's the first render, also set the previousViewTag to prevent reattaching gestures when not needed
|
28
|
+
if (state.previousViewTag === -1) {
|
29
|
+
state.previousViewTag = findNodeHandle(state.viewRef) as number;
|
30
|
+
}
|
31
|
+
|
32
|
+
// Pass true as `skipConfigUpdate`. Here we only want to trigger the eventual reattaching of handlers
|
33
|
+
// in case the view has changed. If the view doesn't change, the update will be handled by detector.
|
34
|
+
if (!state.firstRender) {
|
35
|
+
updateAttachedGestures(true);
|
36
|
+
}
|
37
|
+
|
38
|
+
if (__DEV__ && isFabric() && global.isFormsStackingContext) {
|
39
|
+
const node = getShadowNodeFromRef(ref);
|
40
|
+
if (global.isFormsStackingContext(node) === false) {
|
41
|
+
console.error(
|
42
|
+
tagMessage(
|
43
|
+
'GestureDetector has received a child that may get view-flattened. ' +
|
44
|
+
'\nTo prevent it from misbehaving you need to wrap the child with a `<View collapsable={false}>`.'
|
45
|
+
)
|
46
|
+
);
|
47
|
+
}
|
48
|
+
}
|
49
|
+
},
|
50
|
+
[state, updateAttachedGestures]
|
51
|
+
);
|
52
|
+
|
53
|
+
return refHandler;
|
54
|
+
}
|
@@ -0,0 +1,185 @@
|
|
1
|
+
import { Platform } from 'react-native';
|
2
|
+
|
3
|
+
import { tagMessage } from '../../../utils';
|
4
|
+
import { GestureRef, BaseGesture, GestureType } from '../gesture';
|
5
|
+
|
6
|
+
import { flingGestureHandlerProps } from '../../FlingGestureHandler';
|
7
|
+
import { forceTouchGestureHandlerProps } from '../../ForceTouchGestureHandler';
|
8
|
+
import { longPressGestureHandlerProps } from '../../LongPressGestureHandler';
|
9
|
+
import {
|
10
|
+
panGestureHandlerProps,
|
11
|
+
panGestureHandlerCustomNativeProps,
|
12
|
+
} from '../../PanGestureHandler';
|
13
|
+
import { tapGestureHandlerProps } from '../../TapGestureHandler';
|
14
|
+
import { hoverGestureHandlerProps } from '../hoverGesture';
|
15
|
+
import { nativeViewGestureHandlerProps } from '../../NativeViewGestureHandler';
|
16
|
+
import {
|
17
|
+
HandlerStateChangeEvent,
|
18
|
+
baseGestureHandlerWithDetectorProps,
|
19
|
+
} from '../../gestureHandlerCommon';
|
20
|
+
import { isNewWebImplementationEnabled } from '../../../EnableNewWebImplementation';
|
21
|
+
import { getReactNativeVersion } from '../../../getReactNativeVersion';
|
22
|
+
import { RNRenderer } from '../../../RNRenderer';
|
23
|
+
import { useCallback, useRef, useState } from 'react';
|
24
|
+
import { Reanimated } from '../reanimatedWrapper';
|
25
|
+
import { onGestureHandlerEvent } from '../eventReceiver';
|
26
|
+
import { WebEventHandler } from './types';
|
27
|
+
|
28
|
+
export const ALLOWED_PROPS = [
|
29
|
+
...baseGestureHandlerWithDetectorProps,
|
30
|
+
...tapGestureHandlerProps,
|
31
|
+
...panGestureHandlerProps,
|
32
|
+
...panGestureHandlerCustomNativeProps,
|
33
|
+
...longPressGestureHandlerProps,
|
34
|
+
...forceTouchGestureHandlerProps,
|
35
|
+
...flingGestureHandlerProps,
|
36
|
+
...hoverGestureHandlerProps,
|
37
|
+
...nativeViewGestureHandlerProps,
|
38
|
+
];
|
39
|
+
|
40
|
+
function convertToHandlerTag(ref: GestureRef): number {
|
41
|
+
if (typeof ref === 'number') {
|
42
|
+
return ref;
|
43
|
+
} else if (ref instanceof BaseGesture) {
|
44
|
+
return ref.handlerTag;
|
45
|
+
} else {
|
46
|
+
// @ts-ignore in this case it should be a ref either to gesture object or
|
47
|
+
// a gesture handler component, in both cases handlerTag property exists
|
48
|
+
return ref.current?.handlerTag ?? -1;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
function extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {
|
53
|
+
return (
|
54
|
+
interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []
|
55
|
+
);
|
56
|
+
}
|
57
|
+
|
58
|
+
export function extractGestureRelations(gesture: GestureType) {
|
59
|
+
const requireToFail = extractValidHandlerTags(gesture.config.requireToFail);
|
60
|
+
const simultaneousWith = extractValidHandlerTags(
|
61
|
+
gesture.config.simultaneousWith
|
62
|
+
);
|
63
|
+
const blocksHandlers = extractValidHandlerTags(gesture.config.blocksHandlers);
|
64
|
+
|
65
|
+
return {
|
66
|
+
waitFor: requireToFail,
|
67
|
+
simultaneousHandlers: simultaneousWith,
|
68
|
+
blocksHandlers: blocksHandlers,
|
69
|
+
};
|
70
|
+
}
|
71
|
+
|
72
|
+
export function checkGestureCallbacksForWorklets(gesture: GestureType) {
|
73
|
+
if (!__DEV__) {
|
74
|
+
return;
|
75
|
+
}
|
76
|
+
// if a gesture is explicitly marked to run on the JS thread there is no need to check
|
77
|
+
// if callbacks are worklets as the user is aware they will be ran on the JS thread
|
78
|
+
if (gesture.config.runOnJS) {
|
79
|
+
return;
|
80
|
+
}
|
81
|
+
|
82
|
+
const areSomeNotWorklets = gesture.handlers.isWorklet.includes(false);
|
83
|
+
const areSomeWorklets = gesture.handlers.isWorklet.includes(true);
|
84
|
+
|
85
|
+
// if some of the callbacks are worklets and some are not, and the gesture is not
|
86
|
+
// explicitly marked with `.runOnJS(true)` show an error
|
87
|
+
if (areSomeNotWorklets && areSomeWorklets) {
|
88
|
+
console.error(
|
89
|
+
tagMessage(
|
90
|
+
`Some of the callbacks in the gesture are worklets and some are not. Either make sure that all calbacks are marked as 'worklet' if you wish to run them on the UI thread or use '.runOnJS(true)' modifier on the gesture explicitly to run all callbacks on the JS thread.`
|
91
|
+
)
|
92
|
+
);
|
93
|
+
}
|
94
|
+
|
95
|
+
if (Reanimated === undefined) {
|
96
|
+
// if Reanimated is not available, we can't run worklets, so we shouldn't show the warning
|
97
|
+
return;
|
98
|
+
}
|
99
|
+
|
100
|
+
const areAllNotWorklets = !areSomeWorklets && areSomeNotWorklets;
|
101
|
+
// if none of the callbacks are worklets and the gesture is not explicitly marked with
|
102
|
+
// `.runOnJS(true)` show a warning
|
103
|
+
if (areAllNotWorklets) {
|
104
|
+
console.warn(
|
105
|
+
tagMessage(
|
106
|
+
`None of the callbacks in the gesture are worklets. If you wish to run them on the JS thread use '.runOnJS(true)' modifier on the gesture to make this explicit. Otherwise, mark the callbacks as 'worklet' to run them on the UI thread.`
|
107
|
+
)
|
108
|
+
);
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
113
|
+
export function validateDetectorChildren(ref: any) {
|
114
|
+
// finds the first native view under the Wrap component and traverses the fiber tree upwards
|
115
|
+
// to check whether there is more than one native view as a pseudo-direct child of GestureDetector
|
116
|
+
// i.e. this is not ok:
|
117
|
+
// Wrap
|
118
|
+
// |
|
119
|
+
// / \
|
120
|
+
// / \
|
121
|
+
// / \
|
122
|
+
// / \
|
123
|
+
// NativeView NativeView
|
124
|
+
//
|
125
|
+
// but this is fine:
|
126
|
+
// Wrap
|
127
|
+
// |
|
128
|
+
// NativeView
|
129
|
+
// |
|
130
|
+
// / \
|
131
|
+
// / \
|
132
|
+
// / \
|
133
|
+
// / \
|
134
|
+
// NativeView NativeView
|
135
|
+
if (__DEV__ && Platform.OS !== 'web') {
|
136
|
+
const REACT_NATIVE_VERSION = getReactNativeVersion();
|
137
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
138
|
+
const wrapType =
|
139
|
+
REACT_NATIVE_VERSION.minor > 63 || REACT_NATIVE_VERSION.major > 0
|
140
|
+
? // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
141
|
+
ref._reactInternals.elementType
|
142
|
+
: // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
143
|
+
ref._reactInternalFiber.elementType;
|
144
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
145
|
+
let instance =
|
146
|
+
RNRenderer.findHostInstance_DEPRECATED(
|
147
|
+
ref
|
148
|
+
)._internalFiberInstanceHandleDEV;
|
149
|
+
|
150
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
151
|
+
while (instance && instance.elementType !== wrapType) {
|
152
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
153
|
+
if (instance.sibling) {
|
154
|
+
throw new Error(
|
155
|
+
'GestureDetector has more than one native view as its children. This can happen if you are using a custom component that renders multiple views, like React.Fragment. You should wrap content of GestureDetector with a <View> or <Animated.View>.'
|
156
|
+
);
|
157
|
+
}
|
158
|
+
|
159
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
160
|
+
instance = instance.return;
|
161
|
+
}
|
162
|
+
}
|
163
|
+
}
|
164
|
+
|
165
|
+
export function useForceRender() {
|
166
|
+
const [renderState, setRenderState] = useState(false);
|
167
|
+
const forceRender = useCallback(() => {
|
168
|
+
setRenderState(!renderState);
|
169
|
+
}, [renderState, setRenderState]);
|
170
|
+
|
171
|
+
return forceRender;
|
172
|
+
}
|
173
|
+
|
174
|
+
export function useWebEventHandlers() {
|
175
|
+
return useRef<WebEventHandler>({
|
176
|
+
onGestureHandlerEvent: (e: HandlerStateChangeEvent<unknown>) => {
|
177
|
+
onGestureHandlerEvent(e.nativeEvent);
|
178
|
+
},
|
179
|
+
onGestureHandlerStateChange: isNewWebImplementationEnabled()
|
180
|
+
? (e: HandlerStateChangeEvent<unknown>) => {
|
181
|
+
onGestureHandlerEvent(e.nativeEvent);
|
182
|
+
}
|
183
|
+
: undefined,
|
184
|
+
});
|
185
|
+
}
|
@@ -29,6 +29,8 @@ export class ComposedGesture extends Gesture {
|
|
29
29
|
if (gesture instanceof BaseGesture) {
|
30
30
|
const newConfig = { ...gesture.config };
|
31
31
|
|
32
|
+
// no need to extend `blocksHandlers` here, because it's not changed in composition
|
33
|
+
// the same effect is achieved by reversing the order of 2 gestures in `Exclusive`
|
32
34
|
newConfig.simultaneousWith = extendRelation(
|
33
35
|
newConfig.simultaneousWith,
|
34
36
|
simultaneousGestures
|
@@ -24,7 +24,9 @@ function create(handlerTag: number): GestureStateManagerType {
|
|
24
24
|
begin: () => {
|
25
25
|
'worklet';
|
26
26
|
if (REANIMATED_AVAILABLE) {
|
27
|
-
|
27
|
+
// When Reanimated is available, setGestureState should be defined
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
29
|
+
setGestureState!(handlerTag, State.BEGAN);
|
28
30
|
} else {
|
29
31
|
console.warn(warningMessage);
|
30
32
|
}
|
@@ -33,7 +35,9 @@ function create(handlerTag: number): GestureStateManagerType {
|
|
33
35
|
activate: () => {
|
34
36
|
'worklet';
|
35
37
|
if (REANIMATED_AVAILABLE) {
|
36
|
-
|
38
|
+
// When Reanimated is available, setGestureState should be defined
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
40
|
+
setGestureState!(handlerTag, State.ACTIVE);
|
37
41
|
} else {
|
38
42
|
console.warn(warningMessage);
|
39
43
|
}
|
@@ -42,7 +46,9 @@ function create(handlerTag: number): GestureStateManagerType {
|
|
42
46
|
fail: () => {
|
43
47
|
'worklet';
|
44
48
|
if (REANIMATED_AVAILABLE) {
|
45
|
-
|
49
|
+
// When Reanimated is available, setGestureState should be defined
|
50
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
51
|
+
setGestureState!(handlerTag, State.FAILED);
|
46
52
|
} else {
|
47
53
|
console.warn(warningMessage);
|
48
54
|
}
|
@@ -51,7 +57,9 @@ function create(handlerTag: number): GestureStateManagerType {
|
|
51
57
|
end: () => {
|
52
58
|
'worklet';
|
53
59
|
if (REANIMATED_AVAILABLE) {
|
54
|
-
|
60
|
+
// When Reanimated is available, setGestureState should be defined
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
62
|
+
setGestureState!(handlerTag, State.END);
|
55
63
|
} else {
|
56
64
|
console.warn(warningMessage);
|
57
65
|
}
|
@@ -9,23 +9,25 @@ export interface SharedValue<T> {
|
|
9
9
|
value: T;
|
10
10
|
}
|
11
11
|
|
12
|
-
let Reanimated:
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
12
|
+
let Reanimated:
|
13
|
+
| {
|
14
|
+
default: {
|
15
|
+
// Slightly modified definition copied from 'react-native-reanimated'
|
16
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
17
|
+
createAnimatedComponent<P extends object>(
|
18
|
+
component: ComponentClass<P>,
|
19
|
+
options?: unknown
|
20
|
+
): ComponentClass<P>;
|
21
|
+
};
|
22
|
+
useEvent: (
|
23
|
+
callback: (event: GestureUpdateEvent | GestureStateChangeEvent) => void,
|
24
|
+
events: string[],
|
25
|
+
rebuild: boolean
|
26
|
+
) => unknown;
|
27
|
+
useSharedValue: <T>(value: T) => SharedValue<T>;
|
28
|
+
setGestureState: (handlerTag: number, newState: number) => void;
|
29
|
+
}
|
30
|
+
| undefined;
|
29
31
|
|
30
32
|
try {
|
31
33
|
Reanimated = require('react-native-reanimated');
|
package/src/utils.ts
CHANGED
@@ -59,3 +59,42 @@ export function isRemoteDebuggingEnabled(): boolean {
|
|
59
59
|
!localGlobal.RN$Bridgeless
|
60
60
|
);
|
61
61
|
}
|
62
|
+
|
63
|
+
/**
|
64
|
+
* Recursively compares two objects for deep equality.
|
65
|
+
*
|
66
|
+
* **Note:** This function does not support cyclic references.
|
67
|
+
*
|
68
|
+
* @param obj1 - The first object to compare.
|
69
|
+
* @param obj2 - The second object to compare.
|
70
|
+
* @returns `true` if the objects are deeply equal, `false` otherwise.
|
71
|
+
*/
|
72
|
+
export function deepEqual(obj1: any, obj2: any) {
|
73
|
+
if (obj1 === obj2) {
|
74
|
+
return true;
|
75
|
+
}
|
76
|
+
|
77
|
+
if (
|
78
|
+
typeof obj1 !== 'object' ||
|
79
|
+
typeof obj2 !== 'object' ||
|
80
|
+
obj1 === null ||
|
81
|
+
obj2 === null
|
82
|
+
) {
|
83
|
+
return false;
|
84
|
+
}
|
85
|
+
|
86
|
+
const keys1 = Object.keys(obj1);
|
87
|
+
const keys2 = Object.keys(obj2);
|
88
|
+
|
89
|
+
if (keys1.length !== keys2.length) {
|
90
|
+
return false;
|
91
|
+
}
|
92
|
+
|
93
|
+
for (const key of keys1) {
|
94
|
+
if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {
|
95
|
+
return false;
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
99
|
+
return true;
|
100
|
+
}
|
@@ -39,16 +39,14 @@ export default class RotationGestureDetector
|
|
39
39
|
|
40
40
|
const [firstPointerID, secondPointerID] = this.keyPointers;
|
41
41
|
|
42
|
-
const
|
43
|
-
const
|
44
|
-
const secondPointerX: number = tracker.getLastX(secondPointerID);
|
45
|
-
const secondPointerY: number = tracker.getLastY(secondPointerID);
|
42
|
+
const firstPointerCoords = tracker.getLastAbsoluteCoords(firstPointerID);
|
43
|
+
const secondPointerCoords = tracker.getLastAbsoluteCoords(secondPointerID);
|
46
44
|
|
47
|
-
const vectorX: number =
|
48
|
-
const vectorY: number =
|
45
|
+
const vectorX: number = secondPointerCoords.x - firstPointerCoords.x;
|
46
|
+
const vectorY: number = secondPointerCoords.y - firstPointerCoords.y;
|
49
47
|
|
50
|
-
this.anchorX = (
|
51
|
-
this.anchorY = (
|
48
|
+
this.anchorX = (firstPointerCoords.x + secondPointerCoords.x) / 2;
|
49
|
+
this.anchorY = (firstPointerCoords.y + secondPointerCoords.y) / 2;
|
52
50
|
|
53
51
|
//Angle diff should be positive when rotating in clockwise direction
|
54
52
|
const angle: number = -Math.atan2(vectorY, vectorX);
|