@shopify/react-native-skia 0.1.123 → 0.1.126

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 (423) hide show
  1. package/android/CMakeLists.txt +3 -0
  2. package/android/build.gradle +1 -1
  3. package/android/cpp/rnskia-android/RNSkDrawViewImpl.cpp +5 -5
  4. package/android/cpp/rnskia-android/RNSkDrawViewImpl.h +4 -4
  5. package/cpp/api/JsiSkApi.h +3 -1
  6. package/cpp/api/JsiSkCanvas.h +1 -1
  7. package/cpp/api/JsiSkColor.h +41 -7
  8. package/cpp/api/JsiSkColorFilterFactory.h +2 -1
  9. package/cpp/api/JsiSkImageFilter.h +0 -2
  10. package/cpp/api/JsiSkImageFilterFactory.h +37 -17
  11. package/cpp/api/JsiSkMatrix.h +44 -2
  12. package/cpp/api/JsiSkPaint.h +4 -7
  13. package/cpp/api/JsiSkRuntimeEffect.h +7 -0
  14. package/cpp/api/JsiSkRuntimeEffectFactory.h +3 -2
  15. package/cpp/api/JsiSkRuntimeShaderBuilder.h +70 -0
  16. package/cpp/api/JsiSkShaderFactory.h +2 -2
  17. package/cpp/api/JsiSkVertices.h +1 -1
  18. package/cpp/api/third_party/CSSColorParser.cpp +194 -0
  19. package/cpp/api/third_party/CSSColorParser.h +1 -191
  20. package/cpp/jsi/JsiSimpleValueWrapper.h +108 -0
  21. package/cpp/rnskia/RNSkAnimation.h +0 -2
  22. package/cpp/rnskia/RNSkDrawView.cpp +10 -13
  23. package/cpp/rnskia/RNSkDrawView.h +2 -2
  24. package/cpp/rnskia/RNSkValueApi.h +6 -2
  25. package/cpp/rnskia/values/RNSkClockValue.h +2 -2
  26. package/cpp/rnskia/values/RNSkDerivedValue.h +12 -5
  27. package/cpp/rnskia/values/RNSkReadonlyValue.h +14 -12
  28. package/cpp/rnskia/values/RNSkValue.h +8 -3
  29. package/ios/RNSkia-iOS/PlatformContext.h +30 -4
  30. package/ios/RNSkia-iOS/RNSkDrawViewImpl.h +4 -4
  31. package/ios/RNSkia-iOS/SkiaDrawView.mm +9 -13
  32. package/lib/commonjs/{values/animation → animation}/decay/decay.js +0 -0
  33. package/lib/commonjs/{values/animation → animation}/decay/decay.js.map +0 -0
  34. package/lib/commonjs/{values/animation → animation}/decay/index.js +0 -0
  35. package/lib/commonjs/{values/animation → animation}/decay/index.js.map +0 -0
  36. package/lib/commonjs/{values/animation → animation}/decay/runDecay.js +1 -1
  37. package/lib/commonjs/animation/decay/runDecay.js.map +1 -0
  38. package/lib/commonjs/{values/animation → animation}/decay/types.js +0 -0
  39. package/lib/commonjs/{values/animation → animation}/decay/types.js.map +0 -0
  40. package/lib/commonjs/{values/animation → animation}/functions/index.js +0 -0
  41. package/lib/commonjs/{values/animation → animation}/functions/index.js.map +0 -0
  42. package/lib/commonjs/animation/functions/interpolate.js +141 -0
  43. package/lib/commonjs/animation/functions/interpolate.js.map +1 -0
  44. package/lib/commonjs/animation/functions/interpolateColors.js +39 -0
  45. package/lib/commonjs/animation/functions/interpolateColors.js.map +1 -0
  46. package/lib/commonjs/{values/animation → animation}/index.js +0 -0
  47. package/lib/commonjs/{values/animation → animation}/index.js.map +0 -0
  48. package/lib/commonjs/{values/animation → animation}/spring/Spring.js +0 -0
  49. package/lib/commonjs/{values/animation → animation}/spring/Spring.js.map +0 -0
  50. package/lib/commonjs/{values/animation → animation}/spring/functions/index.js +0 -0
  51. package/lib/commonjs/{values/animation → animation}/spring/functions/index.js.map +0 -0
  52. package/lib/commonjs/{values/animation → animation}/spring/functions/spring.js +0 -0
  53. package/lib/commonjs/{values/animation → animation}/spring/functions/spring.js.map +0 -0
  54. package/lib/commonjs/{values/animation → animation}/spring/index.js +0 -0
  55. package/lib/commonjs/{values/animation → animation}/spring/index.js.map +0 -0
  56. package/lib/commonjs/{values/animation → animation}/spring/runSpring.js +0 -0
  57. package/lib/commonjs/animation/spring/runSpring.js.map +1 -0
  58. package/lib/commonjs/{values/animation → animation}/spring/types.js +0 -0
  59. package/lib/commonjs/{values/animation → animation}/spring/types.js.map +0 -0
  60. package/lib/commonjs/{values/animation → animation}/spring/useSpring.js +0 -0
  61. package/lib/commonjs/animation/spring/useSpring.js.map +1 -0
  62. package/lib/commonjs/{values/animation → animation}/timing/Easing.js +0 -0
  63. package/lib/commonjs/{values/animation → animation}/timing/Easing.js.map +0 -0
  64. package/lib/commonjs/{values/animation → animation}/timing/createTiming.js +1 -1
  65. package/lib/commonjs/animation/timing/createTiming.js.map +1 -0
  66. package/lib/commonjs/{values/animation → animation}/timing/functions/bezier.js +0 -0
  67. package/lib/commonjs/{values/animation → animation}/timing/functions/bezier.js.map +0 -0
  68. package/lib/commonjs/{values/animation → animation}/timing/functions/getResolvedParams.js +3 -3
  69. package/lib/commonjs/animation/timing/functions/getResolvedParams.js.map +1 -0
  70. package/lib/commonjs/{values/animation → animation}/timing/functions/index.js +0 -0
  71. package/lib/commonjs/{values/animation → animation}/timing/functions/index.js.map +0 -0
  72. package/lib/commonjs/{values/animation → animation}/timing/functions/timing.js +0 -0
  73. package/lib/commonjs/{values/animation → animation}/timing/functions/timing.js.map +1 -1
  74. package/lib/commonjs/{values/animation → animation}/timing/functions/types.js +0 -0
  75. package/lib/commonjs/{values/animation → animation}/timing/functions/types.js.map +0 -0
  76. package/lib/commonjs/{values/animation → animation}/timing/index.js +0 -0
  77. package/lib/commonjs/{values/animation → animation}/timing/index.js.map +0 -0
  78. package/lib/commonjs/{values/animation → animation}/timing/runTiming.js +0 -0
  79. package/lib/commonjs/animation/timing/runTiming.js.map +1 -0
  80. package/lib/commonjs/{values/animation → animation}/timing/useLoop.js +0 -0
  81. package/lib/commonjs/{values/animation → animation}/timing/useLoop.js.map +0 -0
  82. package/lib/commonjs/{values/animation → animation}/timing/useTiming.js +1 -1
  83. package/lib/commonjs/animation/timing/useTiming.js.map +1 -0
  84. package/lib/commonjs/{values/animation → animation}/types.js +0 -0
  85. package/lib/commonjs/{values/animation → animation}/types.js.map +0 -0
  86. package/lib/commonjs/index.js +13 -0
  87. package/lib/commonjs/index.js.map +1 -1
  88. package/lib/commonjs/renderer/Canvas.js +14 -5
  89. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  90. package/lib/commonjs/renderer/components/colorFilters/BlendColor.js.map +1 -1
  91. package/lib/commonjs/renderer/components/colorFilters/Lerp.js +1 -1
  92. package/lib/commonjs/renderer/components/colorFilters/Lerp.js.map +1 -1
  93. package/lib/commonjs/renderer/components/imageFilters/InnerShadow.js +4 -2
  94. package/lib/commonjs/renderer/components/imageFilters/InnerShadow.js.map +1 -1
  95. package/lib/commonjs/renderer/components/imageFilters/RuntimeShader.js +37 -0
  96. package/lib/commonjs/renderer/components/imageFilters/RuntimeShader.js.map +1 -0
  97. package/lib/commonjs/renderer/components/imageFilters/index.js +13 -0
  98. package/lib/commonjs/renderer/components/imageFilters/index.js.map +1 -1
  99. package/lib/commonjs/renderer/components/shaders/Gradient.js +1 -1
  100. package/lib/commonjs/renderer/components/shaders/Gradient.js.map +1 -1
  101. package/lib/commonjs/renderer/components/shaders/Shader.js +2 -2
  102. package/lib/commonjs/renderer/components/shaders/Shader.js.map +1 -1
  103. package/lib/commonjs/renderer/processors/Circles.js +3 -2
  104. package/lib/commonjs/renderer/processors/Circles.js.map +1 -1
  105. package/lib/commonjs/renderer/processors/Font.js +1 -1
  106. package/lib/commonjs/renderer/processors/Font.js.map +1 -1
  107. package/lib/commonjs/renderer/processors/Rects.js +11 -21
  108. package/lib/commonjs/renderer/processors/Rects.js.map +1 -1
  109. package/lib/commonjs/renderer/processors/math/Matrix3.js +42 -63
  110. package/lib/commonjs/renderer/processors/math/Matrix3.js.map +1 -1
  111. package/lib/commonjs/renderer/processors/math/Vector.js +4 -5
  112. package/lib/commonjs/renderer/processors/math/Vector.js.map +1 -1
  113. package/lib/commonjs/skia/Color.js +14 -38
  114. package/lib/commonjs/skia/Color.js.map +1 -1
  115. package/lib/commonjs/skia/ImageFilter/ImageFilterFactory.js.map +1 -1
  116. package/lib/commonjs/skia/Matrix.js.map +1 -1
  117. package/lib/commonjs/skia/Shader/useShader.js +4 -1
  118. package/lib/commonjs/skia/Shader/useShader.js.map +1 -1
  119. package/lib/commonjs/skia/Skia.js +3 -45
  120. package/lib/commonjs/skia/Skia.js.map +1 -1
  121. package/lib/commonjs/skia/SkiaApi.js +4 -0
  122. package/lib/commonjs/skia/SkiaApi.js.map +1 -0
  123. package/lib/commonjs/values/api.js +4 -6
  124. package/lib/commonjs/values/api.js.map +1 -1
  125. package/lib/commonjs/values/api.web.js +18 -0
  126. package/lib/commonjs/values/api.web.js.map +1 -0
  127. package/lib/commonjs/values/index.js +0 -13
  128. package/lib/commonjs/values/index.js.map +1 -1
  129. package/lib/commonjs/values/web/RNSkAnimation.js +46 -0
  130. package/lib/commonjs/values/web/RNSkAnimation.js.map +1 -0
  131. package/lib/commonjs/values/web/RNSkClockValue.js +75 -0
  132. package/lib/commonjs/values/web/RNSkClockValue.js.map +1 -0
  133. package/lib/commonjs/values/web/RNSkDerivedValue.js +51 -0
  134. package/lib/commonjs/values/web/RNSkDerivedValue.js.map +1 -0
  135. package/lib/commonjs/values/web/RNSkReadonlyValue.js +45 -0
  136. package/lib/commonjs/values/web/RNSkReadonlyValue.js.map +1 -0
  137. package/lib/commonjs/values/web/RNSkValue.js +73 -0
  138. package/lib/commonjs/values/web/RNSkValue.js.map +1 -0
  139. package/lib/commonjs/values/web/api.js +31 -0
  140. package/lib/commonjs/values/web/api.js.map +1 -0
  141. package/lib/commonjs/values/web/index.js +19 -0
  142. package/lib/commonjs/values/web/index.js.map +1 -0
  143. package/lib/commonjs/views/SkiaView.js +13 -10
  144. package/lib/commonjs/views/SkiaView.js.map +1 -1
  145. package/lib/commonjs/views/api.js +11 -0
  146. package/lib/commonjs/views/api.js.map +1 -0
  147. package/lib/commonjs/views/types.js.map +1 -1
  148. package/lib/module/{values/animation → animation}/decay/decay.js +0 -0
  149. package/lib/module/{values/animation → animation}/decay/decay.js.map +0 -0
  150. package/lib/module/{values/animation → animation}/decay/index.js +0 -0
  151. package/lib/module/{values/animation → animation}/decay/index.js.map +0 -0
  152. package/lib/module/{values/animation → animation}/decay/runDecay.js +1 -1
  153. package/lib/module/animation/decay/runDecay.js.map +1 -0
  154. package/lib/module/{values/animation → animation}/decay/types.js +0 -0
  155. package/lib/module/{values/animation → animation}/decay/types.js.map +0 -0
  156. package/lib/module/{values/animation → animation}/functions/index.js +0 -0
  157. package/lib/module/{values/animation → animation}/functions/index.js.map +0 -0
  158. package/lib/module/animation/functions/interpolate.js +132 -0
  159. package/lib/module/animation/functions/interpolate.js.map +1 -0
  160. package/lib/module/animation/functions/interpolateColors.js +23 -0
  161. package/lib/module/animation/functions/interpolateColors.js.map +1 -0
  162. package/lib/module/{values/animation → animation}/index.js +0 -0
  163. package/lib/module/{values/animation → animation}/index.js.map +0 -0
  164. package/lib/module/{values/animation → animation}/spring/Spring.js +0 -0
  165. package/lib/module/{values/animation → animation}/spring/Spring.js.map +0 -0
  166. package/lib/module/{values/animation → animation}/spring/functions/index.js +0 -0
  167. package/lib/module/{values/animation → animation}/spring/functions/index.js.map +0 -0
  168. package/lib/module/{values/animation → animation}/spring/functions/spring.js +0 -0
  169. package/lib/module/{values/animation → animation}/spring/functions/spring.js.map +0 -0
  170. package/lib/module/{values/animation → animation}/spring/index.js +0 -0
  171. package/lib/module/{values/animation → animation}/spring/index.js.map +0 -0
  172. package/lib/module/{values/animation → animation}/spring/runSpring.js +0 -0
  173. package/lib/module/animation/spring/runSpring.js.map +1 -0
  174. package/lib/module/{values/animation → animation}/spring/types.js +0 -0
  175. package/lib/module/{values/animation → animation}/spring/types.js.map +0 -0
  176. package/lib/module/{values/animation → animation}/spring/useSpring.js +0 -0
  177. package/lib/module/animation/spring/useSpring.js.map +1 -0
  178. package/lib/module/{values/animation → animation}/timing/Easing.js +0 -0
  179. package/lib/module/{values/animation → animation}/timing/Easing.js.map +0 -0
  180. package/lib/module/{values/animation → animation}/timing/createTiming.js +1 -1
  181. package/lib/module/animation/timing/createTiming.js.map +1 -0
  182. package/lib/module/{values/animation → animation}/timing/functions/bezier.js +0 -0
  183. package/lib/module/{values/animation → animation}/timing/functions/bezier.js.map +0 -0
  184. package/lib/module/{values/animation → animation}/timing/functions/getResolvedParams.js +3 -3
  185. package/lib/module/animation/timing/functions/getResolvedParams.js.map +1 -0
  186. package/lib/module/{values/animation → animation}/timing/functions/index.js +0 -0
  187. package/lib/module/{values/animation → animation}/timing/functions/index.js.map +0 -0
  188. package/lib/module/{values/animation → animation}/timing/functions/timing.js +0 -0
  189. package/lib/module/{values/animation → animation}/timing/functions/timing.js.map +1 -1
  190. package/lib/module/{values/animation → animation}/timing/functions/types.js +0 -0
  191. package/lib/module/{values/animation → animation}/timing/functions/types.js.map +0 -0
  192. package/lib/module/{values/animation → animation}/timing/index.js +0 -0
  193. package/lib/module/{values/animation → animation}/timing/index.js.map +0 -0
  194. package/lib/module/{values/animation → animation}/timing/runTiming.js +0 -0
  195. package/lib/module/animation/timing/runTiming.js.map +1 -0
  196. package/lib/module/{values/animation → animation}/timing/useLoop.js +0 -0
  197. package/lib/module/{values/animation → animation}/timing/useLoop.js.map +0 -0
  198. package/lib/module/{values/animation → animation}/timing/useTiming.js +1 -1
  199. package/lib/module/animation/timing/useTiming.js.map +1 -0
  200. package/lib/module/{values/animation → animation}/types.js +0 -0
  201. package/lib/module/{values/animation → animation}/types.js.map +0 -0
  202. package/lib/module/index.js +1 -0
  203. package/lib/module/index.js.map +1 -1
  204. package/lib/module/renderer/Canvas.js +10 -4
  205. package/lib/module/renderer/Canvas.js.map +1 -1
  206. package/lib/module/renderer/components/colorFilters/BlendColor.js.map +1 -1
  207. package/lib/module/renderer/components/colorFilters/Lerp.js +1 -1
  208. package/lib/module/renderer/components/colorFilters/Lerp.js.map +1 -1
  209. package/lib/module/renderer/components/imageFilters/InnerShadow.js +3 -2
  210. package/lib/module/renderer/components/imageFilters/InnerShadow.js.map +1 -1
  211. package/lib/module/renderer/components/imageFilters/RuntimeShader.js +19 -0
  212. package/lib/module/renderer/components/imageFilters/RuntimeShader.js.map +1 -0
  213. package/lib/module/renderer/components/imageFilters/index.js +1 -0
  214. package/lib/module/renderer/components/imageFilters/index.js.map +1 -1
  215. package/lib/module/renderer/components/shaders/Gradient.js +2 -2
  216. package/lib/module/renderer/components/shaders/Gradient.js.map +1 -1
  217. package/lib/module/renderer/components/shaders/Shader.js +3 -2
  218. package/lib/module/renderer/components/shaders/Shader.js.map +1 -1
  219. package/lib/module/renderer/processors/Circles.js +3 -2
  220. package/lib/module/renderer/processors/Circles.js.map +1 -1
  221. package/lib/module/renderer/processors/Font.js +1 -1
  222. package/lib/module/renderer/processors/Font.js.map +1 -1
  223. package/lib/module/renderer/processors/Rects.js +9 -21
  224. package/lib/module/renderer/processors/Rects.js.map +1 -1
  225. package/lib/module/renderer/processors/math/Matrix3.js +52 -72
  226. package/lib/module/renderer/processors/math/Matrix3.js.map +1 -1
  227. package/lib/module/renderer/processors/math/Vector.js +3 -5
  228. package/lib/module/renderer/processors/math/Vector.js.map +1 -1
  229. package/lib/module/skia/Color.js +9 -25
  230. package/lib/module/skia/Color.js.map +1 -1
  231. package/lib/module/skia/ImageFilter/ImageFilterFactory.js.map +1 -1
  232. package/lib/module/skia/Matrix.js.map +1 -1
  233. package/lib/module/skia/Shader/useShader.js +4 -1
  234. package/lib/module/skia/Shader/useShader.js.map +1 -1
  235. package/lib/module/skia/Skia.js +2 -46
  236. package/lib/module/skia/Skia.js.map +1 -1
  237. package/lib/module/skia/SkiaApi.js +2 -0
  238. package/lib/module/skia/SkiaApi.js.map +1 -0
  239. package/lib/module/values/api.js +4 -6
  240. package/lib/module/values/api.js.map +1 -1
  241. package/lib/module/values/api.web.js +7 -0
  242. package/lib/module/values/api.web.js.map +1 -0
  243. package/lib/module/values/index.js +0 -1
  244. package/lib/module/values/index.js.map +1 -1
  245. package/lib/module/values/web/RNSkAnimation.js +36 -0
  246. package/lib/module/values/web/RNSkAnimation.js.map +1 -0
  247. package/lib/module/values/web/RNSkClockValue.js +65 -0
  248. package/lib/module/values/web/RNSkClockValue.js.map +1 -0
  249. package/lib/module/values/web/RNSkDerivedValue.js +41 -0
  250. package/lib/module/values/web/RNSkDerivedValue.js.map +1 -0
  251. package/lib/module/values/web/RNSkReadonlyValue.js +36 -0
  252. package/lib/module/values/web/RNSkReadonlyValue.js.map +1 -0
  253. package/lib/module/values/web/RNSkValue.js +63 -0
  254. package/lib/module/values/web/RNSkValue.js.map +1 -0
  255. package/lib/module/values/web/api.js +19 -0
  256. package/lib/module/values/web/api.js.map +1 -0
  257. package/lib/module/values/web/index.js +2 -0
  258. package/lib/module/values/web/index.js.map +1 -0
  259. package/lib/module/views/SkiaView.js +1 -3
  260. package/lib/module/views/SkiaView.js.map +1 -1
  261. package/lib/module/views/api.js +4 -0
  262. package/lib/module/views/api.js.map +1 -0
  263. package/lib/module/views/types.js.map +1 -1
  264. package/lib/typescript/src/{values/animation → animation}/decay/decay.d.ts +0 -0
  265. package/lib/typescript/src/{values/animation → animation}/decay/index.d.ts +0 -0
  266. package/lib/typescript/src/{values/animation → animation}/decay/runDecay.d.ts +2 -2
  267. package/lib/typescript/src/{values/animation → animation}/decay/types.d.ts +1 -1
  268. package/lib/typescript/src/{values/animation → animation}/functions/index.d.ts +0 -0
  269. package/lib/typescript/src/animation/functions/interpolate.d.ts +11 -0
  270. package/lib/typescript/src/animation/functions/interpolateColors.d.ts +3 -0
  271. package/lib/typescript/src/{values/animation → animation}/index.d.ts +0 -0
  272. package/lib/typescript/src/{values/animation → animation}/spring/Spring.d.ts +0 -0
  273. package/lib/typescript/src/{values/animation → animation}/spring/functions/index.d.ts +0 -0
  274. package/lib/typescript/src/{values/animation → animation}/spring/functions/spring.d.ts +0 -0
  275. package/lib/typescript/src/{values/animation → animation}/spring/index.d.ts +0 -0
  276. package/lib/typescript/src/{values/animation → animation}/spring/runSpring.d.ts +1 -1
  277. package/lib/typescript/src/{values/animation → animation}/spring/types.d.ts +0 -0
  278. package/lib/typescript/src/{values/animation → animation}/spring/useSpring.d.ts +1 -1
  279. package/lib/typescript/src/{values/animation → animation}/timing/Easing.d.ts +0 -0
  280. package/lib/typescript/src/{values/animation → animation}/timing/createTiming.d.ts +2 -2
  281. package/lib/typescript/src/{values/animation → animation}/timing/functions/bezier.d.ts +0 -0
  282. package/lib/typescript/src/{values/animation → animation}/timing/functions/getResolvedParams.d.ts +0 -0
  283. package/lib/typescript/src/{values/animation → animation}/timing/functions/index.d.ts +0 -0
  284. package/lib/typescript/src/{values/animation → animation}/timing/functions/timing.d.ts +1 -1
  285. package/lib/typescript/src/{values/animation → animation}/timing/functions/types.d.ts +0 -0
  286. package/lib/typescript/src/{values/animation → animation}/timing/index.d.ts +0 -0
  287. package/lib/typescript/src/{values/animation → animation}/timing/runTiming.d.ts +1 -1
  288. package/lib/typescript/src/{values/animation → animation}/timing/useLoop.d.ts +0 -0
  289. package/lib/typescript/src/{values/animation → animation}/timing/useTiming.d.ts +1 -1
  290. package/lib/typescript/src/{values/animation → animation}/types.d.ts +5 -5
  291. package/lib/typescript/src/index.d.ts +1 -0
  292. package/lib/typescript/src/renderer/Canvas.d.ts +6 -0
  293. package/lib/typescript/src/renderer/components/colorFilters/BlendColor.d.ts +1 -1
  294. package/lib/typescript/src/renderer/components/imageFilters/RuntimeShader.d.ts +7 -0
  295. package/lib/typescript/src/renderer/components/imageFilters/index.d.ts +1 -0
  296. package/lib/typescript/src/renderer/components/shaders/Gradient.d.ts +1 -1
  297. package/lib/typescript/src/renderer/components/shaders/Shader.d.ts +2 -2
  298. package/lib/typescript/src/renderer/components/shapes/Circle.d.ts +1 -4
  299. package/lib/typescript/src/renderer/processors/Rects.d.ts +9 -41
  300. package/lib/typescript/src/renderer/processors/math/Matrix3.d.ts +1 -5
  301. package/lib/typescript/src/renderer/processors/math/Vector.d.ts +5 -17
  302. package/lib/typescript/src/skia/Color.d.ts +8 -9
  303. package/lib/typescript/src/skia/ImageFilter/ImageFilterFactory.d.ts +16 -0
  304. package/lib/typescript/src/skia/Matrix.d.ts +7 -1
  305. package/lib/typescript/src/skia/RuntimeEffect/RuntimeEffect.d.ts +2 -1
  306. package/lib/typescript/src/skia/RuntimeEffect/RuntimeEffectFactory.d.ts +2 -2
  307. package/lib/typescript/src/skia/Shader/useShader.d.ts +1 -1
  308. package/lib/typescript/src/skia/Skia.d.ts +28 -95
  309. package/lib/typescript/src/skia/SkiaApi.d.ts +71 -0
  310. package/lib/typescript/src/skia/Surface/Surface.d.ts +1 -1
  311. package/lib/typescript/src/skia/Surface/SurfaceFactory.d.ts +2 -2
  312. package/lib/typescript/src/values/api.d.ts +2 -25
  313. package/lib/typescript/src/values/api.web.d.ts +2 -0
  314. package/lib/typescript/src/values/index.d.ts +0 -1
  315. package/lib/typescript/src/values/types.d.ts +24 -1
  316. package/lib/typescript/src/values/web/RNSkAnimation.d.ts +9 -0
  317. package/lib/typescript/src/values/web/RNSkClockValue.d.ts +13 -0
  318. package/lib/typescript/src/values/web/RNSkDerivedValue.d.ts +9 -0
  319. package/lib/typescript/src/values/web/RNSkReadonlyValue.d.ts +11 -0
  320. package/lib/typescript/src/values/web/RNSkValue.d.ts +14 -0
  321. package/lib/typescript/src/values/web/api.d.ts +2 -0
  322. package/lib/typescript/src/values/web/index.d.ts +1 -0
  323. package/lib/typescript/src/views/SkiaView.d.ts +3 -36
  324. package/lib/typescript/src/views/api.d.ts +5 -0
  325. package/lib/typescript/src/views/types.d.ts +32 -0
  326. package/package.json +2 -2
  327. package/src/{values/animation → animation}/decay/decay.ts +0 -0
  328. package/src/{values/animation → animation}/decay/index.ts +0 -0
  329. package/src/{values/animation → animation}/decay/runDecay.ts +2 -2
  330. package/src/{values/animation → animation}/decay/types.ts +1 -1
  331. package/src/{values/animation → animation}/functions/index.ts +0 -0
  332. package/src/animation/functions/interpolate.ts +182 -0
  333. package/src/animation/functions/interpolateColors.ts +58 -0
  334. package/src/{values/animation → animation}/index.ts +0 -0
  335. package/src/{values/animation → animation}/spring/Spring.ts +0 -0
  336. package/src/{values/animation → animation}/spring/functions/index.ts +0 -0
  337. package/src/{values/animation → animation}/spring/functions/spring.ts +0 -0
  338. package/src/{values/animation → animation}/spring/index.ts +0 -0
  339. package/src/{values/animation → animation}/spring/runSpring.ts +1 -1
  340. package/src/{values/animation → animation}/spring/types.ts +0 -0
  341. package/src/{values/animation → animation}/spring/useSpring.ts +1 -1
  342. package/src/{values/animation → animation}/timing/Easing.ts +0 -0
  343. package/src/{values/animation → animation}/timing/createTiming.ts +2 -2
  344. package/src/{values/animation → animation}/timing/functions/__tests__/timing.spec.ts +0 -0
  345. package/src/{values/animation → animation}/timing/functions/bezier.ts +0 -0
  346. package/src/{values/animation → animation}/timing/functions/getResolvedParams.ts +2 -2
  347. package/src/{values/animation → animation}/timing/functions/index.ts +0 -0
  348. package/src/{values/animation → animation}/timing/functions/timing.ts +1 -1
  349. package/src/{values/animation → animation}/timing/functions/types.ts +0 -0
  350. package/src/{values/animation → animation}/timing/index.ts +0 -0
  351. package/src/{values/animation → animation}/timing/runTiming.ts +1 -1
  352. package/src/{values/animation → animation}/timing/useLoop.ts +0 -0
  353. package/src/{values/animation → animation}/timing/useTiming.ts +2 -2
  354. package/src/{values/animation → animation}/types.ts +5 -5
  355. package/src/index.ts +1 -0
  356. package/src/renderer/Canvas.tsx +11 -4
  357. package/src/renderer/components/colorFilters/BlendColor.tsx +1 -1
  358. package/src/renderer/components/colorFilters/Lerp.tsx +1 -1
  359. package/src/renderer/components/imageFilters/InnerShadow.tsx +4 -2
  360. package/src/renderer/components/imageFilters/RuntimeShader.tsx +23 -0
  361. package/src/renderer/components/imageFilters/index.ts +1 -0
  362. package/src/renderer/components/shaders/Gradient.ts +2 -4
  363. package/src/renderer/components/shaders/Shader.tsx +3 -3
  364. package/src/renderer/processors/Circles.ts +2 -1
  365. package/src/renderer/processors/Font.ts +1 -1
  366. package/src/renderer/processors/Rects.ts +9 -14
  367. package/src/renderer/processors/math/Matrix3.ts +24 -105
  368. package/src/renderer/processors/math/Vector.ts +3 -2
  369. package/src/skia/Color.ts +13 -27
  370. package/src/skia/ImageFilter/ImageFilterFactory.ts +20 -0
  371. package/src/skia/Matrix.ts +8 -1
  372. package/src/skia/RuntimeEffect/RuntimeEffect.ts +3 -1
  373. package/src/skia/RuntimeEffect/RuntimeEffectFactory.ts +2 -2
  374. package/src/skia/Shader/useShader.ts +4 -1
  375. package/src/skia/Skia.ts +4 -126
  376. package/src/skia/SkiaApi.ts +86 -0
  377. package/src/skia/Surface/Surface.ts +1 -1
  378. package/src/skia/Surface/SurfaceFactory.ts +2 -2
  379. package/src/values/api.ts +3 -42
  380. package/src/values/api.web.ts +5 -0
  381. package/src/values/index.ts +0 -1
  382. package/src/values/types.ts +30 -1
  383. package/src/values/web/RNSkAnimation.ts +33 -0
  384. package/src/values/web/RNSkClockValue.ts +58 -0
  385. package/src/values/web/RNSkDerivedValue.ts +38 -0
  386. package/src/values/web/RNSkReadonlyValue.ts +32 -0
  387. package/src/values/web/RNSkValue.ts +57 -0
  388. package/src/values/web/__tests__/RNSkAnimation.spec.ts +21 -0
  389. package/src/values/web/__tests__/RNSkDerivedValue.spec.ts +15 -0
  390. package/src/values/web/__tests__/RNSkReadonlyValue.spec.ts +8 -0
  391. package/src/values/web/__tests__/RNSkValue.spec.ts +11 -0
  392. package/src/values/web/api.ts +33 -0
  393. package/src/values/web/index.ts +1 -0
  394. package/src/views/SkiaView.tsx +3 -49
  395. package/src/views/api.ts +7 -0
  396. package/src/views/types.ts +40 -0
  397. package/lib/commonjs/values/animation/decay/runDecay.js.map +0 -1
  398. package/lib/commonjs/values/animation/functions/interpolate.js +0 -139
  399. package/lib/commonjs/values/animation/functions/interpolate.js.map +0 -1
  400. package/lib/commonjs/values/animation/functions/interpolateColors.js +0 -47
  401. package/lib/commonjs/values/animation/functions/interpolateColors.js.map +0 -1
  402. package/lib/commonjs/values/animation/spring/runSpring.js.map +0 -1
  403. package/lib/commonjs/values/animation/spring/useSpring.js.map +0 -1
  404. package/lib/commonjs/values/animation/timing/createTiming.js.map +0 -1
  405. package/lib/commonjs/values/animation/timing/functions/getResolvedParams.js.map +0 -1
  406. package/lib/commonjs/values/animation/timing/runTiming.js.map +0 -1
  407. package/lib/commonjs/values/animation/timing/useTiming.js.map +0 -1
  408. package/lib/module/values/animation/decay/runDecay.js.map +0 -1
  409. package/lib/module/values/animation/functions/interpolate.js +0 -132
  410. package/lib/module/values/animation/functions/interpolate.js.map +0 -1
  411. package/lib/module/values/animation/functions/interpolateColors.js +0 -32
  412. package/lib/module/values/animation/functions/interpolateColors.js.map +0 -1
  413. package/lib/module/values/animation/spring/runSpring.js.map +0 -1
  414. package/lib/module/values/animation/spring/useSpring.js.map +0 -1
  415. package/lib/module/values/animation/timing/createTiming.js.map +0 -1
  416. package/lib/module/values/animation/timing/functions/getResolvedParams.js.map +0 -1
  417. package/lib/module/values/animation/timing/runTiming.js.map +0 -1
  418. package/lib/module/values/animation/timing/useTiming.js.map +0 -1
  419. package/lib/typescript/scripts/install-npm.d.ts +0 -1
  420. package/lib/typescript/src/values/animation/functions/interpolate.d.ts +0 -7
  421. package/lib/typescript/src/values/animation/functions/interpolateColors.d.ts +0 -3
  422. package/src/values/animation/functions/interpolate.ts +0 -169
  423. package/src/values/animation/functions/interpolateColors.ts +0 -62
@@ -11,6 +11,7 @@
11
11
 
12
12
  #include <JsiSkHostObjects.h>
13
13
  #include <RNSkPlatformContext.h>
14
+ #include <JsiSimpleValueWrapper.h>
14
15
 
15
16
  namespace RNSkia
16
17
  {
@@ -26,7 +27,8 @@ class RNSkReadonlyValue : public JsiSkHostObject,
26
27
  public:
27
28
  RNSkReadonlyValue(std::shared_ptr<RNSkPlatformContext> platformContext)
28
29
  : JsiSkHostObject(platformContext),
29
- _propNameId(jsi::PropNameID::forUtf8(*platformContext->getJsRuntime(), "value")) {}
30
+ _valueHolder(std::make_unique<JsiSimpleValueWrapper>(*platformContext->getJsRuntime()))
31
+ { }
30
32
 
31
33
  virtual ~RNSkReadonlyValue() { }
32
34
 
@@ -86,26 +88,26 @@ public:
86
88
  }
87
89
 
88
90
  /**
89
- Updates the underlying value and notifies all listeners about the change
91
+ Updates the underlying value and notifies all listeners about the change.
92
+ Listeners are only notified if the value was actually changed for numeric, boolean and string
93
+ values. For all other values listeners are notified without comparison.
90
94
  @param runtime Current JS Runtime
91
95
  @param value Next value
92
96
  */
93
97
  virtual void update(jsi::Runtime &runtime, const jsi::Value &value) {
94
- if(_valueHolder == nullptr) {
95
- _valueHolder = std::make_shared<jsi::Object>(runtime);
98
+ auto equal = _valueHolder->equals(runtime, value);
99
+ _valueHolder->setCurrent(runtime, value);
100
+ if(!equal) {
101
+ notifyListeners(runtime);
96
102
  }
97
- _valueHolder->setProperty(runtime, _propNameId, value);
98
- notifyListeners(runtime);
99
103
  }
100
104
 
101
105
  jsi::Value getCurrent(jsi::Runtime &runtime) {
102
- if(_valueHolder == nullptr) {
103
- return jsi::Value::undefined();
104
- }
105
- return _valueHolder->getProperty(runtime, _propNameId);
106
+ return _valueHolder->getCurrent(runtime);
106
107
  }
107
108
 
108
109
  protected:
110
+
109
111
  /**
110
112
  Notifies listeners about changes
111
113
  @param runtime Current JS Runtime
@@ -131,8 +133,8 @@ protected:
131
133
  }
132
134
 
133
135
  private:
134
- jsi::PropNameID _propNameId;
135
- std::shared_ptr<jsi::Object> _valueHolder;
136
+ std::unique_ptr<JsiSimpleValueWrapper> _valueHolder;
137
+
136
138
  long _listenerId = 0;
137
139
  std::unordered_map<long, std::function<void(jsi::Runtime&)>> _listeners;
138
140
  std::mutex _mutex;
@@ -76,11 +76,16 @@ public:
76
76
 
77
77
  private:
78
78
  void subscribe(std::shared_ptr<RNSkAnimation> animation) {
79
- unsubscribe();
80
79
  if(animation != nullptr) {
81
80
  _animation = animation;
82
- auto dispatch = std::bind(&RNSkValue::animationDidUpdate, this, std::placeholders::_1);
83
- _unsubscribe = std::make_shared<std::function<void()>>(_animation->addListener(dispatch));
81
+ _unsubscribe = std::make_shared<std::function<void()>>(
82
+ _animation->addListener([weakSelf = weak_from_this()](jsi::Runtime &runtime) {
83
+ auto self = weakSelf.lock();
84
+ if(self) {
85
+ auto selfAsThis = std::dynamic_pointer_cast<RNSkValue>(self);
86
+ selfAsThis->animationDidUpdate(runtime);
87
+ }
88
+ }));
84
89
  // Start the animation
85
90
  _animation->startClock();
86
91
  }
@@ -1,5 +1,7 @@
1
1
  #pragma once
2
2
 
3
+ #import "RCTBridge.h"
4
+
3
5
  #include <functional>
4
6
  #include <memory>
5
7
  #include <string>
@@ -26,13 +28,27 @@ namespace RNSkia {
26
28
 
27
29
  using namespace facebook;
28
30
 
31
+ static void handleNotification(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo);
32
+
29
33
  class PlatformContext : public RNSkPlatformContext {
30
34
  public:
31
35
  PlatformContext(jsi::Runtime *runtime,
32
36
  std::shared_ptr<react::CallInvoker> callInvoker)
33
- : RNSkPlatformContext(runtime, callInvoker, [[UIScreen mainScreen] scale]) {}
34
-
35
- ~PlatformContext() {}
37
+ : RNSkPlatformContext(runtime, callInvoker, [[UIScreen mainScreen] scale]) {
38
+ // We need to make sure we invalidate when modules are freed
39
+ CFNotificationCenterAddObserver(
40
+ CFNotificationCenterGetLocalCenter(),
41
+ this,
42
+ &handleNotification,
43
+ (__bridge CFStringRef)RCTBridgeWillInvalidateModulesNotification,
44
+ NULL,
45
+ CFNotificationSuspensionBehaviorDeliverImmediately
46
+ );
47
+ }
48
+
49
+ ~PlatformContext() {
50
+ CFNotificationCenterRemoveEveryObserver(CFNotificationCenterGetLocalCenter(), this);
51
+ }
36
52
 
37
53
  void startDrawLoop() override;
38
54
  void stopDrawLoop() override;
@@ -42,9 +58,19 @@ public:
42
58
  const std::function<void(std::unique_ptr<SkStreamAsset>)> &op) override;
43
59
 
44
60
  void raiseError(const std::exception &err) override;
45
-
61
+
62
+ void willInvalidateModules() {
63
+ // We need to do some house-cleaning here!
64
+ invalidate();
65
+ }
66
+
46
67
  private:
47
68
  DisplayLink *_displayLink;
48
69
  };
49
70
 
71
+ static void handleNotification(CFNotificationCenterRef center, void *observer, CFStringRef name,
72
+ const void *object, CFDictionaryRef userInfo) {
73
+ (static_cast<PlatformContext*>(observer))->willInvalidateModules();
74
+ }
75
+
50
76
  } // namespace RNSkia
@@ -28,16 +28,16 @@ public:
28
28
  void setSize(int width, int height);
29
29
 
30
30
  protected:
31
- int getWidth() override { return _width * _context->getPixelDensity(); };
32
- int getHeight() override { return _height * _context->getPixelDensity(); };
31
+ float getScaledWidth() override { return _width * _context->getPixelDensity(); };
32
+ float getScaledHeight() override { return _height * _context->getPixelDensity(); };
33
33
 
34
34
  private:
35
35
  void drawPicture(const sk_sp<SkPicture> picture) override;
36
36
  bool createSkiaSurface();
37
37
 
38
38
  int _nativeId;
39
- int _width = -1;
40
- int _height = -1;
39
+ float _width = -1;
40
+ float _height = -1;
41
41
 
42
42
  #pragma clang diagnostic push
43
43
  #pragma clang diagnostic ignored "-Wunguarded-availability-new"
@@ -28,21 +28,19 @@
28
28
  _drawingMode = RNSkia::RNSkDrawingMode::Default;
29
29
 
30
30
  // Listen to notifications about module invalidation
31
- __unsafe_unretained SkiaDrawView *weakSelf = self;
32
- auto nc = [NSNotificationCenter defaultCenter];
33
- [nc addObserverForName:RCTBridgeWillInvalidateModulesNotification
34
- object:nil
35
- queue:nil
36
- usingBlock:^(NSNotification *notification){
37
- // Remove local variables
38
- if(weakSelf != nullptr) {
39
- weakSelf->_manager = nullptr;
40
- }
41
- }];
31
+ [[NSNotificationCenter defaultCenter] addObserver:self
32
+ selector:@selector(willInvalidateModules)
33
+ name:RCTBridgeWillInvalidateModulesNotification
34
+ object:nil];
42
35
  }
43
36
  return self;
44
37
  }
45
38
 
39
+ - (void) willInvalidateModules {
40
+ _impl = nullptr;
41
+ _manager = nullptr;
42
+ }
43
+
46
44
  #pragma mark Lifecycle
47
45
 
48
46
  - (void) willMoveToSuperview:(UIView *)newWindow {
@@ -72,8 +70,6 @@
72
70
  }
73
71
 
74
72
  - (void) dealloc {
75
- auto nc = [NSNotificationCenter defaultCenter];
76
- [nc removeObserver:self name:RCTBridgeWillInvalidateModulesNotification object:nil];
77
73
  if(_manager != nullptr && _nativeId != 0) {
78
74
  _manager->unregisterSkiaDrawView(_nativeId);
79
75
  }
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.runDecay = void 0;
7
7
 
8
- var _api = require("../../api");
8
+ var _api = require("../../values/api");
9
9
 
10
10
  var _decay = require("./decay");
11
11
 
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["runDecay.ts"],"names":["runDecay","value","config","resolvedConfig","deceleration","velocityFactor","velocity","from","current","updateFunction","t","state","finished","lastTimestamp","startTimestamp","initialVelocity","animation","ValueApi","createAnimation"],"mappings":";;;;;;;AAAA;;AAGA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,QAAQ,GAAG,CAACC,KAAD,EAA2BC,MAA3B,KAAoD;AAC1E,QAAMC,cAAkC,GAAG;AACzCC,IAAAA,YAAY,EAAE,KAD2B;AAEzCC,IAAAA,cAAc,EAAE,CAFyB;AAGzCC,IAAAA,QAAQ,EAAE,CAH+B;AAIzCC,IAAAA,IAAI,EAAEN,KAAK,CAACO,OAJ6B;AAKzC,OAAGN;AALsC,GAA3C;;AAOA,QAAMO,cAAc,GAAG,CAACC,CAAD,EAAYC,KAAZ,KAA8C;AACnE,QAAI,CAACA,KAAL,EAAY;AACV,aAAO;AACLH,QAAAA,OAAO,EAAEL,cAAc,CAACI,IADnB;AAELK,QAAAA,QAAQ,EAAE,KAFL;AAGLC,QAAAA,aAAa,EAAEH,CAHV;AAILI,QAAAA,cAAc,EAAEJ,CAJX;AAKLK,QAAAA,eAAe,EAAEZ,cAAc,CAACG,QAL3B;AAMLA,QAAAA,QAAQ,EAAEH,cAAc,CAACG;AANpB,OAAP;AAQD;;AACD,WAAO,kBAAMI,CAAN,EAASC,KAAT,EAAgBR,cAAhB,CAAP;AACD,GAZD;;AAaAF,EAAAA,KAAK,CAACe,SAAN,GAAkBC,cAASC,eAAT,CAAyBT,cAAzB,CAAlB;AACA,SAAOR,KAAK,CAACe,SAAb;AACD,CAvBM","sourcesContent":["import { ValueApi } from \"../../values/api\";\nimport type { SkiaValue } from \"../../values/types\";\n\nimport { decay } from \"./decay\";\nimport type { DecayConfig, DefaultDecayConfig, DecayState } from \"./types\";\n\n/**\n * Runs a decay animation from the current value to zero with the given decay\n * configuration.\n * @param value value to animate\n * @param config Configuration or default configuration\n * @returns Animation\n */\nexport const runDecay = (value: SkiaValue<number>, config?: DecayConfig) => {\n const resolvedConfig: DefaultDecayConfig = {\n deceleration: 0.998,\n velocityFactor: 1,\n velocity: 0,\n from: value.current,\n ...config,\n };\n const updateFunction = (t: number, state: DecayState | undefined) => {\n if (!state) {\n return {\n current: resolvedConfig.from,\n finished: false,\n lastTimestamp: t,\n startTimestamp: t,\n initialVelocity: resolvedConfig.velocity,\n velocity: resolvedConfig.velocity,\n };\n }\n return decay(t, state, resolvedConfig);\n };\n value.animation = ValueApi.createAnimation(updateFunction);\n return value.animation;\n};\n"]}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Extrapolate = void 0;
7
+ exports.interpolate = interpolate;
8
+
9
+ /* eslint-disable max-len */
10
+ let Extrapolate;
11
+ exports.Extrapolate = Extrapolate;
12
+
13
+ (function (Extrapolate) {
14
+ Extrapolate["IDENTITY"] = "identity";
15
+ Extrapolate["CLAMP"] = "clamp";
16
+ Extrapolate["EXTEND"] = "extend";
17
+ })(Extrapolate || (exports.Extrapolate = Extrapolate = {}));
18
+
19
+ function getVal(type, coef, val, leftEdgeOutput, rightEdgeOutput, x) {
20
+ switch (type) {
21
+ case Extrapolate.IDENTITY:
22
+ return x;
23
+
24
+ case Extrapolate.CLAMP:
25
+ if (coef * val < coef * leftEdgeOutput) {
26
+ return leftEdgeOutput;
27
+ }
28
+
29
+ return rightEdgeOutput;
30
+
31
+ case Extrapolate.EXTEND:
32
+ default:
33
+ return val;
34
+ }
35
+ }
36
+
37
+ function isExtrapolate(value) {
38
+ return value === Extrapolate.EXTEND || value === Extrapolate.CLAMP || value === Extrapolate.IDENTITY;
39
+ } // validates extrapolations type
40
+ // if type is correct, converts it to ExtrapolationConfig
41
+
42
+
43
+ function validateType(type) {
44
+ // initialize extrapolationConfig with default extrapolation
45
+ const extrapolationConfig = {
46
+ extrapolateLeft: Extrapolate.EXTEND,
47
+ extrapolateRight: Extrapolate.EXTEND
48
+ };
49
+
50
+ if (!type) {
51
+ return extrapolationConfig;
52
+ }
53
+
54
+ if (typeof type === "string") {
55
+ if (!isExtrapolate(type)) {
56
+ throw new Error(`No supported value for "interpolate" \nSupported values: ["extend", "clamp", "identity", Extrapolatation.CLAMP, Extrapolatation.EXTEND, Extrapolatation.IDENTITY]\n Valid example:
57
+ interpolate(value, [inputRange], [outputRange], "clamp")`);
58
+ }
59
+
60
+ extrapolationConfig.extrapolateLeft = type;
61
+ extrapolationConfig.extrapolateRight = type;
62
+ return extrapolationConfig;
63
+ } // otherwise type is extrapolation config object
64
+
65
+
66
+ if (type.extrapolateLeft && !isExtrapolate(type.extrapolateLeft) || type.extrapolateRight && !isExtrapolate(type.extrapolateRight)) {
67
+ throw new Error(`No supported value for "interpolate" \nSupported values: ["extend", "clamp", "identity", Extrapolatation.CLAMP, Extrapolatation.EXTEND, Extrapolatation.IDENTITY]\n Valid example:
68
+ interpolate(value, [inputRange], [outputRange], {
69
+ extrapolateLeft: Extrapolation.CLAMP,
70
+ extrapolateRight: Extrapolation.IDENTITY
71
+ }})`);
72
+ }
73
+
74
+ Object.assign(extrapolationConfig, type);
75
+ return extrapolationConfig;
76
+ }
77
+
78
+ function internalInterpolate(x, narrowedInput, extrapolationConfig) {
79
+ const {
80
+ leftEdgeInput,
81
+ rightEdgeInput,
82
+ leftEdgeOutput,
83
+ rightEdgeOutput
84
+ } = narrowedInput;
85
+
86
+ if (rightEdgeInput - leftEdgeInput === 0) {
87
+ return leftEdgeOutput;
88
+ }
89
+
90
+ const progress = (x - leftEdgeInput) / (rightEdgeInput - leftEdgeInput);
91
+ const val = leftEdgeOutput + progress * (rightEdgeOutput - leftEdgeOutput);
92
+ const coef = rightEdgeOutput >= leftEdgeOutput ? 1 : -1;
93
+
94
+ if (coef * val < coef * leftEdgeOutput) {
95
+ return getVal(extrapolationConfig.extrapolateLeft, coef, val, leftEdgeOutput, rightEdgeOutput, x);
96
+ } else if (coef * val > coef * rightEdgeOutput) {
97
+ return getVal(extrapolationConfig.extrapolateRight, coef, val, leftEdgeOutput, rightEdgeOutput, x);
98
+ }
99
+
100
+ return val;
101
+ } // e.g. function interpolate(x, input, output, type = Extrapolatation.CLAMP)
102
+
103
+
104
+ function interpolate(x, input, output, type) {
105
+ if (input.length < 2 || output.length < 2) {
106
+ throw Error("Interpolation input and output should contain at least two values.");
107
+ }
108
+
109
+ const extrapolationConfig = validateType(type);
110
+ const {
111
+ length
112
+ } = input;
113
+ const narrowedInput = {
114
+ leftEdgeInput: input[0],
115
+ rightEdgeInput: input[1],
116
+ leftEdgeOutput: output[0],
117
+ rightEdgeOutput: output[1]
118
+ };
119
+
120
+ if (length > 2) {
121
+ if (x > input[length - 1]) {
122
+ narrowedInput.leftEdgeInput = input[length - 2];
123
+ narrowedInput.rightEdgeInput = input[length - 1];
124
+ narrowedInput.leftEdgeOutput = output[length - 2];
125
+ narrowedInput.rightEdgeOutput = output[length - 1];
126
+ } else {
127
+ for (let i = 1; i < length; ++i) {
128
+ if (x <= input[i]) {
129
+ narrowedInput.leftEdgeInput = input[i - 1];
130
+ narrowedInput.rightEdgeInput = input[i];
131
+ narrowedInput.leftEdgeOutput = output[i - 1];
132
+ narrowedInput.rightEdgeOutput = output[i];
133
+ break;
134
+ }
135
+ }
136
+ }
137
+ }
138
+
139
+ return internalInterpolate(x, narrowedInput, extrapolationConfig);
140
+ }
141
+ //# sourceMappingURL=interpolate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["interpolate.ts"],"names":["Extrapolate","getVal","type","coef","val","leftEdgeOutput","rightEdgeOutput","x","IDENTITY","CLAMP","EXTEND","isExtrapolate","value","validateType","extrapolationConfig","extrapolateLeft","extrapolateRight","Error","Object","assign","internalInterpolate","narrowedInput","leftEdgeInput","rightEdgeInput","progress","interpolate","input","output","length","i"],"mappings":"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","sourcesContent":["/* eslint-disable max-len */\nexport enum Extrapolate {\n IDENTITY = \"identity\",\n CLAMP = \"clamp\",\n EXTEND = \"extend\",\n}\n\ninterface InterpolationNarrowedInput {\n leftEdgeInput: number;\n rightEdgeInput: number;\n leftEdgeOutput: number;\n rightEdgeOutput: number;\n}\n\nexport interface ExtrapolationConfig {\n extrapolateLeft?: Extrapolate | string;\n extrapolateRight?: Extrapolate | string;\n}\n\ninterface RequiredExtrapolationConfig {\n extrapolateLeft: Extrapolate;\n extrapolateRight: Extrapolate;\n}\n\nexport type ExtrapolationType =\n | ExtrapolationConfig\n | Extrapolate\n | string\n | undefined;\n\nfunction getVal(\n type: Extrapolate,\n coef: number,\n val: number,\n leftEdgeOutput: number,\n rightEdgeOutput: number,\n x: number\n): number {\n switch (type) {\n case Extrapolate.IDENTITY:\n return x;\n case Extrapolate.CLAMP:\n if (coef * val < coef * leftEdgeOutput) {\n return leftEdgeOutput;\n }\n return rightEdgeOutput;\n case Extrapolate.EXTEND:\n default:\n return val;\n }\n}\n\nfunction isExtrapolate(value: string): value is Extrapolate {\n return (\n value === Extrapolate.EXTEND ||\n value === Extrapolate.CLAMP ||\n value === Extrapolate.IDENTITY\n );\n}\n\n// validates extrapolations type\n// if type is correct, converts it to ExtrapolationConfig\nfunction validateType(type: ExtrapolationType): RequiredExtrapolationConfig {\n // initialize extrapolationConfig with default extrapolation\n const extrapolationConfig: RequiredExtrapolationConfig = {\n extrapolateLeft: Extrapolate.EXTEND,\n extrapolateRight: Extrapolate.EXTEND,\n };\n\n if (!type) {\n return extrapolationConfig;\n }\n\n if (typeof type === \"string\") {\n if (!isExtrapolate(type)) {\n throw new Error(\n `No supported value for \"interpolate\" \\nSupported values: [\"extend\", \"clamp\", \"identity\", Extrapolatation.CLAMP, Extrapolatation.EXTEND, Extrapolatation.IDENTITY]\\n Valid example:\n interpolate(value, [inputRange], [outputRange], \"clamp\")`\n );\n }\n extrapolationConfig.extrapolateLeft = type;\n extrapolationConfig.extrapolateRight = type;\n return extrapolationConfig;\n }\n\n // otherwise type is extrapolation config object\n if (\n (type.extrapolateLeft && !isExtrapolate(type.extrapolateLeft)) ||\n (type.extrapolateRight && !isExtrapolate(type.extrapolateRight))\n ) {\n throw new Error(\n `No supported value for \"interpolate\" \\nSupported values: [\"extend\", \"clamp\", \"identity\", Extrapolatation.CLAMP, Extrapolatation.EXTEND, Extrapolatation.IDENTITY]\\n Valid example:\n interpolate(value, [inputRange], [outputRange], {\n extrapolateLeft: Extrapolation.CLAMP,\n extrapolateRight: Extrapolation.IDENTITY\n }})`\n );\n }\n\n Object.assign(extrapolationConfig, type);\n return extrapolationConfig;\n}\n\nfunction internalInterpolate(\n x: number,\n narrowedInput: InterpolationNarrowedInput,\n extrapolationConfig: RequiredExtrapolationConfig\n) {\n const { leftEdgeInput, rightEdgeInput, leftEdgeOutput, rightEdgeOutput } =\n narrowedInput;\n if (rightEdgeInput - leftEdgeInput === 0) {\n return leftEdgeOutput;\n }\n const progress = (x - leftEdgeInput) / (rightEdgeInput - leftEdgeInput);\n const val = leftEdgeOutput + progress * (rightEdgeOutput - leftEdgeOutput);\n const coef = rightEdgeOutput >= leftEdgeOutput ? 1 : -1;\n\n if (coef * val < coef * leftEdgeOutput) {\n return getVal(\n extrapolationConfig.extrapolateLeft,\n coef,\n val,\n leftEdgeOutput,\n rightEdgeOutput,\n x\n );\n } else if (coef * val > coef * rightEdgeOutput) {\n return getVal(\n extrapolationConfig.extrapolateRight,\n coef,\n val,\n leftEdgeOutput,\n rightEdgeOutput,\n x\n );\n }\n\n return val;\n}\n\n// e.g. function interpolate(x, input, output, type = Extrapolatation.CLAMP)\nexport function interpolate(\n x: number,\n input: readonly number[],\n output: readonly number[],\n type?: ExtrapolationType\n): number {\n if (input.length < 2 || output.length < 2) {\n throw Error(\n \"Interpolation input and output should contain at least two values.\"\n );\n }\n\n const extrapolationConfig = validateType(type);\n const { length } = input;\n const narrowedInput: InterpolationNarrowedInput = {\n leftEdgeInput: input[0],\n rightEdgeInput: input[1],\n leftEdgeOutput: output[0],\n rightEdgeOutput: output[1],\n };\n if (length > 2) {\n if (x > input[length - 1]) {\n narrowedInput.leftEdgeInput = input[length - 2];\n narrowedInput.rightEdgeInput = input[length - 1];\n narrowedInput.leftEdgeOutput = output[length - 2];\n narrowedInput.rightEdgeOutput = output[length - 1];\n } else {\n for (let i = 1; i < length; ++i) {\n if (x <= input[i]) {\n narrowedInput.leftEdgeInput = input[i - 1];\n narrowedInput.rightEdgeInput = input[i];\n narrowedInput.leftEdgeOutput = output[i - 1];\n narrowedInput.rightEdgeOutput = output[i];\n break;\n }\n }\n }\n }\n\n return internalInterpolate(x, narrowedInput, extrapolationConfig);\n}\n"]}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.mixColors = exports.interpolateColors = void 0;
7
+
8
+ var _renderer = require("../../renderer");
9
+
10
+ var _skia = require("../../skia");
11
+
12
+ var _interpolate = require("./interpolate");
13
+
14
+ const interpolateColorsRGB = (value, inputRange, outputRange) => {
15
+ const r = (0, _interpolate.interpolate)(value, inputRange, outputRange.map(c => c[0]), "clamp");
16
+ const g = (0, _interpolate.interpolate)(value, inputRange, outputRange.map(c => c[1]), "clamp");
17
+ const b = (0, _interpolate.interpolate)(value, inputRange, outputRange.map(c => c[2]), "clamp");
18
+ const a = (0, _interpolate.interpolate)(value, inputRange, outputRange.map(c => c[3]), "clamp");
19
+ return new Float32Array([r, g, b, a]);
20
+ };
21
+
22
+ const interpolateColors = (value, inputRange, _outputRange) => {
23
+ const outputRange = _outputRange.map(cl => _skia.Skia.Color(cl));
24
+
25
+ return interpolateColorsRGB(value, inputRange, outputRange);
26
+ };
27
+
28
+ exports.interpolateColors = interpolateColors;
29
+
30
+ const mixColors = (value, x, y) => {
31
+ const c1 = _skia.Skia.Color(x);
32
+
33
+ const c2 = _skia.Skia.Color(y);
34
+
35
+ return new Float32Array([(0, _renderer.mix)(value, c1[0], c2[0]), (0, _renderer.mix)(value, c1[1], c2[1]), (0, _renderer.mix)(value, c1[2], c2[2]), (0, _renderer.mix)(value, c1[3], c2[3])]);
36
+ };
37
+
38
+ exports.mixColors = mixColors;
39
+ //# sourceMappingURL=interpolateColors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["interpolateColors.ts"],"names":["interpolateColorsRGB","value","inputRange","outputRange","r","map","c","g","b","a","Float32Array","interpolateColors","_outputRange","cl","Skia","Color","mixColors","x","y","c1","c2"],"mappings":";;;;;;;AAAA;;AAEA;;AAGA;;AAEA,MAAMA,oBAAoB,GAAG,CAC3BC,KAD2B,EAE3BC,UAF2B,EAG3BC,WAH2B,KAIxB;AACH,QAAMC,CAAC,GAAG,8BACRH,KADQ,EAERC,UAFQ,EAGRC,WAAW,CAACE,GAAZ,CAAiBC,CAAD,IAAOA,CAAC,CAAC,CAAD,CAAxB,CAHQ,EAIR,OAJQ,CAAV;AAMA,QAAMC,CAAC,GAAG,8BACRN,KADQ,EAERC,UAFQ,EAGRC,WAAW,CAACE,GAAZ,CAAiBC,CAAD,IAAOA,CAAC,CAAC,CAAD,CAAxB,CAHQ,EAIR,OAJQ,CAAV;AAMA,QAAME,CAAC,GAAG,8BACRP,KADQ,EAERC,UAFQ,EAGRC,WAAW,CAACE,GAAZ,CAAiBC,CAAD,IAAOA,CAAC,CAAC,CAAD,CAAxB,CAHQ,EAIR,OAJQ,CAAV;AAMA,QAAMG,CAAC,GAAG,8BACRR,KADQ,EAERC,UAFQ,EAGRC,WAAW,CAACE,GAAZ,CAAiBC,CAAD,IAAOA,CAAC,CAAC,CAAD,CAAxB,CAHQ,EAIR,OAJQ,CAAV;AAMA,SAAO,IAAII,YAAJ,CAAiB,CAACN,CAAD,EAAIG,CAAJ,EAAOC,CAAP,EAAUC,CAAV,CAAjB,CAAP;AACD,CA9BD;;AAgCO,MAAME,iBAAiB,GAAG,CAC/BV,KAD+B,EAE/BC,UAF+B,EAG/BU,YAH+B,KAI5B;AACH,QAAMT,WAAW,GAAGS,YAAY,CAACP,GAAb,CAAkBQ,EAAD,IAAQC,WAAKC,KAAL,CAAWF,EAAX,CAAzB,CAApB;;AACA,SAAOb,oBAAoB,CAACC,KAAD,EAAQC,UAAR,EAAoBC,WAApB,CAA3B;AACD,CAPM;;;;AASA,MAAMa,SAAS,GAAG,CAACf,KAAD,EAAgBgB,CAAhB,EAA0BC,CAA1B,KAAuC;AAC9D,QAAMC,EAAE,GAAGL,WAAKC,KAAL,CAAWE,CAAX,CAAX;;AACA,QAAMG,EAAE,GAAGN,WAAKC,KAAL,CAAWG,CAAX,CAAX;;AACA,SAAO,IAAIR,YAAJ,CAAiB,CACtB,mBAAIT,KAAJ,EAAWkB,EAAE,CAAC,CAAD,CAAb,EAAkBC,EAAE,CAAC,CAAD,CAApB,CADsB,EAEtB,mBAAInB,KAAJ,EAAWkB,EAAE,CAAC,CAAD,CAAb,EAAkBC,EAAE,CAAC,CAAD,CAApB,CAFsB,EAGtB,mBAAInB,KAAJ,EAAWkB,EAAE,CAAC,CAAD,CAAb,EAAkBC,EAAE,CAAC,CAAD,CAApB,CAHsB,EAItB,mBAAInB,KAAJ,EAAWkB,EAAE,CAAC,CAAD,CAAb,EAAkBC,EAAE,CAAC,CAAD,CAApB,CAJsB,CAAjB,CAAP;AAMD,CATM","sourcesContent":["import { mix } from \"../../renderer\";\nimport type { Color } from \"../../skia\";\nimport { Skia } from \"../../skia\";\nimport type { SkColor } from \"../../skia/Color\";\n\nimport { interpolate } from \"./interpolate\";\n\nconst interpolateColorsRGB = (\n value: number,\n inputRange: number[],\n outputRange: SkColor[]\n) => {\n const r = interpolate(\n value,\n inputRange,\n outputRange.map((c) => c[0]),\n \"clamp\"\n );\n const g = interpolate(\n value,\n inputRange,\n outputRange.map((c) => c[1]),\n \"clamp\"\n );\n const b = interpolate(\n value,\n inputRange,\n outputRange.map((c) => c[2]),\n \"clamp\"\n );\n const a = interpolate(\n value,\n inputRange,\n outputRange.map((c) => c[3]),\n \"clamp\"\n );\n return new Float32Array([r, g, b, a]);\n};\n\nexport const interpolateColors = (\n value: number,\n inputRange: number[],\n _outputRange: Color[]\n) => {\n const outputRange = _outputRange.map((cl) => Skia.Color(cl));\n return interpolateColorsRGB(value, inputRange, outputRange);\n};\n\nexport const mixColors = (value: number, x: Color, y: Color) => {\n const c1 = Skia.Color(x);\n const c2 = Skia.Color(y);\n return new Float32Array([\n mix(value, c1[0], c2[0]),\n mix(value, c1[1], c2[1]),\n mix(value, c1[2], c2[2]),\n mix(value, c1[3], c2[3]),\n ]);\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["runSpring.ts"],"names":["runSpring","value","toOrParams","config","callback","Spring","Config","Default"],"mappings":";;;;;;;AAMA;;AAEA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,SAAS,GAAG,CACvBC,KADuB,EAEvBC,UAFuB,EAGvBC,MAHuB,EAIvBC,QAJuB,KAKL;AAClB,SAAO,0BACLH,KADK,EAELC,UAFK,EAGL,gCAAmBC,MAAnB,aAAmBA,MAAnB,cAAmBA,MAAnB,GAA6BE,eAAOC,MAAP,CAAcC,OAA3C,CAHK,EAILH,QAJK,CAAP;AAMD,CAZM","sourcesContent":["import type { SkiaValue, SkiaAnimation } from \"../../values/types\";\nimport type {\n AnimationParams,\n SpringConfig,\n AnimationCallback,\n} from \"../types\";\nimport { runTiming } from \"../timing/runTiming\";\n\nimport { Spring } from \"./Spring\";\nimport { createSpringEasing } from \"./functions/spring\";\n\n/**\n * Creates a new animation on an existing value that will be driven by\n * an animation value. The value will be run from / to the value in\n * params and modified by the provided easing curve for the length of\n * the duration. When the value has reached its desired \"to\" value the\n * animation will be stopped.\n *\n * @param value The value to animate\n * @param toOrParams To value or Animation parameters\n * @param config Spring configuration\n * @returns an animation value that can be used to start/stop\n * the animation.\n */\nexport const runSpring = (\n value: SkiaValue<number>,\n toOrParams: number | AnimationParams,\n config?: SpringConfig,\n callback?: AnimationCallback\n): SkiaAnimation => {\n return runTiming(\n value,\n toOrParams,\n createSpringEasing(config ?? Spring.Config.Default),\n callback\n );\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useSpring.ts"],"names":["useSpring","toOrParams","config","callback","Spring","Config","Default"],"mappings":";;;;;;;AAMA;;AAEA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,SAAS,GAAG,CACvBC,UADuB,EAEvBC,MAFuB,EAGvBC,QAHuB,KAKvB,uBACEF,UADF,EAEE,gCAAmBC,MAAnB,aAAmBA,MAAnB,cAAmBA,MAAnB,GAA6BE,eAAOC,MAAP,CAAcC,OAA3C,CAFF,EAGEH,QAHF,CALK","sourcesContent":["import type { SkiaReadonlyValue } from \"../../values/types\";\nimport type {\n SpringConfig,\n AnimationParams,\n AnimationCallback,\n} from \"../types\";\nimport { useTiming } from \"../timing\";\n\nimport { Spring } from \"./Spring\";\nimport { createSpringEasing } from \"./functions/spring\";\n\n/**\n * Creats a spring based animation value that will run whenever\n * the animation parameters change.\n * @param toOrParams\n * @param config\n * @returns\n */\nexport const useSpring = (\n toOrParams: number | AnimationParams,\n config?: SpringConfig,\n callback?: AnimationCallback\n): SkiaReadonlyValue<number> =>\n useTiming(\n toOrParams,\n createSpringEasing(config ?? Spring.Config.Default),\n callback\n );\n"]}
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createTiming = void 0;
7
7
 
8
- var _api = require("../../api");
8
+ var _api = require("../../values/api");
9
9
 
10
10
  var _functions = require("./functions");
11
11
 
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["createTiming.ts"],"names":["createTiming","params","value","callback","resolvedParams","from","current","animationFunction","t","state","nextState","duration","easing","loop","yoyo","finished","to","ValueApi","createAnimation"],"mappings":";;;;;;;AAMA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,YAAY,GAAG,CAC1BC,MAD0B,EAE1BC,KAF0B,EAG1BC,QAH0B,KAIvB;AAAA;;AACH;AACA;AACA,QAAMC,cAAc,GAAG,EACrB,GAAGH,MADkB;AAErBI,IAAAA,IAAI,0BAAEJ,MAAM,CAACI,IAAT,uDAAiBH,KAAjB,aAAiBA,KAAjB,uBAAiBA,KAAK,CAAEI,OAAxB,uCAAmC;AAFlB,GAAvB,CAHG,CAQH;;AACA,QAAMC,iBAAiB,GAAG,CAACC,CAAD,EAAYC,KAAZ,KAAkD;AAAA;;AAC1E;AACA,UAAMC,SAAS,GAAG,uBAChBF,CADgB,EAEhBP,MAAM,CAACU,QAFS,EAGhBV,MAAM,CAACW,MAHS,kBAIhBX,MAAM,CAACY,IAJS,uDAID,KAJC,kBAKhBZ,MAAM,CAACa,IALS,uDAKD,KALC,EAMhBL,KANgB,aAMhBA,KANgB,cAMhBA,KANgB,GAMP;AAAEH,MAAAA,OAAO,EAAEL,MAAM,CAACI,IAAlB;AAAyBU,MAAAA,QAAQ,EAAE;AAAnC,KANO,CAAlB;AAQA,UAAMT,OAAO,GACXI,SAAS,CAACJ,OAAV,IAAqBF,cAAc,CAACY,EAAf,GAAoBZ,cAAc,CAACC,IAAxD,IACAD,cAAc,CAACC,IAFjB;;AAGA,QAAIF,QAAQ,IAAIO,SAAS,CAACK,QAAV,KAAuB,IAAvC,EAA6C;AAC3CZ,MAAAA,QAAQ,CAACG,OAAD,CAAR;AACD;;AACD,WAAO,EACL,GAAGI,SADE;AAELJ,MAAAA;AAFK,KAAP;AAID,GApBD,CATG,CA+BH;;;AACA,SAAOW,cAASC,eAAT,CAAyBX,iBAAzB,CAAP;AACD,CArCM","sourcesContent":["import type {\n TimingConfig,\n RequiredAnimationParams,\n AnimationCallback,\n} from \"../types\";\nimport type { AnimationState, SkiaValue } from \"../../values/types\";\nimport { ValueApi } from \"../../values/api\";\n\nimport { timing } from \"./functions\";\n\n/**\n * Creates an animation that is driven by a clock value.\n * The value will be run from / to the value in params and modified\n * by the provided easing curve for the length of the duration. When\n * the value has reached its desired \"to\" value the animation\n * will be stopped. If loop is set to true, the animation will continue\n * to run until stopped.\n *\n * @param params Animation parameters\n * @param config Spring or timing configuration\n * @param value Optional value that the animation will update\n * @params an animation value that can be used to start/stop\n * the animation.\n */\nexport const createTiming = (\n params: RequiredAnimationParams & Required<TimingConfig>,\n value?: SkiaValue<number>,\n callback?: AnimationCallback\n) => {\n // Update from to be either the declared from value,\n // the current value of the value or zero\n const resolvedParams = {\n ...params,\n from: params.from ?? value?.current ?? 0,\n };\n\n // Update function for the animation value\n const animationFunction = (t: number, state: AnimationState | undefined) => {\n // Update the input value using the provided update function\n const nextState = timing(\n t,\n params.duration,\n params.easing,\n params.loop ?? false,\n params.yoyo ?? false,\n state ?? { current: params.from!, finished: false }\n );\n const current =\n nextState.current * (resolvedParams.to - resolvedParams.from!) +\n resolvedParams.from!;\n if (callback && nextState.finished === true) {\n callback(current);\n }\n return {\n ...nextState,\n current,\n };\n };\n\n // Create animation value\n return ValueApi.createAnimation(animationFunction);\n};\n"]}
@@ -41,10 +41,10 @@ const getResolvedParams = (toOrParams, config) => {
41
41
  };
42
42
 
43
43
  if (config) {
44
- var _config$easing;
44
+ var _config$duration, _config$easing;
45
45
 
46
- resolvedConfig.duration = config.duration;
47
- resolvedConfig.easing = (_config$easing = config.easing) !== null && _config$easing !== void 0 ? _config$easing : t => t;
46
+ resolvedConfig.duration = (_config$duration = config.duration) !== null && _config$duration !== void 0 ? _config$duration : DefaultTimingConfig.duration;
47
+ resolvedConfig.easing = (_config$easing = config.easing) !== null && _config$easing !== void 0 ? _config$easing : DefaultTimingConfig.easing;
48
48
  }
49
49
 
50
50
  return { ...resolvedParameters,
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["getResolvedParams.ts"],"names":["DefaultParameters","to","loop","yoyo","immediate","DefaultTimingConfig","duration","easing","t","getResolvedParams","toOrParams","config","resolvedParameters","from","resolvedConfig"],"mappings":";;;;;;AAMA,MAAMA,iBAAiB,GAAG;AACxBC,EAAAA,EAAE,EAAE,CADoB;AAExBC,EAAAA,IAAI,EAAE,KAFkB;AAGxBC,EAAAA,IAAI,EAAE,KAHkB;AAIxBC,EAAAA,SAAS,EAAE;AAJa,CAA1B;AAOA,MAAMC,mBAAmB,GAAG;AAC1BC,EAAAA,QAAQ,EAAE,IADgB;AAE1BC,EAAAA,MAAM,EAAGC,CAAD,IAAeA;AAFG,CAA5B;AAKA;AACA;AACA;AACA;AACA;;AACO,MAAMC,iBAAiB,GAAG,CAC/BC,UAD+B,EAE/BC,MAF+B,KAGsB;AACrD,MAAIC,kBAA2C,GAAG,EAChD,GAAGZ;AAD6C,GAAlD;;AAIA,MAAI,OAAOU,UAAP,KAAsB,QAA1B,EAAoC;AAClCE,IAAAA,kBAAkB,CAACX,EAAnB,GAAwBS,UAAxB;AACD,GAFD,MAEO;AAAA;;AACLE,IAAAA,kBAAkB,GAAG;AACnBC,MAAAA,IAAI,sBAAEH,UAAU,CAACG,IAAb,+DAAqBD,kBAAkB,CAACC,IADzB;AAEnBZ,MAAAA,EAAE,oBAAES,UAAU,CAACT,EAAb,2DAAmBW,kBAAkB,CAACX,EAFrB;AAGnBC,MAAAA,IAAI,sBAAEQ,UAAU,CAACR,IAAb,+DAAqBU,kBAAkB,CAACV,IAHzB;AAInBC,MAAAA,IAAI,sBAAEO,UAAU,CAACP,IAAb,+DAAqBS,kBAAkB,CAACT;AAJzB,KAArB;AAMD;;AAED,QAAMW,cAAsC,GAAG,EAAE,GAAGT;AAAL,GAA/C;;AACA,MAAIM,MAAJ,EAAY;AAAA;;AACVG,IAAAA,cAAc,CAACR,QAAf,uBAA0BK,MAAM,CAACL,QAAjC,+DAA6CD,mBAAmB,CAACC,QAAjE;AACAQ,IAAAA,cAAc,CAACP,MAAf,qBAAwBI,MAAM,CAACJ,MAA/B,2DAAyCF,mBAAmB,CAACE,MAA7D;AACD;;AAED,SAAO,EAAE,GAAGK,kBAAL;AAAyB,OAAGE;AAA5B,GAAP;AACD,CA1BM","sourcesContent":["import type {\n RequiredAnimationParams,\n AnimationParams,\n TimingConfig,\n} from \"../../types\";\n\nconst DefaultParameters = {\n to: 1,\n loop: false,\n yoyo: false,\n immediate: true,\n};\n\nconst DefaultTimingConfig = {\n duration: 1000,\n easing: (t: number) => t,\n};\n\n/**\n * Resolves parameters from optional values to a single object\n * @param toOrParams Params or to value\n * @param config timing/spring configuration\n */\nexport const getResolvedParams = (\n toOrParams: number | AnimationParams,\n config?: TimingConfig\n): RequiredAnimationParams & Required<TimingConfig> => {\n let resolvedParameters: RequiredAnimationParams = {\n ...DefaultParameters,\n };\n\n if (typeof toOrParams === \"number\") {\n resolvedParameters.to = toOrParams;\n } else {\n resolvedParameters = {\n from: toOrParams.from ?? resolvedParameters.from,\n to: toOrParams.to ?? resolvedParameters.to,\n loop: toOrParams.loop ?? resolvedParameters.loop,\n yoyo: toOrParams.yoyo ?? resolvedParameters.yoyo,\n };\n }\n\n const resolvedConfig: Required<TimingConfig> = { ...DefaultTimingConfig };\n if (config) {\n resolvedConfig.duration = config.duration ?? DefaultTimingConfig.duration;\n resolvedConfig.easing = config.easing ?? DefaultTimingConfig.easing;\n }\n\n return { ...resolvedParameters, ...resolvedConfig };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["timing.ts"],"names":["timing","t","duration","easing","loop","yoyo","state","current","finished","n","Math","max","min"],"mappings":";;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,MAAM,GAAG,CACpBC,CADoB,EAEpBC,QAFoB,EAGpBC,MAHoB,EAIpBC,IAJoB,EAKpBC,IALoB,EAMpBC,KANoB,KAOjB;AACH,MAAIC,OAAO,GAAGN,CAAC,GAAGC,QAAlB;AACA,MAAI;AAAEM,IAAAA;AAAF,MAAeF,KAAnB,CAFG,CAGH;;AACA,MAAIC,OAAO,IAAI,GAAX,IAAkB,CAACH,IAAvB,EAA6B;AAC3BI,IAAAA,QAAQ,GAAG,IAAX;AACAD,IAAAA,OAAO,GAAG,GAAV;AACD,GAPE,CAQH;;;AACA,MAAIE,CAAC,GAAGF,OAAO,GAAG,CAAlB;;AACA,MAAIF,IAAJ,EAAU;AACRI,IAAAA,CAAC,GAAGF,OAAO,GAAG,GAAV,IAAiB,GAAjB,GAAuB,IAAKA,OAAO,GAAG,CAAtC,GAA2CA,OAAO,GAAG,CAAzD;AACD,GAFD,MAEO,IAAI,CAACH,IAAL,EAAW;AAChB,QAAIG,OAAO,IAAI,GAAf,EAAoB;AAClBE,MAAAA,CAAC,GAAG,GAAJ;AACD;AACF;;AACDF,EAAAA,OAAO,GAAGJ,MAAM,CAACO,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYD,IAAI,CAACE,GAAL,CAAS,CAAT,EAAYH,CAAZ,CAAZ,CAAD,CAAhB;AACA,SAAO;AACLF,IAAAA,OADK;AAELC,IAAAA;AAFK,GAAP;AAID,CA7BM","sourcesContent":["import type { AnimationState } from \"../../../types\";\n\n/**\n * Calculates and returns a timing value based on the\n * input parameters. The timing value is a number between\n * 0 and 1.\n * @param t\n * @param duration\n * @param easing\n * @param loop\n * @param yoyo\n * @param onStop\n * @returns\n */\nexport const timing = (\n t: number,\n duration: number,\n easing: (t: number) => number,\n loop: boolean,\n yoyo: boolean,\n state: AnimationState\n) => {\n let current = t / duration;\n let { finished } = state;\n // Side effect to stop animation when duration is reached (if loop is false)\n if (current >= 1.0 && !loop) {\n finished = true;\n current = 1.0;\n }\n // calculate return value\n let n = current % 1;\n if (yoyo) {\n n = current % 2.0 >= 1.0 ? 1 - (current % 1) : current % 1;\n } else if (!loop) {\n if (current >= 1.0) {\n n = 1.0;\n }\n }\n current = easing(Math.max(0, Math.min(1, n)));\n return {\n current,\n finished,\n };\n};\n"]}
1
+ {"version":3,"sources":["timing.ts"],"names":["timing","t","duration","easing","loop","yoyo","state","current","finished","n","Math","max","min"],"mappings":";;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,MAAM,GAAG,CACpBC,CADoB,EAEpBC,QAFoB,EAGpBC,MAHoB,EAIpBC,IAJoB,EAKpBC,IALoB,EAMpBC,KANoB,KAOjB;AACH,MAAIC,OAAO,GAAGN,CAAC,GAAGC,QAAlB;AACA,MAAI;AAAEM,IAAAA;AAAF,MAAeF,KAAnB,CAFG,CAGH;;AACA,MAAIC,OAAO,IAAI,GAAX,IAAkB,CAACH,IAAvB,EAA6B;AAC3BI,IAAAA,QAAQ,GAAG,IAAX;AACAD,IAAAA,OAAO,GAAG,GAAV;AACD,GAPE,CAQH;;;AACA,MAAIE,CAAC,GAAGF,OAAO,GAAG,CAAlB;;AACA,MAAIF,IAAJ,EAAU;AACRI,IAAAA,CAAC,GAAGF,OAAO,GAAG,GAAV,IAAiB,GAAjB,GAAuB,IAAKA,OAAO,GAAG,CAAtC,GAA2CA,OAAO,GAAG,CAAzD;AACD,GAFD,MAEO,IAAI,CAACH,IAAL,EAAW;AAChB,QAAIG,OAAO,IAAI,GAAf,EAAoB;AAClBE,MAAAA,CAAC,GAAG,GAAJ;AACD;AACF;;AACDF,EAAAA,OAAO,GAAGJ,MAAM,CAACO,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYD,IAAI,CAACE,GAAL,CAAS,CAAT,EAAYH,CAAZ,CAAZ,CAAD,CAAhB;AACA,SAAO;AACLF,IAAAA,OADK;AAELC,IAAAA;AAFK,GAAP;AAID,CA7BM","sourcesContent":["import type { AnimationState } from \"../../../values/types\";\n\n/**\n * Calculates and returns a timing value based on the\n * input parameters. The timing value is a number between\n * 0 and 1.\n * @param t\n * @param duration\n * @param easing\n * @param loop\n * @param yoyo\n * @param onStop\n * @returns\n */\nexport const timing = (\n t: number,\n duration: number,\n easing: (t: number) => number,\n loop: boolean,\n yoyo: boolean,\n state: AnimationState\n) => {\n let current = t / duration;\n let { finished } = state;\n // Side effect to stop animation when duration is reached (if loop is false)\n if (current >= 1.0 && !loop) {\n finished = true;\n current = 1.0;\n }\n // calculate return value\n let n = current % 1;\n if (yoyo) {\n n = current % 2.0 >= 1.0 ? 1 - (current % 1) : current % 1;\n } else if (!loop) {\n if (current >= 1.0) {\n n = 1.0;\n }\n }\n current = easing(Math.max(0, Math.min(1, n)));\n return {\n current,\n finished,\n };\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["runTiming.ts"],"names":["runTiming","value","toOrParams","config","callback","resolvedParameters","animation"],"mappings":";;;;;;;AAOA;;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,SAAS,GAAG,CACvBC,KADuB,EAEvBC,UAFuB,EAGvBC,MAHuB,EAIvBC,QAJuB,KAKL;AAClB,QAAMC,kBAAkB,GAAG,kCAAkBH,UAAlB,EAA8BC,MAA9B,CAA3B;AACA,QAAMG,SAAS,GAAG,gCAAaD,kBAAb,EAAiCJ,KAAjC,EAAwCG,QAAxC,CAAlB;AACAH,EAAAA,KAAK,CAACK,SAAN,GAAkBA,SAAlB;AACA,SAAOA,SAAP;AACD,CAVM","sourcesContent":["import type { SkiaValue, SkiaAnimation } from \"../../values/types\";\nimport type {\n AnimationParams,\n TimingConfig,\n AnimationCallback,\n} from \"../types\";\n\nimport { getResolvedParams } from \"./functions\";\nimport { createTiming } from \"./createTiming\";\n/**\n * Creates a new animation on an existing value that will be driven by\n * an animation value. The value will be run from / to the value in\n * params and modified by the provided easing curve for the length of\n * the duration. When the value has reached its desired \"to\" value the\n * animation will be stopped.\n *\n * @param value The value to animate\n * @param toOrParams To value or Animation parameters\n * @param config Spring or timing configuration\n * @returns an animation value that can be used to start/stop\n * the animation.\n */\nexport const runTiming = (\n value: SkiaValue<number>,\n toOrParams: number | AnimationParams,\n config?: TimingConfig,\n callback?: AnimationCallback\n): SkiaAnimation => {\n const resolvedParameters = getResolvedParams(toOrParams, config);\n const animation = createTiming(resolvedParameters, value, callback);\n value.animation = animation;\n return animation;\n};\n"]}
@@ -7,7 +7,7 @@ exports.useTiming = void 0;
7
7
 
8
8
  var _react = require("react");
9
9
 
10
- var _useValue = require("../../hooks/useValue");
10
+ var _useValue = require("../../values/hooks/useValue");
11
11
 
12
12
  var _functions = require("./functions");
13
13
 
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useTiming.ts"],"names":["useTiming","toOrParams","config","callback","prevCfgRef","resolvedParameters","nextParams","equals","current","value","from","prevAnimationRef","prevParamsRef","animation","undefined","a","b","JSON","stringify"],"mappings":";;;;;;;AAAA;;AAQA;;AAEA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,SAAS,GAAG,CACvBC,UADuB,EAEvBC,MAFuB,EAGvBC,QAHuB,KAIO;AAAA;;AAC9B;AACA;AACA,QAAMC,UAAU,GAAG,oBAAnB;AACA,QAAMC,kBAAkB,GAAG,oBAAQ,MAAM;AACvC,UAAMC,UAAU,GAAG,kCAAkBL,UAAlB,EAA8BC,MAA9B,CAAnB;;AACA,QAAI,CAACK,MAAM,CAACH,UAAU,CAACI,OAAZ,EAAqBF,UAArB,CAAX,EAA6C;AAC3CF,MAAAA,UAAU,CAACI,OAAX,GAAqBF,UAArB;AACD;;AACD,WAAOF,UAAU,CAACI,OAAlB;AACD,GAN0B,EAMxB,CAACN,MAAD,EAASD,UAAT,CANwB,CAA3B,CAJ8B,CAY9B;;AACA,QAAMQ,KAAK,GAAG,iDAASJ,kBAAkB,CAACK,IAA5B,yEAAoC,CAApC,CAAd,CAb8B,CAe9B;AACA;;AACA,QAAMC,gBAAgB,GAAG,oBAAzB;AACA,QAAMC,aAAa,GAAG,oBAAtB;AACA,QAAMC,SAAS,GAAG,oBAAQ,MAAM;AAC9B,QAAI,CAACN,MAAM,CAACK,aAAa,CAACJ,OAAf,EAAwBH,kBAAxB,CAAX,EAAwD;AACtDO,MAAAA,aAAa,CAACJ,OAAd,GAAwBH,kBAAxB;AACAM,MAAAA,gBAAgB,CAACH,OAAjB,GAA2B,gCACzBH,kBADyB,EAEzBI,KAFyB,EAGzBN,QAHyB,CAA3B;AAKD;;AACD,WAAOQ,gBAAgB,CAACH,OAAxB;AACD,GAViB,EAUf,CAACL,QAAD,EAAWE,kBAAX,EAA+BI,KAA/B,CAVe,CAAlB,CAnB8B,CA+B9B;;AACA,wBAAU,MAAM;AACdA,IAAAA,KAAK,CAACI,SAAN,GAAkBA,SAAlB;AACA,WAAO,MAAOJ,KAAK,CAACI,SAAN,GAAkBC,SAAhC;AACD,GAHD,EAGG,CAACD,SAAD,EAAYJ,KAAZ,CAHH,EAhC8B,CAqC9B;;AACA,SAAOA,KAAP;AACD,CA3CM;;;;AA6CP,MAAMF,MAAM,GAAG,CAASQ,CAAT,EAAgBC,CAAhB,KAA0B;AACvC,SAAOC,IAAI,CAACC,SAAL,CAAeH,CAAf,MAAsBE,IAAI,CAACC,SAAL,CAAeF,CAAf,CAA7B;AACD,CAFD","sourcesContent":["import { useEffect, useMemo, useRef } from \"react\";\n\nimport type { SkiaReadonlyValue, SkiaAnimation } from \"../../values/types\";\nimport type {\n AnimationParams,\n TimingConfig,\n AnimationCallback,\n} from \"../types\";\nimport { useValue } from \"../../values/hooks/useValue\";\n\nimport { getResolvedParams } from \"./functions\";\nimport { createTiming } from \"./createTiming\";\n\n/**\n * Creats an animation value that will run whenever\n * the animation parameters change. The animation start immediately.\n * @param toOrParams\n * @param config\n * @returns A value that is animated\n */\nexport const useTiming = (\n toOrParams: number | AnimationParams,\n config?: TimingConfig,\n callback?: AnimationCallback\n): SkiaReadonlyValue<number> => {\n // Resolve parameters - keep a cached version to avoid\n // unnecesary re-renders.\n const prevCfgRef = useRef<ReturnType<typeof getResolvedParams>>();\n const resolvedParameters = useMemo(() => {\n const nextParams = getResolvedParams(toOrParams, config);\n if (!equals(prevCfgRef.current, nextParams)) {\n prevCfgRef.current = nextParams;\n }\n return prevCfgRef.current!;\n }, [config, toOrParams]);\n\n // Create value\n const value = useValue(resolvedParameters.from ?? 0);\n\n // Create timing animation - keep a cached version to avoid\n // uneccessary recreation of animations\n const prevAnimationRef = useRef<SkiaAnimation>();\n const prevParamsRef = useRef<typeof resolvedParameters>();\n const animation = useMemo(() => {\n if (!equals(prevParamsRef.current, resolvedParameters)) {\n prevParamsRef.current = resolvedParameters;\n prevAnimationRef.current = createTiming(\n resolvedParameters,\n value,\n callback\n );\n }\n return prevAnimationRef.current!;\n }, [callback, resolvedParameters, value]);\n\n // Run animation on the value - and stop it on unmount\n useEffect(() => {\n value.animation = animation;\n return () => (value.animation = undefined);\n }, [animation, value]);\n\n // Return the value that is animated\n return value;\n};\n\nconst equals = <T1, T2>(a: T1, b: T2) => {\n return JSON.stringify(a) === JSON.stringify(b);\n};\n"]}