104819bfdSŁukasz Kosmaty #pragma once
204819bfdSŁukasz Kosmaty 
304819bfdSŁukasz Kosmaty #include <memory>
404819bfdSŁukasz Kosmaty #include <string>
504819bfdSŁukasz Kosmaty #include <vector>
604819bfdSŁukasz Kosmaty 
704819bfdSŁukasz Kosmaty #ifdef ANDROID
804819bfdSŁukasz Kosmaty #include "TurboModule.h"
904819bfdSŁukasz Kosmaty #else
1004819bfdSŁukasz Kosmaty #include <ReactCommon/TurboModule.h>
1104819bfdSŁukasz Kosmaty #endif
1204819bfdSŁukasz Kosmaty 
1304819bfdSŁukasz Kosmaty #include <ReactCommon/CallInvoker.h>
1404819bfdSŁukasz Kosmaty 
1504819bfdSŁukasz Kosmaty using namespace facebook;
1604819bfdSŁukasz Kosmaty using namespace react;
1704819bfdSŁukasz Kosmaty 
1804819bfdSŁukasz Kosmaty namespace reanimated {
1904819bfdSŁukasz Kosmaty 
2004819bfdSŁukasz Kosmaty class JSI_EXPORT NativeReanimatedModuleSpec : public TurboModule {
2104819bfdSŁukasz Kosmaty  protected:
2204819bfdSŁukasz Kosmaty   explicit NativeReanimatedModuleSpec(std::shared_ptr<CallInvoker> jsInvoker);
2304819bfdSŁukasz Kosmaty 
2404819bfdSŁukasz Kosmaty  public:
2504819bfdSŁukasz Kosmaty   virtual void installCoreFunctions(
2604819bfdSŁukasz Kosmaty       jsi::Runtime &rt,
27*5f154df9Saleqsio       const jsi::Value &callGuard,
28*5f154df9Saleqsio       const jsi::Value &valueUnpacker) = 0;
2904819bfdSŁukasz Kosmaty 
3004819bfdSŁukasz Kosmaty   // SharedValue
31*5f154df9Saleqsio   virtual jsi::Value makeShareableClone(
3204819bfdSŁukasz Kosmaty       jsi::Runtime &rt,
33*5f154df9Saleqsio       const jsi::Value &value,
34*5f154df9Saleqsio       const jsi::Value &shouldRetainRemote) = 0;
3504819bfdSŁukasz Kosmaty 
36*5f154df9Saleqsio   // Synchronized data objects
37*5f154df9Saleqsio   virtual jsi::Value makeSynchronizedDataHolder(
3804819bfdSŁukasz Kosmaty       jsi::Runtime &rt,
39*5f154df9Saleqsio       const jsi::Value &initialShareable) = 0;
40*5f154df9Saleqsio   virtual jsi::Value getDataSynchronously(
41*5f154df9Saleqsio       jsi::Runtime &rt,
42*5f154df9Saleqsio       const jsi::Value &synchronizedDataHolderRef) = 0;
43*5f154df9Saleqsio 
44*5f154df9Saleqsio   // Scheduling
45*5f154df9Saleqsio   virtual void scheduleOnUI(jsi::Runtime &rt, const jsi::Value &worklet) = 0;
4604819bfdSŁukasz Kosmaty 
4704819bfdSŁukasz Kosmaty   // events
4804819bfdSŁukasz Kosmaty   virtual jsi::Value registerEventHandler(
4904819bfdSŁukasz Kosmaty       jsi::Runtime &rt,
5004819bfdSŁukasz Kosmaty       const jsi::Value &eventHash,
5104819bfdSŁukasz Kosmaty       const jsi::Value &worklet) = 0;
5204819bfdSŁukasz Kosmaty   virtual void unregisterEventHandler(
5304819bfdSŁukasz Kosmaty       jsi::Runtime &rt,
5404819bfdSŁukasz Kosmaty       const jsi::Value &registrationId) = 0;
5504819bfdSŁukasz Kosmaty 
5604819bfdSŁukasz Kosmaty   // views
5704819bfdSŁukasz Kosmaty   virtual jsi::Value getViewProp(
5804819bfdSŁukasz Kosmaty       jsi::Runtime &rt,
5904819bfdSŁukasz Kosmaty       const jsi::Value &viewTag,
6004819bfdSŁukasz Kosmaty       const jsi::Value &propName,
6104819bfdSŁukasz Kosmaty       const jsi::Value &callback) = 0;
6204819bfdSŁukasz Kosmaty 
6304819bfdSŁukasz Kosmaty   // sensors
6404819bfdSŁukasz Kosmaty   virtual jsi::Value registerSensor(
6504819bfdSŁukasz Kosmaty       jsi::Runtime &rt,
6604819bfdSŁukasz Kosmaty       const jsi::Value &sensorType,
6704819bfdSŁukasz Kosmaty       const jsi::Value &interval,
68*5f154df9Saleqsio       const jsi::Value &iosReferenceFrame,
6904819bfdSŁukasz Kosmaty       const jsi::Value &sensorDataContainer) = 0;
7004819bfdSŁukasz Kosmaty   virtual void unregisterSensor(
7104819bfdSŁukasz Kosmaty       jsi::Runtime &rt,
7204819bfdSŁukasz Kosmaty       const jsi::Value &sensorId) = 0;
7304819bfdSŁukasz Kosmaty 
7404819bfdSŁukasz Kosmaty   // keyboard
7504819bfdSŁukasz Kosmaty   virtual jsi::Value subscribeForKeyboardEvents(
7604819bfdSŁukasz Kosmaty       jsi::Runtime &rt,
77*5f154df9Saleqsio       const jsi::Value &keyboardEventContainer,
78*5f154df9Saleqsio       const jsi::Value &isStatusBarTranslucent) = 0;
7904819bfdSŁukasz Kosmaty   virtual void unsubscribeFromKeyboardEvents(
8004819bfdSŁukasz Kosmaty       jsi::Runtime &rt,
8104819bfdSŁukasz Kosmaty       const jsi::Value &listenerId) = 0;
8204819bfdSŁukasz Kosmaty 
8304819bfdSŁukasz Kosmaty   // other
8404819bfdSŁukasz Kosmaty   virtual jsi::Value enableLayoutAnimations(
8504819bfdSŁukasz Kosmaty       jsi::Runtime &rt,
8604819bfdSŁukasz Kosmaty       const jsi::Value &config) = 0;
8704819bfdSŁukasz Kosmaty   virtual jsi::Value configureProps(
8804819bfdSŁukasz Kosmaty       jsi::Runtime &rt,
8904819bfdSŁukasz Kosmaty       const jsi::Value &uiProps,
9004819bfdSŁukasz Kosmaty       const jsi::Value &nativeProps) = 0;
91*5f154df9Saleqsio 
92*5f154df9Saleqsio   // layout animations
93*5f154df9Saleqsio   virtual jsi::Value configureLayoutAnimation(
94*5f154df9Saleqsio       jsi::Runtime &rt,
95*5f154df9Saleqsio       const jsi::Value &viewTag,
96*5f154df9Saleqsio       const jsi::Value &type,
97*5f154df9Saleqsio       const jsi::Value &sharedTransitionTag,
98*5f154df9Saleqsio       const jsi::Value &config) = 0;
9904819bfdSŁukasz Kosmaty };
10004819bfdSŁukasz Kosmaty 
10104819bfdSŁukasz Kosmaty } // namespace reanimated
102