1*ab11e3c9SKudo Chien #pragma once
2*ab11e3c9SKudo Chien 
3*ab11e3c9SKudo Chien #include <memory>
4*ab11e3c9SKudo Chien #include <string>
5*ab11e3c9SKudo Chien #include <vector>
6*ab11e3c9SKudo Chien 
7*ab11e3c9SKudo Chien #ifdef ANDROID
8*ab11e3c9SKudo Chien #include "TurboModule.h"
9*ab11e3c9SKudo Chien #else
10*ab11e3c9SKudo Chien #include <ReactCommon/TurboModule.h>
11*ab11e3c9SKudo Chien #endif
12*ab11e3c9SKudo Chien 
13*ab11e3c9SKudo Chien #include <ReactCommon/CallInvoker.h>
14*ab11e3c9SKudo Chien 
15*ab11e3c9SKudo Chien using namespace facebook;
16*ab11e3c9SKudo Chien using namespace react;
17*ab11e3c9SKudo Chien 
18*ab11e3c9SKudo Chien namespace reanimated {
19*ab11e3c9SKudo Chien 
20*ab11e3c9SKudo Chien class JSI_EXPORT NativeReanimatedModuleSpec : public TurboModule {
21*ab11e3c9SKudo Chien  protected:
22*ab11e3c9SKudo Chien   explicit NativeReanimatedModuleSpec(std::shared_ptr<CallInvoker> jsInvoker);
23*ab11e3c9SKudo Chien 
24*ab11e3c9SKudo Chien  public:
25*ab11e3c9SKudo Chien   virtual void installCoreFunctions(
26*ab11e3c9SKudo Chien       jsi::Runtime &rt,
27*ab11e3c9SKudo Chien       const jsi::Value &valueSetter) = 0;
28*ab11e3c9SKudo Chien 
29*ab11e3c9SKudo Chien   // SharedValue
30*ab11e3c9SKudo Chien   virtual jsi::Value makeShareable(
31*ab11e3c9SKudo Chien       jsi::Runtime &rt,
32*ab11e3c9SKudo Chien       const jsi::Value &value) = 0;
33*ab11e3c9SKudo Chien   virtual jsi::Value makeMutable(jsi::Runtime &rt, const jsi::Value &value) = 0;
34*ab11e3c9SKudo Chien   virtual jsi::Value makeRemote(jsi::Runtime &rt, const jsi::Value &value) = 0;
35*ab11e3c9SKudo Chien 
36*ab11e3c9SKudo Chien   // mappers
37*ab11e3c9SKudo Chien   virtual jsi::Value startMapper(
38*ab11e3c9SKudo Chien       jsi::Runtime &rt,
39*ab11e3c9SKudo Chien       const jsi::Value &worklet,
40*ab11e3c9SKudo Chien       const jsi::Value &inputs,
41*ab11e3c9SKudo Chien       const jsi::Value &outputs,
42*ab11e3c9SKudo Chien       const jsi::Value &updater,
43*ab11e3c9SKudo Chien       const jsi::Value &viewDescriptors) = 0;
44*ab11e3c9SKudo Chien   virtual void stopMapper(jsi::Runtime &rt, const jsi::Value &mapperId) = 0;
45*ab11e3c9SKudo Chien 
46*ab11e3c9SKudo Chien   // events
47*ab11e3c9SKudo Chien   virtual jsi::Value registerEventHandler(
48*ab11e3c9SKudo Chien       jsi::Runtime &rt,
49*ab11e3c9SKudo Chien       const jsi::Value &eventHash,
50*ab11e3c9SKudo Chien       const jsi::Value &worklet) = 0;
51*ab11e3c9SKudo Chien   virtual void unregisterEventHandler(
52*ab11e3c9SKudo Chien       jsi::Runtime &rt,
53*ab11e3c9SKudo Chien       const jsi::Value &registrationId) = 0;
54*ab11e3c9SKudo Chien 
55*ab11e3c9SKudo Chien   // views
56*ab11e3c9SKudo Chien   virtual jsi::Value getViewProp(
57*ab11e3c9SKudo Chien       jsi::Runtime &rt,
58*ab11e3c9SKudo Chien       const jsi::Value &viewTag,
59*ab11e3c9SKudo Chien       const jsi::Value &propName,
60*ab11e3c9SKudo Chien       const jsi::Value &callback) = 0;
61*ab11e3c9SKudo Chien 
62*ab11e3c9SKudo Chien   // sensors
63*ab11e3c9SKudo Chien   virtual jsi::Value registerSensor(
64*ab11e3c9SKudo Chien       jsi::Runtime &rt,
65*ab11e3c9SKudo Chien       const jsi::Value &sensorType,
66*ab11e3c9SKudo Chien       const jsi::Value &interval,
67*ab11e3c9SKudo Chien       const jsi::Value &sensorDataContainer) = 0;
68*ab11e3c9SKudo Chien   virtual void unregisterSensor(
69*ab11e3c9SKudo Chien       jsi::Runtime &rt,
70*ab11e3c9SKudo Chien       const jsi::Value &sensorId) = 0;
71*ab11e3c9SKudo Chien 
72*ab11e3c9SKudo Chien   // keyboard
73*ab11e3c9SKudo Chien   virtual jsi::Value subscribeForKeyboardEvents(
74*ab11e3c9SKudo Chien       jsi::Runtime &rt,
75*ab11e3c9SKudo Chien       const jsi::Value &keyboardEventContainer) = 0;
76*ab11e3c9SKudo Chien   virtual void unsubscribeFromKeyboardEvents(
77*ab11e3c9SKudo Chien       jsi::Runtime &rt,
78*ab11e3c9SKudo Chien       const jsi::Value &listenerId) = 0;
79*ab11e3c9SKudo Chien 
80*ab11e3c9SKudo Chien   // other
81*ab11e3c9SKudo Chien   virtual jsi::Value enableLayoutAnimations(
82*ab11e3c9SKudo Chien       jsi::Runtime &rt,
83*ab11e3c9SKudo Chien       const jsi::Value &config) = 0;
84*ab11e3c9SKudo Chien   virtual jsi::Value configureProps(
85*ab11e3c9SKudo Chien       jsi::Runtime &rt,
86*ab11e3c9SKudo Chien       const jsi::Value &uiProps,
87*ab11e3c9SKudo Chien       const jsi::Value &nativeProps) = 0;
88*ab11e3c9SKudo Chien };
89*ab11e3c9SKudo Chien 
90*ab11e3c9SKudo Chien } // namespace reanimated
91