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.
- package/LICENSE +21 -0
- package/README.md +202 -0
- package/lib/commonjs/ImageEditor.js +141 -0
- package/lib/commonjs/ImageEditor.js.map +1 -0
- package/lib/commonjs/annotations/AnnotationView.js +42 -0
- package/lib/commonjs/annotations/AnnotationView.js.map +1 -0
- package/lib/commonjs/annotations/ArrowAnnotation.js +29 -0
- package/lib/commonjs/annotations/ArrowAnnotation.js.map +1 -0
- package/lib/commonjs/annotations/CircleAnnotation.js +31 -0
- package/lib/commonjs/annotations/CircleAnnotation.js.map +1 -0
- package/lib/commonjs/annotations/FreehandAnnotation.js +29 -0
- package/lib/commonjs/annotations/FreehandAnnotation.js.map +1 -0
- package/lib/commonjs/annotations/MarkerAnnotation.js +27 -0
- package/lib/commonjs/annotations/MarkerAnnotation.js.map +1 -0
- package/lib/commonjs/annotations/RotatedGroup.js +34 -0
- package/lib/commonjs/annotations/RotatedGroup.js.map +1 -0
- package/lib/commonjs/annotations/TextAnnotation.js +40 -0
- package/lib/commonjs/annotations/TextAnnotation.js.map +1 -0
- package/lib/commonjs/annotations/geometry.js +73 -0
- package/lib/commonjs/annotations/geometry.js.map +1 -0
- package/lib/commonjs/annotations/geometryPure.js +104 -0
- package/lib/commonjs/annotations/geometryPure.js.map +1 -0
- package/lib/commonjs/canvas/AnnotationLayer.js +58 -0
- package/lib/commonjs/canvas/AnnotationLayer.js.map +1 -0
- package/lib/commonjs/canvas/BaseImageLayer.js +27 -0
- package/lib/commonjs/canvas/BaseImageLayer.js.map +1 -0
- package/lib/commonjs/canvas/CropOverlay.js +135 -0
- package/lib/commonjs/canvas/CropOverlay.js.map +1 -0
- package/lib/commonjs/canvas/EditorCanvas.js +91 -0
- package/lib/commonjs/canvas/EditorCanvas.js.map +1 -0
- package/lib/commonjs/canvas/InFlightLayer.js +152 -0
- package/lib/commonjs/canvas/InFlightLayer.js.map +1 -0
- package/lib/commonjs/canvas/SelectionOverlay.js +90 -0
- package/lib/commonjs/canvas/SelectionOverlay.js.map +1 -0
- package/lib/commonjs/constants.js +56 -0
- package/lib/commonjs/constants.js.map +1 -0
- package/lib/commonjs/context/EditorContext.js +132 -0
- package/lib/commonjs/context/EditorContext.js.map +1 -0
- package/lib/commonjs/export/drawScene.js +97 -0
- package/lib/commonjs/export/drawScene.js.map +1 -0
- package/lib/commonjs/export/exportImage.js +92 -0
- package/lib/commonjs/export/exportImage.js.map +1 -0
- package/lib/commonjs/gestures/applyTransform.js +79 -0
- package/lib/commonjs/gestures/applyTransform.js.map +1 -0
- package/lib/commonjs/gestures/createAnnotation.js +73 -0
- package/lib/commonjs/gestures/createAnnotation.js.map +1 -0
- package/lib/commonjs/gestures/handles.js +53 -0
- package/lib/commonjs/gestures/handles.js.map +1 -0
- package/lib/commonjs/gestures/hitTest.js +72 -0
- package/lib/commonjs/gestures/hitTest.js.map +1 -0
- package/lib/commonjs/gestures/useCropGesture.js +149 -0
- package/lib/commonjs/gestures/useCropGesture.js.map +1 -0
- package/lib/commonjs/gestures/useEditorGestures.js +289 -0
- package/lib/commonjs/gestures/useEditorGestures.js.map +1 -0
- package/lib/commonjs/image/disposeRegistry.js +63 -0
- package/lib/commonjs/image/disposeRegistry.js.map +1 -0
- package/lib/commonjs/image/useLoadedImage.js +121 -0
- package/lib/commonjs/image/useLoadedImage.js.map +1 -0
- package/lib/commonjs/index.js +52 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/state/history.js +85 -0
- package/lib/commonjs/state/history.js.map +1 -0
- package/lib/commonjs/state/selectors.js +19 -0
- package/lib/commonjs/state/selectors.js.map +1 -0
- package/lib/commonjs/state/useEditorReducer.js +83 -0
- package/lib/commonjs/state/useEditorReducer.js.map +1 -0
- package/lib/commonjs/toolbar/ColorPicker.js +84 -0
- package/lib/commonjs/toolbar/ColorPicker.js.map +1 -0
- package/lib/commonjs/toolbar/CropControls.js +65 -0
- package/lib/commonjs/toolbar/CropControls.js.map +1 -0
- package/lib/commonjs/toolbar/RotationSlider.js +73 -0
- package/lib/commonjs/toolbar/RotationSlider.js.map +1 -0
- package/lib/commonjs/toolbar/TextInputOverlay.js +108 -0
- package/lib/commonjs/toolbar/TextInputOverlay.js.map +1 -0
- package/lib/commonjs/toolbar/ToolButton.js +56 -0
- package/lib/commonjs/toolbar/ToolButton.js.map +1 -0
- package/lib/commonjs/toolbar/Toolbar.js +137 -0
- package/lib/commonjs/toolbar/Toolbar.js.map +1 -0
- package/lib/commonjs/types.js +47 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils/color.js +37 -0
- package/lib/commonjs/utils/color.js.map +1 -0
- package/lib/commonjs/utils/id.js +14 -0
- package/lib/commonjs/utils/id.js.map +1 -0
- package/lib/commonjs/utils/math.js +277 -0
- package/lib/commonjs/utils/math.js.map +1 -0
- package/lib/module/ImageEditor.js +138 -0
- package/lib/module/ImageEditor.js.map +1 -0
- package/lib/module/annotations/AnnotationView.js +39 -0
- package/lib/module/annotations/AnnotationView.js.map +1 -0
- package/lib/module/annotations/ArrowAnnotation.js +26 -0
- package/lib/module/annotations/ArrowAnnotation.js.map +1 -0
- package/lib/module/annotations/CircleAnnotation.js +27 -0
- package/lib/module/annotations/CircleAnnotation.js.map +1 -0
- package/lib/module/annotations/FreehandAnnotation.js +25 -0
- package/lib/module/annotations/FreehandAnnotation.js.map +1 -0
- package/lib/module/annotations/MarkerAnnotation.js +23 -0
- package/lib/module/annotations/MarkerAnnotation.js.map +1 -0
- package/lib/module/annotations/RotatedGroup.js +29 -0
- package/lib/module/annotations/RotatedGroup.js.map +1 -0
- package/lib/module/annotations/TextAnnotation.js +37 -0
- package/lib/module/annotations/TextAnnotation.js.map +1 -0
- package/lib/module/annotations/geometry.js +56 -0
- package/lib/module/annotations/geometry.js.map +1 -0
- package/lib/module/annotations/geometryPure.js +100 -0
- package/lib/module/annotations/geometryPure.js.map +1 -0
- package/lib/module/canvas/AnnotationLayer.js +55 -0
- package/lib/module/canvas/AnnotationLayer.js.map +1 -0
- package/lib/module/canvas/BaseImageLayer.js +23 -0
- package/lib/module/canvas/BaseImageLayer.js.map +1 -0
- package/lib/module/canvas/CropOverlay.js +131 -0
- package/lib/module/canvas/CropOverlay.js.map +1 -0
- package/lib/module/canvas/EditorCanvas.js +88 -0
- package/lib/module/canvas/EditorCanvas.js.map +1 -0
- package/lib/module/canvas/InFlightLayer.js +149 -0
- package/lib/module/canvas/InFlightLayer.js.map +1 -0
- package/lib/module/canvas/SelectionOverlay.js +85 -0
- package/lib/module/canvas/SelectionOverlay.js.map +1 -0
- package/lib/module/constants.js +52 -0
- package/lib/module/constants.js.map +1 -0
- package/lib/module/context/EditorContext.js +126 -0
- package/lib/module/context/EditorContext.js.map +1 -0
- package/lib/module/export/drawScene.js +93 -0
- package/lib/module/export/drawScene.js.map +1 -0
- package/lib/module/export/exportImage.js +88 -0
- package/lib/module/export/exportImage.js.map +1 -0
- package/lib/module/gestures/applyTransform.js +75 -0
- package/lib/module/gestures/applyTransform.js.map +1 -0
- package/lib/module/gestures/createAnnotation.js +65 -0
- package/lib/module/gestures/createAnnotation.js.map +1 -0
- package/lib/module/gestures/handles.js +49 -0
- package/lib/module/gestures/handles.js.map +1 -0
- package/lib/module/gestures/hitTest.js +69 -0
- package/lib/module/gestures/hitTest.js.map +1 -0
- package/lib/module/gestures/useCropGesture.js +145 -0
- package/lib/module/gestures/useCropGesture.js.map +1 -0
- package/lib/module/gestures/useEditorGestures.js +285 -0
- package/lib/module/gestures/useEditorGestures.js.map +1 -0
- package/lib/module/image/disposeRegistry.js +57 -0
- package/lib/module/image/disposeRegistry.js.map +1 -0
- package/lib/module/image/useLoadedImage.js +117 -0
- package/lib/module/image/useLoadedImage.js.map +1 -0
- package/lib/module/index.js +8 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/state/history.js +76 -0
- package/lib/module/state/history.js.map +1 -0
- package/lib/module/state/selectors.js +14 -0
- package/lib/module/state/selectors.js.map +1 -0
- package/lib/module/state/useEditorReducer.js +79 -0
- package/lib/module/state/useEditorReducer.js.map +1 -0
- package/lib/module/toolbar/ColorPicker.js +80 -0
- package/lib/module/toolbar/ColorPicker.js.map +1 -0
- package/lib/module/toolbar/CropControls.js +62 -0
- package/lib/module/toolbar/CropControls.js.map +1 -0
- package/lib/module/toolbar/RotationSlider.js +69 -0
- package/lib/module/toolbar/RotationSlider.js.map +1 -0
- package/lib/module/toolbar/TextInputOverlay.js +105 -0
- package/lib/module/toolbar/TextInputOverlay.js.map +1 -0
- package/lib/module/toolbar/ToolButton.js +52 -0
- package/lib/module/toolbar/ToolButton.js.map +1 -0
- package/lib/module/toolbar/Toolbar.js +133 -0
- package/lib/module/toolbar/Toolbar.js.map +1 -0
- package/lib/module/types.js +43 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils/color.js +33 -0
- package/lib/module/utils/color.js.map +1 -0
- package/lib/module/utils/id.js +10 -0
- package/lib/module/utils/id.js.map +1 -0
- package/lib/module/utils/math.js +258 -0
- package/lib/module/utils/math.js.map +1 -0
- package/lib/typescript/src/ImageEditor.d.ts +9 -0
- package/lib/typescript/src/ImageEditor.d.ts.map +1 -0
- package/lib/typescript/src/annotations/AnnotationView.d.ts +6 -0
- package/lib/typescript/src/annotations/AnnotationView.d.ts.map +1 -0
- package/lib/typescript/src/annotations/ArrowAnnotation.d.ts +5 -0
- package/lib/typescript/src/annotations/ArrowAnnotation.d.ts.map +1 -0
- package/lib/typescript/src/annotations/CircleAnnotation.d.ts +5 -0
- package/lib/typescript/src/annotations/CircleAnnotation.d.ts.map +1 -0
- package/lib/typescript/src/annotations/FreehandAnnotation.d.ts +5 -0
- package/lib/typescript/src/annotations/FreehandAnnotation.d.ts.map +1 -0
- package/lib/typescript/src/annotations/MarkerAnnotation.d.ts +5 -0
- package/lib/typescript/src/annotations/MarkerAnnotation.d.ts.map +1 -0
- package/lib/typescript/src/annotations/RotatedGroup.d.ts +13 -0
- package/lib/typescript/src/annotations/RotatedGroup.d.ts.map +1 -0
- package/lib/typescript/src/annotations/TextAnnotation.d.ts +10 -0
- package/lib/typescript/src/annotations/TextAnnotation.d.ts.map +1 -0
- package/lib/typescript/src/annotations/geometry.d.ts +11 -0
- package/lib/typescript/src/annotations/geometry.d.ts.map +1 -0
- package/lib/typescript/src/annotations/geometryPure.d.ts +14 -0
- package/lib/typescript/src/annotations/geometryPure.d.ts.map +1 -0
- package/lib/typescript/src/canvas/AnnotationLayer.d.ts +11 -0
- package/lib/typescript/src/canvas/AnnotationLayer.d.ts.map +1 -0
- package/lib/typescript/src/canvas/BaseImageLayer.d.ts +12 -0
- package/lib/typescript/src/canvas/BaseImageLayer.d.ts.map +1 -0
- package/lib/typescript/src/canvas/CropOverlay.d.ts +10 -0
- package/lib/typescript/src/canvas/CropOverlay.d.ts.map +1 -0
- package/lib/typescript/src/canvas/EditorCanvas.d.ts +18 -0
- package/lib/typescript/src/canvas/EditorCanvas.d.ts.map +1 -0
- package/lib/typescript/src/canvas/InFlightLayer.d.ts +12 -0
- package/lib/typescript/src/canvas/InFlightLayer.d.ts.map +1 -0
- package/lib/typescript/src/canvas/SelectionOverlay.d.ts +11 -0
- package/lib/typescript/src/canvas/SelectionOverlay.d.ts.map +1 -0
- package/lib/typescript/src/constants.d.ts +25 -0
- package/lib/typescript/src/constants.d.ts.map +1 -0
- package/lib/typescript/src/context/EditorContext.d.ts +66 -0
- package/lib/typescript/src/context/EditorContext.d.ts.map +1 -0
- package/lib/typescript/src/export/drawScene.d.ts +10 -0
- package/lib/typescript/src/export/drawScene.d.ts.map +1 -0
- package/lib/typescript/src/export/exportImage.d.ts +23 -0
- package/lib/typescript/src/export/exportImage.d.ts.map +1 -0
- package/lib/typescript/src/gestures/applyTransform.d.ts +17 -0
- package/lib/typescript/src/gestures/applyTransform.d.ts.map +1 -0
- package/lib/typescript/src/gestures/createAnnotation.d.ts +11 -0
- package/lib/typescript/src/gestures/createAnnotation.d.ts.map +1 -0
- package/lib/typescript/src/gestures/handles.d.ts +17 -0
- package/lib/typescript/src/gestures/handles.d.ts.map +1 -0
- package/lib/typescript/src/gestures/hitTest.d.ts +9 -0
- package/lib/typescript/src/gestures/hitTest.d.ts.map +1 -0
- package/lib/typescript/src/gestures/useCropGesture.d.ts +7 -0
- package/lib/typescript/src/gestures/useCropGesture.d.ts.map +1 -0
- package/lib/typescript/src/gestures/useEditorGestures.d.ts +8 -0
- package/lib/typescript/src/gestures/useEditorGestures.d.ts.map +1 -0
- package/lib/typescript/src/image/disposeRegistry.d.ts +25 -0
- package/lib/typescript/src/image/disposeRegistry.d.ts.map +1 -0
- package/lib/typescript/src/image/useLoadedImage.d.ts +23 -0
- package/lib/typescript/src/image/useLoadedImage.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +6 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/state/history.d.ts +23 -0
- package/lib/typescript/src/state/history.d.ts.map +1 -0
- package/lib/typescript/src/state/selectors.d.ts +5 -0
- package/lib/typescript/src/state/selectors.d.ts.map +1 -0
- package/lib/typescript/src/state/useEditorReducer.d.ts +32 -0
- package/lib/typescript/src/state/useEditorReducer.d.ts.map +1 -0
- package/lib/typescript/src/toolbar/ColorPicker.d.ts +7 -0
- package/lib/typescript/src/toolbar/ColorPicker.d.ts.map +1 -0
- package/lib/typescript/src/toolbar/CropControls.d.ts +3 -0
- package/lib/typescript/src/toolbar/CropControls.d.ts.map +1 -0
- package/lib/typescript/src/toolbar/RotationSlider.d.ts +8 -0
- package/lib/typescript/src/toolbar/RotationSlider.d.ts.map +1 -0
- package/lib/typescript/src/toolbar/TextInputOverlay.d.ts +9 -0
- package/lib/typescript/src/toolbar/TextInputOverlay.d.ts.map +1 -0
- package/lib/typescript/src/toolbar/ToolButton.d.ts +7 -0
- package/lib/typescript/src/toolbar/ToolButton.d.ts.map +1 -0
- package/lib/typescript/src/toolbar/Toolbar.d.ts +4 -0
- package/lib/typescript/src/toolbar/Toolbar.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +170 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/utils/color.d.ts +8 -0
- package/lib/typescript/src/utils/color.d.ts.map +1 -0
- package/lib/typescript/src/utils/id.d.ts +3 -0
- package/lib/typescript/src/utils/id.d.ts.map +1 -0
- package/lib/typescript/src/utils/math.d.ts +68 -0
- package/lib/typescript/src/utils/math.d.ts.map +1 -0
- package/package.json +90 -0
- package/src/ImageEditor.tsx +133 -0
- package/src/annotations/AnnotationView.tsx +24 -0
- package/src/annotations/ArrowAnnotation.tsx +26 -0
- package/src/annotations/CircleAnnotation.tsx +22 -0
- package/src/annotations/FreehandAnnotation.tsx +22 -0
- package/src/annotations/MarkerAnnotation.tsx +20 -0
- package/src/annotations/RotatedGroup.tsx +28 -0
- package/src/annotations/TextAnnotation.tsx +42 -0
- package/src/annotations/geometry.ts +62 -0
- package/src/annotations/geometryPure.ts +73 -0
- package/src/canvas/AnnotationLayer.tsx +43 -0
- package/src/canvas/BaseImageLayer.tsx +28 -0
- package/src/canvas/CropOverlay.tsx +92 -0
- package/src/canvas/EditorCanvas.tsx +70 -0
- package/src/canvas/InFlightLayer.tsx +140 -0
- package/src/canvas/SelectionOverlay.tsx +92 -0
- package/src/constants.ts +46 -0
- package/src/context/EditorContext.tsx +229 -0
- package/src/export/drawScene.ts +120 -0
- package/src/export/exportImage.ts +111 -0
- package/src/gestures/applyTransform.ts +76 -0
- package/src/gestures/createAnnotation.ts +92 -0
- package/src/gestures/handles.ts +50 -0
- package/src/gestures/hitTest.ts +79 -0
- package/src/gestures/useCropGesture.ts +123 -0
- package/src/gestures/useEditorGestures.ts +308 -0
- package/src/image/disposeRegistry.ts +59 -0
- package/src/image/useLoadedImage.ts +131 -0
- package/src/index.ts +32 -0
- package/src/state/history.ts +71 -0
- package/src/state/selectors.ts +16 -0
- package/src/state/useEditorReducer.ts +93 -0
- package/src/toolbar/ColorPicker.tsx +72 -0
- package/src/toolbar/CropControls.tsx +46 -0
- package/src/toolbar/RotationSlider.tsx +56 -0
- package/src/toolbar/TextInputOverlay.tsx +104 -0
- package/src/toolbar/ToolButton.tsx +46 -0
- package/src/toolbar/Toolbar.tsx +110 -0
- package/src/types.ts +203 -0
- package/src/utils/color.ts +34 -0
- package/src/utils/id.ts +7 -0
- 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":[]}
|