1*4440fb50SKudo Chien #pragma once
2*4440fb50SKudo Chien 
3*4440fb50SKudo Chien #include <memory>
4*4440fb50SKudo Chien #include <string>
5*4440fb50SKudo Chien #include <vector>
6*4440fb50SKudo Chien 
7*4440fb50SKudo Chien #ifdef ANDROID
8*4440fb50SKudo Chien #include "TurboModule.h"
9*4440fb50SKudo Chien #else
10*4440fb50SKudo Chien #include <ReactCommon/TurboModule.h>
11*4440fb50SKudo Chien #endif
12*4440fb50SKudo Chien 
13*4440fb50SKudo Chien #include <ReactCommon/CallInvoker.h>
14*4440fb50SKudo Chien 
15*4440fb50SKudo Chien using namespace facebook;
16*4440fb50SKudo Chien using namespace react;
17*4440fb50SKudo Chien 
18*4440fb50SKudo Chien namespace reanimated {
19*4440fb50SKudo Chien 
20*4440fb50SKudo Chien class JSI_EXPORT NativeReanimatedModuleSpec : public TurboModule {
21*4440fb50SKudo Chien  protected:
22*4440fb50SKudo Chien   explicit NativeReanimatedModuleSpec(std::shared_ptr<CallInvoker> jsInvoker);
23*4440fb50SKudo Chien 
24*4440fb50SKudo Chien  public:
25*4440fb50SKudo Chien   virtual void installCoreFunctions(
26*4440fb50SKudo Chien       jsi::Runtime &rt,
27*4440fb50SKudo Chien       const jsi::Value &callGuard,
28*4440fb50SKudo Chien       const jsi::Value &valueUnpacker) = 0;
29*4440fb50SKudo Chien 
30*4440fb50SKudo Chien   // SharedValue
31*4440fb50SKudo Chien   virtual jsi::Value makeShareableClone(
32*4440fb50SKudo Chien       jsi::Runtime &rt,
33*4440fb50SKudo Chien       const jsi::Value &value,
34*4440fb50SKudo Chien       const jsi::Value &shouldRetainRemote) = 0;
35*4440fb50SKudo Chien 
36*4440fb50SKudo Chien   // Synchronized data objects
37*4440fb50SKudo Chien   virtual jsi::Value makeSynchronizedDataHolder(
38*4440fb50SKudo Chien       jsi::Runtime &rt,
39*4440fb50SKudo Chien       const jsi::Value &initialShareable) = 0;
40*4440fb50SKudo Chien   virtual jsi::Value getDataSynchronously(
41*4440fb50SKudo Chien       jsi::Runtime &rt,
42*4440fb50SKudo Chien       const jsi::Value &synchronizedDataHolderRef) = 0;
43*4440fb50SKudo Chien 
44*4440fb50SKudo Chien   // Scheduling
45*4440fb50SKudo Chien   virtual void scheduleOnUI(jsi::Runtime &rt, const jsi::Value &worklet) = 0;
46*4440fb50SKudo Chien 
47*4440fb50SKudo Chien   // events
48*4440fb50SKudo Chien   virtual jsi::Value registerEventHandler(
49*4440fb50SKudo Chien       jsi::Runtime &rt,
50*4440fb50SKudo Chien       const jsi::Value &eventHash,
51*4440fb50SKudo Chien       const jsi::Value &worklet) = 0;
52*4440fb50SKudo Chien   virtual void unregisterEventHandler(
53*4440fb50SKudo Chien       jsi::Runtime &rt,
54*4440fb50SKudo Chien       const jsi::Value &registrationId) = 0;
55*4440fb50SKudo Chien 
56*4440fb50SKudo Chien   // views
57*4440fb50SKudo Chien   virtual jsi::Value getViewProp(
58*4440fb50SKudo Chien       jsi::Runtime &rt,
59*4440fb50SKudo Chien       const jsi::Value &viewTag,
60*4440fb50SKudo Chien       const jsi::Value &propName,
61*4440fb50SKudo Chien       const jsi::Value &callback) = 0;
62*4440fb50SKudo Chien 
63*4440fb50SKudo Chien   // sensors
64*4440fb50SKudo Chien   virtual jsi::Value registerSensor(
65*4440fb50SKudo Chien       jsi::Runtime &rt,
66*4440fb50SKudo Chien       const jsi::Value &sensorType,
67*4440fb50SKudo Chien       const jsi::Value &interval,
68*4440fb50SKudo Chien       const jsi::Value &iosReferenceFrame,
69*4440fb50SKudo Chien       const jsi::Value &sensorDataContainer) = 0;
70*4440fb50SKudo Chien   virtual void unregisterSensor(
71*4440fb50SKudo Chien       jsi::Runtime &rt,
72*4440fb50SKudo Chien       const jsi::Value &sensorId) = 0;
73*4440fb50SKudo Chien 
74*4440fb50SKudo Chien   // keyboard
75*4440fb50SKudo Chien   virtual jsi::Value subscribeForKeyboardEvents(
76*4440fb50SKudo Chien       jsi::Runtime &rt,
77*4440fb50SKudo Chien       const jsi::Value &keyboardEventContainer,
78*4440fb50SKudo Chien       const jsi::Value &isStatusBarTranslucent) = 0;
79*4440fb50SKudo Chien   virtual void unsubscribeFromKeyboardEvents(
80*4440fb50SKudo Chien       jsi::Runtime &rt,
81*4440fb50SKudo Chien       const jsi::Value &listenerId) = 0;
82*4440fb50SKudo Chien 
83*4440fb50SKudo Chien   // other
84*4440fb50SKudo Chien   virtual jsi::Value enableLayoutAnimations(
85*4440fb50SKudo Chien       jsi::Runtime &rt,
86*4440fb50SKudo Chien       const jsi::Value &config) = 0;
87*4440fb50SKudo Chien   virtual jsi::Value configureProps(
88*4440fb50SKudo Chien       jsi::Runtime &rt,
89*4440fb50SKudo Chien       const jsi::Value &uiProps,
90*4440fb50SKudo Chien       const jsi::Value &nativeProps) = 0;
91*4440fb50SKudo Chien 
92*4440fb50SKudo Chien   // layout animations
93*4440fb50SKudo Chien   virtual jsi::Value configureLayoutAnimation(
94*4440fb50SKudo Chien       jsi::Runtime &rt,
95*4440fb50SKudo Chien       const jsi::Value &viewTag,
96*4440fb50SKudo Chien       const jsi::Value &type,
97*4440fb50SKudo Chien       const jsi::Value &sharedTransitionTag,
98*4440fb50SKudo Chien       const jsi::Value &config) = 0;
99*4440fb50SKudo Chien };
100*4440fb50SKudo Chien 
101*4440fb50SKudo Chien } // namespace reanimated
102