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,79 @@
1
+ "use strict";
2
+
3
+ import { useReducer } from 'react';
4
+ import { IDENTITY_SCENE } from '../types';
5
+ import { commit, initHistory, redo as redoHistory, replacePresent, undo as undoHistory } from './history';
6
+ const EMPTY_DOCUMENT = {
7
+ annotations: [],
8
+ scene: IDENTITY_SCENE
9
+ };
10
+ function nextZ(annotations) {
11
+ return annotations.reduce((max, a) => Math.max(max, a.z), 0) + 1;
12
+ }
13
+ function reducer(state, action) {
14
+ const doc = state.present;
15
+ switch (action.type) {
16
+ case 'ADD_ANNOTATION':
17
+ {
18
+ const annotation = {
19
+ ...action.annotation,
20
+ z: nextZ(doc.annotations)
21
+ };
22
+ return commit(state, {
23
+ ...doc,
24
+ annotations: [...doc.annotations, annotation]
25
+ });
26
+ }
27
+ case 'UPDATE_ANNOTATION':
28
+ {
29
+ const annotations = doc.annotations.map(a => a.id === action.id ? {
30
+ ...a,
31
+ ...action.changes
32
+ } : a);
33
+ const next = {
34
+ ...doc,
35
+ annotations
36
+ };
37
+ return action.transient ? replacePresent(state, next) : commit(state, next);
38
+ }
39
+ case 'DELETE_ANNOTATION':
40
+ {
41
+ return commit(state, {
42
+ ...doc,
43
+ annotations: doc.annotations.filter(a => a.id !== action.id)
44
+ });
45
+ }
46
+ case 'SET_SCENE':
47
+ {
48
+ const next = {
49
+ ...doc,
50
+ scene: {
51
+ ...doc.scene,
52
+ ...action.changes
53
+ }
54
+ };
55
+ return action.transient ? replacePresent(state, next) : commit(state, next);
56
+ }
57
+ case 'REPLACE':
58
+ {
59
+ return commit(state, action.document);
60
+ }
61
+ case 'RESET':
62
+ {
63
+ return commit(state, EMPTY_DOCUMENT);
64
+ }
65
+ case 'UNDO':
66
+ return undoHistory(state);
67
+ case 'REDO':
68
+ return redoHistory(state);
69
+ default:
70
+ return state;
71
+ }
72
+ }
73
+ export function useEditorReducer(initial) {
74
+ return useReducer(reducer, initHistory({
75
+ ...EMPTY_DOCUMENT,
76
+ ...initial
77
+ }));
78
+ }
79
+ //# sourceMappingURL=useEditorReducer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useReducer","IDENTITY_SCENE","commit","initHistory","redo","redoHistory","replacePresent","undo","undoHistory","EMPTY_DOCUMENT","annotations","scene","nextZ","reduce","max","a","Math","z","reducer","state","action","doc","present","type","annotation","map","id","changes","next","transient","filter","document","useEditorReducer","initial"],"sourceRoot":"..\\..\\..\\src","sources":["state/useEditorReducer.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ import { Pressable, ScrollView, StyleSheet, View } from 'react-native';
4
+ import { useEditor } from '../context/EditorContext';
5
+ import { getAnnotationById } from '../state/selectors';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ /**
8
+ * Horizontal swatch strip. Picking a color sets the "current" color used for new
9
+ * shapes and, if an annotation is selected, recolors it (the right field per
10
+ * type). While editing text, it also updates the live text color.
11
+ */
12
+ export function ColorPicker() {
13
+ const {
14
+ palette,
15
+ strokeColor,
16
+ setStrokeColor,
17
+ setTextColor,
18
+ selectedId,
19
+ editingTextId,
20
+ annotations,
21
+ dispatch
22
+ } = useEditor();
23
+ const onPick = color => {
24
+ setStrokeColor(color);
25
+ setTextColor(color);
26
+ const target = getAnnotationById(annotations, editingTextId ?? selectedId);
27
+ if (target) {
28
+ if (target.type === 'text' || target.type === 'marker') {
29
+ dispatch({
30
+ type: 'UPDATE_ANNOTATION',
31
+ id: target.id,
32
+ changes: {
33
+ color
34
+ }
35
+ });
36
+ } else {
37
+ dispatch({
38
+ type: 'UPDATE_ANNOTATION',
39
+ id: target.id,
40
+ changes: {
41
+ strokeColor: color
42
+ }
43
+ });
44
+ }
45
+ }
46
+ };
47
+ return /*#__PURE__*/_jsx(ScrollView, {
48
+ horizontal: true,
49
+ showsHorizontalScrollIndicator: false,
50
+ contentContainerStyle: styles.row,
51
+ children: palette.map(color => /*#__PURE__*/_jsx(Pressable, {
52
+ onPress: () => onPick(color),
53
+ hitSlop: 4,
54
+ children: /*#__PURE__*/_jsx(View, {
55
+ style: [styles.swatch, {
56
+ backgroundColor: color
57
+ }, color === strokeColor && styles.selected]
58
+ })
59
+ }, color))
60
+ });
61
+ }
62
+ const styles = StyleSheet.create({
63
+ row: {
64
+ alignItems: 'center',
65
+ paddingHorizontal: 8,
66
+ gap: 8
67
+ },
68
+ swatch: {
69
+ width: 28,
70
+ height: 28,
71
+ borderRadius: 14,
72
+ borderWidth: 2,
73
+ borderColor: 'rgba(255,255,255,0.5)'
74
+ },
75
+ selected: {
76
+ borderColor: '#FFFFFF',
77
+ borderWidth: 3
78
+ }
79
+ });
80
+ //# sourceMappingURL=ColorPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Pressable","ScrollView","StyleSheet","View","useEditor","getAnnotationById","jsx","_jsx","ColorPicker","palette","strokeColor","setStrokeColor","setTextColor","selectedId","editingTextId","annotations","dispatch","onPick","color","target","type","id","changes","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","styles","row","children","map","onPress","hitSlop","style","swatch","backgroundColor","selected","create","alignItems","paddingHorizontal","gap","width","height","borderRadius","borderWidth","borderColor"],"sourceRoot":"..\\..\\..\\src","sources":["toolbar/ColorPicker.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,UAAU,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAEtE,SAASC,SAAS,QAAQ,0BAA0B;AACpD,SAASC,iBAAiB,QAAQ,oBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGvD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAAA,EAAG;EAC5B,MAAM;IACJC,OAAO;IACPC,WAAW;IACXC,cAAc;IACdC,YAAY;IACZC,UAAU;IACVC,aAAa;IACbC,WAAW;IACXC;EACF,CAAC,GAAGZ,SAAS,CAAC,CAAC;EAEf,MAAMa,MAAM,GAAIC,KAAkB,IAAK;IACrCP,cAAc,CAACO,KAAK,CAAC;IACrBN,YAAY,CAACM,KAAK,CAAC;IACnB,MAAMC,MAAM,GAAGd,iBAAiB,CAACU,WAAW,EAAED,aAAa,IAAID,UAAU,CAAC;IAC1E,IAAIM,MAAM,EAAE;MACV,IAAIA,MAAM,CAACC,IAAI,KAAK,MAAM,IAAID,MAAM,CAACC,IAAI,KAAK,QAAQ,EAAE;QACtDJ,QAAQ,CAAC;UAAEI,IAAI,EAAE,mBAAmB;UAAEC,EAAE,EAAEF,MAAM,CAACE,EAAE;UAAEC,OAAO,EAAE;YAAEJ;UAAM;QAAE,CAAC,CAAC;MAC5E,CAAC,MAAM;QACLF,QAAQ,CAAC;UACPI,IAAI,EAAE,mBAAmB;UACzBC,EAAE,EAAEF,MAAM,CAACE,EAAE;UACbC,OAAO,EAAE;YAAEZ,WAAW,EAAEQ;UAAM;QAChC,CAAC,CAAC;MACJ;IACF;EACF,CAAC;EAED,oBACEX,IAAA,CAACN,UAAU;IACTsB,UAAU;IACVC,8BAA8B,EAAE,KAAM;IACtCC,qBAAqB,EAAEC,MAAM,CAACC,GAAI;IAAAC,QAAA,EAEjCnB,OAAO,CAACoB,GAAG,CAAEX,KAAK,iBACjBX,IAAA,CAACP,SAAS;MAAa8B,OAAO,EAAEA,CAAA,KAAMb,MAAM,CAACC,KAAK,CAAE;MAACa,OAAO,EAAE,CAAE;MAAAH,QAAA,eAC9DrB,IAAA,CAACJ,IAAI;QACH6B,KAAK,EAAE,CACLN,MAAM,CAACO,MAAM,EACb;UAAEC,eAAe,EAAEhB;QAAM,CAAC,EAC1BA,KAAK,KAAKR,WAAW,IAAIgB,MAAM,CAACS,QAAQ;MACxC,CACH;IAAC,GAPYjB,KAQL,CACZ;EAAC,CACQ,CAAC;AAEjB;AAEA,MAAMQ,MAAM,GAAGxB,UAAU,CAACkC,MAAM,CAAC;EAC/BT,GAAG,EAAE;IAAEU,UAAU,EAAE,QAAQ;IAAEC,iBAAiB,EAAE,CAAC;IAAEC,GAAG,EAAE;EAAE,CAAC;EAC3DN,MAAM,EAAE;IACNO,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE,EAAE;IACVC,YAAY,EAAE,EAAE;IAChBC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE;EACf,CAAC;EACDT,QAAQ,EAAE;IAAES,WAAW,EAAE,SAAS;IAAED,WAAW,EAAE;EAAE;AACrD,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ import { StyleSheet, View } from 'react-native';
4
+ import { useEditor } from '../context/EditorContext';
5
+ import { ToolButton } from './ToolButton';
6
+
7
+ /** Apply / reset / cancel controls shown while the crop tool is active. */
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ export function CropControls() {
10
+ const {
11
+ cropRectSV,
12
+ dispatch,
13
+ setTool,
14
+ imageSize
15
+ } = useEditor();
16
+ const apply = () => {
17
+ const r = cropRectSV.value;
18
+ // Ignore a degenerate crop.
19
+ const isFull = r.x <= 0 && r.y <= 0 && r.width >= imageSize.width && r.height >= imageSize.height;
20
+ dispatch({
21
+ type: 'SET_SCENE',
22
+ changes: {
23
+ cropRect: isFull ? null : {
24
+ ...r
25
+ }
26
+ }
27
+ });
28
+ setTool('select');
29
+ };
30
+ const reset = () => {
31
+ dispatch({
32
+ type: 'SET_SCENE',
33
+ changes: {
34
+ cropRect: null
35
+ }
36
+ });
37
+ setTool('select');
38
+ };
39
+ return /*#__PURE__*/_jsxs(View, {
40
+ style: styles.row,
41
+ children: [/*#__PURE__*/_jsx(ToolButton, {
42
+ label: "\u2715 Cancel",
43
+ onPress: () => setTool('select')
44
+ }), /*#__PURE__*/_jsx(ToolButton, {
45
+ label: "\u21BA Reset",
46
+ onPress: reset
47
+ }), /*#__PURE__*/_jsx(ToolButton, {
48
+ label: "\u2713 Apply",
49
+ active: true,
50
+ onPress: apply
51
+ })]
52
+ });
53
+ }
54
+ const styles = StyleSheet.create({
55
+ row: {
56
+ flexDirection: 'row',
57
+ justifyContent: 'center',
58
+ alignItems: 'center',
59
+ paddingVertical: 6
60
+ }
61
+ });
62
+ //# sourceMappingURL=CropControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","View","useEditor","ToolButton","jsx","_jsx","jsxs","_jsxs","CropControls","cropRectSV","dispatch","setTool","imageSize","apply","r","value","isFull","x","y","width","height","type","changes","cropRect","reset","style","styles","row","children","label","onPress","active","create","flexDirection","justifyContent","alignItems","paddingVertical"],"sourceRoot":"..\\..\\..\\src","sources":["toolbar/CropControls.tsx"],"mappings":";;AAAA,SAASA,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAE/C,SAASC,SAAS,QAAQ,0BAA0B;AACpD,SAASC,UAAU,QAAQ,cAAc;;AAEzC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AACA,OAAO,SAASC,YAAYA,CAAA,EAAG;EAC7B,MAAM;IAAEC,UAAU;IAAEC,QAAQ;IAAEC,OAAO;IAAEC;EAAU,CAAC,GAAGV,SAAS,CAAC,CAAC;EAEhE,MAAMW,KAAK,GAAGA,CAAA,KAAM;IAClB,MAAMC,CAAC,GAAGL,UAAU,CAACM,KAAK;IAC1B;IACA,MAAMC,MAAM,GACVF,CAAC,CAACG,CAAC,IAAI,CAAC,IACRH,CAAC,CAACI,CAAC,IAAI,CAAC,IACRJ,CAAC,CAACK,KAAK,IAAIP,SAAS,CAACO,KAAK,IAC1BL,CAAC,CAACM,MAAM,IAAIR,SAAS,CAACQ,MAAM;IAC9BV,QAAQ,CAAC;MACPW,IAAI,EAAE,WAAW;MACjBC,OAAO,EAAE;QAAEC,QAAQ,EAAEP,MAAM,GAAG,IAAI,GAAG;UAAE,GAAGF;QAAE;MAAE;IAChD,CAAC,CAAC;IACFH,OAAO,CAAC,QAAQ,CAAC;EACnB,CAAC;EAED,MAAMa,KAAK,GAAGA,CAAA,KAAM;IAClBd,QAAQ,CAAC;MAAEW,IAAI,EAAE,WAAW;MAAEC,OAAO,EAAE;QAAEC,QAAQ,EAAE;MAAK;IAAE,CAAC,CAAC;IAC5DZ,OAAO,CAAC,QAAQ,CAAC;EACnB,CAAC;EAED,oBACEJ,KAAA,CAACN,IAAI;IAACwB,KAAK,EAAEC,MAAM,CAACC,GAAI;IAAAC,QAAA,gBACtBvB,IAAA,CAACF,UAAU;MAAC0B,KAAK,EAAC,eAAU;MAACC,OAAO,EAAEA,CAAA,KAAMnB,OAAO,CAAC,QAAQ;IAAE,CAAE,CAAC,eACjEN,IAAA,CAACF,UAAU;MAAC0B,KAAK,EAAC,cAAS;MAACC,OAAO,EAAEN;IAAM,CAAE,CAAC,eAC9CnB,IAAA,CAACF,UAAU;MAAC0B,KAAK,EAAC,cAAS;MAACE,MAAM;MAACD,OAAO,EAAEjB;IAAM,CAAE,CAAC;EAAA,CACjD,CAAC;AAEX;AAEA,MAAMa,MAAM,GAAG1B,UAAU,CAACgC,MAAM,CAAC;EAC/BL,GAAG,EAAE;IACHM,aAAa,EAAE,KAAK;IACpBC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBC,eAAe,EAAE;EACnB;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ import { StyleSheet, Text, View } from 'react-native';
4
+ import { Gesture, GestureDetector } from 'react-native-gesture-handler';
5
+ import { runOnJS, useSharedValue } from 'react-native-reanimated';
6
+ import { useEditor } from '../context/EditorContext';
7
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
8
+ const SENSITIVITY = 0.006; // radians per pixel dragged
9
+
10
+ /**
11
+ * Drag left/right anywhere on the bar to rotate the whole image to ANY angle.
12
+ * Updates are transient during the drag (no history spam) and committed on
13
+ * release. Double-nothing here is fine — the scene re-renders, but rotation is
14
+ * an occasional interaction.
15
+ */
16
+ export function RotationSlider() {
17
+ const {
18
+ doc,
19
+ dispatch
20
+ } = useEditor();
21
+ const startRotation = useSharedValue(0);
22
+ const rotationDeg = Math.round(doc.scene.rotation * 180 / Math.PI);
23
+ const setScene = (rotation, transient) => dispatch({
24
+ type: 'SET_SCENE',
25
+ changes: {
26
+ rotation
27
+ },
28
+ transient
29
+ });
30
+ const pan = Gesture.Pan().onBegin(() => {
31
+ 'worklet';
32
+
33
+ startRotation.value = doc.scene.rotation;
34
+ }).onChange(e => {
35
+ 'worklet';
36
+
37
+ runOnJS(setScene)(startRotation.value + e.translationX * SENSITIVITY, true);
38
+ }).onEnd(e => {
39
+ 'worklet';
40
+
41
+ runOnJS(setScene)(startRotation.value + e.translationX * SENSITIVITY, false);
42
+ });
43
+ return /*#__PURE__*/_jsx(GestureDetector, {
44
+ gesture: pan,
45
+ children: /*#__PURE__*/_jsx(View, {
46
+ style: styles.bar,
47
+ children: /*#__PURE__*/_jsxs(Text, {
48
+ style: styles.label,
49
+ children: ["\u27F2 Rotate ", rotationDeg, "\xB0 \u27F3"]
50
+ })
51
+ })
52
+ });
53
+ }
54
+ const styles = StyleSheet.create({
55
+ bar: {
56
+ height: 36,
57
+ borderRadius: 8,
58
+ backgroundColor: 'rgba(255,255,255,0.12)',
59
+ alignItems: 'center',
60
+ justifyContent: 'center',
61
+ marginHorizontal: 8
62
+ },
63
+ label: {
64
+ color: '#FFFFFF',
65
+ fontSize: 14,
66
+ fontWeight: '600'
67
+ }
68
+ });
69
+ //# sourceMappingURL=RotationSlider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","Text","View","Gesture","GestureDetector","runOnJS","useSharedValue","useEditor","jsxs","_jsxs","jsx","_jsx","SENSITIVITY","RotationSlider","doc","dispatch","startRotation","rotationDeg","Math","round","scene","rotation","PI","setScene","transient","type","changes","pan","Pan","onBegin","value","onChange","e","translationX","onEnd","gesture","children","style","styles","bar","label","create","height","borderRadius","backgroundColor","alignItems","justifyContent","marginHorizontal","color","fontSize","fontWeight"],"sourceRoot":"..\\..\\..\\src","sources":["toolbar/RotationSlider.tsx"],"mappings":";;AAAA,SAASA,UAAU,EAAEC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACrD,SAASC,OAAO,EAAEC,eAAe,QAAQ,8BAA8B;AACvE,SAASC,OAAO,EAAEC,cAAc,QAAQ,yBAAyB;AAEjE,SAASC,SAAS,QAAQ,0BAA0B;AAAC,SAAAC,IAAA,IAAAC,KAAA,EAAAC,GAAA,IAAAC,IAAA;AAErD,MAAMC,WAAW,GAAG,KAAK,CAAC,CAAC;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAA,EAAG;EAC/B,MAAM;IAAEC,GAAG;IAAEC;EAAS,CAAC,GAAGR,SAAS,CAAC,CAAC;EACrC,MAAMS,aAAa,GAAGV,cAAc,CAAC,CAAC,CAAC;EACvC,MAAMW,WAAW,GAAGC,IAAI,CAACC,KAAK,CAAEL,GAAG,CAACM,KAAK,CAACC,QAAQ,GAAG,GAAG,GAAIH,IAAI,CAACI,EAAE,CAAC;EAEpE,MAAMC,QAAQ,GAAGA,CAACF,QAAgB,EAAEG,SAAkB,KACpDT,QAAQ,CAAC;IAAEU,IAAI,EAAE,WAAW;IAAEC,OAAO,EAAE;MAAEL;IAAS,CAAC;IAAEG;EAAU,CAAC,CAAC;EAEnE,MAAMG,GAAG,GAAGxB,OAAO,CAACyB,GAAG,CAAC,CAAC,CACtBC,OAAO,CAAC,MAAM;IACb,SAAS;;IACTb,aAAa,CAACc,KAAK,GAAGhB,GAAG,CAACM,KAAK,CAACC,QAAQ;EAC1C,CAAC,CAAC,CACDU,QAAQ,CAAEC,CAAC,IAAK;IACf,SAAS;;IACT3B,OAAO,CAACkB,QAAQ,CAAC,CAACP,aAAa,CAACc,KAAK,GAAGE,CAAC,CAACC,YAAY,GAAGrB,WAAW,EAAE,IAAI,CAAC;EAC7E,CAAC,CAAC,CACDsB,KAAK,CAAEF,CAAC,IAAK;IACZ,SAAS;;IACT3B,OAAO,CAACkB,QAAQ,CAAC,CAACP,aAAa,CAACc,KAAK,GAAGE,CAAC,CAACC,YAAY,GAAGrB,WAAW,EAAE,KAAK,CAAC;EAC9E,CAAC,CAAC;EAEJ,oBACED,IAAA,CAACP,eAAe;IAAC+B,OAAO,EAAER,GAAI;IAAAS,QAAA,eAC5BzB,IAAA,CAACT,IAAI;MAACmC,KAAK,EAAEC,MAAM,CAACC,GAAI;MAAAH,QAAA,eACtB3B,KAAA,CAACR,IAAI;QAACoC,KAAK,EAAEC,MAAM,CAACE,KAAM;QAAAJ,QAAA,GAAC,iBAAU,EAACnB,WAAW,EAAC,cAAI;MAAA,CAAM;IAAC,CACzD;EAAC,CACQ,CAAC;AAEtB;AAEA,MAAMqB,MAAM,GAAGtC,UAAU,CAACyC,MAAM,CAAC;EAC/BF,GAAG,EAAE;IACHG,MAAM,EAAE,EAAE;IACVC,YAAY,EAAE,CAAC;IACfC,eAAe,EAAE,wBAAwB;IACzCC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBC,gBAAgB,EAAE;EACpB,CAAC;EACDP,KAAK,EAAE;IAAEQ,KAAK,EAAE,SAAS;IAAEC,QAAQ,EAAE,EAAE;IAAEC,UAAU,EAAE;EAAM;AAC7D,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useRef, useState } from 'react';
4
+ import { StyleSheet, TextInput } from 'react-native';
5
+ import { useEditor } from '../context/EditorContext';
6
+ import { getAnnotationById } from '../state/selectors';
7
+ import { applyToPoint } from '../utils/math';
8
+
9
+ /**
10
+ * Native TextInput overlaid on the text annotation being edited. Skia can't
11
+ * accept keyboard input, so we edit here and mirror the string back into the
12
+ * annotation (transient updates while typing; a committed update on blur). The
13
+ * Skia text for this annotation is hidden while editing (see AnnotationLayer).
14
+ * Positioning ignores rotation for simplicity.
15
+ */
16
+ import { jsx as _jsx } from "react/jsx-runtime";
17
+ export function TextInputOverlay() {
18
+ const {
19
+ editingTextId,
20
+ setEditingTextId,
21
+ annotations,
22
+ dispatch,
23
+ matrix,
24
+ setSelectedId
25
+ } = useEditor();
26
+ const target = getAnnotationById(annotations, editingTextId);
27
+ const isText = target?.type === 'text' ? target : null;
28
+ const inputRef = useRef(null);
29
+ const [value, setValue] = useState('');
30
+ useEffect(() => {
31
+ if (isText) {
32
+ setValue(isText.text);
33
+ const t = setTimeout(() => inputRef.current?.focus(), 50);
34
+ return () => clearTimeout(t);
35
+ }
36
+ return undefined;
37
+ // eslint-disable-next-line react-hooks/exhaustive-deps
38
+ }, [editingTextId]);
39
+ if (!isText) {
40
+ return null;
41
+ }
42
+ const scaleFactor = Math.hypot(matrix.a, matrix.b) || 1;
43
+ const screen = applyToPoint(matrix, isText.origin);
44
+ const fontSize = isText.fontSize * scaleFactor;
45
+ const width = isText.width * scaleFactor;
46
+ const onChange = text => {
47
+ setValue(text);
48
+ dispatch({
49
+ type: 'UPDATE_ANNOTATION',
50
+ id: isText.id,
51
+ changes: {
52
+ text
53
+ },
54
+ transient: true
55
+ });
56
+ };
57
+ const onDone = () => {
58
+ const trimmed = value.trim();
59
+ if (trimmed.length === 0) {
60
+ dispatch({
61
+ type: 'DELETE_ANNOTATION',
62
+ id: isText.id
63
+ });
64
+ setSelectedId(null);
65
+ } else {
66
+ // Promote the accumulated transient edits into a single history entry.
67
+ dispatch({
68
+ type: 'UPDATE_ANNOTATION',
69
+ id: isText.id,
70
+ changes: {
71
+ text: value
72
+ }
73
+ });
74
+ }
75
+ setEditingTextId(null);
76
+ };
77
+ return /*#__PURE__*/_jsx(TextInput, {
78
+ ref: inputRef,
79
+ value: value,
80
+ onChangeText: onChange,
81
+ onBlur: onDone,
82
+ onSubmitEditing: onDone,
83
+ multiline: true,
84
+ blurOnSubmit: true,
85
+ style: [styles.input, {
86
+ left: screen.x,
87
+ top: screen.y,
88
+ width: Math.max(width, 80),
89
+ fontSize,
90
+ color: isText.color,
91
+ lineHeight: fontSize * 1.2
92
+ }],
93
+ placeholder: "Text",
94
+ placeholderTextColor: "rgba(255,255,255,0.5)"
95
+ });
96
+ }
97
+ const styles = StyleSheet.create({
98
+ input: {
99
+ position: 'absolute',
100
+ padding: 0,
101
+ margin: 0,
102
+ textAlignVertical: 'top'
103
+ }
104
+ });
105
+ //# sourceMappingURL=TextInputOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useRef","useState","StyleSheet","TextInput","useEditor","getAnnotationById","applyToPoint","jsx","_jsx","TextInputOverlay","editingTextId","setEditingTextId","annotations","dispatch","matrix","setSelectedId","target","isText","type","inputRef","value","setValue","text","t","setTimeout","current","focus","clearTimeout","undefined","scaleFactor","Math","hypot","a","b","screen","origin","fontSize","width","onChange","id","changes","transient","onDone","trimmed","trim","length","ref","onChangeText","onBlur","onSubmitEditing","multiline","blurOnSubmit","style","styles","input","left","x","top","y","max","color","lineHeight","placeholder","placeholderTextColor","create","position","padding","margin","textAlignVertical"],"sourceRoot":"..\\..\\..\\src","sources":["toolbar/TextInputOverlay.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ import { Pressable, StyleSheet, Text } from 'react-native';
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ export function ToolButton({
6
+ label,
7
+ active,
8
+ disabled,
9
+ onPress
10
+ }) {
11
+ return /*#__PURE__*/_jsx(Pressable, {
12
+ onPress: onPress,
13
+ disabled: disabled,
14
+ style: ({
15
+ pressed
16
+ }) => [styles.button, active && styles.active, disabled && styles.disabled, pressed && styles.pressed],
17
+ hitSlop: 6,
18
+ children: /*#__PURE__*/_jsx(Text, {
19
+ style: [styles.label, active && styles.activeLabel],
20
+ children: label
21
+ })
22
+ });
23
+ }
24
+ const styles = StyleSheet.create({
25
+ button: {
26
+ minWidth: 44,
27
+ height: 44,
28
+ paddingHorizontal: 8,
29
+ alignItems: 'center',
30
+ justifyContent: 'center',
31
+ borderRadius: 10,
32
+ marginHorizontal: 2
33
+ },
34
+ active: {
35
+ backgroundColor: '#1E90FF'
36
+ },
37
+ disabled: {
38
+ opacity: 0.35
39
+ },
40
+ pressed: {
41
+ opacity: 0.6
42
+ },
43
+ label: {
44
+ color: '#FFFFFF',
45
+ fontSize: 18
46
+ },
47
+ activeLabel: {
48
+ color: '#FFFFFF',
49
+ fontWeight: '700'
50
+ }
51
+ });
52
+ //# sourceMappingURL=ToolButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Pressable","StyleSheet","Text","jsx","_jsx","ToolButton","label","active","disabled","onPress","style","pressed","styles","button","hitSlop","children","activeLabel","create","minWidth","height","paddingHorizontal","alignItems","justifyContent","borderRadius","marginHorizontal","backgroundColor","opacity","color","fontSize","fontWeight"],"sourceRoot":"..\\..\\..\\src","sources":["toolbar/ToolButton.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE3D,OAAO,SAASC,UAAUA,CAAC;EACzBC,KAAK;EACLC,MAAM;EACNC,QAAQ;EACRC;AAMF,CAAC,EAAE;EACD,oBACEL,IAAA,CAACJ,SAAS;IACRS,OAAO,EAAEA,OAAQ;IACjBD,QAAQ,EAAEA,QAAS;IACnBE,KAAK,EAAEA,CAAC;MAAEC;IAAQ,CAAC,KAAK,CACtBC,MAAM,CAACC,MAAM,EACbN,MAAM,IAAIK,MAAM,CAACL,MAAM,EACvBC,QAAQ,IAAII,MAAM,CAACJ,QAAQ,EAC3BG,OAAO,IAAIC,MAAM,CAACD,OAAO,CACzB;IACFG,OAAO,EAAE,CAAE;IAAAC,QAAA,eAEXX,IAAA,CAACF,IAAI;MAACQ,KAAK,EAAE,CAACE,MAAM,CAACN,KAAK,EAAEC,MAAM,IAAIK,MAAM,CAACI,WAAW,CAAE;MAAAD,QAAA,EAAET;IAAK,CAAO;EAAC,CAChE,CAAC;AAEhB;AAEA,MAAMM,MAAM,GAAGX,UAAU,CAACgB,MAAM,CAAC;EAC/BJ,MAAM,EAAE;IACNK,QAAQ,EAAE,EAAE;IACZC,MAAM,EAAE,EAAE;IACVC,iBAAiB,EAAE,CAAC;IACpBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBC,YAAY,EAAE,EAAE;IAChBC,gBAAgB,EAAE;EACpB,CAAC;EACDjB,MAAM,EAAE;IAAEkB,eAAe,EAAE;EAAU,CAAC;EACtCjB,QAAQ,EAAE;IAAEkB,OAAO,EAAE;EAAK,CAAC;EAC3Bf,OAAO,EAAE;IAAEe,OAAO,EAAE;EAAI,CAAC;EACzBpB,KAAK,EAAE;IAAEqB,KAAK,EAAE,SAAS;IAAEC,QAAQ,EAAE;EAAG,CAAC;EACzCZ,WAAW,EAAE;IAAEW,KAAK,EAAE,SAAS;IAAEE,UAAU,EAAE;EAAM;AACrD,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+
3
+ import { StyleSheet, View } from 'react-native';
4
+ import { useEditor } from '../context/EditorContext';
5
+ import { ToolButton } from './ToolButton';
6
+ import { ColorPicker } from './ColorPicker';
7
+ import { CropControls } from './CropControls';
8
+ import { RotationSlider } from './RotationSlider';
9
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
10
+ const TOOLS = [{
11
+ tool: 'select',
12
+ label: '⇱'
13
+ }, {
14
+ tool: 'circle',
15
+ label: '◯'
16
+ }, {
17
+ tool: 'arrow',
18
+ label: '↗'
19
+ }, {
20
+ tool: 'marker',
21
+ label: '▬'
22
+ }, {
23
+ tool: 'freehand',
24
+ label: '✎'
25
+ }, {
26
+ tool: 'text',
27
+ label: 'T'
28
+ }, {
29
+ tool: 'crop',
30
+ label: '⛶'
31
+ }];
32
+ export function Toolbar({
33
+ onDone
34
+ }) {
35
+ const {
36
+ tool,
37
+ setTool,
38
+ selectedId,
39
+ setSelectedId,
40
+ canUndo,
41
+ canRedo,
42
+ dispatch,
43
+ doc
44
+ } = useEditor();
45
+ const cropping = tool === 'crop';
46
+ const deleteSelected = () => {
47
+ if (selectedId) {
48
+ dispatch({
49
+ type: 'DELETE_ANNOTATION',
50
+ id: selectedId
51
+ });
52
+ setSelectedId(null);
53
+ }
54
+ };
55
+ const bumpScale = delta => {
56
+ const next = Math.max(0.1, Math.min(4, doc.scene.scale + delta));
57
+ dispatch({
58
+ type: 'SET_SCENE',
59
+ changes: {
60
+ scale: next
61
+ }
62
+ });
63
+ };
64
+ return /*#__PURE__*/_jsx(View, {
65
+ style: styles.container,
66
+ children: cropping ? /*#__PURE__*/_jsxs(_Fragment, {
67
+ children: [/*#__PURE__*/_jsx(RotationSlider, {}), /*#__PURE__*/_jsx(CropControls, {})]
68
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
69
+ children: [/*#__PURE__*/_jsxs(View, {
70
+ style: styles.topRow,
71
+ children: [/*#__PURE__*/_jsx(ToolButton, {
72
+ label: "\u21B6",
73
+ disabled: !canUndo,
74
+ onPress: () => dispatch({
75
+ type: 'UNDO'
76
+ })
77
+ }), /*#__PURE__*/_jsx(ToolButton, {
78
+ label: "\u21B7",
79
+ disabled: !canRedo,
80
+ onPress: () => dispatch({
81
+ type: 'REDO'
82
+ })
83
+ }), /*#__PURE__*/_jsx(ToolButton, {
84
+ label: "\u2212",
85
+ onPress: () => bumpScale(-0.1)
86
+ }), /*#__PURE__*/_jsx(ToolButton, {
87
+ label: "+",
88
+ onPress: () => bumpScale(0.1)
89
+ }), /*#__PURE__*/_jsx(ToolButton, {
90
+ label: "\uD83D\uDDD1",
91
+ disabled: !selectedId,
92
+ onPress: deleteSelected
93
+ }), onDone ? /*#__PURE__*/_jsx(ToolButton, {
94
+ label: "Done",
95
+ active: true,
96
+ onPress: onDone
97
+ }) : null]
98
+ }), /*#__PURE__*/_jsx(RotationSlider, {}), /*#__PURE__*/_jsx(ColorPicker, {}), /*#__PURE__*/_jsx(View, {
99
+ style: styles.toolRow,
100
+ children: TOOLS.map(t => /*#__PURE__*/_jsx(ToolButton, {
101
+ label: t.label,
102
+ active: tool === t.tool,
103
+ onPress: () => {
104
+ setTool(t.tool);
105
+ if (t.tool !== 'select') {
106
+ setSelectedId(null);
107
+ }
108
+ }
109
+ }, t.tool))
110
+ })]
111
+ })
112
+ });
113
+ }
114
+ const styles = StyleSheet.create({
115
+ container: {
116
+ backgroundColor: '#1C1C1E',
117
+ paddingVertical: 8,
118
+ gap: 8
119
+ },
120
+ topRow: {
121
+ flexDirection: 'row',
122
+ justifyContent: 'center',
123
+ alignItems: 'center',
124
+ flexWrap: 'wrap'
125
+ },
126
+ toolRow: {
127
+ flexDirection: 'row',
128
+ justifyContent: 'center',
129
+ alignItems: 'center',
130
+ flexWrap: 'wrap'
131
+ }
132
+ });
133
+ //# sourceMappingURL=Toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","View","useEditor","ToolButton","ColorPicker","CropControls","RotationSlider","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","TOOLS","tool","label","Toolbar","onDone","setTool","selectedId","setSelectedId","canUndo","canRedo","dispatch","doc","cropping","deleteSelected","type","id","bumpScale","delta","next","Math","max","min","scene","scale","changes","style","styles","container","children","topRow","disabled","onPress","active","toolRow","map","t","create","backgroundColor","paddingVertical","gap","flexDirection","justifyContent","alignItems","flexWrap"],"sourceRoot":"..\\..\\..\\src","sources":["toolbar/Toolbar.tsx"],"mappings":"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","ignoreList":[]}