@shopify/react-native-skia 0.1.124 → 0.1.127

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 (388) hide show
  1. package/android/CMakeLists.txt +3 -0
  2. package/android/build.gradle +1 -1
  3. package/cpp/api/JsiSkApi.h +3 -1
  4. package/cpp/api/JsiSkCanvas.h +1 -1
  5. package/cpp/api/JsiSkColor.h +41 -7
  6. package/cpp/api/JsiSkColorFilterFactory.h +2 -1
  7. package/cpp/api/JsiSkImageFilter.h +0 -2
  8. package/cpp/api/JsiSkImageFilterFactory.h +37 -17
  9. package/cpp/api/JsiSkMatrix.h +44 -2
  10. package/cpp/api/JsiSkPaint.h +4 -7
  11. package/cpp/api/JsiSkRuntimeEffect.h +7 -0
  12. package/cpp/api/JsiSkRuntimeEffectFactory.h +3 -2
  13. package/cpp/api/JsiSkRuntimeShaderBuilder.h +70 -0
  14. package/cpp/api/JsiSkShaderFactory.h +2 -2
  15. package/cpp/api/JsiSkVertices.h +1 -1
  16. package/cpp/api/third_party/CSSColorParser.cpp +194 -0
  17. package/cpp/api/third_party/CSSColorParser.h +1 -191
  18. package/cpp/jsi/JsiSimpleValueWrapper.h +108 -0
  19. package/cpp/rnskia/values/RNSkReadonlyValue.h +13 -12
  20. package/ios/RNSkia-iOS/PlatformContext.h +30 -4
  21. package/ios/RNSkia-iOS/SkiaDrawView.mm +9 -12
  22. package/lib/commonjs/{values/animation → animation}/decay/decay.js +0 -0
  23. package/lib/commonjs/{values/animation → animation}/decay/decay.js.map +0 -0
  24. package/lib/commonjs/{values/animation → animation}/decay/index.js +0 -0
  25. package/lib/commonjs/{values/animation → animation}/decay/index.js.map +0 -0
  26. package/lib/commonjs/{values/animation → animation}/decay/runDecay.js +1 -1
  27. package/lib/commonjs/animation/decay/runDecay.js.map +1 -0
  28. package/lib/commonjs/{values/animation → animation}/decay/types.js +0 -0
  29. package/lib/commonjs/{values/animation → animation}/decay/types.js.map +0 -0
  30. package/lib/commonjs/{values/animation → animation}/functions/index.js +0 -0
  31. package/lib/commonjs/{values/animation → animation}/functions/index.js.map +0 -0
  32. package/lib/commonjs/animation/functions/interpolate.js +141 -0
  33. package/lib/commonjs/animation/functions/interpolate.js.map +1 -0
  34. package/lib/commonjs/animation/functions/interpolateColors.js +39 -0
  35. package/lib/commonjs/animation/functions/interpolateColors.js.map +1 -0
  36. package/lib/commonjs/{values/animation → animation}/index.js +0 -0
  37. package/lib/commonjs/{values/animation → animation}/index.js.map +0 -0
  38. package/lib/commonjs/{values/animation → animation}/spring/Spring.js +0 -0
  39. package/lib/commonjs/{values/animation → animation}/spring/Spring.js.map +0 -0
  40. package/lib/commonjs/{values/animation → animation}/spring/functions/index.js +0 -0
  41. package/lib/commonjs/{values/animation → animation}/spring/functions/index.js.map +0 -0
  42. package/lib/commonjs/{values/animation → animation}/spring/functions/spring.js +0 -0
  43. package/lib/commonjs/{values/animation → animation}/spring/functions/spring.js.map +0 -0
  44. package/lib/commonjs/{values/animation → animation}/spring/index.js +0 -0
  45. package/lib/commonjs/{values/animation → animation}/spring/index.js.map +0 -0
  46. package/lib/commonjs/{values/animation → animation}/spring/runSpring.js +0 -0
  47. package/lib/commonjs/animation/spring/runSpring.js.map +1 -0
  48. package/lib/commonjs/{values/animation → animation}/spring/types.js +0 -0
  49. package/lib/commonjs/{values/animation → animation}/spring/types.js.map +0 -0
  50. package/lib/commonjs/{values/animation → animation}/spring/useSpring.js +0 -0
  51. package/lib/commonjs/animation/spring/useSpring.js.map +1 -0
  52. package/lib/commonjs/{values/animation → animation}/timing/Easing.js +0 -0
  53. package/lib/commonjs/{values/animation → animation}/timing/Easing.js.map +0 -0
  54. package/lib/commonjs/{values/animation → animation}/timing/createTiming.js +1 -1
  55. package/lib/commonjs/animation/timing/createTiming.js.map +1 -0
  56. package/lib/commonjs/{values/animation → animation}/timing/functions/bezier.js +0 -0
  57. package/lib/commonjs/{values/animation → animation}/timing/functions/bezier.js.map +0 -0
  58. package/lib/commonjs/{values/animation → animation}/timing/functions/getResolvedParams.js +0 -0
  59. package/lib/commonjs/{values/animation → animation}/timing/functions/getResolvedParams.js.map +0 -0
  60. package/lib/commonjs/{values/animation → animation}/timing/functions/index.js +0 -0
  61. package/lib/commonjs/{values/animation → animation}/timing/functions/index.js.map +0 -0
  62. package/lib/commonjs/{values/animation → animation}/timing/functions/timing.js +0 -0
  63. package/lib/commonjs/{values/animation → animation}/timing/functions/timing.js.map +1 -1
  64. package/lib/commonjs/{values/animation → animation}/timing/functions/types.js +0 -0
  65. package/lib/commonjs/{values/animation → animation}/timing/functions/types.js.map +0 -0
  66. package/lib/commonjs/{values/animation → animation}/timing/index.js +0 -0
  67. package/lib/commonjs/{values/animation → animation}/timing/index.js.map +0 -0
  68. package/lib/commonjs/{values/animation → animation}/timing/runTiming.js +0 -0
  69. package/lib/commonjs/animation/timing/runTiming.js.map +1 -0
  70. package/lib/commonjs/{values/animation → animation}/timing/useLoop.js +0 -0
  71. package/lib/commonjs/{values/animation → animation}/timing/useLoop.js.map +0 -0
  72. package/lib/commonjs/{values/animation → animation}/timing/useTiming.js +1 -1
  73. package/lib/commonjs/animation/timing/useTiming.js.map +1 -0
  74. package/lib/commonjs/{values/animation → animation}/types.js +0 -0
  75. package/lib/commonjs/{values/animation → animation}/types.js.map +0 -0
  76. package/lib/commonjs/index.js +13 -0
  77. package/lib/commonjs/index.js.map +1 -1
  78. package/lib/commonjs/renderer/components/colorFilters/BlendColor.js.map +1 -1
  79. package/lib/commonjs/renderer/components/imageFilters/InnerShadow.js +4 -2
  80. package/lib/commonjs/renderer/components/imageFilters/InnerShadow.js.map +1 -1
  81. package/lib/commonjs/renderer/components/imageFilters/RuntimeShader.js +37 -0
  82. package/lib/commonjs/renderer/components/imageFilters/RuntimeShader.js.map +1 -0
  83. package/lib/commonjs/renderer/components/imageFilters/index.js +13 -0
  84. package/lib/commonjs/renderer/components/imageFilters/index.js.map +1 -1
  85. package/lib/commonjs/renderer/components/shaders/Gradient.js +1 -1
  86. package/lib/commonjs/renderer/components/shaders/Gradient.js.map +1 -1
  87. package/lib/commonjs/renderer/components/shaders/Shader.js.map +1 -1
  88. package/lib/commonjs/renderer/processors/Rects.js +5 -15
  89. package/lib/commonjs/renderer/processors/Rects.js.map +1 -1
  90. package/lib/commonjs/renderer/processors/math/Matrix3.js +42 -63
  91. package/lib/commonjs/renderer/processors/math/Matrix3.js.map +1 -1
  92. package/lib/commonjs/renderer/processors/math/Vector.js +4 -5
  93. package/lib/commonjs/renderer/processors/math/Vector.js.map +1 -1
  94. package/lib/commonjs/skia/Color.js +14 -38
  95. package/lib/commonjs/skia/Color.js.map +1 -1
  96. package/lib/commonjs/skia/ImageFilter/ImageFilterFactory.js.map +1 -1
  97. package/lib/commonjs/skia/Matrix.js.map +1 -1
  98. package/lib/commonjs/skia/Shader/useShader.js +4 -1
  99. package/lib/commonjs/skia/Shader/useShader.js.map +1 -1
  100. package/lib/commonjs/skia/Skia.js +3 -45
  101. package/lib/commonjs/skia/Skia.js.map +1 -1
  102. package/lib/commonjs/skia/SkiaApi.js +4 -0
  103. package/lib/commonjs/skia/SkiaApi.js.map +1 -0
  104. package/lib/commonjs/values/api.js +4 -6
  105. package/lib/commonjs/values/api.js.map +1 -1
  106. package/lib/commonjs/values/api.web.js +18 -0
  107. package/lib/commonjs/values/api.web.js.map +1 -0
  108. package/lib/commonjs/values/index.js +0 -13
  109. package/lib/commonjs/values/index.js.map +1 -1
  110. package/lib/commonjs/values/web/RNSkAnimation.js +46 -0
  111. package/lib/commonjs/values/web/RNSkAnimation.js.map +1 -0
  112. package/lib/commonjs/values/web/RNSkClockValue.js +75 -0
  113. package/lib/commonjs/values/web/RNSkClockValue.js.map +1 -0
  114. package/lib/commonjs/values/web/RNSkDerivedValue.js +51 -0
  115. package/lib/commonjs/values/web/RNSkDerivedValue.js.map +1 -0
  116. package/lib/commonjs/values/web/RNSkReadonlyValue.js +45 -0
  117. package/lib/commonjs/values/web/RNSkReadonlyValue.js.map +1 -0
  118. package/lib/commonjs/values/web/RNSkValue.js +73 -0
  119. package/lib/commonjs/values/web/RNSkValue.js.map +1 -0
  120. package/lib/commonjs/values/web/api.js +31 -0
  121. package/lib/commonjs/values/web/api.js.map +1 -0
  122. package/lib/commonjs/values/web/index.js +19 -0
  123. package/lib/commonjs/values/web/index.js.map +1 -0
  124. package/lib/commonjs/views/SkiaView.js +13 -10
  125. package/lib/commonjs/views/SkiaView.js.map +1 -1
  126. package/lib/commonjs/views/api.js +11 -0
  127. package/lib/commonjs/views/api.js.map +1 -0
  128. package/lib/commonjs/views/types.js.map +1 -1
  129. package/lib/module/{values/animation → animation}/decay/decay.js +0 -0
  130. package/lib/module/{values/animation → animation}/decay/decay.js.map +0 -0
  131. package/lib/module/{values/animation → animation}/decay/index.js +0 -0
  132. package/lib/module/{values/animation → animation}/decay/index.js.map +0 -0
  133. package/lib/module/{values/animation → animation}/decay/runDecay.js +1 -1
  134. package/lib/module/animation/decay/runDecay.js.map +1 -0
  135. package/lib/module/{values/animation → animation}/decay/types.js +0 -0
  136. package/lib/module/{values/animation → animation}/decay/types.js.map +0 -0
  137. package/lib/module/{values/animation → animation}/functions/index.js +0 -0
  138. package/lib/module/{values/animation → animation}/functions/index.js.map +0 -0
  139. package/lib/module/animation/functions/interpolate.js +132 -0
  140. package/lib/module/animation/functions/interpolate.js.map +1 -0
  141. package/lib/module/animation/functions/interpolateColors.js +23 -0
  142. package/lib/module/animation/functions/interpolateColors.js.map +1 -0
  143. package/lib/module/{values/animation → animation}/index.js +0 -0
  144. package/lib/module/{values/animation → animation}/index.js.map +0 -0
  145. package/lib/module/{values/animation → animation}/spring/Spring.js +0 -0
  146. package/lib/module/{values/animation → animation}/spring/Spring.js.map +0 -0
  147. package/lib/module/{values/animation → animation}/spring/functions/index.js +0 -0
  148. package/lib/module/{values/animation → animation}/spring/functions/index.js.map +0 -0
  149. package/lib/module/{values/animation → animation}/spring/functions/spring.js +0 -0
  150. package/lib/module/{values/animation → animation}/spring/functions/spring.js.map +0 -0
  151. package/lib/module/{values/animation → animation}/spring/index.js +0 -0
  152. package/lib/module/{values/animation → animation}/spring/index.js.map +0 -0
  153. package/lib/module/{values/animation → animation}/spring/runSpring.js +0 -0
  154. package/lib/module/animation/spring/runSpring.js.map +1 -0
  155. package/lib/module/{values/animation → animation}/spring/types.js +0 -0
  156. package/lib/module/{values/animation → animation}/spring/types.js.map +0 -0
  157. package/lib/module/{values/animation → animation}/spring/useSpring.js +0 -0
  158. package/lib/module/animation/spring/useSpring.js.map +1 -0
  159. package/lib/module/{values/animation → animation}/timing/Easing.js +0 -0
  160. package/lib/module/{values/animation → animation}/timing/Easing.js.map +0 -0
  161. package/lib/module/{values/animation → animation}/timing/createTiming.js +1 -1
  162. package/lib/module/animation/timing/createTiming.js.map +1 -0
  163. package/lib/module/{values/animation → animation}/timing/functions/bezier.js +0 -0
  164. package/lib/module/{values/animation → animation}/timing/functions/bezier.js.map +0 -0
  165. package/lib/module/{values/animation → animation}/timing/functions/getResolvedParams.js +0 -0
  166. package/lib/module/{values/animation → animation}/timing/functions/getResolvedParams.js.map +0 -0
  167. package/lib/module/{values/animation → animation}/timing/functions/index.js +0 -0
  168. package/lib/module/{values/animation → animation}/timing/functions/index.js.map +0 -0
  169. package/lib/module/{values/animation → animation}/timing/functions/timing.js +0 -0
  170. package/lib/module/{values/animation → animation}/timing/functions/timing.js.map +1 -1
  171. package/lib/module/{values/animation → animation}/timing/functions/types.js +0 -0
  172. package/lib/module/{values/animation → animation}/timing/functions/types.js.map +0 -0
  173. package/lib/module/{values/animation → animation}/timing/index.js +0 -0
  174. package/lib/module/{values/animation → animation}/timing/index.js.map +0 -0
  175. package/lib/module/{values/animation → animation}/timing/runTiming.js +0 -0
  176. package/lib/module/animation/timing/runTiming.js.map +1 -0
  177. package/lib/module/{values/animation → animation}/timing/useLoop.js +0 -0
  178. package/lib/module/{values/animation → animation}/timing/useLoop.js.map +0 -0
  179. package/lib/module/{values/animation → animation}/timing/useTiming.js +1 -1
  180. package/lib/module/animation/timing/useTiming.js.map +1 -0
  181. package/lib/module/{values/animation → animation}/types.js +0 -0
  182. package/lib/module/{values/animation → animation}/types.js.map +0 -0
  183. package/lib/module/index.js +1 -0
  184. package/lib/module/index.js.map +1 -1
  185. package/lib/module/renderer/components/colorFilters/BlendColor.js.map +1 -1
  186. package/lib/module/renderer/components/imageFilters/InnerShadow.js +3 -2
  187. package/lib/module/renderer/components/imageFilters/InnerShadow.js.map +1 -1
  188. package/lib/module/renderer/components/imageFilters/RuntimeShader.js +19 -0
  189. package/lib/module/renderer/components/imageFilters/RuntimeShader.js.map +1 -0
  190. package/lib/module/renderer/components/imageFilters/index.js +1 -0
  191. package/lib/module/renderer/components/imageFilters/index.js.map +1 -1
  192. package/lib/module/renderer/components/shaders/Gradient.js +2 -2
  193. package/lib/module/renderer/components/shaders/Gradient.js.map +1 -1
  194. package/lib/module/renderer/components/shaders/Shader.js.map +1 -1
  195. package/lib/module/renderer/processors/Rects.js +4 -15
  196. package/lib/module/renderer/processors/Rects.js.map +1 -1
  197. package/lib/module/renderer/processors/math/Matrix3.js +52 -72
  198. package/lib/module/renderer/processors/math/Matrix3.js.map +1 -1
  199. package/lib/module/renderer/processors/math/Vector.js +3 -5
  200. package/lib/module/renderer/processors/math/Vector.js.map +1 -1
  201. package/lib/module/skia/Color.js +9 -25
  202. package/lib/module/skia/Color.js.map +1 -1
  203. package/lib/module/skia/ImageFilter/ImageFilterFactory.js.map +1 -1
  204. package/lib/module/skia/Matrix.js.map +1 -1
  205. package/lib/module/skia/Shader/useShader.js +4 -1
  206. package/lib/module/skia/Shader/useShader.js.map +1 -1
  207. package/lib/module/skia/Skia.js +2 -46
  208. package/lib/module/skia/Skia.js.map +1 -1
  209. package/lib/module/skia/SkiaApi.js +2 -0
  210. package/lib/module/skia/SkiaApi.js.map +1 -0
  211. package/lib/module/values/api.js +4 -6
  212. package/lib/module/values/api.js.map +1 -1
  213. package/lib/module/values/api.web.js +7 -0
  214. package/lib/module/values/api.web.js.map +1 -0
  215. package/lib/module/values/index.js +0 -1
  216. package/lib/module/values/index.js.map +1 -1
  217. package/lib/module/values/web/RNSkAnimation.js +36 -0
  218. package/lib/module/values/web/RNSkAnimation.js.map +1 -0
  219. package/lib/module/values/web/RNSkClockValue.js +65 -0
  220. package/lib/module/values/web/RNSkClockValue.js.map +1 -0
  221. package/lib/module/values/web/RNSkDerivedValue.js +41 -0
  222. package/lib/module/values/web/RNSkDerivedValue.js.map +1 -0
  223. package/lib/module/values/web/RNSkReadonlyValue.js +36 -0
  224. package/lib/module/values/web/RNSkReadonlyValue.js.map +1 -0
  225. package/lib/module/values/web/RNSkValue.js +63 -0
  226. package/lib/module/values/web/RNSkValue.js.map +1 -0
  227. package/lib/module/values/web/api.js +19 -0
  228. package/lib/module/values/web/api.js.map +1 -0
  229. package/lib/module/values/web/index.js +2 -0
  230. package/lib/module/values/web/index.js.map +1 -0
  231. package/lib/module/views/SkiaView.js +1 -3
  232. package/lib/module/views/SkiaView.js.map +1 -1
  233. package/lib/module/views/api.js +4 -0
  234. package/lib/module/views/api.js.map +1 -0
  235. package/lib/module/views/types.js.map +1 -1
  236. package/lib/typescript/src/{values/animation → animation}/decay/decay.d.ts +0 -0
  237. package/lib/typescript/src/{values/animation → animation}/decay/index.d.ts +0 -0
  238. package/lib/typescript/src/{values/animation → animation}/decay/runDecay.d.ts +2 -2
  239. package/lib/typescript/src/{values/animation → animation}/decay/types.d.ts +1 -1
  240. package/lib/typescript/src/{values/animation → animation}/functions/index.d.ts +0 -0
  241. package/lib/typescript/src/animation/functions/interpolate.d.ts +11 -0
  242. package/lib/typescript/src/animation/functions/interpolateColors.d.ts +3 -0
  243. package/lib/typescript/src/{values/animation → animation}/index.d.ts +0 -0
  244. package/lib/typescript/src/{values/animation → animation}/spring/Spring.d.ts +0 -0
  245. package/lib/typescript/src/{values/animation → animation}/spring/functions/index.d.ts +0 -0
  246. package/lib/typescript/src/{values/animation → animation}/spring/functions/spring.d.ts +0 -0
  247. package/lib/typescript/src/{values/animation → animation}/spring/index.d.ts +0 -0
  248. package/lib/typescript/src/{values/animation → animation}/spring/runSpring.d.ts +1 -1
  249. package/lib/typescript/src/{values/animation → animation}/spring/types.d.ts +0 -0
  250. package/lib/typescript/src/{values/animation → animation}/spring/useSpring.d.ts +1 -1
  251. package/lib/typescript/src/{values/animation → animation}/timing/Easing.d.ts +0 -0
  252. package/lib/typescript/src/{values/animation → animation}/timing/createTiming.d.ts +2 -2
  253. package/lib/typescript/src/{values/animation → animation}/timing/functions/bezier.d.ts +0 -0
  254. package/lib/typescript/src/{values/animation → animation}/timing/functions/getResolvedParams.d.ts +0 -0
  255. package/lib/typescript/src/{values/animation → animation}/timing/functions/index.d.ts +0 -0
  256. package/lib/typescript/src/{values/animation → animation}/timing/functions/timing.d.ts +1 -1
  257. package/lib/typescript/src/{values/animation → animation}/timing/functions/types.d.ts +0 -0
  258. package/lib/typescript/src/{values/animation → animation}/timing/index.d.ts +0 -0
  259. package/lib/typescript/src/{values/animation → animation}/timing/runTiming.d.ts +1 -1
  260. package/lib/typescript/src/{values/animation → animation}/timing/useLoop.d.ts +0 -0
  261. package/lib/typescript/src/{values/animation → animation}/timing/useTiming.d.ts +1 -1
  262. package/lib/typescript/src/{values/animation → animation}/types.d.ts +0 -0
  263. package/lib/typescript/src/index.d.ts +1 -0
  264. package/lib/typescript/src/renderer/components/colorFilters/BlendColor.d.ts +1 -1
  265. package/lib/typescript/src/renderer/components/imageFilters/RuntimeShader.d.ts +7 -0
  266. package/lib/typescript/src/renderer/components/imageFilters/index.d.ts +1 -0
  267. package/lib/typescript/src/renderer/components/shaders/Gradient.d.ts +1 -1
  268. package/lib/typescript/src/renderer/components/shaders/Shader.d.ts +2 -2
  269. package/lib/typescript/src/renderer/components/shapes/Circle.d.ts +1 -4
  270. package/lib/typescript/src/renderer/processors/Rects.d.ts +9 -41
  271. package/lib/typescript/src/renderer/processors/math/Matrix3.d.ts +1 -5
  272. package/lib/typescript/src/renderer/processors/math/Vector.d.ts +5 -17
  273. package/lib/typescript/src/skia/Color.d.ts +8 -9
  274. package/lib/typescript/src/skia/ImageFilter/ImageFilterFactory.d.ts +16 -0
  275. package/lib/typescript/src/skia/Matrix.d.ts +7 -1
  276. package/lib/typescript/src/skia/RuntimeEffect/RuntimeEffect.d.ts +2 -1
  277. package/lib/typescript/src/skia/RuntimeEffect/RuntimeEffectFactory.d.ts +2 -2
  278. package/lib/typescript/src/skia/Shader/useShader.d.ts +1 -1
  279. package/lib/typescript/src/skia/Skia.d.ts +28 -95
  280. package/lib/typescript/src/skia/SkiaApi.d.ts +71 -0
  281. package/lib/typescript/src/skia/Surface/Surface.d.ts +1 -1
  282. package/lib/typescript/src/skia/Surface/SurfaceFactory.d.ts +2 -2
  283. package/lib/typescript/src/values/api.d.ts +2 -25
  284. package/lib/typescript/src/values/api.web.d.ts +2 -0
  285. package/lib/typescript/src/values/index.d.ts +0 -1
  286. package/lib/typescript/src/values/types.d.ts +24 -1
  287. package/lib/typescript/src/values/web/RNSkAnimation.d.ts +9 -0
  288. package/lib/typescript/src/values/web/RNSkClockValue.d.ts +13 -0
  289. package/lib/typescript/src/values/web/RNSkDerivedValue.d.ts +9 -0
  290. package/lib/typescript/src/values/web/RNSkReadonlyValue.d.ts +11 -0
  291. package/lib/typescript/src/values/web/RNSkValue.d.ts +14 -0
  292. package/lib/typescript/src/values/web/api.d.ts +2 -0
  293. package/lib/typescript/src/values/web/index.d.ts +1 -0
  294. package/lib/typescript/src/views/SkiaView.d.ts +3 -36
  295. package/lib/typescript/src/views/api.d.ts +5 -0
  296. package/lib/typescript/src/views/types.d.ts +32 -0
  297. package/package.json +2 -2
  298. package/src/{values/animation → animation}/decay/decay.ts +0 -0
  299. package/src/{values/animation → animation}/decay/index.ts +0 -0
  300. package/src/{values/animation → animation}/decay/runDecay.ts +2 -2
  301. package/src/{values/animation → animation}/decay/types.ts +1 -1
  302. package/src/{values/animation → animation}/functions/index.ts +0 -0
  303. package/src/animation/functions/interpolate.ts +182 -0
  304. package/src/animation/functions/interpolateColors.ts +58 -0
  305. package/src/{values/animation → animation}/index.ts +0 -0
  306. package/src/{values/animation → animation}/spring/Spring.ts +0 -0
  307. package/src/{values/animation → animation}/spring/functions/index.ts +0 -0
  308. package/src/{values/animation → animation}/spring/functions/spring.ts +0 -0
  309. package/src/{values/animation → animation}/spring/index.ts +0 -0
  310. package/src/{values/animation → animation}/spring/runSpring.ts +1 -1
  311. package/src/{values/animation → animation}/spring/types.ts +0 -0
  312. package/src/{values/animation → animation}/spring/useSpring.ts +1 -1
  313. package/src/{values/animation → animation}/timing/Easing.ts +0 -0
  314. package/src/{values/animation → animation}/timing/createTiming.ts +2 -2
  315. package/src/{values/animation → animation}/timing/functions/__tests__/timing.spec.ts +0 -0
  316. package/src/{values/animation → animation}/timing/functions/bezier.ts +0 -0
  317. package/src/{values/animation → animation}/timing/functions/getResolvedParams.ts +0 -0
  318. package/src/{values/animation → animation}/timing/functions/index.ts +0 -0
  319. package/src/{values/animation → animation}/timing/functions/timing.ts +1 -1
  320. package/src/{values/animation → animation}/timing/functions/types.ts +0 -0
  321. package/src/{values/animation → animation}/timing/index.ts +0 -0
  322. package/src/{values/animation → animation}/timing/runTiming.ts +1 -1
  323. package/src/{values/animation → animation}/timing/useLoop.ts +0 -0
  324. package/src/{values/animation → animation}/timing/useTiming.ts +2 -2
  325. package/src/{values/animation → animation}/types.ts +0 -0
  326. package/src/index.ts +1 -0
  327. package/src/renderer/components/colorFilters/BlendColor.tsx +1 -1
  328. package/src/renderer/components/imageFilters/InnerShadow.tsx +4 -2
  329. package/src/renderer/components/imageFilters/RuntimeShader.tsx +23 -0
  330. package/src/renderer/components/imageFilters/index.ts +1 -0
  331. package/src/renderer/components/shaders/Gradient.ts +2 -4
  332. package/src/renderer/components/shaders/Shader.tsx +2 -2
  333. package/src/renderer/processors/Rects.ts +6 -12
  334. package/src/renderer/processors/math/Matrix3.ts +24 -105
  335. package/src/renderer/processors/math/Vector.ts +3 -2
  336. package/src/skia/Color.ts +13 -27
  337. package/src/skia/ImageFilter/ImageFilterFactory.ts +20 -0
  338. package/src/skia/Matrix.ts +8 -1
  339. package/src/skia/RuntimeEffect/RuntimeEffect.ts +3 -1
  340. package/src/skia/RuntimeEffect/RuntimeEffectFactory.ts +2 -2
  341. package/src/skia/Shader/useShader.ts +4 -1
  342. package/src/skia/Skia.ts +4 -126
  343. package/src/skia/SkiaApi.ts +86 -0
  344. package/src/skia/Surface/Surface.ts +1 -1
  345. package/src/skia/Surface/SurfaceFactory.ts +2 -2
  346. package/src/values/api.ts +3 -42
  347. package/src/values/api.web.ts +5 -0
  348. package/src/values/index.ts +0 -1
  349. package/src/values/types.ts +30 -1
  350. package/src/values/web/RNSkAnimation.ts +33 -0
  351. package/src/values/web/RNSkClockValue.ts +58 -0
  352. package/src/values/web/RNSkDerivedValue.ts +38 -0
  353. package/src/values/web/RNSkReadonlyValue.ts +32 -0
  354. package/src/values/web/RNSkValue.ts +57 -0
  355. package/src/values/web/__tests__/RNSkAnimation.spec.ts +21 -0
  356. package/src/values/web/__tests__/RNSkDerivedValue.spec.ts +15 -0
  357. package/src/values/web/__tests__/RNSkReadonlyValue.spec.ts +8 -0
  358. package/src/values/web/__tests__/RNSkValue.spec.ts +11 -0
  359. package/src/values/web/api.ts +33 -0
  360. package/src/values/web/index.ts +1 -0
  361. package/src/views/SkiaView.tsx +3 -49
  362. package/src/views/api.ts +7 -0
  363. package/src/views/types.ts +40 -0
  364. package/lib/commonjs/values/animation/decay/runDecay.js.map +0 -1
  365. package/lib/commonjs/values/animation/functions/interpolate.js +0 -139
  366. package/lib/commonjs/values/animation/functions/interpolate.js.map +0 -1
  367. package/lib/commonjs/values/animation/functions/interpolateColors.js +0 -47
  368. package/lib/commonjs/values/animation/functions/interpolateColors.js.map +0 -1
  369. package/lib/commonjs/values/animation/spring/runSpring.js.map +0 -1
  370. package/lib/commonjs/values/animation/spring/useSpring.js.map +0 -1
  371. package/lib/commonjs/values/animation/timing/createTiming.js.map +0 -1
  372. package/lib/commonjs/values/animation/timing/runTiming.js.map +0 -1
  373. package/lib/commonjs/values/animation/timing/useTiming.js.map +0 -1
  374. package/lib/module/values/animation/decay/runDecay.js.map +0 -1
  375. package/lib/module/values/animation/functions/interpolate.js +0 -132
  376. package/lib/module/values/animation/functions/interpolate.js.map +0 -1
  377. package/lib/module/values/animation/functions/interpolateColors.js +0 -32
  378. package/lib/module/values/animation/functions/interpolateColors.js.map +0 -1
  379. package/lib/module/values/animation/spring/runSpring.js.map +0 -1
  380. package/lib/module/values/animation/spring/useSpring.js.map +0 -1
  381. package/lib/module/values/animation/timing/createTiming.js.map +0 -1
  382. package/lib/module/values/animation/timing/runTiming.js.map +0 -1
  383. package/lib/module/values/animation/timing/useTiming.js.map +0 -1
  384. package/lib/typescript/scripts/install-npm.d.ts +0 -1
  385. package/lib/typescript/src/values/animation/functions/interpolate.d.ts +0 -7
  386. package/lib/typescript/src/values/animation/functions/interpolateColors.d.ts +0 -3
  387. package/src/values/animation/functions/interpolate.ts +0 -169
  388. package/src/values/animation/functions/interpolateColors.ts +0 -62
package/src/skia/Skia.ts CHANGED
@@ -1,131 +1,12 @@
1
- import { Platform, processColor } from "react-native";
2
-
3
1
  /*global SkiaApi*/
4
- import type { ImageFilterFactory } from "./ImageFilter";
5
- import type { PathFactory } from "./Path";
6
- import type { ColorFilterFactory } from "./ColorFilter";
7
- import type { SkFont } from "./Font";
8
- import type { SkTypeface, TypefaceFactory } from "./Typeface";
9
- import type { ImageFactory } from "./Image";
10
- import type { MaskFilterFactory } from "./MaskFilter";
11
- import type { SkPaint } from "./Paint";
12
- import type { SkRect } from "./Rect";
13
- import type { SkRRect } from "./RRect";
14
- import type { RuntimeEffectFactory } from "./RuntimeEffect";
15
- import type { ShaderFactory } from "./Shader";
16
- import type { SkMatrix } from "./Matrix";
17
- import type { PathEffectFactory } from "./PathEffect";
18
- import type { SkPoint } from "./Point";
19
- import type { SkVertices, VertexMode } from "./Vertices/Vertices";
20
- import type { DataFactory } from "./Data";
21
- import type { SVGFactory } from "./SVG";
22
- import type { TextBlobFactory } from "./TextBlob";
23
- import type { FontMgrFactory } from "./FontMgr/FontMgrFactory";
24
- import type { SurfaceFactory } from "./Surface";
25
2
  import "./NativeSetup";
26
- import type { SkRSXform } from "./RSXform";
27
- import type { SkPath } from "./Path/Path";
28
- import type { SkContourMeasureIter } from "./ContourMeasure";
29
- import type { PictureFactory, SkPictureRecorder } from "./Picture";
30
- import type { Color, SkColor } from "./Color";
31
-
32
- /*
33
- * Parse CSS colors
34
- */
35
- const SkiaColor = (cl: Color) => {
36
- if (typeof cl === "number") {
37
- return cl;
38
- }
39
- const color = Skia.parseColorString(cl);
40
- if (color !== undefined) {
41
- return color;
42
- } else {
43
- // If the color is not recognized, we fallback to React Native
44
- let rnColor = processColor(cl);
45
- // 1. Neither Skia or RN could parse the color
46
- if (typeof rnColor !== "number") {
47
- console.warn("Skia couldn't parse the following color " + cl);
48
- return BLACK;
49
- // 2. The color is recognized by RN but not by Skia
50
- } else {
51
- console.warn(
52
- "Skia couldn't parse the following color " +
53
- cl +
54
- ". The color parsing was delegated to React Native. Please file on issue with that color."
55
- );
56
- // On android we need to move the alpha byte to the start of the structure
57
- if (Platform.OS === "android") {
58
- rnColor = rnColor >>> 0;
59
- const a = (rnColor >> 24) & 0xff;
60
- const r = (rnColor >> 16) & 0xff;
61
- const g = (rnColor >> 8) & 0xff;
62
- const b = rnColor & 0xff;
63
- rnColor = ((a << 24) | (r << 16) | (g << 8) | b) >>> 0;
64
- }
65
- return rnColor;
66
- }
67
- }
68
- };
69
-
70
- /**
71
- * Declares the interface for the native Skia API
72
- */
73
- export interface Skia {
74
- Point: (x: number, y: number) => SkPoint;
75
- XYWHRect: (x: number, y: number, width: number, height: number) => SkRect;
76
- RRectXY: (rect: SkRect, rx: number, ry: number) => SkRRect;
77
- RSXform: (scos: number, ssin: number, tx: number, ty: number) => SkRSXform;
78
- Color: (color: Color) => SkColor;
79
- parseColorString: (color: string) => SkColor | undefined;
80
- ContourMeasureIter: (
81
- path: SkPath,
82
- forceClosed: boolean,
83
- resScale: number
84
- ) => SkContourMeasureIter;
85
- Paint: () => SkPaint;
86
- PictureRecorder: () => SkPictureRecorder;
87
- Picture: PictureFactory;
88
- Path: PathFactory;
89
- Matrix: () => SkMatrix;
90
- ColorFilter: ColorFilterFactory;
91
- Font: (typeface?: SkTypeface, size?: number) => SkFont;
92
- Typeface: TypefaceFactory;
93
- MaskFilter: MaskFilterFactory;
94
- RuntimeEffect: RuntimeEffectFactory;
95
- ImageFilter: ImageFilterFactory;
96
- Shader: ShaderFactory;
97
- PathEffect: PathEffectFactory;
98
- /**
99
- * Returns an Vertices based on the given positions and optional parameters.
100
- * See SkVertices.h (especially the Builder) for more details.
101
- * @param mode
102
- * @param positions
103
- * @param textureCoordinates
104
- * @param colors - either a list of int colors or a flattened color array.
105
- * @param indices
106
- * @param isVolatile
107
- */
108
- MakeVertices(
109
- mode: VertexMode,
110
- positions: SkPoint[],
111
- textureCoordinates?: SkPoint[] | null,
112
- colors?: SkColor[],
113
- indices?: number[] | null,
114
- isVolatile?: boolean
115
- ): SkVertices;
116
- Data: DataFactory;
117
- Image: ImageFactory;
118
- SVG: SVGFactory;
119
- FontMgr: FontMgrFactory;
120
- TextBlob: TextBlobFactory;
121
- Surface: SurfaceFactory;
122
- }
3
+ import type { SkiaApi as SkSkiaApi } from "./SkiaApi";
123
4
 
124
5
  /**
125
6
  * Declares the SkiaApi as an available object in the global scope
126
7
  */
127
8
  declare global {
128
- var SkiaApi: Skia;
9
+ var SkiaApi: SkSkiaApi;
129
10
  }
130
11
 
131
12
  /**
@@ -149,15 +30,14 @@ export const Skia = {
149
30
  Point: SkiaApi.Point,
150
31
  XYWHRect: SkiaApi.XYWHRect,
151
32
  RRectXY: SkiaApi.RRectXY,
33
+ RuntimeShaderBuilder: SkiaApi.RuntimeShaderBuilder,
152
34
  Paint: SkiaApi.Paint,
153
35
  PictureRecorder: SkiaApi.PictureRecorder,
154
36
  Picture: SkiaApi.Picture,
155
37
  Path: SkiaApi.Path,
156
38
  ColorFilter: SkiaApi.ColorFilter,
157
39
  ContourMeasureIter: SkiaApi.ContourMeasureIter,
158
- // Here are constructors for data types which are represented as typed arrays in CanvasKit
159
- Color: SkiaColor,
160
- parseColorString: SkiaApi.parseColorString,
40
+ Color: SkiaApi.Color,
161
41
  RSXform: SkiaApi.RSXform,
162
42
  // For the following methods the factory symmetry is broken to be comptatible with CanvasKit
163
43
  MakeSurface: SkiaApi.Surface.Make,
@@ -165,5 +45,3 @@ export const Skia = {
165
45
  MakeImage: SkiaApi.Image.MakeImage,
166
46
  MakeVertices: SkiaApi.MakeVertices,
167
47
  };
168
-
169
- const BLACK = Skia.parseColorString("black")!;
@@ -0,0 +1,86 @@
1
+ import type { ImageFilterFactory } from "./ImageFilter";
2
+ import type { PathFactory } from "./Path";
3
+ import type { ColorFilterFactory } from "./ColorFilter";
4
+ import type { SkFont } from "./Font";
5
+ import type { SkTypeface, TypefaceFactory } from "./Typeface";
6
+ import type { ImageFactory } from "./Image";
7
+ import type { MaskFilterFactory } from "./MaskFilter";
8
+ import type { SkPaint } from "./Paint";
9
+ import type { SkRect } from "./Rect";
10
+ import type { SkRRect } from "./RRect";
11
+ import type { RuntimeEffectFactory } from "./RuntimeEffect";
12
+ import type { ShaderFactory } from "./Shader";
13
+ import type { SkMatrix } from "./Matrix";
14
+ import type { PathEffectFactory } from "./PathEffect";
15
+ import type { SkPoint } from "./Point";
16
+ import type { SkVertices, VertexMode } from "./Vertices/Vertices";
17
+ import type { DataFactory } from "./Data";
18
+ import type { SVGFactory } from "./SVG";
19
+ import type { TextBlobFactory } from "./TextBlob";
20
+ import type { FontMgrFactory } from "./FontMgr/FontMgrFactory";
21
+ import type { SurfaceFactory } from "./Surface";
22
+ import "./NativeSetup";
23
+ import type { SkRSXform } from "./RSXform";
24
+ import type { SkPath } from "./Path/Path";
25
+ import type { SkContourMeasureIter } from "./ContourMeasure";
26
+ import type { PictureFactory, SkPictureRecorder } from "./Picture";
27
+ import type { Color, SkColor } from "./Color";
28
+ import type {
29
+ SkRuntimeShaderBuilder,
30
+ SkRuntimeEffect,
31
+ } from "./RuntimeEffect/RuntimeEffect";
32
+
33
+ /**
34
+ * Declares the interface for the native Skia API
35
+ */
36
+ export interface SkiaApi {
37
+ Point: (x: number, y: number) => SkPoint;
38
+ XYWHRect: (x: number, y: number, width: number, height: number) => SkRect;
39
+ RuntimeShaderBuilder: (rt: SkRuntimeEffect) => SkRuntimeShaderBuilder;
40
+ RRectXY: (rect: SkRect, rx: number, ry: number) => SkRRect;
41
+ RSXform: (scos: number, ssin: number, tx: number, ty: number) => SkRSXform;
42
+ Color: (color: Color) => SkColor;
43
+ parseColorString: (color: string) => SkColor | undefined;
44
+ ContourMeasureIter: (
45
+ path: SkPath,
46
+ forceClosed: boolean,
47
+ resScale: number
48
+ ) => SkContourMeasureIter;
49
+ Paint: () => SkPaint;
50
+ PictureRecorder: () => SkPictureRecorder;
51
+ Picture: PictureFactory;
52
+ Path: PathFactory;
53
+ Matrix: () => SkMatrix;
54
+ ColorFilter: ColorFilterFactory;
55
+ Font: (typeface?: SkTypeface, size?: number) => SkFont;
56
+ Typeface: TypefaceFactory;
57
+ MaskFilter: MaskFilterFactory;
58
+ RuntimeEffect: RuntimeEffectFactory;
59
+ ImageFilter: ImageFilterFactory;
60
+ Shader: ShaderFactory;
61
+ PathEffect: PathEffectFactory;
62
+ /**
63
+ * Returns an Vertices based on the given positions and optional parameters.
64
+ * See SkVertices.h (especially the Builder) for more details.
65
+ * @param mode
66
+ * @param positions
67
+ * @param textureCoordinates
68
+ * @param colors - either a list of int colors or a flattened color array.
69
+ * @param indices
70
+ * @param isVolatile
71
+ */
72
+ MakeVertices(
73
+ mode: VertexMode,
74
+ positions: SkPoint[],
75
+ textureCoordinates?: SkPoint[] | null,
76
+ colors?: SkColor[],
77
+ indices?: number[] | null,
78
+ isVolatile?: boolean
79
+ ): SkVertices;
80
+ Data: DataFactory;
81
+ Image: ImageFactory;
82
+ SVG: SVGFactory;
83
+ FontMgr: FontMgrFactory;
84
+ TextBlob: TextBlobFactory;
85
+ Surface: SurfaceFactory;
86
+ }
@@ -3,7 +3,7 @@ import type { SkCanvas } from "../Canvas";
3
3
  import type { SkJSIInstance } from "../JsiInstance";
4
4
  import type { SkRect } from "../Rect";
5
5
 
6
- export interface ISurface extends SkJSIInstance<"Surface"> {
6
+ export interface SkSurface extends SkJSIInstance<"Surface"> {
7
7
  /** Returns Canvas that draws into the surface. Subsequent calls return the
8
8
  same Canvas. Canvas returned is managed and owned by Surface, and is
9
9
  deleted when Surface is deleted.
@@ -1,4 +1,4 @@
1
- import type { ISurface } from "./Surface";
1
+ import type { SkSurface } from "./Surface";
2
2
 
3
3
  export interface SurfaceFactory {
4
4
  /**
@@ -8,5 +8,5 @@ export interface SurfaceFactory {
8
8
  * @param width - number of pixels of the width of the drawable area.
9
9
  * @param height - number of pixels of the height of the drawable area.
10
10
  */
11
- Make: (width: number, height: number) => ISurface | null;
11
+ Make: (width: number, height: number) => SkSurface | null;
12
12
  }
package/src/values/api.ts CHANGED
@@ -1,49 +1,10 @@
1
- import type {
2
- SkiaAnimation,
3
- AnimationState,
4
- SkiaReadonlyValue,
5
- SkiaClockValue,
6
- SkiaValue,
7
- } from "./types";
8
-
9
- export interface ISkiaValueApi {
10
- /**
11
- * Creates a new value that holds the initial value and that
12
- * can be changed.
13
- */
14
- createValue: <T>(initialValue: T) => SkiaValue<T>;
15
- /**
16
- * Creates a derived value. This is a calculated value that returns the result of
17
- * a function that is called with the values of the dependencies.
18
- */
19
- createDerivedValue: <R>(
20
- cb: () => R,
21
- values: Array<SkiaReadonlyValue<unknown>>
22
- ) => SkiaReadonlyValue<R>;
23
- /**
24
- * Creates a clock value where the value is the number of milliseconds elapsed
25
- * since the clock was created
26
- */
27
- createClockValue: () => SkiaClockValue;
28
- /**
29
- * Creates an animation that is driven from a clock and updated every frame.
30
- * @param cb Callback to calculate next value from time.
31
- * @returns An animation object that can control a value.
32
- */
33
- createAnimation: <S extends AnimationState = AnimationState>(
34
- cb: (t: number, state: S | undefined) => S
35
- ) => SkiaAnimation;
36
- }
1
+ import type { ISkiaValueApi } from "./types";
37
2
 
38
3
  declare global {
39
4
  var SkiaValueApi: ISkiaValueApi;
40
5
  }
41
6
 
42
- export const ValueApi: ISkiaValueApi = {
43
- createValue: global.SkiaValueApi.createValue,
44
- createDerivedValue: global.SkiaValueApi.createDerivedValue,
45
- createClockValue: global.SkiaValueApi.createClockValue,
46
- createAnimation: global.SkiaValueApi.createAnimation,
47
- };
7
+ const { SkiaValueApi } = global;
8
+ export const ValueApi = SkiaValueApi;
48
9
 
49
10
  export const { createValue, createDerivedValue } = ValueApi;
@@ -0,0 +1,5 @@
1
+ import { ValueApi as ValueApiWeb } from "./web";
2
+
3
+ export const ValueApi = ValueApiWeb;
4
+
5
+ export const { createValue, createDerivedValue } = ValueApi;
@@ -1,4 +1,3 @@
1
1
  export * from "./types";
2
2
  export * from "./hooks";
3
- export * from "./animation";
4
3
  export * from "./api";
@@ -30,7 +30,7 @@ export interface SkiaClockValue extends SkiaReadonlyValue<number> {
30
30
  stop: () => void;
31
31
  }
32
32
 
33
- export interface SkiaAnimation {
33
+ export interface SkiaAnimation extends SkiaClockValue {
34
34
  cancel: () => void;
35
35
  }
36
36
 
@@ -38,3 +38,32 @@ export interface AnimationState {
38
38
  current: number;
39
39
  finished: boolean;
40
40
  }
41
+
42
+ export interface ISkiaValueApi {
43
+ /**
44
+ * Creates a new value that holds the initial value and that
45
+ * can be changed.
46
+ */
47
+ createValue: <T>(initialValue: T) => SkiaValue<T>;
48
+ /**
49
+ * Creates a derived value. This is a calculated value that returns the result of
50
+ * a function that is called with the values of the dependencies.
51
+ */
52
+ createDerivedValue: <R>(
53
+ cb: () => R,
54
+ values: Array<SkiaReadonlyValue<unknown>>
55
+ ) => SkiaReadonlyValue<R>;
56
+ /**
57
+ * Creates a clock value where the value is the number of milliseconds elapsed
58
+ * since the clock was created
59
+ */
60
+ createClockValue: () => SkiaClockValue;
61
+ /**
62
+ * Creates an animation that is driven from a clock and updated every frame.
63
+ * @param cb Callback to calculate next value from time.
64
+ * @returns An animation object that can control a value.
65
+ */
66
+ createAnimation: <S extends AnimationState = AnimationState>(
67
+ cb: (t: number, state: S | undefined) => S
68
+ ) => SkiaAnimation;
69
+ }
@@ -0,0 +1,33 @@
1
+ import type { AnimationState, SkiaAnimation } from "../types";
2
+
3
+ import { RNSkClockValue } from "./RNSkClockValue";
4
+
5
+ export class RNSkAnimation<S extends AnimationState = AnimationState>
6
+ extends RNSkClockValue
7
+ implements SkiaAnimation
8
+ {
9
+ constructor(
10
+ callback: (t: number, state: S | undefined) => S,
11
+ raf: (callback: (time: number) => void) => number
12
+ ) {
13
+ super(raf);
14
+ this._callback = callback;
15
+ }
16
+
17
+ private _callback: (t: number, state: S | undefined) => S;
18
+ private _animationState: S | undefined = undefined;
19
+
20
+ public cancel() {
21
+ this.stop();
22
+ }
23
+
24
+ protected update(nextValue: number): void {
25
+ if (this._callback) {
26
+ this._animationState = this._callback(nextValue, this._animationState);
27
+ if (this._animationState?.finished) {
28
+ this.stop();
29
+ }
30
+ }
31
+ super.update(this._animationState?.current ?? nextValue);
32
+ }
33
+ }
@@ -0,0 +1,58 @@
1
+ import type { SkiaClockValue } from "../types";
2
+
3
+ import { RNSkReadonlyValue } from "./RNSkReadonlyValue";
4
+
5
+ enum RNSkClockState {
6
+ NotStarted = 0,
7
+ Running = 1,
8
+ Stopped = 2,
9
+ }
10
+
11
+ export class RNSkClockValue
12
+ extends RNSkReadonlyValue<number>
13
+ implements SkiaClockValue
14
+ {
15
+ constructor(raf: (callback: (time: number) => void) => number) {
16
+ super(0);
17
+ this._raf = raf;
18
+ this.update(0);
19
+ }
20
+
21
+ private _raf: (callback: (time: number) => void) => number;
22
+ private _start: number | undefined;
23
+ private _stop: number | undefined;
24
+ private _state: RNSkClockState = RNSkClockState.NotStarted;
25
+
26
+ private notifyUpdate = (_: number) => {
27
+ if (this._state === RNSkClockState.Running) {
28
+ const now = Date.now();
29
+ const deltaFromStart = now - this._start!;
30
+ this.tick(deltaFromStart);
31
+ this._raf(this.notifyUpdate);
32
+ }
33
+ };
34
+
35
+ protected tick(value: number) {
36
+ this.update(value);
37
+ }
38
+
39
+ public start() {
40
+ if (this._state === RNSkClockState.NotStarted) {
41
+ this._start = Date.now();
42
+ this._stop = this._start;
43
+ }
44
+ // Subtract pause time from start
45
+ const timeSinceStop = Date.now() - this._stop!;
46
+ this._start! += timeSinceStop;
47
+
48
+ this._state = RNSkClockState.Running;
49
+ this._raf(this.notifyUpdate);
50
+ }
51
+
52
+ public stop() {
53
+ if (this._state === RNSkClockState.Running) {
54
+ this._state = RNSkClockState.Stopped;
55
+ this._stop = Date.now();
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,38 @@
1
+ import type { DependencyList } from "react";
2
+
3
+ import { RNSkReadonlyValue } from "./RNSkReadonlyValue";
4
+
5
+ export class RNSkDerivedValue<T> extends RNSkReadonlyValue<T> {
6
+ constructor(callback: () => T, dependencies: DependencyList) {
7
+ // Initialize dependencies - we can't call this yet, since
8
+ // super if not called and it requires a start value to be set.
9
+ const unsubscribers: Array<() => void> = [];
10
+ const notifyUpdateRef: { current: (() => void) | undefined } = {
11
+ current: undefined,
12
+ };
13
+ dependencies.forEach((dep) => {
14
+ if ("__typename__" in dep && "addListener" in dep) {
15
+ unsubscribers.push(
16
+ (dep as RNSkReadonlyValue<unknown>).addListener(() =>
17
+ notifyUpdateRef.current?.()
18
+ )
19
+ );
20
+ }
21
+ });
22
+ super(callback());
23
+ this._unsubscribers = unsubscribers;
24
+ notifyUpdateRef.current = this.dependecyUpdated.bind(this);
25
+ this._callback = callback;
26
+ }
27
+
28
+ private dependecyUpdated() {
29
+ this.update(this._callback());
30
+ }
31
+
32
+ private _callback: () => T;
33
+ private _unsubscribers: Array<() => void>;
34
+
35
+ public unsubscribe() {
36
+ this._unsubscribers.forEach((unsubscribe) => unsubscribe());
37
+ }
38
+ }
@@ -0,0 +1,32 @@
1
+ import type { SkiaReadonlyValue } from "../types";
2
+
3
+ export class RNSkReadonlyValue<T> implements SkiaReadonlyValue<T> {
4
+ constructor(value: T) {
5
+ this._current = value;
6
+ }
7
+
8
+ private _current: T;
9
+ private _listeners: Array<(value: T) => void> = [];
10
+
11
+ private notifyListeners(): void {
12
+ this._listeners.forEach((cb) => cb(this._current));
13
+ }
14
+
15
+ protected update(nextValue: T): void {
16
+ this._current = nextValue;
17
+ this.notifyListeners();
18
+ }
19
+
20
+ public readonly __typename__ = "RNSkValue";
21
+
22
+ public get current(): T {
23
+ return this._current;
24
+ }
25
+
26
+ public addListener(cb: (value: T) => void) {
27
+ this._listeners.push(cb);
28
+ return () => {
29
+ this._listeners.splice(this._listeners.indexOf(cb), 1);
30
+ };
31
+ }
32
+ }
@@ -0,0 +1,57 @@
1
+ import type { SkiaAnimation, SkiaValue } from "../types";
2
+
3
+ import { RNSkReadonlyValue } from "./RNSkReadonlyValue";
4
+
5
+ export class RNSkValue<T> extends RNSkReadonlyValue<T> implements SkiaValue<T> {
6
+ constructor(value: T) {
7
+ super(value);
8
+ this._unsubscribe = undefined;
9
+ }
10
+
11
+ public set current(value: T) {
12
+ this.update(value);
13
+ }
14
+
15
+ public get current(): T {
16
+ return super.current;
17
+ }
18
+
19
+ private _unsubscribe: (() => void) | undefined;
20
+
21
+ private unsubscribe() {
22
+ if (this._unsubscribe) {
23
+ this._unsubscribe();
24
+ this._unsubscribe = undefined;
25
+ }
26
+ if (this._animation) {
27
+ this._animation.cancel();
28
+ this._animation = undefined;
29
+ }
30
+ }
31
+
32
+ private subscribe(animation: SkiaAnimation | undefined) {
33
+ this.unsubscribe();
34
+ if (animation) {
35
+ this._animation = animation;
36
+ this._unsubscribe = animation.addListener(
37
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
38
+ // @ts-ignore
39
+ this.animationDidUpdate.bind(this)
40
+ );
41
+ this._animation.start();
42
+ }
43
+ }
44
+
45
+ private animationDidUpdate(value: T) {
46
+ this.update(value);
47
+ }
48
+
49
+ private _animation: SkiaAnimation | undefined;
50
+ public get animation(): SkiaAnimation | undefined {
51
+ return this._animation;
52
+ }
53
+
54
+ public set animation(v: SkiaAnimation | undefined) {
55
+ this.subscribe(v);
56
+ }
57
+ }
@@ -0,0 +1,21 @@
1
+ import { RNSkAnimation } from "../RNSkAnimation";
2
+ import { RNSkValue } from "../RNSkValue";
3
+
4
+ describe("RNSkAnimation", () => {
5
+ it("should update a value", () => {
6
+ const valueToTest = new RNSkValue(0);
7
+ const raf = (cb: (t: number) => void) => {
8
+ cb(1);
9
+ return 1;
10
+ };
11
+ valueToTest.animation = new RNSkAnimation(
12
+ () => ({
13
+ finished: true,
14
+ current: 1,
15
+ }),
16
+ raf
17
+ );
18
+ valueToTest.animation.stop();
19
+ expect(valueToTest.current).toBe(1);
20
+ });
21
+ });
@@ -0,0 +1,15 @@
1
+ import { RNSkDerivedValue } from "../RNSkDerivedValue";
2
+ import { RNSkValue } from "../RNSkValue";
3
+
4
+ describe("RNSkDerivedValue", () => {
5
+ it("should update when dependency changes", () => {
6
+ const dependency = new RNSkValue(10);
7
+ const derived = new RNSkDerivedValue(
8
+ () => 10 * dependency.current,
9
+ [dependency]
10
+ );
11
+ expect(derived.current).toBe(100);
12
+ dependency.current = 20;
13
+ expect(derived.current).toBe(200);
14
+ });
15
+ });
@@ -0,0 +1,8 @@
1
+ import { RNSkReadonlyValue } from "../RNSkReadonlyValue";
2
+
3
+ describe("RNSkReadonlyValue", () => {
4
+ it("should expose __typename as RNSkValue", () => {
5
+ const valueToTest = new RNSkReadonlyValue(100);
6
+ expect(valueToTest.__typename__).toEqual("RNSkValue");
7
+ });
8
+ });
@@ -0,0 +1,11 @@
1
+ import { RNSkValue } from "../RNSkValue";
2
+
3
+ describe("RNSkValue", () => {
4
+ it("should notify on change", () => {
5
+ const valueToTest = new RNSkValue(100);
6
+ const spy = jest.fn();
7
+ valueToTest.addListener(spy);
8
+ valueToTest.current = 200;
9
+ expect(spy).toHaveBeenCalledWith(200);
10
+ });
11
+ });