react-native-reanimated 2.3.0-alpha.1 → 2.3.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.cpp +15 -8
- package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +170 -166
- package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +36 -34
- package/Common/cpp/Registries/EventHandlerRegistry.cpp +13 -6
- package/Common/cpp/Registries/MapperRegistry.cpp +19 -15
- package/Common/cpp/Registries/WorkletsCache.cpp +19 -9
- package/Common/cpp/SharedItems/FrozenObject.cpp +19 -8
- package/Common/cpp/SharedItems/MutableValue.cpp +38 -25
- package/Common/cpp/SharedItems/MutableValueSetterProxy.cpp +11 -7
- package/Common/cpp/SharedItems/RemoteObject.cpp +9 -5
- package/Common/cpp/SharedItems/ShareableValue.cpp +216 -143
- package/Common/cpp/Tools/JSIStoreValueUser.cpp +36 -24
- package/Common/cpp/Tools/Mapper.cpp +41 -29
- package/Common/cpp/Tools/RuntimeDecorator.cpp +103 -84
- package/Common/cpp/Tools/Scheduler.cpp +14 -6
- package/Common/cpp/Tools/WorkletEventHandler.cpp +1 -1
- package/Common/cpp/headers/LayoutAnimations/LayoutAnimationsProxy.h +12 -11
- package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +45 -34
- package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +28 -16
- package/Common/cpp/headers/Registries/EventHandlerRegistry.h +14 -8
- package/Common/cpp/headers/Registries/MapperRegistry.h +4 -4
- package/Common/cpp/headers/Registries/WorkletsCache.h +9 -7
- package/Common/cpp/headers/SharedItems/FrozenObject.h +15 -11
- package/Common/cpp/headers/SharedItems/HostFunctionHandler.h +6 -4
- package/Common/cpp/headers/SharedItems/MutableValue.h +21 -12
- package/Common/cpp/headers/SharedItems/MutableValueSetterProxy.h +10 -7
- package/Common/cpp/headers/SharedItems/RemoteObject.h +16 -8
- package/Common/cpp/headers/SharedItems/RuntimeManager.h +39 -21
- package/Common/cpp/headers/SharedItems/ShareableValue.h +31 -27
- package/Common/cpp/headers/SharedItems/SharedParent.h +7 -4
- package/Common/cpp/headers/SharedItems/ValueWrapper.h +80 -61
- package/Common/cpp/headers/SpecTools/ErrorHandler.h +17 -19
- package/Common/cpp/headers/Tools/JSIStoreValueUser.h +18 -13
- package/Common/cpp/headers/Tools/Mapper.h +24 -18
- package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +12 -7
- package/Common/cpp/headers/Tools/ReanimatedHiddenHeaders.h +7 -7
- package/Common/cpp/headers/Tools/RuntimeDecorator.h +29 -23
- package/Common/cpp/headers/Tools/Scheduler.h +28 -33
- package/Common/cpp/headers/Tools/WorkletEventHandler.h +9 -7
- package/Common/cpp/hidden_headers/Logger.h +14 -14
- package/Common/cpp/hidden_headers/LoggerInterface.h +8 -9
- package/Common/cpp/hidden_headers/SpeedChecker.h +7 -8
- package/README.md +1 -1
- package/RNReanimated.podspec +4 -4
- package/android/build.gradle +80 -3
- package/android/react-native-reanimated-63-hermes.aar +0 -0
- package/android/react-native-reanimated-63-jsc.aar +0 -0
- package/android/react-native-reanimated-64-hermes.aar +0 -0
- package/android/react-native-reanimated-64-jsc.aar +0 -0
- package/android/react-native-reanimated-65-hermes.aar +0 -0
- package/android/react-native-reanimated-65-jsc.aar +0 -0
- package/android/react-native-reanimated-66-hermes.aar +0 -0
- package/android/react-native-reanimated-66-jsc.aar +0 -0
- package/ios/LayoutReanimation/REAAnimationsManager.h +19 -10
- package/ios/LayoutReanimation/REAAnimationsManager.m +195 -200
- package/ios/LayoutReanimation/REASnapshot.h +13 -0
- package/ios/LayoutReanimation/REASnapshot.m +29 -0
- package/ios/LayoutReanimation/REAUIManager.h +16 -0
- package/ios/LayoutReanimation/REAUIManager.mm +348 -0
- package/ios/Nodes/REAAlwaysNode.m +14 -15
- package/ios/Nodes/REABezierNode.m +8 -7
- package/ios/Nodes/REABlockNode.m +1 -1
- package/ios/Nodes/REACallFuncNode.h +0 -1
- package/ios/Nodes/REACallFuncNode.m +10 -8
- package/ios/Nodes/REAClockNodes.m +22 -20
- package/ios/Nodes/REAConcatNode.h +0 -1
- package/ios/Nodes/REAConcatNode.m +2 -2
- package/ios/Nodes/REACondNode.m +7 -5
- package/ios/Nodes/READebugNode.m +5 -4
- package/ios/Nodes/REAEventNode.m +1 -1
- package/ios/Nodes/REAFunctionNode.h +0 -1
- package/ios/Nodes/REAFunctionNode.m +2 -2
- package/ios/Nodes/REAJSCallNode.m +4 -5
- package/ios/Nodes/REANode.h +3 -4
- package/ios/Nodes/REANode.m +9 -11
- package/ios/Nodes/REAOperatorNode.m +68 -67
- package/ios/Nodes/REAParamNode.h +1 -3
- package/ios/Nodes/REAParamNode.m +15 -17
- package/ios/Nodes/REAPropsNode.h +1 -3
- package/ios/Nodes/REAPropsNode.m +19 -22
- package/ios/Nodes/REASetNode.h +0 -1
- package/ios/Nodes/REASetNode.m +7 -5
- package/ios/Nodes/REAStyleNode.h +0 -1
- package/ios/Nodes/REAStyleNode.m +2 -4
- package/ios/Nodes/REATransformNode.h +0 -1
- package/ios/Nodes/REATransformNode.m +3 -5
- package/ios/Nodes/REAValueNode.m +5 -7
- package/ios/REAEventDispatcher.m +3 -3
- package/ios/REAModule.h +0 -2
- package/ios/REAModule.m +29 -40
- package/ios/REANodesManager.h +11 -19
- package/ios/REANodesManager.m +105 -130
- package/ios/REAUtils.h +5 -3
- package/ios/Transitioning/RCTConvert+REATransition.m +45 -29
- package/ios/Transitioning/REAAllTransitions.h +2 -2
- package/ios/Transitioning/REAAllTransitions.m +14 -25
- package/ios/Transitioning/REATransition.h +8 -7
- package/ios/Transitioning/REATransition.m +19 -16
- package/ios/Transitioning/REATransitionAnimation.h +1 -1
- package/ios/Transitioning/REATransitionAnimation.m +2 -3
- package/ios/Transitioning/REATransitionManager.m +3 -3
- package/ios/native/NativeMethods.h +15 -5
- package/ios/native/NativeProxy.h +4 -3
- package/ios/native/NativeProxy.mm +19 -5
- package/ios/native/REAIOSErrorHandler.h +13 -10
- package/ios/native/REAIOSLogger.h +8 -8
- package/ios/native/REAIOSScheduler.h +5 -5
- package/ios/native/REAIOSScheduler.mm +7 -5
- package/ios/native/REAInitializer.h +37 -0
- package/ios/native/REAInitializer.mm +63 -0
- package/ios/native/UIResponder+Reanimated.mm +9 -48
- package/lib/ConfigHelper.js +1 -0
- package/lib/ReanimatedModule.native.js +10 -2
- package/lib/createAnimatedComponent.js +64 -30
- package/lib/reanimated1/core/AnimatedAlways.js +1 -1
- package/lib/reanimated1/core/AnimatedBezier.js +1 -1
- package/lib/reanimated1/core/AnimatedBlock.js +1 -1
- package/lib/reanimated1/core/AnimatedCall.js +1 -1
- package/lib/reanimated1/core/AnimatedCallFunc.js +1 -1
- package/lib/reanimated1/core/AnimatedConcat.js +1 -1
- package/lib/reanimated1/core/AnimatedCond.js +1 -1
- package/lib/reanimated1/core/AnimatedDebug.js +1 -1
- package/lib/reanimated1/core/AnimatedEvent.js +1 -1
- package/lib/reanimated1/core/AnimatedFunction.js +1 -1
- package/lib/reanimated1/core/AnimatedOperator.js +1 -1
- package/lib/reanimated1/core/AnimatedParam.js +1 -1
- package/lib/reanimated1/core/AnimatedProps.js +2 -2
- package/lib/reanimated1/core/AnimatedSet.js +1 -1
- package/lib/reanimated1/core/AnimatedStartClock.js +1 -1
- package/lib/reanimated1/core/AnimatedStopClock.js +1 -1
- package/lib/reanimated1/core/AnimatedStyle.js +1 -1
- package/lib/reanimated1/core/AnimatedTransform.js +1 -1
- package/lib/reanimated1/core/Core.test.js +30 -0
- package/lib/reanimated1/core/InternalAnimatedValue.js +1 -1
- package/lib/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
- package/lib/reanimated1/derived/interpolate.js +1 -1
- package/lib/reanimated2/Colors.js +16 -12
- package/lib/reanimated2/NativeMethods.js +3 -14
- package/lib/reanimated2/{NativeReanimated.native.js → NativeReanimated/NativeReanimated.js} +19 -24
- package/lib/reanimated2/NativeReanimated/index.js +15 -0
- package/lib/reanimated2/PlatformChecker.js +16 -0
- package/lib/reanimated2/PropAdapters.js +14 -4
- package/lib/reanimated2/UpdateProps.js +14 -11
- package/lib/reanimated2/ViewDescriptorsSet.js +73 -0
- package/lib/reanimated2/WorkletEventHandler.js +15 -13
- package/lib/reanimated2/animation/commonTypes.js +1 -0
- package/lib/reanimated2/animation/decay.js +71 -0
- package/lib/reanimated2/animation/delay.js +64 -0
- package/lib/reanimated2/animation/index.js +8 -0
- package/lib/reanimated2/animation/repeat.js +69 -0
- package/lib/reanimated2/animation/sequence.js +72 -0
- package/lib/reanimated2/animation/spring.js +101 -0
- package/lib/reanimated2/animation/styleAnimation.js +166 -0
- package/lib/reanimated2/animation/timing.js +64 -0
- package/lib/reanimated2/animation/util.js +157 -0
- package/lib/reanimated2/commonTypes.js +1 -0
- package/lib/reanimated2/core.js +35 -39
- package/lib/reanimated2/globals.d.ts +47 -1
- package/lib/reanimated2/hook/Hooks.js +9 -0
- package/lib/reanimated2/hook/commonTypes.js +1 -0
- package/lib/reanimated2/hook/index.js +8 -0
- package/lib/reanimated2/hook/useAnimatedGestureHandler.js +50 -0
- package/lib/reanimated2/hook/useAnimatedReaction.js +37 -0
- package/lib/reanimated2/hook/useAnimatedRef.js +25 -0
- package/lib/reanimated2/hook/useAnimatedScrollHandler.js +41 -0
- package/lib/reanimated2/hook/useAnimatedStyle.js +376 -0
- package/lib/reanimated2/hook/useDerivedValue.js +36 -0
- package/lib/reanimated2/hook/useSharedValue.js +17 -0
- package/lib/reanimated2/hook/utils.js +175 -0
- package/lib/reanimated2/index.js +3 -2
- package/lib/reanimated2/interpolation.js +95 -86
- package/lib/reanimated2/jestUtils.js +0 -12
- package/lib/reanimated2/js-reanimated/JSReanimated.js +9 -10
- package/lib/reanimated2/js-reanimated/index.js +57 -1
- package/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.js +58 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.js +69 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +125 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +193 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +1 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/index.js +3 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +325 -207
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Default.js +36 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +235 -187
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +327 -269
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +146 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +85 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +119 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +289 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +159 -121
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +83 -65
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +371 -277
- package/lib/reanimated2/layoutReanimation/defaultAnimations/index.js +4 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.js +78 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +128 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.js +37 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.js +41 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.js +34 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.js +46 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/index.js +6 -0
- package/lib/reanimated2/layoutReanimation/index.js +3 -2
- package/lib/reanimated2/platform-specific/RNRenderer.web.js +2 -0
- package/lib/reanimated2/utils.js +9 -0
- package/libSo/fbjni/jni/arm64-v8a/libfbjni.so +0 -0
- package/libSo/fbjni/jni/armeabi-v7a/libfbjni.so +0 -0
- package/libSo/fbjni/jni/x86/libfbjni.so +0 -0
- package/libSo/fbjni/jni/x86_64/libfbjni.so +0 -0
- package/package.json +21 -10
- package/plugin.js +244 -85
- package/react-native-reanimated.d.ts +531 -453
- package/src/ConfigHelper.js +1 -0
- package/src/ReanimatedModule.native.js +10 -2
- package/src/createAnimatedComponent.js +64 -30
- package/src/reanimated1/core/AnimatedAlways.js +1 -1
- package/src/reanimated1/core/AnimatedBezier.js +1 -1
- package/src/reanimated1/core/AnimatedBlock.js +1 -1
- package/src/reanimated1/core/AnimatedCall.js +1 -1
- package/src/reanimated1/core/AnimatedCallFunc.js +1 -1
- package/src/reanimated1/core/AnimatedConcat.js +1 -1
- package/src/reanimated1/core/AnimatedCond.js +1 -1
- package/src/reanimated1/core/AnimatedDebug.js +1 -1
- package/src/reanimated1/core/AnimatedEvent.js +1 -1
- package/src/reanimated1/core/AnimatedFunction.js +1 -1
- package/src/reanimated1/core/AnimatedOperator.js +1 -1
- package/src/reanimated1/core/AnimatedParam.js +1 -1
- package/src/reanimated1/core/AnimatedProps.js +2 -2
- package/src/reanimated1/core/AnimatedSet.js +1 -1
- package/src/reanimated1/core/AnimatedStartClock.js +1 -1
- package/src/reanimated1/core/AnimatedStopClock.js +1 -1
- package/src/reanimated1/core/AnimatedStyle.js +1 -1
- package/src/reanimated1/core/AnimatedTransform.js +1 -1
- package/src/reanimated1/core/Core.test.js +30 -0
- package/src/reanimated1/core/InternalAnimatedValue.js +1 -1
- package/src/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
- package/src/reanimated1/derived/interpolate.js +1 -1
- package/src/reanimated2/Colors.ts +30 -27
- package/src/reanimated2/Easing.ts +3 -1
- package/src/reanimated2/NativeMethods.ts +26 -16
- package/src/reanimated2/NativeReanimated/NativeReanimated.ts +78 -0
- package/src/reanimated2/NativeReanimated/index.ts +18 -0
- package/src/reanimated2/PlatformChecker.ts +21 -0
- package/src/reanimated2/PropAdapters.ts +52 -34
- package/src/reanimated2/UpdateProps.ts +40 -20
- package/src/reanimated2/ViewDescriptorsSet.ts +108 -0
- package/src/reanimated2/WorkletEventHandler.ts +41 -23
- package/src/reanimated2/animation/commonTypes.ts +48 -0
- package/src/reanimated2/animation/decay.ts +141 -0
- package/src/reanimated2/animation/delay.ts +103 -0
- package/src/reanimated2/animation/index.ts +16 -0
- package/src/reanimated2/animation/repeat.ts +128 -0
- package/src/reanimated2/animation/sequence.ts +110 -0
- package/src/reanimated2/animation/spring.ts +165 -0
- package/src/reanimated2/animation/styleAnimation.ts +253 -0
- package/src/reanimated2/animation/timing.ts +109 -0
- package/src/reanimated2/animation/util.ts +242 -0
- package/src/reanimated2/commonTypes.ts +81 -0
- package/src/reanimated2/core.ts +128 -82
- package/src/reanimated2/globals.d.ts +47 -1
- package/src/reanimated2/hook/Hooks.ts +16 -0
- package/src/reanimated2/hook/commonTypes.ts +12 -0
- package/src/reanimated2/hook/index.ts +25 -0
- package/src/reanimated2/hook/useAnimatedGestureHandler.ts +110 -0
- package/src/reanimated2/hook/useAnimatedReaction.ts +49 -0
- package/src/reanimated2/hook/useAnimatedRef.ts +34 -0
- package/src/reanimated2/hook/useAnimatedScrollHandler.ts +83 -0
- package/src/reanimated2/hook/useAnimatedStyle.ts +538 -0
- package/src/reanimated2/hook/useDerivedValue.ts +48 -0
- package/src/reanimated2/hook/useSharedValue.ts +22 -0
- package/src/reanimated2/hook/utils.ts +259 -0
- package/src/reanimated2/index.ts +3 -2
- package/src/reanimated2/interpolation.ts +170 -101
- package/src/reanimated2/jestUtils.ts +0 -12
- package/src/reanimated2/js-reanimated/JSReanimated.ts +47 -22
- package/src/reanimated2/js-reanimated/Mapper.ts +1 -1
- package/src/reanimated2/js-reanimated/index.ts +71 -0
- package/src/reanimated2/layoutReanimation/LayoutAnimationRepository.tsx +62 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.ts +91 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +169 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +263 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +78 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +16 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +243 -121
- package/src/reanimated2/layoutReanimation/defaultAnimations/Default.ts +43 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +95 -53
- package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +114 -64
- package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +179 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +93 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +132 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +333 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +84 -50
- package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +41 -23
- package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +234 -154
- package/src/reanimated2/layoutReanimation/defaultAnimations/index.ts +4 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +104 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +213 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +60 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +58 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +41 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +78 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/index.ts +6 -0
- package/src/reanimated2/layoutReanimation/index.ts +3 -2
- package/src/reanimated2/platform-specific/RNRenderer.web.ts +2 -0
- package/src/reanimated2/utils.ts +21 -0
- package/android/react-native-reanimated-62-hermes.aar +0 -0
- package/android/react-native-reanimated-62-jsc.aar +0 -0
- package/ios/LayoutReanimation/REAAnimationRootView.h +0 -12
- package/ios/LayoutReanimation/REAAnimationRootView.m +0 -16
- package/ios/LayoutReanimation/REAAnimationRootViewManager.h +0 -9
- package/ios/LayoutReanimation/REAAnimationRootViewManager.m +0 -49
- package/ios/LayoutReanimation/REAReactBatchObserver.h +0 -20
- package/ios/LayoutReanimation/REAReactBatchObserver.m +0 -125
- package/ios/LayoutReanimation/REASnapshooter.h +0 -19
- package/ios/LayoutReanimation/REASnapshooter.m +0 -64
- package/ios/LayoutReanimation/REAViewTraverser.h +0 -13
- package/ios/LayoutReanimation/REAViewTraverser.m +0 -40
- package/lib/reanimated2/Hooks.js +0 -732
- package/lib/reanimated2/NativeReanimated.js +0 -4
- package/lib/reanimated2/animations.js +0 -713
- package/lib/reanimated2/js-reanimated/index.web.js +0 -20
- package/lib/reanimated2/layoutReanimation/AnimatedRoot.js +0 -55
- package/lib/reanimated2/layoutReanimation/defaultAnimationsBuilder.js +0 -374
- package/src/reanimated2/Hooks.ts +0 -918
- package/src/reanimated2/NativeReanimated.native.ts +0 -61
- package/src/reanimated2/NativeReanimated.ts +0 -5
- package/src/reanimated2/animations.ts +0 -868
- package/src/reanimated2/js-reanimated/index.js +0 -0
- package/src/reanimated2/js-reanimated/index.web.ts +0 -29
- package/src/reanimated2/layoutReanimation/AnimatedRoot.tsx +0 -68
- package/src/reanimated2/layoutReanimation/defaultAnimationsBuilder.ts +0 -440
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
namespace reanimated {
|
|
5
5
|
|
|
6
|
-
void EventHandlerRegistry::registerEventHandler(
|
|
6
|
+
void EventHandlerRegistry::registerEventHandler(
|
|
7
|
+
std::shared_ptr<WorkletEventHandler> eventHandler) {
|
|
7
8
|
const std::lock_guard<std::mutex> lock(instanceMutex);
|
|
8
9
|
eventMappings[eventHandler->eventName][eventHandler->id] = eventHandler;
|
|
9
10
|
eventHandlers[eventHandler->id] = eventHandler;
|
|
@@ -21,7 +22,10 @@ void EventHandlerRegistry::unregisterEventHandler(unsigned long id) {
|
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
void EventHandlerRegistry::processEvent(
|
|
25
|
+
void EventHandlerRegistry::processEvent(
|
|
26
|
+
jsi::Runtime &rt,
|
|
27
|
+
std::string eventName,
|
|
28
|
+
std::string eventPayload) {
|
|
25
29
|
std::vector<std::shared_ptr<WorkletEventHandler>> handlersForEvent;
|
|
26
30
|
{
|
|
27
31
|
const std::lock_guard<std::mutex> lock(instanceMutex);
|
|
@@ -38,15 +42,18 @@ void EventHandlerRegistry::processEvent(jsi::Runtime &rt, std::string eventName,
|
|
|
38
42
|
std::string delimimter = "NativeMap:";
|
|
39
43
|
auto positionToSplit = eventPayload.find(delimimter) + delimimter.size();
|
|
40
44
|
auto lastBracketCharactedPosition = eventPayload.size() - positionToSplit - 1;
|
|
41
|
-
auto eventJSON =
|
|
45
|
+
auto eventJSON =
|
|
46
|
+
eventPayload.substr(positionToSplit, lastBracketCharactedPosition);
|
|
42
47
|
|
|
43
48
|
if (eventJSON.compare(std::string("null")) == 0) {
|
|
44
49
|
return;
|
|
45
50
|
}
|
|
46
51
|
|
|
47
|
-
auto eventObject = jsi::Value::createFromJsonUtf8(
|
|
52
|
+
auto eventObject = jsi::Value::createFromJsonUtf8(
|
|
53
|
+
rt, (uint8_t *)(&eventJSON[0]), eventJSON.size());
|
|
48
54
|
|
|
49
|
-
eventObject.asObject(rt).setProperty(
|
|
55
|
+
eventObject.asObject(rt).setProperty(
|
|
56
|
+
rt, "eventName", jsi::String::createFromUtf8(rt, eventName));
|
|
50
57
|
for (auto handler : handlersForEvent) {
|
|
51
58
|
handler->process(rt, eventObject);
|
|
52
59
|
}
|
|
@@ -58,4 +65,4 @@ bool EventHandlerRegistry::isAnyHandlerWaitingForEvent(std::string eventName) {
|
|
|
58
65
|
return (it != eventMappings.end()) and (!(it->second).empty());
|
|
59
66
|
}
|
|
60
67
|
|
|
61
|
-
}
|
|
68
|
+
} // namespace reanimated
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#include "MapperRegistry.h"
|
|
2
|
-
#include "Mapper.h"
|
|
3
|
-
#include <map>
|
|
4
2
|
#include <array>
|
|
3
|
+
#include <map>
|
|
5
4
|
#include <set>
|
|
5
|
+
#include "Mapper.h"
|
|
6
6
|
|
|
7
7
|
namespace reanimated {
|
|
8
8
|
|
|
@@ -21,7 +21,7 @@ void MapperRegistry::execute(jsi::Runtime &rt) {
|
|
|
21
21
|
updateOrder();
|
|
22
22
|
updatedSinceLastExecute = false;
|
|
23
23
|
}
|
|
24
|
-
for (auto &
|
|
24
|
+
for (auto &mapper : sortedMappers) {
|
|
25
25
|
if (mapper->dirty) {
|
|
26
26
|
mapper->execute(rt);
|
|
27
27
|
}
|
|
@@ -41,14 +41,16 @@ void MapperRegistry::updateOrder() { // Topological sorting
|
|
|
41
41
|
|
|
42
42
|
NodeID(std::shared_ptr<Mapper> mapper) {
|
|
43
43
|
if (mapper == nullptr) {
|
|
44
|
-
throw std::runtime_error(
|
|
44
|
+
throw std::runtime_error(
|
|
45
|
+
"Graph couldn't be sorted (Mapper cannot be nullptr)");
|
|
45
46
|
}
|
|
46
47
|
this->mapper = mapper;
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
NodeID(std::shared_ptr<MutableValue> mutableValue) {
|
|
50
51
|
if (mutableValue == nullptr) {
|
|
51
|
-
throw std::runtime_error(
|
|
52
|
+
throw std::runtime_error(
|
|
53
|
+
"Graph couldn't be sorted (Mutable cannot be nullptr)");
|
|
52
54
|
}
|
|
53
55
|
this->mutableValue = mutableValue;
|
|
54
56
|
}
|
|
@@ -57,8 +59,7 @@ void MapperRegistry::updateOrder() { // Topological sorting
|
|
|
57
59
|
return mutableValue != nullptr;
|
|
58
60
|
}
|
|
59
61
|
|
|
60
|
-
bool operator<(const NodeID&
|
|
61
|
-
{
|
|
62
|
+
bool operator<(const NodeID &other) const {
|
|
62
63
|
if (isMutable() != other.isMutable())
|
|
63
64
|
return isMutable() < other.isMutable();
|
|
64
65
|
|
|
@@ -72,22 +73,24 @@ void MapperRegistry::updateOrder() { // Topological sorting
|
|
|
72
73
|
|
|
73
74
|
std::map<NodeID, int> deg;
|
|
74
75
|
|
|
75
|
-
std::map<std::shared_ptr<MutableValue>, std::vector<std::shared_ptr<Mapper>>>
|
|
76
|
+
std::map<std::shared_ptr<MutableValue>, std::vector<std::shared_ptr<Mapper>>>
|
|
77
|
+
mappersThatUseSharedValue;
|
|
76
78
|
|
|
77
79
|
std::set<std::pair<int, NodeID>> nodes;
|
|
78
80
|
|
|
79
|
-
std::function<void(NodeID)> update = [&]
|
|
81
|
+
std::function<void(NodeID)> update = [&](NodeID id) {
|
|
80
82
|
auto entry = std::make_pair(deg[id], id);
|
|
81
|
-
if (nodes.find(entry) == nodes.end())
|
|
83
|
+
if (nodes.find(entry) == nodes.end())
|
|
84
|
+
return;
|
|
82
85
|
nodes.erase(entry);
|
|
83
86
|
entry.first--;
|
|
84
87
|
deg[id]--;
|
|
85
88
|
nodes.insert(entry);
|
|
86
89
|
};
|
|
87
90
|
|
|
88
|
-
for (auto &
|
|
91
|
+
for (auto &entry : mappers) {
|
|
89
92
|
auto id = NodeID(entry.second);
|
|
90
|
-
auto &
|
|
93
|
+
auto &mapper = entry.second;
|
|
91
94
|
deg[id] = mapper->inputs.size();
|
|
92
95
|
nodes.insert(std::make_pair(deg[id], id));
|
|
93
96
|
|
|
@@ -104,7 +107,7 @@ void MapperRegistry::updateOrder() { // Topological sorting
|
|
|
104
107
|
}
|
|
105
108
|
}
|
|
106
109
|
|
|
107
|
-
for (auto &
|
|
110
|
+
for (auto &entry : deg) {
|
|
108
111
|
auto id = entry.first;
|
|
109
112
|
if (id.isMutable()) {
|
|
110
113
|
nodes.insert(std::make_pair(entry.second, id));
|
|
@@ -130,7 +133,8 @@ void MapperRegistry::updateOrder() { // Topological sorting
|
|
|
130
133
|
sortedMappers.push_back(id.mapper);
|
|
131
134
|
}
|
|
132
135
|
|
|
133
|
-
for (auto &
|
|
136
|
+
for (auto &id : toUpdate)
|
|
137
|
+
update(id);
|
|
134
138
|
}
|
|
135
139
|
|
|
136
140
|
if (nodes.size() > 0) {
|
|
@@ -138,4 +142,4 @@ void MapperRegistry::updateOrder() { // Topological sorting
|
|
|
138
142
|
}
|
|
139
143
|
}
|
|
140
144
|
|
|
141
|
-
}
|
|
145
|
+
} // namespace reanimated
|
|
@@ -1,28 +1,38 @@
|
|
|
1
1
|
#include "WorkletsCache.h"
|
|
2
|
-
#include "ShareableValue.h"
|
|
3
2
|
#include "FrozenObject.h"
|
|
3
|
+
#include "ShareableValue.h"
|
|
4
4
|
|
|
5
5
|
using namespace facebook;
|
|
6
6
|
|
|
7
|
-
namespace reanimated
|
|
8
|
-
{
|
|
7
|
+
namespace reanimated {
|
|
9
8
|
|
|
10
9
|
jsi::Value eval(jsi::Runtime &rt, const char *code) {
|
|
11
10
|
return rt.global().getPropertyAsFunction(rt, "eval").call(rt, code);
|
|
12
11
|
}
|
|
13
12
|
|
|
14
|
-
jsi::Function function(jsi::Runtime &rt, const std::string&
|
|
13
|
+
jsi::Function function(jsi::Runtime &rt, const std::string &code) {
|
|
15
14
|
return eval(rt, ("(" + code + ")").c_str()).getObject(rt).getFunction(rt);
|
|
16
15
|
}
|
|
17
16
|
|
|
18
|
-
std::shared_ptr<jsi::Function> WorkletsCache::getFunction(
|
|
19
|
-
|
|
17
|
+
std::shared_ptr<jsi::Function> WorkletsCache::getFunction(
|
|
18
|
+
jsi::Runtime &rt,
|
|
19
|
+
std::shared_ptr<FrozenObject> frozenObj) {
|
|
20
|
+
long long workletHash =
|
|
21
|
+
ValueWrapper::asNumber(frozenObj->map["__workletHash"]->valueContainer);
|
|
20
22
|
if (worklets.count(workletHash) == 0) {
|
|
21
|
-
auto codeBuffer = std::make_shared<const jsi::StringBuffer>(
|
|
22
|
-
|
|
23
|
+
auto codeBuffer = std::make_shared<const jsi::StringBuffer>(
|
|
24
|
+
"(" +
|
|
25
|
+
ValueWrapper::asString(frozenObj->map["asString"]->valueContainer) +
|
|
26
|
+
")");
|
|
27
|
+
auto func = rt.evaluateJavaScript(
|
|
28
|
+
codeBuffer,
|
|
29
|
+
ValueWrapper::asString(
|
|
30
|
+
frozenObj->map["__location"]->valueContainer))
|
|
31
|
+
.asObject(rt)
|
|
32
|
+
.asFunction(rt);
|
|
23
33
|
worklets[workletHash] = std::make_shared<jsi::Function>(std::move(func));
|
|
24
34
|
}
|
|
25
35
|
return worklets[workletHash];
|
|
26
36
|
}
|
|
27
37
|
|
|
28
|
-
}
|
|
38
|
+
} // namespace reanimated
|
|
@@ -1,26 +1,37 @@
|
|
|
1
1
|
#include "FrozenObject.h"
|
|
2
|
-
#include "SharedParent.h"
|
|
3
|
-
#include "ShareableValue.h"
|
|
4
2
|
#include "RuntimeManager.h"
|
|
3
|
+
#include "ShareableValue.h"
|
|
4
|
+
#include "SharedParent.h"
|
|
5
5
|
|
|
6
6
|
namespace reanimated {
|
|
7
7
|
|
|
8
|
-
FrozenObject::FrozenObject(
|
|
8
|
+
FrozenObject::FrozenObject(
|
|
9
|
+
jsi::Runtime &rt,
|
|
10
|
+
const jsi::Object &object,
|
|
11
|
+
RuntimeManager *runtimeManager) {
|
|
9
12
|
auto propertyNames = object.getPropertyNames(rt);
|
|
10
|
-
|
|
13
|
+
const size_t count = propertyNames.size(rt);
|
|
14
|
+
namesOrder.reserve(count);
|
|
15
|
+
for (size_t i = 0; i < count; i++) {
|
|
11
16
|
auto propertyName = propertyNames.getValueAtIndex(rt, i).asString(rt);
|
|
17
|
+
namesOrder.push_back(propertyName.utf8(rt));
|
|
12
18
|
std::string nameStr = propertyName.utf8(rt);
|
|
13
|
-
map[nameStr] = ShareableValue::adapt(
|
|
19
|
+
map[nameStr] = ShareableValue::adapt(
|
|
20
|
+
rt, object.getProperty(rt, propertyName), runtimeManager);
|
|
14
21
|
this->containsHostFunction |= map[nameStr]->containsHostFunction;
|
|
15
22
|
}
|
|
16
23
|
}
|
|
17
24
|
|
|
18
25
|
jsi::Object FrozenObject::shallowClone(jsi::Runtime &rt) {
|
|
19
26
|
jsi::Object object(rt);
|
|
20
|
-
for (auto
|
|
21
|
-
|
|
27
|
+
for (auto propName : namesOrder) {
|
|
28
|
+
auto value = map[propName];
|
|
29
|
+
object.setProperty(
|
|
30
|
+
rt,
|
|
31
|
+
jsi::String::createFromUtf8(rt, propName),
|
|
32
|
+
value->getValue(rt));
|
|
22
33
|
}
|
|
23
34
|
return object;
|
|
24
35
|
}
|
|
25
36
|
|
|
26
|
-
}
|
|
37
|
+
} // namespace reanimated
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#include "MutableValue.h"
|
|
2
|
-
#include "SharedParent.h"
|
|
3
|
-
#include "ShareableValue.h"
|
|
4
|
-
#include "RuntimeManager.h"
|
|
5
2
|
#include "RuntimeDecorator.h"
|
|
3
|
+
#include "RuntimeManager.h"
|
|
4
|
+
#include "ShareableValue.h"
|
|
5
|
+
#include "SharedParent.h"
|
|
6
6
|
|
|
7
7
|
namespace reanimated {
|
|
8
8
|
|
|
@@ -11,7 +11,7 @@ void MutableValue::setValue(jsi::Runtime &rt, const jsi::Value &newValue) {
|
|
|
11
11
|
value = ShareableValue::adapt(rt, newValue, runtimeManager);
|
|
12
12
|
|
|
13
13
|
std::shared_ptr<MutableValue> thiz = shared_from_this();
|
|
14
|
-
auto notifyListeners = [thiz]
|
|
14
|
+
auto notifyListeners = [thiz]() {
|
|
15
15
|
for (auto listener : thiz->listeners) {
|
|
16
16
|
listener.second();
|
|
17
17
|
}
|
|
@@ -19,9 +19,8 @@ void MutableValue::setValue(jsi::Runtime &rt, const jsi::Value &newValue) {
|
|
|
19
19
|
if (RuntimeDecorator::isUIRuntime(rt)) {
|
|
20
20
|
notifyListeners();
|
|
21
21
|
} else {
|
|
22
|
-
runtimeManager->scheduler->scheduleOnUI(
|
|
23
|
-
|
|
24
|
-
});
|
|
22
|
+
runtimeManager->scheduler->scheduleOnUI(
|
|
23
|
+
[notifyListeners] { notifyListeners(); });
|
|
25
24
|
}
|
|
26
25
|
}
|
|
27
26
|
|
|
@@ -30,20 +29,26 @@ jsi::Value MutableValue::getValue(jsi::Runtime &rt) {
|
|
|
30
29
|
return value->getValue(rt);
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
void MutableValue::set(
|
|
32
|
+
void MutableValue::set(
|
|
33
|
+
jsi::Runtime &rt,
|
|
34
|
+
const jsi::PropNameID &name,
|
|
35
|
+
const jsi::Value &newValue) {
|
|
34
36
|
auto propName = name.utf8(rt);
|
|
35
37
|
if (!runtimeManager->valueSetter) {
|
|
36
|
-
throw jsi::JSError(
|
|
38
|
+
throw jsi::JSError(
|
|
39
|
+
rt,
|
|
40
|
+
"Value-Setter is not yet configured! Make sure the core-functions are installed.");
|
|
37
41
|
}
|
|
38
42
|
|
|
39
43
|
if (RuntimeDecorator::isUIRuntime(rt)) {
|
|
40
44
|
// UI thread
|
|
41
45
|
if (propName == "value") {
|
|
42
|
-
auto setterProxy = jsi::Object::createFromHostObject(
|
|
46
|
+
auto setterProxy = jsi::Object::createFromHostObject(
|
|
47
|
+
rt, std::make_shared<MutableValueSetterProxy>(shared_from_this()));
|
|
43
48
|
runtimeManager->valueSetter->getValue(rt)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
49
|
+
.asObject(rt)
|
|
50
|
+
.asFunction(rt)
|
|
51
|
+
.callWithThis(rt, setterProxy, newValue);
|
|
47
52
|
} else if (propName == "_animation") {
|
|
48
53
|
// TODO: assert to allow animation to be set from UI only
|
|
49
54
|
if (animation.expired()) {
|
|
@@ -51,7 +56,8 @@ void MutableValue::set(jsi::Runtime &rt, const jsi::PropNameID &name, const jsi:
|
|
|
51
56
|
}
|
|
52
57
|
*animation.lock() = jsi::Value(rt, newValue);
|
|
53
58
|
} else if (propName == "_value") {
|
|
54
|
-
auto setter =
|
|
59
|
+
auto setter =
|
|
60
|
+
std::make_shared<MutableValueSetterProxy>(shared_from_this());
|
|
55
61
|
setter->set(rt, jsi::PropNameID::forAscii(rt, "_value"), newValue);
|
|
56
62
|
}
|
|
57
63
|
} else {
|
|
@@ -60,12 +66,13 @@ void MutableValue::set(jsi::Runtime &rt, const jsi::PropNameID &name, const jsi:
|
|
|
60
66
|
auto shareable = ShareableValue::adapt(rt, newValue, runtimeManager);
|
|
61
67
|
runtimeManager->scheduler->scheduleOnUI([this, shareable] {
|
|
62
68
|
jsi::Runtime &rt = *this->runtimeManager->runtime.get();
|
|
63
|
-
auto setterProxy = jsi::Object::createFromHostObject(
|
|
69
|
+
auto setterProxy = jsi::Object::createFromHostObject(
|
|
70
|
+
rt, std::make_shared<MutableValueSetterProxy>(shared_from_this()));
|
|
64
71
|
jsi::Value newValue = shareable->getValue(rt);
|
|
65
72
|
runtimeManager->valueSetter->getValue(rt)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
73
|
+
.asObject(rt)
|
|
74
|
+
.asFunction(rt)
|
|
75
|
+
.callWithThis(rt, setterProxy, newValue);
|
|
69
76
|
});
|
|
70
77
|
}
|
|
71
78
|
}
|
|
@@ -100,11 +107,18 @@ std::vector<jsi::PropNameID> MutableValue::getPropertyNames(jsi::Runtime &rt) {
|
|
|
100
107
|
return result;
|
|
101
108
|
}
|
|
102
109
|
|
|
103
|
-
MutableValue::MutableValue(
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
110
|
+
MutableValue::MutableValue(
|
|
111
|
+
jsi::Runtime &rt,
|
|
112
|
+
const jsi::Value &initial,
|
|
113
|
+
RuntimeManager *runtimeManager,
|
|
114
|
+
std::shared_ptr<Scheduler> s)
|
|
115
|
+
: StoreUser(s, *runtimeManager),
|
|
116
|
+
runtimeManager(runtimeManager),
|
|
117
|
+
value(ShareableValue::adapt(rt, initial, runtimeManager)) {}
|
|
118
|
+
|
|
119
|
+
unsigned long int MutableValue::addListener(
|
|
120
|
+
unsigned long id,
|
|
121
|
+
std::function<void()> listener) {
|
|
108
122
|
listeners[id] = listener;
|
|
109
123
|
return id;
|
|
110
124
|
}
|
|
@@ -115,5 +129,4 @@ void MutableValue::removeListener(unsigned long listenerId) {
|
|
|
115
129
|
}
|
|
116
130
|
}
|
|
117
131
|
|
|
118
|
-
|
|
119
|
-
}
|
|
132
|
+
} // namespace reanimated
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
#include "MutableValueSetterProxy.h"
|
|
2
|
-
#include "SharedParent.h"
|
|
3
|
-
#include "MutableValue.h"
|
|
4
2
|
#include <jsi/jsi.h>
|
|
3
|
+
#include "MutableValue.h"
|
|
4
|
+
#include "SharedParent.h"
|
|
5
5
|
|
|
6
6
|
using namespace facebook;
|
|
7
7
|
|
|
8
8
|
namespace reanimated {
|
|
9
9
|
|
|
10
|
-
void MutableValueSetterProxy::set(
|
|
10
|
+
void MutableValueSetterProxy::set(
|
|
11
|
+
jsi::Runtime &rt,
|
|
12
|
+
const jsi::PropNameID &name,
|
|
13
|
+
const jsi::Value &newValue) {
|
|
11
14
|
auto propName = name.utf8(rt);
|
|
12
15
|
if (propName == "_value") {
|
|
13
16
|
mutableValue->setValue(rt, newValue);
|
|
@@ -18,11 +21,13 @@ void MutableValueSetterProxy::set(jsi::Runtime &rt, const jsi::PropNameID &name,
|
|
|
18
21
|
}
|
|
19
22
|
*mutableValue->animation.lock() = jsi::Value(rt, newValue);
|
|
20
23
|
} else if (propName == "value") {
|
|
21
|
-
|
|
24
|
+
// you call `this.value` inside of value setter, we should throw
|
|
22
25
|
}
|
|
23
26
|
}
|
|
24
27
|
|
|
25
|
-
jsi::Value MutableValueSetterProxy::get(
|
|
28
|
+
jsi::Value MutableValueSetterProxy::get(
|
|
29
|
+
jsi::Runtime &rt,
|
|
30
|
+
const jsi::PropNameID &name) {
|
|
26
31
|
auto propName = name.utf8(rt);
|
|
27
32
|
|
|
28
33
|
if (propName == "value") {
|
|
@@ -39,5 +44,4 @@ jsi::Value MutableValueSetterProxy::get(jsi::Runtime &rt, const jsi::PropNameID
|
|
|
39
44
|
return jsi::Value::undefined();
|
|
40
45
|
}
|
|
41
46
|
|
|
42
|
-
}
|
|
43
|
-
|
|
47
|
+
} // namespace reanimated
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#include "RemoteObject.h"
|
|
2
|
-
#include "SharedParent.h"
|
|
3
|
-
#include "RuntimeDecorator.h"
|
|
4
2
|
#include <jsi/jsi.h>
|
|
3
|
+
#include "RuntimeDecorator.h"
|
|
4
|
+
#include "SharedParent.h"
|
|
5
5
|
|
|
6
6
|
using namespace facebook;
|
|
7
7
|
|
|
@@ -22,7 +22,10 @@ jsi::Value RemoteObject::get(jsi::Runtime &rt, const jsi::PropNameID &name) {
|
|
|
22
22
|
return jsi::Value::undefined();
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
void RemoteObject::set(
|
|
25
|
+
void RemoteObject::set(
|
|
26
|
+
jsi::Runtime &rt,
|
|
27
|
+
const jsi::PropNameID &name,
|
|
28
|
+
const jsi::Value &value) {
|
|
26
29
|
if (RuntimeDecorator::isWorkletRuntime(rt)) {
|
|
27
30
|
backing.lock()->getObject(rt).setProperty(rt, name, value);
|
|
28
31
|
}
|
|
@@ -33,9 +36,10 @@ std::vector<jsi::PropNameID> RemoteObject::getPropertyNames(jsi::Runtime &rt) {
|
|
|
33
36
|
std::vector<jsi::PropNameID> res;
|
|
34
37
|
auto propertyNames = backing.lock()->getObject(rt).getPropertyNames(rt);
|
|
35
38
|
for (size_t i = 0, size = propertyNames.size(rt); i < size; i++) {
|
|
36
|
-
res.push_back(jsi::PropNameID::forString(
|
|
39
|
+
res.push_back(jsi::PropNameID::forString(
|
|
40
|
+
rt, propertyNames.getValueAtIndex(rt, i).asString(rt)));
|
|
37
41
|
}
|
|
38
42
|
return res;
|
|
39
43
|
}
|
|
40
44
|
|
|
41
|
-
}
|
|
45
|
+
} // namespace reanimated
|