@shopify/react-native-skia 2.4.17 → 2.4.19

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 (87) hide show
  1. package/android/cpp/rnskia-android/RNSkAndroidVideo.cpp +34 -0
  2. package/android/cpp/rnskia-android/RNSkAndroidVideo.h +3 -0
  3. package/android/src/main/java/com/shopify/reactnative/skia/RNSkVideo.java +72 -18
  4. package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +7 -7
  5. package/apple/RNSkAppleVideo.h +30 -3
  6. package/apple/RNSkAppleVideo.mm +172 -17
  7. package/cpp/api/JsiSkApi.h +15 -13
  8. package/cpp/api/JsiSkHostObjects.h +57 -3
  9. package/cpp/api/JsiSkImage.h +19 -5
  10. package/cpp/api/JsiSkPicture.h +19 -5
  11. package/cpp/api/JsiSkSurface.h +19 -5
  12. package/cpp/api/JsiVideo.h +15 -2
  13. package/cpp/api/recorder/Convertor.h +4 -2
  14. package/cpp/jsi2/EnumMapper.h +49 -34
  15. package/cpp/jsi2/JSIConverter.h +149 -99
  16. package/cpp/jsi2/NativeObject.h +23 -25
  17. package/cpp/jsi2/Promise.cpp +10 -6
  18. package/cpp/jsi2/Promise.h +9 -7
  19. package/cpp/rnskia/RNDawnContext.h +3 -8
  20. package/cpp/rnskia/RNSkManager.cpp +13 -7
  21. package/cpp/rnskia/RNSkVideo.h +3 -0
  22. package/cpp/rnwgpu/api/GPUAdapter.cpp +31 -32
  23. package/cpp/rnwgpu/api/GPUAdapter.h +1 -1
  24. package/cpp/rnwgpu/api/GPUBuffer.cpp +8 -8
  25. package/cpp/rnwgpu/api/GPUCommandEncoder.h +4 -4
  26. package/cpp/rnwgpu/api/GPUDevice.h +12 -12
  27. package/cpp/rnwgpu/api/GPUQueue.cpp +45 -44
  28. package/cpp/rnwgpu/api/GPUQueue.h +1 -1
  29. package/cpp/rnwgpu/api/GPURenderBundleEncoder.h +1 -1
  30. package/cpp/rnwgpu/api/GPURenderPassEncoder.h +1 -1
  31. package/cpp/rnwgpu/api/descriptors/GPUBindGroupEntry.h +1 -1
  32. package/cpp/rnwgpu/api/descriptors/GPUComputePipelineDescriptor.h +1 -1
  33. package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +7 -6
  34. package/cpp/rnwgpu/api/descriptors/GPURenderPassDescriptor.h +1 -1
  35. package/cpp/rnwgpu/api/descriptors/GPURenderPipelineDescriptor.h +1 -1
  36. package/cpp/rnwgpu/api/descriptors/GPUVertexState.h +1 -1
  37. package/cpp/rnwgpu/async/AsyncRunner.cpp +2 -1
  38. package/cpp/rnwgpu/async/AsyncRunner.h +2 -1
  39. package/lib/commonjs/external/reanimated/useVideo.js +30 -31
  40. package/lib/commonjs/external/reanimated/useVideo.js.map +1 -1
  41. package/lib/commonjs/renderer/Offscreen.js +1 -0
  42. package/lib/commonjs/renderer/Offscreen.js.map +1 -1
  43. package/lib/commonjs/skia/types/Video/Video.d.ts +3 -0
  44. package/lib/commonjs/skia/types/Video/Video.js.map +1 -1
  45. package/lib/commonjs/skia/web/JsiVideo.d.ts +3 -0
  46. package/lib/commonjs/skia/web/JsiVideo.js +9 -0
  47. package/lib/commonjs/skia/web/JsiVideo.js.map +1 -1
  48. package/lib/commonjs/sksg/Container.web.js +1 -0
  49. package/lib/commonjs/sksg/Container.web.js.map +1 -1
  50. package/lib/commonjs/sksg/HostConfig.js +4 -1
  51. package/lib/commonjs/sksg/HostConfig.js.map +1 -1
  52. package/lib/commonjs/sksg/Reconciler.js +6 -6
  53. package/lib/commonjs/sksg/Reconciler.js.map +1 -1
  54. package/lib/commonjs/sksg/StaticContainer.js +1 -0
  55. package/lib/commonjs/sksg/StaticContainer.js.map +1 -1
  56. package/lib/module/external/reanimated/useVideo.js +30 -31
  57. package/lib/module/external/reanimated/useVideo.js.map +1 -1
  58. package/lib/module/renderer/Offscreen.js +1 -0
  59. package/lib/module/renderer/Offscreen.js.map +1 -1
  60. package/lib/module/skia/types/Video/Video.d.ts +3 -0
  61. package/lib/module/skia/types/Video/Video.js.map +1 -1
  62. package/lib/module/skia/web/JsiVideo.d.ts +3 -0
  63. package/lib/module/skia/web/JsiVideo.js +9 -0
  64. package/lib/module/skia/web/JsiVideo.js.map +1 -1
  65. package/lib/module/sksg/Container.web.js +1 -0
  66. package/lib/module/sksg/Container.web.js.map +1 -1
  67. package/lib/module/sksg/HostConfig.js +4 -1
  68. package/lib/module/sksg/HostConfig.js.map +1 -1
  69. package/lib/module/sksg/Reconciler.js +6 -6
  70. package/lib/module/sksg/Reconciler.js.map +1 -1
  71. package/lib/module/sksg/StaticContainer.js +1 -0
  72. package/lib/module/sksg/StaticContainer.js.map +1 -1
  73. package/lib/typescript/lib/commonjs/skia/web/JsiVideo.d.ts +3 -0
  74. package/lib/typescript/lib/commonjs/sksg/HostConfig.d.ts +2 -0
  75. package/lib/typescript/lib/module/skia/web/JsiVideo.d.ts +3 -0
  76. package/lib/typescript/lib/module/sksg/HostConfig.d.ts +2 -0
  77. package/lib/typescript/src/skia/types/Video/Video.d.ts +3 -0
  78. package/lib/typescript/src/skia/web/JsiVideo.d.ts +3 -0
  79. package/package.json +1 -1
  80. package/src/external/reanimated/useVideo.ts +32 -32
  81. package/src/renderer/Offscreen.tsx +1 -0
  82. package/src/skia/types/Video/Video.ts +3 -0
  83. package/src/skia/web/JsiVideo.ts +12 -0
  84. package/src/sksg/Container.web.ts +1 -0
  85. package/src/sksg/HostConfig.ts +4 -0
  86. package/src/sksg/Reconciler.ts +5 -6
  87. package/src/sksg/StaticContainer.ts +1 -0
@@ -37,13 +37,11 @@ const defaultOptions = {
37
37
  looping: true,
38
38
  paused: false,
39
39
  seek: null,
40
- currentTime: 0,
41
40
  volume: 0
42
41
  };
43
42
  const useOption = value => {
44
43
  "worklet";
45
44
 
46
- // TODO: only create defaultValue is needed (via makeMutable)
47
45
  const defaultValue = _ReanimatedProxy.default.useSharedValue(_ReanimatedProxy.default.isSharedValue(value) ? value.value : value);
48
46
  return _ReanimatedProxy.default.isSharedValue(value) ? value : defaultValue;
49
47
  };
@@ -61,7 +59,6 @@ const useVideo = (source, userOptions) => {
61
59
  const volume = useOption((_userOptions$volume = userOptions === null || userOptions === void 0 ? void 0 : userOptions.volume) !== null && _userOptions$volume !== void 0 ? _userOptions$volume : defaultOptions.volume);
62
60
  const currentFrame = _ReanimatedProxy.default.useSharedValue(null);
63
61
  const currentTime = _ReanimatedProxy.default.useSharedValue(0);
64
- const lastTimestamp = _ReanimatedProxy.default.useSharedValue(-1);
65
62
  const duration = (0, _react.useMemo)(() => {
66
63
  var _video$duration;
67
64
  return (_video$duration = video === null || video === void 0 ? void 0 : video.duration()) !== null && _video$duration !== void 0 ? _video$duration : 0;
@@ -81,60 +78,62 @@ const useVideo = (source, userOptions) => {
81
78
  var _video$rotation;
82
79
  return (_video$rotation = video === null || video === void 0 ? void 0 : video.rotation()) !== null && _video$rotation !== void 0 ? _video$rotation : 0;
83
80
  }, [video]);
84
- const frameDuration = 1000 / framerate;
85
- const currentFrameDuration = Math.floor(frameDuration);
81
+
82
+ // Handle pause/play state changes
86
83
  _ReanimatedProxy.default.useAnimatedReaction(() => isPaused.value, paused => {
87
84
  if (paused) {
88
85
  video === null || video === void 0 || video.pause();
89
86
  } else {
90
- lastTimestamp.value = -1;
91
87
  video === null || video === void 0 || video.play();
92
88
  }
93
89
  });
90
+
91
+ // Handle seek
94
92
  _ReanimatedProxy.default.useAnimatedReaction(() => seek.value, value => {
95
93
  if (value !== null) {
96
94
  video === null || video === void 0 || video.seek(value);
97
- currentTime.value = value;
98
95
  seek.value = null;
99
96
  }
100
97
  });
98
+
99
+ // Handle volume changes
101
100
  _ReanimatedProxy.default.useAnimatedReaction(() => volume.value, value => {
102
101
  video === null || video === void 0 || video.setVolume(value);
103
102
  });
104
- _ReanimatedProxy.default.useFrameCallback(frameInfo => {
103
+
104
+ // Handle looping changes
105
+ _ReanimatedProxy.default.useAnimatedReaction(() => looping.value, value => {
106
+ video === null || video === void 0 || video.setLooping(value);
107
+ });
108
+
109
+ // Frame callback - simplified since native handles frame timing
110
+ _ReanimatedProxy.default.useFrameCallback(_frameInfo => {
105
111
  "worklet";
106
112
 
107
113
  if (!video) {
108
114
  return;
109
115
  }
110
- if (isPaused.value) {
111
- return;
112
- }
113
- const currentTimestamp = frameInfo.timestamp;
114
- if (lastTimestamp.value === -1) {
115
- lastTimestamp.value = currentTimestamp;
116
- }
117
- const delta = currentTimestamp - lastTimestamp.value;
118
- const isOver = currentTime.value + delta > duration;
119
- if (isOver && looping.value) {
120
- seek.value = 0;
121
- currentTime.value = seek.value;
122
- lastTimestamp.value = currentTimestamp;
123
- }
124
- // On Web the framerate is uknown.
125
- // This could be optimized by using requestVideoFrameCallback (Chrome only)
126
- if (delta >= currentFrameDuration && !isOver || _Platform.Platform.OS === "web") {
127
- setFrame(video, currentFrame);
128
- currentTime.value += delta;
129
- lastTimestamp.value = currentTimestamp;
130
- }
116
+ // Update current time from native player
117
+ currentTime.value = video.currentTime();
118
+ // Get the latest frame (native handles timing via CADisplayLink/etc)
119
+ setFrame(video, currentFrame);
131
120
  });
121
+
122
+ // Apply initial state when video becomes available
132
123
  (0, _react.useEffect)(() => {
124
+ if (video) {
125
+ video.setLooping(looping.value);
126
+ video.setVolume(volume.value);
127
+ if (isPaused.value) {
128
+ video.pause();
129
+ } else {
130
+ video.play();
131
+ }
132
+ }
133
133
  return () => {
134
- // TODO: should video simply be a shared value instead?
135
134
  _ReanimatedProxy.default.runOnUI(disposeVideo)(video);
136
135
  };
137
- }, [video]);
136
+ }, [video, isPaused, looping, volume]);
138
137
  return {
139
138
  currentFrame,
140
139
  currentTime,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_Platform","_ReanimatedProxy","_interopRequireDefault","_useVideoLoading","e","__esModule","default","copyFrameOnAndroid","currentFrame","Platform","OS","tex","value","makeNonTextureImage","dispose","setFrame","video","img","nextImage","defaultOptions","looping","paused","seek","currentTime","volume","useOption","defaultValue","Rea","useSharedValue","isSharedValue","disposeVideo","useVideo","source","userOptions","_userOptions$paused","_userOptions$looping","_userOptions$seek","_userOptions$volume","useVideoLoading","isPaused","lastTimestamp","duration","useMemo","_video$duration","framerate","_video$framerate","size","_video$size","width","height","rotation","_video$rotation","frameDuration","currentFrameDuration","Math","floor","useAnimatedReaction","pause","play","setVolume","useFrameCallback","frameInfo","currentTimestamp","timestamp","delta","isOver","useEffect","runOnUI","exports"],"sources":["useVideo.ts"],"sourcesContent":["import type { SharedValue, FrameInfo } from \"react-native-reanimated\";\nimport { useEffect, useMemo } from \"react\";\n\nimport type { SkImage, Video } from \"../../skia/types\";\nimport { Platform } from \"../../Platform\";\n\nimport Rea from \"./ReanimatedProxy\";\nimport { useVideoLoading } from \"./useVideoLoading\";\n\ntype MaybeAnimated<T> = SharedValue<T> | T;\n\ninterface PlaybackOptions {\n looping: MaybeAnimated<boolean>;\n paused: MaybeAnimated<boolean>;\n seek: MaybeAnimated<number | null>;\n volume: MaybeAnimated<number>;\n}\n\nconst copyFrameOnAndroid = (currentFrame: SharedValue<SkImage | null>) => {\n \"worklet\";\n // on android we need to copy the texture before it's invalidated\n if (Platform.OS === \"android\") {\n const tex = currentFrame.value;\n if (tex) {\n currentFrame.value = tex.makeNonTextureImage();\n tex.dispose();\n }\n }\n};\n\nconst setFrame = (video: Video, currentFrame: SharedValue<SkImage | null>) => {\n \"worklet\";\n const img = video.nextImage();\n if (img) {\n if (currentFrame.value) {\n currentFrame.value.dispose();\n }\n currentFrame.value = img;\n copyFrameOnAndroid(currentFrame);\n }\n};\n\nconst defaultOptions = {\n looping: true,\n paused: false,\n seek: null,\n currentTime: 0,\n volume: 0,\n};\n\nconst useOption = <T>(value: MaybeAnimated<T>) => {\n \"worklet\";\n // TODO: only create defaultValue is needed (via makeMutable)\n const defaultValue = Rea.useSharedValue(\n Rea.isSharedValue(value) ? value.value : value\n );\n return Rea.isSharedValue(value)\n ? (value as SharedValue<T>)\n : (defaultValue as SharedValue<T>);\n};\n\nconst disposeVideo = (video: Video | null) => {\n \"worklet\";\n video?.dispose();\n};\n\nexport const useVideo = (\n source: string | null,\n userOptions?: Partial<PlaybackOptions>\n) => {\n const video = useVideoLoading(source);\n const isPaused = useOption(userOptions?.paused ?? defaultOptions.paused);\n const looping = useOption(userOptions?.looping ?? defaultOptions.looping);\n const seek = useOption(userOptions?.seek ?? defaultOptions.seek);\n const volume = useOption(userOptions?.volume ?? defaultOptions.volume);\n const currentFrame = Rea.useSharedValue<null | SkImage>(null);\n const currentTime = Rea.useSharedValue(0);\n const lastTimestamp = Rea.useSharedValue(-1);\n const duration = useMemo(() => video?.duration() ?? 0, [video]);\n const framerate = useMemo(\n () => (Platform.OS === \"web\" ? -1 : (video?.framerate() ?? 0)),\n [video]\n );\n const size = useMemo(() => video?.size() ?? { width: 0, height: 0 }, [video]);\n const rotation = useMemo(() => video?.rotation() ?? 0, [video]);\n const frameDuration = 1000 / framerate;\n const currentFrameDuration = Math.floor(frameDuration);\n Rea.useAnimatedReaction(\n () => isPaused.value,\n (paused) => {\n if (paused) {\n video?.pause();\n } else {\n lastTimestamp.value = -1;\n video?.play();\n }\n }\n );\n Rea.useAnimatedReaction(\n () => seek.value,\n (value) => {\n if (value !== null) {\n video?.seek(value);\n currentTime.value = value;\n seek.value = null;\n }\n }\n );\n Rea.useAnimatedReaction(\n () => volume.value,\n (value) => {\n video?.setVolume(value);\n }\n );\n Rea.useFrameCallback((frameInfo: FrameInfo) => {\n \"worklet\";\n if (!video) {\n return;\n }\n if (isPaused.value) {\n return;\n }\n const currentTimestamp = frameInfo.timestamp;\n if (lastTimestamp.value === -1) {\n lastTimestamp.value = currentTimestamp;\n }\n const delta = currentTimestamp - lastTimestamp.value;\n\n const isOver = currentTime.value + delta > duration;\n if (isOver && looping.value) {\n seek.value = 0;\n currentTime.value = seek.value;\n lastTimestamp.value = currentTimestamp;\n }\n // On Web the framerate is uknown.\n // This could be optimized by using requestVideoFrameCallback (Chrome only)\n if ((delta >= currentFrameDuration && !isOver) || Platform.OS === \"web\") {\n setFrame(video, currentFrame);\n currentTime.value += delta;\n lastTimestamp.value = currentTimestamp;\n }\n });\n\n useEffect(() => {\n return () => {\n // TODO: should video simply be a shared value instead?\n Rea.runOnUI(disposeVideo)(video);\n };\n }, [video]);\n\n return {\n currentFrame,\n currentTime,\n duration,\n framerate,\n rotation,\n size,\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_Platform","_ReanimatedProxy","_interopRequireDefault","_useVideoLoading","e","__esModule","default","copyFrameOnAndroid","currentFrame","Platform","OS","tex","value","makeNonTextureImage","dispose","setFrame","video","img","nextImage","defaultOptions","looping","paused","seek","volume","useOption","defaultValue","Rea","useSharedValue","isSharedValue","disposeVideo","useVideo","source","userOptions","_userOptions$paused","_userOptions$looping","_userOptions$seek","_userOptions$volume","useVideoLoading","isPaused","currentTime","duration","useMemo","_video$duration","framerate","_video$framerate","size","_video$size","width","height","rotation","_video$rotation","useAnimatedReaction","pause","play","setVolume","setLooping","useFrameCallback","_frameInfo","useEffect","runOnUI","exports"],"sources":["useVideo.ts"],"sourcesContent":["import type { SharedValue, FrameInfo } from \"react-native-reanimated\";\nimport { useEffect, useMemo } from \"react\";\n\nimport type { SkImage, Video } from \"../../skia/types\";\nimport { Platform } from \"../../Platform\";\n\nimport Rea from \"./ReanimatedProxy\";\nimport { useVideoLoading } from \"./useVideoLoading\";\n\ntype MaybeAnimated<T> = SharedValue<T> | T;\n\ninterface PlaybackOptions {\n looping: MaybeAnimated<boolean>;\n paused: MaybeAnimated<boolean>;\n seek: MaybeAnimated<number | null>;\n volume: MaybeAnimated<number>;\n}\n\nconst copyFrameOnAndroid = (currentFrame: SharedValue<SkImage | null>) => {\n \"worklet\";\n // on android we need to copy the texture before it's invalidated\n if (Platform.OS === \"android\") {\n const tex = currentFrame.value;\n if (tex) {\n currentFrame.value = tex.makeNonTextureImage();\n tex.dispose();\n }\n }\n};\n\nconst setFrame = (video: Video, currentFrame: SharedValue<SkImage | null>) => {\n \"worklet\";\n const img = video.nextImage();\n if (img) {\n if (currentFrame.value) {\n currentFrame.value.dispose();\n }\n currentFrame.value = img;\n copyFrameOnAndroid(currentFrame);\n }\n};\n\nconst defaultOptions = {\n looping: true,\n paused: false,\n seek: null,\n volume: 0,\n};\n\nconst useOption = <T>(value: MaybeAnimated<T>) => {\n \"worklet\";\n const defaultValue = Rea.useSharedValue(\n Rea.isSharedValue(value) ? value.value : value\n );\n return Rea.isSharedValue(value)\n ? (value as SharedValue<T>)\n : (defaultValue as SharedValue<T>);\n};\n\nconst disposeVideo = (video: Video | null) => {\n \"worklet\";\n video?.dispose();\n};\n\nexport const useVideo = (\n source: string | null,\n userOptions?: Partial<PlaybackOptions>\n) => {\n const video = useVideoLoading(source);\n const isPaused = useOption(userOptions?.paused ?? defaultOptions.paused);\n const looping = useOption(userOptions?.looping ?? defaultOptions.looping);\n const seek = useOption(userOptions?.seek ?? defaultOptions.seek);\n const volume = useOption(userOptions?.volume ?? defaultOptions.volume);\n const currentFrame = Rea.useSharedValue<null | SkImage>(null);\n const currentTime = Rea.useSharedValue(0);\n const duration = useMemo(() => video?.duration() ?? 0, [video]);\n const framerate = useMemo(\n () => (Platform.OS === \"web\" ? -1 : (video?.framerate() ?? 0)),\n [video]\n );\n const size = useMemo(() => video?.size() ?? { width: 0, height: 0 }, [video]);\n const rotation = useMemo(() => video?.rotation() ?? 0, [video]);\n\n // Handle pause/play state changes\n Rea.useAnimatedReaction(\n () => isPaused.value,\n (paused) => {\n if (paused) {\n video?.pause();\n } else {\n video?.play();\n }\n }\n );\n\n // Handle seek\n Rea.useAnimatedReaction(\n () => seek.value,\n (value) => {\n if (value !== null) {\n video?.seek(value);\n seek.value = null;\n }\n }\n );\n\n // Handle volume changes\n Rea.useAnimatedReaction(\n () => volume.value,\n (value) => {\n video?.setVolume(value);\n }\n );\n\n // Handle looping changes\n Rea.useAnimatedReaction(\n () => looping.value,\n (value) => {\n video?.setLooping(value);\n }\n );\n\n // Frame callback - simplified since native handles frame timing\n Rea.useFrameCallback((_frameInfo: FrameInfo) => {\n \"worklet\";\n if (!video) {\n return;\n }\n // Update current time from native player\n currentTime.value = video.currentTime();\n // Get the latest frame (native handles timing via CADisplayLink/etc)\n setFrame(video, currentFrame);\n });\n\n // Apply initial state when video becomes available\n useEffect(() => {\n if (video) {\n video.setLooping(looping.value);\n video.setVolume(volume.value);\n if (isPaused.value) {\n video.pause();\n } else {\n video.play();\n }\n }\n return () => {\n Rea.runOnUI(disposeVideo)(video);\n };\n }, [video, isPaused, looping, volume]);\n\n return {\n currentFrame,\n currentTime,\n duration,\n framerate,\n rotation,\n size,\n };\n};\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAGA,IAAAC,SAAA,GAAAD,OAAA;AAEA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AAAoD,SAAAG,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAWpD,MAAMG,kBAAkB,GAAIC,YAAyC,IAAK;EACxE,SAAS;;EACT;EACA,IAAIC,kBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;IAC7B,MAAMC,GAAG,GAAGH,YAAY,CAACI,KAAK;IAC9B,IAAID,GAAG,EAAE;MACPH,YAAY,CAACI,KAAK,GAAGD,GAAG,CAACE,mBAAmB,CAAC,CAAC;MAC9CF,GAAG,CAACG,OAAO,CAAC,CAAC;IACf;EACF;AACF,CAAC;AAED,MAAMC,QAAQ,GAAGA,CAACC,KAAY,EAAER,YAAyC,KAAK;EAC5E,SAAS;;EACT,MAAMS,GAAG,GAAGD,KAAK,CAACE,SAAS,CAAC,CAAC;EAC7B,IAAID,GAAG,EAAE;IACP,IAAIT,YAAY,CAACI,KAAK,EAAE;MACtBJ,YAAY,CAACI,KAAK,CAACE,OAAO,CAAC,CAAC;IAC9B;IACAN,YAAY,CAACI,KAAK,GAAGK,GAAG;IACxBV,kBAAkB,CAACC,YAAY,CAAC;EAClC;AACF,CAAC;AAED,MAAMW,cAAc,GAAG;EACrBC,OAAO,EAAE,IAAI;EACbC,MAAM,EAAE,KAAK;EACbC,IAAI,EAAE,IAAI;EACVC,MAAM,EAAE;AACV,CAAC;AAED,MAAMC,SAAS,GAAOZ,KAAuB,IAAK;EAChD,SAAS;;EACT,MAAMa,YAAY,GAAGC,wBAAG,CAACC,cAAc,CACrCD,wBAAG,CAACE,aAAa,CAAChB,KAAK,CAAC,GAAGA,KAAK,CAACA,KAAK,GAAGA,KAC3C,CAAC;EACD,OAAOc,wBAAG,CAACE,aAAa,CAAChB,KAAK,CAAC,GAC1BA,KAAK,GACLa,YAA+B;AACtC,CAAC;AAED,MAAMI,YAAY,GAAIb,KAAmB,IAAK;EAC5C,SAAS;;EACTA,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEF,OAAO,CAAC,CAAC;AAClB,CAAC;AAEM,MAAMgB,QAAQ,GAAGA,CACtBC,MAAqB,EACrBC,WAAsC,KACnC;EAAA,IAAAC,mBAAA,EAAAC,oBAAA,EAAAC,iBAAA,EAAAC,mBAAA;EACH,MAAMpB,KAAK,GAAG,IAAAqB,gCAAe,EAACN,MAAM,CAAC;EACrC,MAAMO,QAAQ,GAAGd,SAAS,EAAAS,mBAAA,GAACD,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEX,MAAM,cAAAY,mBAAA,cAAAA,mBAAA,GAAId,cAAc,CAACE,MAAM,CAAC;EACxE,MAAMD,OAAO,GAAGI,SAAS,EAAAU,oBAAA,GAACF,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEZ,OAAO,cAAAc,oBAAA,cAAAA,oBAAA,GAAIf,cAAc,CAACC,OAAO,CAAC;EACzE,MAAME,IAAI,GAAGE,SAAS,EAAAW,iBAAA,GAACH,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEV,IAAI,cAAAa,iBAAA,cAAAA,iBAAA,GAAIhB,cAAc,CAACG,IAAI,CAAC;EAChE,MAAMC,MAAM,GAAGC,SAAS,EAAAY,mBAAA,GAACJ,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAET,MAAM,cAAAa,mBAAA,cAAAA,mBAAA,GAAIjB,cAAc,CAACI,MAAM,CAAC;EACtE,MAAMf,YAAY,GAAGkB,wBAAG,CAACC,cAAc,CAAiB,IAAI,CAAC;EAC7D,MAAMY,WAAW,GAAGb,wBAAG,CAACC,cAAc,CAAC,CAAC,CAAC;EACzC,MAAMa,QAAQ,GAAG,IAAAC,cAAO,EAAC;IAAA,IAAAC,eAAA;IAAA,QAAAA,eAAA,GAAM1B,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEwB,QAAQ,CAAC,CAAC,cAAAE,eAAA,cAAAA,eAAA,GAAI,CAAC;EAAA,GAAE,CAAC1B,KAAK,CAAC,CAAC;EAC/D,MAAM2B,SAAS,GAAG,IAAAF,cAAO,EACvB;IAAA,IAAAG,gBAAA;IAAA,OAAOnC,kBAAQ,CAACC,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC,IAAAkC,gBAAA,GAAI5B,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAE2B,SAAS,CAAC,CAAC,cAAAC,gBAAA,cAAAA,gBAAA,GAAI,CAAE;EAAA,CAAC,EAC9D,CAAC5B,KAAK,CACR,CAAC;EACD,MAAM6B,IAAI,GAAG,IAAAJ,cAAO,EAAC;IAAA,IAAAK,WAAA;IAAA,QAAAA,WAAA,GAAM9B,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAE6B,IAAI,CAAC,CAAC,cAAAC,WAAA,cAAAA,WAAA,GAAI;MAAEC,KAAK,EAAE,CAAC;MAAEC,MAAM,EAAE;IAAE,CAAC;EAAA,GAAE,CAAChC,KAAK,CAAC,CAAC;EAC7E,MAAMiC,QAAQ,GAAG,IAAAR,cAAO,EAAC;IAAA,IAAAS,eAAA;IAAA,QAAAA,eAAA,GAAMlC,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEiC,QAAQ,CAAC,CAAC,cAAAC,eAAA,cAAAA,eAAA,GAAI,CAAC;EAAA,GAAE,CAAClC,KAAK,CAAC,CAAC;;EAE/D;EACAU,wBAAG,CAACyB,mBAAmB,CACrB,MAAMb,QAAQ,CAAC1B,KAAK,EACnBS,MAAM,IAAK;IACV,IAAIA,MAAM,EAAE;MACVL,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEoC,KAAK,CAAC,CAAC;IAChB,CAAC,MAAM;MACLpC,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEqC,IAAI,CAAC,CAAC;IACf;EACF,CACF,CAAC;;EAED;EACA3B,wBAAG,CAACyB,mBAAmB,CACrB,MAAM7B,IAAI,CAACV,KAAK,EACfA,KAAK,IAAK;IACT,IAAIA,KAAK,KAAK,IAAI,EAAE;MAClBI,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEM,IAAI,CAACV,KAAK,CAAC;MAClBU,IAAI,CAACV,KAAK,GAAG,IAAI;IACnB;EACF,CACF,CAAC;;EAED;EACAc,wBAAG,CAACyB,mBAAmB,CACrB,MAAM5B,MAAM,CAACX,KAAK,EACjBA,KAAK,IAAK;IACTI,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEsC,SAAS,CAAC1C,KAAK,CAAC;EACzB,CACF,CAAC;;EAED;EACAc,wBAAG,CAACyB,mBAAmB,CACrB,MAAM/B,OAAO,CAACR,KAAK,EAClBA,KAAK,IAAK;IACTI,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEuC,UAAU,CAAC3C,KAAK,CAAC;EAC1B,CACF,CAAC;;EAED;EACAc,wBAAG,CAAC8B,gBAAgB,CAAEC,UAAqB,IAAK;IAC9C,SAAS;;IACT,IAAI,CAACzC,KAAK,EAAE;MACV;IACF;IACA;IACAuB,WAAW,CAAC3B,KAAK,GAAGI,KAAK,CAACuB,WAAW,CAAC,CAAC;IACvC;IACAxB,QAAQ,CAACC,KAAK,EAAER,YAAY,CAAC;EAC/B,CAAC,CAAC;;EAEF;EACA,IAAAkD,gBAAS,EAAC,MAAM;IACd,IAAI1C,KAAK,EAAE;MACTA,KAAK,CAACuC,UAAU,CAACnC,OAAO,CAACR,KAAK,CAAC;MAC/BI,KAAK,CAACsC,SAAS,CAAC/B,MAAM,CAACX,KAAK,CAAC;MAC7B,IAAI0B,QAAQ,CAAC1B,KAAK,EAAE;QAClBI,KAAK,CAACoC,KAAK,CAAC,CAAC;MACf,CAAC,MAAM;QACLpC,KAAK,CAACqC,IAAI,CAAC,CAAC;MACd;IACF;IACA,OAAO,MAAM;MACX3B,wBAAG,CAACiC,OAAO,CAAC9B,YAAY,CAAC,CAACb,KAAK,CAAC;IAClC,CAAC;EACH,CAAC,EAAE,CAACA,KAAK,EAAEsB,QAAQ,EAAElB,OAAO,EAAEG,MAAM,CAAC,CAAC;EAEtC,OAAO;IACLf,YAAY;IACZ+B,WAAW;IACXC,QAAQ;IACRG,SAAS;IACTM,QAAQ;IACRJ;EACF,CAAC;AACH,CAAC;AAACe,OAAA,CAAA9B,QAAA,GAAAA,QAAA","ignoreList":[]}
@@ -20,6 +20,7 @@ const drawAsPicture = async (element, bounds) => {
20
20
  await root.render(element);
21
21
  root.drawOnCanvas(canvas);
22
22
  const picture = recorder.finishRecordingAsPicture();
23
+ recorder.dispose();
23
24
  root.unmount();
24
25
  return picture;
25
26
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_skia","require","_Platform","_Reconciler","isOnMainThread","_WORKLET","Platform","OS","exports","drawAsPicture","element","bounds","recorder","Skia","PictureRecorder","canvas","beginRecording","root","SkiaSGRoot","render","drawOnCanvas","picture","finishRecordingAsPicture","unmount","drawAsImage","size","drawAsImageFromPicture","surface","Surface","MakeOffscreen","width","height","getCanvas","drawPicture","flush","image","makeImageSnapshot","makeNonTextureImage"],"sources":["Offscreen.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\n\nimport type { SkPicture, SkRect, SkSize } from \"../skia/types\";\nimport { Skia } from \"../skia\";\nimport { Platform } from \"../Platform\";\nimport { SkiaSGRoot } from \"../sksg/Reconciler\";\n\nexport const isOnMainThread = () => {\n \"worklet\";\n return (\n (typeof _WORKLET !== \"undefined\" && _WORKLET === true) ||\n Platform.OS === \"web\"\n );\n};\n\nexport const drawAsPicture = async (element: ReactElement, bounds?: SkRect) => {\n const recorder = Skia.PictureRecorder();\n const canvas = recorder.beginRecording(bounds);\n const root = new SkiaSGRoot(Skia);\n await root.render(element);\n root.drawOnCanvas(canvas);\n const picture = recorder.finishRecordingAsPicture();\n root.unmount();\n return picture;\n};\n\nexport const drawAsImage = async (element: ReactElement, size: SkSize) => {\n return drawAsImageFromPicture(await drawAsPicture(element), size);\n};\n\nexport const drawAsImageFromPicture = (picture: SkPicture, size: SkSize) => {\n \"worklet\";\n const surface = Skia.Surface.MakeOffscreen(size.width, size.height)!;\n const canvas = surface.getCanvas();\n canvas.drawPicture(picture);\n surface.flush();\n const image = surface.makeImageSnapshot();\n return image.makeNonTextureImage();\n};\n"],"mappings":";;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AAEO,MAAMG,cAAc,GAAGA,CAAA,KAAM;EAClC,SAAS;;EACT,OACG,OAAOC,QAAQ,KAAK,WAAW,IAAIA,QAAQ,KAAK,IAAI,IACrDC,kBAAQ,CAACC,EAAE,KAAK,KAAK;AAEzB,CAAC;AAACC,OAAA,CAAAJ,cAAA,GAAAA,cAAA;AAEK,MAAMK,aAAa,GAAG,MAAAA,CAAOC,OAAqB,EAAEC,MAAe,KAAK;EAC7E,MAAMC,QAAQ,GAAGC,UAAI,CAACC,eAAe,CAAC,CAAC;EACvC,MAAMC,MAAM,GAAGH,QAAQ,CAACI,cAAc,CAACL,MAAM,CAAC;EAC9C,MAAMM,IAAI,GAAG,IAAIC,sBAAU,CAACL,UAAI,CAAC;EACjC,MAAMI,IAAI,CAACE,MAAM,CAACT,OAAO,CAAC;EAC1BO,IAAI,CAACG,YAAY,CAACL,MAAM,CAAC;EACzB,MAAMM,OAAO,GAAGT,QAAQ,CAACU,wBAAwB,CAAC,CAAC;EACnDL,IAAI,CAACM,OAAO,CAAC,CAAC;EACd,OAAOF,OAAO;AAChB,CAAC;AAACb,OAAA,CAAAC,aAAA,GAAAA,aAAA;AAEK,MAAMe,WAAW,GAAG,MAAAA,CAAOd,OAAqB,EAAEe,IAAY,KAAK;EACxE,OAAOC,sBAAsB,CAAC,MAAMjB,aAAa,CAACC,OAAO,CAAC,EAAEe,IAAI,CAAC;AACnE,CAAC;AAACjB,OAAA,CAAAgB,WAAA,GAAAA,WAAA;AAEK,MAAME,sBAAsB,GAAGA,CAACL,OAAkB,EAAEI,IAAY,KAAK;EAC1E,SAAS;;EACT,MAAME,OAAO,GAAGd,UAAI,CAACe,OAAO,CAACC,aAAa,CAACJ,IAAI,CAACK,KAAK,EAAEL,IAAI,CAACM,MAAM,CAAE;EACpE,MAAMhB,MAAM,GAAGY,OAAO,CAACK,SAAS,CAAC,CAAC;EAClCjB,MAAM,CAACkB,WAAW,CAACZ,OAAO,CAAC;EAC3BM,OAAO,CAACO,KAAK,CAAC,CAAC;EACf,MAAMC,KAAK,GAAGR,OAAO,CAACS,iBAAiB,CAAC,CAAC;EACzC,OAAOD,KAAK,CAACE,mBAAmB,CAAC,CAAC;AACpC,CAAC;AAAC7B,OAAA,CAAAkB,sBAAA,GAAAA,sBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_skia","require","_Platform","_Reconciler","isOnMainThread","_WORKLET","Platform","OS","exports","drawAsPicture","element","bounds","recorder","Skia","PictureRecorder","canvas","beginRecording","root","SkiaSGRoot","render","drawOnCanvas","picture","finishRecordingAsPicture","dispose","unmount","drawAsImage","size","drawAsImageFromPicture","surface","Surface","MakeOffscreen","width","height","getCanvas","drawPicture","flush","image","makeImageSnapshot","makeNonTextureImage"],"sources":["Offscreen.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\n\nimport type { SkPicture, SkRect, SkSize } from \"../skia/types\";\nimport { Skia } from \"../skia\";\nimport { Platform } from \"../Platform\";\nimport { SkiaSGRoot } from \"../sksg/Reconciler\";\n\nexport const isOnMainThread = () => {\n \"worklet\";\n return (\n (typeof _WORKLET !== \"undefined\" && _WORKLET === true) ||\n Platform.OS === \"web\"\n );\n};\n\nexport const drawAsPicture = async (element: ReactElement, bounds?: SkRect) => {\n const recorder = Skia.PictureRecorder();\n const canvas = recorder.beginRecording(bounds);\n const root = new SkiaSGRoot(Skia);\n await root.render(element);\n root.drawOnCanvas(canvas);\n const picture = recorder.finishRecordingAsPicture();\n recorder.dispose();\n root.unmount();\n return picture;\n};\n\nexport const drawAsImage = async (element: ReactElement, size: SkSize) => {\n return drawAsImageFromPicture(await drawAsPicture(element), size);\n};\n\nexport const drawAsImageFromPicture = (picture: SkPicture, size: SkSize) => {\n \"worklet\";\n const surface = Skia.Surface.MakeOffscreen(size.width, size.height)!;\n const canvas = surface.getCanvas();\n canvas.drawPicture(picture);\n surface.flush();\n const image = surface.makeImageSnapshot();\n return image.makeNonTextureImage();\n};\n"],"mappings":";;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AAEO,MAAMG,cAAc,GAAGA,CAAA,KAAM;EAClC,SAAS;;EACT,OACG,OAAOC,QAAQ,KAAK,WAAW,IAAIA,QAAQ,KAAK,IAAI,IACrDC,kBAAQ,CAACC,EAAE,KAAK,KAAK;AAEzB,CAAC;AAACC,OAAA,CAAAJ,cAAA,GAAAA,cAAA;AAEK,MAAMK,aAAa,GAAG,MAAAA,CAAOC,OAAqB,EAAEC,MAAe,KAAK;EAC7E,MAAMC,QAAQ,GAAGC,UAAI,CAACC,eAAe,CAAC,CAAC;EACvC,MAAMC,MAAM,GAAGH,QAAQ,CAACI,cAAc,CAACL,MAAM,CAAC;EAC9C,MAAMM,IAAI,GAAG,IAAIC,sBAAU,CAACL,UAAI,CAAC;EACjC,MAAMI,IAAI,CAACE,MAAM,CAACT,OAAO,CAAC;EAC1BO,IAAI,CAACG,YAAY,CAACL,MAAM,CAAC;EACzB,MAAMM,OAAO,GAAGT,QAAQ,CAACU,wBAAwB,CAAC,CAAC;EACnDV,QAAQ,CAACW,OAAO,CAAC,CAAC;EAClBN,IAAI,CAACO,OAAO,CAAC,CAAC;EACd,OAAOH,OAAO;AAChB,CAAC;AAACb,OAAA,CAAAC,aAAA,GAAAA,aAAA;AAEK,MAAMgB,WAAW,GAAG,MAAAA,CAAOf,OAAqB,EAAEgB,IAAY,KAAK;EACxE,OAAOC,sBAAsB,CAAC,MAAMlB,aAAa,CAACC,OAAO,CAAC,EAAEgB,IAAI,CAAC;AACnE,CAAC;AAAClB,OAAA,CAAAiB,WAAA,GAAAA,WAAA;AAEK,MAAME,sBAAsB,GAAGA,CAACN,OAAkB,EAAEK,IAAY,KAAK;EAC1E,SAAS;;EACT,MAAME,OAAO,GAAGf,UAAI,CAACgB,OAAO,CAACC,aAAa,CAACJ,IAAI,CAACK,KAAK,EAAEL,IAAI,CAACM,MAAM,CAAE;EACpE,MAAMjB,MAAM,GAAGa,OAAO,CAACK,SAAS,CAAC,CAAC;EAClClB,MAAM,CAACmB,WAAW,CAACb,OAAO,CAAC;EAC3BO,OAAO,CAACO,KAAK,CAAC,CAAC;EACf,MAAMC,KAAK,GAAGR,OAAO,CAACS,iBAAiB,CAAC,CAAC;EACzC,OAAOD,KAAK,CAACE,mBAAmB,CAAC,CAAC;AACpC,CAAC;AAAC9B,OAAA,CAAAmB,sBAAA,GAAAA,sBAAA","ignoreList":[]}
@@ -4,6 +4,7 @@ export type VideoRotation = 0 | 90 | 180 | 270;
4
4
  export interface Video extends SkJSIInstance<"Video"> {
5
5
  duration(): number;
6
6
  framerate(): number;
7
+ currentTime(): number;
7
8
  nextImage(): SkImage | null;
8
9
  seek(time: number): void;
9
10
  rotation(): VideoRotation;
@@ -14,4 +15,6 @@ export interface Video extends SkJSIInstance<"Video"> {
14
15
  pause(): void;
15
16
  play(): void;
16
17
  setVolume(volume: number): void;
18
+ setLooping(looping: boolean): void;
19
+ isPlaying(): boolean;
17
20
  }
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["Video.ts"],"sourcesContent":["import type { SkImage } from \"../Image\";\nimport type { SkJSIInstance } from \"../JsiInstance\";\n\nexport type VideoRotation = 0 | 90 | 180 | 270;\n\nexport interface Video extends SkJSIInstance<\"Video\"> {\n duration(): number;\n framerate(): number;\n nextImage(): SkImage | null;\n seek(time: number): void;\n rotation(): VideoRotation;\n size(): { width: number; height: number };\n pause(): void;\n play(): void;\n setVolume(volume: number): void;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["Video.ts"],"sourcesContent":["import type { SkImage } from \"../Image\";\nimport type { SkJSIInstance } from \"../JsiInstance\";\n\nexport type VideoRotation = 0 | 90 | 180 | 270;\n\nexport interface Video extends SkJSIInstance<\"Video\"> {\n duration(): number;\n framerate(): number;\n currentTime(): number;\n nextImage(): SkImage | null;\n seek(time: number): void;\n rotation(): VideoRotation;\n size(): { width: number; height: number };\n pause(): void;\n play(): void;\n setVolume(volume: number): void;\n setLooping(looping: boolean): void;\n isPlaying(): boolean;\n}\n"],"mappings":"","ignoreList":[]}
@@ -9,6 +9,7 @@ export declare class JsiVideo implements Video {
9
9
  constructor(ImageFactory: ImageFactory, videoElement: HTMLVideoElement);
10
10
  duration(): number;
11
11
  framerate(): number;
12
+ currentTime(): number;
12
13
  setSurface(surface: Surface): void;
13
14
  nextImage(): import("../types").SkImage;
14
15
  seek(time: number): void;
@@ -20,6 +21,8 @@ export declare class JsiVideo implements Video {
20
21
  pause(): void;
21
22
  play(): void;
22
23
  setVolume(volume: number): void;
24
+ setLooping(looping: boolean): void;
25
+ isPlaying(): boolean;
23
26
  [Symbol.dispose](): void;
24
27
  dispose(): void;
25
28
  }
@@ -41,6 +41,9 @@ class JsiVideo {
41
41
  framerate() {
42
42
  return (0, _Host.throwNotImplementedOnRNWeb)();
43
43
  }
44
+ currentTime() {
45
+ return this.videoElement.currentTime * 1000;
46
+ }
44
47
  setSurface(surface) {
45
48
  // If we have the surface, we can use the WebGL buffer which is slightly faster
46
49
  // This is because WebGL cannot be shared across contextes.
@@ -74,6 +77,12 @@ class JsiVideo {
74
77
  setVolume(volume) {
75
78
  this.videoElement.volume = volume;
76
79
  }
80
+ setLooping(looping) {
81
+ this.videoElement.loop = looping;
82
+ }
83
+ isPlaying() {
84
+ return !this.videoElement.paused && !this.videoElement.ended;
85
+ }
77
86
  [Symbol.dispose]() {
78
87
  if (this.videoElement.parentNode) {
79
88
  this.videoElement.parentNode.removeChild(this.videoElement);
@@ -1 +1 @@
1
- {"version":3,"names":["_CanvasKitWebGLBufferImpl","require","_JsiSkImageFactory","_Host","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","createVideo","CanvasKit","url","video","document","createElement","Promise","resolve","reject","src","style","display","crossOrigin","volume","addEventListener","body","appendChild","JsiVideo","JsiSkImageFactory","Error","exports","constructor","ImageFactory","videoElement","duration","framerate","throwNotImplementedOnRNWeb","setSurface","surface","webglBuffer","CanvasKitWebGLBufferImpl","nextImage","MakeImageFromNativeBuffer","seek","time","isNaN","currentTime","rotation","size","width","videoWidth","height","videoHeight","pause","play","setVolume","dispose","parentNode","removeChild"],"sources":["JsiVideo.ts"],"sourcesContent":["import type { CanvasKit, Surface } from \"canvaskit-wasm\";\n\nimport type { CanvasKitWebGLBuffer, Video, ImageFactory } from \"../types\";\n\nimport { CanvasKitWebGLBufferImpl } from \"./CanvasKitWebGLBufferImpl\";\nimport { JsiSkImageFactory } from \"./JsiSkImageFactory\";\nimport { throwNotImplementedOnRNWeb } from \"./Host\";\n\nexport const createVideo = async (\n CanvasKit: CanvasKit,\n url: string\n): Promise<Video> => {\n const video = document.createElement(\"video\");\n return new Promise((resolve, reject) => {\n video.src = url;\n video.style.display = \"none\";\n video.crossOrigin = \"anonymous\";\n video.volume = 0;\n video.addEventListener(\"loadedmetadata\", () => {\n document.body.appendChild(video);\n resolve(new JsiVideo(new JsiSkImageFactory(CanvasKit), video));\n });\n video.addEventListener(\"error\", () => {\n reject(new Error(`Failed to load video from URL: ${url}`));\n });\n });\n};\n\nexport class JsiVideo implements Video {\n __typename__ = \"Video\" as const;\n\n private webglBuffer: CanvasKitWebGLBuffer | null = null;\n\n constructor(\n private ImageFactory: ImageFactory,\n private videoElement: HTMLVideoElement\n ) {\n document.body.appendChild(this.videoElement);\n }\n\n duration() {\n return this.videoElement.duration * 1000;\n }\n\n framerate(): number {\n return throwNotImplementedOnRNWeb<number>();\n }\n\n setSurface(surface: Surface) {\n // If we have the surface, we can use the WebGL buffer which is slightly faster\n // This is because WebGL cannot be shared across contextes.\n // This can be removed with WebGPU\n this.webglBuffer = new CanvasKitWebGLBufferImpl(surface, this.videoElement);\n }\n\n nextImage() {\n return this.ImageFactory.MakeImageFromNativeBuffer(\n this.webglBuffer ? this.webglBuffer : this.videoElement\n );\n }\n\n seek(time: number) {\n if (isNaN(time)) {\n throw new Error(`Invalid time: ${time}`);\n }\n this.videoElement.currentTime = time / 1000;\n }\n\n rotation() {\n return 0 as const;\n }\n\n size() {\n return {\n width: this.videoElement.videoWidth,\n height: this.videoElement.videoHeight,\n };\n }\n\n pause() {\n this.videoElement.pause();\n }\n\n play() {\n this.videoElement.play();\n }\n\n setVolume(volume: number) {\n this.videoElement.volume = volume;\n }\n\n [Symbol.dispose]() {\n if (this.videoElement.parentNode) {\n this.videoElement.parentNode.removeChild(this.videoElement);\n }\n }\n\n dispose() {\n this[Symbol.dispose]();\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_CanvasKitWebGLBufferImpl","require","_JsiSkImageFactory","_Host","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","createVideo","CanvasKit","url","video","document","createElement","Promise","resolve","reject","src","style","display","crossOrigin","volume","addEventListener","body","appendChild","JsiVideo","JsiSkImageFactory","Error","exports","constructor","ImageFactory","videoElement","duration","framerate","throwNotImplementedOnRNWeb","currentTime","setSurface","surface","webglBuffer","CanvasKitWebGLBufferImpl","nextImage","MakeImageFromNativeBuffer","seek","time","isNaN","rotation","size","width","videoWidth","height","videoHeight","pause","play","setVolume","setLooping","looping","loop","isPlaying","paused","ended","dispose","parentNode","removeChild"],"sources":["JsiVideo.ts"],"sourcesContent":["import type { CanvasKit, Surface } from \"canvaskit-wasm\";\n\nimport type { CanvasKitWebGLBuffer, Video, ImageFactory } from \"../types\";\n\nimport { CanvasKitWebGLBufferImpl } from \"./CanvasKitWebGLBufferImpl\";\nimport { JsiSkImageFactory } from \"./JsiSkImageFactory\";\nimport { throwNotImplementedOnRNWeb } from \"./Host\";\n\nexport const createVideo = async (\n CanvasKit: CanvasKit,\n url: string\n): Promise<Video> => {\n const video = document.createElement(\"video\");\n return new Promise((resolve, reject) => {\n video.src = url;\n video.style.display = \"none\";\n video.crossOrigin = \"anonymous\";\n video.volume = 0;\n video.addEventListener(\"loadedmetadata\", () => {\n document.body.appendChild(video);\n resolve(new JsiVideo(new JsiSkImageFactory(CanvasKit), video));\n });\n video.addEventListener(\"error\", () => {\n reject(new Error(`Failed to load video from URL: ${url}`));\n });\n });\n};\n\nexport class JsiVideo implements Video {\n __typename__ = \"Video\" as const;\n\n private webglBuffer: CanvasKitWebGLBuffer | null = null;\n\n constructor(\n private ImageFactory: ImageFactory,\n private videoElement: HTMLVideoElement\n ) {\n document.body.appendChild(this.videoElement);\n }\n\n duration() {\n return this.videoElement.duration * 1000;\n }\n\n framerate(): number {\n return throwNotImplementedOnRNWeb<number>();\n }\n\n currentTime() {\n return this.videoElement.currentTime * 1000;\n }\n\n setSurface(surface: Surface) {\n // If we have the surface, we can use the WebGL buffer which is slightly faster\n // This is because WebGL cannot be shared across contextes.\n // This can be removed with WebGPU\n this.webglBuffer = new CanvasKitWebGLBufferImpl(surface, this.videoElement);\n }\n\n nextImage() {\n return this.ImageFactory.MakeImageFromNativeBuffer(\n this.webglBuffer ? this.webglBuffer : this.videoElement\n );\n }\n\n seek(time: number) {\n if (isNaN(time)) {\n throw new Error(`Invalid time: ${time}`);\n }\n this.videoElement.currentTime = time / 1000;\n }\n\n rotation() {\n return 0 as const;\n }\n\n size() {\n return {\n width: this.videoElement.videoWidth,\n height: this.videoElement.videoHeight,\n };\n }\n\n pause() {\n this.videoElement.pause();\n }\n\n play() {\n this.videoElement.play();\n }\n\n setVolume(volume: number) {\n this.videoElement.volume = volume;\n }\n\n setLooping(looping: boolean) {\n this.videoElement.loop = looping;\n }\n\n isPlaying() {\n return !this.videoElement.paused && !this.videoElement.ended;\n }\n\n [Symbol.dispose]() {\n if (this.videoElement.parentNode) {\n this.videoElement.parentNode.removeChild(this.videoElement);\n }\n }\n\n dispose() {\n this[Symbol.dispose]();\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -27,6 +27,7 @@ const drawOnscreen = (Skia, nativeId, recording) => {
27
27
  const ctx = (0, _DrawingContext.createDrawingContext)(Skia, recording.paintPool, canvas);
28
28
  (0, _Player.replay)(ctx, recording.commands);
29
29
  const picture = rec.finishRecordingAsPicture();
30
+ rec.dispose();
30
31
  //const end = performance.now();
31
32
  //console.log("Recording time: ", end - start);
32
33
  SkiaViewApi.setJsiProperty(nativeId, "picture", picture);
@@ -1 +1 @@
1
- {"version":3,"names":["_ReanimatedProxy","_interopRequireDefault","require","_renderHelpers","_Recorder","_Visitor","_Player","_DrawingContext","_StaticContainer","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","drawOnscreen","Skia","nativeId","recording","rec","PictureRecorder","canvas","beginRecording","ctx","createDrawingContext","paintPool","replay","commands","picture","finishRecordingAsPicture","SkiaViewApi","setJsiProperty","ReanimatedContainer","Container","constructor","redraw","mapperId","Rea","stopMapper","unmounted","recorder","Recorder","visit","root","record","getRecording","animationValues","size","startMapper","Array","from","runOnUI","createContainer","HAS_REANIMATED_3","StaticContainer","exports"],"sources":["Container.web.ts"],"sourcesContent":["import Rea from \"../external/reanimated/ReanimatedProxy\";\nimport type { Skia } from \"../skia/types\";\nimport { HAS_REANIMATED_3 } from \"../external/reanimated/renderHelpers\";\n\nimport type { Recording } from \"./Recorder/Recorder\";\nimport { Recorder } from \"./Recorder/Recorder\";\nimport { visit } from \"./Recorder/Visitor\";\nimport { replay } from \"./Recorder/Player\";\nimport { createDrawingContext } from \"./Recorder/DrawingContext\";\nimport { Container, StaticContainer } from \"./StaticContainer\";\n\nimport \"../skia/NativeSetup\";\nimport \"../views/api\";\n\nconst drawOnscreen = (Skia: Skia, nativeId: number, recording: Recording) => {\n \"worklet\";\n const rec = Skia.PictureRecorder();\n const canvas = rec.beginRecording();\n //const start = performance.now();\n\n const ctx = createDrawingContext(Skia, recording.paintPool, canvas);\n replay(ctx, recording.commands);\n const picture = rec.finishRecordingAsPicture();\n //const end = performance.now();\n //console.log(\"Recording time: \", end - start);\n SkiaViewApi.setJsiProperty(nativeId, \"picture\", picture);\n};\n\nclass ReanimatedContainer extends Container {\n private mapperId: number | null = null;\n\n constructor(\n Skia: Skia,\n private nativeId: number\n ) {\n super(Skia);\n }\n\n redraw() {\n if (this.mapperId !== null) {\n Rea.stopMapper(this.mapperId);\n }\n if (this.unmounted) {\n return;\n }\n const recorder = new Recorder();\n visit(recorder, this.root);\n const record = recorder.getRecording();\n const { animationValues } = record;\n this.recording = {\n commands: record.commands,\n paintPool: record.paintPool,\n };\n const { nativeId, Skia, recording } = this;\n if (animationValues.size > 0) {\n this.mapperId = Rea.startMapper(() => {\n \"worklet\";\n drawOnscreen(Skia, nativeId, recording!);\n }, Array.from(animationValues));\n }\n Rea.runOnUI(() => {\n \"worklet\";\n drawOnscreen(Skia, nativeId, recording!);\n })();\n }\n}\n\nexport const createContainer = (Skia: Skia, nativeId: number) => {\n if (HAS_REANIMATED_3 && nativeId !== -1) {\n return new ReanimatedContainer(Skia, nativeId);\n } else {\n return new StaticContainer(Skia, nativeId);\n }\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_ReanimatedProxy","_interopRequireDefault","require","_renderHelpers","_Recorder","_Visitor","_Player","_DrawingContext","_StaticContainer","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","drawOnscreen","Skia","nativeId","recording","rec","PictureRecorder","canvas","beginRecording","ctx","createDrawingContext","paintPool","replay","commands","picture","finishRecordingAsPicture","dispose","SkiaViewApi","setJsiProperty","ReanimatedContainer","Container","constructor","redraw","mapperId","Rea","stopMapper","unmounted","recorder","Recorder","visit","root","record","getRecording","animationValues","size","startMapper","Array","from","runOnUI","createContainer","HAS_REANIMATED_3","StaticContainer","exports"],"sources":["Container.web.ts"],"sourcesContent":["import Rea from \"../external/reanimated/ReanimatedProxy\";\nimport type { Skia } from \"../skia/types\";\nimport { HAS_REANIMATED_3 } from \"../external/reanimated/renderHelpers\";\n\nimport type { Recording } from \"./Recorder/Recorder\";\nimport { Recorder } from \"./Recorder/Recorder\";\nimport { visit } from \"./Recorder/Visitor\";\nimport { replay } from \"./Recorder/Player\";\nimport { createDrawingContext } from \"./Recorder/DrawingContext\";\nimport { Container, StaticContainer } from \"./StaticContainer\";\n\nimport \"../skia/NativeSetup\";\nimport \"../views/api\";\n\nconst drawOnscreen = (Skia: Skia, nativeId: number, recording: Recording) => {\n \"worklet\";\n const rec = Skia.PictureRecorder();\n const canvas = rec.beginRecording();\n //const start = performance.now();\n\n const ctx = createDrawingContext(Skia, recording.paintPool, canvas);\n replay(ctx, recording.commands);\n const picture = rec.finishRecordingAsPicture();\n rec.dispose();\n //const end = performance.now();\n //console.log(\"Recording time: \", end - start);\n SkiaViewApi.setJsiProperty(nativeId, \"picture\", picture);\n};\n\nclass ReanimatedContainer extends Container {\n private mapperId: number | null = null;\n\n constructor(\n Skia: Skia,\n private nativeId: number\n ) {\n super(Skia);\n }\n\n redraw() {\n if (this.mapperId !== null) {\n Rea.stopMapper(this.mapperId);\n }\n if (this.unmounted) {\n return;\n }\n const recorder = new Recorder();\n visit(recorder, this.root);\n const record = recorder.getRecording();\n const { animationValues } = record;\n this.recording = {\n commands: record.commands,\n paintPool: record.paintPool,\n };\n const { nativeId, Skia, recording } = this;\n if (animationValues.size > 0) {\n this.mapperId = Rea.startMapper(() => {\n \"worklet\";\n drawOnscreen(Skia, nativeId, recording!);\n }, Array.from(animationValues));\n }\n Rea.runOnUI(() => {\n \"worklet\";\n drawOnscreen(Skia, nativeId, recording!);\n })();\n }\n}\n\nexport const createContainer = (Skia: Skia, nativeId: number) => {\n if (HAS_REANIMATED_3 && nativeId !== -1) {\n return new ReanimatedContainer(Skia, nativeId);\n } else {\n return new StaticContainer(Skia, nativeId);\n }\n};\n"],"mappings":"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","ignoreList":[]}
@@ -173,6 +173,9 @@ const sksgHostConfig = exports.sksgHostConfig = {
173
173
  }
174
174
  return _constants.DefaultEventPriority;
175
175
  },
176
- resetFormInstance() {}
176
+ resetFormInstance() {},
177
+ // DefinitelyTyped is not up to date, these are needed for devtools
178
+ rendererVersion: "0.0.1",
179
+ rendererPackageName: "react-native-skia"
177
180
  };
178
181
  //# sourceMappingURL=HostConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_constants","_typeddash","NoEventPriority","DEBUG","debug","args","console","log","exports","currentUpdatePriority","sksgHostConfig","supportsMutation","isPrimaryRenderer","supportsPersistence","supportsHydration","scheduleTimeout","setTimeout","cancelTimeout","clearTimeout","noTimeout","getRootHostContext","_rootContainerInstance","getChildHostContext","_parentHostContext","_type","shouldSetTextContent","_props","createTextInstance","_text","_hostContext","_internalInstanceHandle","Error","createInstance","type","propsWithChildren","_container","children","props","instance","appendInitialChild","parentInstance","child","push","finalizeInitialChildren","commitMount","prepareForCommit","resetAfterCommit","container","redraw","getPublicInstance","node","commitTextUpdate","_textInstance","_oldText","_newText","clearContainer","prepareUpdate","_instance","oldProps","newProps","propsAreEqual","shallowEq","preparePortalMount","cloneInstance","_oldProps","keepChildren","_newChildSet","createContainerChildSet","appendChildToContainerChildSet","childSet","finalizeContainerChildren","newChildren","root","replaceContainerChildren","cloneHiddenInstance","cloneHiddenTextInstance","getCurrentEventPriority","DefaultEventPriority","beforeActiveInstanceBlur","afterActiveInstanceBlur","detachDeletedInstance","_node","getInstanceFromNode","prepareScopeUpdate","_scopeInstance","getInstanceFromScope","shouldAttemptEagerTransition","trackSchedulerEvent","resolveEventType","resolveEventTimeStamp","requestPostPaintCallback","maySuspendCommit","preloadInstance","startSuspendingCommit","suspendInstance","waitForCommitToBeReady","NotPendingTransition","HostTransitionContext","createContext","setCurrentUpdatePriority","newPriority","getCurrentUpdatePriority","resolveUpdatePriority","resetFormInstance"],"sources":["HostConfig.ts"],"sourcesContent":["/*global NodeJS*/\nimport { createContext } from \"react\";\nimport type { Fiber, HostConfig } from \"react-reconciler\";\nimport { DefaultEventPriority } from \"react-reconciler/constants\";\n\nimport type { NodeType } from \"../dom/types\";\nimport { shallowEq } from \"../renderer/typeddash\";\n\nimport type { Node } from \"./Node\";\nimport type { Container } from \"./StaticContainer\";\n\ntype EventPriority = number;\nconst NoEventPriority = 0;\n\nconst DEBUG = false;\nexport const debug = (...args: Parameters<typeof console.log>) => {\n if (DEBUG) {\n console.log(...args);\n }\n};\n\ntype Instance = Node;\n\ntype Props = object;\ntype TextInstance = Node;\ntype SuspenseInstance = Instance;\ntype HydratableInstance = Instance;\ntype PublicInstance = Instance;\ntype HostContext = object;\ntype UpdatePayload = Container;\ntype ChildSet = Node[];\ntype TimeoutHandle = NodeJS.Timeout;\ntype NoTimeout = -1;\n\ntype SkiaHostConfig = HostConfig<\n NodeType,\n Props,\n Container,\n Instance,\n TextInstance,\n SuspenseInstance,\n HydratableInstance,\n PublicInstance,\n HostContext,\n UpdatePayload,\n ChildSet,\n TimeoutHandle,\n NoTimeout\n>;\nlet currentUpdatePriority: EventPriority = NoEventPriority;\n\nexport const sksgHostConfig: SkiaHostConfig = {\n /**\n * This function is used by the reconciler in order to calculate current time for prioritising work.\n */\n supportsMutation: false,\n isPrimaryRenderer: false,\n supportsPersistence: true,\n supportsHydration: false,\n //supportsMicrotask: true,\n scheduleTimeout: setTimeout,\n cancelTimeout: clearTimeout,\n noTimeout: -1,\n\n getRootHostContext: (_rootContainerInstance: Container) => {\n debug(\"getRootHostContext\");\n return {};\n },\n\n getChildHostContext(_parentHostContext, _type, _rootContainerInstance) {\n debug(\"getChildHostContext\");\n return {};\n },\n\n shouldSetTextContent(_type, _props) {\n return false;\n },\n\n createTextInstance(\n _text,\n _rootContainerInstance,\n _hostContext,\n _internalInstanceHandle\n ) {\n debug(\"createTextInstance\");\n // return SpanNode({}, text) as SkNode;\n throw new Error(\"Text nodes are not supported yet\");\n },\n\n createInstance(\n type,\n propsWithChildren,\n _container,\n _hostContext,\n _internalInstanceHandle\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { children, ...props } = propsWithChildren as any;\n debug(\"createInstance\", type);\n const instance = {\n type,\n props,\n children: [],\n };\n return instance;\n },\n\n appendInitialChild(parentInstance: Instance, child: Instance | TextInstance) {\n parentInstance.children.push(child);\n },\n\n finalizeInitialChildren(\n parentInstance,\n _type,\n _props,\n _rootContainerInstance,\n _hostContext\n ) {\n debug(\"finalizeInitialChildren\", parentInstance);\n return false;\n },\n\n commitMount() {\n // if finalizeInitialChildren = true\n debug(\"commitMount\");\n },\n\n prepareForCommit(_container: Container) {\n debug(\"prepareForCommit\");\n return null;\n },\n\n resetAfterCommit(container: Container) {\n debug(\"resetAfterCommit\");\n container.redraw();\n },\n\n getPublicInstance(node: Instance) {\n debug(\"getPublicInstance\");\n return node;\n },\n\n commitTextUpdate: (\n _textInstance: TextInstance,\n _oldText: string,\n _newText: string\n ) => {\n // textInstance.instance = newText;\n },\n\n clearContainer: (_container) => {\n debug(\"clearContainer\");\n },\n\n prepareUpdate(\n _instance: Instance,\n _type: string,\n oldProps: Props,\n newProps: Props,\n container: Container,\n _hostContext: HostContext\n ) {\n debug(\"prepareUpdate\");\n const propsAreEqual = shallowEq(oldProps, newProps);\n if (propsAreEqual) {\n return null;\n }\n return container;\n },\n\n preparePortalMount: () => {\n debug(\"preparePortalMount\");\n },\n\n cloneInstance(\n instance,\n _type,\n _oldProps,\n newProps,\n keepChildren,\n _newChildSet\n ) {\n debug(\"cloneInstance\");\n return {\n type: instance.type,\n props: { ...newProps },\n children: keepChildren ? [...instance.children] : [],\n };\n },\n\n createContainerChildSet(): ChildSet {\n debug(\"createContainerChildSet\");\n return [];\n },\n\n appendChildToContainerChildSet(\n childSet: ChildSet,\n child: Instance | TextInstance\n ): void {\n childSet.push(child);\n },\n\n finalizeContainerChildren(container: Container, newChildren: ChildSet) {\n debug(\"finalizeContainerChildren\");\n container.root = newChildren;\n },\n\n replaceContainerChildren(container: Container, newChildren: ChildSet) {\n container.root = newChildren;\n },\n\n cloneHiddenInstance(\n _instance: Instance,\n _type: string,\n _props: Props\n ): Instance {\n debug(\"cloneHiddenInstance\");\n throw new Error(\"Not yet implemented.\");\n },\n\n cloneHiddenTextInstance(_instance: Instance, _text: string): TextInstance {\n debug(\"cloneHiddenTextInstance\");\n throw new Error(\"Not yet implemented.\");\n },\n // see https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r916356874\n getCurrentEventPriority: () => DefaultEventPriority,\n beforeActiveInstanceBlur: () => {},\n afterActiveInstanceBlur: () => {},\n detachDeletedInstance: (_node: Instance) => {},\n getInstanceFromNode: function (_node): Fiber | null | undefined {\n throw new Error(\"Function not implemented.\");\n },\n prepareScopeUpdate: function (_scopeInstance, _instance): void {\n throw new Error(\"Function not implemented.\");\n },\n getInstanceFromScope: function (_scopeInstance): Instance | null {\n throw new Error(\"Function not implemented.\");\n },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n shouldAttemptEagerTransition: () => false,\n trackSchedulerEvent: () => {},\n resolveEventType: () => null,\n resolveEventTimeStamp: () => -1.1,\n requestPostPaintCallback() {},\n maySuspendCommit: () => false,\n preloadInstance: () => true, // true indicates already loaded\n startSuspendingCommit() {},\n suspendInstance() {},\n waitForCommitToBeReady: () => null,\n NotPendingTransition: null,\n HostTransitionContext: createContext(null),\n setCurrentUpdatePriority(newPriority: number) {\n currentUpdatePriority = newPriority;\n },\n getCurrentUpdatePriority() {\n return currentUpdatePriority;\n },\n resolveUpdatePriority() {\n if (currentUpdatePriority !== NoEventPriority) {\n return currentUpdatePriority;\n }\n return DefaultEventPriority;\n },\n resetFormInstance() {},\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_constants","_typeddash","NoEventPriority","DEBUG","debug","args","console","log","exports","currentUpdatePriority","sksgHostConfig","supportsMutation","isPrimaryRenderer","supportsPersistence","supportsHydration","scheduleTimeout","setTimeout","cancelTimeout","clearTimeout","noTimeout","getRootHostContext","_rootContainerInstance","getChildHostContext","_parentHostContext","_type","shouldSetTextContent","_props","createTextInstance","_text","_hostContext","_internalInstanceHandle","Error","createInstance","type","propsWithChildren","_container","children","props","instance","appendInitialChild","parentInstance","child","push","finalizeInitialChildren","commitMount","prepareForCommit","resetAfterCommit","container","redraw","getPublicInstance","node","commitTextUpdate","_textInstance","_oldText","_newText","clearContainer","prepareUpdate","_instance","oldProps","newProps","propsAreEqual","shallowEq","preparePortalMount","cloneInstance","_oldProps","keepChildren","_newChildSet","createContainerChildSet","appendChildToContainerChildSet","childSet","finalizeContainerChildren","newChildren","root","replaceContainerChildren","cloneHiddenInstance","cloneHiddenTextInstance","getCurrentEventPriority","DefaultEventPriority","beforeActiveInstanceBlur","afterActiveInstanceBlur","detachDeletedInstance","_node","getInstanceFromNode","prepareScopeUpdate","_scopeInstance","getInstanceFromScope","shouldAttemptEagerTransition","trackSchedulerEvent","resolveEventType","resolveEventTimeStamp","requestPostPaintCallback","maySuspendCommit","preloadInstance","startSuspendingCommit","suspendInstance","waitForCommitToBeReady","NotPendingTransition","HostTransitionContext","createContext","setCurrentUpdatePriority","newPriority","getCurrentUpdatePriority","resolveUpdatePriority","resetFormInstance","rendererVersion","rendererPackageName"],"sources":["HostConfig.ts"],"sourcesContent":["/*global NodeJS*/\nimport { createContext } from \"react\";\nimport type { Fiber, HostConfig } from \"react-reconciler\";\nimport { DefaultEventPriority } from \"react-reconciler/constants\";\n\nimport type { NodeType } from \"../dom/types\";\nimport { shallowEq } from \"../renderer/typeddash\";\n\nimport type { Node } from \"./Node\";\nimport type { Container } from \"./StaticContainer\";\n\ntype EventPriority = number;\nconst NoEventPriority = 0;\n\nconst DEBUG = false;\nexport const debug = (...args: Parameters<typeof console.log>) => {\n if (DEBUG) {\n console.log(...args);\n }\n};\n\ntype Instance = Node;\n\ntype Props = object;\ntype TextInstance = Node;\ntype SuspenseInstance = Instance;\ntype HydratableInstance = Instance;\ntype PublicInstance = Instance;\ntype HostContext = object;\ntype UpdatePayload = Container;\ntype ChildSet = Node[];\ntype TimeoutHandle = NodeJS.Timeout;\ntype NoTimeout = -1;\n\ntype SkiaHostConfig = HostConfig<\n NodeType,\n Props,\n Container,\n Instance,\n TextInstance,\n SuspenseInstance,\n HydratableInstance,\n PublicInstance,\n HostContext,\n UpdatePayload,\n ChildSet,\n TimeoutHandle,\n NoTimeout\n>;\nlet currentUpdatePriority: EventPriority = NoEventPriority;\n\nexport const sksgHostConfig: SkiaHostConfig = {\n /**\n * This function is used by the reconciler in order to calculate current time for prioritising work.\n */\n supportsMutation: false,\n isPrimaryRenderer: false,\n supportsPersistence: true,\n supportsHydration: false,\n //supportsMicrotask: true,\n scheduleTimeout: setTimeout,\n cancelTimeout: clearTimeout,\n noTimeout: -1,\n\n getRootHostContext: (_rootContainerInstance: Container) => {\n debug(\"getRootHostContext\");\n return {};\n },\n\n getChildHostContext(_parentHostContext, _type, _rootContainerInstance) {\n debug(\"getChildHostContext\");\n return {};\n },\n\n shouldSetTextContent(_type, _props) {\n return false;\n },\n\n createTextInstance(\n _text,\n _rootContainerInstance,\n _hostContext,\n _internalInstanceHandle\n ) {\n debug(\"createTextInstance\");\n // return SpanNode({}, text) as SkNode;\n throw new Error(\"Text nodes are not supported yet\");\n },\n\n createInstance(\n type,\n propsWithChildren,\n _container,\n _hostContext,\n _internalInstanceHandle\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { children, ...props } = propsWithChildren as any;\n debug(\"createInstance\", type);\n const instance = {\n type,\n props,\n children: [],\n };\n return instance;\n },\n\n appendInitialChild(parentInstance: Instance, child: Instance | TextInstance) {\n parentInstance.children.push(child);\n },\n\n finalizeInitialChildren(\n parentInstance,\n _type,\n _props,\n _rootContainerInstance,\n _hostContext\n ) {\n debug(\"finalizeInitialChildren\", parentInstance);\n return false;\n },\n\n commitMount() {\n // if finalizeInitialChildren = true\n debug(\"commitMount\");\n },\n\n prepareForCommit(_container: Container) {\n debug(\"prepareForCommit\");\n return null;\n },\n\n resetAfterCommit(container: Container) {\n debug(\"resetAfterCommit\");\n container.redraw();\n },\n\n getPublicInstance(node: Instance) {\n debug(\"getPublicInstance\");\n return node;\n },\n\n commitTextUpdate: (\n _textInstance: TextInstance,\n _oldText: string,\n _newText: string\n ) => {\n // textInstance.instance = newText;\n },\n\n clearContainer: (_container) => {\n debug(\"clearContainer\");\n },\n\n prepareUpdate(\n _instance: Instance,\n _type: string,\n oldProps: Props,\n newProps: Props,\n container: Container,\n _hostContext: HostContext\n ) {\n debug(\"prepareUpdate\");\n const propsAreEqual = shallowEq(oldProps, newProps);\n if (propsAreEqual) {\n return null;\n }\n return container;\n },\n\n preparePortalMount: () => {\n debug(\"preparePortalMount\");\n },\n\n cloneInstance(\n instance,\n _type,\n _oldProps,\n newProps,\n keepChildren,\n _newChildSet\n ) {\n debug(\"cloneInstance\");\n return {\n type: instance.type,\n props: { ...newProps },\n children: keepChildren ? [...instance.children] : [],\n };\n },\n\n createContainerChildSet(): ChildSet {\n debug(\"createContainerChildSet\");\n return [];\n },\n\n appendChildToContainerChildSet(\n childSet: ChildSet,\n child: Instance | TextInstance\n ): void {\n childSet.push(child);\n },\n\n finalizeContainerChildren(container: Container, newChildren: ChildSet) {\n debug(\"finalizeContainerChildren\");\n container.root = newChildren;\n },\n\n replaceContainerChildren(container: Container, newChildren: ChildSet) {\n container.root = newChildren;\n },\n\n cloneHiddenInstance(\n _instance: Instance,\n _type: string,\n _props: Props\n ): Instance {\n debug(\"cloneHiddenInstance\");\n throw new Error(\"Not yet implemented.\");\n },\n\n cloneHiddenTextInstance(_instance: Instance, _text: string): TextInstance {\n debug(\"cloneHiddenTextInstance\");\n throw new Error(\"Not yet implemented.\");\n },\n // see https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r916356874\n getCurrentEventPriority: () => DefaultEventPriority,\n beforeActiveInstanceBlur: () => {},\n afterActiveInstanceBlur: () => {},\n detachDeletedInstance: (_node: Instance) => {},\n getInstanceFromNode: function (_node): Fiber | null | undefined {\n throw new Error(\"Function not implemented.\");\n },\n prepareScopeUpdate: function (_scopeInstance, _instance): void {\n throw new Error(\"Function not implemented.\");\n },\n getInstanceFromScope: function (_scopeInstance): Instance | null {\n throw new Error(\"Function not implemented.\");\n },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n shouldAttemptEagerTransition: () => false,\n trackSchedulerEvent: () => {},\n resolveEventType: () => null,\n resolveEventTimeStamp: () => -1.1,\n requestPostPaintCallback() {},\n maySuspendCommit: () => false,\n preloadInstance: () => true, // true indicates already loaded\n startSuspendingCommit() {},\n suspendInstance() {},\n waitForCommitToBeReady: () => null,\n NotPendingTransition: null,\n HostTransitionContext: createContext(null),\n setCurrentUpdatePriority(newPriority: number) {\n currentUpdatePriority = newPriority;\n },\n getCurrentUpdatePriority() {\n return currentUpdatePriority;\n },\n resolveUpdatePriority() {\n if (currentUpdatePriority !== NoEventPriority) {\n return currentUpdatePriority;\n }\n return DefaultEventPriority;\n },\n resetFormInstance() {},\n\n // DefinitelyTyped is not up to date, these are needed for devtools\n rendererVersion: \"0.0.1\",\n rendererPackageName: \"react-native-skia\",\n};\n"],"mappings":"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","ignoreList":[]}
@@ -14,11 +14,9 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
14
14
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
15
15
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
16
16
  const skiaReconciler = (0, _reactReconciler.default)(_HostConfig.sksgHostConfig);
17
- skiaReconciler.injectIntoDevTools({
18
- bundleType: 1,
19
- version: "0.0.1",
20
- rendererPackageName: "react-native-skia"
21
- });
17
+
18
+ // @ts-expect-error DefinitelyTyped is not up to date
19
+ skiaReconciler.injectIntoDevTools();
22
20
  class SkiaSGRoot {
23
21
  constructor(Skia, nativeId = -1) {
24
22
  this.Skia = Skia;
@@ -56,7 +54,9 @@ class SkiaSGRoot {
56
54
  const recorder = this.Skia.PictureRecorder();
57
55
  const canvas = recorder.beginRecording();
58
56
  this.drawOnCanvas(canvas);
59
- return recorder.finishRecordingAsPicture();
57
+ const picture = recorder.finishRecordingAsPicture();
58
+ recorder.dispose();
59
+ return picture;
60
60
  }
61
61
  unmount() {
62
62
  this.container.unmount();
@@ -1 +1 @@
1
- {"version":3,"names":["_reactReconciler","_interopRequireDefault","require","_types","_HostConfig","_Container","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","skiaReconciler","ReactReconciler","sksgHostConfig","injectIntoDevTools","bundleType","version","rendererPackageName","SkiaSGRoot","constructor","Skia","nativeId","strictMode","container","createContainer","root","console","error","sg","children","type","NodeType","Group","props","isDeclaration","updateContainer","element","Promise","resolve","render","mount","redraw","drawOnCanvas","canvas","getPicture","recorder","PictureRecorder","beginRecording","finishRecordingAsPicture","unmount","debug","exports"],"sources":["Reconciler.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { OpaqueRoot } from \"react-reconciler\";\nimport ReactReconciler from \"react-reconciler\";\n\nimport type { SkCanvas, Skia } from \"../skia/types\";\nimport { NodeType } from \"../dom/types\";\n\nimport { debug, sksgHostConfig } from \"./HostConfig\";\nimport type { Container } from \"./StaticContainer\";\nimport { createContainer } from \"./Container\";\n\nimport \"./Elements\";\n\nconst skiaReconciler = ReactReconciler(sksgHostConfig);\n\nskiaReconciler.injectIntoDevTools({\n bundleType: 1,\n version: \"0.0.1\",\n rendererPackageName: \"react-native-skia\",\n});\n\nexport class SkiaSGRoot {\n private root: OpaqueRoot;\n private container: Container;\n\n constructor(\n public Skia: Skia,\n nativeId = -1\n ) {\n const strictMode = false;\n this.container = createContainer(Skia, nativeId);\n this.root = skiaReconciler.createContainer(\n this.container,\n 0,\n null,\n strictMode,\n null,\n \"\",\n console.error,\n null\n );\n }\n\n get sg() {\n const children = this.container.root;\n return { type: NodeType.Group, props: {}, children, isDeclaration: false };\n }\n\n private updateContainer(element: ReactNode) {\n return new Promise((resolve) => {\n skiaReconciler.updateContainer(element, this.root, null, () => {\n resolve(true);\n });\n });\n }\n\n async render(element: ReactNode) {\n this.container.mount();\n await this.updateContainer(element);\n this.container.redraw();\n }\n\n drawOnCanvas(canvas: SkCanvas) {\n this.container.drawOnCanvas(canvas);\n }\n\n getPicture() {\n const recorder = this.Skia.PictureRecorder();\n const canvas = recorder.beginRecording();\n this.drawOnCanvas(canvas);\n return recorder.finishRecordingAsPicture();\n }\n\n unmount() {\n this.container.unmount();\n return new Promise((resolve) => {\n skiaReconciler.updateContainer(null, this.root, null, () => {\n debug(\"unmountContainer\");\n resolve(true);\n });\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactReconciler","_interopRequireDefault","require","_types","_HostConfig","_Container","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","skiaReconciler","ReactReconciler","sksgHostConfig","injectIntoDevTools","SkiaSGRoot","constructor","Skia","nativeId","strictMode","container","createContainer","root","console","error","sg","children","type","NodeType","Group","props","isDeclaration","updateContainer","element","Promise","resolve","render","mount","redraw","drawOnCanvas","canvas","getPicture","recorder","PictureRecorder","beginRecording","picture","finishRecordingAsPicture","dispose","unmount","debug","exports"],"sources":["Reconciler.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { OpaqueRoot } from \"react-reconciler\";\nimport ReactReconciler from \"react-reconciler\";\n\nimport type { SkCanvas, Skia } from \"../skia/types\";\nimport { NodeType } from \"../dom/types\";\n\nimport { debug, sksgHostConfig } from \"./HostConfig\";\nimport type { Container } from \"./StaticContainer\";\nimport { createContainer } from \"./Container\";\n\nimport \"./Elements\";\n\nconst skiaReconciler = ReactReconciler(sksgHostConfig);\n\n// @ts-expect-error DefinitelyTyped is not up to date\nskiaReconciler.injectIntoDevTools();\n\nexport class SkiaSGRoot {\n private root: OpaqueRoot;\n private container: Container;\n\n constructor(\n public Skia: Skia,\n nativeId = -1\n ) {\n const strictMode = false;\n this.container = createContainer(Skia, nativeId);\n this.root = skiaReconciler.createContainer(\n this.container,\n 0,\n null,\n strictMode,\n null,\n \"\",\n console.error,\n null\n );\n }\n\n get sg() {\n const children = this.container.root;\n return { type: NodeType.Group, props: {}, children, isDeclaration: false };\n }\n\n private updateContainer(element: ReactNode) {\n return new Promise((resolve) => {\n skiaReconciler.updateContainer(element, this.root, null, () => {\n resolve(true);\n });\n });\n }\n\n async render(element: ReactNode) {\n this.container.mount();\n await this.updateContainer(element);\n this.container.redraw();\n }\n\n drawOnCanvas(canvas: SkCanvas) {\n this.container.drawOnCanvas(canvas);\n }\n\n getPicture() {\n const recorder = this.Skia.PictureRecorder();\n const canvas = recorder.beginRecording();\n this.drawOnCanvas(canvas);\n const picture = recorder.finishRecordingAsPicture();\n recorder.dispose();\n return picture;\n }\n\n unmount() {\n this.container.unmount();\n return new Promise((resolve) => {\n skiaReconciler.updateContainer(null, this.root, null, () => {\n debug(\"unmountContainer\");\n resolve(true);\n });\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -55,6 +55,7 @@ class StaticContainer extends Container {
55
55
  const canvas = rec.beginRecording();
56
56
  this.drawOnCanvas(canvas);
57
57
  const picture = rec.finishRecordingAsPicture();
58
+ rec.dispose();
58
59
  SkiaViewApi.setJsiProperty(this.nativeId, "picture", picture);
59
60
  }
60
61
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_Recorder","require","_Visitor","_Player","_DrawingContext","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","Container","constructor","Skia","root","_root","mount","unmounted","unmount","drawOnCanvas","canvas","recording","Error","ctx","createDrawingContext","paintPool","replay","commands","exports","StaticContainer","nativeId","redraw","recorder","Recorder","visit","getRecording","isOnScreen","rec","PictureRecorder","beginRecording","picture","finishRecordingAsPicture","SkiaViewApi","setJsiProperty"],"sources":["StaticContainer.ts"],"sourcesContent":["import type { Skia, SkCanvas } from \"../skia/types\";\n\nimport type { Node } from \"./Node\";\nimport type { Recording } from \"./Recorder/Recorder\";\nimport { Recorder } from \"./Recorder/Recorder\";\nimport { visit } from \"./Recorder/Visitor\";\nimport { replay } from \"./Recorder/Player\";\nimport { createDrawingContext } from \"./Recorder/DrawingContext\";\n\nimport \"../views/api\";\n\nexport abstract class Container {\n private _root: Node[] = [];\n protected recording: Recording | null = null;\n protected unmounted = false;\n\n constructor(protected Skia: Skia) {}\n\n get root() {\n return this._root;\n }\n\n set root(value: Node[]) {\n this._root = value;\n }\n\n mount() {\n this.unmounted = false;\n }\n\n unmount() {\n this.unmounted = true;\n }\n\n drawOnCanvas(canvas: SkCanvas) {\n if (!this.recording) {\n throw new Error(\"No recording to draw\");\n }\n const ctx = createDrawingContext(\n this.Skia,\n this.recording.paintPool,\n canvas\n );\n replay(ctx, this.recording.commands);\n }\n\n abstract redraw(): void;\n}\n\nexport class StaticContainer extends Container {\n constructor(\n Skia: Skia,\n private nativeId: number\n ) {\n super(Skia);\n }\n\n redraw() {\n const recorder = new Recorder();\n visit(recorder, this.root);\n this.recording = recorder.getRecording();\n const isOnScreen = this.nativeId !== -1;\n if (isOnScreen) {\n const rec = this.Skia.PictureRecorder();\n const canvas = rec.beginRecording();\n this.drawOnCanvas(canvas);\n const picture = rec.finishRecordingAsPicture();\n SkiaViewApi.setJsiProperty(this.nativeId, \"picture\", picture);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_Recorder","require","_Visitor","_Player","_DrawingContext","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","Container","constructor","Skia","root","_root","mount","unmounted","unmount","drawOnCanvas","canvas","recording","Error","ctx","createDrawingContext","paintPool","replay","commands","exports","StaticContainer","nativeId","redraw","recorder","Recorder","visit","getRecording","isOnScreen","rec","PictureRecorder","beginRecording","picture","finishRecordingAsPicture","dispose","SkiaViewApi","setJsiProperty"],"sources":["StaticContainer.ts"],"sourcesContent":["import type { Skia, SkCanvas } from \"../skia/types\";\n\nimport type { Node } from \"./Node\";\nimport type { Recording } from \"./Recorder/Recorder\";\nimport { Recorder } from \"./Recorder/Recorder\";\nimport { visit } from \"./Recorder/Visitor\";\nimport { replay } from \"./Recorder/Player\";\nimport { createDrawingContext } from \"./Recorder/DrawingContext\";\n\nimport \"../views/api\";\n\nexport abstract class Container {\n private _root: Node[] = [];\n protected recording: Recording | null = null;\n protected unmounted = false;\n\n constructor(protected Skia: Skia) {}\n\n get root() {\n return this._root;\n }\n\n set root(value: Node[]) {\n this._root = value;\n }\n\n mount() {\n this.unmounted = false;\n }\n\n unmount() {\n this.unmounted = true;\n }\n\n drawOnCanvas(canvas: SkCanvas) {\n if (!this.recording) {\n throw new Error(\"No recording to draw\");\n }\n const ctx = createDrawingContext(\n this.Skia,\n this.recording.paintPool,\n canvas\n );\n replay(ctx, this.recording.commands);\n }\n\n abstract redraw(): void;\n}\n\nexport class StaticContainer extends Container {\n constructor(\n Skia: Skia,\n private nativeId: number\n ) {\n super(Skia);\n }\n\n redraw() {\n const recorder = new Recorder();\n visit(recorder, this.root);\n this.recording = recorder.getRecording();\n const isOnScreen = this.nativeId !== -1;\n if (isOnScreen) {\n const rec = this.Skia.PictureRecorder();\n const canvas = rec.beginRecording();\n this.drawOnCanvas(canvas);\n const picture = rec.finishRecordingAsPicture();\n rec.dispose();\n SkiaViewApi.setJsiProperty(this.nativeId, \"picture\", picture);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}