@shopify/react-native-skia 0.1.178 → 0.1.180

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 (26) hide show
  1. package/cpp/rnskia/RNSkView.h +5 -3
  2. package/cpp/rnskia/dom/nodes/JsiImageFilterNodes.h +10 -9
  3. package/lib/commonjs/dom/nodes/paint/ImageFilters.js +10 -2
  4. package/lib/commonjs/dom/nodes/paint/ImageFilters.js.map +1 -1
  5. package/lib/commonjs/external/reanimated/moduleWrapper.d.ts +2 -2
  6. package/lib/commonjs/external/reanimated/moduleWrapper.js +33 -37
  7. package/lib/commonjs/external/reanimated/moduleWrapper.js.map +1 -1
  8. package/lib/commonjs/external/reanimated/renderHelpers.js +2 -6
  9. package/lib/commonjs/external/reanimated/renderHelpers.js.map +1 -1
  10. package/lib/commonjs/external/reanimated/useSharedValueEffect.js +1 -1
  11. package/lib/commonjs/external/reanimated/useSharedValueEffect.js.map +1 -1
  12. package/lib/module/dom/nodes/paint/ImageFilters.js +10 -2
  13. package/lib/module/dom/nodes/paint/ImageFilters.js.map +1 -1
  14. package/lib/module/external/reanimated/moduleWrapper.d.ts +2 -2
  15. package/lib/module/external/reanimated/moduleWrapper.js +31 -32
  16. package/lib/module/external/reanimated/moduleWrapper.js.map +1 -1
  17. package/lib/module/external/reanimated/renderHelpers.js +3 -7
  18. package/lib/module/external/reanimated/renderHelpers.js.map +1 -1
  19. package/lib/module/external/reanimated/useSharedValueEffect.js +2 -2
  20. package/lib/module/external/reanimated/useSharedValueEffect.js.map +1 -1
  21. package/lib/typescript/src/external/reanimated/moduleWrapper.d.ts +2 -2
  22. package/package.json +1 -1
  23. package/src/dom/nodes/paint/ImageFilters.ts +8 -2
  24. package/src/external/reanimated/moduleWrapper.ts +36 -38
  25. package/src/external/reanimated/renderHelpers.ts +3 -7
  26. package/src/external/reanimated/useSharedValueEffect.ts +2 -2
@@ -88,10 +88,11 @@ protected:
88
88
 
89
89
  class RNSkImageCanvasProvider : public RNSkCanvasProvider {
90
90
  public:
91
- RNSkImageCanvasProvider(std::function<void()> requestRedraw, float width,
91
+ RNSkImageCanvasProvider(std::shared_ptr<RNSkPlatformContext> context,
92
+ std::function<void()> requestRedraw, float width,
92
93
  float height)
93
94
  : RNSkCanvasProvider(requestRedraw), _width(width), _height(height) {
94
- _surface = SkSurface::MakeRasterN32Premul(_width, _height);
95
+ _surface = context->makeOffscreenSurface(_width, _height);
95
96
  }
96
97
 
97
98
  /**
@@ -261,8 +262,9 @@ public:
261
262
  Renders the view into an SkImage instead of the screen.
262
263
  */
263
264
  sk_sp<SkImage> makeImageSnapshot(std::shared_ptr<SkRect> bounds) {
265
+
264
266
  auto provider = std::make_shared<RNSkImageCanvasProvider>(
265
- std::bind(&RNSkView::requestRedraw, this),
267
+ getPlatformContext(), std::bind(&RNSkView::requestRedraw, this),
266
268
  _canvasProvider->getScaledWidth(), _canvasProvider->getScaledHeight());
267
269
 
268
270
  _renderer->renderImmediate(provider);
@@ -158,20 +158,21 @@ public:
158
158
  : JsiBaseImageFilterNode(context, "skDisplacementMapImageFilter") {}
159
159
 
160
160
  void decorate(DeclarationContext *context) override {
161
-
161
+ decorateChildren(context);
162
162
  auto channelX =
163
163
  getColorChannelFromStringValue(_channelXProp->value().getAsString());
164
164
  auto channelY =
165
165
  getColorChannelFromStringValue(_channelYProp->value().getAsString());
166
166
  auto scale = _scaleProp->value().getAsNumber();
167
-
168
- auto displacement = context->getImageFilters()->pop();
169
-
170
- auto color = context->getImageFilters()->pop();
171
-
172
- composeAndPush(context, SkImageFilters::DisplacementMap(
173
- channelX, channelY, scale, displacement,
174
- color ? color : nullptr));
167
+ auto shader = context->getShaders()->pop();
168
+ if (!shader) {
169
+ throw std::runtime_error("DisplacementMap expects a shader as child");
170
+ }
171
+ auto map = SkImageFilters::Shader(shader);
172
+ auto input = context->getImageFilters()->pop();
173
+ auto imgf = SkImageFilters::DisplacementMap(channelX, channelY, scale, map,
174
+ input ? input : nullptr);
175
+ context->getImageFilters()->push(imgf);
175
176
  }
176
177
 
177
178
  protected:
@@ -83,13 +83,21 @@ class DisplacementMapImageFilterNode extends ImageFilterDeclaration {
83
83
  }
84
84
 
85
85
  decorate(ctx) {
86
+ this.decorateChildren(ctx);
86
87
  const {
87
88
  channelX,
88
89
  channelY,
89
90
  scale
90
91
  } = this.props;
91
- const imgf = this.Skia.ImageFilter.MakeDisplacementMap(_types.ColorChannel[(0, _datatypes.enumKey)(channelX)], _types.ColorChannel[(0, _datatypes.enumKey)(channelY)], scale, ctx.imageFilters.pop(), this.input(ctx));
92
- this.composeAndPush(ctx, imgf);
92
+ const shader = ctx.shaders.pop();
93
+
94
+ if (!shader) {
95
+ throw new Error("DisplacementMap expects a shader as child");
96
+ }
97
+
98
+ const map = this.Skia.ImageFilter.MakeShader(shader, null);
99
+ const imgf = this.Skia.ImageFilter.MakeDisplacementMap(_types.ColorChannel[(0, _datatypes.enumKey)(channelX)], _types.ColorChannel[(0, _datatypes.enumKey)(channelY)], scale, map, this.input(ctx));
100
+ ctx.imageFilters.push(imgf);
93
101
  }
94
102
 
95
103
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Black","Float32Array","of","MakeInnerShadow","Skia","shadowOnly","dx","dy","sigmaX","sigmaY","color","input","sourceGraphic","ImageFilter","MakeColorFilter","ColorFilter","MakeBlend","BlendMode","Dst","sourceAlpha","SrcIn","f1","SrcOut","f2","MakeOffset","f3","MakeBlur","TileMode","Decal","f4","MakeCompose","SrcOver","ImageFilterDeclaration","JsiDeclarationNode","constructor","ctx","type","props","DeclarationType","imageFilters","pop","composeAndPush","imgf1","save","decorateChildren","imgf2","popAllAsOne","cf","colorFilters","restore","imgf","push","OffsetImageFilterNode","NodeType","OffsetImageFilter","decorate","x","y","DisplacementMapImageFilterNode","DisplacementMapImageFilter","channelX","channelY","scale","MakeDisplacementMap","ColorChannel","enumKey","BlurImageFilterNode","BlurImageFilter","mode","blur","sigma","processRadius","DropShadowImageFilterNode","DropShadowImageFilter","cl","inner","Color","factory","bind","MakeDropShadowOnly","MakeDropShadow","MorphologyOperator","MorphologyImageFilterNode","MorphologyImageFilter","operator","r","radius","Erode","MakeErode","MakeDilate","BlendImageFilterNode","BlendImageFilter","a","b","Error","RuntimeShaderImageFilterNode","RuntimeShaderImageFilter","source","uniforms","rtb","RuntimeShaderBuilder","processUniforms","MakeRuntimeShader"],"sources":["ImageFilters.ts"],"sourcesContent":["import type { SkImageFilter, SkColor, Skia } from \"../../../skia/types\";\nimport {\n BlendMode,\n ColorChannel,\n processUniforms,\n TileMode,\n} from \"../../../skia/types\";\nimport type {\n BlendImageFilterProps,\n BlurImageFilterProps,\n DeclarationContext,\n DisplacementMapImageFilterProps,\n DropShadowImageFilterProps,\n MorphologyImageFilterProps,\n OffsetImageFilterProps,\n RuntimeShaderImageFilterProps,\n} from \"../../types\";\nimport { DeclarationType, NodeType } from \"../../types\";\nimport { processRadius, enumKey } from \"../datatypes\";\nimport type { NodeContext } from \"../Node\";\nimport { JsiDeclarationNode } from \"../Node\";\n\nconst Black = Float32Array.of(0, 0, 0, 1);\n\nconst MakeInnerShadow = (\n Skia: Skia,\n shadowOnly: boolean | undefined,\n dx: number,\n dy: number,\n sigmaX: number,\n sigmaY: number,\n color: SkColor,\n input: SkImageFilter | null\n) => {\n const sourceGraphic = Skia.ImageFilter.MakeColorFilter(\n Skia.ColorFilter.MakeBlend(Black, BlendMode.Dst),\n null\n );\n const sourceAlpha = Skia.ImageFilter.MakeColorFilter(\n Skia.ColorFilter.MakeBlend(Black, BlendMode.SrcIn),\n null\n );\n const f1 = Skia.ImageFilter.MakeColorFilter(\n Skia.ColorFilter.MakeBlend(color, BlendMode.SrcOut),\n null\n );\n const f2 = Skia.ImageFilter.MakeOffset(dx, dy, f1);\n const f3 = Skia.ImageFilter.MakeBlur(sigmaX, sigmaY, TileMode.Decal, f2);\n const f4 = Skia.ImageFilter.MakeBlend(BlendMode.SrcIn, sourceAlpha, f3);\n if (shadowOnly) {\n return f4;\n }\n return Skia.ImageFilter.MakeCompose(\n input,\n Skia.ImageFilter.MakeBlend(BlendMode.SrcOver, sourceGraphic, f4)\n );\n};\n\nexport abstract class ImageFilterDeclaration<P> extends JsiDeclarationNode<P> {\n constructor(ctx: NodeContext, type: NodeType, props: P) {\n super(ctx, DeclarationType.ImageFilter, type, props);\n }\n\n protected input(ctx: DeclarationContext) {\n return ctx.imageFilters.pop() ?? null;\n }\n\n protected composeAndPush(ctx: DeclarationContext, imgf1: SkImageFilter) {\n ctx.save();\n this.decorateChildren(ctx);\n let imgf2 = ctx.imageFilters.popAllAsOne();\n const cf = ctx.colorFilters.popAllAsOne();\n ctx.restore();\n if (cf) {\n imgf2 = this.Skia.ImageFilter.MakeCompose(\n imgf2 ?? null,\n this.Skia.ImageFilter.MakeColorFilter(cf, null)\n );\n }\n const imgf = imgf2\n ? this.Skia.ImageFilter.MakeCompose(imgf1, imgf2)\n : imgf1;\n ctx.imageFilters.push(imgf);\n }\n}\n\nexport class OffsetImageFilterNode extends ImageFilterDeclaration<OffsetImageFilterProps> {\n constructor(ctx: NodeContext, props: OffsetImageFilterProps) {\n super(ctx, NodeType.OffsetImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n this.decorateChildren(ctx);\n const { x, y } = this.props;\n const imgf = this.Skia.ImageFilter.MakeOffset(x, y, null);\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class DisplacementMapImageFilterNode extends ImageFilterDeclaration<DisplacementMapImageFilterProps> {\n constructor(ctx: NodeContext, props: DisplacementMapImageFilterProps) {\n super(ctx, NodeType.DisplacementMapImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { channelX, channelY, scale } = this.props;\n const imgf = this.Skia.ImageFilter.MakeDisplacementMap(\n ColorChannel[enumKey(channelX)],\n ColorChannel[enumKey(channelY)],\n scale,\n ctx.imageFilters.pop()!,\n this.input(ctx)\n );\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class BlurImageFilterNode extends ImageFilterDeclaration<BlurImageFilterProps> {\n constructor(ctx: NodeContext, props: BlurImageFilterProps) {\n super(ctx, NodeType.BlurImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { mode, blur } = this.props;\n const sigma = processRadius(this.Skia, blur);\n const imgf = this.Skia.ImageFilter.MakeBlur(\n sigma.x,\n sigma.y,\n TileMode[enumKey(mode)],\n this.input(ctx)\n );\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class DropShadowImageFilterNode extends ImageFilterDeclaration<DropShadowImageFilterProps> {\n constructor(ctx: NodeContext, props: DropShadowImageFilterProps) {\n super(ctx, NodeType.DropShadowImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { dx, dy, blur, shadowOnly, color: cl, inner } = this.props;\n const color = this.Skia.Color(cl);\n let factory;\n if (inner) {\n factory = MakeInnerShadow.bind(null, this.Skia, shadowOnly);\n } else {\n factory = shadowOnly\n ? this.Skia.ImageFilter.MakeDropShadowOnly.bind(this.Skia.ImageFilter)\n : this.Skia.ImageFilter.MakeDropShadow.bind(this.Skia.ImageFilter);\n }\n const imgf = factory(dx, dy, blur, blur, color, this.input(ctx));\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport enum MorphologyOperator {\n Erode,\n Dilate,\n}\n\nexport class MorphologyImageFilterNode extends ImageFilterDeclaration<MorphologyImageFilterProps> {\n constructor(ctx: NodeContext, props: MorphologyImageFilterProps) {\n super(ctx, NodeType.MorphologyImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { operator } = this.props;\n const r = processRadius(this.Skia, this.props.radius);\n let imgf;\n if (MorphologyOperator[enumKey(operator)] === MorphologyOperator.Erode) {\n imgf = this.Skia.ImageFilter.MakeErode(r.x, r.y, this.input(ctx));\n } else {\n imgf = this.Skia.ImageFilter.MakeDilate(r.x, r.y, this.input(ctx));\n }\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class BlendImageFilterNode extends ImageFilterDeclaration<BlendImageFilterProps> {\n constructor(ctx: NodeContext, props: BlendImageFilterProps) {\n super(ctx, NodeType.BlendImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { mode } = this.props;\n const a = ctx.imageFilters.pop();\n const b = ctx.imageFilters.pop();\n if (!a || !b) {\n throw new Error(\"BlendImageFilter requires two image filters\");\n }\n const imgf = this.Skia.ImageFilter.MakeBlend(mode, a, b);\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class RuntimeShaderImageFilterNode extends ImageFilterDeclaration<RuntimeShaderImageFilterProps> {\n constructor(ctx: NodeContext, props: RuntimeShaderImageFilterProps) {\n super(ctx, NodeType.RuntimeShaderImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { source, uniforms } = this.props;\n const rtb = this.Skia.RuntimeShaderBuilder(source);\n if (uniforms) {\n processUniforms(source, uniforms, rtb);\n }\n const imgf = this.Skia.ImageFilter.MakeRuntimeShader(\n rtb,\n null,\n this.input(ctx)\n );\n this.composeAndPush(ctx, imgf);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["Black","Float32Array","of","MakeInnerShadow","Skia","shadowOnly","dx","dy","sigmaX","sigmaY","color","input","sourceGraphic","ImageFilter","MakeColorFilter","ColorFilter","MakeBlend","BlendMode","Dst","sourceAlpha","SrcIn","f1","SrcOut","f2","MakeOffset","f3","MakeBlur","TileMode","Decal","f4","MakeCompose","SrcOver","ImageFilterDeclaration","JsiDeclarationNode","constructor","ctx","type","props","DeclarationType","imageFilters","pop","composeAndPush","imgf1","save","decorateChildren","imgf2","popAllAsOne","cf","colorFilters","restore","imgf","push","OffsetImageFilterNode","NodeType","OffsetImageFilter","decorate","x","y","DisplacementMapImageFilterNode","DisplacementMapImageFilter","channelX","channelY","scale","shader","shaders","Error","map","MakeShader","MakeDisplacementMap","ColorChannel","enumKey","BlurImageFilterNode","BlurImageFilter","mode","blur","sigma","processRadius","DropShadowImageFilterNode","DropShadowImageFilter","cl","inner","Color","factory","bind","MakeDropShadowOnly","MakeDropShadow","MorphologyOperator","MorphologyImageFilterNode","MorphologyImageFilter","operator","r","radius","Erode","MakeErode","MakeDilate","BlendImageFilterNode","BlendImageFilter","a","b","RuntimeShaderImageFilterNode","RuntimeShaderImageFilter","source","uniforms","rtb","RuntimeShaderBuilder","processUniforms","MakeRuntimeShader"],"sources":["ImageFilters.ts"],"sourcesContent":["import type { SkImageFilter, SkColor, Skia } from \"../../../skia/types\";\nimport {\n BlendMode,\n ColorChannel,\n processUniforms,\n TileMode,\n} from \"../../../skia/types\";\nimport type {\n BlendImageFilterProps,\n BlurImageFilterProps,\n DeclarationContext,\n DisplacementMapImageFilterProps,\n DropShadowImageFilterProps,\n MorphologyImageFilterProps,\n OffsetImageFilterProps,\n RuntimeShaderImageFilterProps,\n} from \"../../types\";\nimport { DeclarationType, NodeType } from \"../../types\";\nimport { processRadius, enumKey } from \"../datatypes\";\nimport type { NodeContext } from \"../Node\";\nimport { JsiDeclarationNode } from \"../Node\";\n\nconst Black = Float32Array.of(0, 0, 0, 1);\n\nconst MakeInnerShadow = (\n Skia: Skia,\n shadowOnly: boolean | undefined,\n dx: number,\n dy: number,\n sigmaX: number,\n sigmaY: number,\n color: SkColor,\n input: SkImageFilter | null\n) => {\n const sourceGraphic = Skia.ImageFilter.MakeColorFilter(\n Skia.ColorFilter.MakeBlend(Black, BlendMode.Dst),\n null\n );\n const sourceAlpha = Skia.ImageFilter.MakeColorFilter(\n Skia.ColorFilter.MakeBlend(Black, BlendMode.SrcIn),\n null\n );\n const f1 = Skia.ImageFilter.MakeColorFilter(\n Skia.ColorFilter.MakeBlend(color, BlendMode.SrcOut),\n null\n );\n const f2 = Skia.ImageFilter.MakeOffset(dx, dy, f1);\n const f3 = Skia.ImageFilter.MakeBlur(sigmaX, sigmaY, TileMode.Decal, f2);\n const f4 = Skia.ImageFilter.MakeBlend(BlendMode.SrcIn, sourceAlpha, f3);\n if (shadowOnly) {\n return f4;\n }\n return Skia.ImageFilter.MakeCompose(\n input,\n Skia.ImageFilter.MakeBlend(BlendMode.SrcOver, sourceGraphic, f4)\n );\n};\n\nexport abstract class ImageFilterDeclaration<P> extends JsiDeclarationNode<P> {\n constructor(ctx: NodeContext, type: NodeType, props: P) {\n super(ctx, DeclarationType.ImageFilter, type, props);\n }\n\n protected input(ctx: DeclarationContext) {\n return ctx.imageFilters.pop() ?? null;\n }\n\n protected composeAndPush(ctx: DeclarationContext, imgf1: SkImageFilter) {\n ctx.save();\n this.decorateChildren(ctx);\n let imgf2 = ctx.imageFilters.popAllAsOne();\n const cf = ctx.colorFilters.popAllAsOne();\n ctx.restore();\n if (cf) {\n imgf2 = this.Skia.ImageFilter.MakeCompose(\n imgf2 ?? null,\n this.Skia.ImageFilter.MakeColorFilter(cf, null)\n );\n }\n const imgf = imgf2\n ? this.Skia.ImageFilter.MakeCompose(imgf1, imgf2)\n : imgf1;\n ctx.imageFilters.push(imgf);\n }\n}\n\nexport class OffsetImageFilterNode extends ImageFilterDeclaration<OffsetImageFilterProps> {\n constructor(ctx: NodeContext, props: OffsetImageFilterProps) {\n super(ctx, NodeType.OffsetImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n this.decorateChildren(ctx);\n const { x, y } = this.props;\n const imgf = this.Skia.ImageFilter.MakeOffset(x, y, null);\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class DisplacementMapImageFilterNode extends ImageFilterDeclaration<DisplacementMapImageFilterProps> {\n constructor(ctx: NodeContext, props: DisplacementMapImageFilterProps) {\n super(ctx, NodeType.DisplacementMapImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n this.decorateChildren(ctx);\n const { channelX, channelY, scale } = this.props;\n const shader = ctx.shaders.pop();\n if (!shader) {\n throw new Error(\"DisplacementMap expects a shader as child\");\n }\n const map = this.Skia.ImageFilter.MakeShader(shader, null);\n const imgf = this.Skia.ImageFilter.MakeDisplacementMap(\n ColorChannel[enumKey(channelX)],\n ColorChannel[enumKey(channelY)],\n scale,\n map,\n this.input(ctx)\n );\n ctx.imageFilters.push(imgf);\n }\n}\n\nexport class BlurImageFilterNode extends ImageFilterDeclaration<BlurImageFilterProps> {\n constructor(ctx: NodeContext, props: BlurImageFilterProps) {\n super(ctx, NodeType.BlurImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { mode, blur } = this.props;\n const sigma = processRadius(this.Skia, blur);\n const imgf = this.Skia.ImageFilter.MakeBlur(\n sigma.x,\n sigma.y,\n TileMode[enumKey(mode)],\n this.input(ctx)\n );\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class DropShadowImageFilterNode extends ImageFilterDeclaration<DropShadowImageFilterProps> {\n constructor(ctx: NodeContext, props: DropShadowImageFilterProps) {\n super(ctx, NodeType.DropShadowImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { dx, dy, blur, shadowOnly, color: cl, inner } = this.props;\n const color = this.Skia.Color(cl);\n let factory;\n if (inner) {\n factory = MakeInnerShadow.bind(null, this.Skia, shadowOnly);\n } else {\n factory = shadowOnly\n ? this.Skia.ImageFilter.MakeDropShadowOnly.bind(this.Skia.ImageFilter)\n : this.Skia.ImageFilter.MakeDropShadow.bind(this.Skia.ImageFilter);\n }\n const imgf = factory(dx, dy, blur, blur, color, this.input(ctx));\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport enum MorphologyOperator {\n Erode,\n Dilate,\n}\n\nexport class MorphologyImageFilterNode extends ImageFilterDeclaration<MorphologyImageFilterProps> {\n constructor(ctx: NodeContext, props: MorphologyImageFilterProps) {\n super(ctx, NodeType.MorphologyImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { operator } = this.props;\n const r = processRadius(this.Skia, this.props.radius);\n let imgf;\n if (MorphologyOperator[enumKey(operator)] === MorphologyOperator.Erode) {\n imgf = this.Skia.ImageFilter.MakeErode(r.x, r.y, this.input(ctx));\n } else {\n imgf = this.Skia.ImageFilter.MakeDilate(r.x, r.y, this.input(ctx));\n }\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class BlendImageFilterNode extends ImageFilterDeclaration<BlendImageFilterProps> {\n constructor(ctx: NodeContext, props: BlendImageFilterProps) {\n super(ctx, NodeType.BlendImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { mode } = this.props;\n const a = ctx.imageFilters.pop();\n const b = ctx.imageFilters.pop();\n if (!a || !b) {\n throw new Error(\"BlendImageFilter requires two image filters\");\n }\n const imgf = this.Skia.ImageFilter.MakeBlend(mode, a, b);\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class RuntimeShaderImageFilterNode extends ImageFilterDeclaration<RuntimeShaderImageFilterProps> {\n constructor(ctx: NodeContext, props: RuntimeShaderImageFilterProps) {\n super(ctx, NodeType.RuntimeShaderImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { source, uniforms } = this.props;\n const rtb = this.Skia.RuntimeShaderBuilder(source);\n if (uniforms) {\n processUniforms(source, uniforms, rtb);\n }\n const imgf = this.Skia.ImageFilter.MakeRuntimeShader(\n rtb,\n null,\n this.input(ctx)\n );\n this.composeAndPush(ctx, imgf);\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { SharedValueType } from "../../renderer/processors/Animations";
2
- export declare const HAS_REANIMATED: boolean;
3
- export declare function throwOnIncompatibleReanimatedVersion(): void;
2
+ export declare const HAS_REANIMATED2: boolean;
3
+ export declare const HAS_REANIMATED3: boolean;
4
4
  export declare const useSharedValue: any;
5
5
  export declare const startMapper: any;
6
6
  export declare const stopMapper: any;
@@ -3,69 +3,65 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.stopMapper = exports.startMapper = exports.runOnJS = exports.isSharedValue = exports.HAS_REANIMATED = void 0;
7
- exports.throwOnIncompatibleReanimatedVersion = throwOnIncompatibleReanimatedVersion;
8
- exports.useSharedValue = void 0;
6
+ exports.useSharedValue = exports.stopMapper = exports.startMapper = exports.runOnJS = exports.isSharedValue = exports.HAS_REANIMATED3 = exports.HAS_REANIMATED2 = void 0;
9
7
 
10
8
  var _react = require("react");
11
9
 
12
10
  var _Reanimated, _Reanimated2, _Reanimated3, _Reanimated4;
13
11
 
12
+ // This one is needed for the deprecated useSharedValue function
13
+ // We can remove it once we remove the deprecation
14
14
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
- let Reanimated;
15
+ let Reanimated2; // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
16
 
17
- try {
18
- Reanimated = require("react-native-reanimated");
19
- } catch (e) {// Ignore
20
- }
21
-
22
- const HAS_REANIMATED = !!Reanimated;
23
- exports.HAS_REANIMATED = HAS_REANIMATED;
17
+ let Reanimated3;
18
+ let reanimatedVersion;
24
19
 
25
- function throwOnMissingReanimated() {
26
- throw new Error("Reanimated was not found, make sure react-native-reanimated package is installed if you want to use \
27
- react-naitve-skia's integration layer API.");
28
- }
29
-
30
- let ReanimatedVersionTested = false;
20
+ try {
21
+ Reanimated2 = require("react-native-reanimated");
22
+ reanimatedVersion = // eslint-disable-next-line import/extensions
23
+ require("react-native-reanimated/package.json").version;
31
24
 
32
- function throwOnIncompatibleReanimatedVersion() {
33
- if (ReanimatedVersionTested) {
34
- // we avoid testing version more than once as it won't change and we throw
35
- // an error when version is incompatible
36
- return;
25
+ if (reanimatedVersion && (reanimatedVersion >= "3.0.0" || reanimatedVersion.includes("3.0.0-"))) {
26
+ Reanimated3 = Reanimated2;
37
27
  }
28
+ } catch (e) {}
38
29
 
39
- ReanimatedVersionTested = true;
40
-
41
- const reanimatedVersion = // eslint-disable-next-line import/extensions
42
- require("react-native-reanimated/package.json").version; // The first compatible version is 3.0.0 but we need to exclude 3.0.0 pre-releases
43
- // as they have limited support for the used API.
30
+ const HAS_REANIMATED2 = !!Reanimated2;
31
+ exports.HAS_REANIMATED2 = HAS_REANIMATED2;
32
+ const HAS_REANIMATED3 = !!Reanimated3;
33
+ exports.HAS_REANIMATED3 = HAS_REANIMATED3;
44
34
 
35
+ function throwOnMissingReanimated2() {
36
+ if (!HAS_REANIMATED2) {
37
+ throw new Error("Reanimated was not found, make sure react-native-reanimated package is installed if you want to use \
38
+ react-naitve-skia's integration layer API.");
39
+ }
40
+ }
45
41
 
46
- if (!reanimatedVersion || reanimatedVersion < "3.0.0" || reanimatedVersion.includes("3.0.0-")) {
42
+ function throwOnMissingReanimated3() {
43
+ if (!HAS_REANIMATED3) {
47
44
  throw new Error(`Reanimated version ${reanimatedVersion} is not supported, please upgrade to 3.0.0 or newer.`);
48
45
  }
46
+
47
+ throwOnMissingReanimated2();
49
48
  }
50
49
 
51
- const useSharedValue = ((_Reanimated = Reanimated) === null || _Reanimated === void 0 ? void 0 : _Reanimated.useSharedValue) || (value => (0, _react.useMemo)(() => ({
50
+ const useSharedValue = ((_Reanimated = Reanimated2) === null || _Reanimated === void 0 ? void 0 : _Reanimated.useSharedValue) || (value => (0, _react.useMemo)(() => ({
52
51
  value
53
52
  }), [value]));
54
53
 
55
54
  exports.useSharedValue = useSharedValue;
56
- const startMapper = ((_Reanimated2 = Reanimated) === null || _Reanimated2 === void 0 ? void 0 : _Reanimated2.startMapper) || throwOnMissingReanimated;
55
+ const startMapper = ((_Reanimated2 = Reanimated2) === null || _Reanimated2 === void 0 ? void 0 : _Reanimated2.startMapper) || throwOnMissingReanimated2;
57
56
  exports.startMapper = startMapper;
58
- const stopMapper = ((_Reanimated3 = Reanimated) === null || _Reanimated3 === void 0 ? void 0 : _Reanimated3.stopMapper) || throwOnMissingReanimated;
57
+ const stopMapper = ((_Reanimated3 = Reanimated2) === null || _Reanimated3 === void 0 ? void 0 : _Reanimated3.stopMapper) || throwOnMissingReanimated2;
59
58
  exports.stopMapper = stopMapper;
60
- const runOnJS = ((_Reanimated4 = Reanimated) === null || _Reanimated4 === void 0 ? void 0 : _Reanimated4.runOnJS) || throwOnMissingReanimated;
59
+ const runOnJS = ((_Reanimated4 = Reanimated2) === null || _Reanimated4 === void 0 ? void 0 : _Reanimated4.runOnJS) || throwOnMissingReanimated2;
61
60
  exports.runOnJS = runOnJS;
62
61
 
63
62
  const isSharedValue = value => {
64
- if (!Reanimated) {
65
- throwOnMissingReanimated();
66
- }
67
-
68
- return !!value && Reanimated.isSharedValue(value);
63
+ throwOnMissingReanimated3();
64
+ return !!value && Reanimated3.isSharedValue(value);
69
65
  };
70
66
 
71
67
  exports.isSharedValue = isSharedValue;
@@ -1 +1 @@
1
- {"version":3,"names":["Reanimated","require","e","HAS_REANIMATED","throwOnMissingReanimated","Error","ReanimatedVersionTested","throwOnIncompatibleReanimatedVersion","reanimatedVersion","version","includes","useSharedValue","value","useMemo","startMapper","stopMapper","runOnJS","isSharedValue"],"sources":["moduleWrapper.ts"],"sourcesContent":["import { useMemo } from \"react\";\n\nimport type { SharedValueType } from \"../../renderer/processors/Animations\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Reanimated: any;\n\ntry {\n Reanimated = require(\"react-native-reanimated\");\n} catch (e) {\n // Ignore\n}\n\nexport const HAS_REANIMATED = !!Reanimated;\n\nfunction throwOnMissingReanimated() {\n throw new Error(\n \"Reanimated was not found, make sure react-native-reanimated package is installed if you want to use \\\n react-naitve-skia's integration layer API.\"\n );\n}\n\nlet ReanimatedVersionTested = false;\n\nexport function throwOnIncompatibleReanimatedVersion() {\n if (ReanimatedVersionTested) {\n // we avoid testing version more than once as it won't change and we throw\n // an error when version is incompatible\n return;\n }\n ReanimatedVersionTested = true;\n const reanimatedVersion =\n // eslint-disable-next-line import/extensions\n require(\"react-native-reanimated/package.json\").version;\n // The first compatible version is 3.0.0 but we need to exclude 3.0.0 pre-releases\n // as they have limited support for the used API.\n if (\n !reanimatedVersion ||\n reanimatedVersion < \"3.0.0\" ||\n reanimatedVersion.includes(\"3.0.0-\")\n ) {\n throw new Error(\n `Reanimated version ${reanimatedVersion} is not supported, please upgrade to 3.0.0 or newer.`\n );\n }\n}\n\nexport const useSharedValue =\n Reanimated?.useSharedValue ||\n ((value: number) => useMemo(() => ({ value }), [value]));\n\nexport const startMapper = Reanimated?.startMapper || throwOnMissingReanimated;\nexport const stopMapper = Reanimated?.stopMapper || throwOnMissingReanimated;\nexport const runOnJS = Reanimated?.runOnJS || throwOnMissingReanimated;\nexport const isSharedValue = <T>(\n value: unknown\n): value is SharedValueType<T> => {\n if (!Reanimated) {\n throwOnMissingReanimated();\n }\n return !!value && Reanimated.isSharedValue(value);\n};\n"],"mappings":";;;;;;;;;AAAA;;;;AAIA;AACA,IAAIA,UAAJ;;AAEA,IAAI;EACFA,UAAU,GAAGC,OAAO,CAAC,yBAAD,CAApB;AACD,CAFD,CAEE,OAAOC,CAAP,EAAU,CACV;AACD;;AAEM,MAAMC,cAAc,GAAG,CAAC,CAACH,UAAzB;;;AAEP,SAASI,wBAAT,GAAoC;EAClC,MAAM,IAAIC,KAAJ,CACJ;AACJ,+CAFQ,CAAN;AAID;;AAED,IAAIC,uBAAuB,GAAG,KAA9B;;AAEO,SAASC,oCAAT,GAAgD;EACrD,IAAID,uBAAJ,EAA6B;IAC3B;IACA;IACA;EACD;;EACDA,uBAAuB,GAAG,IAA1B;;EACA,MAAME,iBAAiB,GACrB;EACAP,OAAO,CAAC,sCAAD,CAAP,CAAgDQ,OAFlD,CAPqD,CAUrD;EACA;;;EACA,IACE,CAACD,iBAAD,IACAA,iBAAiB,GAAG,OADpB,IAEAA,iBAAiB,CAACE,QAAlB,CAA2B,QAA3B,CAHF,EAIE;IACA,MAAM,IAAIL,KAAJ,CACH,sBAAqBG,iBAAkB,sDADpC,CAAN;EAGD;AACF;;AAEM,MAAMG,cAAc,GACzB,gBAAAX,UAAU,UAAV,kDAAYW,cAAZ,MACEC,KAAD,IAAmB,IAAAC,cAAA,EAAQ,OAAO;EAAED;AAAF,CAAP,CAAR,EAA2B,CAACA,KAAD,CAA3B,CADpB,CADK;;;AAIA,MAAME,WAAW,GAAG,iBAAAd,UAAU,UAAV,oDAAYc,WAAZ,KAA2BV,wBAA/C;;AACA,MAAMW,UAAU,GAAG,iBAAAf,UAAU,UAAV,oDAAYe,UAAZ,KAA0BX,wBAA7C;;AACA,MAAMY,OAAO,GAAG,iBAAAhB,UAAU,UAAV,oDAAYgB,OAAZ,KAAuBZ,wBAAvC;;;AACA,MAAMa,aAAa,GACxBL,KAD2B,IAEK;EAChC,IAAI,CAACZ,UAAL,EAAiB;IACfI,wBAAwB;EACzB;;EACD,OAAO,CAAC,CAACQ,KAAF,IAAWZ,UAAU,CAACiB,aAAX,CAAyBL,KAAzB,CAAlB;AACD,CAPM"}
1
+ {"version":3,"names":["Reanimated2","Reanimated3","reanimatedVersion","require","version","includes","e","HAS_REANIMATED2","HAS_REANIMATED3","throwOnMissingReanimated2","Error","throwOnMissingReanimated3","useSharedValue","value","useMemo","startMapper","stopMapper","runOnJS","isSharedValue"],"sources":["moduleWrapper.ts"],"sourcesContent":["import { useMemo } from \"react\";\n\nimport type { SharedValueType } from \"../../renderer/processors/Animations\";\n\n// This one is needed for the deprecated useSharedValue function\n// We can remove it once we remove the deprecation\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Reanimated2: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Reanimated3: any;\nlet reanimatedVersion: string;\n\ntry {\n Reanimated2 = require(\"react-native-reanimated\");\n reanimatedVersion =\n // eslint-disable-next-line import/extensions\n require(\"react-native-reanimated/package.json\").version;\n if (\n reanimatedVersion &&\n (reanimatedVersion >= \"3.0.0\" || reanimatedVersion.includes(\"3.0.0-\"))\n ) {\n Reanimated3 = Reanimated2;\n }\n} catch (e) {}\n\nexport const HAS_REANIMATED2 = !!Reanimated2;\nexport const HAS_REANIMATED3 = !!Reanimated3;\n\nfunction throwOnMissingReanimated2() {\n if (!HAS_REANIMATED2) {\n throw new Error(\n \"Reanimated was not found, make sure react-native-reanimated package is installed if you want to use \\\n react-naitve-skia's integration layer API.\"\n );\n }\n}\n\nfunction throwOnMissingReanimated3() {\n if (!HAS_REANIMATED3) {\n throw new Error(\n `Reanimated version ${reanimatedVersion} is not supported, please upgrade to 3.0.0 or newer.`\n );\n }\n throwOnMissingReanimated2();\n}\n\nexport const useSharedValue =\n Reanimated2?.useSharedValue ||\n ((value: number) => useMemo(() => ({ value }), [value]));\n\nexport const startMapper =\n Reanimated2?.startMapper || throwOnMissingReanimated2;\nexport const stopMapper = Reanimated2?.stopMapper || throwOnMissingReanimated2;\nexport const runOnJS = Reanimated2?.runOnJS || throwOnMissingReanimated2;\nexport const isSharedValue = <T>(\n value: unknown\n): value is SharedValueType<T> => {\n throwOnMissingReanimated3();\n return !!value && Reanimated3.isSharedValue(value);\n};\n"],"mappings":";;;;;;;AAAA;;;;AAIA;AACA;AACA;AACA,IAAIA,WAAJ,C,CACA;;AACA,IAAIC,WAAJ;AACA,IAAIC,iBAAJ;;AAEA,IAAI;EACFF,WAAW,GAAGG,OAAO,CAAC,yBAAD,CAArB;EACAD,iBAAiB,GACf;EACAC,OAAO,CAAC,sCAAD,CAAP,CAAgDC,OAFlD;;EAGA,IACEF,iBAAiB,KAChBA,iBAAiB,IAAI,OAArB,IAAgCA,iBAAiB,CAACG,QAAlB,CAA2B,QAA3B,CADhB,CADnB,EAGE;IACAJ,WAAW,GAAGD,WAAd;EACD;AACF,CAXD,CAWE,OAAOM,CAAP,EAAU,CAAE;;AAEP,MAAMC,eAAe,GAAG,CAAC,CAACP,WAA1B;;AACA,MAAMQ,eAAe,GAAG,CAAC,CAACP,WAA1B;;;AAEP,SAASQ,yBAAT,GAAqC;EACnC,IAAI,CAACF,eAAL,EAAsB;IACpB,MAAM,IAAIG,KAAJ,CACJ;AACN,iDAFU,CAAN;EAID;AACF;;AAED,SAASC,yBAAT,GAAqC;EACnC,IAAI,CAACH,eAAL,EAAsB;IACpB,MAAM,IAAIE,KAAJ,CACH,sBAAqBR,iBAAkB,sDADpC,CAAN;EAGD;;EACDO,yBAAyB;AAC1B;;AAEM,MAAMG,cAAc,GACzB,gBAAAZ,WAAW,UAAX,kDAAaY,cAAb,MACEC,KAAD,IAAmB,IAAAC,cAAA,EAAQ,OAAO;EAAED;AAAF,CAAP,CAAR,EAA2B,CAACA,KAAD,CAA3B,CADpB,CADK;;;AAIA,MAAME,WAAW,GACtB,iBAAAf,WAAW,UAAX,oDAAae,WAAb,KAA4BN,yBADvB;;AAEA,MAAMO,UAAU,GAAG,iBAAAhB,WAAW,UAAX,oDAAagB,UAAb,KAA2BP,yBAA9C;;AACA,MAAMQ,OAAO,GAAG,iBAAAjB,WAAW,UAAX,oDAAaiB,OAAb,KAAwBR,yBAAxC;;;AACA,MAAMS,aAAa,GACxBL,KAD2B,IAEK;EAChCF,yBAAyB;EACzB,OAAO,CAAC,CAACE,KAAF,IAAWZ,WAAW,CAACiB,aAAZ,CAA0BL,KAA1B,CAAlB;AACD,CALM"}
@@ -14,7 +14,7 @@ var _moduleWrapper = require("./moduleWrapper");
14
14
  const _bindings = new WeakMap();
15
15
 
16
16
  function extractReanimatedProps(props) {
17
- if (!_moduleWrapper.HAS_REANIMATED) {
17
+ if (!_moduleWrapper.HAS_REANIMATED3) {
18
18
  return [props, {}];
19
19
  }
20
20
 
@@ -40,14 +40,10 @@ function extractReanimatedProps(props) {
40
40
  }
41
41
 
42
42
  function bindReanimatedProps(container, node, reanimatedProps) {
43
- if (!_moduleWrapper.HAS_REANIMATED) {
43
+ if (!_moduleWrapper.HAS_REANIMATED3) {
44
44
  return;
45
45
  }
46
46
 
47
- if (__DEV__) {
48
- (0, _moduleWrapper.throwOnIncompatibleReanimatedVersion)();
49
- }
50
-
51
47
  const sharedValues = Object.values(reanimatedProps);
52
48
 
53
49
  const previousMapperId = _bindings.get(node);
@@ -1 +1 @@
1
- {"version":3,"names":["_bindings","WeakMap","extractReanimatedProps","props","HAS_REANIMATED","reanimatedProps","otherProps","propName","propValue","isSharedValue","value","bindReanimatedProps","container","node","__DEV__","throwOnIncompatibleReanimatedVersion","sharedValues","Object","values","previousMapperId","get","undefined","stopMapper","length","viewId","getNativeId","SkiaViewApi","global","mapperId","startMapper","setProp","requestRedraw","redraw","set"],"sources":["renderHelpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable reanimated/js-function-in-worklet */\nimport type { Container } from \"../../renderer/Container\";\nimport type { AnimatedProps } from \"../../renderer/processors\";\nimport type { Node } from \"../../dom/types\";\n\nimport {\n startMapper,\n stopMapper,\n isSharedValue,\n throwOnIncompatibleReanimatedVersion,\n HAS_REANIMATED,\n} from \"./moduleWrapper\";\n\nconst _bindings = new WeakMap<Node<unknown>, unknown>();\n\nexport function extractReanimatedProps(props: AnimatedProps<any>) {\n if (!HAS_REANIMATED) {\n return [props, {}];\n }\n const reanimatedProps = {} as AnimatedProps<any>;\n const otherProps = {} as AnimatedProps<any>;\n for (const propName in props) {\n if (propName === \"children\") {\n continue;\n }\n const propValue = props[propName];\n if (isSharedValue(propValue)) {\n reanimatedProps[propName] = propValue;\n otherProps[propName] = propValue.value;\n } else {\n otherProps[propName] = propValue;\n }\n }\n return [otherProps, reanimatedProps];\n}\n\nexport function bindReanimatedProps(\n container: Container,\n node: Node<any>,\n reanimatedProps: AnimatedProps<any>\n) {\n if (!HAS_REANIMATED) {\n return;\n }\n if (__DEV__) {\n throwOnIncompatibleReanimatedVersion();\n }\n const sharedValues = Object.values(reanimatedProps);\n const previousMapperId = _bindings.get(node);\n if (previousMapperId !== undefined) {\n stopMapper(previousMapperId);\n }\n if (sharedValues.length > 0) {\n const viewId = container.getNativeId();\n const { SkiaViewApi } = global;\n const mapperId = startMapper(() => {\n \"worklet\";\n for (const propName in reanimatedProps) {\n node && node.setProp(propName, reanimatedProps[propName].value);\n }\n // On React Native we use the SkiaViewApi to redraw because it can\n // run on the worklet thread (container.redraw can't)\n // if SkiaViewApi is undefined, we are on web and container.redraw()\n // can safely be invoked\n if (SkiaViewApi) {\n SkiaViewApi.requestRedraw(viewId);\n } else {\n container.redraw();\n }\n }, sharedValues);\n _bindings.set(node, mapperId);\n }\n}\n"],"mappings":";;;;;;;;AAMA;;AANA;;AACA;AAaA,MAAMA,SAAS,GAAG,IAAIC,OAAJ,EAAlB;;AAEO,SAASC,sBAAT,CAAgCC,KAAhC,EAA2D;EAChE,IAAI,CAACC,6BAAL,EAAqB;IACnB,OAAO,CAACD,KAAD,EAAQ,EAAR,CAAP;EACD;;EACD,MAAME,eAAe,GAAG,EAAxB;EACA,MAAMC,UAAU,GAAG,EAAnB;;EACA,KAAK,MAAMC,QAAX,IAAuBJ,KAAvB,EAA8B;IAC5B,IAAII,QAAQ,KAAK,UAAjB,EAA6B;MAC3B;IACD;;IACD,MAAMC,SAAS,GAAGL,KAAK,CAACI,QAAD,CAAvB;;IACA,IAAI,IAAAE,4BAAA,EAAcD,SAAd,CAAJ,EAA8B;MAC5BH,eAAe,CAACE,QAAD,CAAf,GAA4BC,SAA5B;MACAF,UAAU,CAACC,QAAD,CAAV,GAAuBC,SAAS,CAACE,KAAjC;IACD,CAHD,MAGO;MACLJ,UAAU,CAACC,QAAD,CAAV,GAAuBC,SAAvB;IACD;EACF;;EACD,OAAO,CAACF,UAAD,EAAaD,eAAb,CAAP;AACD;;AAEM,SAASM,mBAAT,CACLC,SADK,EAELC,IAFK,EAGLR,eAHK,EAIL;EACA,IAAI,CAACD,6BAAL,EAAqB;IACnB;EACD;;EACD,IAAIU,OAAJ,EAAa;IACX,IAAAC,mDAAA;EACD;;EACD,MAAMC,YAAY,GAAGC,MAAM,CAACC,MAAP,CAAcb,eAAd,CAArB;;EACA,MAAMc,gBAAgB,GAAGnB,SAAS,CAACoB,GAAV,CAAcP,IAAd,CAAzB;;EACA,IAAIM,gBAAgB,KAAKE,SAAzB,EAAoC;IAClC,IAAAC,yBAAA,EAAWH,gBAAX;EACD;;EACD,IAAIH,YAAY,CAACO,MAAb,GAAsB,CAA1B,EAA6B;IAC3B,MAAMC,MAAM,GAAGZ,SAAS,CAACa,WAAV,EAAf;IACA,MAAM;MAAEC;IAAF,IAAkBC,MAAxB;IACA,MAAMC,QAAQ,GAAG,IAAAC,0BAAA,EAAY,MAAM;MACjC;;MACA,KAAK,MAAMtB,QAAX,IAAuBF,eAAvB,EAAwC;QACtCQ,IAAI,IAAIA,IAAI,CAACiB,OAAL,CAAavB,QAAb,EAAuBF,eAAe,CAACE,QAAD,CAAf,CAA0BG,KAAjD,CAAR;MACD,CAJgC,CAKjC;MACA;MACA;MACA;;;MACA,IAAIgB,WAAJ,EAAiB;QACfA,WAAW,CAACK,aAAZ,CAA0BP,MAA1B;MACD,CAFD,MAEO;QACLZ,SAAS,CAACoB,MAAV;MACD;IACF,CAdgB,EAcdhB,YAdc,CAAjB;;IAeAhB,SAAS,CAACiC,GAAV,CAAcpB,IAAd,EAAoBe,QAApB;EACD;AACF"}
1
+ {"version":3,"names":["_bindings","WeakMap","extractReanimatedProps","props","HAS_REANIMATED3","reanimatedProps","otherProps","propName","propValue","isSharedValue","value","bindReanimatedProps","container","node","sharedValues","Object","values","previousMapperId","get","undefined","stopMapper","length","viewId","getNativeId","SkiaViewApi","global","mapperId","startMapper","setProp","requestRedraw","redraw","set"],"sources":["renderHelpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable reanimated/js-function-in-worklet */\nimport type { Container } from \"../../renderer/Container\";\nimport type { AnimatedProps } from \"../../renderer/processors\";\nimport type { Node } from \"../../dom/types\";\n\nimport {\n startMapper,\n stopMapper,\n isSharedValue,\n HAS_REANIMATED3,\n} from \"./moduleWrapper\";\n\nconst _bindings = new WeakMap<Node<unknown>, unknown>();\n\nexport function extractReanimatedProps(props: AnimatedProps<any>) {\n if (!HAS_REANIMATED3) {\n return [props, {}];\n }\n const reanimatedProps = {} as AnimatedProps<any>;\n const otherProps = {} as AnimatedProps<any>;\n for (const propName in props) {\n if (propName === \"children\") {\n continue;\n }\n const propValue = props[propName];\n if (isSharedValue(propValue)) {\n reanimatedProps[propName] = propValue;\n otherProps[propName] = propValue.value;\n } else {\n otherProps[propName] = propValue;\n }\n }\n return [otherProps, reanimatedProps];\n}\n\nexport function bindReanimatedProps(\n container: Container,\n node: Node<any>,\n reanimatedProps: AnimatedProps<any>\n) {\n if (!HAS_REANIMATED3) {\n return;\n }\n const sharedValues = Object.values(reanimatedProps);\n const previousMapperId = _bindings.get(node);\n if (previousMapperId !== undefined) {\n stopMapper(previousMapperId);\n }\n if (sharedValues.length > 0) {\n const viewId = container.getNativeId();\n const { SkiaViewApi } = global;\n const mapperId = startMapper(() => {\n \"worklet\";\n for (const propName in reanimatedProps) {\n node && node.setProp(propName, reanimatedProps[propName].value);\n }\n // On React Native we use the SkiaViewApi to redraw because it can\n // run on the worklet thread (container.redraw can't)\n // if SkiaViewApi is undefined, we are on web and container.redraw()\n // can safely be invoked\n if (SkiaViewApi) {\n SkiaViewApi.requestRedraw(viewId);\n } else {\n container.redraw();\n }\n }, sharedValues);\n _bindings.set(node, mapperId);\n }\n}\n"],"mappings":";;;;;;;;AAMA;;AANA;;AACA;AAYA,MAAMA,SAAS,GAAG,IAAIC,OAAJ,EAAlB;;AAEO,SAASC,sBAAT,CAAgCC,KAAhC,EAA2D;EAChE,IAAI,CAACC,8BAAL,EAAsB;IACpB,OAAO,CAACD,KAAD,EAAQ,EAAR,CAAP;EACD;;EACD,MAAME,eAAe,GAAG,EAAxB;EACA,MAAMC,UAAU,GAAG,EAAnB;;EACA,KAAK,MAAMC,QAAX,IAAuBJ,KAAvB,EAA8B;IAC5B,IAAII,QAAQ,KAAK,UAAjB,EAA6B;MAC3B;IACD;;IACD,MAAMC,SAAS,GAAGL,KAAK,CAACI,QAAD,CAAvB;;IACA,IAAI,IAAAE,4BAAA,EAAcD,SAAd,CAAJ,EAA8B;MAC5BH,eAAe,CAACE,QAAD,CAAf,GAA4BC,SAA5B;MACAF,UAAU,CAACC,QAAD,CAAV,GAAuBC,SAAS,CAACE,KAAjC;IACD,CAHD,MAGO;MACLJ,UAAU,CAACC,QAAD,CAAV,GAAuBC,SAAvB;IACD;EACF;;EACD,OAAO,CAACF,UAAD,EAAaD,eAAb,CAAP;AACD;;AAEM,SAASM,mBAAT,CACLC,SADK,EAELC,IAFK,EAGLR,eAHK,EAIL;EACA,IAAI,CAACD,8BAAL,EAAsB;IACpB;EACD;;EACD,MAAMU,YAAY,GAAGC,MAAM,CAACC,MAAP,CAAcX,eAAd,CAArB;;EACA,MAAMY,gBAAgB,GAAGjB,SAAS,CAACkB,GAAV,CAAcL,IAAd,CAAzB;;EACA,IAAII,gBAAgB,KAAKE,SAAzB,EAAoC;IAClC,IAAAC,yBAAA,EAAWH,gBAAX;EACD;;EACD,IAAIH,YAAY,CAACO,MAAb,GAAsB,CAA1B,EAA6B;IAC3B,MAAMC,MAAM,GAAGV,SAAS,CAACW,WAAV,EAAf;IACA,MAAM;MAAEC;IAAF,IAAkBC,MAAxB;IACA,MAAMC,QAAQ,GAAG,IAAAC,0BAAA,EAAY,MAAM;MACjC;;MACA,KAAK,MAAMpB,QAAX,IAAuBF,eAAvB,EAAwC;QACtCQ,IAAI,IAAIA,IAAI,CAACe,OAAL,CAAarB,QAAb,EAAuBF,eAAe,CAACE,QAAD,CAAf,CAA0BG,KAAjD,CAAR;MACD,CAJgC,CAKjC;MACA;MACA;MACA;;;MACA,IAAIc,WAAJ,EAAiB;QACfA,WAAW,CAACK,aAAZ,CAA0BP,MAA1B;MACD,CAFD,MAEO;QACLV,SAAS,CAACkB,MAAV;MACD;IACF,CAdgB,EAcdhB,YAdc,CAAjB;;IAeAd,SAAS,CAAC+B,GAAV,CAAclB,IAAd,EAAoBa,QAApB;EACD;AACF"}
@@ -24,7 +24,7 @@ const useSharedValueEffect = function (cb, value) {
24
24
  Learn more at https://shopify.github.io/react-native-skia/.`);
25
25
  const input = (0, _moduleWrapper.useSharedValue)(0);
26
26
  (0, _react.useEffect)(() => {
27
- if (!_moduleWrapper.HAS_REANIMATED) {
27
+ if (!_moduleWrapper.HAS_REANIMATED2) {
28
28
  console.warn("Reanimated was not found and the useSharedValueEffect hook will have no effect.");
29
29
  } else {
30
30
  // Start a mapper in Reanimated
@@ -1 +1 @@
1
- {"version":3,"names":["useSharedValueEffect","cb","value","values","console","warn","input","useSharedValue","useEffect","HAS_REANIMATED","mapperId","startMapper","runOnJS","stopMapper","undefined"],"sources":["useSharedValueEffect.ts"],"sourcesContent":["import { useEffect } from \"react\";\n\nimport type { SharedValueType } from \"../../renderer/processors/Animations\";\n\nimport {\n HAS_REANIMATED,\n useSharedValue,\n runOnJS,\n startMapper,\n stopMapper,\n} from \"./moduleWrapper\";\n\n/**\n * Connects a shared value from reanimated to a SkiaView or Canvas\n * so whenever the shared value changes the SkiaView will redraw.\n * @param cb Callback that will be called whenever the shared value changes.\n * @param values One or more shared values to listen for.\n */\nexport const useSharedValueEffect = <T = number>(\n cb: () => void,\n value: SharedValueType<T>,\n ...values: SharedValueType<T>[]\n) => {\n console.warn(\n `useSharedValueEffect() is now deprecated, you can use Reanimated values directly.\nLearn more at https://shopify.github.io/react-native-skia/.`\n );\n const input = useSharedValue(0);\n\n useEffect(() => {\n if (!HAS_REANIMATED) {\n console.warn(\n \"Reanimated was not found and the useSharedValueEffect hook will have no effect.\"\n );\n } else {\n // Start a mapper in Reanimated\n const mapperId = startMapper(\n () => {\n \"worklet\";\n runOnJS(cb)();\n },\n [value, ...values],\n [input]\n );\n // Return unregistering the mapper\n return () => {\n if (stopMapper && mapperId !== undefined) {\n stopMapper(mapperId);\n }\n };\n }\n return () => {};\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [input, value, ...values]);\n};\n"],"mappings":";;;;;;;AAAA;;AAIA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,oBAAoB,GAAG,UAClCC,EADkC,EAElCC,KAFkC,EAI/B;EAAA,kCADAC,MACA;IADAA,MACA;EAAA;;EACHC,OAAO,CAACC,IAAR,CACG;AACL,4DAFE;EAIA,MAAMC,KAAK,GAAG,IAAAC,6BAAA,EAAe,CAAf,CAAd;EAEA,IAAAC,gBAAA,EAAU,MAAM;IACd,IAAI,CAACC,6BAAL,EAAqB;MACnBL,OAAO,CAACC,IAAR,CACE,iFADF;IAGD,CAJD,MAIO;MACL;MACA,MAAMK,QAAQ,GAAG,IAAAC,0BAAA,EACf,MAAM;QACJ;;QACA,IAAAC,sBAAA,EAAQX,EAAR;MACD,CAJc,EAKf,CAACC,KAAD,EAAQ,GAAGC,MAAX,CALe,EAMf,CAACG,KAAD,CANe,CAAjB,CAFK,CAUL;;MACA,OAAO,MAAM;QACX,IAAIO,yBAAA,IAAcH,QAAQ,KAAKI,SAA/B,EAA0C;UACxC,IAAAD,yBAAA,EAAWH,QAAX;QACD;MACF,CAJD;IAKD;;IACD,OAAO,MAAM,CAAE,CAAf,CAtBc,CAuBd;EACD,CAxBD,EAwBG,CAACJ,KAAD,EAAQJ,KAAR,EAAe,GAAGC,MAAlB,CAxBH;AAyBD,CApCM"}
1
+ {"version":3,"names":["useSharedValueEffect","cb","value","values","console","warn","input","useSharedValue","useEffect","HAS_REANIMATED2","mapperId","startMapper","runOnJS","stopMapper","undefined"],"sources":["useSharedValueEffect.ts"],"sourcesContent":["import { useEffect } from \"react\";\n\nimport type { SharedValueType } from \"../../renderer/processors/Animations\";\n\nimport {\n HAS_REANIMATED2,\n useSharedValue,\n runOnJS,\n startMapper,\n stopMapper,\n} from \"./moduleWrapper\";\n\n/**\n * Connects a shared value from reanimated to a SkiaView or Canvas\n * so whenever the shared value changes the SkiaView will redraw.\n * @param cb Callback that will be called whenever the shared value changes.\n * @param values One or more shared values to listen for.\n */\nexport const useSharedValueEffect = <T = number>(\n cb: () => void,\n value: SharedValueType<T>,\n ...values: SharedValueType<T>[]\n) => {\n console.warn(\n `useSharedValueEffect() is now deprecated, you can use Reanimated values directly.\nLearn more at https://shopify.github.io/react-native-skia/.`\n );\n const input = useSharedValue(0);\n\n useEffect(() => {\n if (!HAS_REANIMATED2) {\n console.warn(\n \"Reanimated was not found and the useSharedValueEffect hook will have no effect.\"\n );\n } else {\n // Start a mapper in Reanimated\n const mapperId = startMapper(\n () => {\n \"worklet\";\n runOnJS(cb)();\n },\n [value, ...values],\n [input]\n );\n // Return unregistering the mapper\n return () => {\n if (stopMapper && mapperId !== undefined) {\n stopMapper(mapperId);\n }\n };\n }\n return () => {};\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [input, value, ...values]);\n};\n"],"mappings":";;;;;;;AAAA;;AAIA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,oBAAoB,GAAG,UAClCC,EADkC,EAElCC,KAFkC,EAI/B;EAAA,kCADAC,MACA;IADAA,MACA;EAAA;;EACHC,OAAO,CAACC,IAAR,CACG;AACL,4DAFE;EAIA,MAAMC,KAAK,GAAG,IAAAC,6BAAA,EAAe,CAAf,CAAd;EAEA,IAAAC,gBAAA,EAAU,MAAM;IACd,IAAI,CAACC,8BAAL,EAAsB;MACpBL,OAAO,CAACC,IAAR,CACE,iFADF;IAGD,CAJD,MAIO;MACL;MACA,MAAMK,QAAQ,GAAG,IAAAC,0BAAA,EACf,MAAM;QACJ;;QACA,IAAAC,sBAAA,EAAQX,EAAR;MACD,CAJc,EAKf,CAACC,KAAD,EAAQ,GAAGC,MAAX,CALe,EAMf,CAACG,KAAD,CANe,CAAjB,CAFK,CAUL;;MACA,OAAO,MAAM;QACX,IAAIO,yBAAA,IAAcH,QAAQ,KAAKI,SAA/B,EAA0C;UACxC,IAAAD,yBAAA,EAAWH,QAAX;QACD;MACF,CAJD;IAKD;;IACD,OAAO,MAAM,CAAE,CAAf,CAtBc,CAuBd;EACD,CAxBD,EAwBG,CAACJ,KAAD,EAAQJ,KAAR,EAAe,GAAGC,MAAlB,CAxBH;AAyBD,CApCM"}
@@ -70,13 +70,21 @@ export class DisplacementMapImageFilterNode extends ImageFilterDeclaration {
70
70
  }
71
71
 
72
72
  decorate(ctx) {
73
+ this.decorateChildren(ctx);
73
74
  const {
74
75
  channelX,
75
76
  channelY,
76
77
  scale
77
78
  } = this.props;
78
- const imgf = this.Skia.ImageFilter.MakeDisplacementMap(ColorChannel[enumKey(channelX)], ColorChannel[enumKey(channelY)], scale, ctx.imageFilters.pop(), this.input(ctx));
79
- this.composeAndPush(ctx, imgf);
79
+ const shader = ctx.shaders.pop();
80
+
81
+ if (!shader) {
82
+ throw new Error("DisplacementMap expects a shader as child");
83
+ }
84
+
85
+ const map = this.Skia.ImageFilter.MakeShader(shader, null);
86
+ const imgf = this.Skia.ImageFilter.MakeDisplacementMap(ColorChannel[enumKey(channelX)], ColorChannel[enumKey(channelY)], scale, map, this.input(ctx));
87
+ ctx.imageFilters.push(imgf);
80
88
  }
81
89
 
82
90
  }
@@ -1 +1 @@
1
- {"version":3,"names":["BlendMode","ColorChannel","processUniforms","TileMode","DeclarationType","NodeType","processRadius","enumKey","JsiDeclarationNode","Black","Float32Array","of","MakeInnerShadow","Skia","shadowOnly","dx","dy","sigmaX","sigmaY","color","input","sourceGraphic","ImageFilter","MakeColorFilter","ColorFilter","MakeBlend","Dst","sourceAlpha","SrcIn","f1","SrcOut","f2","MakeOffset","f3","MakeBlur","Decal","f4","MakeCompose","SrcOver","ImageFilterDeclaration","constructor","ctx","type","props","imageFilters","pop","composeAndPush","imgf1","save","decorateChildren","imgf2","popAllAsOne","cf","colorFilters","restore","imgf","push","OffsetImageFilterNode","OffsetImageFilter","decorate","x","y","DisplacementMapImageFilterNode","DisplacementMapImageFilter","channelX","channelY","scale","MakeDisplacementMap","BlurImageFilterNode","BlurImageFilter","mode","blur","sigma","DropShadowImageFilterNode","DropShadowImageFilter","cl","inner","Color","factory","bind","MakeDropShadowOnly","MakeDropShadow","MorphologyOperator","MorphologyImageFilterNode","MorphologyImageFilter","operator","r","radius","Erode","MakeErode","MakeDilate","BlendImageFilterNode","BlendImageFilter","a","b","Error","RuntimeShaderImageFilterNode","RuntimeShaderImageFilter","source","uniforms","rtb","RuntimeShaderBuilder","MakeRuntimeShader"],"sources":["ImageFilters.ts"],"sourcesContent":["import type { SkImageFilter, SkColor, Skia } from \"../../../skia/types\";\nimport {\n BlendMode,\n ColorChannel,\n processUniforms,\n TileMode,\n} from \"../../../skia/types\";\nimport type {\n BlendImageFilterProps,\n BlurImageFilterProps,\n DeclarationContext,\n DisplacementMapImageFilterProps,\n DropShadowImageFilterProps,\n MorphologyImageFilterProps,\n OffsetImageFilterProps,\n RuntimeShaderImageFilterProps,\n} from \"../../types\";\nimport { DeclarationType, NodeType } from \"../../types\";\nimport { processRadius, enumKey } from \"../datatypes\";\nimport type { NodeContext } from \"../Node\";\nimport { JsiDeclarationNode } from \"../Node\";\n\nconst Black = Float32Array.of(0, 0, 0, 1);\n\nconst MakeInnerShadow = (\n Skia: Skia,\n shadowOnly: boolean | undefined,\n dx: number,\n dy: number,\n sigmaX: number,\n sigmaY: number,\n color: SkColor,\n input: SkImageFilter | null\n) => {\n const sourceGraphic = Skia.ImageFilter.MakeColorFilter(\n Skia.ColorFilter.MakeBlend(Black, BlendMode.Dst),\n null\n );\n const sourceAlpha = Skia.ImageFilter.MakeColorFilter(\n Skia.ColorFilter.MakeBlend(Black, BlendMode.SrcIn),\n null\n );\n const f1 = Skia.ImageFilter.MakeColorFilter(\n Skia.ColorFilter.MakeBlend(color, BlendMode.SrcOut),\n null\n );\n const f2 = Skia.ImageFilter.MakeOffset(dx, dy, f1);\n const f3 = Skia.ImageFilter.MakeBlur(sigmaX, sigmaY, TileMode.Decal, f2);\n const f4 = Skia.ImageFilter.MakeBlend(BlendMode.SrcIn, sourceAlpha, f3);\n if (shadowOnly) {\n return f4;\n }\n return Skia.ImageFilter.MakeCompose(\n input,\n Skia.ImageFilter.MakeBlend(BlendMode.SrcOver, sourceGraphic, f4)\n );\n};\n\nexport abstract class ImageFilterDeclaration<P> extends JsiDeclarationNode<P> {\n constructor(ctx: NodeContext, type: NodeType, props: P) {\n super(ctx, DeclarationType.ImageFilter, type, props);\n }\n\n protected input(ctx: DeclarationContext) {\n return ctx.imageFilters.pop() ?? null;\n }\n\n protected composeAndPush(ctx: DeclarationContext, imgf1: SkImageFilter) {\n ctx.save();\n this.decorateChildren(ctx);\n let imgf2 = ctx.imageFilters.popAllAsOne();\n const cf = ctx.colorFilters.popAllAsOne();\n ctx.restore();\n if (cf) {\n imgf2 = this.Skia.ImageFilter.MakeCompose(\n imgf2 ?? null,\n this.Skia.ImageFilter.MakeColorFilter(cf, null)\n );\n }\n const imgf = imgf2\n ? this.Skia.ImageFilter.MakeCompose(imgf1, imgf2)\n : imgf1;\n ctx.imageFilters.push(imgf);\n }\n}\n\nexport class OffsetImageFilterNode extends ImageFilterDeclaration<OffsetImageFilterProps> {\n constructor(ctx: NodeContext, props: OffsetImageFilterProps) {\n super(ctx, NodeType.OffsetImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n this.decorateChildren(ctx);\n const { x, y } = this.props;\n const imgf = this.Skia.ImageFilter.MakeOffset(x, y, null);\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class DisplacementMapImageFilterNode extends ImageFilterDeclaration<DisplacementMapImageFilterProps> {\n constructor(ctx: NodeContext, props: DisplacementMapImageFilterProps) {\n super(ctx, NodeType.DisplacementMapImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { channelX, channelY, scale } = this.props;\n const imgf = this.Skia.ImageFilter.MakeDisplacementMap(\n ColorChannel[enumKey(channelX)],\n ColorChannel[enumKey(channelY)],\n scale,\n ctx.imageFilters.pop()!,\n this.input(ctx)\n );\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class BlurImageFilterNode extends ImageFilterDeclaration<BlurImageFilterProps> {\n constructor(ctx: NodeContext, props: BlurImageFilterProps) {\n super(ctx, NodeType.BlurImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { mode, blur } = this.props;\n const sigma = processRadius(this.Skia, blur);\n const imgf = this.Skia.ImageFilter.MakeBlur(\n sigma.x,\n sigma.y,\n TileMode[enumKey(mode)],\n this.input(ctx)\n );\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class DropShadowImageFilterNode extends ImageFilterDeclaration<DropShadowImageFilterProps> {\n constructor(ctx: NodeContext, props: DropShadowImageFilterProps) {\n super(ctx, NodeType.DropShadowImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { dx, dy, blur, shadowOnly, color: cl, inner } = this.props;\n const color = this.Skia.Color(cl);\n let factory;\n if (inner) {\n factory = MakeInnerShadow.bind(null, this.Skia, shadowOnly);\n } else {\n factory = shadowOnly\n ? this.Skia.ImageFilter.MakeDropShadowOnly.bind(this.Skia.ImageFilter)\n : this.Skia.ImageFilter.MakeDropShadow.bind(this.Skia.ImageFilter);\n }\n const imgf = factory(dx, dy, blur, blur, color, this.input(ctx));\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport enum MorphologyOperator {\n Erode,\n Dilate,\n}\n\nexport class MorphologyImageFilterNode extends ImageFilterDeclaration<MorphologyImageFilterProps> {\n constructor(ctx: NodeContext, props: MorphologyImageFilterProps) {\n super(ctx, NodeType.MorphologyImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { operator } = this.props;\n const r = processRadius(this.Skia, this.props.radius);\n let imgf;\n if (MorphologyOperator[enumKey(operator)] === MorphologyOperator.Erode) {\n imgf = this.Skia.ImageFilter.MakeErode(r.x, r.y, this.input(ctx));\n } else {\n imgf = this.Skia.ImageFilter.MakeDilate(r.x, r.y, this.input(ctx));\n }\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class BlendImageFilterNode extends ImageFilterDeclaration<BlendImageFilterProps> {\n constructor(ctx: NodeContext, props: BlendImageFilterProps) {\n super(ctx, NodeType.BlendImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { mode } = this.props;\n const a = ctx.imageFilters.pop();\n const b = ctx.imageFilters.pop();\n if (!a || !b) {\n throw new Error(\"BlendImageFilter requires two image filters\");\n }\n const imgf = this.Skia.ImageFilter.MakeBlend(mode, a, b);\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class RuntimeShaderImageFilterNode extends ImageFilterDeclaration<RuntimeShaderImageFilterProps> {\n constructor(ctx: NodeContext, props: RuntimeShaderImageFilterProps) {\n super(ctx, NodeType.RuntimeShaderImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { source, uniforms } = this.props;\n const rtb = this.Skia.RuntimeShaderBuilder(source);\n if (uniforms) {\n processUniforms(source, uniforms, rtb);\n }\n const imgf = this.Skia.ImageFilter.MakeRuntimeShader(\n rtb,\n null,\n this.input(ctx)\n );\n this.composeAndPush(ctx, imgf);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["BlendMode","ColorChannel","processUniforms","TileMode","DeclarationType","NodeType","processRadius","enumKey","JsiDeclarationNode","Black","Float32Array","of","MakeInnerShadow","Skia","shadowOnly","dx","dy","sigmaX","sigmaY","color","input","sourceGraphic","ImageFilter","MakeColorFilter","ColorFilter","MakeBlend","Dst","sourceAlpha","SrcIn","f1","SrcOut","f2","MakeOffset","f3","MakeBlur","Decal","f4","MakeCompose","SrcOver","ImageFilterDeclaration","constructor","ctx","type","props","imageFilters","pop","composeAndPush","imgf1","save","decorateChildren","imgf2","popAllAsOne","cf","colorFilters","restore","imgf","push","OffsetImageFilterNode","OffsetImageFilter","decorate","x","y","DisplacementMapImageFilterNode","DisplacementMapImageFilter","channelX","channelY","scale","shader","shaders","Error","map","MakeShader","MakeDisplacementMap","BlurImageFilterNode","BlurImageFilter","mode","blur","sigma","DropShadowImageFilterNode","DropShadowImageFilter","cl","inner","Color","factory","bind","MakeDropShadowOnly","MakeDropShadow","MorphologyOperator","MorphologyImageFilterNode","MorphologyImageFilter","operator","r","radius","Erode","MakeErode","MakeDilate","BlendImageFilterNode","BlendImageFilter","a","b","RuntimeShaderImageFilterNode","RuntimeShaderImageFilter","source","uniforms","rtb","RuntimeShaderBuilder","MakeRuntimeShader"],"sources":["ImageFilters.ts"],"sourcesContent":["import type { SkImageFilter, SkColor, Skia } from \"../../../skia/types\";\nimport {\n BlendMode,\n ColorChannel,\n processUniforms,\n TileMode,\n} from \"../../../skia/types\";\nimport type {\n BlendImageFilterProps,\n BlurImageFilterProps,\n DeclarationContext,\n DisplacementMapImageFilterProps,\n DropShadowImageFilterProps,\n MorphologyImageFilterProps,\n OffsetImageFilterProps,\n RuntimeShaderImageFilterProps,\n} from \"../../types\";\nimport { DeclarationType, NodeType } from \"../../types\";\nimport { processRadius, enumKey } from \"../datatypes\";\nimport type { NodeContext } from \"../Node\";\nimport { JsiDeclarationNode } from \"../Node\";\n\nconst Black = Float32Array.of(0, 0, 0, 1);\n\nconst MakeInnerShadow = (\n Skia: Skia,\n shadowOnly: boolean | undefined,\n dx: number,\n dy: number,\n sigmaX: number,\n sigmaY: number,\n color: SkColor,\n input: SkImageFilter | null\n) => {\n const sourceGraphic = Skia.ImageFilter.MakeColorFilter(\n Skia.ColorFilter.MakeBlend(Black, BlendMode.Dst),\n null\n );\n const sourceAlpha = Skia.ImageFilter.MakeColorFilter(\n Skia.ColorFilter.MakeBlend(Black, BlendMode.SrcIn),\n null\n );\n const f1 = Skia.ImageFilter.MakeColorFilter(\n Skia.ColorFilter.MakeBlend(color, BlendMode.SrcOut),\n null\n );\n const f2 = Skia.ImageFilter.MakeOffset(dx, dy, f1);\n const f3 = Skia.ImageFilter.MakeBlur(sigmaX, sigmaY, TileMode.Decal, f2);\n const f4 = Skia.ImageFilter.MakeBlend(BlendMode.SrcIn, sourceAlpha, f3);\n if (shadowOnly) {\n return f4;\n }\n return Skia.ImageFilter.MakeCompose(\n input,\n Skia.ImageFilter.MakeBlend(BlendMode.SrcOver, sourceGraphic, f4)\n );\n};\n\nexport abstract class ImageFilterDeclaration<P> extends JsiDeclarationNode<P> {\n constructor(ctx: NodeContext, type: NodeType, props: P) {\n super(ctx, DeclarationType.ImageFilter, type, props);\n }\n\n protected input(ctx: DeclarationContext) {\n return ctx.imageFilters.pop() ?? null;\n }\n\n protected composeAndPush(ctx: DeclarationContext, imgf1: SkImageFilter) {\n ctx.save();\n this.decorateChildren(ctx);\n let imgf2 = ctx.imageFilters.popAllAsOne();\n const cf = ctx.colorFilters.popAllAsOne();\n ctx.restore();\n if (cf) {\n imgf2 = this.Skia.ImageFilter.MakeCompose(\n imgf2 ?? null,\n this.Skia.ImageFilter.MakeColorFilter(cf, null)\n );\n }\n const imgf = imgf2\n ? this.Skia.ImageFilter.MakeCompose(imgf1, imgf2)\n : imgf1;\n ctx.imageFilters.push(imgf);\n }\n}\n\nexport class OffsetImageFilterNode extends ImageFilterDeclaration<OffsetImageFilterProps> {\n constructor(ctx: NodeContext, props: OffsetImageFilterProps) {\n super(ctx, NodeType.OffsetImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n this.decorateChildren(ctx);\n const { x, y } = this.props;\n const imgf = this.Skia.ImageFilter.MakeOffset(x, y, null);\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class DisplacementMapImageFilterNode extends ImageFilterDeclaration<DisplacementMapImageFilterProps> {\n constructor(ctx: NodeContext, props: DisplacementMapImageFilterProps) {\n super(ctx, NodeType.DisplacementMapImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n this.decorateChildren(ctx);\n const { channelX, channelY, scale } = this.props;\n const shader = ctx.shaders.pop();\n if (!shader) {\n throw new Error(\"DisplacementMap expects a shader as child\");\n }\n const map = this.Skia.ImageFilter.MakeShader(shader, null);\n const imgf = this.Skia.ImageFilter.MakeDisplacementMap(\n ColorChannel[enumKey(channelX)],\n ColorChannel[enumKey(channelY)],\n scale,\n map,\n this.input(ctx)\n );\n ctx.imageFilters.push(imgf);\n }\n}\n\nexport class BlurImageFilterNode extends ImageFilterDeclaration<BlurImageFilterProps> {\n constructor(ctx: NodeContext, props: BlurImageFilterProps) {\n super(ctx, NodeType.BlurImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { mode, blur } = this.props;\n const sigma = processRadius(this.Skia, blur);\n const imgf = this.Skia.ImageFilter.MakeBlur(\n sigma.x,\n sigma.y,\n TileMode[enumKey(mode)],\n this.input(ctx)\n );\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class DropShadowImageFilterNode extends ImageFilterDeclaration<DropShadowImageFilterProps> {\n constructor(ctx: NodeContext, props: DropShadowImageFilterProps) {\n super(ctx, NodeType.DropShadowImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { dx, dy, blur, shadowOnly, color: cl, inner } = this.props;\n const color = this.Skia.Color(cl);\n let factory;\n if (inner) {\n factory = MakeInnerShadow.bind(null, this.Skia, shadowOnly);\n } else {\n factory = shadowOnly\n ? this.Skia.ImageFilter.MakeDropShadowOnly.bind(this.Skia.ImageFilter)\n : this.Skia.ImageFilter.MakeDropShadow.bind(this.Skia.ImageFilter);\n }\n const imgf = factory(dx, dy, blur, blur, color, this.input(ctx));\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport enum MorphologyOperator {\n Erode,\n Dilate,\n}\n\nexport class MorphologyImageFilterNode extends ImageFilterDeclaration<MorphologyImageFilterProps> {\n constructor(ctx: NodeContext, props: MorphologyImageFilterProps) {\n super(ctx, NodeType.MorphologyImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { operator } = this.props;\n const r = processRadius(this.Skia, this.props.radius);\n let imgf;\n if (MorphologyOperator[enumKey(operator)] === MorphologyOperator.Erode) {\n imgf = this.Skia.ImageFilter.MakeErode(r.x, r.y, this.input(ctx));\n } else {\n imgf = this.Skia.ImageFilter.MakeDilate(r.x, r.y, this.input(ctx));\n }\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class BlendImageFilterNode extends ImageFilterDeclaration<BlendImageFilterProps> {\n constructor(ctx: NodeContext, props: BlendImageFilterProps) {\n super(ctx, NodeType.BlendImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { mode } = this.props;\n const a = ctx.imageFilters.pop();\n const b = ctx.imageFilters.pop();\n if (!a || !b) {\n throw new Error(\"BlendImageFilter requires two image filters\");\n }\n const imgf = this.Skia.ImageFilter.MakeBlend(mode, a, b);\n this.composeAndPush(ctx, imgf);\n }\n}\n\nexport class RuntimeShaderImageFilterNode extends ImageFilterDeclaration<RuntimeShaderImageFilterProps> {\n constructor(ctx: NodeContext, props: RuntimeShaderImageFilterProps) {\n super(ctx, NodeType.RuntimeShaderImageFilter, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const { source, uniforms } = this.props;\n const rtb = this.Skia.RuntimeShaderBuilder(source);\n if (uniforms) {\n processUniforms(source, uniforms, rtb);\n }\n const imgf = this.Skia.ImageFilter.MakeRuntimeShader(\n rtb,\n null,\n this.input(ctx)\n );\n this.composeAndPush(ctx, imgf);\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { SharedValueType } from "../../renderer/processors/Animations";
2
- export declare const HAS_REANIMATED: boolean;
3
- export declare function throwOnIncompatibleReanimatedVersion(): void;
2
+ export declare const HAS_REANIMATED2: boolean;
3
+ export declare const HAS_REANIMATED3: boolean;
4
4
  export declare const useSharedValue: any;
5
5
  export declare const startMapper: any;
6
6
  export declare const stopMapper: any;
@@ -1,51 +1,50 @@
1
1
  var _Reanimated, _Reanimated2, _Reanimated3, _Reanimated4;
2
2
 
3
3
  import { useMemo } from "react";
4
+ // This one is needed for the deprecated useSharedValue function
5
+ // We can remove it once we remove the deprecation
4
6
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
- let Reanimated;
7
+ let Reanimated2; // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
8
 
7
- try {
8
- Reanimated = require("react-native-reanimated");
9
- } catch (e) {// Ignore
10
- }
11
-
12
- export const HAS_REANIMATED = !!Reanimated;
9
+ let Reanimated3;
10
+ let reanimatedVersion;
13
11
 
14
- function throwOnMissingReanimated() {
15
- throw new Error("Reanimated was not found, make sure react-native-reanimated package is installed if you want to use \
16
- react-naitve-skia's integration layer API.");
17
- }
12
+ try {
13
+ Reanimated2 = require("react-native-reanimated");
14
+ reanimatedVersion = // eslint-disable-next-line import/extensions
15
+ require("react-native-reanimated/package.json").version;
18
16
 
19
- let ReanimatedVersionTested = false;
20
- export function throwOnIncompatibleReanimatedVersion() {
21
- if (ReanimatedVersionTested) {
22
- // we avoid testing version more than once as it won't change and we throw
23
- // an error when version is incompatible
24
- return;
17
+ if (reanimatedVersion && (reanimatedVersion >= "3.0.0" || reanimatedVersion.includes("3.0.0-"))) {
18
+ Reanimated3 = Reanimated2;
25
19
  }
20
+ } catch (e) {}
26
21
 
27
- ReanimatedVersionTested = true;
28
-
29
- const reanimatedVersion = // eslint-disable-next-line import/extensions
30
- require("react-native-reanimated/package.json").version; // The first compatible version is 3.0.0 but we need to exclude 3.0.0 pre-releases
31
- // as they have limited support for the used API.
22
+ export const HAS_REANIMATED2 = !!Reanimated2;
23
+ export const HAS_REANIMATED3 = !!Reanimated3;
32
24
 
25
+ function throwOnMissingReanimated2() {
26
+ if (!HAS_REANIMATED2) {
27
+ throw new Error("Reanimated was not found, make sure react-native-reanimated package is installed if you want to use \
28
+ react-naitve-skia's integration layer API.");
29
+ }
30
+ }
33
31
 
34
- if (!reanimatedVersion || reanimatedVersion < "3.0.0" || reanimatedVersion.includes("3.0.0-")) {
32
+ function throwOnMissingReanimated3() {
33
+ if (!HAS_REANIMATED3) {
35
34
  throw new Error(`Reanimated version ${reanimatedVersion} is not supported, please upgrade to 3.0.0 or newer.`);
36
35
  }
36
+
37
+ throwOnMissingReanimated2();
37
38
  }
38
- export const useSharedValue = ((_Reanimated = Reanimated) === null || _Reanimated === void 0 ? void 0 : _Reanimated.useSharedValue) || (value => useMemo(() => ({
39
+
40
+ export const useSharedValue = ((_Reanimated = Reanimated2) === null || _Reanimated === void 0 ? void 0 : _Reanimated.useSharedValue) || (value => useMemo(() => ({
39
41
  value
40
42
  }), [value]));
41
- export const startMapper = ((_Reanimated2 = Reanimated) === null || _Reanimated2 === void 0 ? void 0 : _Reanimated2.startMapper) || throwOnMissingReanimated;
42
- export const stopMapper = ((_Reanimated3 = Reanimated) === null || _Reanimated3 === void 0 ? void 0 : _Reanimated3.stopMapper) || throwOnMissingReanimated;
43
- export const runOnJS = ((_Reanimated4 = Reanimated) === null || _Reanimated4 === void 0 ? void 0 : _Reanimated4.runOnJS) || throwOnMissingReanimated;
43
+ export const startMapper = ((_Reanimated2 = Reanimated2) === null || _Reanimated2 === void 0 ? void 0 : _Reanimated2.startMapper) || throwOnMissingReanimated2;
44
+ export const stopMapper = ((_Reanimated3 = Reanimated2) === null || _Reanimated3 === void 0 ? void 0 : _Reanimated3.stopMapper) || throwOnMissingReanimated2;
45
+ export const runOnJS = ((_Reanimated4 = Reanimated2) === null || _Reanimated4 === void 0 ? void 0 : _Reanimated4.runOnJS) || throwOnMissingReanimated2;
44
46
  export const isSharedValue = value => {
45
- if (!Reanimated) {
46
- throwOnMissingReanimated();
47
- }
48
-
49
- return !!value && Reanimated.isSharedValue(value);
47
+ throwOnMissingReanimated3();
48
+ return !!value && Reanimated3.isSharedValue(value);
50
49
  };
51
50
  //# sourceMappingURL=moduleWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","Reanimated","require","e","HAS_REANIMATED","throwOnMissingReanimated","Error","ReanimatedVersionTested","throwOnIncompatibleReanimatedVersion","reanimatedVersion","version","includes","useSharedValue","value","startMapper","stopMapper","runOnJS","isSharedValue"],"sources":["moduleWrapper.ts"],"sourcesContent":["import { useMemo } from \"react\";\n\nimport type { SharedValueType } from \"../../renderer/processors/Animations\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Reanimated: any;\n\ntry {\n Reanimated = require(\"react-native-reanimated\");\n} catch (e) {\n // Ignore\n}\n\nexport const HAS_REANIMATED = !!Reanimated;\n\nfunction throwOnMissingReanimated() {\n throw new Error(\n \"Reanimated was not found, make sure react-native-reanimated package is installed if you want to use \\\n react-naitve-skia's integration layer API.\"\n );\n}\n\nlet ReanimatedVersionTested = false;\n\nexport function throwOnIncompatibleReanimatedVersion() {\n if (ReanimatedVersionTested) {\n // we avoid testing version more than once as it won't change and we throw\n // an error when version is incompatible\n return;\n }\n ReanimatedVersionTested = true;\n const reanimatedVersion =\n // eslint-disable-next-line import/extensions\n require(\"react-native-reanimated/package.json\").version;\n // The first compatible version is 3.0.0 but we need to exclude 3.0.0 pre-releases\n // as they have limited support for the used API.\n if (\n !reanimatedVersion ||\n reanimatedVersion < \"3.0.0\" ||\n reanimatedVersion.includes(\"3.0.0-\")\n ) {\n throw new Error(\n `Reanimated version ${reanimatedVersion} is not supported, please upgrade to 3.0.0 or newer.`\n );\n }\n}\n\nexport const useSharedValue =\n Reanimated?.useSharedValue ||\n ((value: number) => useMemo(() => ({ value }), [value]));\n\nexport const startMapper = Reanimated?.startMapper || throwOnMissingReanimated;\nexport const stopMapper = Reanimated?.stopMapper || throwOnMissingReanimated;\nexport const runOnJS = Reanimated?.runOnJS || throwOnMissingReanimated;\nexport const isSharedValue = <T>(\n value: unknown\n): value is SharedValueType<T> => {\n if (!Reanimated) {\n throwOnMissingReanimated();\n }\n return !!value && Reanimated.isSharedValue(value);\n};\n"],"mappings":";;AAAA,SAASA,OAAT,QAAwB,OAAxB;AAIA;AACA,IAAIC,UAAJ;;AAEA,IAAI;EACFA,UAAU,GAAGC,OAAO,CAAC,yBAAD,CAApB;AACD,CAFD,CAEE,OAAOC,CAAP,EAAU,CACV;AACD;;AAED,OAAO,MAAMC,cAAc,GAAG,CAAC,CAACH,UAAzB;;AAEP,SAASI,wBAAT,GAAoC;EAClC,MAAM,IAAIC,KAAJ,CACJ;AACJ,+CAFQ,CAAN;AAID;;AAED,IAAIC,uBAAuB,GAAG,KAA9B;AAEA,OAAO,SAASC,oCAAT,GAAgD;EACrD,IAAID,uBAAJ,EAA6B;IAC3B;IACA;IACA;EACD;;EACDA,uBAAuB,GAAG,IAA1B;;EACA,MAAME,iBAAiB,GACrB;EACAP,OAAO,CAAC,sCAAD,CAAP,CAAgDQ,OAFlD,CAPqD,CAUrD;EACA;;;EACA,IACE,CAACD,iBAAD,IACAA,iBAAiB,GAAG,OADpB,IAEAA,iBAAiB,CAACE,QAAlB,CAA2B,QAA3B,CAHF,EAIE;IACA,MAAM,IAAIL,KAAJ,CACH,sBAAqBG,iBAAkB,sDADpC,CAAN;EAGD;AACF;AAED,OAAO,MAAMG,cAAc,GACzB,gBAAAX,UAAU,UAAV,kDAAYW,cAAZ,MACEC,KAAD,IAAmBb,OAAO,CAAC,OAAO;EAAEa;AAAF,CAAP,CAAD,EAAoB,CAACA,KAAD,CAApB,CAD3B,CADK;AAIP,OAAO,MAAMC,WAAW,GAAG,iBAAAb,UAAU,UAAV,oDAAYa,WAAZ,KAA2BT,wBAA/C;AACP,OAAO,MAAMU,UAAU,GAAG,iBAAAd,UAAU,UAAV,oDAAYc,UAAZ,KAA0BV,wBAA7C;AACP,OAAO,MAAMW,OAAO,GAAG,iBAAAf,UAAU,UAAV,oDAAYe,OAAZ,KAAuBX,wBAAvC;AACP,OAAO,MAAMY,aAAa,GACxBJ,KAD2B,IAEK;EAChC,IAAI,CAACZ,UAAL,EAAiB;IACfI,wBAAwB;EACzB;;EACD,OAAO,CAAC,CAACQ,KAAF,IAAWZ,UAAU,CAACgB,aAAX,CAAyBJ,KAAzB,CAAlB;AACD,CAPM"}
1
+ {"version":3,"names":["useMemo","Reanimated2","Reanimated3","reanimatedVersion","require","version","includes","e","HAS_REANIMATED2","HAS_REANIMATED3","throwOnMissingReanimated2","Error","throwOnMissingReanimated3","useSharedValue","value","startMapper","stopMapper","runOnJS","isSharedValue"],"sources":["moduleWrapper.ts"],"sourcesContent":["import { useMemo } from \"react\";\n\nimport type { SharedValueType } from \"../../renderer/processors/Animations\";\n\n// This one is needed for the deprecated useSharedValue function\n// We can remove it once we remove the deprecation\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Reanimated2: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Reanimated3: any;\nlet reanimatedVersion: string;\n\ntry {\n Reanimated2 = require(\"react-native-reanimated\");\n reanimatedVersion =\n // eslint-disable-next-line import/extensions\n require(\"react-native-reanimated/package.json\").version;\n if (\n reanimatedVersion &&\n (reanimatedVersion >= \"3.0.0\" || reanimatedVersion.includes(\"3.0.0-\"))\n ) {\n Reanimated3 = Reanimated2;\n }\n} catch (e) {}\n\nexport const HAS_REANIMATED2 = !!Reanimated2;\nexport const HAS_REANIMATED3 = !!Reanimated3;\n\nfunction throwOnMissingReanimated2() {\n if (!HAS_REANIMATED2) {\n throw new Error(\n \"Reanimated was not found, make sure react-native-reanimated package is installed if you want to use \\\n react-naitve-skia's integration layer API.\"\n );\n }\n}\n\nfunction throwOnMissingReanimated3() {\n if (!HAS_REANIMATED3) {\n throw new Error(\n `Reanimated version ${reanimatedVersion} is not supported, please upgrade to 3.0.0 or newer.`\n );\n }\n throwOnMissingReanimated2();\n}\n\nexport const useSharedValue =\n Reanimated2?.useSharedValue ||\n ((value: number) => useMemo(() => ({ value }), [value]));\n\nexport const startMapper =\n Reanimated2?.startMapper || throwOnMissingReanimated2;\nexport const stopMapper = Reanimated2?.stopMapper || throwOnMissingReanimated2;\nexport const runOnJS = Reanimated2?.runOnJS || throwOnMissingReanimated2;\nexport const isSharedValue = <T>(\n value: unknown\n): value is SharedValueType<T> => {\n throwOnMissingReanimated3();\n return !!value && Reanimated3.isSharedValue(value);\n};\n"],"mappings":";;AAAA,SAASA,OAAT,QAAwB,OAAxB;AAIA;AACA;AACA;AACA,IAAIC,WAAJ,C,CACA;;AACA,IAAIC,WAAJ;AACA,IAAIC,iBAAJ;;AAEA,IAAI;EACFF,WAAW,GAAGG,OAAO,CAAC,yBAAD,CAArB;EACAD,iBAAiB,GACf;EACAC,OAAO,CAAC,sCAAD,CAAP,CAAgDC,OAFlD;;EAGA,IACEF,iBAAiB,KAChBA,iBAAiB,IAAI,OAArB,IAAgCA,iBAAiB,CAACG,QAAlB,CAA2B,QAA3B,CADhB,CADnB,EAGE;IACAJ,WAAW,GAAGD,WAAd;EACD;AACF,CAXD,CAWE,OAAOM,CAAP,EAAU,CAAE;;AAEd,OAAO,MAAMC,eAAe,GAAG,CAAC,CAACP,WAA1B;AACP,OAAO,MAAMQ,eAAe,GAAG,CAAC,CAACP,WAA1B;;AAEP,SAASQ,yBAAT,GAAqC;EACnC,IAAI,CAACF,eAAL,EAAsB;IACpB,MAAM,IAAIG,KAAJ,CACJ;AACN,iDAFU,CAAN;EAID;AACF;;AAED,SAASC,yBAAT,GAAqC;EACnC,IAAI,CAACH,eAAL,EAAsB;IACpB,MAAM,IAAIE,KAAJ,CACH,sBAAqBR,iBAAkB,sDADpC,CAAN;EAGD;;EACDO,yBAAyB;AAC1B;;AAED,OAAO,MAAMG,cAAc,GACzB,gBAAAZ,WAAW,UAAX,kDAAaY,cAAb,MACEC,KAAD,IAAmBd,OAAO,CAAC,OAAO;EAAEc;AAAF,CAAP,CAAD,EAAoB,CAACA,KAAD,CAApB,CAD3B,CADK;AAIP,OAAO,MAAMC,WAAW,GACtB,iBAAAd,WAAW,UAAX,oDAAac,WAAb,KAA4BL,yBADvB;AAEP,OAAO,MAAMM,UAAU,GAAG,iBAAAf,WAAW,UAAX,oDAAae,UAAb,KAA2BN,yBAA9C;AACP,OAAO,MAAMO,OAAO,GAAG,iBAAAhB,WAAW,UAAX,oDAAagB,OAAb,KAAwBP,yBAAxC;AACP,OAAO,MAAMQ,aAAa,GACxBJ,KAD2B,IAEK;EAChCF,yBAAyB;EACzB,OAAO,CAAC,CAACE,KAAF,IAAWZ,WAAW,CAACgB,aAAZ,CAA0BJ,KAA1B,CAAlB;AACD,CALM"}
@@ -1,12 +1,12 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
 
3
3
  /* eslint-disable reanimated/js-function-in-worklet */
4
- import { startMapper, stopMapper, isSharedValue, throwOnIncompatibleReanimatedVersion, HAS_REANIMATED } from "./moduleWrapper";
4
+ import { startMapper, stopMapper, isSharedValue, HAS_REANIMATED3 } from "./moduleWrapper";
5
5
 
6
6
  const _bindings = new WeakMap();
7
7
 
8
8
  export function extractReanimatedProps(props) {
9
- if (!HAS_REANIMATED) {
9
+ if (!HAS_REANIMATED3) {
10
10
  return [props, {}];
11
11
  }
12
12
 
@@ -31,14 +31,10 @@ export function extractReanimatedProps(props) {
31
31
  return [otherProps, reanimatedProps];
32
32
  }
33
33
  export function bindReanimatedProps(container, node, reanimatedProps) {
34
- if (!HAS_REANIMATED) {
34
+ if (!HAS_REANIMATED3) {
35
35
  return;
36
36
  }
37
37
 
38
- if (__DEV__) {
39
- throwOnIncompatibleReanimatedVersion();
40
- }
41
-
42
38
  const sharedValues = Object.values(reanimatedProps);
43
39
 
44
40
  const previousMapperId = _bindings.get(node);
@@ -1 +1 @@
1
- {"version":3,"names":["startMapper","stopMapper","isSharedValue","throwOnIncompatibleReanimatedVersion","HAS_REANIMATED","_bindings","WeakMap","extractReanimatedProps","props","reanimatedProps","otherProps","propName","propValue","value","bindReanimatedProps","container","node","__DEV__","sharedValues","Object","values","previousMapperId","get","undefined","length","viewId","getNativeId","SkiaViewApi","global","mapperId","setProp","requestRedraw","redraw","set"],"sources":["renderHelpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable reanimated/js-function-in-worklet */\nimport type { Container } from \"../../renderer/Container\";\nimport type { AnimatedProps } from \"../../renderer/processors\";\nimport type { Node } from \"../../dom/types\";\n\nimport {\n startMapper,\n stopMapper,\n isSharedValue,\n throwOnIncompatibleReanimatedVersion,\n HAS_REANIMATED,\n} from \"./moduleWrapper\";\n\nconst _bindings = new WeakMap<Node<unknown>, unknown>();\n\nexport function extractReanimatedProps(props: AnimatedProps<any>) {\n if (!HAS_REANIMATED) {\n return [props, {}];\n }\n const reanimatedProps = {} as AnimatedProps<any>;\n const otherProps = {} as AnimatedProps<any>;\n for (const propName in props) {\n if (propName === \"children\") {\n continue;\n }\n const propValue = props[propName];\n if (isSharedValue(propValue)) {\n reanimatedProps[propName] = propValue;\n otherProps[propName] = propValue.value;\n } else {\n otherProps[propName] = propValue;\n }\n }\n return [otherProps, reanimatedProps];\n}\n\nexport function bindReanimatedProps(\n container: Container,\n node: Node<any>,\n reanimatedProps: AnimatedProps<any>\n) {\n if (!HAS_REANIMATED) {\n return;\n }\n if (__DEV__) {\n throwOnIncompatibleReanimatedVersion();\n }\n const sharedValues = Object.values(reanimatedProps);\n const previousMapperId = _bindings.get(node);\n if (previousMapperId !== undefined) {\n stopMapper(previousMapperId);\n }\n if (sharedValues.length > 0) {\n const viewId = container.getNativeId();\n const { SkiaViewApi } = global;\n const mapperId = startMapper(() => {\n \"worklet\";\n for (const propName in reanimatedProps) {\n node && node.setProp(propName, reanimatedProps[propName].value);\n }\n // On React Native we use the SkiaViewApi to redraw because it can\n // run on the worklet thread (container.redraw can't)\n // if SkiaViewApi is undefined, we are on web and container.redraw()\n // can safely be invoked\n if (SkiaViewApi) {\n SkiaViewApi.requestRedraw(viewId);\n } else {\n container.redraw();\n }\n }, sharedValues);\n _bindings.set(node, mapperId);\n }\n}\n"],"mappings":"AAAA;;AACA;AAKA,SACEA,WADF,EAEEC,UAFF,EAGEC,aAHF,EAIEC,oCAJF,EAKEC,cALF,QAMO,iBANP;;AAQA,MAAMC,SAAS,GAAG,IAAIC,OAAJ,EAAlB;;AAEA,OAAO,SAASC,sBAAT,CAAgCC,KAAhC,EAA2D;EAChE,IAAI,CAACJ,cAAL,EAAqB;IACnB,OAAO,CAACI,KAAD,EAAQ,EAAR,CAAP;EACD;;EACD,MAAMC,eAAe,GAAG,EAAxB;EACA,MAAMC,UAAU,GAAG,EAAnB;;EACA,KAAK,MAAMC,QAAX,IAAuBH,KAAvB,EAA8B;IAC5B,IAAIG,QAAQ,KAAK,UAAjB,EAA6B;MAC3B;IACD;;IACD,MAAMC,SAAS,GAAGJ,KAAK,CAACG,QAAD,CAAvB;;IACA,IAAIT,aAAa,CAACU,SAAD,CAAjB,EAA8B;MAC5BH,eAAe,CAACE,QAAD,CAAf,GAA4BC,SAA5B;MACAF,UAAU,CAACC,QAAD,CAAV,GAAuBC,SAAS,CAACC,KAAjC;IACD,CAHD,MAGO;MACLH,UAAU,CAACC,QAAD,CAAV,GAAuBC,SAAvB;IACD;EACF;;EACD,OAAO,CAACF,UAAD,EAAaD,eAAb,CAAP;AACD;AAED,OAAO,SAASK,mBAAT,CACLC,SADK,EAELC,IAFK,EAGLP,eAHK,EAIL;EACA,IAAI,CAACL,cAAL,EAAqB;IACnB;EACD;;EACD,IAAIa,OAAJ,EAAa;IACXd,oCAAoC;EACrC;;EACD,MAAMe,YAAY,GAAGC,MAAM,CAACC,MAAP,CAAcX,eAAd,CAArB;;EACA,MAAMY,gBAAgB,GAAGhB,SAAS,CAACiB,GAAV,CAAcN,IAAd,CAAzB;;EACA,IAAIK,gBAAgB,KAAKE,SAAzB,EAAoC;IAClCtB,UAAU,CAACoB,gBAAD,CAAV;EACD;;EACD,IAAIH,YAAY,CAACM,MAAb,GAAsB,CAA1B,EAA6B;IAC3B,MAAMC,MAAM,GAAGV,SAAS,CAACW,WAAV,EAAf;IACA,MAAM;MAAEC;IAAF,IAAkBC,MAAxB;IACA,MAAMC,QAAQ,GAAG7B,WAAW,CAAC,MAAM;MACjC;;MACA,KAAK,MAAMW,QAAX,IAAuBF,eAAvB,EAAwC;QACtCO,IAAI,IAAIA,IAAI,CAACc,OAAL,CAAanB,QAAb,EAAuBF,eAAe,CAACE,QAAD,CAAf,CAA0BE,KAAjD,CAAR;MACD,CAJgC,CAKjC;MACA;MACA;MACA;;;MACA,IAAIc,WAAJ,EAAiB;QACfA,WAAW,CAACI,aAAZ,CAA0BN,MAA1B;MACD,CAFD,MAEO;QACLV,SAAS,CAACiB,MAAV;MACD;IACF,CAd2B,EAczBd,YAdyB,CAA5B;;IAeAb,SAAS,CAAC4B,GAAV,CAAcjB,IAAd,EAAoBa,QAApB;EACD;AACF"}
1
+ {"version":3,"names":["startMapper","stopMapper","isSharedValue","HAS_REANIMATED3","_bindings","WeakMap","extractReanimatedProps","props","reanimatedProps","otherProps","propName","propValue","value","bindReanimatedProps","container","node","sharedValues","Object","values","previousMapperId","get","undefined","length","viewId","getNativeId","SkiaViewApi","global","mapperId","setProp","requestRedraw","redraw","set"],"sources":["renderHelpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable reanimated/js-function-in-worklet */\nimport type { Container } from \"../../renderer/Container\";\nimport type { AnimatedProps } from \"../../renderer/processors\";\nimport type { Node } from \"../../dom/types\";\n\nimport {\n startMapper,\n stopMapper,\n isSharedValue,\n HAS_REANIMATED3,\n} from \"./moduleWrapper\";\n\nconst _bindings = new WeakMap<Node<unknown>, unknown>();\n\nexport function extractReanimatedProps(props: AnimatedProps<any>) {\n if (!HAS_REANIMATED3) {\n return [props, {}];\n }\n const reanimatedProps = {} as AnimatedProps<any>;\n const otherProps = {} as AnimatedProps<any>;\n for (const propName in props) {\n if (propName === \"children\") {\n continue;\n }\n const propValue = props[propName];\n if (isSharedValue(propValue)) {\n reanimatedProps[propName] = propValue;\n otherProps[propName] = propValue.value;\n } else {\n otherProps[propName] = propValue;\n }\n }\n return [otherProps, reanimatedProps];\n}\n\nexport function bindReanimatedProps(\n container: Container,\n node: Node<any>,\n reanimatedProps: AnimatedProps<any>\n) {\n if (!HAS_REANIMATED3) {\n return;\n }\n const sharedValues = Object.values(reanimatedProps);\n const previousMapperId = _bindings.get(node);\n if (previousMapperId !== undefined) {\n stopMapper(previousMapperId);\n }\n if (sharedValues.length > 0) {\n const viewId = container.getNativeId();\n const { SkiaViewApi } = global;\n const mapperId = startMapper(() => {\n \"worklet\";\n for (const propName in reanimatedProps) {\n node && node.setProp(propName, reanimatedProps[propName].value);\n }\n // On React Native we use the SkiaViewApi to redraw because it can\n // run on the worklet thread (container.redraw can't)\n // if SkiaViewApi is undefined, we are on web and container.redraw()\n // can safely be invoked\n if (SkiaViewApi) {\n SkiaViewApi.requestRedraw(viewId);\n } else {\n container.redraw();\n }\n }, sharedValues);\n _bindings.set(node, mapperId);\n }\n}\n"],"mappings":"AAAA;;AACA;AAKA,SACEA,WADF,EAEEC,UAFF,EAGEC,aAHF,EAIEC,eAJF,QAKO,iBALP;;AAOA,MAAMC,SAAS,GAAG,IAAIC,OAAJ,EAAlB;;AAEA,OAAO,SAASC,sBAAT,CAAgCC,KAAhC,EAA2D;EAChE,IAAI,CAACJ,eAAL,EAAsB;IACpB,OAAO,CAACI,KAAD,EAAQ,EAAR,CAAP;EACD;;EACD,MAAMC,eAAe,GAAG,EAAxB;EACA,MAAMC,UAAU,GAAG,EAAnB;;EACA,KAAK,MAAMC,QAAX,IAAuBH,KAAvB,EAA8B;IAC5B,IAAIG,QAAQ,KAAK,UAAjB,EAA6B;MAC3B;IACD;;IACD,MAAMC,SAAS,GAAGJ,KAAK,CAACG,QAAD,CAAvB;;IACA,IAAIR,aAAa,CAACS,SAAD,CAAjB,EAA8B;MAC5BH,eAAe,CAACE,QAAD,CAAf,GAA4BC,SAA5B;MACAF,UAAU,CAACC,QAAD,CAAV,GAAuBC,SAAS,CAACC,KAAjC;IACD,CAHD,MAGO;MACLH,UAAU,CAACC,QAAD,CAAV,GAAuBC,SAAvB;IACD;EACF;;EACD,OAAO,CAACF,UAAD,EAAaD,eAAb,CAAP;AACD;AAED,OAAO,SAASK,mBAAT,CACLC,SADK,EAELC,IAFK,EAGLP,eAHK,EAIL;EACA,IAAI,CAACL,eAAL,EAAsB;IACpB;EACD;;EACD,MAAMa,YAAY,GAAGC,MAAM,CAACC,MAAP,CAAcV,eAAd,CAArB;;EACA,MAAMW,gBAAgB,GAAGf,SAAS,CAACgB,GAAV,CAAcL,IAAd,CAAzB;;EACA,IAAII,gBAAgB,KAAKE,SAAzB,EAAoC;IAClCpB,UAAU,CAACkB,gBAAD,CAAV;EACD;;EACD,IAAIH,YAAY,CAACM,MAAb,GAAsB,CAA1B,EAA6B;IAC3B,MAAMC,MAAM,GAAGT,SAAS,CAACU,WAAV,EAAf;IACA,MAAM;MAAEC;IAAF,IAAkBC,MAAxB;IACA,MAAMC,QAAQ,GAAG3B,WAAW,CAAC,MAAM;MACjC;;MACA,KAAK,MAAMU,QAAX,IAAuBF,eAAvB,EAAwC;QACtCO,IAAI,IAAIA,IAAI,CAACa,OAAL,CAAalB,QAAb,EAAuBF,eAAe,CAACE,QAAD,CAAf,CAA0BE,KAAjD,CAAR;MACD,CAJgC,CAKjC;MACA;MACA;MACA;;;MACA,IAAIa,WAAJ,EAAiB;QACfA,WAAW,CAACI,aAAZ,CAA0BN,MAA1B;MACD,CAFD,MAEO;QACLT,SAAS,CAACgB,MAAV;MACD;IACF,CAd2B,EAczBd,YAdyB,CAA5B;;IAeAZ,SAAS,CAAC2B,GAAV,CAAchB,IAAd,EAAoBY,QAApB;EACD;AACF"}
@@ -1,5 +1,5 @@
1
1
  import { useEffect } from "react";
2
- import { HAS_REANIMATED, useSharedValue, runOnJS, startMapper, stopMapper } from "./moduleWrapper";
2
+ import { HAS_REANIMATED2, useSharedValue, runOnJS, startMapper, stopMapper } from "./moduleWrapper";
3
3
  /**
4
4
  * Connects a shared value from reanimated to a SkiaView or Canvas
5
5
  * so whenever the shared value changes the SkiaView will redraw.
@@ -16,7 +16,7 @@ export const useSharedValueEffect = function (cb, value) {
16
16
  Learn more at https://shopify.github.io/react-native-skia/.`);
17
17
  const input = useSharedValue(0);
18
18
  useEffect(() => {
19
- if (!HAS_REANIMATED) {
19
+ if (!HAS_REANIMATED2) {
20
20
  console.warn("Reanimated was not found and the useSharedValueEffect hook will have no effect.");
21
21
  } else {
22
22
  // Start a mapper in Reanimated
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","HAS_REANIMATED","useSharedValue","runOnJS","startMapper","stopMapper","useSharedValueEffect","cb","value","values","console","warn","input","mapperId","undefined"],"sources":["useSharedValueEffect.ts"],"sourcesContent":["import { useEffect } from \"react\";\n\nimport type { SharedValueType } from \"../../renderer/processors/Animations\";\n\nimport {\n HAS_REANIMATED,\n useSharedValue,\n runOnJS,\n startMapper,\n stopMapper,\n} from \"./moduleWrapper\";\n\n/**\n * Connects a shared value from reanimated to a SkiaView or Canvas\n * so whenever the shared value changes the SkiaView will redraw.\n * @param cb Callback that will be called whenever the shared value changes.\n * @param values One or more shared values to listen for.\n */\nexport const useSharedValueEffect = <T = number>(\n cb: () => void,\n value: SharedValueType<T>,\n ...values: SharedValueType<T>[]\n) => {\n console.warn(\n `useSharedValueEffect() is now deprecated, you can use Reanimated values directly.\nLearn more at https://shopify.github.io/react-native-skia/.`\n );\n const input = useSharedValue(0);\n\n useEffect(() => {\n if (!HAS_REANIMATED) {\n console.warn(\n \"Reanimated was not found and the useSharedValueEffect hook will have no effect.\"\n );\n } else {\n // Start a mapper in Reanimated\n const mapperId = startMapper(\n () => {\n \"worklet\";\n runOnJS(cb)();\n },\n [value, ...values],\n [input]\n );\n // Return unregistering the mapper\n return () => {\n if (stopMapper && mapperId !== undefined) {\n stopMapper(mapperId);\n }\n };\n }\n return () => {};\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [input, value, ...values]);\n};\n"],"mappings":"AAAA,SAASA,SAAT,QAA0B,OAA1B;AAIA,SACEC,cADF,EAEEC,cAFF,EAGEC,OAHF,EAIEC,WAJF,EAKEC,UALF,QAMO,iBANP;AAQA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,oBAAoB,GAAG,UAClCC,EADkC,EAElCC,KAFkC,EAI/B;EAAA,kCADAC,MACA;IADAA,MACA;EAAA;;EACHC,OAAO,CAACC,IAAR,CACG;AACL,4DAFE;EAIA,MAAMC,KAAK,GAAGV,cAAc,CAAC,CAAD,CAA5B;EAEAF,SAAS,CAAC,MAAM;IACd,IAAI,CAACC,cAAL,EAAqB;MACnBS,OAAO,CAACC,IAAR,CACE,iFADF;IAGD,CAJD,MAIO;MACL;MACA,MAAME,QAAQ,GAAGT,WAAW,CAC1B,MAAM;QACJ;;QACAD,OAAO,CAACI,EAAD,CAAP;MACD,CAJyB,EAK1B,CAACC,KAAD,EAAQ,GAAGC,MAAX,CAL0B,EAM1B,CAACG,KAAD,CAN0B,CAA5B,CAFK,CAUL;;MACA,OAAO,MAAM;QACX,IAAIP,UAAU,IAAIQ,QAAQ,KAAKC,SAA/B,EAA0C;UACxCT,UAAU,CAACQ,QAAD,CAAV;QACD;MACF,CAJD;IAKD;;IACD,OAAO,MAAM,CAAE,CAAf,CAtBc,CAuBd;EACD,CAxBQ,EAwBN,CAACD,KAAD,EAAQJ,KAAR,EAAe,GAAGC,MAAlB,CAxBM,CAAT;AAyBD,CApCM"}
1
+ {"version":3,"names":["useEffect","HAS_REANIMATED2","useSharedValue","runOnJS","startMapper","stopMapper","useSharedValueEffect","cb","value","values","console","warn","input","mapperId","undefined"],"sources":["useSharedValueEffect.ts"],"sourcesContent":["import { useEffect } from \"react\";\n\nimport type { SharedValueType } from \"../../renderer/processors/Animations\";\n\nimport {\n HAS_REANIMATED2,\n useSharedValue,\n runOnJS,\n startMapper,\n stopMapper,\n} from \"./moduleWrapper\";\n\n/**\n * Connects a shared value from reanimated to a SkiaView or Canvas\n * so whenever the shared value changes the SkiaView will redraw.\n * @param cb Callback that will be called whenever the shared value changes.\n * @param values One or more shared values to listen for.\n */\nexport const useSharedValueEffect = <T = number>(\n cb: () => void,\n value: SharedValueType<T>,\n ...values: SharedValueType<T>[]\n) => {\n console.warn(\n `useSharedValueEffect() is now deprecated, you can use Reanimated values directly.\nLearn more at https://shopify.github.io/react-native-skia/.`\n );\n const input = useSharedValue(0);\n\n useEffect(() => {\n if (!HAS_REANIMATED2) {\n console.warn(\n \"Reanimated was not found and the useSharedValueEffect hook will have no effect.\"\n );\n } else {\n // Start a mapper in Reanimated\n const mapperId = startMapper(\n () => {\n \"worklet\";\n runOnJS(cb)();\n },\n [value, ...values],\n [input]\n );\n // Return unregistering the mapper\n return () => {\n if (stopMapper && mapperId !== undefined) {\n stopMapper(mapperId);\n }\n };\n }\n return () => {};\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [input, value, ...values]);\n};\n"],"mappings":"AAAA,SAASA,SAAT,QAA0B,OAA1B;AAIA,SACEC,eADF,EAEEC,cAFF,EAGEC,OAHF,EAIEC,WAJF,EAKEC,UALF,QAMO,iBANP;AAQA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,oBAAoB,GAAG,UAClCC,EADkC,EAElCC,KAFkC,EAI/B;EAAA,kCADAC,MACA;IADAA,MACA;EAAA;;EACHC,OAAO,CAACC,IAAR,CACG;AACL,4DAFE;EAIA,MAAMC,KAAK,GAAGV,cAAc,CAAC,CAAD,CAA5B;EAEAF,SAAS,CAAC,MAAM;IACd,IAAI,CAACC,eAAL,EAAsB;MACpBS,OAAO,CAACC,IAAR,CACE,iFADF;IAGD,CAJD,MAIO;MACL;MACA,MAAME,QAAQ,GAAGT,WAAW,CAC1B,MAAM;QACJ;;QACAD,OAAO,CAACI,EAAD,CAAP;MACD,CAJyB,EAK1B,CAACC,KAAD,EAAQ,GAAGC,MAAX,CAL0B,EAM1B,CAACG,KAAD,CAN0B,CAA5B,CAFK,CAUL;;MACA,OAAO,MAAM;QACX,IAAIP,UAAU,IAAIQ,QAAQ,KAAKC,SAA/B,EAA0C;UACxCT,UAAU,CAACQ,QAAD,CAAV;QACD;MACF,CAJD;IAKD;;IACD,OAAO,MAAM,CAAE,CAAf,CAtBc,CAuBd;EACD,CAxBQ,EAwBN,CAACD,KAAD,EAAQJ,KAAR,EAAe,GAAGC,MAAlB,CAxBM,CAAT;AAyBD,CApCM"}
@@ -1,6 +1,6 @@
1
1
  import type { SharedValueType } from "../../renderer/processors/Animations";
2
- export declare const HAS_REANIMATED: boolean;
3
- export declare function throwOnIncompatibleReanimatedVersion(): void;
2
+ export declare const HAS_REANIMATED2: boolean;
3
+ export declare const HAS_REANIMATED3: boolean;
4
4
  export declare const useSharedValue: any;
5
5
  export declare const startMapper: any;
6
6
  export declare const stopMapper: any;
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "setup-skia-web": "./scripts/setup-canvaskit.js"
8
8
  },
9
9
  "title": "React Native Skia",
10
- "version": "0.1.178",
10
+ "version": "0.1.180",
11
11
  "description": "High-performance React Native Graphics using Skia",
12
12
  "main": "lib/module/index.js",
13
13
  "files": [
@@ -103,15 +103,21 @@ export class DisplacementMapImageFilterNode extends ImageFilterDeclaration<Displ
103
103
  }
104
104
 
105
105
  decorate(ctx: DeclarationContext) {
106
+ this.decorateChildren(ctx);
106
107
  const { channelX, channelY, scale } = this.props;
108
+ const shader = ctx.shaders.pop();
109
+ if (!shader) {
110
+ throw new Error("DisplacementMap expects a shader as child");
111
+ }
112
+ const map = this.Skia.ImageFilter.MakeShader(shader, null);
107
113
  const imgf = this.Skia.ImageFilter.MakeDisplacementMap(
108
114
  ColorChannel[enumKey(channelX)],
109
115
  ColorChannel[enumKey(channelY)],
110
116
  scale,
111
- ctx.imageFilters.pop()!,
117
+ map,
112
118
  this.input(ctx)
113
119
  );
114
- this.composeAndPush(ctx, imgf);
120
+ ctx.imageFilters.push(imgf);
115
121
  }
116
122
  }
117
123
 
@@ -2,61 +2,59 @@ import { useMemo } from "react";
2
2
 
3
3
  import type { SharedValueType } from "../../renderer/processors/Animations";
4
4
 
5
+ // This one is needed for the deprecated useSharedValue function
6
+ // We can remove it once we remove the deprecation
5
7
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
- let Reanimated: any;
8
+ let Reanimated2: any;
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ let Reanimated3: any;
11
+ let reanimatedVersion: string;
7
12
 
8
13
  try {
9
- Reanimated = require("react-native-reanimated");
10
- } catch (e) {
11
- // Ignore
12
- }
13
-
14
- export const HAS_REANIMATED = !!Reanimated;
15
-
16
- function throwOnMissingReanimated() {
17
- throw new Error(
18
- "Reanimated was not found, make sure react-native-reanimated package is installed if you want to use \
19
- react-naitve-skia's integration layer API."
20
- );
21
- }
22
-
23
- let ReanimatedVersionTested = false;
24
-
25
- export function throwOnIncompatibleReanimatedVersion() {
26
- if (ReanimatedVersionTested) {
27
- // we avoid testing version more than once as it won't change and we throw
28
- // an error when version is incompatible
29
- return;
30
- }
31
- ReanimatedVersionTested = true;
32
- const reanimatedVersion =
14
+ Reanimated2 = require("react-native-reanimated");
15
+ reanimatedVersion =
33
16
  // eslint-disable-next-line import/extensions
34
17
  require("react-native-reanimated/package.json").version;
35
- // The first compatible version is 3.0.0 but we need to exclude 3.0.0 pre-releases
36
- // as they have limited support for the used API.
37
18
  if (
38
- !reanimatedVersion ||
39
- reanimatedVersion < "3.0.0" ||
40
- reanimatedVersion.includes("3.0.0-")
19
+ reanimatedVersion &&
20
+ (reanimatedVersion >= "3.0.0" || reanimatedVersion.includes("3.0.0-"))
41
21
  ) {
22
+ Reanimated3 = Reanimated2;
23
+ }
24
+ } catch (e) {}
25
+
26
+ export const HAS_REANIMATED2 = !!Reanimated2;
27
+ export const HAS_REANIMATED3 = !!Reanimated3;
28
+
29
+ function throwOnMissingReanimated2() {
30
+ if (!HAS_REANIMATED2) {
31
+ throw new Error(
32
+ "Reanimated was not found, make sure react-native-reanimated package is installed if you want to use \
33
+ react-naitve-skia's integration layer API."
34
+ );
35
+ }
36
+ }
37
+
38
+ function throwOnMissingReanimated3() {
39
+ if (!HAS_REANIMATED3) {
42
40
  throw new Error(
43
41
  `Reanimated version ${reanimatedVersion} is not supported, please upgrade to 3.0.0 or newer.`
44
42
  );
45
43
  }
44
+ throwOnMissingReanimated2();
46
45
  }
47
46
 
48
47
  export const useSharedValue =
49
- Reanimated?.useSharedValue ||
48
+ Reanimated2?.useSharedValue ||
50
49
  ((value: number) => useMemo(() => ({ value }), [value]));
51
50
 
52
- export const startMapper = Reanimated?.startMapper || throwOnMissingReanimated;
53
- export const stopMapper = Reanimated?.stopMapper || throwOnMissingReanimated;
54
- export const runOnJS = Reanimated?.runOnJS || throwOnMissingReanimated;
51
+ export const startMapper =
52
+ Reanimated2?.startMapper || throwOnMissingReanimated2;
53
+ export const stopMapper = Reanimated2?.stopMapper || throwOnMissingReanimated2;
54
+ export const runOnJS = Reanimated2?.runOnJS || throwOnMissingReanimated2;
55
55
  export const isSharedValue = <T>(
56
56
  value: unknown
57
57
  ): value is SharedValueType<T> => {
58
- if (!Reanimated) {
59
- throwOnMissingReanimated();
60
- }
61
- return !!value && Reanimated.isSharedValue(value);
58
+ throwOnMissingReanimated3();
59
+ return !!value && Reanimated3.isSharedValue(value);
62
60
  };
@@ -8,14 +8,13 @@ import {
8
8
  startMapper,
9
9
  stopMapper,
10
10
  isSharedValue,
11
- throwOnIncompatibleReanimatedVersion,
12
- HAS_REANIMATED,
11
+ HAS_REANIMATED3,
13
12
  } from "./moduleWrapper";
14
13
 
15
14
  const _bindings = new WeakMap<Node<unknown>, unknown>();
16
15
 
17
16
  export function extractReanimatedProps(props: AnimatedProps<any>) {
18
- if (!HAS_REANIMATED) {
17
+ if (!HAS_REANIMATED3) {
19
18
  return [props, {}];
20
19
  }
21
20
  const reanimatedProps = {} as AnimatedProps<any>;
@@ -40,12 +39,9 @@ export function bindReanimatedProps(
40
39
  node: Node<any>,
41
40
  reanimatedProps: AnimatedProps<any>
42
41
  ) {
43
- if (!HAS_REANIMATED) {
42
+ if (!HAS_REANIMATED3) {
44
43
  return;
45
44
  }
46
- if (__DEV__) {
47
- throwOnIncompatibleReanimatedVersion();
48
- }
49
45
  const sharedValues = Object.values(reanimatedProps);
50
46
  const previousMapperId = _bindings.get(node);
51
47
  if (previousMapperId !== undefined) {
@@ -3,7 +3,7 @@ import { useEffect } from "react";
3
3
  import type { SharedValueType } from "../../renderer/processors/Animations";
4
4
 
5
5
  import {
6
- HAS_REANIMATED,
6
+ HAS_REANIMATED2,
7
7
  useSharedValue,
8
8
  runOnJS,
9
9
  startMapper,
@@ -28,7 +28,7 @@ Learn more at https://shopify.github.io/react-native-skia/.`
28
28
  const input = useSharedValue(0);
29
29
 
30
30
  useEffect(() => {
31
- if (!HAS_REANIMATED) {
31
+ if (!HAS_REANIMATED2) {
32
32
  console.warn(
33
33
  "Reanimated was not found and the useSharedValueEffect hook will have no effect."
34
34
  );