react-native-reanimated 3.0.0-rc.7 → 3.0.0-rc.8

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.
Files changed (177) hide show
  1. package/Common/cpp/AnimatedSensor/AnimatedSensorModule.cpp +32 -37
  2. package/Common/cpp/AnimatedSensor/AnimatedSensorModule.h +4 -3
  3. package/Common/cpp/LayoutAnimations/LayoutAnimationsManager.cpp +76 -0
  4. package/Common/cpp/LayoutAnimations/LayoutAnimationsManager.h +41 -0
  5. package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +161 -165
  6. package/Common/cpp/NativeModules/NativeReanimatedModule.h +36 -34
  7. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +22 -34
  8. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.h +13 -14
  9. package/Common/cpp/SharedItems/RuntimeManager.h +1 -34
  10. package/Common/cpp/SharedItems/Shareables.cpp +142 -0
  11. package/Common/cpp/SharedItems/Shareables.h +455 -0
  12. package/Common/cpp/Tools/PlatformDepMethodsHolder.h +6 -0
  13. package/Common/cpp/Tools/RuntimeDecorator.cpp +54 -26
  14. package/Common/cpp/Tools/RuntimeDecorator.h +11 -2
  15. package/Common/cpp/Tools/Scheduler.cpp +10 -0
  16. package/Common/cpp/Tools/SingleInstanceChecker.h +1 -1
  17. package/android/src/main/cpp/LayoutAnimations.cpp +6 -16
  18. package/android/src/main/cpp/LayoutAnimations.h +4 -4
  19. package/android/src/main/cpp/NativeProxy.cpp +50 -63
  20. package/ios/native/NativeProxy.mm +26 -42
  21. package/lib/commonjs/createAnimatedComponent.js +7 -11
  22. package/lib/commonjs/createAnimatedComponent.js.map +1 -1
  23. package/lib/commonjs/reanimated2/NativeReanimated/NativeReanimated.js +24 -25
  24. package/lib/commonjs/reanimated2/NativeReanimated/NativeReanimated.js.map +1 -1
  25. package/lib/commonjs/reanimated2/ViewDescriptorsSet.js +27 -55
  26. package/lib/commonjs/reanimated2/ViewDescriptorsSet.js.map +1 -1
  27. package/lib/commonjs/reanimated2/WorkletEventHandler.js +5 -3
  28. package/lib/commonjs/reanimated2/WorkletEventHandler.js.map +1 -1
  29. package/lib/commonjs/reanimated2/animation/util.js.map +1 -1
  30. package/lib/commonjs/reanimated2/commonTypes.js +7 -0
  31. package/lib/commonjs/reanimated2/commonTypes.js.map +1 -1
  32. package/lib/commonjs/reanimated2/core.js +111 -209
  33. package/lib/commonjs/reanimated2/core.js.map +1 -1
  34. package/lib/commonjs/reanimated2/globals.d.js.map +1 -1
  35. package/lib/commonjs/reanimated2/hook/useAnimatedKeyboard.js +15 -9
  36. package/lib/commonjs/reanimated2/hook/useAnimatedKeyboard.js.map +1 -1
  37. package/lib/commonjs/reanimated2/hook/useAnimatedRef.js +18 -8
  38. package/lib/commonjs/reanimated2/hook/useAnimatedRef.js.map +1 -1
  39. package/lib/commonjs/reanimated2/hook/useAnimatedSensor.js +27 -36
  40. package/lib/commonjs/reanimated2/hook/useAnimatedSensor.js.map +1 -1
  41. package/lib/commonjs/reanimated2/hook/useAnimatedStyle.js +24 -50
  42. package/lib/commonjs/reanimated2/hook/useAnimatedStyle.js.map +1 -1
  43. package/lib/commonjs/reanimated2/hook/useSharedValue.js +3 -2
  44. package/lib/commonjs/reanimated2/hook/useSharedValue.js.map +1 -1
  45. package/lib/commonjs/reanimated2/hook/utils.js.map +1 -1
  46. package/lib/commonjs/reanimated2/interpolateColor.js.map +1 -1
  47. package/lib/commonjs/reanimated2/jestUtils.js +8 -33
  48. package/lib/commonjs/reanimated2/jestUtils.js.map +1 -1
  49. package/lib/commonjs/reanimated2/js-reanimated/JSReanimated.js +16 -100
  50. package/lib/commonjs/reanimated2/js-reanimated/JSReanimated.js.map +1 -1
  51. package/lib/commonjs/reanimated2/js-reanimated/index.js +5 -0
  52. package/lib/commonjs/reanimated2/js-reanimated/index.js.map +1 -1
  53. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/commonTypes.js.map +1 -1
  54. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/index.js.map +1 -1
  55. package/lib/commonjs/reanimated2/layoutReanimation/animationsManager.js +91 -0
  56. package/lib/commonjs/reanimated2/layoutReanimation/animationsManager.js.map +1 -0
  57. package/lib/commonjs/reanimated2/layoutReanimation/index.js +1 -1
  58. package/lib/commonjs/reanimated2/layoutReanimation/index.js.map +1 -1
  59. package/lib/commonjs/reanimated2/mappers.js +186 -0
  60. package/lib/commonjs/reanimated2/mappers.js.map +1 -0
  61. package/lib/commonjs/reanimated2/mutables.js +173 -0
  62. package/lib/commonjs/reanimated2/mutables.js.map +1 -0
  63. package/lib/commonjs/reanimated2/shareables.js +153 -0
  64. package/lib/commonjs/reanimated2/shareables.js.map +1 -0
  65. package/lib/commonjs/reanimated2/threads.js +58 -0
  66. package/lib/commonjs/reanimated2/threads.js.map +1 -0
  67. package/lib/commonjs/reanimated2/time.js +55 -0
  68. package/lib/commonjs/reanimated2/time.js.map +1 -0
  69. package/lib/commonjs/reanimated2/valueSetter.js +81 -0
  70. package/lib/commonjs/reanimated2/valueSetter.js.map +1 -0
  71. package/lib/module/createAnimatedComponent.js +7 -12
  72. package/lib/module/createAnimatedComponent.js.map +1 -1
  73. package/lib/module/reanimated2/NativeReanimated/NativeReanimated.js +24 -25
  74. package/lib/module/reanimated2/NativeReanimated/NativeReanimated.js.map +1 -1
  75. package/lib/module/reanimated2/ViewDescriptorsSet.js +27 -53
  76. package/lib/module/reanimated2/ViewDescriptorsSet.js.map +1 -1
  77. package/lib/module/reanimated2/WorkletEventHandler.js +4 -3
  78. package/lib/module/reanimated2/WorkletEventHandler.js.map +1 -1
  79. package/lib/module/reanimated2/animation/util.js.map +1 -1
  80. package/lib/module/reanimated2/commonTypes.js +7 -0
  81. package/lib/module/reanimated2/commonTypes.js.map +1 -1
  82. package/lib/module/reanimated2/core.js +66 -188
  83. package/lib/module/reanimated2/core.js.map +1 -1
  84. package/lib/module/reanimated2/globals.d.js.map +1 -1
  85. package/lib/module/reanimated2/hook/useAnimatedKeyboard.js +16 -6
  86. package/lib/module/reanimated2/hook/useAnimatedKeyboard.js.map +1 -1
  87. package/lib/module/reanimated2/hook/useAnimatedRef.js +17 -8
  88. package/lib/module/reanimated2/hook/useAnimatedRef.js.map +1 -1
  89. package/lib/module/reanimated2/hook/useAnimatedSensor.js +29 -34
  90. package/lib/module/reanimated2/hook/useAnimatedSensor.js.map +1 -1
  91. package/lib/module/reanimated2/hook/useAnimatedStyle.js +26 -52
  92. package/lib/module/reanimated2/hook/useAnimatedStyle.js.map +1 -1
  93. package/lib/module/reanimated2/hook/useSharedValue.js +3 -2
  94. package/lib/module/reanimated2/hook/useSharedValue.js.map +1 -1
  95. package/lib/module/reanimated2/hook/utils.js.map +1 -1
  96. package/lib/module/reanimated2/interpolateColor.js.map +1 -1
  97. package/lib/module/reanimated2/jestUtils.js +8 -31
  98. package/lib/module/reanimated2/jestUtils.js.map +1 -1
  99. package/lib/module/reanimated2/js-reanimated/JSReanimated.js +16 -95
  100. package/lib/module/reanimated2/js-reanimated/JSReanimated.js.map +1 -1
  101. package/lib/module/reanimated2/js-reanimated/index.js +5 -0
  102. package/lib/module/reanimated2/js-reanimated/index.js.map +1 -1
  103. package/lib/module/reanimated2/layoutReanimation/animationBuilder/commonTypes.js.map +1 -1
  104. package/lib/module/reanimated2/layoutReanimation/animationBuilder/index.js.map +1 -1
  105. package/lib/module/reanimated2/layoutReanimation/animationsManager.js +84 -0
  106. package/lib/module/reanimated2/layoutReanimation/animationsManager.js.map +1 -0
  107. package/lib/module/reanimated2/layoutReanimation/index.js +1 -1
  108. package/lib/module/reanimated2/layoutReanimation/index.js.map +1 -1
  109. package/lib/module/reanimated2/mappers.js +173 -0
  110. package/lib/module/reanimated2/mappers.js.map +1 -0
  111. package/lib/module/reanimated2/mutables.js +149 -0
  112. package/lib/module/reanimated2/mutables.js.map +1 -0
  113. package/lib/module/reanimated2/shareables.js +133 -0
  114. package/lib/module/reanimated2/shareables.js.map +1 -0
  115. package/lib/module/reanimated2/threads.js +45 -0
  116. package/lib/module/reanimated2/threads.js.map +1 -0
  117. package/lib/module/reanimated2/time.js +37 -0
  118. package/lib/module/reanimated2/time.js.map +1 -0
  119. package/lib/module/reanimated2/valueSetter.js +66 -0
  120. package/lib/module/reanimated2/valueSetter.js.map +1 -0
  121. package/package.json +1 -1
  122. package/plugin.js +31 -15
  123. package/src/createAnimatedComponent.tsx +8 -24
  124. package/src/reanimated2/NativeReanimated/NativeReanimated.ts +34 -53
  125. package/src/reanimated2/ViewDescriptorsSet.ts +30 -69
  126. package/src/reanimated2/WorkletEventHandler.ts +4 -11
  127. package/src/reanimated2/animation/util.ts +1 -0
  128. package/src/reanimated2/commonTypes.ts +29 -4
  129. package/src/reanimated2/core.ts +103 -230
  130. package/src/reanimated2/globals.d.ts +26 -26
  131. package/src/reanimated2/hook/useAnimatedKeyboard.ts +18 -9
  132. package/src/reanimated2/hook/useAnimatedRef.ts +27 -9
  133. package/src/reanimated2/hook/useAnimatedSensor.ts +33 -31
  134. package/src/reanimated2/hook/useAnimatedStyle.ts +26 -64
  135. package/src/reanimated2/hook/useSharedValue.ts +6 -3
  136. package/src/reanimated2/hook/utils.ts +1 -1
  137. package/src/reanimated2/interpolateColor.ts +2 -2
  138. package/src/reanimated2/jestUtils.ts +14 -29
  139. package/src/reanimated2/js-reanimated/JSReanimated.ts +19 -93
  140. package/src/reanimated2/js-reanimated/index.ts +4 -0
  141. package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +7 -0
  142. package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +1 -0
  143. package/src/reanimated2/layoutReanimation/animationsManager.ts +94 -0
  144. package/src/reanimated2/layoutReanimation/index.ts +1 -1
  145. package/src/reanimated2/mappers.ts +179 -0
  146. package/src/reanimated2/mutables.ts +151 -0
  147. package/src/reanimated2/shareables.ts +121 -0
  148. package/src/reanimated2/threads.ts +46 -0
  149. package/src/reanimated2/time.ts +30 -0
  150. package/src/reanimated2/valueSetter.ts +64 -0
  151. package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.cpp +0 -127
  152. package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.h +0 -56
  153. package/Common/cpp/Registries/MapperRegistry.cpp +0 -147
  154. package/Common/cpp/Registries/MapperRegistry.h +0 -29
  155. package/Common/cpp/Registries/WorkletsCache.cpp +0 -45
  156. package/Common/cpp/Registries/WorkletsCache.h +0 -24
  157. package/Common/cpp/SharedItems/FrozenObject.cpp +0 -35
  158. package/Common/cpp/SharedItems/FrozenObject.h +0 -36
  159. package/Common/cpp/SharedItems/HostFunctionHandler.h +0 -28
  160. package/Common/cpp/SharedItems/MutableValue.cpp +0 -134
  161. package/Common/cpp/SharedItems/MutableValue.h +0 -54
  162. package/Common/cpp/SharedItems/MutableValueSetterProxy.cpp +0 -47
  163. package/Common/cpp/SharedItems/MutableValueSetterProxy.h +0 -25
  164. package/Common/cpp/SharedItems/RemoteObject.cpp +0 -45
  165. package/Common/cpp/SharedItems/RemoteObject.h +0 -35
  166. package/Common/cpp/SharedItems/ShareableValue.cpp +0 -529
  167. package/Common/cpp/SharedItems/ShareableValue.h +0 -63
  168. package/Common/cpp/SharedItems/ValueWrapper.h +0 -183
  169. package/Common/cpp/Tools/JSIStoreValueUser.cpp +0 -55
  170. package/Common/cpp/Tools/JSIStoreValueUser.h +0 -37
  171. package/Common/cpp/Tools/Mapper.cpp +0 -86
  172. package/Common/cpp/Tools/Mapper.h +0 -51
  173. package/lib/commonjs/reanimated2/layoutReanimation/LayoutAnimationRepository.js +0 -58
  174. package/lib/commonjs/reanimated2/layoutReanimation/LayoutAnimationRepository.js.map +0 -1
  175. package/lib/module/reanimated2/layoutReanimation/LayoutAnimationRepository.js +0 -52
  176. package/lib/module/reanimated2/layoutReanimation/LayoutAnimationRepository.js.map +0 -1
  177. package/src/reanimated2/layoutReanimation/LayoutAnimationRepository.ts +0 -49
@@ -10,10 +10,6 @@ var _react = require("react");
10
10
 
11
11
  var _core = require("../core");
12
12
 
13
- var _NativeReanimated = _interopRequireDefault(require("../NativeReanimated"));
14
-
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
-
17
13
  let SensorType;
18
14
  exports.SensorType = SensorType;
19
15
 
@@ -25,9 +21,29 @@ exports.SensorType = SensorType;
25
21
  SensorType[SensorType["ROTATION"] = 5] = "ROTATION";
26
22
  })(SensorType || (exports.SensorType = SensorType = {}));
27
23
 
24
+ function initSensorData(sensorType) {
25
+ if (sensorType === SensorType.ROTATION) {
26
+ return (0, _core.makeMutable)({
27
+ qw: 0,
28
+ qx: 0,
29
+ qy: 0,
30
+ qz: 0,
31
+ yaw: 0,
32
+ pitch: 0,
33
+ roll: 0
34
+ });
35
+ } else {
36
+ return (0, _core.makeMutable)({
37
+ x: 0,
38
+ y: 0,
39
+ z: 0
40
+ });
41
+ }
42
+ }
43
+
28
44
  function useAnimatedSensor(sensorType, userConfig) {
29
45
  const ref = (0, _react.useRef)({
30
- sensor: null,
46
+ sensor: initSensorData(sensorType),
31
47
  unregister: () => {// NOOP
32
48
  },
33
49
  isAvailable: false,
@@ -35,46 +51,21 @@ function useAnimatedSensor(sensorType, userConfig) {
35
51
  interval: 0
36
52
  }
37
53
  });
38
-
39
- if (ref.current.sensor === null) {
40
- ref.current.config = {
41
- interval: 'auto',
42
- ...userConfig
43
- };
44
- let sensorData;
45
-
46
- if (sensorType === SensorType.ROTATION) {
47
- sensorData = {
48
- qw: 0,
49
- qx: 0,
50
- qy: 0,
51
- qz: 0,
52
- yaw: 0,
53
- pitch: 0,
54
- roll: 0
55
- };
56
- } else {
57
- sensorData = {
58
- x: 0,
59
- y: 0,
60
- z: 0
61
- };
62
- }
63
-
64
- ref.current.sensor = (0, _core.makeMutable)(sensorData);
65
- }
66
-
67
54
  (0, _react.useEffect)(() => {
68
55
  ref.current.config = {
69
56
  interval: 'auto',
70
57
  ...userConfig
71
58
  };
59
+ const sensorData = ref.current.sensor;
60
+ const id = (0, _core.registerSensor)(sensorType, ref.current.config.interval === 'auto' ? -1 : ref.current.config.interval, data => {
61
+ 'worklet';
72
62
 
73
- const id = _NativeReanimated.default.registerSensor(sensorType, ref.current.config.interval === 'auto' ? -1 : ref.current.config.interval, ref.current.sensor);
63
+ sensorData.value = data;
64
+ });
74
65
 
75
66
  if (id !== -1) {
76
67
  // if sensor is available
77
- ref.current.unregister = () => _NativeReanimated.default.unregisterSensor(id);
68
+ ref.current.unregister = () => (0, _core.unregisterSensor)(id);
78
69
 
79
70
  ref.current.isAvailable = true;
80
71
  } else {
@@ -1 +1 @@
1
- {"version":3,"names":["SensorType","useAnimatedSensor","sensorType","userConfig","ref","useRef","sensor","unregister","isAvailable","config","interval","current","sensorData","ROTATION","qw","qx","qy","qz","yaw","pitch","roll","x","y","z","makeMutable","useEffect","id","NativeReanimated","registerSensor","unregisterSensor"],"sources":["useAnimatedSensor.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { makeMutable } from '../core';\nimport NativeReanimated from '../NativeReanimated';\nimport { SensorValue3D, SensorValueRotation } from '../commonTypes';\n\nexport enum SensorType {\n ACCELEROMETER = 1,\n GYROSCOPE = 2,\n GRAVITY = 3,\n MAGNETIC_FIELD = 4,\n ROTATION = 5,\n}\n\nexport type SensorConfig = {\n interval: number | 'auto';\n};\n\nexport type AnimatedSensor = {\n sensor: SensorValue3D | SensorValueRotation | null;\n unregister: () => void;\n isAvailable: boolean;\n config: SensorConfig;\n};\n\nexport function useAnimatedSensor(\n sensorType: SensorType,\n userConfig?: SensorConfig\n): AnimatedSensor {\n const ref = useRef<AnimatedSensor>({\n sensor: null,\n unregister: () => {\n // NOOP\n },\n isAvailable: false,\n config: {\n interval: 0,\n },\n });\n\n if (ref.current.sensor === null) {\n ref.current.config = { interval: 'auto', ...userConfig };\n let sensorData;\n if (sensorType === SensorType.ROTATION) {\n sensorData = {\n qw: 0,\n qx: 0,\n qy: 0,\n qz: 0,\n yaw: 0,\n pitch: 0,\n roll: 0,\n };\n } else {\n sensorData = {\n x: 0,\n y: 0,\n z: 0,\n };\n }\n ref.current.sensor = makeMutable(sensorData) as any;\n }\n\n useEffect(() => {\n ref.current.config = { interval: 'auto', ...userConfig };\n const id = NativeReanimated.registerSensor(\n sensorType,\n ref.current.config.interval === 'auto' ? -1 : ref.current.config.interval,\n ref.current.sensor as any\n );\n\n if (id !== -1) {\n // if sensor is available\n ref.current.unregister = () => NativeReanimated.unregisterSensor(id);\n ref.current.isAvailable = true;\n } else {\n // if sensor is unavailable\n ref.current.unregister = () => {\n // NOOP\n };\n ref.current.isAvailable = false;\n }\n\n return () => {\n ref.current.unregister();\n };\n }, [sensorType, userConfig]);\n\n return ref.current;\n}\n"],"mappings":";;;;;;;;AAAA;;AACA;;AACA;;;;IAGYA,U;;;WAAAA,U;EAAAA,U,CAAAA,U;EAAAA,U,CAAAA,U;EAAAA,U,CAAAA,U;EAAAA,U,CAAAA,U;EAAAA,U,CAAAA,U;GAAAA,U,0BAAAA,U;;AAmBL,SAASC,iBAAT,CACLC,UADK,EAELC,UAFK,EAGW;EAChB,MAAMC,GAAG,GAAG,IAAAC,aAAA,EAAuB;IACjCC,MAAM,EAAE,IADyB;IAEjCC,UAAU,EAAE,MAAM,CAChB;IACD,CAJgC;IAKjCC,WAAW,EAAE,KALoB;IAMjCC,MAAM,EAAE;MACNC,QAAQ,EAAE;IADJ;EANyB,CAAvB,CAAZ;;EAWA,IAAIN,GAAG,CAACO,OAAJ,CAAYL,MAAZ,KAAuB,IAA3B,EAAiC;IAC/BF,GAAG,CAACO,OAAJ,CAAYF,MAAZ,GAAqB;MAAEC,QAAQ,EAAE,MAAZ;MAAoB,GAAGP;IAAvB,CAArB;IACA,IAAIS,UAAJ;;IACA,IAAIV,UAAU,KAAKF,UAAU,CAACa,QAA9B,EAAwC;MACtCD,UAAU,GAAG;QACXE,EAAE,EAAE,CADO;QAEXC,EAAE,EAAE,CAFO;QAGXC,EAAE,EAAE,CAHO;QAIXC,EAAE,EAAE,CAJO;QAKXC,GAAG,EAAE,CALM;QAMXC,KAAK,EAAE,CANI;QAOXC,IAAI,EAAE;MAPK,CAAb;IASD,CAVD,MAUO;MACLR,UAAU,GAAG;QACXS,CAAC,EAAE,CADQ;QAEXC,CAAC,EAAE,CAFQ;QAGXC,CAAC,EAAE;MAHQ,CAAb;IAKD;;IACDnB,GAAG,CAACO,OAAJ,CAAYL,MAAZ,GAAqB,IAAAkB,iBAAA,EAAYZ,UAAZ,CAArB;EACD;;EAED,IAAAa,gBAAA,EAAU,MAAM;IACdrB,GAAG,CAACO,OAAJ,CAAYF,MAAZ,GAAqB;MAAEC,QAAQ,EAAE,MAAZ;MAAoB,GAAGP;IAAvB,CAArB;;IACA,MAAMuB,EAAE,GAAGC,yBAAA,CAAiBC,cAAjB,CACT1B,UADS,EAETE,GAAG,CAACO,OAAJ,CAAYF,MAAZ,CAAmBC,QAAnB,KAAgC,MAAhC,GAAyC,CAAC,CAA1C,GAA8CN,GAAG,CAACO,OAAJ,CAAYF,MAAZ,CAAmBC,QAFxD,EAGTN,GAAG,CAACO,OAAJ,CAAYL,MAHH,CAAX;;IAMA,IAAIoB,EAAE,KAAK,CAAC,CAAZ,EAAe;MACb;MACAtB,GAAG,CAACO,OAAJ,CAAYJ,UAAZ,GAAyB,MAAMoB,yBAAA,CAAiBE,gBAAjB,CAAkCH,EAAlC,CAA/B;;MACAtB,GAAG,CAACO,OAAJ,CAAYH,WAAZ,GAA0B,IAA1B;IACD,CAJD,MAIO;MACL;MACAJ,GAAG,CAACO,OAAJ,CAAYJ,UAAZ,GAAyB,MAAM,CAC7B;MACD,CAFD;;MAGAH,GAAG,CAACO,OAAJ,CAAYH,WAAZ,GAA0B,KAA1B;IACD;;IAED,OAAO,MAAM;MACXJ,GAAG,CAACO,OAAJ,CAAYJ,UAAZ;IACD,CAFD;EAGD,CAvBD,EAuBG,CAACL,UAAD,EAAaC,UAAb,CAvBH;EAyBA,OAAOC,GAAG,CAACO,OAAX;AACD"}
1
+ {"version":3,"names":["SensorType","initSensorData","sensorType","ROTATION","makeMutable","qw","qx","qy","qz","yaw","pitch","roll","x","y","z","useAnimatedSensor","userConfig","ref","useRef","sensor","unregister","isAvailable","config","interval","useEffect","current","sensorData","id","registerSensor","data","value","unregisterSensor"],"sources":["useAnimatedSensor.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { makeMutable, registerSensor, unregisterSensor } from '../core';\nimport { SharedValue, Value3D, ValueRotation } from '../commonTypes';\n\nexport enum SensorType {\n ACCELEROMETER = 1,\n GYROSCOPE = 2,\n GRAVITY = 3,\n MAGNETIC_FIELD = 4,\n ROTATION = 5,\n}\n\nexport type SensorConfig = {\n interval: number | 'auto';\n};\n\nexport type AnimatedSensor = {\n sensor: SharedValue<Value3D | ValueRotation>;\n unregister: () => void;\n isAvailable: boolean;\n config: SensorConfig;\n};\n\nfunction initSensorData(\n sensorType: SensorType\n): SharedValue<Value3D | ValueRotation> {\n if (sensorType === SensorType.ROTATION) {\n return makeMutable<Value3D | ValueRotation>({\n qw: 0,\n qx: 0,\n qy: 0,\n qz: 0,\n yaw: 0,\n pitch: 0,\n roll: 0,\n });\n } else {\n return makeMutable<Value3D | ValueRotation>({\n x: 0,\n y: 0,\n z: 0,\n });\n }\n}\n\nexport function useAnimatedSensor(\n sensorType: SensorType,\n userConfig?: SensorConfig\n): AnimatedSensor {\n const ref = useRef<AnimatedSensor>({\n sensor: initSensorData(sensorType),\n unregister: () => {\n // NOOP\n },\n isAvailable: false,\n config: {\n interval: 0,\n },\n });\n\n useEffect(() => {\n ref.current.config = { interval: 'auto', ...userConfig };\n const sensorData = ref.current.sensor!;\n const id = registerSensor(\n sensorType,\n ref.current.config.interval === 'auto' ? -1 : ref.current.config.interval,\n (data) => {\n 'worklet';\n sensorData.value = data;\n }\n );\n\n if (id !== -1) {\n // if sensor is available\n ref.current.unregister = () => unregisterSensor(id);\n ref.current.isAvailable = true;\n } else {\n // if sensor is unavailable\n ref.current.unregister = () => {\n // NOOP\n };\n ref.current.isAvailable = false;\n }\n\n return () => {\n ref.current.unregister();\n };\n }, [sensorType, userConfig]);\n\n return ref.current;\n}\n"],"mappings":";;;;;;;;AAAA;;AACA;;IAGYA,U;;;WAAAA,U;EAAAA,U,CAAAA,U;EAAAA,U,CAAAA,U;EAAAA,U,CAAAA,U;EAAAA,U,CAAAA,U;EAAAA,U,CAAAA,U;GAAAA,U,0BAAAA,U;;AAmBZ,SAASC,cAAT,CACEC,UADF,EAEwC;EACtC,IAAIA,UAAU,KAAKF,UAAU,CAACG,QAA9B,EAAwC;IACtC,OAAO,IAAAC,iBAAA,EAAqC;MAC1CC,EAAE,EAAE,CADsC;MAE1CC,EAAE,EAAE,CAFsC;MAG1CC,EAAE,EAAE,CAHsC;MAI1CC,EAAE,EAAE,CAJsC;MAK1CC,GAAG,EAAE,CALqC;MAM1CC,KAAK,EAAE,CANmC;MAO1CC,IAAI,EAAE;IAPoC,CAArC,CAAP;EASD,CAVD,MAUO;IACL,OAAO,IAAAP,iBAAA,EAAqC;MAC1CQ,CAAC,EAAE,CADuC;MAE1CC,CAAC,EAAE,CAFuC;MAG1CC,CAAC,EAAE;IAHuC,CAArC,CAAP;EAKD;AACF;;AAEM,SAASC,iBAAT,CACLb,UADK,EAELc,UAFK,EAGW;EAChB,MAAMC,GAAG,GAAG,IAAAC,aAAA,EAAuB;IACjCC,MAAM,EAAElB,cAAc,CAACC,UAAD,CADW;IAEjCkB,UAAU,EAAE,MAAM,CAChB;IACD,CAJgC;IAKjCC,WAAW,EAAE,KALoB;IAMjCC,MAAM,EAAE;MACNC,QAAQ,EAAE;IADJ;EANyB,CAAvB,CAAZ;EAWA,IAAAC,gBAAA,EAAU,MAAM;IACdP,GAAG,CAACQ,OAAJ,CAAYH,MAAZ,GAAqB;MAAEC,QAAQ,EAAE,MAAZ;MAAoB,GAAGP;IAAvB,CAArB;IACA,MAAMU,UAAU,GAAGT,GAAG,CAACQ,OAAJ,CAAYN,MAA/B;IACA,MAAMQ,EAAE,GAAG,IAAAC,oBAAA,EACT1B,UADS,EAETe,GAAG,CAACQ,OAAJ,CAAYH,MAAZ,CAAmBC,QAAnB,KAAgC,MAAhC,GAAyC,CAAC,CAA1C,GAA8CN,GAAG,CAACQ,OAAJ,CAAYH,MAAZ,CAAmBC,QAFxD,EAGRM,IAAD,IAAU;MACR;;MACAH,UAAU,CAACI,KAAX,GAAmBD,IAAnB;IACD,CANQ,CAAX;;IASA,IAAIF,EAAE,KAAK,CAAC,CAAZ,EAAe;MACb;MACAV,GAAG,CAACQ,OAAJ,CAAYL,UAAZ,GAAyB,MAAM,IAAAW,sBAAA,EAAiBJ,EAAjB,CAA/B;;MACAV,GAAG,CAACQ,OAAJ,CAAYJ,WAAZ,GAA0B,IAA1B;IACD,CAJD,MAIO;MACL;MACAJ,GAAG,CAACQ,OAAJ,CAAYL,UAAZ,GAAyB,MAAM,CAC7B;MACD,CAFD;;MAGAH,GAAG,CAACQ,OAAJ,CAAYJ,WAAZ,GAA0B,KAA1B;IACD;;IAED,OAAO,MAAM;MACXJ,GAAG,CAACQ,OAAJ,CAAYL,UAAZ;IACD,CAFD;EAGD,CA3BD,EA2BG,CAAClB,UAAD,EAAac,UAAb,CA3BH;EA6BA,OAAOC,GAAG,CAACQ,OAAX;AACD"}
@@ -34,7 +34,9 @@ function prepareAnimation(animatedProp, lastAnimation, lastValue) {
34
34
  'worklet';
35
35
 
36
36
  if (Array.isArray(animatedProp)) {
37
- animatedProp.forEach((prop, index) => prepareAnimation(prop, lastAnimation && lastAnimation[index], lastValue && lastValue[index])); // return animatedProp;
37
+ animatedProp.forEach((prop, index) => {
38
+ prepareAnimation(prop, lastAnimation && lastAnimation[index], lastValue && lastValue[index]);
39
+ }); // return animatedProp;
38
40
  }
39
41
 
40
42
  if (typeof animatedProp === 'object' && animatedProp.onFrame) {
@@ -147,13 +149,15 @@ function styleUpdater(viewDescriptors, updater, state, maybeViewRef, animationsA
147
149
  }
148
150
 
149
151
  if (hasAnimations) {
150
- const frame = timestamp => {
152
+ const frame = _timestamp => {
151
153
  const {
152
154
  animations,
153
155
  last,
154
156
  isAnimationCancelled
155
157
  } = state;
156
158
 
159
+ const timestamp = _timestamp ?? (0, _core.getTimestamp)();
160
+
157
161
  if (isAnimationCancelled) {
158
162
  state.isAnimationRunning = false;
159
163
  return;
@@ -178,7 +182,7 @@ function styleUpdater(viewDescriptors, updater, state, maybeViewRef, animationsA
178
182
  }
179
183
 
180
184
  if (!allFinished) {
181
- (0, _core.requestFrame)(frame);
185
+ requestAnimationFrame(frame);
182
186
  } else {
183
187
  state.isAnimationRunning = false;
184
188
  }
@@ -193,7 +197,7 @@ function styleUpdater(viewDescriptors, updater, state, maybeViewRef, animationsA
193
197
  if (_frameTimestamp) {
194
198
  frame(_frameTimestamp);
195
199
  } else {
196
- (0, _core.requestFrame)(frame);
200
+ requestAnimationFrame(frame);
197
201
  }
198
202
  }
199
203
 
@@ -241,13 +245,15 @@ function jestStyleUpdater(viewDescriptors, updater, state, maybeViewRef, animati
241
245
  }
242
246
  });
243
247
 
244
- function frame(timestamp) {
248
+ function frame(_timestamp) {
245
249
  const {
246
250
  animations,
247
251
  last,
248
252
  isAnimationCancelled
249
253
  } = state;
250
254
 
255
+ const timestamp = _timestamp ?? (0, _core.getTimestamp)();
256
+
251
257
  if (isAnimationCancelled) {
252
258
  state.isAnimationRunning = false;
253
259
  return;
@@ -271,7 +277,7 @@ function jestStyleUpdater(viewDescriptors, updater, state, maybeViewRef, animati
271
277
  }
272
278
 
273
279
  if (!allFinished) {
274
- (0, _core.requestFrame)(frame);
280
+ requestAnimationFrame(frame);
275
281
  } else {
276
282
  state.isAnimationRunning = false;
277
283
  }
@@ -287,7 +293,7 @@ function jestStyleUpdater(viewDescriptors, updater, state, maybeViewRef, animati
287
293
  if (_frameTimestamp) {
288
294
  frame(_frameTimestamp);
289
295
  } else {
290
- (0, _core.requestFrame)(frame);
296
+ requestAnimationFrame(frame);
291
297
  }
292
298
  }
293
299
  } else {
@@ -323,10 +329,7 @@ function checkSharedValueUsage(prop, currentKey) {
323
329
  }
324
330
 
325
331
  function useAnimatedStyle(updater, dependencies, adapters) {
326
- var _initRef$current;
327
-
328
332
  const viewsRef = (0, _ViewDescriptorsSet.makeViewsRefSet)();
329
- const viewDescriptors = (0, _ViewDescriptorsSet.makeViewDescriptorsSet)();
330
333
  const initRef = (0, _react.useRef)();
331
334
  const inputs = Object.values(updater._closure ?? {});
332
335
  const adaptersArray = adapters ? Array.isArray(adapters) ? adapters : [adapters] : [];
@@ -351,26 +354,27 @@ function useAnimatedStyle(updater, dependencies, adapters) {
351
354
  updater: updater
352
355
  },
353
356
  remoteState: (0, _core.makeRemote)({
354
- last: initialStyle
357
+ last: initialStyle,
358
+ animations: {},
359
+ isAnimationCancelled: false,
360
+ isAnimationRunning: false
355
361
  }),
356
- sharableViewDescriptors: (0, _core.makeMutable)([])
362
+ viewDescriptors: (0, _ViewDescriptorsSet.makeViewDescriptorsSet)()
357
363
  };
358
- viewDescriptors.rebuildsharableViewDescriptors( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
359
- initRef.current.sharableViewDescriptors);
360
- }
364
+ } // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
361
365
 
362
- dependencies.push((_initRef$current = initRef.current) === null || _initRef$current === void 0 ? void 0 : _initRef$current.sharableViewDescriptors.value); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
363
366
 
364
367
  const {
365
368
  initial,
366
369
  remoteState,
367
- sharableViewDescriptors
370
+ viewDescriptors
368
371
  } = initRef.current;
372
+ const sharableViewDescriptors = viewDescriptors.sharableViewDescriptors;
369
373
  const maybeViewRef = _NativeReanimated.default.native ? undefined : viewsRef;
374
+ dependencies.push(sharableViewDescriptors);
370
375
  (0, _react.useEffect)(() => {
371
376
  let fun;
372
377
  let updaterFn = updater;
373
- let optimalization = updater.__optimalization;
374
378
 
375
379
  if (adapters) {
376
380
  updaterFn = () => {
@@ -384,32 +388,7 @@ function useAnimatedStyle(updater, dependencies, adapters) {
384
388
  };
385
389
  }
386
390
 
387
- if ((0, _utils.canApplyOptimalisation)(updaterFn) && !(0, _PlatformChecker.shouldBeUseWeb)()) {
388
- if ((0, _utils.hasColorProps)(updaterFn())) {
389
- updaterFn = () => {
390
- 'worklet';
391
-
392
- const newValues = updaterFn();
393
- const oldValues = remoteState.last;
394
- const diff = (0, _utils.styleDiff)(oldValues, newValues);
395
- remoteState.last = Object.assign({}, oldValues, newValues);
396
- (0, _utils.parseColors)(diff);
397
- return diff;
398
- };
399
- } else {
400
- updaterFn = () => {
401
- 'worklet';
402
-
403
- const newValues = updaterFn();
404
- const oldValues = remoteState.last;
405
- const diff = (0, _utils.styleDiff)(oldValues, newValues);
406
- remoteState.last = Object.assign({}, oldValues, newValues);
407
- return diff;
408
- };
409
- }
410
- } else if (!(0, _PlatformChecker.shouldBeUseWeb)()) {
411
- optimalization = 0;
412
-
391
+ if (!(0, _PlatformChecker.shouldBeUseWeb)()) {
413
392
  updaterFn = () => {
414
393
  'worklet';
415
394
 
@@ -419,10 +398,6 @@ function useAnimatedStyle(updater, dependencies, adapters) {
419
398
  };
420
399
  }
421
400
 
422
- if (typeof updater.__optimalization !== undefined) {
423
- updaterFn.__optimalization = optimalization;
424
- }
425
-
426
401
  if ((0, _PlatformChecker.isJest)()) {
427
402
  fun = () => {
428
403
  'worklet';
@@ -437,8 +412,7 @@ function useAnimatedStyle(updater, dependencies, adapters) {
437
412
  };
438
413
  }
439
414
 
440
- const mapperId = (0, _core.startMapper)(fun, inputs, [], updaterFn, // TODO fix this
441
- sharableViewDescriptors);
415
+ const mapperId = (0, _core.startMapper)(fun, inputs);
442
416
  return () => {
443
417
  (0, _core.stopMapper)(mapperId);
444
418
  };
@@ -1 +1 @@
1
- {"version":3,"names":["prepareAnimation","animatedProp","lastAnimation","lastValue","Array","isArray","forEach","prop","index","onFrame","animation","value","current","undefined","callStart","timestamp","onStart","getTimestamp","Object","keys","key","runAnimations","result","animationsActive","allFinished","entry","finished","callback","k","styleUpdater","viewDescriptors","updater","state","maybeViewRef","animations","newValues","oldValues","last","hasAnimations","isAnimated","frame","isAnimationCancelled","isAnimationRunning","updates","propName","updateProps","requestFrame","_frameTimestamp","assign","style","getStyleWithoutAnimations","diff","styleDiff","jestStyleUpdater","animatedStyle","adapters","length","updatePropsJestWrapper","checkSharedValueUsage","currentKey","element","Error","useAnimatedStyle","dependencies","viewsRef","makeViewsRefSet","makeViewDescriptorsSet","initRef","useRef","inputs","values","_closure","adaptersArray","adaptersHash","buildWorkletsHash","useSharedValue","__workletHash","push","initialStyle","initialUpdaterRun","validateAnimatedStyles","initial","remoteState","makeRemote","sharableViewDescriptors","makeMutable","rebuildsharableViewDescriptors","NativeReanimatedModule","native","useEffect","fun","updaterFn","optimalization","__optimalization","adapter","canApplyOptimalisation","shouldBeUseWeb","hasColorProps","parseColors","isJest","mapperId","startMapper","stopMapper","process","env","JEST_WORKER_ID"],"sources":["useAnimatedStyle.ts"],"sourcesContent":["/* global _frameTimestamp */\nimport { MutableRefObject, useEffect, useRef } from 'react';\n\nimport {\n startMapper,\n stopMapper,\n makeRemote,\n requestFrame,\n getTimestamp,\n makeMutable,\n} from '../core';\nimport updateProps, { updatePropsJestWrapper } from '../UpdateProps';\nimport { initialUpdaterRun } from '../animation';\nimport NativeReanimatedModule from '../NativeReanimated';\nimport { useSharedValue } from './useSharedValue';\nimport {\n buildWorkletsHash,\n canApplyOptimalisation,\n getStyleWithoutAnimations,\n hasColorProps,\n isAnimated,\n parseColors,\n styleDiff,\n validateAnimatedStyles,\n} from './utils';\nimport { DependencyList, Descriptor } from './commonTypes';\nimport {\n makeViewDescriptorsSet,\n makeViewsRefSet,\n ViewDescriptorsSet,\n ViewRefSet,\n} from '../ViewDescriptorsSet';\nimport { isJest, shouldBeUseWeb } from '../PlatformChecker';\nimport {\n AnimationObject,\n Timestamp,\n AdapterWorkletFunction,\n AnimatedStyle,\n BasicWorkletFunction,\n BasicWorkletFunctionOptional,\n NestedObjectValues,\n SharedValue,\n} from '../commonTypes';\nexport interface AnimatedStyleResult {\n viewDescriptors: ViewDescriptorsSet;\n initial: AnimatedStyle;\n viewsRef: ViewRefSet<any>;\n animatedStyle?: MutableRefObject<AnimatedStyle>;\n}\n\ninterface AnimatedState {\n last: AnimatedStyle;\n animations: AnimatedStyle;\n isAnimationRunning: boolean;\n isAnimationCancelled: boolean;\n}\n\ninterface AnimationRef {\n initial: {\n value: AnimatedStyle;\n updater: () => AnimatedStyle;\n };\n remoteState: AnimatedState;\n sharableViewDescriptors: SharedValue<Descriptor[]>;\n}\n\nfunction prepareAnimation(\n animatedProp: AnimatedStyle,\n lastAnimation: AnimatedStyle,\n lastValue: AnimatedStyle\n): void {\n 'worklet';\n if (Array.isArray(animatedProp)) {\n animatedProp.forEach((prop, index) =>\n prepareAnimation(\n prop,\n lastAnimation && lastAnimation[index],\n lastValue && lastValue[index]\n )\n );\n // return animatedProp;\n }\n if (typeof animatedProp === 'object' && animatedProp.onFrame) {\n const animation = animatedProp;\n\n let value = animation.current;\n if (lastValue !== undefined) {\n if (typeof lastValue === 'object') {\n if (lastValue.value !== undefined) {\n // previously it was a shared value\n value = lastValue.value;\n } else if (lastValue.onFrame !== undefined) {\n if (lastAnimation?.current !== undefined) {\n // it was an animation before, copy its state\n value = lastAnimation.current;\n } else if (lastValue?.current !== undefined) {\n // it was initialized\n value = lastValue.current;\n }\n }\n } else {\n // previously it was a plain value, just set it as starting point\n value = lastValue;\n }\n }\n\n animation.callStart = (timestamp: Timestamp) => {\n animation.onStart(animation, value, timestamp, lastAnimation);\n };\n animation.callStart(getTimestamp());\n animation.callStart = null;\n } else if (typeof animatedProp === 'object') {\n // it is an object\n Object.keys(animatedProp).forEach((key) =>\n prepareAnimation(\n animatedProp[key],\n lastAnimation && lastAnimation[key],\n lastValue && lastValue[key]\n )\n );\n }\n}\n\nfunction runAnimations(\n animation: AnimatedStyle,\n timestamp: Timestamp,\n key: number | string,\n result: AnimatedStyle,\n animationsActive: SharedValue<boolean>\n): boolean {\n 'worklet';\n if (!animationsActive.value) {\n return true;\n }\n if (Array.isArray(animation)) {\n result[key] = [];\n let allFinished = true;\n animation.forEach((entry, index) => {\n if (\n !runAnimations(entry, timestamp, index, result[key], animationsActive)\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else if (typeof animation === 'object' && animation.onFrame) {\n let finished = true;\n if (!animation.finished) {\n if (animation.callStart) {\n animation.callStart(timestamp);\n animation.callStart = null;\n }\n finished = animation.onFrame(animation, timestamp);\n animation.timestamp = timestamp;\n if (finished) {\n animation.finished = true;\n animation.callback && animation.callback(true /* finished */);\n }\n }\n result[key] = animation.current;\n return finished;\n } else if (typeof animation === 'object') {\n result[key] = {};\n let allFinished = true;\n Object.keys(animation).forEach((k) => {\n if (\n !runAnimations(\n animation[k],\n timestamp,\n k,\n result[key],\n animationsActive\n )\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else {\n result[key] = animation;\n return true;\n }\n}\n\nfunction styleUpdater(\n viewDescriptors: SharedValue<Descriptor[]>,\n updater: BasicWorkletFunction<AnimatedStyle>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet<any> | undefined,\n animationsActive: SharedValue<boolean>\n): void {\n 'worklet';\n const animations = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n\n let hasAnimations = false;\n for (const key in newValues) {\n const value = newValues[key];\n if (isAnimated(value)) {\n prepareAnimation(value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n } else {\n delete animations[key];\n }\n }\n\n if (hasAnimations) {\n const frame = (timestamp: Timestamp) => {\n const { animations, last, isAnimationCancelled } = state;\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle = {};\n let allFinished = true;\n for (const propName in animations) {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n }\n\n if (updates) {\n updateProps(viewDescriptors, updates, maybeViewRef);\n }\n\n if (!allFinished) {\n requestFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n };\n\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n if (_frameTimestamp) {\n frame(_frameTimestamp);\n } else {\n requestFrame(frame);\n }\n }\n state.last = Object.assign({}, oldValues, newValues);\n const style = getStyleWithoutAnimations(state.last);\n if (style) {\n updateProps(viewDescriptors, style, maybeViewRef);\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n\n const diff = styleDiff(oldValues, newValues);\n state.last = Object.assign({}, oldValues, newValues);\n if (diff) {\n updateProps(viewDescriptors, newValues, maybeViewRef);\n }\n }\n}\n\nfunction jestStyleUpdater(\n viewDescriptors: SharedValue<Descriptor[]>,\n updater: BasicWorkletFunction<AnimatedStyle>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet<any> | undefined,\n animationsActive: SharedValue<boolean>,\n animatedStyle: MutableRefObject<AnimatedStyle>,\n adapters: AdapterWorkletFunction[] = []\n): void {\n 'worklet';\n const animations: AnimatedStyle = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n\n // extract animated props\n let hasAnimations = false;\n Object.keys(animations).forEach((key) => {\n const value = newValues[key];\n if (!isAnimated(value)) {\n delete animations[key];\n }\n });\n Object.keys(newValues).forEach((key) => {\n const value = newValues[key];\n if (isAnimated(value)) {\n prepareAnimation(value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n }\n });\n\n function frame(timestamp: Timestamp) {\n const { animations, last, isAnimationCancelled } = state;\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle = {};\n let allFinished = true;\n Object.keys(animations).forEach((propName) => {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n });\n\n if (Object.keys(updates).length) {\n updatePropsJestWrapper(\n viewDescriptors,\n updates,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n\n if (!allFinished) {\n requestFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n }\n\n if (hasAnimations) {\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n if (_frameTimestamp) {\n frame(_frameTimestamp);\n } else {\n requestFrame(frame);\n }\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n }\n\n // calculate diff\n const diff = styleDiff(oldValues, newValues);\n state.last = Object.assign({}, oldValues, newValues);\n\n if (Object.keys(diff).length !== 0) {\n updatePropsJestWrapper(\n viewDescriptors,\n diff,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n}\n\n// check for invalid usage of shared values in returned object\nfunction checkSharedValueUsage(\n prop: NestedObjectValues<AnimationObject>,\n currentKey?: string\n): void {\n if (Array.isArray(prop)) {\n // if it's an array (i.ex. transform) validate all its elements\n for (const element of prop) {\n checkSharedValueUsage(element, currentKey);\n }\n } else if (typeof prop === 'object' && prop.value === undefined) {\n // if it's a nested object, run validation for all its props\n for (const key of Object.keys(prop)) {\n checkSharedValueUsage(prop[key], key);\n }\n } else if (\n currentKey !== undefined &&\n typeof prop === 'object' &&\n prop.value !== undefined\n ) {\n // if shared value is passed insted of its value, throw an error\n throw new Error(\n `invalid value passed to \\`${currentKey}\\`, maybe you forgot to use \\`.value\\`?`\n );\n }\n}\n\nexport function useAnimatedStyle<T extends AnimatedStyle>(\n updater: BasicWorkletFunction<T>,\n dependencies?: DependencyList,\n adapters?: AdapterWorkletFunction | AdapterWorkletFunction[]\n): AnimatedStyleResult {\n const viewsRef: ViewRefSet<any> = makeViewsRefSet();\n const viewDescriptors: ViewDescriptorsSet = makeViewDescriptorsSet();\n const initRef = useRef<AnimationRef>();\n const inputs = Object.values(updater._closure ?? {});\n const adaptersArray: AdapterWorkletFunction[] = adapters\n ? Array.isArray(adapters)\n ? adapters\n : [adapters]\n : [];\n const adaptersHash = adapters ? buildWorkletsHash(adaptersArray) : null;\n const animationsActive = useSharedValue<boolean>(true);\n const animatedStyle: MutableRefObject<AnimatedStyle> = useRef<AnimatedStyle>(\n {}\n );\n\n // build dependencies\n if (!dependencies) {\n dependencies = [...inputs, updater.__workletHash];\n } else {\n dependencies.push(updater.__workletHash);\n }\n adaptersHash && dependencies.push(adaptersHash);\n\n if (!initRef.current) {\n const initialStyle: AnimatedStyle = initialUpdaterRun(updater);\n validateAnimatedStyles(initialStyle);\n initRef.current = {\n initial: {\n value: initialStyle,\n updater: updater,\n },\n remoteState: makeRemote({ last: initialStyle }),\n sharableViewDescriptors: makeMutable([]),\n };\n viewDescriptors.rebuildsharableViewDescriptors(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n initRef.current!.sharableViewDescriptors\n );\n }\n dependencies.push(initRef.current?.sharableViewDescriptors.value);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { initial, remoteState, sharableViewDescriptors } = initRef.current!;\n const maybeViewRef = NativeReanimatedModule.native ? undefined : viewsRef;\n\n useEffect(() => {\n let fun;\n let updaterFn = updater as BasicWorkletFunctionOptional<T>;\n let optimalization = updater.__optimalization;\n if (adapters) {\n updaterFn = () => {\n 'worklet';\n const newValues = updater();\n adaptersArray.forEach((adapter) => {\n adapter(newValues);\n });\n return newValues;\n };\n }\n\n if (canApplyOptimalisation(updaterFn) && !shouldBeUseWeb()) {\n if (hasColorProps(updaterFn())) {\n updaterFn = () => {\n 'worklet';\n const newValues = updaterFn();\n const oldValues = remoteState.last;\n const diff = styleDiff<T>(oldValues, newValues);\n remoteState.last = Object.assign({}, oldValues, newValues);\n parseColors(diff);\n return diff;\n };\n } else {\n updaterFn = () => {\n 'worklet';\n const newValues = updaterFn();\n const oldValues = remoteState.last;\n const diff = styleDiff<T>(oldValues, newValues);\n remoteState.last = Object.assign({}, oldValues, newValues);\n return diff;\n };\n }\n } else if (!shouldBeUseWeb()) {\n optimalization = 0;\n updaterFn = () => {\n 'worklet';\n const style = updaterFn();\n parseColors(style);\n return style;\n };\n }\n if (typeof updater.__optimalization !== undefined) {\n updaterFn.__optimalization = optimalization;\n }\n\n if (isJest()) {\n fun = () => {\n 'worklet';\n jestStyleUpdater(\n sharableViewDescriptors,\n updater,\n remoteState,\n maybeViewRef,\n animationsActive,\n animatedStyle,\n adaptersArray\n );\n };\n } else {\n fun = () => {\n 'worklet';\n styleUpdater(\n sharableViewDescriptors,\n updaterFn,\n remoteState,\n maybeViewRef,\n animationsActive\n );\n };\n }\n const mapperId = startMapper(\n fun,\n inputs,\n [],\n updaterFn,\n // TODO fix this\n sharableViewDescriptors\n );\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n\n useEffect(() => {\n animationsActive.value = true;\n return () => {\n // initRef.current = null;\n // viewsRef = null;\n animationsActive.value = false;\n };\n }, []);\n\n checkSharedValueUsage(initial.value);\n\n if (process.env.JEST_WORKER_ID) {\n return { viewDescriptors, initial: initial, viewsRef, animatedStyle };\n } else {\n return { viewDescriptors, initial: initial, viewsRef };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["prepareAnimation","animatedProp","lastAnimation","lastValue","Array","isArray","forEach","prop","index","onFrame","animation","value","current","undefined","callStart","timestamp","onStart","getTimestamp","Object","keys","key","runAnimations","result","animationsActive","allFinished","entry","finished","callback","k","styleUpdater","viewDescriptors","updater","state","maybeViewRef","animations","newValues","oldValues","last","hasAnimations","isAnimated","frame","_timestamp","isAnimationCancelled","isAnimationRunning","updates","propName","updateProps","requestAnimationFrame","_frameTimestamp","assign","style","getStyleWithoutAnimations","diff","styleDiff","jestStyleUpdater","animatedStyle","adapters","length","updatePropsJestWrapper","checkSharedValueUsage","currentKey","element","Error","useAnimatedStyle","dependencies","viewsRef","makeViewsRefSet","initRef","useRef","inputs","values","_closure","adaptersArray","adaptersHash","buildWorkletsHash","useSharedValue","__workletHash","push","initialStyle","initialUpdaterRun","validateAnimatedStyles","initial","remoteState","makeRemote","makeViewDescriptorsSet","sharableViewDescriptors","NativeReanimatedModule","native","useEffect","fun","updaterFn","adapter","shouldBeUseWeb","parseColors","isJest","mapperId","startMapper","stopMapper","process","env","JEST_WORKER_ID"],"sources":["useAnimatedStyle.ts"],"sourcesContent":["/* global _frameTimestamp */\nimport { MutableRefObject, useEffect, useRef } from 'react';\n\nimport { startMapper, stopMapper, makeRemote, getTimestamp } from '../core';\nimport updateProps, { updatePropsJestWrapper } from '../UpdateProps';\nimport { initialUpdaterRun } from '../animation';\nimport NativeReanimatedModule from '../NativeReanimated';\nimport { useSharedValue } from './useSharedValue';\nimport {\n buildWorkletsHash,\n getStyleWithoutAnimations,\n isAnimated,\n parseColors,\n styleDiff,\n validateAnimatedStyles,\n} from './utils';\nimport { DependencyList, Descriptor } from './commonTypes';\nimport {\n makeViewDescriptorsSet,\n makeViewsRefSet,\n ViewDescriptorsSet,\n ViewRefSet,\n} from '../ViewDescriptorsSet';\nimport { isJest, shouldBeUseWeb } from '../PlatformChecker';\nimport {\n AnimationObject,\n Timestamp,\n AdapterWorkletFunction,\n AnimatedStyle,\n BasicWorkletFunction,\n BasicWorkletFunctionOptional,\n NestedObjectValues,\n SharedValue,\n} from '../commonTypes';\nexport interface AnimatedStyleResult {\n viewDescriptors: ViewDescriptorsSet;\n initial: AnimatedStyle;\n viewsRef: ViewRefSet<any>;\n animatedStyle?: MutableRefObject<AnimatedStyle>;\n}\n\ninterface AnimatedState {\n last: AnimatedStyle;\n animations: AnimatedStyle;\n isAnimationRunning: boolean;\n isAnimationCancelled: boolean;\n}\n\ninterface AnimationRef {\n initial: {\n value: AnimatedStyle;\n updater: () => AnimatedStyle;\n };\n remoteState: AnimatedState;\n viewDescriptors: ViewDescriptorsSet;\n}\n\nfunction prepareAnimation(\n animatedProp: AnimatedStyle,\n lastAnimation: AnimatedStyle,\n lastValue: AnimatedStyle\n): void {\n 'worklet';\n if (Array.isArray(animatedProp)) {\n animatedProp.forEach((prop, index) => {\n prepareAnimation(\n prop,\n lastAnimation && lastAnimation[index],\n lastValue && lastValue[index]\n );\n });\n // return animatedProp;\n }\n if (typeof animatedProp === 'object' && animatedProp.onFrame) {\n const animation = animatedProp;\n\n let value = animation.current;\n if (lastValue !== undefined) {\n if (typeof lastValue === 'object') {\n if (lastValue.value !== undefined) {\n // previously it was a shared value\n value = lastValue.value;\n } else if (lastValue.onFrame !== undefined) {\n if (lastAnimation?.current !== undefined) {\n // it was an animation before, copy its state\n value = lastAnimation.current;\n } else if (lastValue?.current !== undefined) {\n // it was initialized\n value = lastValue.current;\n }\n }\n } else {\n // previously it was a plain value, just set it as starting point\n value = lastValue;\n }\n }\n\n animation.callStart = (timestamp: Timestamp) => {\n animation.onStart(animation, value, timestamp, lastAnimation);\n };\n animation.callStart(getTimestamp());\n animation.callStart = null;\n } else if (typeof animatedProp === 'object') {\n // it is an object\n Object.keys(animatedProp).forEach((key) =>\n prepareAnimation(\n animatedProp[key],\n lastAnimation && lastAnimation[key],\n lastValue && lastValue[key]\n )\n );\n }\n}\n\nfunction runAnimations(\n animation: AnimatedStyle,\n timestamp: Timestamp,\n key: number | string,\n result: AnimatedStyle,\n animationsActive: SharedValue<boolean>\n): boolean {\n 'worklet';\n if (!animationsActive.value) {\n return true;\n }\n if (Array.isArray(animation)) {\n result[key] = [];\n let allFinished = true;\n animation.forEach((entry, index) => {\n if (\n !runAnimations(entry, timestamp, index, result[key], animationsActive)\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else if (typeof animation === 'object' && animation.onFrame) {\n let finished = true;\n if (!animation.finished) {\n if (animation.callStart) {\n animation.callStart(timestamp);\n animation.callStart = null;\n }\n finished = animation.onFrame(animation, timestamp);\n animation.timestamp = timestamp;\n if (finished) {\n animation.finished = true;\n animation.callback && animation.callback(true /* finished */);\n }\n }\n result[key] = animation.current;\n return finished;\n } else if (typeof animation === 'object') {\n result[key] = {};\n let allFinished = true;\n Object.keys(animation).forEach((k) => {\n if (\n !runAnimations(\n animation[k],\n timestamp,\n k,\n result[key],\n animationsActive\n )\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else {\n result[key] = animation;\n return true;\n }\n}\n\nfunction styleUpdater(\n viewDescriptors: SharedValue<Descriptor[]>,\n updater: BasicWorkletFunction<AnimatedStyle>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet<any> | undefined,\n animationsActive: SharedValue<boolean>\n): void {\n 'worklet';\n const animations = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n\n let hasAnimations = false;\n for (const key in newValues) {\n const value = newValues[key];\n if (isAnimated(value)) {\n prepareAnimation(value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n } else {\n delete animations[key];\n }\n }\n\n if (hasAnimations) {\n const frame = (_timestamp?: Timestamp) => {\n const { animations, last, isAnimationCancelled } = state;\n const timestamp = _timestamp ?? getTimestamp();\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle = {};\n let allFinished = true;\n for (const propName in animations) {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n }\n\n if (updates) {\n updateProps(viewDescriptors, updates, maybeViewRef);\n }\n\n if (!allFinished) {\n requestAnimationFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n };\n\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n if (_frameTimestamp) {\n frame(_frameTimestamp);\n } else {\n requestAnimationFrame(frame);\n }\n }\n state.last = Object.assign({}, oldValues, newValues);\n const style = getStyleWithoutAnimations(state.last);\n if (style) {\n updateProps(viewDescriptors, style, maybeViewRef);\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n\n const diff = styleDiff(oldValues, newValues);\n state.last = Object.assign({}, oldValues, newValues);\n if (diff) {\n updateProps(viewDescriptors, newValues, maybeViewRef);\n }\n }\n}\n\nfunction jestStyleUpdater(\n viewDescriptors: SharedValue<Descriptor[]>,\n updater: BasicWorkletFunction<AnimatedStyle>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet<any> | undefined,\n animationsActive: SharedValue<boolean>,\n animatedStyle: MutableRefObject<AnimatedStyle>,\n adapters: AdapterWorkletFunction[] = []\n): void {\n 'worklet';\n const animations: AnimatedStyle = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n\n // extract animated props\n let hasAnimations = false;\n Object.keys(animations).forEach((key) => {\n const value = newValues[key];\n if (!isAnimated(value)) {\n delete animations[key];\n }\n });\n Object.keys(newValues).forEach((key) => {\n const value = newValues[key];\n if (isAnimated(value)) {\n prepareAnimation(value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n }\n });\n\n function frame(_timestamp?: Timestamp) {\n const { animations, last, isAnimationCancelled } = state;\n const timestamp = _timestamp ?? getTimestamp();\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle = {};\n let allFinished = true;\n Object.keys(animations).forEach((propName) => {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n });\n\n if (Object.keys(updates).length) {\n updatePropsJestWrapper(\n viewDescriptors,\n updates,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n\n if (!allFinished) {\n requestAnimationFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n }\n\n if (hasAnimations) {\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n if (_frameTimestamp) {\n frame(_frameTimestamp);\n } else {\n requestAnimationFrame(frame);\n }\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n }\n\n // calculate diff\n const diff = styleDiff(oldValues, newValues);\n state.last = Object.assign({}, oldValues, newValues);\n\n if (Object.keys(diff).length !== 0) {\n updatePropsJestWrapper(\n viewDescriptors,\n diff,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n}\n\n// check for invalid usage of shared values in returned object\nfunction checkSharedValueUsage(\n prop: NestedObjectValues<AnimationObject>,\n currentKey?: string\n): void {\n if (Array.isArray(prop)) {\n // if it's an array (i.ex. transform) validate all its elements\n for (const element of prop) {\n checkSharedValueUsage(element, currentKey);\n }\n } else if (typeof prop === 'object' && prop.value === undefined) {\n // if it's a nested object, run validation for all its props\n for (const key of Object.keys(prop)) {\n checkSharedValueUsage(prop[key], key);\n }\n } else if (\n currentKey !== undefined &&\n typeof prop === 'object' &&\n prop.value !== undefined\n ) {\n // if shared value is passed insted of its value, throw an error\n throw new Error(\n `invalid value passed to \\`${currentKey}\\`, maybe you forgot to use \\`.value\\`?`\n );\n }\n}\n\nexport function useAnimatedStyle<T extends AnimatedStyle>(\n updater: BasicWorkletFunction<T>,\n dependencies?: DependencyList,\n adapters?: AdapterWorkletFunction | AdapterWorkletFunction[]\n): AnimatedStyleResult {\n const viewsRef: ViewRefSet<any> = makeViewsRefSet();\n const initRef = useRef<AnimationRef>();\n const inputs = Object.values(updater._closure ?? {});\n const adaptersArray: AdapterWorkletFunction[] = adapters\n ? Array.isArray(adapters)\n ? adapters\n : [adapters]\n : [];\n const adaptersHash = adapters ? buildWorkletsHash(adaptersArray) : null;\n const animationsActive = useSharedValue<boolean>(true);\n const animatedStyle: MutableRefObject<AnimatedStyle> = useRef<AnimatedStyle>(\n {}\n );\n\n // build dependencies\n if (!dependencies) {\n dependencies = [...inputs, updater.__workletHash];\n } else {\n dependencies.push(updater.__workletHash);\n }\n adaptersHash && dependencies.push(adaptersHash);\n\n if (!initRef.current) {\n const initialStyle: AnimatedStyle = initialUpdaterRun(updater);\n validateAnimatedStyles(initialStyle);\n initRef.current = {\n initial: {\n value: initialStyle,\n updater: updater,\n },\n remoteState: makeRemote<AnimatedState>({\n last: initialStyle,\n animations: {},\n isAnimationCancelled: false,\n isAnimationRunning: false,\n }),\n viewDescriptors: makeViewDescriptorsSet(),\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { initial, remoteState, viewDescriptors } = initRef.current!;\n const sharableViewDescriptors = viewDescriptors.sharableViewDescriptors;\n const maybeViewRef = NativeReanimatedModule.native ? undefined : viewsRef;\n\n dependencies.push(sharableViewDescriptors);\n\n useEffect(() => {\n let fun;\n let updaterFn = updater as BasicWorkletFunctionOptional<T>;\n if (adapters) {\n updaterFn = () => {\n 'worklet';\n const newValues = updater();\n adaptersArray.forEach((adapter) => {\n adapter(newValues);\n });\n return newValues;\n };\n }\n\n if (!shouldBeUseWeb()) {\n updaterFn = () => {\n 'worklet';\n const style = updaterFn();\n parseColors(style);\n return style;\n };\n }\n\n if (isJest()) {\n fun = () => {\n 'worklet';\n jestStyleUpdater(\n sharableViewDescriptors,\n updater,\n remoteState,\n maybeViewRef,\n animationsActive,\n animatedStyle,\n adaptersArray\n );\n };\n } else {\n fun = () => {\n 'worklet';\n styleUpdater(\n sharableViewDescriptors,\n updaterFn,\n remoteState,\n maybeViewRef,\n animationsActive\n );\n };\n }\n const mapperId = startMapper(fun, inputs);\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n\n useEffect(() => {\n animationsActive.value = true;\n return () => {\n // initRef.current = null;\n // viewsRef = null;\n animationsActive.value = false;\n };\n }, []);\n\n checkSharedValueUsage(initial.value);\n\n if (process.env.JEST_WORKER_ID) {\n return { viewDescriptors, initial: initial, viewsRef, animatedStyle };\n } else {\n return { viewDescriptors, initial: initial, viewsRef };\n }\n}\n"],"mappings":"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"}
@@ -12,10 +12,11 @@ var _animation = require("../animation");
12
12
  var _core = require("../core");
13
13
 
14
14
  function useSharedValue(init) {
15
- const ref = (0, _react.useRef)((0, _core.makeMutable)(init));
15
+ let oneWayReadsOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
16
+ const ref = (0, _react.useRef)((0, _core.makeMutable)(init, oneWayReadsOnly));
16
17
 
17
18
  if (ref.current === null) {
18
- ref.current = (0, _core.makeMutable)(init);
19
+ ref.current = (0, _core.makeMutable)(init, oneWayReadsOnly);
19
20
  }
20
21
 
21
22
  (0, _react.useEffect)(() => {
@@ -1 +1 @@
1
- {"version":3,"names":["useSharedValue","init","ref","useRef","makeMutable","current","useEffect","cancelAnimation"],"sources":["useSharedValue.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { cancelAnimation } from '../animation';\nimport { SharedValue } from '../commonTypes';\nimport { makeMutable } from '../core';\n\nexport function useSharedValue<T>(init: T): SharedValue<T> {\n const ref = useRef<SharedValue<T>>(makeMutable(init));\n\n if (ref.current === null) {\n ref.current = makeMutable(init);\n }\n\n useEffect(() => {\n return () => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n cancelAnimation(ref.current!);\n };\n }, []);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return ref.current!;\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AAEO,SAASA,cAAT,CAA2BC,IAA3B,EAAoD;EACzD,MAAMC,GAAG,GAAG,IAAAC,aAAA,EAAuB,IAAAC,iBAAA,EAAYH,IAAZ,CAAvB,CAAZ;;EAEA,IAAIC,GAAG,CAACG,OAAJ,KAAgB,IAApB,EAA0B;IACxBH,GAAG,CAACG,OAAJ,GAAc,IAAAD,iBAAA,EAAYH,IAAZ,CAAd;EACD;;EAED,IAAAK,gBAAA,EAAU,MAAM;IACd,OAAO,MAAM;MACX;MACA,IAAAC,0BAAA,EAAgBL,GAAG,CAACG,OAApB;IACD,CAHD;EAID,CALD,EAKG,EALH,EAPyD,CAczD;;EACA,OAAOH,GAAG,CAACG,OAAX;AACD"}
1
+ {"version":3,"names":["useSharedValue","init","oneWayReadsOnly","ref","useRef","makeMutable","current","useEffect","cancelAnimation"],"sources":["useSharedValue.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { cancelAnimation } from '../animation';\nimport { SharedValue } from '../commonTypes';\nimport { makeMutable } from '../core';\n\nexport function useSharedValue<T>(\n init: T,\n oneWayReadsOnly = false\n): SharedValue<T> {\n const ref = useRef<SharedValue<T>>(makeMutable(init, oneWayReadsOnly));\n\n if (ref.current === null) {\n ref.current = makeMutable(init, oneWayReadsOnly);\n }\n\n useEffect(() => {\n return () => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n cancelAnimation(ref.current!);\n };\n }, []);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return ref.current!;\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AAEO,SAASA,cAAT,CACLC,IADK,EAGW;EAAA,IADhBC,eACgB,uEADE,KACF;EAChB,MAAMC,GAAG,GAAG,IAAAC,aAAA,EAAuB,IAAAC,iBAAA,EAAYJ,IAAZ,EAAkBC,eAAlB,CAAvB,CAAZ;;EAEA,IAAIC,GAAG,CAACG,OAAJ,KAAgB,IAApB,EAA0B;IACxBH,GAAG,CAACG,OAAJ,GAAc,IAAAD,iBAAA,EAAYJ,IAAZ,EAAkBC,eAAlB,CAAd;EACD;;EAED,IAAAK,gBAAA,EAAU,MAAM;IACd,OAAO,MAAM;MACX;MACA,IAAAC,0BAAA,EAAgBL,GAAG,CAACG,OAApB;IACD,CAHD;EAID,CALD,EAKG,EALH,EAPgB,CAchB;;EACA,OAAOH,GAAG,CAACG,OAAX;AACD"}
@@ -1 +1 @@
1
- {"version":3,"names":["useEvent","handler","eventNames","rebuild","initRef","useRef","current","WorkletEventHandler","updateWorklet","useHandler","handlers","dependencies","context","makeRemote","savedDependencies","useEffect","buildDependencies","doDependenciesDiffer","areDependenciesEqual","useWeb","isWeb","isJest","buildWorkletsHash","Object","values","reduce","acc","worklet","__workletHash","toString","handlersList","filter","undefined","map","workletHash","closure","_closure","push","nextDeps","prevDeps","is","x","y","objectIs","areHookInputsEqual","length","i","hasColorProps","updates","colorPropsSet","Set","colorProps","key","has","parseColors","indexOf","processedColor","processColor","canApplyOptimalisation","upadterFn","FUNCTIONLESS_FLAG","STATEMENTLESS_FLAG","optimalization","__optimalization","isAnimated","prop","propsToCheck","currentProp","pop","Array","isArray","item","onFrame","styleDiff","oldStyle","newStyle","diff","value","oldValue","getStyleWithoutAnimations","validateAnimatedStyles","styles","Error"],"sources":["utils.ts"],"sourcesContent":["import { MutableRefObject, useEffect, useRef } from 'react';\nimport { processColor } from '../Colors';\nimport {\n AnimatedStyle,\n Context,\n NativeEvent,\n NestedObjectValues,\n StyleProps,\n WorkletFunction,\n AnimationObject,\n} from '../commonTypes';\nimport { makeRemote } from '../core';\nimport { isWeb, isJest } from '../PlatformChecker';\nimport { colorProps } from '../UpdateProps';\nimport WorkletEventHandler from '../WorkletEventHandler';\nimport { ContextWithDependencies, DependencyList } from './commonTypes';\n\ninterface Handler<T, TContext extends Context> extends WorkletFunction {\n (event: T, context: TContext): void;\n}\n\ninterface Handlers<T, TContext extends Context> {\n [key: string]: Handler<T, TContext> | undefined;\n}\n\nexport interface UseHandlerContext<TContext extends Context> {\n context: TContext;\n doDependenciesDiffer: boolean;\n useWeb: boolean;\n}\n\nexport function useEvent<T extends NativeEvent<T>>(\n handler: (event: T) => void,\n eventNames: string[] = [],\n rebuild = false\n): MutableRefObject<WorkletEventHandler<T> | null> {\n const initRef = useRef<WorkletEventHandler<T> | null>(null);\n if (initRef.current === null) {\n initRef.current = new WorkletEventHandler(handler, eventNames);\n } else if (rebuild) {\n initRef.current.updateWorklet(handler);\n }\n\n return initRef;\n}\n\nexport function useHandler<T, TContext extends Context>(\n handlers: Handlers<T, TContext>,\n dependencies?: DependencyList\n): UseHandlerContext<TContext> {\n const initRef = useRef<ContextWithDependencies<TContext> | null>(null);\n if (initRef.current === null) {\n initRef.current = {\n context: makeRemote({}),\n savedDependencies: [],\n };\n }\n\n useEffect(() => {\n return () => {\n initRef.current = null;\n };\n }, []);\n\n const { context, savedDependencies } = initRef.current;\n\n dependencies = buildDependencies(dependencies, handlers);\n\n const doDependenciesDiffer = !areDependenciesEqual(\n dependencies,\n savedDependencies\n );\n initRef.current.savedDependencies = dependencies;\n const useWeb = isWeb() || isJest();\n\n return { context, doDependenciesDiffer, useWeb };\n}\n\n// builds one big hash from multiple worklets' hashes\nexport function buildWorkletsHash(\n handlers: Record<string, WorkletFunction> | Array<WorkletFunction>\n): string {\n return Object.values(handlers).reduce(\n (acc: string, worklet: WorkletFunction) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n acc + worklet.__workletHash!.toString(),\n ''\n );\n}\n\n// builds dependencies array for gesture handlers\nexport function buildDependencies(\n dependencies: DependencyList,\n handlers: Record<string, WorkletFunction | undefined>\n): Array<unknown> {\n const handlersList: WorkletFunction[] = Object.values(handlers).filter(\n (handler) => handler !== undefined\n ) as WorkletFunction[];\n if (!dependencies) {\n dependencies = handlersList.map((handler) => {\n return {\n workletHash: handler.__workletHash,\n closure: handler._closure,\n };\n });\n } else {\n dependencies.push(buildWorkletsHash(handlersList));\n }\n return dependencies;\n}\n\n// this is supposed to work as useEffect comparison\nexport function areDependenciesEqual(\n nextDeps: DependencyList,\n prevDeps: DependencyList\n): boolean {\n function is(x: number, y: number) {\n /* eslint-disable no-self-compare */\n return (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);\n /* eslint-enable no-self-compare */\n }\n const objectIs: (nextDeps: unknown, prevDeps: unknown) => boolean =\n typeof Object.is === 'function' ? Object.is : is;\n\n function areHookInputsEqual(\n nextDeps: DependencyList,\n prevDeps: DependencyList\n ): boolean {\n if (!nextDeps || !prevDeps || prevDeps.length !== nextDeps.length) {\n return false;\n }\n for (let i = 0; i < prevDeps.length; ++i) {\n if (!objectIs(nextDeps[i], prevDeps[i])) {\n return false;\n }\n }\n return true;\n }\n\n return areHookInputsEqual(nextDeps, prevDeps);\n}\n\nexport function hasColorProps(updates: AnimatedStyle): boolean {\n const colorPropsSet = new Set(colorProps);\n for (const key in updates) {\n if (colorPropsSet.has(key)) {\n return true;\n }\n }\n return false;\n}\n\nexport function parseColors(updates: AnimatedStyle): void {\n 'worklet';\n for (const key in updates) {\n if (colorProps.indexOf(key) !== -1) {\n // value could be an animation in which case processColor will recognize it and will return undefined\n // -> in such a case we don't want to override style of that key\n const processedColor = processColor(updates[key]);\n if (processedColor !== undefined) {\n updates[key] = processedColor;\n }\n }\n }\n}\n\nexport function canApplyOptimalisation(upadterFn: WorkletFunction): number {\n const FUNCTIONLESS_FLAG = 0b00000001;\n const STATEMENTLESS_FLAG = 0b00000010;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const optimalization = upadterFn.__optimalization!;\n return (\n optimalization & FUNCTIONLESS_FLAG && optimalization & STATEMENTLESS_FLAG\n );\n}\n\nexport function isAnimated(prop: NestedObjectValues<AnimationObject>): boolean {\n 'worklet';\n const propsToCheck: NestedObjectValues<AnimationObject>[] = [prop];\n while (propsToCheck.length > 0) {\n const currentProp: NestedObjectValues<AnimationObject> =\n propsToCheck.pop() as NestedObjectValues<AnimationObject>;\n if (Array.isArray(currentProp)) {\n for (const item of currentProp) {\n propsToCheck.push(item);\n }\n } else if (currentProp?.onFrame !== undefined) {\n return true;\n } else if (typeof currentProp === 'object') {\n for (const item of Object.values(currentProp)) {\n propsToCheck.push(item);\n }\n }\n // if none of the above, it's not the animated prop, check next one\n }\n\n // when none of the props were animated return false\n return false;\n}\n\nexport function styleDiff<T extends AnimatedStyle>(\n oldStyle: AnimatedStyle,\n newStyle: AnimatedStyle\n): Partial<T> {\n 'worklet';\n const diff: any = {};\n for (const key in oldStyle) {\n if (newStyle[key] === undefined) {\n diff[key] = null;\n }\n }\n for (const key in newStyle) {\n const value = newStyle[key];\n const oldValue = oldStyle[key];\n\n if (isAnimated(value)) {\n // do nothing\n continue;\n }\n if (oldValue !== value) {\n diff[key] = value;\n }\n }\n return diff;\n}\n\nexport function getStyleWithoutAnimations(newStyle: AnimatedStyle): StyleProps {\n 'worklet';\n const diff: StyleProps = {};\n\n for (const key in newStyle) {\n const value = newStyle[key];\n if (isAnimated(value)) {\n continue;\n }\n diff[key] = value;\n }\n return diff;\n}\n\nexport const validateAnimatedStyles = (styles: AnimatedStyle): void => {\n 'worklet';\n if (typeof styles !== 'object') {\n throw new Error(\n `useAnimatedStyle has to return an object, found ${typeof styles} instead`\n );\n } else if (Array.isArray(styles)) {\n throw new Error(\n 'useAnimatedStyle has to return an object and cannot return static styles combined with dynamic ones. Please do merging where a component receives props.'\n );\n }\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["useEvent","handler","eventNames","rebuild","initRef","useRef","current","WorkletEventHandler","updateWorklet","useHandler","handlers","dependencies","context","makeRemote","savedDependencies","useEffect","buildDependencies","doDependenciesDiffer","areDependenciesEqual","useWeb","isWeb","isJest","buildWorkletsHash","Object","values","reduce","acc","worklet","__workletHash","toString","handlersList","filter","undefined","map","workletHash","closure","_closure","push","nextDeps","prevDeps","is","x","y","objectIs","areHookInputsEqual","length","i","hasColorProps","updates","colorPropsSet","Set","colorProps","key","has","parseColors","indexOf","processedColor","processColor","canApplyOptimalisation","upadterFn","FUNCTIONLESS_FLAG","STATEMENTLESS_FLAG","optimalization","__optimalization","isAnimated","prop","propsToCheck","currentProp","pop","Array","isArray","item","onFrame","styleDiff","oldStyle","newStyle","diff","value","oldValue","getStyleWithoutAnimations","validateAnimatedStyles","styles","Error"],"sources":["utils.ts"],"sourcesContent":["import { MutableRefObject, useEffect, useRef } from 'react';\nimport { processColor } from '../Colors';\nimport {\n AnimatedStyle,\n Context,\n NativeEvent,\n NestedObjectValues,\n StyleProps,\n WorkletFunction,\n AnimationObject,\n} from '../commonTypes';\nimport { makeRemote } from '../core';\nimport { isWeb, isJest } from '../PlatformChecker';\nimport { colorProps } from '../UpdateProps';\nimport WorkletEventHandler from '../WorkletEventHandler';\nimport { ContextWithDependencies, DependencyList } from './commonTypes';\n\ninterface Handler<T, TContext extends Context> extends WorkletFunction {\n (event: T, context: TContext): void;\n}\n\ninterface Handlers<T, TContext extends Context> {\n [key: string]: Handler<T, TContext> | undefined;\n}\n\nexport interface UseHandlerContext<TContext extends Context> {\n context: TContext;\n doDependenciesDiffer: boolean;\n useWeb: boolean;\n}\n\nexport function useEvent<T extends NativeEvent<T>>(\n handler: (event: T) => void,\n eventNames: string[] = [],\n rebuild = false\n): MutableRefObject<WorkletEventHandler<T> | null> {\n const initRef = useRef<WorkletEventHandler<T> | null>(null);\n if (initRef.current === null) {\n initRef.current = new WorkletEventHandler(handler, eventNames);\n } else if (rebuild) {\n initRef.current.updateWorklet(handler);\n }\n\n return initRef;\n}\n\nexport function useHandler<T, TContext extends Context>(\n handlers: Handlers<T, TContext>,\n dependencies?: DependencyList\n): UseHandlerContext<TContext> {\n const initRef = useRef<ContextWithDependencies<TContext> | null>(null);\n if (initRef.current === null) {\n initRef.current = {\n context: makeRemote<TContext>({} as TContext),\n savedDependencies: [],\n };\n }\n\n useEffect(() => {\n return () => {\n initRef.current = null;\n };\n }, []);\n\n const { context, savedDependencies } = initRef.current;\n\n dependencies = buildDependencies(dependencies, handlers);\n\n const doDependenciesDiffer = !areDependenciesEqual(\n dependencies,\n savedDependencies\n );\n initRef.current.savedDependencies = dependencies;\n const useWeb = isWeb() || isJest();\n\n return { context, doDependenciesDiffer, useWeb };\n}\n\n// builds one big hash from multiple worklets' hashes\nexport function buildWorkletsHash(\n handlers: Record<string, WorkletFunction> | Array<WorkletFunction>\n): string {\n return Object.values(handlers).reduce(\n (acc: string, worklet: WorkletFunction) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n acc + worklet.__workletHash!.toString(),\n ''\n );\n}\n\n// builds dependencies array for gesture handlers\nexport function buildDependencies(\n dependencies: DependencyList,\n handlers: Record<string, WorkletFunction | undefined>\n): Array<unknown> {\n const handlersList: WorkletFunction[] = Object.values(handlers).filter(\n (handler) => handler !== undefined\n ) as WorkletFunction[];\n if (!dependencies) {\n dependencies = handlersList.map((handler) => {\n return {\n workletHash: handler.__workletHash,\n closure: handler._closure,\n };\n });\n } else {\n dependencies.push(buildWorkletsHash(handlersList));\n }\n return dependencies;\n}\n\n// this is supposed to work as useEffect comparison\nexport function areDependenciesEqual(\n nextDeps: DependencyList,\n prevDeps: DependencyList\n): boolean {\n function is(x: number, y: number) {\n /* eslint-disable no-self-compare */\n return (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);\n /* eslint-enable no-self-compare */\n }\n const objectIs: (nextDeps: unknown, prevDeps: unknown) => boolean =\n typeof Object.is === 'function' ? Object.is : is;\n\n function areHookInputsEqual(\n nextDeps: DependencyList,\n prevDeps: DependencyList\n ): boolean {\n if (!nextDeps || !prevDeps || prevDeps.length !== nextDeps.length) {\n return false;\n }\n for (let i = 0; i < prevDeps.length; ++i) {\n if (!objectIs(nextDeps[i], prevDeps[i])) {\n return false;\n }\n }\n return true;\n }\n\n return areHookInputsEqual(nextDeps, prevDeps);\n}\n\nexport function hasColorProps(updates: AnimatedStyle): boolean {\n const colorPropsSet = new Set(colorProps);\n for (const key in updates) {\n if (colorPropsSet.has(key)) {\n return true;\n }\n }\n return false;\n}\n\nexport function parseColors(updates: AnimatedStyle): void {\n 'worklet';\n for (const key in updates) {\n if (colorProps.indexOf(key) !== -1) {\n // value could be an animation in which case processColor will recognize it and will return undefined\n // -> in such a case we don't want to override style of that key\n const processedColor = processColor(updates[key]);\n if (processedColor !== undefined) {\n updates[key] = processedColor;\n }\n }\n }\n}\n\nexport function canApplyOptimalisation(upadterFn: WorkletFunction): number {\n const FUNCTIONLESS_FLAG = 0b00000001;\n const STATEMENTLESS_FLAG = 0b00000010;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const optimalization = upadterFn.__optimalization!;\n return (\n optimalization & FUNCTIONLESS_FLAG && optimalization & STATEMENTLESS_FLAG\n );\n}\n\nexport function isAnimated(prop: NestedObjectValues<AnimationObject>): boolean {\n 'worklet';\n const propsToCheck: NestedObjectValues<AnimationObject>[] = [prop];\n while (propsToCheck.length > 0) {\n const currentProp: NestedObjectValues<AnimationObject> =\n propsToCheck.pop() as NestedObjectValues<AnimationObject>;\n if (Array.isArray(currentProp)) {\n for (const item of currentProp) {\n propsToCheck.push(item);\n }\n } else if (currentProp?.onFrame !== undefined) {\n return true;\n } else if (typeof currentProp === 'object') {\n for (const item of Object.values(currentProp)) {\n propsToCheck.push(item);\n }\n }\n // if none of the above, it's not the animated prop, check next one\n }\n\n // when none of the props were animated return false\n return false;\n}\n\nexport function styleDiff<T extends AnimatedStyle>(\n oldStyle: AnimatedStyle,\n newStyle: AnimatedStyle\n): Partial<T> {\n 'worklet';\n const diff: any = {};\n for (const key in oldStyle) {\n if (newStyle[key] === undefined) {\n diff[key] = null;\n }\n }\n for (const key in newStyle) {\n const value = newStyle[key];\n const oldValue = oldStyle[key];\n\n if (isAnimated(value)) {\n // do nothing\n continue;\n }\n if (oldValue !== value) {\n diff[key] = value;\n }\n }\n return diff;\n}\n\nexport function getStyleWithoutAnimations(newStyle: AnimatedStyle): StyleProps {\n 'worklet';\n const diff: StyleProps = {};\n\n for (const key in newStyle) {\n const value = newStyle[key];\n if (isAnimated(value)) {\n continue;\n }\n diff[key] = value;\n }\n return diff;\n}\n\nexport const validateAnimatedStyles = (styles: AnimatedStyle): void => {\n 'worklet';\n if (typeof styles !== 'object') {\n throw new Error(\n `useAnimatedStyle has to return an object, found ${typeof styles} instead`\n );\n } else if (Array.isArray(styles)) {\n throw new Error(\n 'useAnimatedStyle has to return an object and cannot return static styles combined with dynamic ones. Please do merging where a component receives props.'\n );\n }\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["Extrapolate","EXTEND","CLAMP","IDENTITY","interpolateColorsHSV","value","inputRange","colors","h","interpolate","s","v","hsvToColor","interpolateColorsRGB","r","g","b","a","rgbaColor","getInterpolateRGB","i","length","color","processedColor","processColor","undefined","push","red","green","blue","opacity","getInterpolateHSV","RGBtoHSV","interpolateColor","outputRange","colorSpace","Error","ColorSpace","useInterpolateConfig","RGB","useSharedValue","cache","makeMutable","interpolateSharableColor","interpolateConfig","HSV"],"sources":["interpolateColor.ts"],"sourcesContent":["import {\n hsvToColor,\n RGBtoHSV,\n rgbaColor,\n processColor,\n red,\n green,\n blue,\n opacity,\n} from './Colors';\nimport { makeMutable } from './core';\nimport { interpolate } from './interpolation';\nimport { SharedValue } from './commonTypes';\nimport { useSharedValue } from './hook/useSharedValue';\n\nexport const Extrapolate = {\n EXTEND: 'extend',\n CLAMP: 'clamp',\n IDENTITY: 'identity',\n};\n\nconst interpolateColorsHSV = (\n value: number,\n inputRange: readonly number[],\n colors: InterpolateHSV\n) => {\n 'worklet';\n const h = interpolate(value, inputRange, colors.h, Extrapolate.CLAMP);\n const s = interpolate(value, inputRange, colors.s, Extrapolate.CLAMP);\n const v = interpolate(value, inputRange, colors.v, Extrapolate.CLAMP);\n return hsvToColor(h, s, v);\n};\n\nconst interpolateColorsRGB = (\n value: number,\n inputRange: readonly number[],\n colors: InterpolateRGB\n) => {\n 'worklet';\n const r = interpolate(value, inputRange, colors.r, Extrapolate.CLAMP);\n const g = interpolate(value, inputRange, colors.g, Extrapolate.CLAMP);\n const b = interpolate(value, inputRange, colors.b, Extrapolate.CLAMP);\n const a = interpolate(value, inputRange, colors.a, Extrapolate.CLAMP);\n return rgbaColor(r, g, b, a);\n};\n\ninterface InterpolateRGB {\n r: number[];\n g: number[];\n b: number[];\n a: number[];\n}\n\nconst getInterpolateRGB = (\n colors: readonly (string | number)[]\n): InterpolateRGB => {\n 'worklet';\n\n const r = [];\n const g = [];\n const b = [];\n const a = [];\n for (let i = 0; i < colors.length; ++i) {\n const color = colors[i];\n const processedColor = processColor(color);\n // explicit check in case if processedColor is 0\n if (processedColor !== null && processedColor !== undefined) {\n r.push(red(processedColor));\n g.push(green(processedColor));\n b.push(blue(processedColor));\n a.push(opacity(processedColor));\n }\n }\n return { r, g, b, a };\n};\n\ninterface InterpolateHSV {\n h: number[];\n s: number[];\n v: number[];\n}\n\nconst getInterpolateHSV = (\n colors: readonly (string | number)[]\n): InterpolateHSV => {\n 'worklet';\n const h = [];\n const s = [];\n const v = [];\n for (let i = 0; i < colors.length; ++i) {\n const color = colors[i];\n const processedColor = RGBtoHSV(processColor(color) as any);\n if (processedColor) {\n h.push(processedColor.h);\n s.push(processedColor.s);\n v.push(processedColor.v);\n }\n }\n return { h, s, v };\n};\n\nexport const interpolateColor = (\n value: number,\n inputRange: readonly number[],\n outputRange: readonly (string | number)[],\n colorSpace: 'RGB' | 'HSV' = 'RGB'\n): string | number => {\n 'worklet';\n if (colorSpace === 'HSV') {\n return interpolateColorsHSV(\n value,\n inputRange,\n getInterpolateHSV(outputRange)\n );\n } else if (colorSpace === 'RGB') {\n return interpolateColorsRGB(\n value,\n inputRange,\n getInterpolateRGB(outputRange)\n );\n }\n throw new Error(\n `Invalid color space provided: ${colorSpace}. Supported values are: ['RGB', 'HSV']`\n );\n};\n\nexport enum ColorSpace {\n RGB = 0,\n HSV = 1,\n}\n\nexport interface InterpolateConfig {\n inputRange: readonly number[];\n outputRange: readonly (string | number)[];\n colorSpace: ColorSpace;\n cache: SharedValue<InterpolateRGB | InterpolateHSV | null>;\n}\n\nexport function useInterpolateConfig(\n inputRange: readonly number[],\n outputRange: readonly (string | number)[],\n colorSpace = ColorSpace.RGB\n): SharedValue<InterpolateConfig> {\n return useSharedValue({\n inputRange,\n outputRange,\n colorSpace,\n cache: makeMutable(null),\n });\n}\n\nexport const interpolateSharableColor = (\n value: number,\n interpolateConfig: SharedValue<InterpolateConfig>\n): string | number => {\n 'worklet';\n let colors = interpolateConfig.value.cache.value;\n if (interpolateConfig.value.colorSpace === ColorSpace.RGB) {\n if (!colors) {\n colors = getInterpolateRGB(interpolateConfig.value.outputRange);\n interpolateConfig.value.cache.value = colors;\n }\n return interpolateColorsRGB(\n value,\n interpolateConfig.value.inputRange,\n colors as InterpolateRGB\n );\n } else if (interpolateConfig.value.colorSpace === ColorSpace.HSV) {\n if (!colors) {\n colors = getInterpolateHSV(interpolateConfig.value.outputRange);\n interpolateConfig.value.cache.value = colors;\n }\n return interpolateColorsHSV(\n value,\n interpolateConfig.value.inputRange,\n colors as InterpolateHSV\n );\n }\n throw new Error(\n `Invalid color space provided: ${interpolateConfig.value.colorSpace}. Supported values are: ['RGB', 'HSV']`\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["Extrapolate","EXTEND","CLAMP","IDENTITY","interpolateColorsHSV","value","inputRange","colors","h","interpolate","s","v","hsvToColor","interpolateColorsRGB","r","g","b","a","rgbaColor","getInterpolateRGB","i","length","color","processedColor","processColor","undefined","push","red","green","blue","opacity","getInterpolateHSV","RGBtoHSV","interpolateColor","outputRange","colorSpace","Error","ColorSpace","useInterpolateConfig","RGB","useSharedValue","cache","makeMutable","interpolateSharableColor","interpolateConfig","HSV"],"sources":["interpolateColor.ts"],"sourcesContent":["import {\n hsvToColor,\n RGBtoHSV,\n rgbaColor,\n processColor,\n red,\n green,\n blue,\n opacity,\n} from './Colors';\nimport { makeMutable } from './core';\nimport { interpolate } from './interpolation';\nimport { SharedValue } from './commonTypes';\nimport { useSharedValue } from './hook/useSharedValue';\n\nexport const Extrapolate = {\n EXTEND: 'extend',\n CLAMP: 'clamp',\n IDENTITY: 'identity',\n};\n\nconst interpolateColorsHSV = (\n value: number,\n inputRange: readonly number[],\n colors: InterpolateHSV\n) => {\n 'worklet';\n const h = interpolate(value, inputRange, colors.h, Extrapolate.CLAMP);\n const s = interpolate(value, inputRange, colors.s, Extrapolate.CLAMP);\n const v = interpolate(value, inputRange, colors.v, Extrapolate.CLAMP);\n return hsvToColor(h, s, v);\n};\n\nconst interpolateColorsRGB = (\n value: number,\n inputRange: readonly number[],\n colors: InterpolateRGB\n) => {\n 'worklet';\n const r = interpolate(value, inputRange, colors.r, Extrapolate.CLAMP);\n const g = interpolate(value, inputRange, colors.g, Extrapolate.CLAMP);\n const b = interpolate(value, inputRange, colors.b, Extrapolate.CLAMP);\n const a = interpolate(value, inputRange, colors.a, Extrapolate.CLAMP);\n return rgbaColor(r, g, b, a);\n};\n\ninterface InterpolateRGB {\n r: number[];\n g: number[];\n b: number[];\n a: number[];\n}\n\nconst getInterpolateRGB = (\n colors: readonly (string | number)[]\n): InterpolateRGB => {\n 'worklet';\n\n const r = [];\n const g = [];\n const b = [];\n const a = [];\n for (let i = 0; i < colors.length; ++i) {\n const color = colors[i];\n const processedColor = processColor(color);\n // explicit check in case if processedColor is 0\n if (processedColor !== null && processedColor !== undefined) {\n r.push(red(processedColor));\n g.push(green(processedColor));\n b.push(blue(processedColor));\n a.push(opacity(processedColor));\n }\n }\n return { r, g, b, a };\n};\n\ninterface InterpolateHSV {\n h: number[];\n s: number[];\n v: number[];\n}\n\nconst getInterpolateHSV = (\n colors: readonly (string | number)[]\n): InterpolateHSV => {\n 'worklet';\n const h = [];\n const s = [];\n const v = [];\n for (let i = 0; i < colors.length; ++i) {\n const color = colors[i];\n const processedColor = RGBtoHSV(processColor(color) as any);\n if (processedColor) {\n h.push(processedColor.h);\n s.push(processedColor.s);\n v.push(processedColor.v);\n }\n }\n return { h, s, v };\n};\n\nexport const interpolateColor = (\n value: number,\n inputRange: readonly number[],\n outputRange: readonly (string | number)[],\n colorSpace: 'RGB' | 'HSV' = 'RGB'\n): string | number => {\n 'worklet';\n if (colorSpace === 'HSV') {\n return interpolateColorsHSV(\n value,\n inputRange,\n getInterpolateHSV(outputRange)\n );\n } else if (colorSpace === 'RGB') {\n return interpolateColorsRGB(\n value,\n inputRange,\n getInterpolateRGB(outputRange)\n );\n }\n throw new Error(\n `Invalid color space provided: ${colorSpace}. Supported values are: ['RGB', 'HSV']`\n );\n};\n\nexport enum ColorSpace {\n RGB = 0,\n HSV = 1,\n}\n\nexport interface InterpolateConfig {\n inputRange: readonly number[];\n outputRange: readonly (string | number)[];\n colorSpace: ColorSpace;\n cache: SharedValue<InterpolateRGB | InterpolateHSV | null>;\n}\n\nexport function useInterpolateConfig(\n inputRange: readonly number[],\n outputRange: readonly (string | number)[],\n colorSpace = ColorSpace.RGB\n): SharedValue<InterpolateConfig> {\n return useSharedValue<InterpolateConfig>({\n inputRange,\n outputRange,\n colorSpace,\n cache: makeMutable<InterpolateRGB | InterpolateHSV | null>(null),\n });\n}\n\nexport const interpolateSharableColor = (\n value: number,\n interpolateConfig: SharedValue<InterpolateConfig>\n): string | number => {\n 'worklet';\n let colors = interpolateConfig.value.cache.value;\n if (interpolateConfig.value.colorSpace === ColorSpace.RGB) {\n if (!colors) {\n colors = getInterpolateRGB(interpolateConfig.value.outputRange);\n interpolateConfig.value.cache.value = colors;\n }\n return interpolateColorsRGB(\n value,\n interpolateConfig.value.inputRange,\n colors as InterpolateRGB\n );\n } else if (interpolateConfig.value.colorSpace === ColorSpace.HSV) {\n if (!colors) {\n colors = getInterpolateHSV(interpolateConfig.value.outputRange);\n interpolateConfig.value.cache.value = colors;\n }\n return interpolateColorsHSV(\n value,\n interpolateConfig.value.inputRange,\n colors as InterpolateHSV\n );\n }\n throw new Error(\n `Invalid color space provided: ${interpolateConfig.value.colorSpace}. Supported values are: ['RGB', 'HSV']`\n );\n};\n"],"mappings":"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"}