@shopify/react-native-skia 0.1.210 → 0.1.211

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. package/cpp/api/JsiSkAnimatedImage.h +60 -0
  2. package/cpp/api/JsiSkAnimatedImageFactory.h +39 -0
  3. package/cpp/api/JsiSkApi.h +4 -0
  4. package/cpp/api/JsiSkImage.h +15 -23
  5. package/lib/commonjs/external/reanimated/moduleWrapper.d.ts +2 -0
  6. package/lib/commonjs/external/reanimated/moduleWrapper.js +11 -11
  7. package/lib/commonjs/external/reanimated/moduleWrapper.js.map +1 -1
  8. package/lib/commonjs/skia/core/AnimatedImage.d.ts +6 -0
  9. package/lib/commonjs/skia/core/AnimatedImage.js +65 -0
  10. package/lib/commonjs/skia/core/AnimatedImage.js.map +1 -0
  11. package/lib/commonjs/skia/core/index.d.ts +1 -0
  12. package/lib/commonjs/skia/core/index.js +13 -0
  13. package/lib/commonjs/skia/core/index.js.map +1 -1
  14. package/lib/commonjs/skia/types/AnimatedImage/AnimatedImage.d.ts +24 -0
  15. package/lib/commonjs/skia/types/AnimatedImage/AnimatedImage.js +6 -0
  16. package/lib/commonjs/skia/types/AnimatedImage/AnimatedImage.js.map +1 -0
  17. package/lib/commonjs/skia/types/AnimatedImage/AnimatedImageFactory.d.ts +13 -0
  18. package/lib/commonjs/skia/types/AnimatedImage/AnimatedImageFactory.js +6 -0
  19. package/lib/commonjs/skia/types/AnimatedImage/AnimatedImageFactory.js.map +1 -0
  20. package/lib/commonjs/skia/types/AnimatedImage/index.d.ts +2 -0
  21. package/lib/commonjs/skia/types/AnimatedImage/index.js +32 -0
  22. package/lib/commonjs/skia/types/AnimatedImage/index.js.map +1 -0
  23. package/lib/commonjs/skia/types/Skia.d.ts +2 -0
  24. package/lib/commonjs/skia/types/Skia.js.map +1 -1
  25. package/lib/commonjs/skia/types/index.d.ts +1 -0
  26. package/lib/commonjs/skia/types/index.js +13 -0
  27. package/lib/commonjs/skia/types/index.js.map +1 -1
  28. package/lib/commonjs/skia/web/JsiSkAnimatedImage.d.ts +11 -0
  29. package/lib/commonjs/skia/web/JsiSkAnimatedImage.js +44 -0
  30. package/lib/commonjs/skia/web/JsiSkAnimatedImage.js.map +1 -0
  31. package/lib/commonjs/skia/web/JsiSkAnimatedImageFactory.d.ts +9 -0
  32. package/lib/commonjs/skia/web/JsiSkAnimatedImageFactory.js +32 -0
  33. package/lib/commonjs/skia/web/JsiSkAnimatedImageFactory.js.map +1 -0
  34. package/lib/commonjs/skia/web/JsiSkia.js +3 -0
  35. package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
  36. package/lib/module/external/reanimated/moduleWrapper.d.ts +2 -0
  37. package/lib/module/external/reanimated/moduleWrapper.js +8 -11
  38. package/lib/module/external/reanimated/moduleWrapper.js.map +1 -1
  39. package/lib/module/skia/core/AnimatedImage.d.ts +6 -0
  40. package/lib/module/skia/core/AnimatedImage.js +49 -0
  41. package/lib/module/skia/core/AnimatedImage.js.map +1 -0
  42. package/lib/module/skia/core/index.d.ts +1 -0
  43. package/lib/module/skia/core/index.js +1 -0
  44. package/lib/module/skia/core/index.js.map +1 -1
  45. package/lib/module/skia/types/AnimatedImage/AnimatedImage.d.ts +24 -0
  46. package/lib/module/skia/types/AnimatedImage/AnimatedImage.js +2 -0
  47. package/lib/module/skia/types/AnimatedImage/AnimatedImage.js.map +1 -0
  48. package/lib/module/skia/types/AnimatedImage/AnimatedImageFactory.d.ts +13 -0
  49. package/lib/module/skia/types/AnimatedImage/AnimatedImageFactory.js +2 -0
  50. package/lib/module/skia/types/AnimatedImage/AnimatedImageFactory.js.map +1 -0
  51. package/lib/module/skia/types/AnimatedImage/index.d.ts +2 -0
  52. package/lib/module/skia/types/AnimatedImage/index.js +3 -0
  53. package/lib/module/skia/types/AnimatedImage/index.js.map +1 -0
  54. package/lib/module/skia/types/Skia.d.ts +2 -0
  55. package/lib/module/skia/types/Skia.js.map +1 -1
  56. package/lib/module/skia/types/index.d.ts +1 -0
  57. package/lib/module/skia/types/index.js +1 -0
  58. package/lib/module/skia/types/index.js.map +1 -1
  59. package/lib/module/skia/web/JsiSkAnimatedImage.d.ts +11 -0
  60. package/lib/module/skia/web/JsiSkAnimatedImage.js +33 -0
  61. package/lib/module/skia/web/JsiSkAnimatedImage.js.map +1 -0
  62. package/lib/module/skia/web/JsiSkAnimatedImageFactory.d.ts +9 -0
  63. package/lib/module/skia/web/JsiSkAnimatedImageFactory.js +20 -0
  64. package/lib/module/skia/web/JsiSkAnimatedImageFactory.js.map +1 -0
  65. package/lib/module/skia/web/JsiSkia.js +2 -0
  66. package/lib/module/skia/web/JsiSkia.js.map +1 -1
  67. package/lib/typescript/src/external/reanimated/moduleWrapper.d.ts +2 -0
  68. package/lib/typescript/src/skia/core/AnimatedImage.d.ts +6 -0
  69. package/lib/typescript/src/skia/core/index.d.ts +1 -0
  70. package/lib/typescript/src/skia/types/AnimatedImage/AnimatedImage.d.ts +24 -0
  71. package/lib/typescript/src/skia/types/AnimatedImage/AnimatedImageFactory.d.ts +13 -0
  72. package/lib/typescript/src/skia/types/AnimatedImage/index.d.ts +2 -0
  73. package/lib/typescript/src/skia/types/Skia.d.ts +2 -0
  74. package/lib/typescript/src/skia/types/index.d.ts +1 -0
  75. package/lib/typescript/src/skia/web/JsiSkAnimatedImage.d.ts +11 -0
  76. package/lib/typescript/src/skia/web/JsiSkAnimatedImageFactory.d.ts +9 -0
  77. package/package.json +1 -1
  78. package/src/external/reanimated/moduleWrapper.ts +9 -8
  79. package/src/skia/core/AnimatedImage.ts +63 -0
  80. package/src/skia/core/index.ts +1 -0
  81. package/src/skia/types/AnimatedImage/AnimatedImage.ts +29 -0
  82. package/src/skia/types/AnimatedImage/AnimatedImageFactory.ts +15 -0
  83. package/src/skia/types/AnimatedImage/index.ts +2 -0
  84. package/src/skia/types/Skia.ts +3 -0
  85. package/src/skia/types/index.ts +1 -0
  86. package/src/skia/web/JsiSkAnimatedImage.ts +35 -0
  87. package/src/skia/web/JsiSkAnimatedImageFactory.ts +27 -0
  88. package/src/skia/web/JsiSkia.ts +2 -0
@@ -1,7 +1,9 @@
1
1
  import type { SharedValueType } from "../../renderer/processors/Animations";
2
2
  export declare const HAS_REANIMATED2: boolean;
3
3
  export declare const HAS_REANIMATED3: boolean;
4
+ export declare function throwOnMissingReanimated(): void;
4
5
  export declare const useSharedValue: any;
6
+ export declare const useFrameCallback: (...args: any[]) => any;
5
7
  export declare const startMapper: any;
6
8
  export declare const stopMapper: any;
7
9
  export declare const runOnJS: any;
@@ -0,0 +1,6 @@
1
+ import type { DataSourceParam } from "../types";
2
+ /**
3
+ * Returns a Skia Animated Image object
4
+ * */
5
+ export declare const useAnimatedImage: (source: DataSourceParam, onError?: ((err: Error) => void) | undefined) => import("../types").SkAnimatedImage | null;
6
+ export declare const useAnimatedImageValue: (source: DataSourceParam) => any;
@@ -2,6 +2,7 @@ export * from "./Data";
2
2
  export * from "./Font";
3
3
  export * from "./Typeface";
4
4
  export * from "./Image";
5
+ export * from "./AnimatedImage";
5
6
  export * from "./Picture";
6
7
  export * from "./SVG";
7
8
  export * from "./Vector";
@@ -0,0 +1,24 @@
1
+ import type { SkJSIInstance } from "../JsiInstance";
2
+ import type { SkImage } from "../Image";
3
+ export interface SkAnimatedImage extends SkJSIInstance<"AnimatedImage"> {
4
+ /**
5
+ * Decode the next frame.
6
+ *
7
+ * If the animation is on the last frame or has hit an error, returns
8
+ * kFinished (-1).
9
+ */
10
+ decodeNextFrame(): number;
11
+ /**
12
+ * Returns the current frame as an SkImage. The SkImage will not change
13
+ * after it has been returned.
14
+ * If there is no current frame, null will be returned.
15
+ */
16
+ getCurrentFrame(): SkImage | null;
17
+ /**
18
+ * How long to display the current frame.
19
+ *
20
+ * Useful for the first frame, for which decodeNextFrame is called
21
+ * internally.
22
+ */
23
+ currentFrameDuration(): number;
24
+ }
@@ -0,0 +1,13 @@
1
+ import type { SkData } from "../Data";
2
+ import type { SkAnimatedImage } from "./AnimatedImage";
3
+ export interface AnimatedImageFactory {
4
+ /**
5
+ * Decodes the given bytes into an animated image. Returns null if the bytes were invalid.
6
+ * The passed in bytes will be copied into the WASM heap, so the caller can dispose of them.
7
+ *
8
+ * The returned AnimatedImage will be "pointing to" the first frame, i.e. currentFrameDuration
9
+ * and makeImageAtCurrentFrame will be referring to the first frame.
10
+ * @param encoded
11
+ */
12
+ MakeAnimatedImageFromEncoded: (encoded: SkData) => SkAnimatedImage | null;
13
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./AnimatedImage";
2
+ export * from "./AnimatedImageFactory";
@@ -24,6 +24,7 @@ import type { SkContourMeasureIter } from "./ContourMeasure";
24
24
  import type { PictureFactory, SkPictureRecorder } from "./Picture";
25
25
  import type { Color, SkColor } from "./Color";
26
26
  import type { TypefaceFontProviderFactory } from "./Paragraph/TypefaceFontProviderFactory";
27
+ import type { AnimatedImageFactory } from "./AnimatedImage";
27
28
  /**
28
29
  * Declares the interface for the native Skia API
29
30
  */
@@ -63,6 +64,7 @@ export interface Skia {
63
64
  MakeVertices(mode: VertexMode, positions: SkPoint[], textureCoordinates?: SkPoint[] | null, colors?: SkColor[], indices?: number[] | null, isVolatile?: boolean): SkVertices;
64
65
  Data: DataFactory;
65
66
  Image: ImageFactory;
67
+ AnimatedImage: AnimatedImageFactory;
66
68
  SVG: SVGFactory;
67
69
  TextBlob: TextBlobFactory;
68
70
  Surface: SurfaceFactory;
@@ -6,6 +6,7 @@ export * from "./Vertices";
6
6
  export * from "./RuntimeEffect";
7
7
  export * from "./Shader";
8
8
  export * from "./Image";
9
+ export * from "./AnimatedImage";
9
10
  export * from "./ColorFilter";
10
11
  export * from "./ImageFilter";
11
12
  export * from "./Font";
@@ -0,0 +1,11 @@
1
+ import type { AnimatedImage, CanvasKit } from "canvaskit-wasm";
2
+ import type { SkAnimatedImage } from "../types/AnimatedImage";
3
+ import { HostObject } from "./Host";
4
+ import { JsiSkImage } from "./JsiSkImage";
5
+ export declare class JsiSkAnimatedImage extends HostObject<AnimatedImage, "AnimatedImage"> implements SkAnimatedImage {
6
+ constructor(CanvasKit: CanvasKit, ref: AnimatedImage);
7
+ decodeNextFrame(): number;
8
+ currentFrameDuration(): number;
9
+ getCurrentFrame(): JsiSkImage | null;
10
+ dispose: () => void;
11
+ }
@@ -0,0 +1,9 @@
1
+ import type { CanvasKit } from "canvaskit-wasm";
2
+ import type { SkData } from "../types";
3
+ import type { AnimatedImageFactory } from "../types/AnimatedImage/AnimatedImageFactory";
4
+ import { Host } from "./Host";
5
+ import { JsiSkAnimatedImage } from "./JsiSkAnimatedImage";
6
+ export declare class JsiSkAnimatedImageFactory extends Host implements AnimatedImageFactory {
7
+ constructor(CanvasKit: CanvasKit);
8
+ MakeAnimatedImageFromEncoded(encoded: SkData): JsiSkAnimatedImage | null;
9
+ }
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.210",
10
+ "version": "0.1.211",
11
11
  "description": "High-performance React Native Graphics using Skia",
12
12
  "main": "lib/module/index.js",
13
13
  "files": [
@@ -1,12 +1,13 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import { useMemo } from "react";
2
3
 
3
4
  import type { SharedValueType } from "../../renderer/processors/Animations";
4
5
 
5
6
  // This one is needed for the deprecated useSharedValue function
6
7
  // We can remove it once we remove the deprecation
7
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+
8
9
  let Reanimated2: any;
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+
10
11
  let Reanimated3: any;
11
12
  let reanimatedVersion: string;
12
13
 
@@ -26,7 +27,7 @@ try {
26
27
  export const HAS_REANIMATED2 = !!Reanimated2;
27
28
  export const HAS_REANIMATED3 = !!Reanimated3;
28
29
 
29
- function throwOnMissingReanimated2() {
30
+ export function throwOnMissingReanimated() {
30
31
  if (!HAS_REANIMATED2) {
31
32
  throw new Error(
32
33
  "Reanimated was not found, make sure react-native-reanimated package is installed if you want to use \
@@ -41,17 +42,17 @@ function throwOnMissingReanimated3() {
41
42
  `Reanimated version ${reanimatedVersion} is not supported, please upgrade to 3.0.0 or newer.`
42
43
  );
43
44
  }
44
- throwOnMissingReanimated2();
45
45
  }
46
46
 
47
47
  export const useSharedValue =
48
48
  Reanimated2?.useSharedValue ||
49
49
  ((value: number) => useMemo(() => ({ value }), [value]));
50
+ export const useFrameCallback: (...args: any[]) => any =
51
+ Reanimated2?.useFrameCallback || throwOnMissingReanimated;
50
52
 
51
- export const startMapper =
52
- Reanimated2?.startMapper || throwOnMissingReanimated2;
53
- export const stopMapper = Reanimated2?.stopMapper || throwOnMissingReanimated2;
54
- export const runOnJS = Reanimated2?.runOnJS || throwOnMissingReanimated2;
53
+ export const startMapper = Reanimated2?.startMapper || throwOnMissingReanimated;
54
+ export const stopMapper = Reanimated2?.stopMapper || throwOnMissingReanimated;
55
+ export const runOnJS = Reanimated2?.runOnJS || throwOnMissingReanimated;
55
56
  export const isSharedValue = <T>(
56
57
  value: unknown
57
58
  ): value is SharedValueType<T> => {
@@ -0,0 +1,63 @@
1
+ import {
2
+ throwOnMissingReanimated,
3
+ useFrameCallback,
4
+ useSharedValue,
5
+ } from "../../external/reanimated/moduleWrapper";
6
+ import { Skia } from "../Skia";
7
+ import type { DataSourceParam } from "../types";
8
+
9
+ import { useRawData } from "./Data";
10
+
11
+ const animatedImgFactory = Skia.AnimatedImage.MakeAnimatedImageFromEncoded.bind(
12
+ Skia.AnimatedImage
13
+ );
14
+
15
+ /**
16
+ * Returns a Skia Animated Image object
17
+ * */
18
+ export const useAnimatedImage = (
19
+ source: DataSourceParam,
20
+ onError?: (err: Error) => void
21
+ ) => useRawData(source, animatedImgFactory, onError);
22
+
23
+ const DEFAULT_FRAME_DURATION = 60;
24
+
25
+ export const useAnimatedImageValue = (source: DataSourceParam) => {
26
+ throwOnMissingReanimated();
27
+ const currentFrame = useSharedValue(null);
28
+ const lastTimestamp = useSharedValue(0);
29
+ const animatedImage = useAnimatedImage(source, (err) => {
30
+ console.error(err);
31
+ throw new Error(`Could not load animated image - got '${err.message}'`);
32
+ });
33
+ const frameDuration =
34
+ animatedImage?.currentFrameDuration() || DEFAULT_FRAME_DURATION;
35
+
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ useFrameCallback((frameInfo: any) => {
38
+ if (!animatedImage) {
39
+ currentFrame.value = null;
40
+ return;
41
+ }
42
+
43
+ const { timestamp } = frameInfo;
44
+ const elapsed = timestamp - lastTimestamp.value;
45
+
46
+ // Check if it's time to switch frames based on GIF frame duration
47
+ if (elapsed < frameDuration) {
48
+ return;
49
+ }
50
+
51
+ // Update the current frame
52
+ animatedImage.decodeNextFrame();
53
+ if (currentFrame.value) {
54
+ currentFrame.value.dispose();
55
+ }
56
+ currentFrame.value = animatedImage.getCurrentFrame();
57
+
58
+ // Update the last timestamp
59
+ lastTimestamp.value = timestamp;
60
+ // eslint-disable-next-line react-hooks/exhaustive-deps
61
+ }, true);
62
+ return currentFrame;
63
+ };
@@ -2,6 +2,7 @@ export * from "./Data";
2
2
  export * from "./Font";
3
3
  export * from "./Typeface";
4
4
  export * from "./Image";
5
+ export * from "./AnimatedImage";
5
6
  export * from "./Picture";
6
7
  export * from "./SVG";
7
8
  export * from "./Vector";
@@ -0,0 +1,29 @@
1
+ import type { SkJSIInstance } from "../JsiInstance";
2
+ import type { SkImage } from "../Image";
3
+
4
+ export interface SkAnimatedImage extends SkJSIInstance<"AnimatedImage"> {
5
+ /**
6
+ * Decode the next frame.
7
+ *
8
+ * If the animation is on the last frame or has hit an error, returns
9
+ * kFinished (-1).
10
+ */
11
+ decodeNextFrame(): number;
12
+
13
+ /**
14
+ * Returns the current frame as an SkImage. The SkImage will not change
15
+ * after it has been returned.
16
+ * If there is no current frame, null will be returned.
17
+ */
18
+ getCurrentFrame(): SkImage | null;
19
+
20
+ /**
21
+ * How long to display the current frame.
22
+ *
23
+ * Useful for the first frame, for which decodeNextFrame is called
24
+ * internally.
25
+ */
26
+ currentFrameDuration(): number;
27
+
28
+ // TODO - add the rest of the methods from the Skia API (see SkAnimatedImage.h)
29
+ }
@@ -0,0 +1,15 @@
1
+ import type { SkData } from "../Data";
2
+
3
+ import type { SkAnimatedImage } from "./AnimatedImage";
4
+
5
+ export interface AnimatedImageFactory {
6
+ /**
7
+ * Decodes the given bytes into an animated image. Returns null if the bytes were invalid.
8
+ * The passed in bytes will be copied into the WASM heap, so the caller can dispose of them.
9
+ *
10
+ * The returned AnimatedImage will be "pointing to" the first frame, i.e. currentFrameDuration
11
+ * and makeImageAtCurrentFrame will be referring to the first frame.
12
+ * @param encoded
13
+ */
14
+ MakeAnimatedImageFromEncoded: (encoded: SkData) => SkAnimatedImage | null;
15
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./AnimatedImage";
2
+ export * from "./AnimatedImageFactory";
@@ -28,6 +28,8 @@ import type { SkContourMeasureIter } from "./ContourMeasure";
28
28
  import type { PictureFactory, SkPictureRecorder } from "./Picture";
29
29
  import type { Color, SkColor } from "./Color";
30
30
  import type { TypefaceFontProviderFactory } from "./Paragraph/TypefaceFontProviderFactory";
31
+ import type { AnimatedImageFactory } from "./AnimatedImage";
32
+
31
33
  /**
32
34
  * Declares the interface for the native Skia API
33
35
  */
@@ -78,6 +80,7 @@ export interface Skia {
78
80
  ): SkVertices;
79
81
  Data: DataFactory;
80
82
  Image: ImageFactory;
83
+ AnimatedImage: AnimatedImageFactory;
81
84
  SVG: SVGFactory;
82
85
  TextBlob: TextBlobFactory;
83
86
  Surface: SurfaceFactory;
@@ -6,6 +6,7 @@ export * from "./Vertices";
6
6
  export * from "./RuntimeEffect";
7
7
  export * from "./Shader";
8
8
  export * from "./Image";
9
+ export * from "./AnimatedImage";
9
10
  export * from "./ColorFilter";
10
11
  export * from "./ImageFilter";
11
12
  export * from "./Font";
@@ -0,0 +1,35 @@
1
+ import type { AnimatedImage, CanvasKit } from "canvaskit-wasm";
2
+
3
+ import type { SkAnimatedImage } from "../types/AnimatedImage";
4
+
5
+ import { HostObject } from "./Host";
6
+ import { JsiSkImage } from "./JsiSkImage";
7
+
8
+ export class JsiSkAnimatedImage
9
+ extends HostObject<AnimatedImage, "AnimatedImage">
10
+ implements SkAnimatedImage
11
+ {
12
+ constructor(CanvasKit: CanvasKit, ref: AnimatedImage) {
13
+ super(CanvasKit, ref, "AnimatedImage");
14
+ }
15
+
16
+ decodeNextFrame() {
17
+ return this.ref.decodeNextFrame();
18
+ }
19
+
20
+ currentFrameDuration() {
21
+ return this.ref.currentFrameDuration();
22
+ }
23
+
24
+ getCurrentFrame() {
25
+ const image = this.ref.makeImageAtCurrentFrame();
26
+ if (image === null) {
27
+ return null;
28
+ }
29
+ return new JsiSkImage(this.CanvasKit, image);
30
+ }
31
+
32
+ dispose = () => {
33
+ this.ref.delete();
34
+ };
35
+ }
@@ -0,0 +1,27 @@
1
+ import type { CanvasKit } from "canvaskit-wasm";
2
+
3
+ import type { SkData } from "../types";
4
+ import type { AnimatedImageFactory } from "../types/AnimatedImage/AnimatedImageFactory";
5
+
6
+ import { Host } from "./Host";
7
+ import { JsiSkData } from "./JsiSkData";
8
+ import { JsiSkAnimatedImage } from "./JsiSkAnimatedImage";
9
+
10
+ export class JsiSkAnimatedImageFactory
11
+ extends Host
12
+ implements AnimatedImageFactory
13
+ {
14
+ constructor(CanvasKit: CanvasKit) {
15
+ super(CanvasKit);
16
+ }
17
+
18
+ MakeAnimatedImageFromEncoded(encoded: SkData) {
19
+ const image = this.CanvasKit.MakeAnimatedImageFromEncoded(
20
+ JsiSkData.fromValue(encoded)
21
+ );
22
+ if (image === null) {
23
+ return null;
24
+ }
25
+ return new JsiSkAnimatedImage(this.CanvasKit, image);
26
+ }
27
+ }
@@ -39,6 +39,7 @@ import { JsiSkPath } from "./JsiSkPath";
39
39
  import { JsiSkTypeface } from "./JsiSkTypeface";
40
40
  import { JsiSkTypefaceFontProviderFactory } from "./JsiSkTypefaceFontProviderFactory";
41
41
  import { JsiSkFontMgrFactory } from "./JsiSkFontMgrFactory";
42
+ import { JsiSkAnimatedImageFactory } from "./JsiSkAnimatedImageFactory";
42
43
 
43
44
  export const JsiSkApi = (CanvasKit: CanvasKit): Skia => ({
44
45
  Point: (x: number, y: number) =>
@@ -98,6 +99,7 @@ export const JsiSkApi = (CanvasKit: CanvasKit): Skia => ({
98
99
  MakeVertices: MakeVertices.bind(null, CanvasKit),
99
100
  Data: new JsiSkDataFactory(CanvasKit),
100
101
  Image: new JsiSkImageFactory(CanvasKit),
102
+ AnimatedImage: new JsiSkAnimatedImageFactory(CanvasKit),
101
103
  SVG: new JsiSkSVGFactory(CanvasKit),
102
104
  TextBlob: new JsiSkTextBlobFactory(CanvasKit),
103
105
  XYWHRect: (x: number, y: number, width: number, height: number) => {