react-native-gesture-handler 2.1.3 → 2.3.1
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE +1 -1
- package/README.md +8 -3
- package/RNGestureHandler.podspec +27 -3
- package/android/build.gradle +82 -9
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +47 -12
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +50 -14
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +7 -4
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +8 -8
- package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt +6 -4
- package/android/lib/src/main/java/com/swmansion/gesturehandler/ScaleGestureDetector.java +558 -0
- package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +29 -0
- package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +12 -0
- package/android/src/main/AndroidManifest.xml +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +29 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +40 -13
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +119 -55
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +9 -4
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +17 -2
- package/android/src/main/jni/Android.mk +53 -0
- package/android/src/main/jni/OnLoad.cpp +9 -0
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +71 -0
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +34 -0
- package/android/src/main/jni/cpp-adapter.cpp +41 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +47 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +22 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +16 -0
- package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +13 -0
- package/ios/Handlers/RNFlingHandler.m +2 -0
- package/ios/Handlers/RNPanHandler.m +2 -0
- package/ios/Handlers/RNPinchHandler.m +2 -0
- package/ios/Handlers/RNRotationHandler.m +2 -0
- package/ios/RNGestureHandler.h +3 -8
- package/ios/RNGestureHandler.m +2 -10
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
- package/ios/RNGestureHandlerActionType.h +8 -0
- package/ios/RNGestureHandlerButtonComponentView.h +17 -0
- package/ios/RNGestureHandlerButtonComponentView.mm +48 -0
- package/ios/RNGestureHandlerButtonManager.h +5 -0
- package/ios/RNGestureHandlerButtonManager.m +30 -0
- package/ios/RNGestureHandlerManager.h +2 -4
- package/ios/{RNGestureHandlerManager.m → RNGestureHandlerManager.mm} +92 -20
- package/ios/{RNGestureHandlerModule.m → RNGestureHandlerModule.mm} +91 -36
- package/ios/RNGestureHandlerRegistry.h +1 -2
- package/ios/RNGestureHandlerRegistry.m +2 -11
- package/ios/RNGestureHandlerRootViewComponentView.mm +21 -0
- package/lib/commonjs/ActionType.js +15 -0
- package/lib/commonjs/ActionType.js.map +1 -0
- package/lib/commonjs/GestureHandlerRootView.android.js +6 -6
- package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
- package/lib/commonjs/GestureHandlerRootView.js +2 -3
- package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js +4 -2
- package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/DrawerLayout.js +2 -2
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerButton.js +5 -2
- package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js +22 -20
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +21 -0
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +21 -0
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
- package/lib/commonjs/getShadowNodeFromRef.js +24 -0
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -0
- package/lib/commonjs/getShadowNodeFromRef.web.js +15 -0
- package/lib/commonjs/getShadowNodeFromRef.web.js.map +1 -0
- package/lib/commonjs/handlers/FlingGestureHandler.js +4 -2
- package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js +8 -4
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/LongPressGestureHandler.js +4 -2
- package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/NativeViewGestureHandler.js +4 -2
- package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js +4 -2
- package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PinchGestureHandler.js +4 -2
- package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/RotationGestureHandler.js +4 -2
- package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/TapGestureHandler.js +4 -2
- package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +74 -8
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/createNativeWrapper.js +6 -2
- package/lib/commonjs/handlers/createNativeWrapper.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +84 -32
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/eventReceiver.js +25 -8
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js +16 -1
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +7 -4
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +4 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/commonjs/handlers/handlersRegistry.js +42 -6
- package/lib/commonjs/handlers/handlersRegistry.js.map +1 -1
- package/lib/commonjs/index.js +14 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/init.js +10 -0
- package/lib/commonjs/init.js.map +1 -1
- package/lib/commonjs/jestUtils.js +375 -0
- package/lib/commonjs/jestUtils.js.map +1 -0
- package/lib/commonjs/utils.js +38 -0
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/ActionType.js +7 -0
- package/lib/module/ActionType.js.map +1 -0
- package/lib/module/GestureHandlerRootView.android.js +5 -6
- package/lib/module/GestureHandlerRootView.android.js.map +1 -1
- package/lib/module/GestureHandlerRootView.js +2 -3
- package/lib/module/GestureHandlerRootView.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.js +3 -2
- package/lib/module/RNGestureHandlerModule.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +1 -1
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/DrawerLayout.js +2 -2
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureHandlerButton.js +4 -2
- package/lib/module/components/GestureHandlerButton.js.map +1 -1
- package/lib/module/components/Swipeable.js +22 -20
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +9 -0
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +9 -0
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
- package/lib/module/getShadowNodeFromRef.js +17 -0
- package/lib/module/getShadowNodeFromRef.js.map +1 -0
- package/lib/module/getShadowNodeFromRef.web.js +8 -0
- package/lib/module/getShadowNodeFromRef.web.js.map +1 -0
- package/lib/module/handlers/FlingGestureHandler.js +2 -1
- package/lib/module/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/handlers/ForceTouchGestureHandler.js +5 -3
- package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/module/handlers/LongPressGestureHandler.js +2 -1
- package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/handlers/NativeViewGestureHandler.js +2 -1
- package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/handlers/PanGestureHandler.js +2 -1
- package/lib/module/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/handlers/PinchGestureHandler.js +2 -1
- package/lib/module/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/handlers/RotationGestureHandler.js +2 -1
- package/lib/module/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/handlers/TapGestureHandler.js +2 -1
- package/lib/module/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/handlers/createHandler.js +74 -9
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/createNativeWrapper.js +6 -2
- package/lib/module/handlers/createNativeWrapper.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +79 -32
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/eventReceiver.js +25 -7
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js +16 -1
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js +6 -4
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/module/handlers/gestures/panGesture.js.map +1 -1
- package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js +2 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/module/handlers/handlersRegistry.js +34 -6
- package/lib/module/handlers/handlersRegistry.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/init.js +6 -0
- package/lib/module/init.js.map +1 -1
- package/lib/module/jestUtils.js +350 -0
- package/lib/module/jestUtils.js.map +1 -0
- package/lib/module/utils.js +28 -0
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/ActionType.d.ts +7 -0
- package/lib/typescript/GestureHandlerRootView.android.d.ts +5 -2
- package/lib/typescript/GestureHandlerRootView.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.d.ts +3 -1
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +2 -1
- package/lib/typescript/components/GestureHandlerButton.d.ts +2 -2
- package/lib/typescript/components/Swipeable.d.ts +12 -4
- package/lib/typescript/getShadowNodeFromRef.d.ts +1 -0
- package/lib/typescript/getShadowNodeFromRef.web.d.ts +1 -0
- package/lib/typescript/handlers/FlingGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/LongPressGestureHandler.d.ts +3 -2
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/PanGestureHandler.d.ts +3 -2
- package/lib/typescript/handlers/PinchGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/RotationGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/TapGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +2 -4
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +4 -1
- package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +1 -2
- package/lib/typescript/handlers/gestures/gesture.d.ts +5 -0
- package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -2
- package/lib/typescript/handlers/gestures/pinchGesture.d.ts +1 -2
- package/lib/typescript/handlers/handlersRegistry.d.ts +10 -2
- package/lib/typescript/index.d.ts +4 -0
- package/lib/typescript/jestUtils.d.ts +28 -0
- package/lib/typescript/utils.d.ts +6 -0
- package/package.json +39 -16
- package/src/ActionType.ts +9 -0
- package/src/GestureHandlerRootView.android.tsx +14 -14
- package/src/GestureHandlerRootView.tsx +4 -4
- package/src/RNGestureHandlerModule.ts +11 -6
- package/src/RNGestureHandlerModule.web.ts +2 -1
- package/src/components/DrawerLayout.tsx +8 -2
- package/src/components/GestureHandlerButton.tsx +7 -4
- package/src/components/Swipeable.tsx +28 -22
- package/src/fabric/RNGestureHandlerButtonNativeComponent.js +27 -0
- package/src/fabric/RNGestureHandlerRootViewNativeComponent.js +19 -0
- package/src/getShadowNodeFromRef.ts +19 -0
- package/src/getShadowNodeFromRef.web.ts +7 -0
- package/src/handlers/FlingGestureHandler.ts +3 -1
- package/src/handlers/ForceTouchGestureHandler.ts +8 -2
- package/src/handlers/LongPressGestureHandler.ts +5 -3
- package/src/handlers/NativeViewGestureHandler.ts +3 -1
- package/src/handlers/PanGestureHandler.ts +5 -3
- package/src/handlers/PinchGestureHandler.ts +3 -1
- package/src/handlers/RotationGestureHandler.ts +3 -1
- package/src/handlers/TapGestureHandler.ts +3 -1
- package/src/handlers/createHandler.ts +80 -5
- package/src/handlers/createNativeWrapper.tsx +7 -1
- package/src/handlers/gestureHandlerCommon.ts +2 -5
- package/src/handlers/gestures/GestureDetector.tsx +110 -37
- package/src/handlers/gestures/eventReceiver.ts +23 -19
- package/src/handlers/gestures/forceTouchGesture.ts +1 -1
- package/src/handlers/gestures/gesture.ts +21 -1
- package/src/handlers/gestures/gestureStateManager.ts +9 -12
- package/src/handlers/gestures/panGesture.ts +1 -1
- package/src/handlers/gestures/pinchGesture.ts +1 -1
- package/src/handlers/gestures/reanimatedWrapper.ts +4 -1
- package/src/handlers/handlersRegistry.ts +44 -6
- package/src/index.ts +4 -0
- package/src/init.ts +6 -0
- package/src/jestUtils.ts +506 -0
- package/src/utils.ts +38 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +0 -18
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +0 -21
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +0 -17
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["gestureHandlerCommon.ts"],"names":["Platform","findNodeHandle","findNodeHandleRN","handlerIDToTag","toArray","commonProps","componentInteractionProps","baseGestureHandlerProps","baseGestureHandlerWithMonitorProps","isConfigParam","param","name","undefined","Object","filterConfig","props","validProps","defaults","filteredConfig","key","value","transformIntoHandlerTags","top","left","bottom","right","handlerIDs","OS","map","current","filter","handle","handlerID","handlerTag","node"],"mappings":"AAAA;AACA;AACA;AACA;AAEA,SAASA,QAAT,EAAmBC,cAAc,IAAIC,gBAArC,QAA6D,cAA7D;AAKA,SAASC,cAAT,QAA+B,oBAA/B;AACA,SAASC,OAAT,QAAwB,UAAxB;AAEA,MAAMC,WAAW,GAAG,CAClB,IADkB,EAElB,SAFkB,EAGlB,yBAHkB,EAIlB,SAJkB,CAApB;AAOA,MAAMC,yBAAyB,GAAG,CAAC,SAAD,EAAY,sBAAZ,CAAlC;AAEA,OAAO,MAAMC,uBAAuB,GAAG,CACrC,GAAGF,WADkC,EAErC,GAAGC,yBAFkC,EAGrC,SAHqC,EAIrC,UAJqC,EAKrC,aALqC,EAMrC,aANqC,EAOrC,SAPqC,EAQrC,gBARqC,EASrC,sBATqC,CAAhC;AAYP,OAAO,MAAME,kCAAkC,GAAG,CAChD,GAAGH,WAD6C,EAEhD,kBAFgD,EAGhD,kBAHgD,CAA3C;;
|
1
|
+
{"version":3,"sources":["gestureHandlerCommon.ts"],"names":["Platform","findNodeHandle","findNodeHandleRN","handlerIDToTag","toArray","commonProps","componentInteractionProps","baseGestureHandlerProps","baseGestureHandlerWithMonitorProps","isConfigParam","param","name","undefined","Object","filterConfig","props","validProps","defaults","filteredConfig","key","value","transformIntoHandlerTags","top","left","bottom","right","handlerIDs","OS","map","current","filter","handle","handlerID","handlerTag","node"],"mappings":"AAAA;AACA;AACA;AACA;AAEA,SAASA,QAAT,EAAmBC,cAAc,IAAIC,gBAArC,QAA6D,cAA7D;AAKA,SAASC,cAAT,QAA+B,oBAA/B;AACA,SAASC,OAAT,QAAwB,UAAxB;AAEA,MAAMC,WAAW,GAAG,CAClB,IADkB,EAElB,SAFkB,EAGlB,yBAHkB,EAIlB,SAJkB,CAApB;AAOA,MAAMC,yBAAyB,GAAG,CAAC,SAAD,EAAY,sBAAZ,CAAlC;AAEA,OAAO,MAAMC,uBAAuB,GAAG,CACrC,GAAGF,WADkC,EAErC,GAAGC,yBAFkC,EAGrC,SAHqC,EAIrC,UAJqC,EAKrC,aALqC,EAMrC,aANqC,EAOrC,SAPqC,EAQrC,gBARqC,EASrC,sBATqC,CAAhC;AAYP,OAAO,MAAME,kCAAkC,GAAG,CAChD,GAAGH,WAD6C,EAEhD,kBAFgD,EAGhD,kBAHgD,CAA3C;;AA6FP,SAASI,aAAT,CAAuBC,KAAvB,EAAuCC,IAAvC,EAAqD;AACnD;AACA;AACA,SACED,KAAK,KAAKE,SAAV,KACCF,KAAK,KAAKG,MAAM,CAACH,KAAD,CAAhB,IACC,EAAE,gBAAiBA,KAAnB,CAFF,KAGAC,IAAI,KAAK,sBAHT,IAIAA,IAAI,KAAK,gBALX;AAOD;;AAED,OAAO,SAASG,YAAT,CACLC,KADK,EAELC,UAFK,EAGLC,QAAiC,GAAG,EAH/B,EAIL;AACA,QAAMC,cAAc,GAAG,EAAE,GAAGD;AAAL,GAAvB;;AACA,OAAK,MAAME,GAAX,IAAkBH,UAAlB,EAA8B;AAC5B,QAAII,KAAK,GAAGL,KAAK,CAACI,GAAD,CAAjB;;AACA,QAAIV,aAAa,CAACW,KAAD,EAAQD,GAAR,CAAjB,EAA+B;AAC7B,UAAIA,GAAG,KAAK,sBAAR,IAAkCA,GAAG,KAAK,SAA9C,EAAyD;AACvDC,QAAAA,KAAK,GAAGC,wBAAwB,CAACN,KAAK,CAACI,GAAD,CAAN,CAAhC;AACD,OAFD,MAEO,IAAIA,GAAG,KAAK,SAAR,IAAqB,OAAOC,KAAP,KAAiB,QAA1C,EAAoD;AACzDA,QAAAA,KAAK,GAAG;AAAEE,UAAAA,GAAG,EAAEF,KAAP;AAAcG,UAAAA,IAAI,EAAEH,KAApB;AAA2BI,UAAAA,MAAM,EAAEJ,KAAnC;AAA0CK,UAAAA,KAAK,EAAEL;AAAjD,SAAR;AACD;;AACDF,MAAAA,cAAc,CAACC,GAAD,CAAd,GAAsBC,KAAtB;AACD;AACF;;AACD,SAAOF,cAAP;AACD;;AAED,SAASG,wBAAT,CAAkCK,UAAlC,EAAmD;AACjDA,EAAAA,UAAU,GAAGtB,OAAO,CAACsB,UAAD,CAApB;;AAEA,MAAI1B,QAAQ,CAAC2B,EAAT,KAAgB,KAApB,EAA2B;AACzB,WAAOD,UAAU,CACdE,GADI,CACA,CAAC;AAAEC,MAAAA;AAAF,KAAD,KAAmCA,OADnC,EAEJC,MAFI,CAEIC,MAAD,IAAiBA,MAFpB,CAAP;AAGD,GAPgD,CAQjD;;;AACA,SAAOL,UAAU,CACdE,GADI,CAEFI,SAAD;AAAA;;AAAA,WACE7B,cAAc,CAAC6B,SAAD,CAAd,2BAA6BA,SAAS,CAACH,OAAvC,uDAA6B,mBAAmBI,UAAhD,KAA8D,CAAC,CADjE;AAAA,GAFG,EAKJH,MALI,CAKIG,UAAD,IAAwBA,UAAU,GAAG,CALxC,CAAP;AAMD;;AAED,OAAO,SAAShC,cAAT,CACLiC,IADK,EAEkE;AACvE,MAAIlC,QAAQ,CAAC2B,EAAT,KAAgB,KAApB,EAA2B,OAAOO,IAAP;AAC3B,SAAOhC,gBAAgB,CAACgC,IAAD,CAAvB;AACD","sourcesContent":["// Previous types exported gesture handlers as classes which creates an interface and variable, both named the same as class.\n// Without those types, we'd introduce breaking change, forcing users to prefix every handler type specification with typeof\n// e.g. React.createRef<TapGestureHandler> -> React.createRef<typeof TapGestureHandler>.\n// See https://www.typescriptlang.org/docs/handbook/classes.html#constructor-functions for reference.\nimport * as React from 'react';\nimport { Platform, findNodeHandle as findNodeHandleRN } from 'react-native';\n\nimport { State } from '../State';\nimport { EventType } from '../EventType';\nimport { ValueOf } from '../typeUtils';\nimport { handlerIDToTag } from './handlersRegistry';\nimport { toArray } from '../utils';\n\nconst commonProps = [\n 'id',\n 'enabled',\n 'shouldCancelWhenOutside',\n 'hitSlop',\n] as const;\n\nconst componentInteractionProps = ['waitFor', 'simultaneousHandlers'] as const;\n\nexport const baseGestureHandlerProps = [\n ...commonProps,\n ...componentInteractionProps,\n 'onBegan',\n 'onFailed',\n 'onCancelled',\n 'onActivated',\n 'onEnded',\n 'onGestureEvent',\n 'onHandlerStateChange',\n] as const;\n\nexport const baseGestureHandlerWithMonitorProps = [\n ...commonProps,\n 'needsPointerData',\n 'manualActivation',\n];\n\nexport interface GestureEventPayload {\n handlerTag: number;\n numberOfPointers: number;\n state: ValueOf<typeof State>;\n}\nexport interface HandlerStateChangeEventPayload extends GestureEventPayload {\n oldState: ValueOf<typeof State>;\n}\n\nexport type HitSlop =\n | number\n | Partial<\n Record<\n 'left' | 'right' | 'top' | 'bottom' | 'vertical' | 'horizontal',\n number\n >\n >\n | Record<'width' | 'left', number>\n | Record<'width' | 'right', number>\n | Record<'height' | 'top', number>\n | Record<'height' | 'bottom', number>;\n\n//TODO(TS) events in handlers\n\nexport interface GestureEvent<ExtraEventPayloadT = Record<string, unknown>> {\n nativeEvent: Readonly<GestureEventPayload & ExtraEventPayloadT>;\n}\nexport interface HandlerStateChangeEvent<\n ExtraEventPayloadT = Record<string, unknown>\n> {\n nativeEvent: Readonly<HandlerStateChangeEventPayload & ExtraEventPayloadT>;\n}\n\nexport type TouchData = {\n id: number;\n x: number;\n y: number;\n absoluteX: number;\n absoluteY: number;\n};\n\nexport type GestureTouchEvent = {\n handlerTag: number;\n numberOfTouches: number;\n state: ValueOf<typeof State>;\n eventType: EventType;\n allTouches: TouchData[];\n changedTouches: TouchData[];\n};\n\nexport type GestureUpdateEvent<\n GestureEventPayloadT = Record<string, unknown>\n> = GestureEventPayload & GestureEventPayloadT;\n\nexport type GestureStateChangeEvent<\n GestureStateChangeEventPayloadT = Record<string, unknown>\n> = HandlerStateChangeEventPayload & GestureStateChangeEventPayloadT;\n\nexport type CommonGestureConfig = {\n enabled?: boolean;\n shouldCancelWhenOutside?: boolean;\n hitSlop?: HitSlop;\n};\n\n// Events payloads are types instead of interfaces due to TS limitation.\n// See https://github.com/microsoft/TypeScript/issues/15300 for more info.\nexport type BaseGestureHandlerProps<\n ExtraEventPayloadT extends Record<string, unknown> = Record<string, unknown>\n> = CommonGestureConfig & {\n id?: string;\n waitFor?: React.Ref<unknown> | React.Ref<unknown>[];\n simultaneousHandlers?: React.Ref<unknown> | React.Ref<unknown>[];\n testID?: string;\n // TODO(TS) - fix event types\n onBegan?: (event: HandlerStateChangeEvent) => void;\n onFailed?: (event: HandlerStateChangeEvent) => void;\n onCancelled?: (event: HandlerStateChangeEvent) => void;\n onActivated?: (event: HandlerStateChangeEvent) => void;\n onEnded?: (event: HandlerStateChangeEvent) => void;\n\n //TODO(TS) consider using NativeSyntheticEvent\n onGestureEvent?: (event: GestureEvent<ExtraEventPayloadT>) => void;\n onHandlerStateChange?: (\n event: HandlerStateChangeEvent<ExtraEventPayloadT>\n ) => void;\n};\n\nfunction isConfigParam(param: unknown, name: string) {\n // param !== Object(param) returns false if `param` is a function\n // or an object and returns true if `param` is null\n return (\n param !== undefined &&\n (param !== Object(param) ||\n !('__isNative' in (param as Record<string, unknown>))) &&\n name !== 'onHandlerStateChange' &&\n name !== 'onGestureEvent'\n );\n}\n\nexport function filterConfig(\n props: Record<string, unknown>,\n validProps: string[],\n defaults: Record<string, unknown> = {}\n) {\n const filteredConfig = { ...defaults };\n for (const key of validProps) {\n let value = props[key];\n if (isConfigParam(value, key)) {\n if (key === 'simultaneousHandlers' || key === 'waitFor') {\n value = transformIntoHandlerTags(props[key]);\n } else if (key === 'hitSlop' && typeof value !== 'object') {\n value = { top: value, left: value, bottom: value, right: value };\n }\n filteredConfig[key] = value;\n }\n }\n return filteredConfig;\n}\n\nfunction transformIntoHandlerTags(handlerIDs: any) {\n handlerIDs = toArray(handlerIDs);\n\n if (Platform.OS === 'web') {\n return handlerIDs\n .map(({ current }: { current: any }) => current)\n .filter((handle: any) => handle);\n }\n // converts handler string IDs into their numeric tags\n return handlerIDs\n .map(\n (handlerID: any) =>\n handlerIDToTag[handlerID] || handlerID.current?.handlerTag || -1\n )\n .filter((handlerTag: number) => handlerTag > 0);\n}\n\nexport function findNodeHandle(\n node: null | number | React.Component<any, any> | React.ComponentClass<any>\n): null | number | React.Component<any, any> | React.ComponentClass<any> {\n if (Platform.OS === 'web') return node;\n return findNodeHandleRN(node);\n}\n"]}
|
@@ -14,6 +14,9 @@ import { panGestureHandlerProps, panGestureHandlerCustomNativeProps } from '../P
|
|
14
14
|
import { tapGestureHandlerProps } from '../TapGestureHandler';
|
15
15
|
import { State } from '../../State';
|
16
16
|
import { EventType } from '../../EventType';
|
17
|
+
import { ActionType } from '../../ActionType';
|
18
|
+
import { isFabric, tagMessage } from '../../utils';
|
19
|
+
import { getShadowNodeFromRef } from '../../getShadowNodeFromRef';
|
17
20
|
const ALLOWED_PROPS = [...baseGestureHandlerWithMonitorProps, ...tapGestureHandlerProps, ...panGestureHandlerProps, ...panGestureHandlerCustomNativeProps, ...longPressGestureHandlerProps, ...forceTouchGestureHandlerProps, ...flingGestureHandlerProps];
|
18
21
|
|
19
22
|
function convertToHandlerTag(ref) {
|
@@ -39,7 +42,23 @@ function extractValidHandlerTags(interactionGroup) {
|
|
39
42
|
function dropHandlers(preparedGesture) {
|
40
43
|
for (const handler of preparedGesture.config) {
|
41
44
|
RNGestureHandlerModule.dropGestureHandler(handler.handlerTag);
|
42
|
-
unregisterHandler(handler.handlerTag);
|
45
|
+
unregisterHandler(handler.handlerTag, handler.config.testId);
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
function checkGestureCallbacksForWorklets(gesture) {
|
50
|
+
// if a gesture is explicitly marked to run on the JS thread there is no need to check
|
51
|
+
// if callbacks are worklets as the user is aware they will be ran on the JS thread
|
52
|
+
if (gesture.config.runOnJS) {
|
53
|
+
return;
|
54
|
+
}
|
55
|
+
|
56
|
+
const areSomeNotWorklets = gesture.handlers.isWorklet.includes(false);
|
57
|
+
const areSomeWorklets = gesture.handlers.isWorklet.includes(true); // if some of the callbacks are worklets and some are not, and the gesture is not
|
58
|
+
// explicitly marked with `.runOnJS(true)` show an error
|
59
|
+
|
60
|
+
if (areSomeNotWorklets && areSomeWorklets) {
|
61
|
+
console.error(tagMessage(`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.`));
|
43
62
|
}
|
44
63
|
}
|
45
64
|
|
@@ -47,8 +66,7 @@ function attachHandlers({
|
|
47
66
|
preparedGesture,
|
48
67
|
gestureConfig,
|
49
68
|
gesture,
|
50
|
-
viewTag
|
51
|
-
useAnimated
|
69
|
+
viewTag
|
52
70
|
}) {
|
53
71
|
if (!preparedGesture.firstExecution) {
|
54
72
|
gestureConfig === null || gestureConfig === void 0 ? void 0 : gestureConfig.initialize();
|
@@ -63,8 +81,9 @@ function attachHandlers({
|
|
63
81
|
});
|
64
82
|
|
65
83
|
for (const handler of gesture) {
|
84
|
+
checkGestureCallbacksForWorklets(handler);
|
66
85
|
RNGestureHandlerModule.createGestureHandler(handler.handlerName, handler.handlerTag, filterConfig(handler.config, ALLOWED_PROPS));
|
67
|
-
registerHandler(handler.handlerTag, handler); // use setImmediate to extract handlerTags, because all refs should be initialized
|
86
|
+
registerHandler(handler.handlerTag, handler, handler.config.testId); // use setImmediate to extract handlerTags, because all refs should be initialized
|
68
87
|
// when it's ran
|
69
88
|
|
70
89
|
setImmediate(() => {
|
@@ -90,12 +109,14 @@ function attachHandlers({
|
|
90
109
|
preparedGesture.config = gesture;
|
91
110
|
|
92
111
|
for (const gesture of preparedGesture.config) {
|
93
|
-
|
94
|
-
);
|
112
|
+
const actionType = gesture.shouldUseReanimated ? ActionType.REANIMATED_WORKLET : ActionType.JS_FUNCTION_NEW_API;
|
113
|
+
RNGestureHandlerModule.attachGestureHandler(gesture.handlerTag, viewTag, actionType);
|
95
114
|
}
|
96
115
|
|
97
116
|
if (preparedGesture.animatedHandlers) {
|
98
|
-
|
117
|
+
const isAnimatedGesture = g => g.shouldUseReanimated;
|
118
|
+
|
119
|
+
preparedGesture.animatedHandlers.value = gesture.filter(isAnimatedGesture).map(g => g.handlers);
|
99
120
|
}
|
100
121
|
}
|
101
122
|
|
@@ -104,8 +125,13 @@ function updateHandlers(preparedGesture, gestureConfig, gesture) {
|
|
104
125
|
|
105
126
|
for (let i = 0; i < gesture.length; i++) {
|
106
127
|
const handler = preparedGesture.config[i];
|
107
|
-
|
108
|
-
gesture
|
128
|
+
checkGestureCallbacksForWorklets(handler); // only update handlerTag when it's actually different, it may be the same
|
129
|
+
// if gesture config object is wrapped with useMemo
|
130
|
+
|
131
|
+
if (gesture[i].handlerTag !== handler.handlerTag) {
|
132
|
+
gesture[i].handlerTag = handler.handlerTag;
|
133
|
+
gesture[i].handlers.handlerTag = handler.handlerTag;
|
134
|
+
}
|
109
135
|
} // use setImmediate to extract handlerTags, because when it's ran, all refs should be updated
|
110
136
|
// and handlerTags in BaseGesture references should be updated in the loop above (we need to wait
|
111
137
|
// in case of external relations)
|
@@ -116,18 +142,18 @@ function updateHandlers(preparedGesture, gestureConfig, gesture) {
|
|
116
142
|
const handler = preparedGesture.config[i];
|
117
143
|
handler.config = gesture[i].config;
|
118
144
|
handler.handlers = gesture[i].handlers;
|
119
|
-
handler.handlers.handlerTag = handler.handlerTag;
|
120
145
|
const requireToFail = extractValidHandlerTags(handler.config.requireToFail);
|
121
146
|
const simultaneousWith = extractValidHandlerTags(handler.config.simultaneousWith);
|
122
147
|
RNGestureHandlerModule.updateGestureHandler(handler.handlerTag, filterConfig(handler.config, ALLOWED_PROPS, {
|
123
148
|
simultaneousHandlers: simultaneousWith,
|
124
149
|
waitFor: requireToFail
|
125
150
|
}));
|
126
|
-
registerHandler(handler.handlerTag, handler);
|
151
|
+
registerHandler(handler.handlerTag, handler, handler.config.testId);
|
127
152
|
}
|
128
153
|
|
129
154
|
if (preparedGesture.animatedHandlers) {
|
130
|
-
preparedGesture.animatedHandlers.value = preparedGesture.config.
|
155
|
+
preparedGesture.animatedHandlers.value = preparedGesture.config.filter(g => g.shouldUseReanimated) // ignore gestures that shouldn't run on UI
|
156
|
+
.map(g => g.handlers);
|
131
157
|
}
|
132
158
|
});
|
133
159
|
}
|
@@ -138,7 +164,7 @@ function needsToReattach(preparedGesture, gesture) {
|
|
138
164
|
}
|
139
165
|
|
140
166
|
for (let i = 0; i < gesture.length; i++) {
|
141
|
-
if (gesture[i].handlerName !== preparedGesture.config[i].handlerName) {
|
167
|
+
if (gesture[i].handlerName !== preparedGesture.config[i].handlerName || gesture[i].shouldUseReanimated !== preparedGesture.config[i].shouldUseReanimated) {
|
142
168
|
return true;
|
143
169
|
}
|
144
170
|
}
|
@@ -146,7 +172,7 @@ function needsToReattach(preparedGesture, gesture) {
|
|
146
172
|
return false;
|
147
173
|
}
|
148
174
|
|
149
|
-
function useAnimatedGesture(preparedGesture) {
|
175
|
+
function useAnimatedGesture(preparedGesture, needsRebuild) {
|
150
176
|
if (!Reanimated) {
|
151
177
|
return;
|
152
178
|
}
|
@@ -229,7 +255,7 @@ function useAnimatedGesture(preparedGesture) {
|
|
229
255
|
// correct handler.
|
230
256
|
handler === null || handler === void 0 ? void 0 : handler(event, ...args);
|
231
257
|
} else if (handler) {
|
232
|
-
console.warn('Animated gesture callback must be a worklet');
|
258
|
+
console.warn(tagMessage('Animated gesture callback must be a worklet'));
|
233
259
|
}
|
234
260
|
} // Hooks are called conditionally, but the condition is whether the
|
235
261
|
// react-native-reanimated is installed, which shouldn't change while running
|
@@ -297,7 +323,7 @@ function useAnimatedGesture(preparedGesture) {
|
|
297
323
|
}; // eslint-disable-next-line react-hooks/rules-of-hooks
|
298
324
|
|
299
325
|
|
300
|
-
const event = Reanimated.useEvent(callback, ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],
|
326
|
+
const event = Reanimated.useEvent(callback, ['onGestureHandlerStateChange', 'onGestureHandlerEvent'], needsRebuild);
|
301
327
|
preparedGesture.animatedEventHandler = event;
|
302
328
|
preparedGesture.animatedHandlers = sharedHandlersCallbacks;
|
303
329
|
}
|
@@ -307,7 +333,7 @@ export const GestureDetector = props => {
|
|
307
333
|
|
308
334
|
const gestureConfig = props.gesture;
|
309
335
|
const gesture = (_gestureConfig$toGest = gestureConfig === null || gestureConfig === void 0 ? void 0 : (_gestureConfig$toGest2 = gestureConfig.toGestureArray) === null || _gestureConfig$toGest2 === void 0 ? void 0 : _gestureConfig$toGest2.call(gestureConfig)) !== null && _gestureConfig$toGest !== void 0 ? _gestureConfig$toGest : [];
|
310
|
-
const
|
336
|
+
const useReanimatedHook = gesture.some(g => g.shouldUseReanimated);
|
311
337
|
const viewRef = useRef(null);
|
312
338
|
const firstRenderRef = useRef(true);
|
313
339
|
const preparedGesture = React.useRef({
|
@@ -315,12 +341,16 @@ export const GestureDetector = props => {
|
|
315
341
|
animatedEventHandler: null,
|
316
342
|
animatedHandlers: null,
|
317
343
|
firstExecution: true,
|
318
|
-
|
344
|
+
useReanimatedHook: useReanimatedHook
|
319
345
|
}).current;
|
320
346
|
|
321
|
-
if (
|
322
|
-
throw new Error('You cannot change
|
323
|
-
}
|
347
|
+
if (useReanimatedHook !== preparedGesture.useReanimatedHook) {
|
348
|
+
throw new Error(tagMessage('You cannot change the thread the callbacks are ran on while the app is running'));
|
349
|
+
} // Reanimated event should be rebuilt only when gestures are reattached, otherwise
|
350
|
+
// config update will be enough as all necessary items are stored in shared values anyway
|
351
|
+
|
352
|
+
|
353
|
+
const needsToRebuildReanimatedEvent = preparedGesture.firstExecution || needsToReattach(preparedGesture, gesture);
|
324
354
|
|
325
355
|
if (preparedGesture.firstExecution) {
|
326
356
|
var _gestureConfig$initia;
|
@@ -328,11 +358,10 @@ export const GestureDetector = props => {
|
|
328
358
|
gestureConfig === null || gestureConfig === void 0 ? void 0 : (_gestureConfig$initia = gestureConfig.initialize) === null || _gestureConfig$initia === void 0 ? void 0 : _gestureConfig$initia.call(gestureConfig);
|
329
359
|
}
|
330
360
|
|
331
|
-
if (
|
332
|
-
// Whether animatedGesture or gesture is used shouldn't change
|
333
|
-
// during while an app is running
|
361
|
+
if (useReanimatedHook) {
|
362
|
+
// Whether animatedGesture or gesture is used shouldn't change while the app is running
|
334
363
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
335
|
-
useAnimatedGesture(preparedGesture);
|
364
|
+
useAnimatedGesture(preparedGesture, needsToRebuildReanimatedEvent);
|
336
365
|
}
|
337
366
|
|
338
367
|
useEffect(() => {
|
@@ -342,8 +371,7 @@ export const GestureDetector = props => {
|
|
342
371
|
preparedGesture,
|
343
372
|
gestureConfig,
|
344
373
|
gesture,
|
345
|
-
viewTag
|
346
|
-
useAnimated
|
374
|
+
viewTag
|
347
375
|
});
|
348
376
|
return () => {
|
349
377
|
dropHandlers(preparedGesture);
|
@@ -359,8 +387,7 @@ export const GestureDetector = props => {
|
|
359
387
|
preparedGesture,
|
360
388
|
gestureConfig,
|
361
389
|
gesture,
|
362
|
-
viewTag
|
363
|
-
useAnimated
|
390
|
+
viewTag
|
364
391
|
});
|
365
392
|
} else {
|
366
393
|
updateHandlers(preparedGesture, gestureConfig, gesture);
|
@@ -370,14 +397,34 @@ export const GestureDetector = props => {
|
|
370
397
|
}
|
371
398
|
}, [props]);
|
372
399
|
|
373
|
-
|
400
|
+
const refFunction = ref => {
|
401
|
+
if (ref !== null) {
|
402
|
+
//@ts-ignore Just setting the ref
|
403
|
+
viewRef.current = ref;
|
404
|
+
|
405
|
+
if (isFabric()) {
|
406
|
+
const node = getShadowNodeFromRef(ref);
|
407
|
+
|
408
|
+
if (global.isFormsStackingContext(node) === false) {
|
409
|
+
setImmediate(() => {
|
410
|
+
// For some weird reason, console.error on iOS delays
|
411
|
+
// the execution of RNGestureHandlerModule.attachGestureHandler,
|
412
|
+
// so that's why we use setImmediate here.
|
413
|
+
console.error(tagMessage('GestureDetector has received a child that may get view-flattened. ' + '\nTo prevent it from misbehaving you need to wrap the child with a `<View collapsable={false}>`.'));
|
414
|
+
});
|
415
|
+
}
|
416
|
+
}
|
417
|
+
}
|
418
|
+
};
|
419
|
+
|
420
|
+
if (useReanimatedHook) {
|
374
421
|
return /*#__PURE__*/React.createElement(AnimatedWrap, {
|
375
|
-
ref:
|
422
|
+
ref: refFunction,
|
376
423
|
onGestureHandlerEvent: preparedGesture.animatedEventHandler
|
377
424
|
}, props.children);
|
378
425
|
} else {
|
379
426
|
return /*#__PURE__*/React.createElement(Wrap, {
|
380
|
-
ref:
|
427
|
+
ref: refFunction
|
381
428
|
}, props.children);
|
382
429
|
}
|
383
430
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["GestureDetector.tsx"],"names":["React","useEffect","useRef","BaseGesture","CALLBACK_TYPE","Reanimated","registerHandler","unregisterHandler","RNGestureHandlerModule","baseGestureHandlerWithMonitorProps","filterConfig","findNodeHandle","GestureStateManager","flingGestureHandlerProps","forceTouchGestureHandlerProps","longPressGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","tapGestureHandlerProps","State","EventType","ALLOWED_PROPS","convertToHandlerTag","ref","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","dropHandlers","preparedGesture","handler","config","dropGestureHandler","attachHandlers","gestureConfig","gesture","viewTag","useAnimated","firstExecution","initialize","setImmediate","prepare","createGestureHandler","handlerName","requireToFail","simultaneousWith","updateGestureHandler","simultaneousHandlers","waitFor","attachGestureHandler","animatedHandlers","value","g","handlers","updateHandlers","i","length","needsToReattach","useAnimatedGesture","isStateChangeEvent","event","oldState","isTouchEvent","eventType","getHandler","type","BEGAN","onBegin","START","onStart","UPDATE","onUpdate","CHANGE","onChange","END","onEnd","FINALIZE","onFinalize","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","touchEventTypeToCallbackType","UNDEFINED","runWorklet","args","isWorklet","console","warn","sharedHandlersCallbacks","useSharedValue","lastUpdateEvent","stateControllers","callback","currentCallback","UNDETERMINED","state","ACTIVE","undefined","FAILED","CANCELLED","create","changeEventCalculator","useEvent","animatedEventHandler","GestureDetector","props","toGestureArray","find","reduce","prev","viewRef","firstRenderRef","Error","children","Wrap","Component","render","child","Children","only","cloneElement","collapsable","AnimatedWrap","default","createAnimatedComponent"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport {\n GestureType,\n HandlerCallbacks,\n BaseGesture,\n GestureRef,\n CALLBACK_TYPE,\n} from './gesture';\nimport { Reanimated, SharedValue } from './reanimatedWrapper';\nimport { registerHandler, unregisterHandler } from '../handlersRegistry';\nimport RNGestureHandlerModule from '../../RNGestureHandlerModule';\nimport {\n baseGestureHandlerWithMonitorProps,\n filterConfig,\n findNodeHandle,\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport {\n GestureStateManager,\n GestureStateManagerType,\n} from './gestureStateManager';\nimport { flingGestureHandlerProps } from '../FlingGestureHandler';\nimport { forceTouchGestureHandlerProps } from '../ForceTouchGestureHandler';\nimport { longPressGestureHandlerProps } from '../LongPressGestureHandler';\nimport {\n panGestureHandlerProps,\n panGestureHandlerCustomNativeProps,\n} from '../PanGestureHandler';\nimport { tapGestureHandlerProps } from '../TapGestureHandler';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport { ComposedGesture } from './gestureComposition';\n\nconst ALLOWED_PROPS = [\n ...baseGestureHandlerWithMonitorProps,\n ...tapGestureHandlerProps,\n ...panGestureHandlerProps,\n ...panGestureHandlerCustomNativeProps,\n ...longPressGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ...flingGestureHandlerProps,\n];\n\nexport type GestureConfigReference = {\n config: GestureType[];\n animatedEventHandler: unknown;\n animatedHandlers: SharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n > | null;\n firstExecution: boolean;\n useAnimated: boolean;\n};\n\nfunction convertToHandlerTag(ref: GestureRef): number {\n if (typeof ref === 'number') {\n return ref;\n } else if (ref instanceof BaseGesture) {\n return ref.handlerTag;\n } else {\n // @ts-ignore in this case it should be a ref either to gesture object or\n // a gesture handler component, in both cases handlerTag property exists\n return ref.current?.handlerTag ?? -1;\n }\n}\n\nfunction extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {\n return (\n interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []\n );\n}\n\nfunction dropHandlers(preparedGesture: GestureConfigReference) {\n for (const handler of preparedGesture.config) {\n RNGestureHandlerModule.dropGestureHandler(handler.handlerTag);\n\n unregisterHandler(handler.handlerTag);\n }\n}\n\ninterface AttachHandlersConfig {\n preparedGesture: GestureConfigReference;\n gestureConfig: ComposedGesture | GestureType | undefined;\n gesture: GestureType[];\n viewTag: number;\n useAnimated: boolean;\n}\n\nfunction attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n}: AttachHandlersConfig) {\n if (!preparedGesture.firstExecution) {\n gestureConfig?.initialize();\n } else {\n preparedGesture.firstExecution = false;\n }\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n gestureConfig?.prepare();\n });\n\n for (const handler of gesture) {\n RNGestureHandlerModule.createGestureHandler(\n handler.handlerName,\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS)\n );\n\n registerHandler(handler.handlerTag, handler);\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n let requireToFail: number[] = [];\n if (handler.config.requireToFail) {\n requireToFail = extractValidHandlerTags(handler.config.requireToFail);\n }\n\n let simultaneousWith: number[] = [];\n if (handler.config.simultaneousWith) {\n simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n }\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n });\n }\n preparedGesture.config = gesture;\n\n for (const gesture of preparedGesture.config) {\n RNGestureHandlerModule.attachGestureHandler(\n gesture.handlerTag,\n viewTag,\n !useAnimated // send direct events when using animatedGesture, device events otherwise\n );\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (gesture.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n}\n\nfunction updateHandlers(\n preparedGesture: GestureConfigReference,\n gestureConfig: ComposedGesture | GestureType | undefined,\n gesture: GestureType[]\n) {\n gestureConfig?.prepare();\n\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n gesture[i].handlerTag = handler.handlerTag;\n gesture[i].handlers.handlerTag = handler.handlerTag;\n }\n\n // use setImmediate to extract handlerTags, because when it's ran, all refs should be updated\n // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait\n // in case of external relations)\n setImmediate(() => {\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n handler.config = gesture[i].config;\n handler.handlers = gesture[i].handlers;\n handler.handlers.handlerTag = handler.handlerTag;\n\n const requireToFail = extractValidHandlerTags(\n handler.config.requireToFail\n );\n\n const simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n\n registerHandler(handler.handlerTag, handler);\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (preparedGesture.config.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n });\n}\n\nfunction needsToReattach(\n preparedGesture: GestureConfigReference,\n gesture: GestureType[]\n) {\n if (gesture.length !== preparedGesture.config.length) {\n return true;\n }\n for (let i = 0; i < gesture.length; i++) {\n if (gesture[i].handlerName !== preparedGesture.config[i].handlerName) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction useAnimatedGesture(preparedGesture: GestureConfigReference) {\n if (!Reanimated) {\n return;\n }\n\n function isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureStateChangeEvent {\n 'worklet';\n // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point\n return event.oldState != null;\n }\n\n function isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureTouchEvent {\n 'worklet';\n return event.eventType != null;\n }\n\n function getHandler(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>\n ) {\n 'worklet';\n switch (type) {\n case CALLBACK_TYPE.BEGAN:\n return gesture.onBegin;\n case CALLBACK_TYPE.START:\n return gesture.onStart;\n case CALLBACK_TYPE.UPDATE:\n return gesture.onUpdate;\n case CALLBACK_TYPE.CHANGE:\n return gesture.onChange;\n case CALLBACK_TYPE.END:\n return gesture.onEnd;\n case CALLBACK_TYPE.FINALIZE:\n return gesture.onFinalize;\n case CALLBACK_TYPE.TOUCHES_DOWN:\n return gesture.onTouchesDown;\n case CALLBACK_TYPE.TOUCHES_MOVE:\n return gesture.onTouchesMove;\n case CALLBACK_TYPE.TOUCHES_UP:\n return gesture.onTouchesUp;\n case CALLBACK_TYPE.TOUCHES_CANCELLED:\n return gesture.onTouchesCancelled;\n }\n }\n\n function touchEventTypeToCallbackType(eventType: EventType): CALLBACK_TYPE {\n 'worklet';\n switch (eventType) {\n case EventType.TOUCHES_DOWN:\n return CALLBACK_TYPE.TOUCHES_DOWN;\n case EventType.TOUCHES_MOVE:\n return CALLBACK_TYPE.TOUCHES_MOVE;\n case EventType.TOUCHES_UP:\n return CALLBACK_TYPE.TOUCHES_UP;\n case EventType.TOUCHES_CANCELLED:\n return CALLBACK_TYPE.TOUCHES_CANCELLED;\n }\n return CALLBACK_TYPE.UNDEFINED;\n }\n\n function runWorklet(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>,\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent,\n ...args: any[]\n ) {\n 'worklet';\n const handler = getHandler(type, gesture);\n if (gesture.isWorklet[type]) {\n // @ts-ignore Logic below makes sure the correct event is send to the\n // correct handler.\n handler?.(event, ...args);\n } else if (handler) {\n console.warn('Animated gesture callback must be a worklet');\n }\n }\n\n // Hooks are called conditionally, but the condition is whether the\n // react-native-reanimated is installed, which shouldn't change while running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const sharedHandlersCallbacks = Reanimated.useSharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n >(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const lastUpdateEvent = Reanimated.useSharedValue<\n (GestureUpdateEvent | undefined)[]\n >([]);\n\n // not every gesture needs a state controller, init them lazily\n const stateControllers: GestureStateManagerType[] = [];\n\n const callback = (\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent\n ) => {\n 'worklet';\n\n const currentCallback = sharedHandlersCallbacks.value;\n if (!currentCallback) {\n return;\n }\n\n for (let i = 0; i < currentCallback.length; i++) {\n const gesture = currentCallback[i];\n\n if (event.handlerTag === gesture.handlerTag) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n runWorklet(CALLBACK_TYPE.BEGAN, gesture, event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n runWorklet(CALLBACK_TYPE.START, gesture, event);\n lastUpdateEvent.value[gesture.handlerTag] = undefined;\n } else if (\n event.oldState !== event.state &&\n event.state === State.END\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, true);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, true);\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.state !== event.oldState\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, false);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, false);\n }\n } else if (isTouchEvent(event)) {\n if (!stateControllers[i]) {\n stateControllers[i] = GestureStateManager.create(event.handlerTag);\n }\n\n if (event.eventType !== EventType.UNDETERMINED) {\n runWorklet(\n touchEventTypeToCallbackType(event.eventType),\n gesture,\n event,\n stateControllers[i]\n );\n }\n } else {\n runWorklet(CALLBACK_TYPE.UPDATE, gesture, event);\n\n if (gesture.onChange && gesture.changeEventCalculator) {\n runWorklet(\n CALLBACK_TYPE.CHANGE,\n gesture,\n gesture.changeEventCalculator?.(\n event,\n lastUpdateEvent.value[gesture.handlerTag]\n )\n );\n\n lastUpdateEvent.value[gesture.handlerTag] = event;\n }\n }\n }\n }\n };\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const event = Reanimated.useEvent(\n callback,\n ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],\n true\n );\n\n preparedGesture.animatedEventHandler = event;\n preparedGesture.animatedHandlers = sharedHandlersCallbacks;\n}\n\ninterface GestureDetectorProps {\n gesture?: ComposedGesture | GestureType;\n}\nexport const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (\n props\n) => {\n const gestureConfig = props.gesture;\n const gesture = gestureConfig?.toGestureArray?.() ?? [];\n const useAnimated =\n gesture.find((gesture) =>\n gesture.handlers.isWorklet.reduce((prev, current) => prev || current)\n ) != null;\n const viewRef = useRef(null);\n const firstRenderRef = useRef(true);\n\n const preparedGesture = React.useRef<GestureConfigReference>({\n config: gesture,\n animatedEventHandler: null,\n animatedHandlers: null,\n firstExecution: true,\n useAnimated: useAnimated,\n }).current;\n\n if (useAnimated !== preparedGesture.useAnimated) {\n throw new Error(\n 'You cannot change whether you are using gesture or animatedGesture while the app is running'\n );\n }\n\n if (preparedGesture.firstExecution) {\n gestureConfig?.initialize?.();\n }\n\n if (useAnimated) {\n // Whether animatedGesture or gesture is used shouldn't change\n // during while an app is running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useAnimatedGesture(preparedGesture);\n }\n\n useEffect(() => {\n firstRenderRef.current = true;\n const viewTag = findNodeHandle(viewRef.current) as number;\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n\n return () => {\n dropHandlers(preparedGesture);\n };\n }, []);\n\n useEffect(() => {\n if (!firstRenderRef.current) {\n const viewTag = findNodeHandle(viewRef.current) as number;\n\n if (needsToReattach(preparedGesture, gesture)) {\n dropHandlers(preparedGesture);\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n } else {\n updateHandlers(preparedGesture, gestureConfig, gesture);\n }\n } else {\n firstRenderRef.current = false;\n }\n }, [props]);\n\n if (useAnimated) {\n return (\n <AnimatedWrap\n ref={viewRef}\n onGestureHandlerEvent={preparedGesture.animatedEventHandler}>\n {props.children}\n </AnimatedWrap>\n );\n } else {\n return <Wrap ref={viewRef}>{props.children}</Wrap>;\n }\n};\n\nclass Wrap extends React.Component<{ onGestureHandlerEvent?: unknown }> {\n render() {\n // I don't think that fighting with types over such a simple function is worth it\n // The only thing it does is add 'collapsable: false' to the child component\n // to make sure it is in the native view hierarchy so the detector can find\n // correct viewTag to attach to.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const child: any = React.Children.only(this.props.children);\n\n return React.cloneElement(\n child,\n { collapsable: false },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n child.props.children\n );\n }\n}\n\nconst AnimatedWrap = Reanimated?.default?.createAnimatedComponent(Wrap) ?? Wrap;\n"]}
|
1
|
+
{"version":3,"sources":["GestureDetector.tsx"],"names":["React","useEffect","useRef","BaseGesture","CALLBACK_TYPE","Reanimated","registerHandler","unregisterHandler","RNGestureHandlerModule","baseGestureHandlerWithMonitorProps","filterConfig","findNodeHandle","GestureStateManager","flingGestureHandlerProps","forceTouchGestureHandlerProps","longPressGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","tapGestureHandlerProps","State","EventType","ActionType","isFabric","tagMessage","getShadowNodeFromRef","ALLOWED_PROPS","convertToHandlerTag","ref","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","dropHandlers","preparedGesture","handler","config","dropGestureHandler","testId","checkGestureCallbacksForWorklets","gesture","runOnJS","areSomeNotWorklets","handlers","isWorklet","includes","areSomeWorklets","console","error","attachHandlers","gestureConfig","viewTag","firstExecution","initialize","setImmediate","prepare","createGestureHandler","handlerName","requireToFail","simultaneousWith","updateGestureHandler","simultaneousHandlers","waitFor","actionType","shouldUseReanimated","REANIMATED_WORKLET","JS_FUNCTION_NEW_API","attachGestureHandler","animatedHandlers","isAnimatedGesture","g","value","updateHandlers","i","length","needsToReattach","useAnimatedGesture","needsRebuild","isStateChangeEvent","event","oldState","isTouchEvent","eventType","getHandler","type","BEGAN","onBegin","START","onStart","UPDATE","onUpdate","CHANGE","onChange","END","onEnd","FINALIZE","onFinalize","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","touchEventTypeToCallbackType","UNDEFINED","runWorklet","args","warn","sharedHandlersCallbacks","useSharedValue","lastUpdateEvent","stateControllers","callback","currentCallback","UNDETERMINED","state","ACTIVE","undefined","FAILED","CANCELLED","create","changeEventCalculator","useEvent","animatedEventHandler","GestureDetector","props","toGestureArray","useReanimatedHook","some","viewRef","firstRenderRef","Error","needsToRebuildReanimatedEvent","refFunction","node","global","isFormsStackingContext","children","Wrap","Component","render","child","Children","only","cloneElement","collapsable","AnimatedWrap","default","createAnimatedComponent"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport {\n GestureType,\n HandlerCallbacks,\n BaseGesture,\n GestureRef,\n CALLBACK_TYPE,\n} from './gesture';\nimport { Reanimated, SharedValue } from './reanimatedWrapper';\nimport { registerHandler, unregisterHandler } from '../handlersRegistry';\nimport RNGestureHandlerModule from '../../RNGestureHandlerModule';\nimport {\n baseGestureHandlerWithMonitorProps,\n filterConfig,\n findNodeHandle,\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport {\n GestureStateManager,\n GestureStateManagerType,\n} from './gestureStateManager';\nimport { flingGestureHandlerProps } from '../FlingGestureHandler';\nimport { forceTouchGestureHandlerProps } from '../ForceTouchGestureHandler';\nimport { longPressGestureHandlerProps } from '../LongPressGestureHandler';\nimport {\n panGestureHandlerProps,\n panGestureHandlerCustomNativeProps,\n} from '../PanGestureHandler';\nimport { tapGestureHandlerProps } from '../TapGestureHandler';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport { ComposedGesture } from './gestureComposition';\nimport { ActionType } from '../../ActionType';\nimport { isFabric, tagMessage } from '../../utils';\nimport { getShadowNodeFromRef } from '../../getShadowNodeFromRef';\n\ndeclare global {\n function isFormsStackingContext(node: unknown): boolean | null; // JSI function\n}\n\nconst ALLOWED_PROPS = [\n ...baseGestureHandlerWithMonitorProps,\n ...tapGestureHandlerProps,\n ...panGestureHandlerProps,\n ...panGestureHandlerCustomNativeProps,\n ...longPressGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ...flingGestureHandlerProps,\n];\n\nexport type GestureConfigReference = {\n config: GestureType[];\n animatedEventHandler: unknown;\n animatedHandlers: SharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n > | null;\n firstExecution: boolean;\n useReanimatedHook: boolean;\n};\n\nfunction convertToHandlerTag(ref: GestureRef): number {\n if (typeof ref === 'number') {\n return ref;\n } else if (ref instanceof BaseGesture) {\n return ref.handlerTag;\n } else {\n // @ts-ignore in this case it should be a ref either to gesture object or\n // a gesture handler component, in both cases handlerTag property exists\n return ref.current?.handlerTag ?? -1;\n }\n}\n\nfunction extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {\n return (\n interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []\n );\n}\n\nfunction dropHandlers(preparedGesture: GestureConfigReference) {\n for (const handler of preparedGesture.config) {\n RNGestureHandlerModule.dropGestureHandler(handler.handlerTag);\n\n unregisterHandler(handler.handlerTag, handler.config.testId);\n }\n}\n\nfunction checkGestureCallbacksForWorklets(gesture: GestureType) {\n // if a gesture is explicitly marked to run on the JS thread there is no need to check\n // if callbacks are worklets as the user is aware they will be ran on the JS thread\n if (gesture.config.runOnJS) {\n return;\n }\n\n const areSomeNotWorklets = gesture.handlers.isWorklet.includes(false);\n const areSomeWorklets = gesture.handlers.isWorklet.includes(true);\n\n // if some of the callbacks are worklets and some are not, and the gesture is not\n // explicitly marked with `.runOnJS(true)` show an error\n if (areSomeNotWorklets && areSomeWorklets) {\n console.error(\n tagMessage(\n `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.`\n )\n );\n }\n}\n\ninterface AttachHandlersConfig {\n preparedGesture: GestureConfigReference;\n gestureConfig: ComposedGesture | GestureType | undefined;\n gesture: GestureType[];\n viewTag: number;\n}\n\nfunction attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n}: AttachHandlersConfig) {\n if (!preparedGesture.firstExecution) {\n gestureConfig?.initialize();\n } else {\n preparedGesture.firstExecution = false;\n }\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n gestureConfig?.prepare();\n });\n\n for (const handler of gesture) {\n checkGestureCallbacksForWorklets(handler);\n\n RNGestureHandlerModule.createGestureHandler(\n handler.handlerName,\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS)\n );\n\n registerHandler(handler.handlerTag, handler, handler.config.testId);\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n let requireToFail: number[] = [];\n if (handler.config.requireToFail) {\n requireToFail = extractValidHandlerTags(handler.config.requireToFail);\n }\n\n let simultaneousWith: number[] = [];\n if (handler.config.simultaneousWith) {\n simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n }\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n });\n }\n preparedGesture.config = gesture;\n\n for (const gesture of preparedGesture.config) {\n const actionType = gesture.shouldUseReanimated\n ? ActionType.REANIMATED_WORKLET\n : ActionType.JS_FUNCTION_NEW_API;\n\n RNGestureHandlerModule.attachGestureHandler(\n gesture.handlerTag,\n viewTag,\n actionType\n );\n }\n\n if (preparedGesture.animatedHandlers) {\n const isAnimatedGesture = (g: GestureType) => g.shouldUseReanimated;\n\n preparedGesture.animatedHandlers.value = (gesture\n .filter(isAnimatedGesture)\n .map((g) => g.handlers) as unknown) as HandlerCallbacks<\n Record<string, unknown>\n >[];\n }\n}\n\nfunction updateHandlers(\n preparedGesture: GestureConfigReference,\n gestureConfig: ComposedGesture | GestureType | undefined,\n gesture: GestureType[]\n) {\n gestureConfig?.prepare();\n\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n checkGestureCallbacksForWorklets(handler);\n\n // only update handlerTag when it's actually different, it may be the same\n // if gesture config object is wrapped with useMemo\n if (gesture[i].handlerTag !== handler.handlerTag) {\n gesture[i].handlerTag = handler.handlerTag;\n gesture[i].handlers.handlerTag = handler.handlerTag;\n }\n }\n\n // use setImmediate to extract handlerTags, because when it's ran, all refs should be updated\n // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait\n // in case of external relations)\n setImmediate(() => {\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n handler.config = gesture[i].config;\n handler.handlers = gesture[i].handlers;\n\n const requireToFail = extractValidHandlerTags(\n handler.config.requireToFail\n );\n\n const simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n\n registerHandler(handler.handlerTag, handler, handler.config.testId);\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (preparedGesture.config\n .filter((g) => g.shouldUseReanimated) // ignore gestures that shouldn't run on UI\n .map((g) => g.handlers) as unknown) as HandlerCallbacks<\n Record<string, unknown>\n >[];\n }\n });\n}\n\nfunction needsToReattach(\n preparedGesture: GestureConfigReference,\n gesture: GestureType[]\n) {\n if (gesture.length !== preparedGesture.config.length) {\n return true;\n }\n for (let i = 0; i < gesture.length; i++) {\n if (\n gesture[i].handlerName !== preparedGesture.config[i].handlerName ||\n gesture[i].shouldUseReanimated !==\n preparedGesture.config[i].shouldUseReanimated\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction useAnimatedGesture(\n preparedGesture: GestureConfigReference,\n needsRebuild: boolean\n) {\n if (!Reanimated) {\n return;\n }\n\n function isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureStateChangeEvent {\n 'worklet';\n // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point\n return event.oldState != null;\n }\n\n function isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureTouchEvent {\n 'worklet';\n return event.eventType != null;\n }\n\n function getHandler(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>\n ) {\n 'worklet';\n switch (type) {\n case CALLBACK_TYPE.BEGAN:\n return gesture.onBegin;\n case CALLBACK_TYPE.START:\n return gesture.onStart;\n case CALLBACK_TYPE.UPDATE:\n return gesture.onUpdate;\n case CALLBACK_TYPE.CHANGE:\n return gesture.onChange;\n case CALLBACK_TYPE.END:\n return gesture.onEnd;\n case CALLBACK_TYPE.FINALIZE:\n return gesture.onFinalize;\n case CALLBACK_TYPE.TOUCHES_DOWN:\n return gesture.onTouchesDown;\n case CALLBACK_TYPE.TOUCHES_MOVE:\n return gesture.onTouchesMove;\n case CALLBACK_TYPE.TOUCHES_UP:\n return gesture.onTouchesUp;\n case CALLBACK_TYPE.TOUCHES_CANCELLED:\n return gesture.onTouchesCancelled;\n }\n }\n\n function touchEventTypeToCallbackType(eventType: EventType): CALLBACK_TYPE {\n 'worklet';\n switch (eventType) {\n case EventType.TOUCHES_DOWN:\n return CALLBACK_TYPE.TOUCHES_DOWN;\n case EventType.TOUCHES_MOVE:\n return CALLBACK_TYPE.TOUCHES_MOVE;\n case EventType.TOUCHES_UP:\n return CALLBACK_TYPE.TOUCHES_UP;\n case EventType.TOUCHES_CANCELLED:\n return CALLBACK_TYPE.TOUCHES_CANCELLED;\n }\n return CALLBACK_TYPE.UNDEFINED;\n }\n\n function runWorklet(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>,\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent,\n ...args: any[]\n ) {\n 'worklet';\n const handler = getHandler(type, gesture);\n if (gesture.isWorklet[type]) {\n // @ts-ignore Logic below makes sure the correct event is send to the\n // correct handler.\n handler?.(event, ...args);\n } else if (handler) {\n console.warn(tagMessage('Animated gesture callback must be a worklet'));\n }\n }\n\n // Hooks are called conditionally, but the condition is whether the\n // react-native-reanimated is installed, which shouldn't change while running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const sharedHandlersCallbacks = Reanimated.useSharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n >(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const lastUpdateEvent = Reanimated.useSharedValue<\n (GestureUpdateEvent | undefined)[]\n >([]);\n\n // not every gesture needs a state controller, init them lazily\n const stateControllers: GestureStateManagerType[] = [];\n\n const callback = (\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent\n ) => {\n 'worklet';\n\n const currentCallback = sharedHandlersCallbacks.value;\n if (!currentCallback) {\n return;\n }\n\n for (let i = 0; i < currentCallback.length; i++) {\n const gesture = currentCallback[i];\n\n if (event.handlerTag === gesture.handlerTag) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n runWorklet(CALLBACK_TYPE.BEGAN, gesture, event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n runWorklet(CALLBACK_TYPE.START, gesture, event);\n lastUpdateEvent.value[gesture.handlerTag] = undefined;\n } else if (\n event.oldState !== event.state &&\n event.state === State.END\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, true);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, true);\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.state !== event.oldState\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, false);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, false);\n }\n } else if (isTouchEvent(event)) {\n if (!stateControllers[i]) {\n stateControllers[i] = GestureStateManager.create(event.handlerTag);\n }\n\n if (event.eventType !== EventType.UNDETERMINED) {\n runWorklet(\n touchEventTypeToCallbackType(event.eventType),\n gesture,\n event,\n stateControllers[i]\n );\n }\n } else {\n runWorklet(CALLBACK_TYPE.UPDATE, gesture, event);\n\n if (gesture.onChange && gesture.changeEventCalculator) {\n runWorklet(\n CALLBACK_TYPE.CHANGE,\n gesture,\n gesture.changeEventCalculator?.(\n event,\n lastUpdateEvent.value[gesture.handlerTag]\n )\n );\n\n lastUpdateEvent.value[gesture.handlerTag] = event;\n }\n }\n }\n }\n };\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const event = Reanimated.useEvent(\n callback,\n ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],\n needsRebuild\n );\n\n preparedGesture.animatedEventHandler = event;\n preparedGesture.animatedHandlers = sharedHandlersCallbacks;\n}\n\ninterface GestureDetectorProps {\n gesture?: ComposedGesture | GestureType;\n}\nexport const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (\n props\n) => {\n const gestureConfig = props.gesture;\n const gesture = gestureConfig?.toGestureArray?.() ?? [];\n const useReanimatedHook = gesture.some((g) => g.shouldUseReanimated);\n const viewRef = useRef(null);\n const firstRenderRef = useRef(true);\n\n const preparedGesture = React.useRef<GestureConfigReference>({\n config: gesture,\n animatedEventHandler: null,\n animatedHandlers: null,\n firstExecution: true,\n useReanimatedHook: useReanimatedHook,\n }).current;\n\n if (useReanimatedHook !== preparedGesture.useReanimatedHook) {\n throw new Error(\n tagMessage(\n 'You cannot change the thread the callbacks are ran on while the app is running'\n )\n );\n }\n\n // Reanimated event should be rebuilt only when gestures are reattached, otherwise\n // config update will be enough as all necessary items are stored in shared values anyway\n const needsToRebuildReanimatedEvent =\n preparedGesture.firstExecution || needsToReattach(preparedGesture, gesture);\n\n if (preparedGesture.firstExecution) {\n gestureConfig?.initialize?.();\n }\n\n if (useReanimatedHook) {\n // Whether animatedGesture or gesture is used shouldn't change while the app is running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useAnimatedGesture(preparedGesture, needsToRebuildReanimatedEvent);\n }\n\n useEffect(() => {\n firstRenderRef.current = true;\n const viewTag = findNodeHandle(viewRef.current) as number;\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n });\n\n return () => {\n dropHandlers(preparedGesture);\n };\n }, []);\n\n useEffect(() => {\n if (!firstRenderRef.current) {\n const viewTag = findNodeHandle(viewRef.current) as number;\n\n if (needsToReattach(preparedGesture, gesture)) {\n dropHandlers(preparedGesture);\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n });\n } else {\n updateHandlers(preparedGesture, gestureConfig, gesture);\n }\n } else {\n firstRenderRef.current = false;\n }\n }, [props]);\n\n const refFunction = (ref: unknown) => {\n if (ref !== null) {\n //@ts-ignore Just setting the ref\n viewRef.current = ref;\n\n if (isFabric()) {\n const node = getShadowNodeFromRef(ref);\n if (global.isFormsStackingContext(node) === false) {\n setImmediate(() => {\n // For some weird reason, console.error on iOS delays\n // the execution of RNGestureHandlerModule.attachGestureHandler,\n // so that's why we use setImmediate here.\n console.error(\n tagMessage(\n 'GestureDetector has received a child that may get view-flattened. ' +\n '\\nTo prevent it from misbehaving you need to wrap the child with a `<View collapsable={false}>`.'\n )\n );\n });\n }\n }\n }\n };\n\n if (useReanimatedHook) {\n return (\n <AnimatedWrap\n ref={refFunction}\n onGestureHandlerEvent={preparedGesture.animatedEventHandler}>\n {props.children}\n </AnimatedWrap>\n );\n } else {\n return <Wrap ref={refFunction}>{props.children}</Wrap>;\n }\n};\n\nclass Wrap extends React.Component<{ onGestureHandlerEvent?: unknown }> {\n render() {\n // I don't think that fighting with types over such a simple function is worth it\n // The only thing it does is add 'collapsable: false' to the child component\n // to make sure it is in the native view hierarchy so the detector can find\n // correct viewTag to attach to.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const child: any = React.Children.only(this.props.children);\n return React.cloneElement(\n child,\n { collapsable: false },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n child.props.children\n );\n }\n}\n\nconst AnimatedWrap = Reanimated?.default?.createAnimatedComponent(Wrap) ?? Wrap;\n"]}
|
@@ -1,21 +1,23 @@
|
|
1
1
|
import { DeviceEventEmitter } from 'react-native';
|
2
2
|
import { State } from '../../State';
|
3
3
|
import { EventType } from '../../EventType';
|
4
|
-
import { findHandler } from '../handlersRegistry';
|
4
|
+
import { findHandler, findOldGestureHandler } from '../handlersRegistry';
|
5
|
+
import { tagMessage } from '../../utils';
|
5
6
|
let gestureHandlerEventSubscription = null;
|
6
7
|
let gestureHandlerStateChangeEventSubscription = null;
|
8
|
+
const warningMessage = tagMessage('You have to use react-native-reanimated in order to control the state of the gesture.');
|
7
9
|
const dummyStateManager = {
|
8
10
|
begin: () => {
|
9
|
-
console.warn(
|
11
|
+
console.warn(warningMessage);
|
10
12
|
},
|
11
13
|
activate: () => {
|
12
|
-
console.warn(
|
14
|
+
console.warn(warningMessage);
|
13
15
|
},
|
14
16
|
end: () => {
|
15
|
-
console.warn(
|
17
|
+
console.warn(warningMessage);
|
16
18
|
},
|
17
19
|
fail: () => {
|
18
|
-
console.warn(
|
20
|
+
console.warn(warningMessage);
|
19
21
|
}
|
20
22
|
};
|
21
23
|
const lastUpdateEvent = [];
|
@@ -98,6 +100,22 @@ function onGestureHandlerEvent(event) {
|
|
98
100
|
lastUpdateEvent[handler.handlers.handlerTag] = event;
|
99
101
|
}
|
100
102
|
}
|
103
|
+
} else {
|
104
|
+
const oldHandler = findOldGestureHandler(event.handlerTag);
|
105
|
+
|
106
|
+
if (oldHandler) {
|
107
|
+
const nativeEvent = {
|
108
|
+
nativeEvent: event
|
109
|
+
};
|
110
|
+
|
111
|
+
if (isStateChangeEvent(event)) {
|
112
|
+
oldHandler.onGestureStateChange(nativeEvent);
|
113
|
+
} else {
|
114
|
+
oldHandler.onGestureEvent(nativeEvent);
|
115
|
+
}
|
116
|
+
|
117
|
+
return;
|
118
|
+
}
|
101
119
|
}
|
102
120
|
}
|
103
121
|
|
@@ -108,12 +126,12 @@ export function startListening() {
|
|
108
126
|
}
|
109
127
|
export function stopListening() {
|
110
128
|
if (gestureHandlerEventSubscription) {
|
111
|
-
|
129
|
+
gestureHandlerEventSubscription.remove();
|
112
130
|
gestureHandlerEventSubscription = null;
|
113
131
|
}
|
114
132
|
|
115
133
|
if (gestureHandlerStateChangeEventSubscription) {
|
116
|
-
|
134
|
+
gestureHandlerStateChangeEventSubscription.remove();
|
117
135
|
gestureHandlerStateChangeEventSubscription = null;
|
118
136
|
}
|
119
137
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["eventReceiver.ts"],"names":["DeviceEventEmitter","State","EventType","findHandler","gestureHandlerEventSubscription","gestureHandlerStateChangeEventSubscription","dummyStateManager","begin","console","warn","activate","end","fail","lastUpdateEvent","isStateChangeEvent","event","oldState","isTouchEvent","eventType","onGestureHandlerEvent","handler","handlerTag","UNDETERMINED","state","BEGAN","handlers","onBegin","ACTIVE","onStart","END","onEnd","onFinalize","undefined","FAILED","CANCELLED","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","onUpdate","onChange","changeEventCalculator","startListening","stopListening","addListener","
|
1
|
+
{"version":3,"sources":["eventReceiver.ts"],"names":["DeviceEventEmitter","State","EventType","findHandler","findOldGestureHandler","tagMessage","gestureHandlerEventSubscription","gestureHandlerStateChangeEventSubscription","warningMessage","dummyStateManager","begin","console","warn","activate","end","fail","lastUpdateEvent","isStateChangeEvent","event","oldState","isTouchEvent","eventType","onGestureHandlerEvent","handler","handlerTag","UNDETERMINED","state","BEGAN","handlers","onBegin","ACTIVE","onStart","END","onEnd","onFinalize","undefined","FAILED","CANCELLED","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","onUpdate","onChange","changeEventCalculator","oldHandler","nativeEvent","onGestureStateChange","onGestureEvent","startListening","stopListening","addListener","remove"],"mappings":"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","sourcesContent":["import { DeviceEventEmitter, EmitterSubscription } from 'react-native';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport {\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { findHandler, findOldGestureHandler } from '../handlersRegistry';\nimport { BaseGesture } from './gesture';\nimport { tagMessage } from '../../utils';\n\nlet gestureHandlerEventSubscription: EmitterSubscription | null = null;\nlet gestureHandlerStateChangeEventSubscription: EmitterSubscription | null = null;\n\nconst warningMessage = tagMessage(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n);\n\nconst dummyStateManager: GestureStateManagerType = {\n begin: () => {\n console.warn(warningMessage);\n },\n activate: () => {\n console.warn(warningMessage);\n },\n end: () => {\n console.warn(warningMessage);\n },\n fail: () => {\n console.warn(warningMessage);\n },\n};\n\nconst lastUpdateEvent: (GestureUpdateEvent | undefined)[] = [];\n\nfunction isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureStateChangeEvent {\n // @ts-ignore oldState doesn't exist on GestureTouchEvent and that's the point\n return event.oldState != null;\n}\n\nfunction isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureTouchEvent {\n return event.eventType != null;\n}\n\nfunction onGestureHandlerEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n) {\n const handler = findHandler(event.handlerTag) as BaseGesture<\n Record<string, unknown>\n >;\n\n if (handler) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n handler.handlers.onBegin?.(event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n handler.handlers.onStart?.(event);\n lastUpdateEvent[handler.handlers.handlerTag] = event;\n } else if (event.oldState !== event.state && event.state === State.END) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, true);\n }\n handler.handlers.onFinalize?.(event, true);\n lastUpdateEvent[handler.handlers.handlerTag] = undefined;\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.oldState !== event.state\n ) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, false);\n }\n handler.handlers.onFinalize?.(event, false);\n lastUpdateEvent[handler.handlers.handlerTag] = undefined;\n }\n } else if (isTouchEvent(event)) {\n switch (event.eventType) {\n case EventType.TOUCHES_DOWN:\n handler.handlers?.onTouchesDown?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_MOVE:\n handler.handlers?.onTouchesMove?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_UP:\n handler.handlers?.onTouchesUp?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_CANCELLED:\n handler.handlers?.onTouchesCancelled?.(event, dummyStateManager);\n break;\n }\n } else {\n handler.handlers.onUpdate?.(event);\n\n if (handler.handlers.onChange && handler.handlers.changeEventCalculator) {\n handler.handlers.onChange?.(\n handler.handlers.changeEventCalculator?.(\n event,\n lastUpdateEvent[handler.handlers.handlerTag]\n )\n );\n\n lastUpdateEvent[handler.handlers.handlerTag] = event;\n }\n }\n } else {\n const oldHandler = findOldGestureHandler(event.handlerTag);\n if (oldHandler) {\n const nativeEvent = { nativeEvent: event };\n if (isStateChangeEvent(event)) {\n oldHandler.onGestureStateChange(nativeEvent);\n } else {\n oldHandler.onGestureEvent(nativeEvent);\n }\n return;\n }\n }\n}\n\nexport function startListening() {\n stopListening();\n\n gestureHandlerEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerEvent',\n onGestureHandlerEvent\n );\n\n gestureHandlerStateChangeEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerStateChange',\n onGestureHandlerEvent\n );\n}\n\nexport function stopListening() {\n if (gestureHandlerEventSubscription) {\n gestureHandlerEventSubscription.remove();\n gestureHandlerEventSubscription = null;\n }\n\n if (gestureHandlerStateChangeEventSubscription) {\n gestureHandlerStateChangeEventSubscription.remove();\n gestureHandlerStateChangeEventSubscription = null;\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["forceTouchGesture.ts"],"names":["ContinousBaseGesture","changeEventCalculator","current","previous","changePayload","undefined","forceChange","force","ForceTouchGesture","constructor","handlerName","minForce","config","maxForce","feedbackOnActivation","value","onChange","callback","handlers"],"mappings":";;AAAA,SAA4BA,oBAA5B,QAAwD,WAAxD;;AAWA,SAASC,qBAAT,CACEC,OADF,EAEEC,QAFF,EAGE;AACA;;AACA,MAAIC,aAAJ;;AACA,MAAID,QAAQ,KAAKE,SAAjB,EAA4B;AAC1BD,IAAAA,aAAa,GAAG;AACdE,MAAAA,WAAW,EAAEJ,OAAO,CAACK;AADP,KAAhB;AAGD,GAJD,MAIO;AACLH,IAAAA,aAAa,GAAG;AACdE,MAAAA,WAAW,EAAEJ,OAAO,CAACK,KAAR,GAAgBJ,QAAQ,CAACI;AADxB,KAAhB;AAGD;;AAED,SAAO,EAAE,GAAGL,OAAL;AAAc,OAAGE;AAAjB,GAAP;AACD;;AAED,OAAO,MAAMI,iBAAN,SAAgCR,oBAAhC,CAGL;AAGAS,EAAAA,WAAW,GAAG;AACZ;;AADY,oCAF+C,EAE/C;;AAGZ,SAAKC,WAAL,GAAmB,0BAAnB;AACD;;AAEDC,EAAAA,QAAQ,CAACJ,KAAD,EAAgB;AACtB,SAAKK,MAAL,CAAYD,QAAZ,GAAuBJ,KAAvB;AACA,WAAO,IAAP;AACD;;AAEDM,EAAAA,QAAQ,CAACN,KAAD,EAAgB;AACtB,SAAKK,MAAL,CAAYC,QAAZ,GAAuBN,KAAvB;AACA,WAAO,IAAP;AACD;;AAEDO,EAAAA,oBAAoB,CAACC,KAAD,EAAiB;AACnC,SAAKH,MAAL,CAAYE,oBAAZ,GAAmCC,KAAnC;AACA,WAAO,IAAP;AACD;;AAEDC,EAAAA,QAAQ,CACNC,QADM,EASN;AACA;AACA,SAAKC,QAAL,CAAcjB,qBAAd,GAAsCA,qBAAtC;AACA,WAAO,MAAMe,QAAN,CAAeC,QAAf,CAAP;AACD;;AArCD","sourcesContent":["import { BaseGestureConfig, ContinousBaseGesture } from './gesture';\nimport {\n ForceTouchGestureConfig,\n ForceTouchGestureHandlerEventPayload,\n} from '../ForceTouchGestureHandler';\nimport { GestureUpdateEvent } from '../gestureHandlerCommon';\n\
|
1
|
+
{"version":3,"sources":["forceTouchGesture.ts"],"names":["ContinousBaseGesture","changeEventCalculator","current","previous","changePayload","undefined","forceChange","force","ForceTouchGesture","constructor","handlerName","minForce","config","maxForce","feedbackOnActivation","value","onChange","callback","handlers"],"mappings":";;AAAA,SAA4BA,oBAA5B,QAAwD,WAAxD;;AAWA,SAASC,qBAAT,CACEC,OADF,EAEEC,QAFF,EAGE;AACA;;AACA,MAAIC,aAAJ;;AACA,MAAID,QAAQ,KAAKE,SAAjB,EAA4B;AAC1BD,IAAAA,aAAa,GAAG;AACdE,MAAAA,WAAW,EAAEJ,OAAO,CAACK;AADP,KAAhB;AAGD,GAJD,MAIO;AACLH,IAAAA,aAAa,GAAG;AACdE,MAAAA,WAAW,EAAEJ,OAAO,CAACK,KAAR,GAAgBJ,QAAQ,CAACI;AADxB,KAAhB;AAGD;;AAED,SAAO,EAAE,GAAGL,OAAL;AAAc,OAAGE;AAAjB,GAAP;AACD;;AAED,OAAO,MAAMI,iBAAN,SAAgCR,oBAAhC,CAGL;AAGAS,EAAAA,WAAW,GAAG;AACZ;;AADY,oCAF+C,EAE/C;;AAGZ,SAAKC,WAAL,GAAmB,0BAAnB;AACD;;AAEDC,EAAAA,QAAQ,CAACJ,KAAD,EAAgB;AACtB,SAAKK,MAAL,CAAYD,QAAZ,GAAuBJ,KAAvB;AACA,WAAO,IAAP;AACD;;AAEDM,EAAAA,QAAQ,CAACN,KAAD,EAAgB;AACtB,SAAKK,MAAL,CAAYC,QAAZ,GAAuBN,KAAvB;AACA,WAAO,IAAP;AACD;;AAEDO,EAAAA,oBAAoB,CAACC,KAAD,EAAiB;AACnC,SAAKH,MAAL,CAAYE,oBAAZ,GAAmCC,KAAnC;AACA,WAAO,IAAP;AACD;;AAEDC,EAAAA,QAAQ,CACNC,QADM,EASN;AACA;AACA,SAAKC,QAAL,CAAcjB,qBAAd,GAAsCA,qBAAtC;AACA,WAAO,MAAMe,QAAN,CAAeC,QAAf,CAAP;AACD;;AArCD","sourcesContent":["import { BaseGestureConfig, ContinousBaseGesture } from './gesture';\nimport {\n ForceTouchGestureConfig,\n ForceTouchGestureHandlerEventPayload,\n} from '../ForceTouchGestureHandler';\nimport { GestureUpdateEvent } from '../gestureHandlerCommon';\n\nexport type ForceTouchGestureChangeEventPayload = {\n forceChange: number;\n};\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent<ForceTouchGestureHandlerEventPayload>,\n previous?: GestureUpdateEvent<ForceTouchGestureHandlerEventPayload>\n) {\n 'worklet';\n let changePayload: ForceTouchGestureChangeEventPayload;\n if (previous === undefined) {\n changePayload = {\n forceChange: current.force,\n };\n } else {\n changePayload = {\n forceChange: current.force - previous.force,\n };\n }\n\n return { ...current, ...changePayload };\n}\n\nexport class ForceTouchGesture extends ContinousBaseGesture<\n ForceTouchGestureHandlerEventPayload,\n ForceTouchGestureChangeEventPayload\n> {\n public config: BaseGestureConfig & ForceTouchGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'ForceTouchGestureHandler';\n }\n\n minForce(force: number) {\n this.config.minForce = force;\n return this;\n }\n\n maxForce(force: number) {\n this.config.maxForce = force;\n return this;\n }\n\n feedbackOnActivation(value: boolean) {\n this.config.feedbackOnActivation = value;\n return this;\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<\n GestureUpdateEvent<\n ForceTouchGestureHandlerEventPayload &\n ForceTouchGestureChangeEventPayload\n >\n >\n ) => void\n ) {\n // @ts-ignore TS being overprotective, ForceTouchGestureHandlerEventPayload is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type ForceTouchGestureType = InstanceType<typeof ForceTouchGesture>;\n"]}
|