react-native-image-editor-skia 0.1.0

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 (299) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +202 -0
  3. package/lib/commonjs/ImageEditor.js +141 -0
  4. package/lib/commonjs/ImageEditor.js.map +1 -0
  5. package/lib/commonjs/annotations/AnnotationView.js +42 -0
  6. package/lib/commonjs/annotations/AnnotationView.js.map +1 -0
  7. package/lib/commonjs/annotations/ArrowAnnotation.js +29 -0
  8. package/lib/commonjs/annotations/ArrowAnnotation.js.map +1 -0
  9. package/lib/commonjs/annotations/CircleAnnotation.js +31 -0
  10. package/lib/commonjs/annotations/CircleAnnotation.js.map +1 -0
  11. package/lib/commonjs/annotations/FreehandAnnotation.js +29 -0
  12. package/lib/commonjs/annotations/FreehandAnnotation.js.map +1 -0
  13. package/lib/commonjs/annotations/MarkerAnnotation.js +27 -0
  14. package/lib/commonjs/annotations/MarkerAnnotation.js.map +1 -0
  15. package/lib/commonjs/annotations/RotatedGroup.js +34 -0
  16. package/lib/commonjs/annotations/RotatedGroup.js.map +1 -0
  17. package/lib/commonjs/annotations/TextAnnotation.js +40 -0
  18. package/lib/commonjs/annotations/TextAnnotation.js.map +1 -0
  19. package/lib/commonjs/annotations/geometry.js +73 -0
  20. package/lib/commonjs/annotations/geometry.js.map +1 -0
  21. package/lib/commonjs/annotations/geometryPure.js +104 -0
  22. package/lib/commonjs/annotations/geometryPure.js.map +1 -0
  23. package/lib/commonjs/canvas/AnnotationLayer.js +58 -0
  24. package/lib/commonjs/canvas/AnnotationLayer.js.map +1 -0
  25. package/lib/commonjs/canvas/BaseImageLayer.js +27 -0
  26. package/lib/commonjs/canvas/BaseImageLayer.js.map +1 -0
  27. package/lib/commonjs/canvas/CropOverlay.js +135 -0
  28. package/lib/commonjs/canvas/CropOverlay.js.map +1 -0
  29. package/lib/commonjs/canvas/EditorCanvas.js +91 -0
  30. package/lib/commonjs/canvas/EditorCanvas.js.map +1 -0
  31. package/lib/commonjs/canvas/InFlightLayer.js +152 -0
  32. package/lib/commonjs/canvas/InFlightLayer.js.map +1 -0
  33. package/lib/commonjs/canvas/SelectionOverlay.js +90 -0
  34. package/lib/commonjs/canvas/SelectionOverlay.js.map +1 -0
  35. package/lib/commonjs/constants.js +56 -0
  36. package/lib/commonjs/constants.js.map +1 -0
  37. package/lib/commonjs/context/EditorContext.js +132 -0
  38. package/lib/commonjs/context/EditorContext.js.map +1 -0
  39. package/lib/commonjs/export/drawScene.js +97 -0
  40. package/lib/commonjs/export/drawScene.js.map +1 -0
  41. package/lib/commonjs/export/exportImage.js +92 -0
  42. package/lib/commonjs/export/exportImage.js.map +1 -0
  43. package/lib/commonjs/gestures/applyTransform.js +79 -0
  44. package/lib/commonjs/gestures/applyTransform.js.map +1 -0
  45. package/lib/commonjs/gestures/createAnnotation.js +73 -0
  46. package/lib/commonjs/gestures/createAnnotation.js.map +1 -0
  47. package/lib/commonjs/gestures/handles.js +53 -0
  48. package/lib/commonjs/gestures/handles.js.map +1 -0
  49. package/lib/commonjs/gestures/hitTest.js +72 -0
  50. package/lib/commonjs/gestures/hitTest.js.map +1 -0
  51. package/lib/commonjs/gestures/useCropGesture.js +149 -0
  52. package/lib/commonjs/gestures/useCropGesture.js.map +1 -0
  53. package/lib/commonjs/gestures/useEditorGestures.js +289 -0
  54. package/lib/commonjs/gestures/useEditorGestures.js.map +1 -0
  55. package/lib/commonjs/image/disposeRegistry.js +63 -0
  56. package/lib/commonjs/image/disposeRegistry.js.map +1 -0
  57. package/lib/commonjs/image/useLoadedImage.js +121 -0
  58. package/lib/commonjs/image/useLoadedImage.js.map +1 -0
  59. package/lib/commonjs/index.js +52 -0
  60. package/lib/commonjs/index.js.map +1 -0
  61. package/lib/commonjs/package.json +1 -0
  62. package/lib/commonjs/state/history.js +85 -0
  63. package/lib/commonjs/state/history.js.map +1 -0
  64. package/lib/commonjs/state/selectors.js +19 -0
  65. package/lib/commonjs/state/selectors.js.map +1 -0
  66. package/lib/commonjs/state/useEditorReducer.js +83 -0
  67. package/lib/commonjs/state/useEditorReducer.js.map +1 -0
  68. package/lib/commonjs/toolbar/ColorPicker.js +84 -0
  69. package/lib/commonjs/toolbar/ColorPicker.js.map +1 -0
  70. package/lib/commonjs/toolbar/CropControls.js +65 -0
  71. package/lib/commonjs/toolbar/CropControls.js.map +1 -0
  72. package/lib/commonjs/toolbar/RotationSlider.js +73 -0
  73. package/lib/commonjs/toolbar/RotationSlider.js.map +1 -0
  74. package/lib/commonjs/toolbar/TextInputOverlay.js +108 -0
  75. package/lib/commonjs/toolbar/TextInputOverlay.js.map +1 -0
  76. package/lib/commonjs/toolbar/ToolButton.js +56 -0
  77. package/lib/commonjs/toolbar/ToolButton.js.map +1 -0
  78. package/lib/commonjs/toolbar/Toolbar.js +137 -0
  79. package/lib/commonjs/toolbar/Toolbar.js.map +1 -0
  80. package/lib/commonjs/types.js +47 -0
  81. package/lib/commonjs/types.js.map +1 -0
  82. package/lib/commonjs/utils/color.js +37 -0
  83. package/lib/commonjs/utils/color.js.map +1 -0
  84. package/lib/commonjs/utils/id.js +14 -0
  85. package/lib/commonjs/utils/id.js.map +1 -0
  86. package/lib/commonjs/utils/math.js +277 -0
  87. package/lib/commonjs/utils/math.js.map +1 -0
  88. package/lib/module/ImageEditor.js +138 -0
  89. package/lib/module/ImageEditor.js.map +1 -0
  90. package/lib/module/annotations/AnnotationView.js +39 -0
  91. package/lib/module/annotations/AnnotationView.js.map +1 -0
  92. package/lib/module/annotations/ArrowAnnotation.js +26 -0
  93. package/lib/module/annotations/ArrowAnnotation.js.map +1 -0
  94. package/lib/module/annotations/CircleAnnotation.js +27 -0
  95. package/lib/module/annotations/CircleAnnotation.js.map +1 -0
  96. package/lib/module/annotations/FreehandAnnotation.js +25 -0
  97. package/lib/module/annotations/FreehandAnnotation.js.map +1 -0
  98. package/lib/module/annotations/MarkerAnnotation.js +23 -0
  99. package/lib/module/annotations/MarkerAnnotation.js.map +1 -0
  100. package/lib/module/annotations/RotatedGroup.js +29 -0
  101. package/lib/module/annotations/RotatedGroup.js.map +1 -0
  102. package/lib/module/annotations/TextAnnotation.js +37 -0
  103. package/lib/module/annotations/TextAnnotation.js.map +1 -0
  104. package/lib/module/annotations/geometry.js +56 -0
  105. package/lib/module/annotations/geometry.js.map +1 -0
  106. package/lib/module/annotations/geometryPure.js +100 -0
  107. package/lib/module/annotations/geometryPure.js.map +1 -0
  108. package/lib/module/canvas/AnnotationLayer.js +55 -0
  109. package/lib/module/canvas/AnnotationLayer.js.map +1 -0
  110. package/lib/module/canvas/BaseImageLayer.js +23 -0
  111. package/lib/module/canvas/BaseImageLayer.js.map +1 -0
  112. package/lib/module/canvas/CropOverlay.js +131 -0
  113. package/lib/module/canvas/CropOverlay.js.map +1 -0
  114. package/lib/module/canvas/EditorCanvas.js +88 -0
  115. package/lib/module/canvas/EditorCanvas.js.map +1 -0
  116. package/lib/module/canvas/InFlightLayer.js +149 -0
  117. package/lib/module/canvas/InFlightLayer.js.map +1 -0
  118. package/lib/module/canvas/SelectionOverlay.js +85 -0
  119. package/lib/module/canvas/SelectionOverlay.js.map +1 -0
  120. package/lib/module/constants.js +52 -0
  121. package/lib/module/constants.js.map +1 -0
  122. package/lib/module/context/EditorContext.js +126 -0
  123. package/lib/module/context/EditorContext.js.map +1 -0
  124. package/lib/module/export/drawScene.js +93 -0
  125. package/lib/module/export/drawScene.js.map +1 -0
  126. package/lib/module/export/exportImage.js +88 -0
  127. package/lib/module/export/exportImage.js.map +1 -0
  128. package/lib/module/gestures/applyTransform.js +75 -0
  129. package/lib/module/gestures/applyTransform.js.map +1 -0
  130. package/lib/module/gestures/createAnnotation.js +65 -0
  131. package/lib/module/gestures/createAnnotation.js.map +1 -0
  132. package/lib/module/gestures/handles.js +49 -0
  133. package/lib/module/gestures/handles.js.map +1 -0
  134. package/lib/module/gestures/hitTest.js +69 -0
  135. package/lib/module/gestures/hitTest.js.map +1 -0
  136. package/lib/module/gestures/useCropGesture.js +145 -0
  137. package/lib/module/gestures/useCropGesture.js.map +1 -0
  138. package/lib/module/gestures/useEditorGestures.js +285 -0
  139. package/lib/module/gestures/useEditorGestures.js.map +1 -0
  140. package/lib/module/image/disposeRegistry.js +57 -0
  141. package/lib/module/image/disposeRegistry.js.map +1 -0
  142. package/lib/module/image/useLoadedImage.js +117 -0
  143. package/lib/module/image/useLoadedImage.js.map +1 -0
  144. package/lib/module/index.js +8 -0
  145. package/lib/module/index.js.map +1 -0
  146. package/lib/module/package.json +1 -0
  147. package/lib/module/state/history.js +76 -0
  148. package/lib/module/state/history.js.map +1 -0
  149. package/lib/module/state/selectors.js +14 -0
  150. package/lib/module/state/selectors.js.map +1 -0
  151. package/lib/module/state/useEditorReducer.js +79 -0
  152. package/lib/module/state/useEditorReducer.js.map +1 -0
  153. package/lib/module/toolbar/ColorPicker.js +80 -0
  154. package/lib/module/toolbar/ColorPicker.js.map +1 -0
  155. package/lib/module/toolbar/CropControls.js +62 -0
  156. package/lib/module/toolbar/CropControls.js.map +1 -0
  157. package/lib/module/toolbar/RotationSlider.js +69 -0
  158. package/lib/module/toolbar/RotationSlider.js.map +1 -0
  159. package/lib/module/toolbar/TextInputOverlay.js +105 -0
  160. package/lib/module/toolbar/TextInputOverlay.js.map +1 -0
  161. package/lib/module/toolbar/ToolButton.js +52 -0
  162. package/lib/module/toolbar/ToolButton.js.map +1 -0
  163. package/lib/module/toolbar/Toolbar.js +133 -0
  164. package/lib/module/toolbar/Toolbar.js.map +1 -0
  165. package/lib/module/types.js +43 -0
  166. package/lib/module/types.js.map +1 -0
  167. package/lib/module/utils/color.js +33 -0
  168. package/lib/module/utils/color.js.map +1 -0
  169. package/lib/module/utils/id.js +10 -0
  170. package/lib/module/utils/id.js.map +1 -0
  171. package/lib/module/utils/math.js +258 -0
  172. package/lib/module/utils/math.js.map +1 -0
  173. package/lib/typescript/src/ImageEditor.d.ts +9 -0
  174. package/lib/typescript/src/ImageEditor.d.ts.map +1 -0
  175. package/lib/typescript/src/annotations/AnnotationView.d.ts +6 -0
  176. package/lib/typescript/src/annotations/AnnotationView.d.ts.map +1 -0
  177. package/lib/typescript/src/annotations/ArrowAnnotation.d.ts +5 -0
  178. package/lib/typescript/src/annotations/ArrowAnnotation.d.ts.map +1 -0
  179. package/lib/typescript/src/annotations/CircleAnnotation.d.ts +5 -0
  180. package/lib/typescript/src/annotations/CircleAnnotation.d.ts.map +1 -0
  181. package/lib/typescript/src/annotations/FreehandAnnotation.d.ts +5 -0
  182. package/lib/typescript/src/annotations/FreehandAnnotation.d.ts.map +1 -0
  183. package/lib/typescript/src/annotations/MarkerAnnotation.d.ts +5 -0
  184. package/lib/typescript/src/annotations/MarkerAnnotation.d.ts.map +1 -0
  185. package/lib/typescript/src/annotations/RotatedGroup.d.ts +13 -0
  186. package/lib/typescript/src/annotations/RotatedGroup.d.ts.map +1 -0
  187. package/lib/typescript/src/annotations/TextAnnotation.d.ts +10 -0
  188. package/lib/typescript/src/annotations/TextAnnotation.d.ts.map +1 -0
  189. package/lib/typescript/src/annotations/geometry.d.ts +11 -0
  190. package/lib/typescript/src/annotations/geometry.d.ts.map +1 -0
  191. package/lib/typescript/src/annotations/geometryPure.d.ts +14 -0
  192. package/lib/typescript/src/annotations/geometryPure.d.ts.map +1 -0
  193. package/lib/typescript/src/canvas/AnnotationLayer.d.ts +11 -0
  194. package/lib/typescript/src/canvas/AnnotationLayer.d.ts.map +1 -0
  195. package/lib/typescript/src/canvas/BaseImageLayer.d.ts +12 -0
  196. package/lib/typescript/src/canvas/BaseImageLayer.d.ts.map +1 -0
  197. package/lib/typescript/src/canvas/CropOverlay.d.ts +10 -0
  198. package/lib/typescript/src/canvas/CropOverlay.d.ts.map +1 -0
  199. package/lib/typescript/src/canvas/EditorCanvas.d.ts +18 -0
  200. package/lib/typescript/src/canvas/EditorCanvas.d.ts.map +1 -0
  201. package/lib/typescript/src/canvas/InFlightLayer.d.ts +12 -0
  202. package/lib/typescript/src/canvas/InFlightLayer.d.ts.map +1 -0
  203. package/lib/typescript/src/canvas/SelectionOverlay.d.ts +11 -0
  204. package/lib/typescript/src/canvas/SelectionOverlay.d.ts.map +1 -0
  205. package/lib/typescript/src/constants.d.ts +25 -0
  206. package/lib/typescript/src/constants.d.ts.map +1 -0
  207. package/lib/typescript/src/context/EditorContext.d.ts +66 -0
  208. package/lib/typescript/src/context/EditorContext.d.ts.map +1 -0
  209. package/lib/typescript/src/export/drawScene.d.ts +10 -0
  210. package/lib/typescript/src/export/drawScene.d.ts.map +1 -0
  211. package/lib/typescript/src/export/exportImage.d.ts +23 -0
  212. package/lib/typescript/src/export/exportImage.d.ts.map +1 -0
  213. package/lib/typescript/src/gestures/applyTransform.d.ts +17 -0
  214. package/lib/typescript/src/gestures/applyTransform.d.ts.map +1 -0
  215. package/lib/typescript/src/gestures/createAnnotation.d.ts +11 -0
  216. package/lib/typescript/src/gestures/createAnnotation.d.ts.map +1 -0
  217. package/lib/typescript/src/gestures/handles.d.ts +17 -0
  218. package/lib/typescript/src/gestures/handles.d.ts.map +1 -0
  219. package/lib/typescript/src/gestures/hitTest.d.ts +9 -0
  220. package/lib/typescript/src/gestures/hitTest.d.ts.map +1 -0
  221. package/lib/typescript/src/gestures/useCropGesture.d.ts +7 -0
  222. package/lib/typescript/src/gestures/useCropGesture.d.ts.map +1 -0
  223. package/lib/typescript/src/gestures/useEditorGestures.d.ts +8 -0
  224. package/lib/typescript/src/gestures/useEditorGestures.d.ts.map +1 -0
  225. package/lib/typescript/src/image/disposeRegistry.d.ts +25 -0
  226. package/lib/typescript/src/image/disposeRegistry.d.ts.map +1 -0
  227. package/lib/typescript/src/image/useLoadedImage.d.ts +23 -0
  228. package/lib/typescript/src/image/useLoadedImage.d.ts.map +1 -0
  229. package/lib/typescript/src/index.d.ts +6 -0
  230. package/lib/typescript/src/index.d.ts.map +1 -0
  231. package/lib/typescript/src/state/history.d.ts +23 -0
  232. package/lib/typescript/src/state/history.d.ts.map +1 -0
  233. package/lib/typescript/src/state/selectors.d.ts +5 -0
  234. package/lib/typescript/src/state/selectors.d.ts.map +1 -0
  235. package/lib/typescript/src/state/useEditorReducer.d.ts +32 -0
  236. package/lib/typescript/src/state/useEditorReducer.d.ts.map +1 -0
  237. package/lib/typescript/src/toolbar/ColorPicker.d.ts +7 -0
  238. package/lib/typescript/src/toolbar/ColorPicker.d.ts.map +1 -0
  239. package/lib/typescript/src/toolbar/CropControls.d.ts +3 -0
  240. package/lib/typescript/src/toolbar/CropControls.d.ts.map +1 -0
  241. package/lib/typescript/src/toolbar/RotationSlider.d.ts +8 -0
  242. package/lib/typescript/src/toolbar/RotationSlider.d.ts.map +1 -0
  243. package/lib/typescript/src/toolbar/TextInputOverlay.d.ts +9 -0
  244. package/lib/typescript/src/toolbar/TextInputOverlay.d.ts.map +1 -0
  245. package/lib/typescript/src/toolbar/ToolButton.d.ts +7 -0
  246. package/lib/typescript/src/toolbar/ToolButton.d.ts.map +1 -0
  247. package/lib/typescript/src/toolbar/Toolbar.d.ts +4 -0
  248. package/lib/typescript/src/toolbar/Toolbar.d.ts.map +1 -0
  249. package/lib/typescript/src/types.d.ts +170 -0
  250. package/lib/typescript/src/types.d.ts.map +1 -0
  251. package/lib/typescript/src/utils/color.d.ts +8 -0
  252. package/lib/typescript/src/utils/color.d.ts.map +1 -0
  253. package/lib/typescript/src/utils/id.d.ts +3 -0
  254. package/lib/typescript/src/utils/id.d.ts.map +1 -0
  255. package/lib/typescript/src/utils/math.d.ts +68 -0
  256. package/lib/typescript/src/utils/math.d.ts.map +1 -0
  257. package/package.json +90 -0
  258. package/src/ImageEditor.tsx +133 -0
  259. package/src/annotations/AnnotationView.tsx +24 -0
  260. package/src/annotations/ArrowAnnotation.tsx +26 -0
  261. package/src/annotations/CircleAnnotation.tsx +22 -0
  262. package/src/annotations/FreehandAnnotation.tsx +22 -0
  263. package/src/annotations/MarkerAnnotation.tsx +20 -0
  264. package/src/annotations/RotatedGroup.tsx +28 -0
  265. package/src/annotations/TextAnnotation.tsx +42 -0
  266. package/src/annotations/geometry.ts +62 -0
  267. package/src/annotations/geometryPure.ts +73 -0
  268. package/src/canvas/AnnotationLayer.tsx +43 -0
  269. package/src/canvas/BaseImageLayer.tsx +28 -0
  270. package/src/canvas/CropOverlay.tsx +92 -0
  271. package/src/canvas/EditorCanvas.tsx +70 -0
  272. package/src/canvas/InFlightLayer.tsx +140 -0
  273. package/src/canvas/SelectionOverlay.tsx +92 -0
  274. package/src/constants.ts +46 -0
  275. package/src/context/EditorContext.tsx +229 -0
  276. package/src/export/drawScene.ts +120 -0
  277. package/src/export/exportImage.ts +111 -0
  278. package/src/gestures/applyTransform.ts +76 -0
  279. package/src/gestures/createAnnotation.ts +92 -0
  280. package/src/gestures/handles.ts +50 -0
  281. package/src/gestures/hitTest.ts +79 -0
  282. package/src/gestures/useCropGesture.ts +123 -0
  283. package/src/gestures/useEditorGestures.ts +308 -0
  284. package/src/image/disposeRegistry.ts +59 -0
  285. package/src/image/useLoadedImage.ts +131 -0
  286. package/src/index.ts +32 -0
  287. package/src/state/history.ts +71 -0
  288. package/src/state/selectors.ts +16 -0
  289. package/src/state/useEditorReducer.ts +93 -0
  290. package/src/toolbar/ColorPicker.tsx +72 -0
  291. package/src/toolbar/CropControls.tsx +46 -0
  292. package/src/toolbar/RotationSlider.tsx +56 -0
  293. package/src/toolbar/TextInputOverlay.tsx +104 -0
  294. package/src/toolbar/ToolButton.tsx +46 -0
  295. package/src/toolbar/Toolbar.tsx +110 -0
  296. package/src/types.ts +203 -0
  297. package/src/utils/color.ts +34 -0
  298. package/src/utils/id.ts +7 -0
  299. package/src/utils/math.ts +222 -0
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "annotationBounds", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _geometryPure.annotationBounds;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "annotationCenter", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _geometryPure.annotationCenter;
16
+ }
17
+ });
18
+ exports.buildArrowPath = buildArrowPath;
19
+ exports.buildFreehandPath = buildFreehandPath;
20
+ var _reactNativeSkia = require("@shopify/react-native-skia");
21
+ var _geometryPure = require("./geometryPure");
22
+ // Re-export the pure helpers so existing imports from './geometry' keep working.
23
+ // (Worklet/test-safe versions with no Skia dependency live in ./geometryPure.)
24
+
25
+ /**
26
+ * Build a Skia path for an arrow (shaft + two arrowhead barbs).
27
+ * Not a worklet — it allocates an `SkPath` (a Skia object) on the JS thread.
28
+ */
29
+ function buildArrowPath(start, end, headSize) {
30
+ const path = _reactNativeSkia.Skia.Path.Make();
31
+ path.moveTo(start.x, start.y);
32
+ path.lineTo(end.x, end.y);
33
+ const angle = Math.atan2(end.y - start.y, end.x - start.x);
34
+ const barb = Math.PI * 5 / 6; // 150° from the shaft direction
35
+ const b1 = {
36
+ x: end.x + headSize * Math.cos(angle + barb),
37
+ y: end.y + headSize * Math.sin(angle + barb)
38
+ };
39
+ const b2 = {
40
+ x: end.x + headSize * Math.cos(angle - barb),
41
+ y: end.y + headSize * Math.sin(angle - barb)
42
+ };
43
+ path.moveTo(end.x, end.y);
44
+ path.lineTo(b1.x, b1.y);
45
+ path.moveTo(end.x, end.y);
46
+ path.lineTo(b2.x, b2.y);
47
+ return path;
48
+ }
49
+
50
+ /** Build a smoothed (quadratic) path through freehand points. */
51
+ function buildFreehandPath(points) {
52
+ const path = _reactNativeSkia.Skia.Path.Make();
53
+ if (points.length === 0) {
54
+ return path;
55
+ }
56
+ path.moveTo(points[0].x, points[0].y);
57
+ if (points.length === 1) {
58
+ // Draw a dot.
59
+ path.lineTo(points[0].x + 0.01, points[0].y + 0.01);
60
+ return path;
61
+ }
62
+ for (let i = 1; i < points.length - 1; i++) {
63
+ const p = points[i];
64
+ const next = points[i + 1];
65
+ const midX = (p.x + next.x) / 2;
66
+ const midY = (p.y + next.y) / 2;
67
+ path.quadTo(p.x, p.y, midX, midY);
68
+ }
69
+ const last = points[points.length - 1];
70
+ path.lineTo(last.x, last.y);
71
+ return path;
72
+ }
73
+ //# sourceMappingURL=geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNativeSkia","require","_geometryPure","buildArrowPath","start","end","headSize","path","Skia","Path","Make","moveTo","x","y","lineTo","angle","Math","atan2","barb","PI","b1","cos","sin","b2","buildFreehandPath","points","length","i","p","next","midX","midY","quadTo","last"],"sourceRoot":"..\\..\\..\\src","sources":["annotations/geometry.ts"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AAOA,IAAAC,aAAA,GAAAD,OAAA;AAFA;AACA;;AAGA;AACA;AACA;AACA;AACO,SAASE,cAAcA,CAC5BC,KAAW,EACXC,GAAS,EACTC,QAAgB,EACR;EACR,MAAMC,IAAI,GAAGC,qBAAI,CAACC,IAAI,CAACC,IAAI,CAAC,CAAC;EAC7BH,IAAI,CAACI,MAAM,CAACP,KAAK,CAACQ,CAAC,EAAER,KAAK,CAACS,CAAC,CAAC;EAC7BN,IAAI,CAACO,MAAM,CAACT,GAAG,CAACO,CAAC,EAAEP,GAAG,CAACQ,CAAC,CAAC;EAEzB,MAAME,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACZ,GAAG,CAACQ,CAAC,GAAGT,KAAK,CAACS,CAAC,EAAER,GAAG,CAACO,CAAC,GAAGR,KAAK,CAACQ,CAAC,CAAC;EAC1D,MAAMM,IAAI,GAAIF,IAAI,CAACG,EAAE,GAAG,CAAC,GAAI,CAAC,CAAC,CAAC;EAChC,MAAMC,EAAE,GAAG;IACTR,CAAC,EAAEP,GAAG,CAACO,CAAC,GAAGN,QAAQ,GAAGU,IAAI,CAACK,GAAG,CAACN,KAAK,GAAGG,IAAI,CAAC;IAC5CL,CAAC,EAAER,GAAG,CAACQ,CAAC,GAAGP,QAAQ,GAAGU,IAAI,CAACM,GAAG,CAACP,KAAK,GAAGG,IAAI;EAC7C,CAAC;EACD,MAAMK,EAAE,GAAG;IACTX,CAAC,EAAEP,GAAG,CAACO,CAAC,GAAGN,QAAQ,GAAGU,IAAI,CAACK,GAAG,CAACN,KAAK,GAAGG,IAAI,CAAC;IAC5CL,CAAC,EAAER,GAAG,CAACQ,CAAC,GAAGP,QAAQ,GAAGU,IAAI,CAACM,GAAG,CAACP,KAAK,GAAGG,IAAI;EAC7C,CAAC;EACDX,IAAI,CAACI,MAAM,CAACN,GAAG,CAACO,CAAC,EAAEP,GAAG,CAACQ,CAAC,CAAC;EACzBN,IAAI,CAACO,MAAM,CAACM,EAAE,CAACR,CAAC,EAAEQ,EAAE,CAACP,CAAC,CAAC;EACvBN,IAAI,CAACI,MAAM,CAACN,GAAG,CAACO,CAAC,EAAEP,GAAG,CAACQ,CAAC,CAAC;EACzBN,IAAI,CAACO,MAAM,CAACS,EAAE,CAACX,CAAC,EAAEW,EAAE,CAACV,CAAC,CAAC;EACvB,OAAON,IAAI;AACb;;AAEA;AACO,SAASiB,iBAAiBA,CAACC,MAAc,EAAU;EACxD,MAAMlB,IAAI,GAAGC,qBAAI,CAACC,IAAI,CAACC,IAAI,CAAC,CAAC;EAC7B,IAAIe,MAAM,CAACC,MAAM,KAAK,CAAC,EAAE;IACvB,OAAOnB,IAAI;EACb;EACAA,IAAI,CAACI,MAAM,CAACc,MAAM,CAAC,CAAC,CAAC,CAAEb,CAAC,EAAEa,MAAM,CAAC,CAAC,CAAC,CAAEZ,CAAC,CAAC;EACvC,IAAIY,MAAM,CAACC,MAAM,KAAK,CAAC,EAAE;IACvB;IACAnB,IAAI,CAACO,MAAM,CAACW,MAAM,CAAC,CAAC,CAAC,CAAEb,CAAC,GAAG,IAAI,EAAEa,MAAM,CAAC,CAAC,CAAC,CAAEZ,CAAC,GAAG,IAAI,CAAC;IACrD,OAAON,IAAI;EACb;EACA,KAAK,IAAIoB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,MAAM,CAACC,MAAM,GAAG,CAAC,EAAEC,CAAC,EAAE,EAAE;IAC1C,MAAMC,CAAC,GAAGH,MAAM,CAACE,CAAC,CAAE;IACpB,MAAME,IAAI,GAAGJ,MAAM,CAACE,CAAC,GAAG,CAAC,CAAE;IAC3B,MAAMG,IAAI,GAAG,CAACF,CAAC,CAAChB,CAAC,GAAGiB,IAAI,CAACjB,CAAC,IAAI,CAAC;IAC/B,MAAMmB,IAAI,GAAG,CAACH,CAAC,CAACf,CAAC,GAAGgB,IAAI,CAAChB,CAAC,IAAI,CAAC;IAC/BN,IAAI,CAACyB,MAAM,CAACJ,CAAC,CAAChB,CAAC,EAAEgB,CAAC,CAACf,CAAC,EAAEiB,IAAI,EAAEC,IAAI,CAAC;EACnC;EACA,MAAME,IAAI,GAAGR,MAAM,CAACA,MAAM,CAACC,MAAM,GAAG,CAAC,CAAE;EACvCnB,IAAI,CAACO,MAAM,CAACmB,IAAI,CAACrB,CAAC,EAAEqB,IAAI,CAACpB,CAAC,CAAC;EAC3B,OAAON,IAAI;AACb","ignoreList":[]}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.annotationBounds = annotationBounds;
7
+ exports.annotationCenter = annotationCenter;
8
+ var _math = require("../utils/math");
9
+ /**
10
+ * Pure annotation geometry (no Skia imports) so it is safe to use from worklets
11
+ * AND from plain unit tests without loading the native Skia module.
12
+ */
13
+
14
+ /** Center of an annotation in image space (used as rotation/scale origin). */
15
+ function annotationCenter(a) {
16
+ 'worklet';
17
+
18
+ switch (a.type) {
19
+ case 'circle':
20
+ return {
21
+ x: a.center.x,
22
+ y: a.center.y
23
+ };
24
+ case 'arrow':
25
+ return {
26
+ x: (a.start.x + a.end.x) / 2,
27
+ y: (a.start.y + a.end.y) / 2
28
+ };
29
+ case 'marker':
30
+ return {
31
+ x: a.rect.x + a.rect.width / 2,
32
+ y: a.rect.y + a.rect.height / 2
33
+ };
34
+ case 'freehand':
35
+ {
36
+ const b = (0, _math.boundsOfPoints)(a.points);
37
+ return {
38
+ x: b.x + b.width / 2,
39
+ y: b.y + b.height / 2
40
+ };
41
+ }
42
+ case 'text':
43
+ return {
44
+ x: a.origin.x + a.width / 2,
45
+ y: a.origin.y + a.fontSize * 1.2 / 2
46
+ };
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Axis-aligned bounding box of an annotation in its LOCAL (unrotated) frame.
52
+ * The selection overlay rotates this box by `annotation.rotation` about the
53
+ * center when drawing handles.
54
+ */
55
+ function annotationBounds(a) {
56
+ 'worklet';
57
+
58
+ switch (a.type) {
59
+ case 'circle':
60
+ return {
61
+ x: a.center.x - a.radius,
62
+ y: a.center.y - a.radius,
63
+ width: a.radius * 2,
64
+ height: a.radius * 2
65
+ };
66
+ case 'arrow':
67
+ {
68
+ const pad = a.headSize + a.strokeWidth;
69
+ const minX = Math.min(a.start.x, a.end.x) - pad;
70
+ const minY = Math.min(a.start.y, a.end.y) - pad;
71
+ const maxX = Math.max(a.start.x, a.end.x) + pad;
72
+ const maxY = Math.max(a.start.y, a.end.y) + pad;
73
+ return {
74
+ x: minX,
75
+ y: minY,
76
+ width: maxX - minX,
77
+ height: maxY - minY
78
+ };
79
+ }
80
+ case 'marker':
81
+ return {
82
+ ...a.rect
83
+ };
84
+ case 'freehand':
85
+ {
86
+ const b = (0, _math.boundsOfPoints)(a.points);
87
+ const pad = a.strokeWidth / 2;
88
+ return {
89
+ x: b.x - pad,
90
+ y: b.y - pad,
91
+ width: b.width + pad * 2,
92
+ height: b.height + pad * 2
93
+ };
94
+ }
95
+ case 'text':
96
+ return {
97
+ x: a.origin.x,
98
+ y: a.origin.y,
99
+ width: a.width,
100
+ height: a.fontSize * 1.2
101
+ };
102
+ }
103
+ }
104
+ //# sourceMappingURL=geometryPure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_math","require","annotationCenter","a","type","x","center","y","start","end","rect","width","height","b","boundsOfPoints","points","origin","fontSize","annotationBounds","radius","pad","headSize","strokeWidth","minX","Math","min","minY","maxX","max","maxY"],"sourceRoot":"..\\..\\..\\src","sources":["annotations/geometryPure.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AnnotationLayer = AnnotationLayer;
7
+ var _reactNativeSkia = require("@shopify/react-native-skia");
8
+ var _reactNativeReanimated = require("react-native-reanimated");
9
+ var _selectors = require("../state/selectors");
10
+ var _AnnotationView = require("../annotations/AnnotationView");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ /**
13
+ * Renders all committed annotations in paint order. The selected annotation is
14
+ * wrapped in a Group whose transform is driven by the `live` shared values, so
15
+ * move/resize/rotate previews run on the UI thread with zero React re-renders.
16
+ * When idle the live transform is identity, so this is a no-op visually.
17
+ */
18
+ function AnnotationLayer({
19
+ editor
20
+ }) {
21
+ const {
22
+ annotations,
23
+ selectedId,
24
+ live,
25
+ editingTextId
26
+ } = editor;
27
+ const liveTransform = (0, _reactNativeReanimated.useDerivedValue)(() => [{
28
+ translateX: live.tx.value
29
+ }, {
30
+ translateY: live.ty.value
31
+ }, {
32
+ rotate: live.rotate.value
33
+ }, {
34
+ scale: live.scale.value
35
+ }]);
36
+ const liveOrigin = (0, _reactNativeReanimated.useDerivedValue)(() => live.origin.value);
37
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
38
+ children: (0, _selectors.sortedByZ)(annotations).map(a => {
39
+ // Hide the text annotation currently being edited in the native overlay.
40
+ if (a.type === 'text' && a.id === editingTextId) {
41
+ return null;
42
+ }
43
+ if (a.id === selectedId) {
44
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSkia.Group, {
45
+ origin: liveOrigin,
46
+ transform: liveTransform,
47
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_AnnotationView.AnnotationView, {
48
+ a: a
49
+ })
50
+ }, a.id);
51
+ }
52
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_AnnotationView.AnnotationView, {
53
+ a: a
54
+ }, a.id);
55
+ })
56
+ });
57
+ }
58
+ //# sourceMappingURL=AnnotationLayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNativeSkia","require","_reactNativeReanimated","_selectors","_AnnotationView","_jsxRuntime","AnnotationLayer","editor","annotations","selectedId","live","editingTextId","liveTransform","useDerivedValue","translateX","tx","value","translateY","ty","rotate","scale","liveOrigin","origin","jsx","Fragment","children","sortedByZ","map","a","type","id","Group","transform","AnnotationView"],"sourceRoot":"..\\..\\..\\src","sources":["canvas/AnnotationLayer.tsx"],"mappings":";;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AAGA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAH,OAAA;AAA+D,IAAAI,WAAA,GAAAJ,OAAA;AAE/D;AACA;AACA;AACA;AACA;AACA;AACO,SAASK,eAAeA,CAAC;EAAEC;AAAuC,CAAC,EAAE;EAC1E,MAAM;IAAEC,WAAW;IAAEC,UAAU;IAAEC,IAAI;IAAEC;EAAc,CAAC,GAAGJ,MAAM;EAE/D,MAAMK,aAAa,GAAG,IAAAC,sCAAe,EAAC,MAAM,CAC1C;IAAEC,UAAU,EAAEJ,IAAI,CAACK,EAAE,CAACC;EAAM,CAAC,EAC7B;IAAEC,UAAU,EAAEP,IAAI,CAACQ,EAAE,CAACF;EAAM,CAAC,EAC7B;IAAEG,MAAM,EAAET,IAAI,CAACS,MAAM,CAACH;EAAM,CAAC,EAC7B;IAAEI,KAAK,EAAEV,IAAI,CAACU,KAAK,CAACJ;EAAM,CAAC,CAC5B,CAAC;EACF,MAAMK,UAAU,GAAG,IAAAR,sCAAe,EAAC,MAAMH,IAAI,CAACY,MAAM,CAACN,KAAK,CAAC;EAE3D,oBACE,IAAAX,WAAA,CAAAkB,GAAA,EAAAlB,WAAA,CAAAmB,QAAA;IAAAC,QAAA,EACG,IAAAC,oBAAS,EAAClB,WAAW,CAAC,CAACmB,GAAG,CAAEC,CAAC,IAAK;MACjC;MACA,IAAIA,CAAC,CAACC,IAAI,KAAK,MAAM,IAAID,CAAC,CAACE,EAAE,KAAKnB,aAAa,EAAE;QAC/C,OAAO,IAAI;MACb;MACA,IAAIiB,CAAC,CAACE,EAAE,KAAKrB,UAAU,EAAE;QACvB,oBACE,IAAAJ,WAAA,CAAAkB,GAAA,EAACvB,gBAAA,CAAA+B,KAAK;UAAYT,MAAM,EAAED,UAAW;UAACW,SAAS,EAAEpB,aAAc;UAAAa,QAAA,eAC7D,IAAApB,WAAA,CAAAkB,GAAA,EAACnB,eAAA,CAAA6B,cAAc;YAACL,CAAC,EAAEA;UAAE,CAAE;QAAC,GADdA,CAAC,CAACE,EAEP,CAAC;MAEZ;MACA,oBAAO,IAAAzB,WAAA,CAAAkB,GAAA,EAACnB,eAAA,CAAA6B,cAAc;QAAYL,CAAC,EAAEA;MAAE,GAAXA,CAAC,CAACE,EAAW,CAAC;IAC5C,CAAC;EAAC,CACF,CAAC;AAEP","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BaseImageLayer = BaseImageLayer;
7
+ var _reactNativeSkia = require("@shopify/react-native-skia");
8
+ var _jsxRuntime = require("react/jsx-runtime");
9
+ /**
10
+ * Draws the base image in IMAGE space (x=0,y=0, native width/height). The parent
11
+ * scene `<Group>` maps it onto the screen, so this same layer renders identically
12
+ * off-screen at full resolution during export.
13
+ */
14
+ function BaseImageLayer({
15
+ image,
16
+ size
17
+ }) {
18
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSkia.Image, {
19
+ image: image,
20
+ x: 0,
21
+ y: 0,
22
+ width: size.width,
23
+ height: size.height,
24
+ fit: "fill"
25
+ });
26
+ }
27
+ //# sourceMappingURL=BaseImageLayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNativeSkia","require","_jsxRuntime","BaseImageLayer","image","size","jsx","Image","x","y","width","height","fit"],"sourceRoot":"..\\..\\..\\src","sources":["canvas/BaseImageLayer.tsx"],"mappings":";;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AAAmD,IAAAC,WAAA,GAAAD,OAAA;AAKnD;AACA;AACA;AACA;AACA;AACO,SAASE,cAAcA,CAAC;EAC7BC,KAAK;EACLC;AAIF,CAAC,EAAE;EACD,oBACE,IAAAH,WAAA,CAAAI,GAAA,EAACN,gBAAA,CAAAO,KAAK;IACJH,KAAK,EAAEA,KAAM;IACbI,CAAC,EAAE,CAAE;IACLC,CAAC,EAAE,CAAE;IACLC,KAAK,EAAEL,IAAI,CAACK,KAAM;IAClBC,MAAM,EAAEN,IAAI,CAACM,MAAO;IACpBC,GAAG,EAAC;EAAM,CACX,CAAC;AAEN","ignoreList":[]}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CropOverlay = CropOverlay;
7
+ var _react = require("react");
8
+ var _reactNativeSkia = require("@shopify/react-native-skia");
9
+ var _reactNativeReanimated = require("react-native-reanimated");
10
+ var _constants = require("../constants");
11
+ var _math = require("../utils/math");
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ /**
14
+ * Crop UI drawn in screen space: a dimmed full-screen scrim plus the crop
15
+ * rectangle's border and corner handles, which follow `cropRectSV` on the UI
16
+ * thread (works even when the scene is rotated, since the border is a quad).
17
+ */
18
+ function CropOverlay({
19
+ editor
20
+ }) {
21
+ const {
22
+ tool,
23
+ doc,
24
+ cropRectSV,
25
+ matrixSV,
26
+ imageSize,
27
+ layout
28
+ } = editor;
29
+
30
+ // When entering the crop tool, seed the crop rect from the current scene.
31
+ (0, _react.useEffect)(() => {
32
+ if (tool === 'crop') {
33
+ cropRectSV.value = doc.scene.cropRect ?? {
34
+ x: 0,
35
+ y: 0,
36
+ width: imageSize.width,
37
+ height: imageSize.height
38
+ };
39
+ }
40
+ // eslint-disable-next-line react-hooks/exhaustive-deps
41
+ }, [tool]);
42
+ const cropPath = (0, _reactNativeReanimated.useDerivedValue)(() => {
43
+ const r = cropRectSV.value;
44
+ const m = matrixSV.value;
45
+ const p = _reactNativeSkia.Skia.Path.Make();
46
+ const c0 = (0, _math.applyToPoint)(m, {
47
+ x: r.x,
48
+ y: r.y
49
+ });
50
+ const c1 = (0, _math.applyToPoint)(m, {
51
+ x: r.x + r.width,
52
+ y: r.y
53
+ });
54
+ const c2 = (0, _math.applyToPoint)(m, {
55
+ x: r.x + r.width,
56
+ y: r.y + r.height
57
+ });
58
+ const c3 = (0, _math.applyToPoint)(m, {
59
+ x: r.x,
60
+ y: r.y + r.height
61
+ });
62
+ p.moveTo(c0.x, c0.y);
63
+ p.lineTo(c1.x, c1.y);
64
+ p.lineTo(c2.x, c2.y);
65
+ p.lineTo(c3.x, c3.y);
66
+ p.close();
67
+ return p;
68
+ });
69
+ const corners = (0, _reactNativeReanimated.useDerivedValue)(() => {
70
+ const r = cropRectSV.value;
71
+ const m = matrixSV.value;
72
+ return [(0, _math.applyToPoint)(m, {
73
+ x: r.x,
74
+ y: r.y
75
+ }), (0, _math.applyToPoint)(m, {
76
+ x: r.x + r.width,
77
+ y: r.y
78
+ }), (0, _math.applyToPoint)(m, {
79
+ x: r.x + r.width,
80
+ y: r.y + r.height
81
+ }), (0, _math.applyToPoint)(m, {
82
+ x: r.x,
83
+ y: r.y + r.height
84
+ })];
85
+ });
86
+
87
+ // Per-corner x/y derived values (declared unconditionally — rules of hooks).
88
+ const c0x = (0, _reactNativeReanimated.useDerivedValue)(() => corners.value[0].x);
89
+ const c0y = (0, _reactNativeReanimated.useDerivedValue)(() => corners.value[0].y);
90
+ const c1x = (0, _reactNativeReanimated.useDerivedValue)(() => corners.value[1].x);
91
+ const c1y = (0, _reactNativeReanimated.useDerivedValue)(() => corners.value[1].y);
92
+ const c2x = (0, _reactNativeReanimated.useDerivedValue)(() => corners.value[2].x);
93
+ const c2y = (0, _reactNativeReanimated.useDerivedValue)(() => corners.value[2].y);
94
+ const c3x = (0, _reactNativeReanimated.useDerivedValue)(() => corners.value[3].x);
95
+ const c3y = (0, _reactNativeReanimated.useDerivedValue)(() => corners.value[3].y);
96
+ if (tool !== 'crop') {
97
+ return null;
98
+ }
99
+ const r = _constants.HANDLE_SIZE / 2;
100
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeSkia.Group, {
101
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSkia.Rect, {
102
+ x: 0,
103
+ y: 0,
104
+ width: layout.width,
105
+ height: layout.height,
106
+ color: "rgba(0,0,0,0.45)"
107
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSkia.Path, {
108
+ path: cropPath,
109
+ color: "#FFFFFF",
110
+ style: "stroke",
111
+ strokeWidth: 2
112
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSkia.Circle, {
113
+ cx: c0x,
114
+ cy: c0y,
115
+ r: r,
116
+ color: "#FFFFFF"
117
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSkia.Circle, {
118
+ cx: c1x,
119
+ cy: c1y,
120
+ r: r,
121
+ color: "#FFFFFF"
122
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSkia.Circle, {
123
+ cx: c2x,
124
+ cy: c2y,
125
+ r: r,
126
+ color: "#FFFFFF"
127
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSkia.Circle, {
128
+ cx: c3x,
129
+ cy: c3y,
130
+ r: r,
131
+ color: "#FFFFFF"
132
+ })]
133
+ });
134
+ }
135
+ //# sourceMappingURL=CropOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNativeSkia","_reactNativeReanimated","_constants","_math","_jsxRuntime","CropOverlay","editor","tool","doc","cropRectSV","matrixSV","imageSize","layout","useEffect","value","scene","cropRect","x","y","width","height","cropPath","useDerivedValue","r","m","p","Skia","Path","Make","c0","applyToPoint","c1","c2","c3","moveTo","lineTo","close","corners","c0x","c0y","c1x","c1y","c2x","c2y","c3x","c3y","HANDLE_SIZE","jsxs","Group","children","jsx","Rect","color","path","style","strokeWidth","Circle","cx","cy"],"sourceRoot":"..\\..\\..\\src","sources":["canvas/CropOverlay.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EditorCanvas = EditorCanvas;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _reactNativeSkia = require("@shopify/react-native-skia");
10
+ var _reactNativeGestureHandler = require("react-native-gesture-handler");
11
+ var _EditorContext = require("../context/EditorContext");
12
+ var _math = require("../utils/math");
13
+ var _useEditorGestures = require("../gestures/useEditorGestures");
14
+ var _useCropGesture = require("../gestures/useCropGesture");
15
+ var _BaseImageLayer = require("./BaseImageLayer");
16
+ var _AnnotationLayer = require("./AnnotationLayer");
17
+ var _InFlightLayer = require("./InFlightLayer");
18
+ var _SelectionOverlay = require("./SelectionOverlay");
19
+ var _CropOverlay = require("./CropOverlay");
20
+ var _jsxRuntime = require("react/jsx-runtime");
21
+ /**
22
+ * The Skia canvas host. Layers, under one scene `<Group>` transform:
23
+ * base image → committed annotations → in-flight draft
24
+ * plus screen-space overlays (selection handles, crop UI). A single composed
25
+ * gesture drives all editing.
26
+ *
27
+ * IMPORTANT: React Context does NOT cross the Skia `<Canvas>` boundary — Skia
28
+ * renders Canvas children with its own reconciler, so a Provider mounted outside
29
+ * the Canvas is invisible inside it. Every Canvas child therefore receives the
30
+ * whole editor value via an `editor` PROP instead of calling `useEditor()`.
31
+ * Also, `<Canvas onLayout>` is unsupported on the New Architecture, so we measure
32
+ * on a wrapping `<View>`.
33
+ */
34
+ function EditorCanvas({
35
+ image
36
+ }) {
37
+ const editor = (0, _EditorContext.useEditor)();
38
+ const {
39
+ doc,
40
+ imageSize,
41
+ setLayout,
42
+ layout
43
+ } = editor;
44
+ const pan = (0, _useEditorGestures.useEditorGestures)();
45
+ const cropPan = (0, _useCropGesture.useCropGesture)();
46
+ const gesture = (0, _react.useMemo)(() => _reactNativeGestureHandler.Gesture.Race(cropPan, pan), [cropPan, pan]);
47
+ const transform = (0, _react.useMemo)(() => (0, _math.sceneTransforms2d)(doc.scene, imageSize, layout), [doc.scene, imageSize, layout]);
48
+ const onLayout = e => {
49
+ const {
50
+ width,
51
+ height
52
+ } = e.nativeEvent.layout;
53
+ if (width > 0 && height > 0) {
54
+ setLayout({
55
+ width,
56
+ height
57
+ });
58
+ }
59
+ };
60
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
61
+ style: styles.fill,
62
+ onLayout: onLayout,
63
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector, {
64
+ gesture: gesture,
65
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeSkia.Canvas, {
66
+ style: styles.fill,
67
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeSkia.Group, {
68
+ transform: transform,
69
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_BaseImageLayer.BaseImageLayer, {
70
+ image: image,
71
+ size: imageSize
72
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_AnnotationLayer.AnnotationLayer, {
73
+ editor: editor
74
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_InFlightLayer.InFlightLayer, {
75
+ editor: editor
76
+ })]
77
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_SelectionOverlay.SelectionOverlay, {
78
+ editor: editor
79
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_CropOverlay.CropOverlay, {
80
+ editor: editor
81
+ })]
82
+ })
83
+ })
84
+ });
85
+ }
86
+ const styles = _reactNative.StyleSheet.create({
87
+ fill: {
88
+ flex: 1
89
+ }
90
+ });
91
+ //# sourceMappingURL=EditorCanvas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_reactNativeSkia","_reactNativeGestureHandler","_EditorContext","_math","_useEditorGestures","_useCropGesture","_BaseImageLayer","_AnnotationLayer","_InFlightLayer","_SelectionOverlay","_CropOverlay","_jsxRuntime","EditorCanvas","image","editor","useEditor","doc","imageSize","setLayout","layout","pan","useEditorGestures","cropPan","useCropGesture","gesture","useMemo","Gesture","Race","transform","sceneTransforms2d","scene","onLayout","e","width","height","nativeEvent","jsx","View","style","styles","fill","children","GestureDetector","jsxs","Canvas","Group","BaseImageLayer","size","AnnotationLayer","InFlightLayer","SelectionOverlay","CropOverlay","StyleSheet","create","flex"],"sourceRoot":"..\\..\\..\\src","sources":["canvas/EditorCanvas.tsx"],"mappings":"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","ignoreList":[]}