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