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 @@
|
|
|
1
|
+
{"version":3,"names":["getAnnotationById","annotations","id","undefined","find","a","sortedByZ","sort","b","z"],"sourceRoot":"..\\..\\..\\src","sources":["state/selectors.ts"],"mappings":";;;;;;;AAEO,SAASA,iBAAiBA,CAC/BC,WAAyB,EACzBC,EAAiB,EACO;EACxB,IAAI,CAACA,EAAE,EAAE;IACP,OAAOC,SAAS;EAClB;EACA,OAAOF,WAAW,CAACG,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACH,EAAE,KAAKA,EAAE,CAAC;AAC7C;;AAEA;AACO,SAASI,SAASA,CAACL,WAAyB,EAAgB;EACjE,OAAO,CAAC,GAAGA,WAAW,CAAC,CAACM,IAAI,CAAC,CAACF,CAAC,EAAEG,CAAC,KAAKH,CAAC,CAACI,CAAC,GAAGD,CAAC,CAACC,CAAC,CAAC;AACnD","ignoreList":[]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useEditorReducer = useEditorReducer;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _types = require("../types");
|
|
9
|
+
var _history = require("./history");
|
|
10
|
+
const EMPTY_DOCUMENT = {
|
|
11
|
+
annotations: [],
|
|
12
|
+
scene: _types.IDENTITY_SCENE
|
|
13
|
+
};
|
|
14
|
+
function nextZ(annotations) {
|
|
15
|
+
return annotations.reduce((max, a) => Math.max(max, a.z), 0) + 1;
|
|
16
|
+
}
|
|
17
|
+
function reducer(state, action) {
|
|
18
|
+
const doc = state.present;
|
|
19
|
+
switch (action.type) {
|
|
20
|
+
case 'ADD_ANNOTATION':
|
|
21
|
+
{
|
|
22
|
+
const annotation = {
|
|
23
|
+
...action.annotation,
|
|
24
|
+
z: nextZ(doc.annotations)
|
|
25
|
+
};
|
|
26
|
+
return (0, _history.commit)(state, {
|
|
27
|
+
...doc,
|
|
28
|
+
annotations: [...doc.annotations, annotation]
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
case 'UPDATE_ANNOTATION':
|
|
32
|
+
{
|
|
33
|
+
const annotations = doc.annotations.map(a => a.id === action.id ? {
|
|
34
|
+
...a,
|
|
35
|
+
...action.changes
|
|
36
|
+
} : a);
|
|
37
|
+
const next = {
|
|
38
|
+
...doc,
|
|
39
|
+
annotations
|
|
40
|
+
};
|
|
41
|
+
return action.transient ? (0, _history.replacePresent)(state, next) : (0, _history.commit)(state, next);
|
|
42
|
+
}
|
|
43
|
+
case 'DELETE_ANNOTATION':
|
|
44
|
+
{
|
|
45
|
+
return (0, _history.commit)(state, {
|
|
46
|
+
...doc,
|
|
47
|
+
annotations: doc.annotations.filter(a => a.id !== action.id)
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
case 'SET_SCENE':
|
|
51
|
+
{
|
|
52
|
+
const next = {
|
|
53
|
+
...doc,
|
|
54
|
+
scene: {
|
|
55
|
+
...doc.scene,
|
|
56
|
+
...action.changes
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
return action.transient ? (0, _history.replacePresent)(state, next) : (0, _history.commit)(state, next);
|
|
60
|
+
}
|
|
61
|
+
case 'REPLACE':
|
|
62
|
+
{
|
|
63
|
+
return (0, _history.commit)(state, action.document);
|
|
64
|
+
}
|
|
65
|
+
case 'RESET':
|
|
66
|
+
{
|
|
67
|
+
return (0, _history.commit)(state, EMPTY_DOCUMENT);
|
|
68
|
+
}
|
|
69
|
+
case 'UNDO':
|
|
70
|
+
return (0, _history.undo)(state);
|
|
71
|
+
case 'REDO':
|
|
72
|
+
return (0, _history.redo)(state);
|
|
73
|
+
default:
|
|
74
|
+
return state;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function useEditorReducer(initial) {
|
|
78
|
+
return (0, _react.useReducer)(reducer, (0, _history.initHistory)({
|
|
79
|
+
...EMPTY_DOCUMENT,
|
|
80
|
+
...initial
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=useEditorReducer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_types","_history","EMPTY_DOCUMENT","annotations","scene","IDENTITY_SCENE","nextZ","reduce","max","a","Math","z","reducer","state","action","doc","present","type","annotation","commit","map","id","changes","next","transient","replacePresent","filter","document","undoHistory","redoHistory","useEditorReducer","initial","useReducer","initHistory"],"sourceRoot":"..\\..\\..\\src","sources":["state/useEditorReducer.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAgCA,MAAMG,cAA8B,GAAG;EACrCC,WAAW,EAAE,EAAE;EACfC,KAAK,EAAEC;AACT,CAAC;AAED,SAASC,KAAKA,CAACH,WAAyB,EAAU;EAChD,OAAOA,WAAW,CAACI,MAAM,CAAC,CAACC,GAAG,EAAEC,CAAC,KAAKC,IAAI,CAACF,GAAG,CAACA,GAAG,EAAEC,CAAC,CAACE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;AAClE;AAEA,SAASC,OAAOA,CAACC,KAAkB,EAAEC,MAAoB,EAAe;EACtE,MAAMC,GAAG,GAAGF,KAAK,CAACG,OAAO;EACzB,QAAQF,MAAM,CAACG,IAAI;IACjB,KAAK,gBAAgB;MAAE;QACrB,MAAMC,UAAU,GAAG;UAAE,GAAGJ,MAAM,CAACI,UAAU;UAAEP,CAAC,EAAEL,KAAK,CAACS,GAAG,CAACZ,WAAW;QAAE,CAAC;QACtE,OAAO,IAAAgB,eAAM,EAACN,KAAK,EAAE;UACnB,GAAGE,GAAG;UACNZ,WAAW,EAAE,CAAC,GAAGY,GAAG,CAACZ,WAAW,EAAEe,UAAU;QAC9C,CAAC,CAAC;MACJ;IACA,KAAK,mBAAmB;MAAE;QACxB,MAAMf,WAAW,GAAGY,GAAG,CAACZ,WAAW,CAACiB,GAAG,CAAEX,CAAC,IACxCA,CAAC,CAACY,EAAE,KAAKP,MAAM,CAACO,EAAE,GAAI;UAAE,GAAGZ,CAAC;UAAE,GAAGK,MAAM,CAACQ;QAAQ,CAAC,GAAkBb,CACrE,CAAC;QACD,MAAMc,IAAI,GAAG;UAAE,GAAGR,GAAG;UAAEZ;QAAY,CAAC;QACpC,OAAOW,MAAM,CAACU,SAAS,GAAG,IAAAC,uBAAc,EAACZ,KAAK,EAAEU,IAAI,CAAC,GAAG,IAAAJ,eAAM,EAACN,KAAK,EAAEU,IAAI,CAAC;MAC7E;IACA,KAAK,mBAAmB;MAAE;QACxB,OAAO,IAAAJ,eAAM,EAACN,KAAK,EAAE;UACnB,GAAGE,GAAG;UACNZ,WAAW,EAAEY,GAAG,CAACZ,WAAW,CAACuB,MAAM,CAAEjB,CAAC,IAAKA,CAAC,CAACY,EAAE,KAAKP,MAAM,CAACO,EAAE;QAC/D,CAAC,CAAC;MACJ;IACA,KAAK,WAAW;MAAE;QAChB,MAAME,IAAI,GAAG;UAAE,GAAGR,GAAG;UAAEX,KAAK,EAAE;YAAE,GAAGW,GAAG,CAACX,KAAK;YAAE,GAAGU,MAAM,CAACQ;UAAQ;QAAE,CAAC;QACnE,OAAOR,MAAM,CAACU,SAAS,GAAG,IAAAC,uBAAc,EAACZ,KAAK,EAAEU,IAAI,CAAC,GAAG,IAAAJ,eAAM,EAACN,KAAK,EAAEU,IAAI,CAAC;MAC7E;IACA,KAAK,SAAS;MAAE;QACd,OAAO,IAAAJ,eAAM,EAACN,KAAK,EAAEC,MAAM,CAACa,QAAQ,CAAC;MACvC;IACA,KAAK,OAAO;MAAE;QACZ,OAAO,IAAAR,eAAM,EAACN,KAAK,EAAEX,cAAc,CAAC;MACtC;IACA,KAAK,MAAM;MACT,OAAO,IAAA0B,aAAW,EAACf,KAAK,CAAC;IAC3B,KAAK,MAAM;MACT,OAAO,IAAAgB,aAAW,EAAChB,KAAK,CAAC;IAC3B;MACE,OAAOA,KAAK;EAChB;AACF;AAEO,SAASiB,gBAAgBA,CAACC,OAAiC,EAAE;EAClE,OAAO,IAAAC,iBAAU,EACfpB,OAAO,EACP,IAAAqB,oBAAW,EAAiB;IAAE,GAAG/B,cAAc;IAAE,GAAG6B;EAAQ,CAAC,CAC/D,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ColorPicker = ColorPicker;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _EditorContext = require("../context/EditorContext");
|
|
9
|
+
var _selectors = require("../state/selectors");
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
/**
|
|
12
|
+
* Horizontal swatch strip. Picking a color sets the "current" color used for new
|
|
13
|
+
* shapes and, if an annotation is selected, recolors it (the right field per
|
|
14
|
+
* type). While editing text, it also updates the live text color.
|
|
15
|
+
*/
|
|
16
|
+
function ColorPicker() {
|
|
17
|
+
const {
|
|
18
|
+
palette,
|
|
19
|
+
strokeColor,
|
|
20
|
+
setStrokeColor,
|
|
21
|
+
setTextColor,
|
|
22
|
+
selectedId,
|
|
23
|
+
editingTextId,
|
|
24
|
+
annotations,
|
|
25
|
+
dispatch
|
|
26
|
+
} = (0, _EditorContext.useEditor)();
|
|
27
|
+
const onPick = color => {
|
|
28
|
+
setStrokeColor(color);
|
|
29
|
+
setTextColor(color);
|
|
30
|
+
const target = (0, _selectors.getAnnotationById)(annotations, editingTextId ?? selectedId);
|
|
31
|
+
if (target) {
|
|
32
|
+
if (target.type === 'text' || target.type === 'marker') {
|
|
33
|
+
dispatch({
|
|
34
|
+
type: 'UPDATE_ANNOTATION',
|
|
35
|
+
id: target.id,
|
|
36
|
+
changes: {
|
|
37
|
+
color
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
} else {
|
|
41
|
+
dispatch({
|
|
42
|
+
type: 'UPDATE_ANNOTATION',
|
|
43
|
+
id: target.id,
|
|
44
|
+
changes: {
|
|
45
|
+
strokeColor: color
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
|
|
52
|
+
horizontal: true,
|
|
53
|
+
showsHorizontalScrollIndicator: false,
|
|
54
|
+
contentContainerStyle: styles.row,
|
|
55
|
+
children: palette.map(color => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
56
|
+
onPress: () => onPick(color),
|
|
57
|
+
hitSlop: 4,
|
|
58
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
59
|
+
style: [styles.swatch, {
|
|
60
|
+
backgroundColor: color
|
|
61
|
+
}, color === strokeColor && styles.selected]
|
|
62
|
+
})
|
|
63
|
+
}, color))
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
const styles = _reactNative.StyleSheet.create({
|
|
67
|
+
row: {
|
|
68
|
+
alignItems: 'center',
|
|
69
|
+
paddingHorizontal: 8,
|
|
70
|
+
gap: 8
|
|
71
|
+
},
|
|
72
|
+
swatch: {
|
|
73
|
+
width: 28,
|
|
74
|
+
height: 28,
|
|
75
|
+
borderRadius: 14,
|
|
76
|
+
borderWidth: 2,
|
|
77
|
+
borderColor: 'rgba(255,255,255,0.5)'
|
|
78
|
+
},
|
|
79
|
+
selected: {
|
|
80
|
+
borderColor: '#FFFFFF',
|
|
81
|
+
borderWidth: 3
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=ColorPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_EditorContext","_selectors","_jsxRuntime","ColorPicker","palette","strokeColor","setStrokeColor","setTextColor","selectedId","editingTextId","annotations","dispatch","useEditor","onPick","color","target","getAnnotationById","type","id","changes","jsx","ScrollView","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","styles","row","children","map","Pressable","onPress","hitSlop","View","style","swatch","backgroundColor","selected","StyleSheet","create","alignItems","paddingHorizontal","gap","width","height","borderRadius","borderWidth","borderColor"],"sourceRoot":"..\\..\\..\\src","sources":["toolbar/ColorPicker.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAAuD,IAAAG,WAAA,GAAAH,OAAA;AAGvD;AACA;AACA;AACA;AACA;AACO,SAASI,WAAWA,CAAA,EAAG;EAC5B,MAAM;IACJC,OAAO;IACPC,WAAW;IACXC,cAAc;IACdC,YAAY;IACZC,UAAU;IACVC,aAAa;IACbC,WAAW;IACXC;EACF,CAAC,GAAG,IAAAC,wBAAS,EAAC,CAAC;EAEf,MAAMC,MAAM,GAAIC,KAAkB,IAAK;IACrCR,cAAc,CAACQ,KAAK,CAAC;IACrBP,YAAY,CAACO,KAAK,CAAC;IACnB,MAAMC,MAAM,GAAG,IAAAC,4BAAiB,EAACN,WAAW,EAAED,aAAa,IAAID,UAAU,CAAC;IAC1E,IAAIO,MAAM,EAAE;MACV,IAAIA,MAAM,CAACE,IAAI,KAAK,MAAM,IAAIF,MAAM,CAACE,IAAI,KAAK,QAAQ,EAAE;QACtDN,QAAQ,CAAC;UAAEM,IAAI,EAAE,mBAAmB;UAAEC,EAAE,EAAEH,MAAM,CAACG,EAAE;UAAEC,OAAO,EAAE;YAAEL;UAAM;QAAE,CAAC,CAAC;MAC5E,CAAC,MAAM;QACLH,QAAQ,CAAC;UACPM,IAAI,EAAE,mBAAmB;UACzBC,EAAE,EAAEH,MAAM,CAACG,EAAE;UACbC,OAAO,EAAE;YAAEd,WAAW,EAAES;UAAM;QAChC,CAAC,CAAC;MACJ;IACF;EACF,CAAC;EAED,oBACE,IAAAZ,WAAA,CAAAkB,GAAA,EAACtB,YAAA,CAAAuB,UAAU;IACTC,UAAU;IACVC,8BAA8B,EAAE,KAAM;IACtCC,qBAAqB,EAAEC,MAAM,CAACC,GAAI;IAAAC,QAAA,EAEjCvB,OAAO,CAACwB,GAAG,CAAEd,KAAK,iBACjB,IAAAZ,WAAA,CAAAkB,GAAA,EAACtB,YAAA,CAAA+B,SAAS;MAAaC,OAAO,EAAEA,CAAA,KAAMjB,MAAM,CAACC,KAAK,CAAE;MAACiB,OAAO,EAAE,CAAE;MAAAJ,QAAA,eAC9D,IAAAzB,WAAA,CAAAkB,GAAA,EAACtB,YAAA,CAAAkC,IAAI;QACHC,KAAK,EAAE,CACLR,MAAM,CAACS,MAAM,EACb;UAAEC,eAAe,EAAErB;QAAM,CAAC,EAC1BA,KAAK,KAAKT,WAAW,IAAIoB,MAAM,CAACW,QAAQ;MACxC,CACH;IAAC,GAPYtB,KAQL,CACZ;EAAC,CACQ,CAAC;AAEjB;AAEA,MAAMW,MAAM,GAAGY,uBAAU,CAACC,MAAM,CAAC;EAC/BZ,GAAG,EAAE;IAAEa,UAAU,EAAE,QAAQ;IAAEC,iBAAiB,EAAE,CAAC;IAAEC,GAAG,EAAE;EAAE,CAAC;EAC3DP,MAAM,EAAE;IACNQ,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE,EAAE;IACVC,YAAY,EAAE,EAAE;IAChBC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE;EACf,CAAC;EACDV,QAAQ,EAAE;IAAEU,WAAW,EAAE,SAAS;IAAED,WAAW,EAAE;EAAE;AACrD,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CropControls = CropControls;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _EditorContext = require("../context/EditorContext");
|
|
9
|
+
var _ToolButton = require("./ToolButton");
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
/** Apply / reset / cancel controls shown while the crop tool is active. */
|
|
12
|
+
function CropControls() {
|
|
13
|
+
const {
|
|
14
|
+
cropRectSV,
|
|
15
|
+
dispatch,
|
|
16
|
+
setTool,
|
|
17
|
+
imageSize
|
|
18
|
+
} = (0, _EditorContext.useEditor)();
|
|
19
|
+
const apply = () => {
|
|
20
|
+
const r = cropRectSV.value;
|
|
21
|
+
// Ignore a degenerate crop.
|
|
22
|
+
const isFull = r.x <= 0 && r.y <= 0 && r.width >= imageSize.width && r.height >= imageSize.height;
|
|
23
|
+
dispatch({
|
|
24
|
+
type: 'SET_SCENE',
|
|
25
|
+
changes: {
|
|
26
|
+
cropRect: isFull ? null : {
|
|
27
|
+
...r
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
setTool('select');
|
|
32
|
+
};
|
|
33
|
+
const reset = () => {
|
|
34
|
+
dispatch({
|
|
35
|
+
type: 'SET_SCENE',
|
|
36
|
+
changes: {
|
|
37
|
+
cropRect: null
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
setTool('select');
|
|
41
|
+
};
|
|
42
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
43
|
+
style: styles.row,
|
|
44
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolButton.ToolButton, {
|
|
45
|
+
label: "\u2715 Cancel",
|
|
46
|
+
onPress: () => setTool('select')
|
|
47
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolButton.ToolButton, {
|
|
48
|
+
label: "\u21BA Reset",
|
|
49
|
+
onPress: reset
|
|
50
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolButton.ToolButton, {
|
|
51
|
+
label: "\u2713 Apply",
|
|
52
|
+
active: true,
|
|
53
|
+
onPress: apply
|
|
54
|
+
})]
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const styles = _reactNative.StyleSheet.create({
|
|
58
|
+
row: {
|
|
59
|
+
flexDirection: 'row',
|
|
60
|
+
justifyContent: 'center',
|
|
61
|
+
alignItems: 'center',
|
|
62
|
+
paddingVertical: 6
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=CropControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_EditorContext","_ToolButton","_jsxRuntime","CropControls","cropRectSV","dispatch","setTool","imageSize","useEditor","apply","r","value","isFull","x","y","width","height","type","changes","cropRect","reset","jsxs","View","style","styles","row","children","jsx","ToolButton","label","onPress","active","StyleSheet","create","flexDirection","justifyContent","alignItems","paddingVertical"],"sourceRoot":"..\\..\\..\\src","sources":["toolbar/CropControls.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AAA0C,IAAAG,WAAA,GAAAH,OAAA;AAE1C;AACO,SAASI,YAAYA,CAAA,EAAG;EAC7B,MAAM;IAAEC,UAAU;IAAEC,QAAQ;IAAEC,OAAO;IAAEC;EAAU,CAAC,GAAG,IAAAC,wBAAS,EAAC,CAAC;EAEhE,MAAMC,KAAK,GAAGA,CAAA,KAAM;IAClB,MAAMC,CAAC,GAAGN,UAAU,CAACO,KAAK;IAC1B;IACA,MAAMC,MAAM,GACVF,CAAC,CAACG,CAAC,IAAI,CAAC,IACRH,CAAC,CAACI,CAAC,IAAI,CAAC,IACRJ,CAAC,CAACK,KAAK,IAAIR,SAAS,CAACQ,KAAK,IAC1BL,CAAC,CAACM,MAAM,IAAIT,SAAS,CAACS,MAAM;IAC9BX,QAAQ,CAAC;MACPY,IAAI,EAAE,WAAW;MACjBC,OAAO,EAAE;QAAEC,QAAQ,EAAEP,MAAM,GAAG,IAAI,GAAG;UAAE,GAAGF;QAAE;MAAE;IAChD,CAAC,CAAC;IACFJ,OAAO,CAAC,QAAQ,CAAC;EACnB,CAAC;EAED,MAAMc,KAAK,GAAGA,CAAA,KAAM;IAClBf,QAAQ,CAAC;MAAEY,IAAI,EAAE,WAAW;MAAEC,OAAO,EAAE;QAAEC,QAAQ,EAAE;MAAK;IAAE,CAAC,CAAC;IAC5Db,OAAO,CAAC,QAAQ,CAAC;EACnB,CAAC;EAED,oBACE,IAAAJ,WAAA,CAAAmB,IAAA,EAACvB,YAAA,CAAAwB,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACC,GAAI;IAAAC,QAAA,gBACtB,IAAAxB,WAAA,CAAAyB,GAAA,EAAC1B,WAAA,CAAA2B,UAAU;MAACC,KAAK,EAAC,eAAU;MAACC,OAAO,EAAEA,CAAA,KAAMxB,OAAO,CAAC,QAAQ;IAAE,CAAE,CAAC,eACjE,IAAAJ,WAAA,CAAAyB,GAAA,EAAC1B,WAAA,CAAA2B,UAAU;MAACC,KAAK,EAAC,cAAS;MAACC,OAAO,EAAEV;IAAM,CAAE,CAAC,eAC9C,IAAAlB,WAAA,CAAAyB,GAAA,EAAC1B,WAAA,CAAA2B,UAAU;MAACC,KAAK,EAAC,cAAS;MAACE,MAAM;MAACD,OAAO,EAAErB;IAAM,CAAE,CAAC;EAAA,CACjD,CAAC;AAEX;AAEA,MAAMe,MAAM,GAAGQ,uBAAU,CAACC,MAAM,CAAC;EAC/BR,GAAG,EAAE;IACHS,aAAa,EAAE,KAAK;IACpBC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBC,eAAe,EAAE;EACnB;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RotationSlider = RotationSlider;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _reactNativeGestureHandler = require("react-native-gesture-handler");
|
|
9
|
+
var _reactNativeReanimated = require("react-native-reanimated");
|
|
10
|
+
var _EditorContext = require("../context/EditorContext");
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
const SENSITIVITY = 0.006; // radians per pixel dragged
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Drag left/right anywhere on the bar to rotate the whole image to ANY angle.
|
|
16
|
+
* Updates are transient during the drag (no history spam) and committed on
|
|
17
|
+
* release. Double-nothing here is fine — the scene re-renders, but rotation is
|
|
18
|
+
* an occasional interaction.
|
|
19
|
+
*/
|
|
20
|
+
function RotationSlider() {
|
|
21
|
+
const {
|
|
22
|
+
doc,
|
|
23
|
+
dispatch
|
|
24
|
+
} = (0, _EditorContext.useEditor)();
|
|
25
|
+
const startRotation = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
26
|
+
const rotationDeg = Math.round(doc.scene.rotation * 180 / Math.PI);
|
|
27
|
+
const setScene = (rotation, transient) => dispatch({
|
|
28
|
+
type: 'SET_SCENE',
|
|
29
|
+
changes: {
|
|
30
|
+
rotation
|
|
31
|
+
},
|
|
32
|
+
transient
|
|
33
|
+
});
|
|
34
|
+
const pan = _reactNativeGestureHandler.Gesture.Pan().onBegin(() => {
|
|
35
|
+
'worklet';
|
|
36
|
+
|
|
37
|
+
startRotation.value = doc.scene.rotation;
|
|
38
|
+
}).onChange(e => {
|
|
39
|
+
'worklet';
|
|
40
|
+
|
|
41
|
+
(0, _reactNativeReanimated.runOnJS)(setScene)(startRotation.value + e.translationX * SENSITIVITY, true);
|
|
42
|
+
}).onEnd(e => {
|
|
43
|
+
'worklet';
|
|
44
|
+
|
|
45
|
+
(0, _reactNativeReanimated.runOnJS)(setScene)(startRotation.value + e.translationX * SENSITIVITY, false);
|
|
46
|
+
});
|
|
47
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector, {
|
|
48
|
+
gesture: pan,
|
|
49
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
50
|
+
style: styles.bar,
|
|
51
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
52
|
+
style: styles.label,
|
|
53
|
+
children: ["\u27F2 Rotate ", rotationDeg, "\xB0 \u27F3"]
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
const styles = _reactNative.StyleSheet.create({
|
|
59
|
+
bar: {
|
|
60
|
+
height: 36,
|
|
61
|
+
borderRadius: 8,
|
|
62
|
+
backgroundColor: 'rgba(255,255,255,0.12)',
|
|
63
|
+
alignItems: 'center',
|
|
64
|
+
justifyContent: 'center',
|
|
65
|
+
marginHorizontal: 8
|
|
66
|
+
},
|
|
67
|
+
label: {
|
|
68
|
+
color: '#FFFFFF',
|
|
69
|
+
fontSize: 14,
|
|
70
|
+
fontWeight: '600'
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=RotationSlider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_reactNativeGestureHandler","_reactNativeReanimated","_EditorContext","_jsxRuntime","SENSITIVITY","RotationSlider","doc","dispatch","useEditor","startRotation","useSharedValue","rotationDeg","Math","round","scene","rotation","PI","setScene","transient","type","changes","pan","Gesture","Pan","onBegin","value","onChange","e","runOnJS","translationX","onEnd","jsx","GestureDetector","gesture","children","View","style","styles","bar","jsxs","Text","label","StyleSheet","create","height","borderRadius","backgroundColor","alignItems","justifyContent","marginHorizontal","color","fontSize","fontWeight"],"sourceRoot":"..\\..\\..\\src","sources":["toolbar/RotationSlider.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,0BAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAF,OAAA;AAEA,IAAAG,cAAA,GAAAH,OAAA;AAAqD,IAAAI,WAAA,GAAAJ,OAAA;AAErD,MAAMK,WAAW,GAAG,KAAK,CAAC,CAAC;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,cAAcA,CAAA,EAAG;EAC/B,MAAM;IAAEC,GAAG;IAAEC;EAAS,CAAC,GAAG,IAAAC,wBAAS,EAAC,CAAC;EACrC,MAAMC,aAAa,GAAG,IAAAC,qCAAc,EAAC,CAAC,CAAC;EACvC,MAAMC,WAAW,GAAGC,IAAI,CAACC,KAAK,CAAEP,GAAG,CAACQ,KAAK,CAACC,QAAQ,GAAG,GAAG,GAAIH,IAAI,CAACI,EAAE,CAAC;EAEpE,MAAMC,QAAQ,GAAGA,CAACF,QAAgB,EAAEG,SAAkB,KACpDX,QAAQ,CAAC;IAAEY,IAAI,EAAE,WAAW;IAAEC,OAAO,EAAE;MAAEL;IAAS,CAAC;IAAEG;EAAU,CAAC,CAAC;EAEnE,MAAMG,GAAG,GAAGC,kCAAO,CAACC,GAAG,CAAC,CAAC,CACtBC,OAAO,CAAC,MAAM;IACb,SAAS;;IACTf,aAAa,CAACgB,KAAK,GAAGnB,GAAG,CAACQ,KAAK,CAACC,QAAQ;EAC1C,CAAC,CAAC,CACDW,QAAQ,CAAEC,CAAC,IAAK;IACf,SAAS;;IACT,IAAAC,8BAAO,EAACX,QAAQ,CAAC,CAACR,aAAa,CAACgB,KAAK,GAAGE,CAAC,CAACE,YAAY,GAAGzB,WAAW,EAAE,IAAI,CAAC;EAC7E,CAAC,CAAC,CACD0B,KAAK,CAAEH,CAAC,IAAK;IACZ,SAAS;;IACT,IAAAC,8BAAO,EAACX,QAAQ,CAAC,CAACR,aAAa,CAACgB,KAAK,GAAGE,CAAC,CAACE,YAAY,GAAGzB,WAAW,EAAE,KAAK,CAAC;EAC9E,CAAC,CAAC;EAEJ,oBACE,IAAAD,WAAA,CAAA4B,GAAA,EAAC/B,0BAAA,CAAAgC,eAAe;IAACC,OAAO,EAAEZ,GAAI;IAAAa,QAAA,eAC5B,IAAA/B,WAAA,CAAA4B,GAAA,EAACjC,YAAA,CAAAqC,IAAI;MAACC,KAAK,EAAEC,MAAM,CAACC,GAAI;MAAAJ,QAAA,eACtB,IAAA/B,WAAA,CAAAoC,IAAA,EAACzC,YAAA,CAAA0C,IAAI;QAACJ,KAAK,EAAEC,MAAM,CAACI,KAAM;QAAAP,QAAA,GAAC,iBAAU,EAACvB,WAAW,EAAC,cAAI;MAAA,CAAM;IAAC,CACzD;EAAC,CACQ,CAAC;AAEtB;AAEA,MAAM0B,MAAM,GAAGK,uBAAU,CAACC,MAAM,CAAC;EAC/BL,GAAG,EAAE;IACHM,MAAM,EAAE,EAAE;IACVC,YAAY,EAAE,CAAC;IACfC,eAAe,EAAE,wBAAwB;IACzCC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBC,gBAAgB,EAAE;EACpB,CAAC;EACDR,KAAK,EAAE;IAAES,KAAK,EAAE,SAAS;IAAEC,QAAQ,EAAE,EAAE;IAAEC,UAAU,EAAE;EAAM;AAC7D,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TextInputOverlay = TextInputOverlay;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _EditorContext = require("../context/EditorContext");
|
|
10
|
+
var _selectors = require("../state/selectors");
|
|
11
|
+
var _math = require("../utils/math");
|
|
12
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
|
+
/**
|
|
14
|
+
* Native TextInput overlaid on the text annotation being edited. Skia can't
|
|
15
|
+
* accept keyboard input, so we edit here and mirror the string back into the
|
|
16
|
+
* annotation (transient updates while typing; a committed update on blur). The
|
|
17
|
+
* Skia text for this annotation is hidden while editing (see AnnotationLayer).
|
|
18
|
+
* Positioning ignores rotation for simplicity.
|
|
19
|
+
*/
|
|
20
|
+
function TextInputOverlay() {
|
|
21
|
+
const {
|
|
22
|
+
editingTextId,
|
|
23
|
+
setEditingTextId,
|
|
24
|
+
annotations,
|
|
25
|
+
dispatch,
|
|
26
|
+
matrix,
|
|
27
|
+
setSelectedId
|
|
28
|
+
} = (0, _EditorContext.useEditor)();
|
|
29
|
+
const target = (0, _selectors.getAnnotationById)(annotations, editingTextId);
|
|
30
|
+
const isText = target?.type === 'text' ? target : null;
|
|
31
|
+
const inputRef = (0, _react.useRef)(null);
|
|
32
|
+
const [value, setValue] = (0, _react.useState)('');
|
|
33
|
+
(0, _react.useEffect)(() => {
|
|
34
|
+
if (isText) {
|
|
35
|
+
setValue(isText.text);
|
|
36
|
+
const t = setTimeout(() => inputRef.current?.focus(), 50);
|
|
37
|
+
return () => clearTimeout(t);
|
|
38
|
+
}
|
|
39
|
+
return undefined;
|
|
40
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
41
|
+
}, [editingTextId]);
|
|
42
|
+
if (!isText) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const scaleFactor = Math.hypot(matrix.a, matrix.b) || 1;
|
|
46
|
+
const screen = (0, _math.applyToPoint)(matrix, isText.origin);
|
|
47
|
+
const fontSize = isText.fontSize * scaleFactor;
|
|
48
|
+
const width = isText.width * scaleFactor;
|
|
49
|
+
const onChange = text => {
|
|
50
|
+
setValue(text);
|
|
51
|
+
dispatch({
|
|
52
|
+
type: 'UPDATE_ANNOTATION',
|
|
53
|
+
id: isText.id,
|
|
54
|
+
changes: {
|
|
55
|
+
text
|
|
56
|
+
},
|
|
57
|
+
transient: true
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
const onDone = () => {
|
|
61
|
+
const trimmed = value.trim();
|
|
62
|
+
if (trimmed.length === 0) {
|
|
63
|
+
dispatch({
|
|
64
|
+
type: 'DELETE_ANNOTATION',
|
|
65
|
+
id: isText.id
|
|
66
|
+
});
|
|
67
|
+
setSelectedId(null);
|
|
68
|
+
} else {
|
|
69
|
+
// Promote the accumulated transient edits into a single history entry.
|
|
70
|
+
dispatch({
|
|
71
|
+
type: 'UPDATE_ANNOTATION',
|
|
72
|
+
id: isText.id,
|
|
73
|
+
changes: {
|
|
74
|
+
text: value
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
setEditingTextId(null);
|
|
79
|
+
};
|
|
80
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
|
|
81
|
+
ref: inputRef,
|
|
82
|
+
value: value,
|
|
83
|
+
onChangeText: onChange,
|
|
84
|
+
onBlur: onDone,
|
|
85
|
+
onSubmitEditing: onDone,
|
|
86
|
+
multiline: true,
|
|
87
|
+
blurOnSubmit: true,
|
|
88
|
+
style: [styles.input, {
|
|
89
|
+
left: screen.x,
|
|
90
|
+
top: screen.y,
|
|
91
|
+
width: Math.max(width, 80),
|
|
92
|
+
fontSize,
|
|
93
|
+
color: isText.color,
|
|
94
|
+
lineHeight: fontSize * 1.2
|
|
95
|
+
}],
|
|
96
|
+
placeholder: "Text",
|
|
97
|
+
placeholderTextColor: "rgba(255,255,255,0.5)"
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
const styles = _reactNative.StyleSheet.create({
|
|
101
|
+
input: {
|
|
102
|
+
position: 'absolute',
|
|
103
|
+
padding: 0,
|
|
104
|
+
margin: 0,
|
|
105
|
+
textAlignVertical: 'top'
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=TextInputOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_EditorContext","_selectors","_math","_jsxRuntime","TextInputOverlay","editingTextId","setEditingTextId","annotations","dispatch","matrix","setSelectedId","useEditor","target","getAnnotationById","isText","type","inputRef","useRef","value","setValue","useState","useEffect","text","t","setTimeout","current","focus","clearTimeout","undefined","scaleFactor","Math","hypot","a","b","screen","applyToPoint","origin","fontSize","width","onChange","id","changes","transient","onDone","trimmed","trim","length","jsx","TextInput","ref","onChangeText","onBlur","onSubmitEditing","multiline","blurOnSubmit","style","styles","input","left","x","top","y","max","color","lineHeight","placeholder","placeholderTextColor","StyleSheet","create","position","padding","margin","textAlignVertical"],"sourceRoot":"..\\..\\..\\src","sources":["toolbar/TextInputOverlay.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ToolButton = ToolButton;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
9
|
+
function ToolButton({
|
|
10
|
+
label,
|
|
11
|
+
active,
|
|
12
|
+
disabled,
|
|
13
|
+
onPress
|
|
14
|
+
}) {
|
|
15
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
16
|
+
onPress: onPress,
|
|
17
|
+
disabled: disabled,
|
|
18
|
+
style: ({
|
|
19
|
+
pressed
|
|
20
|
+
}) => [styles.button, active && styles.active, disabled && styles.disabled, pressed && styles.pressed],
|
|
21
|
+
hitSlop: 6,
|
|
22
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
23
|
+
style: [styles.label, active && styles.activeLabel],
|
|
24
|
+
children: label
|
|
25
|
+
})
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
const styles = _reactNative.StyleSheet.create({
|
|
29
|
+
button: {
|
|
30
|
+
minWidth: 44,
|
|
31
|
+
height: 44,
|
|
32
|
+
paddingHorizontal: 8,
|
|
33
|
+
alignItems: 'center',
|
|
34
|
+
justifyContent: 'center',
|
|
35
|
+
borderRadius: 10,
|
|
36
|
+
marginHorizontal: 2
|
|
37
|
+
},
|
|
38
|
+
active: {
|
|
39
|
+
backgroundColor: '#1E90FF'
|
|
40
|
+
},
|
|
41
|
+
disabled: {
|
|
42
|
+
opacity: 0.35
|
|
43
|
+
},
|
|
44
|
+
pressed: {
|
|
45
|
+
opacity: 0.6
|
|
46
|
+
},
|
|
47
|
+
label: {
|
|
48
|
+
color: '#FFFFFF',
|
|
49
|
+
fontSize: 18
|
|
50
|
+
},
|
|
51
|
+
activeLabel: {
|
|
52
|
+
color: '#FFFFFF',
|
|
53
|
+
fontWeight: '700'
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=ToolButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_jsxRuntime","ToolButton","label","active","disabled","onPress","jsx","Pressable","style","pressed","styles","button","hitSlop","children","Text","activeLabel","StyleSheet","create","minWidth","height","paddingHorizontal","alignItems","justifyContent","borderRadius","marginHorizontal","backgroundColor","opacity","color","fontSize","fontWeight"],"sourceRoot":"..\\..\\..\\src","sources":["toolbar/ToolButton.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAA2D,IAAAC,WAAA,GAAAD,OAAA;AAEpD,SAASE,UAAUA,CAAC;EACzBC,KAAK;EACLC,MAAM;EACNC,QAAQ;EACRC;AAMF,CAAC,EAAE;EACD,oBACE,IAAAL,WAAA,CAAAM,GAAA,EAACR,YAAA,CAAAS,SAAS;IACRF,OAAO,EAAEA,OAAQ;IACjBD,QAAQ,EAAEA,QAAS;IACnBI,KAAK,EAAEA,CAAC;MAAEC;IAAQ,CAAC,KAAK,CACtBC,MAAM,CAACC,MAAM,EACbR,MAAM,IAAIO,MAAM,CAACP,MAAM,EACvBC,QAAQ,IAAIM,MAAM,CAACN,QAAQ,EAC3BK,OAAO,IAAIC,MAAM,CAACD,OAAO,CACzB;IACFG,OAAO,EAAE,CAAE;IAAAC,QAAA,eAEX,IAAAb,WAAA,CAAAM,GAAA,EAACR,YAAA,CAAAgB,IAAI;MAACN,KAAK,EAAE,CAACE,MAAM,CAACR,KAAK,EAAEC,MAAM,IAAIO,MAAM,CAACK,WAAW,CAAE;MAAAF,QAAA,EAAEX;IAAK,CAAO;EAAC,CAChE,CAAC;AAEhB;AAEA,MAAMQ,MAAM,GAAGM,uBAAU,CAACC,MAAM,CAAC;EAC/BN,MAAM,EAAE;IACNO,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;EACDrB,MAAM,EAAE;IAAEsB,eAAe,EAAE;EAAU,CAAC;EACtCrB,QAAQ,EAAE;IAAEsB,OAAO,EAAE;EAAK,CAAC;EAC3BjB,OAAO,EAAE;IAAEiB,OAAO,EAAE;EAAI,CAAC;EACzBxB,KAAK,EAAE;IAAEyB,KAAK,EAAE,SAAS;IAAEC,QAAQ,EAAE;EAAG,CAAC;EACzCb,WAAW,EAAE;IAAEY,KAAK,EAAE,SAAS;IAAEE,UAAU,EAAE;EAAM;AACrD,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Toolbar = Toolbar;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _EditorContext = require("../context/EditorContext");
|
|
9
|
+
var _ToolButton = require("./ToolButton");
|
|
10
|
+
var _ColorPicker = require("./ColorPicker");
|
|
11
|
+
var _CropControls = require("./CropControls");
|
|
12
|
+
var _RotationSlider = require("./RotationSlider");
|
|
13
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
|
+
const TOOLS = [{
|
|
15
|
+
tool: 'select',
|
|
16
|
+
label: '⇱'
|
|
17
|
+
}, {
|
|
18
|
+
tool: 'circle',
|
|
19
|
+
label: '◯'
|
|
20
|
+
}, {
|
|
21
|
+
tool: 'arrow',
|
|
22
|
+
label: '↗'
|
|
23
|
+
}, {
|
|
24
|
+
tool: 'marker',
|
|
25
|
+
label: '▬'
|
|
26
|
+
}, {
|
|
27
|
+
tool: 'freehand',
|
|
28
|
+
label: '✎'
|
|
29
|
+
}, {
|
|
30
|
+
tool: 'text',
|
|
31
|
+
label: 'T'
|
|
32
|
+
}, {
|
|
33
|
+
tool: 'crop',
|
|
34
|
+
label: '⛶'
|
|
35
|
+
}];
|
|
36
|
+
function Toolbar({
|
|
37
|
+
onDone
|
|
38
|
+
}) {
|
|
39
|
+
const {
|
|
40
|
+
tool,
|
|
41
|
+
setTool,
|
|
42
|
+
selectedId,
|
|
43
|
+
setSelectedId,
|
|
44
|
+
canUndo,
|
|
45
|
+
canRedo,
|
|
46
|
+
dispatch,
|
|
47
|
+
doc
|
|
48
|
+
} = (0, _EditorContext.useEditor)();
|
|
49
|
+
const cropping = tool === 'crop';
|
|
50
|
+
const deleteSelected = () => {
|
|
51
|
+
if (selectedId) {
|
|
52
|
+
dispatch({
|
|
53
|
+
type: 'DELETE_ANNOTATION',
|
|
54
|
+
id: selectedId
|
|
55
|
+
});
|
|
56
|
+
setSelectedId(null);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const bumpScale = delta => {
|
|
60
|
+
const next = Math.max(0.1, Math.min(4, doc.scene.scale + delta));
|
|
61
|
+
dispatch({
|
|
62
|
+
type: 'SET_SCENE',
|
|
63
|
+
changes: {
|
|
64
|
+
scale: next
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
69
|
+
style: styles.container,
|
|
70
|
+
children: cropping ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
71
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_RotationSlider.RotationSlider, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_CropControls.CropControls, {})]
|
|
72
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
73
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
74
|
+
style: styles.topRow,
|
|
75
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolButton.ToolButton, {
|
|
76
|
+
label: "\u21B6",
|
|
77
|
+
disabled: !canUndo,
|
|
78
|
+
onPress: () => dispatch({
|
|
79
|
+
type: 'UNDO'
|
|
80
|
+
})
|
|
81
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolButton.ToolButton, {
|
|
82
|
+
label: "\u21B7",
|
|
83
|
+
disabled: !canRedo,
|
|
84
|
+
onPress: () => dispatch({
|
|
85
|
+
type: 'REDO'
|
|
86
|
+
})
|
|
87
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolButton.ToolButton, {
|
|
88
|
+
label: "\u2212",
|
|
89
|
+
onPress: () => bumpScale(-0.1)
|
|
90
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolButton.ToolButton, {
|
|
91
|
+
label: "+",
|
|
92
|
+
onPress: () => bumpScale(0.1)
|
|
93
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolButton.ToolButton, {
|
|
94
|
+
label: "\uD83D\uDDD1",
|
|
95
|
+
disabled: !selectedId,
|
|
96
|
+
onPress: deleteSelected
|
|
97
|
+
}), onDone ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolButton.ToolButton, {
|
|
98
|
+
label: "Done",
|
|
99
|
+
active: true,
|
|
100
|
+
onPress: onDone
|
|
101
|
+
}) : null]
|
|
102
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_RotationSlider.RotationSlider, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ColorPicker.ColorPicker, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
103
|
+
style: styles.toolRow,
|
|
104
|
+
children: TOOLS.map(t => /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolButton.ToolButton, {
|
|
105
|
+
label: t.label,
|
|
106
|
+
active: tool === t.tool,
|
|
107
|
+
onPress: () => {
|
|
108
|
+
setTool(t.tool);
|
|
109
|
+
if (t.tool !== 'select') {
|
|
110
|
+
setSelectedId(null);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}, t.tool))
|
|
114
|
+
})]
|
|
115
|
+
})
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
const styles = _reactNative.StyleSheet.create({
|
|
119
|
+
container: {
|
|
120
|
+
backgroundColor: '#1C1C1E',
|
|
121
|
+
paddingVertical: 8,
|
|
122
|
+
gap: 8
|
|
123
|
+
},
|
|
124
|
+
topRow: {
|
|
125
|
+
flexDirection: 'row',
|
|
126
|
+
justifyContent: 'center',
|
|
127
|
+
alignItems: 'center',
|
|
128
|
+
flexWrap: 'wrap'
|
|
129
|
+
},
|
|
130
|
+
toolRow: {
|
|
131
|
+
flexDirection: 'row',
|
|
132
|
+
justifyContent: 'center',
|
|
133
|
+
alignItems: 'center',
|
|
134
|
+
flexWrap: 'wrap'
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=Toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_EditorContext","_ToolButton","_ColorPicker","_CropControls","_RotationSlider","_jsxRuntime","TOOLS","tool","label","Toolbar","onDone","setTool","selectedId","setSelectedId","canUndo","canRedo","dispatch","doc","useEditor","cropping","deleteSelected","type","id","bumpScale","delta","next","Math","max","min","scene","scale","changes","jsx","View","style","styles","container","children","jsxs","Fragment","RotationSlider","CropControls","topRow","ToolButton","disabled","onPress","active","ColorPicker","toolRow","map","t","StyleSheet","create","backgroundColor","paddingVertical","gap","flexDirection","justifyContent","alignItems","flexWrap"],"sourceRoot":"..\\..\\..\\src","sources":["toolbar/Toolbar.tsx"],"mappings":"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","ignoreList":[]}
|