@archireport/react-native-drawing 0.2.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/README.md +181 -0
- package/lib/commonjs/DrawingEditor.js +815 -0
- package/lib/commonjs/DrawingEditor.js.map +1 -0
- package/lib/commonjs/assets/toolbar-icons/arrow-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/arrow-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/arrow.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/circle-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/circle-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/circle.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/freehand-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/freehand-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/freehand.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/line-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/line-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/line.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/measure-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/measure-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/measure.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/move-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/move-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/move.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/polygon-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/polygon-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/polygon.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/rectangle-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/rectangle-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/rectangle.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/text-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/text-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/text.png +0 -0
- package/lib/commonjs/components/ColorPalette.js +379 -0
- package/lib/commonjs/components/ColorPalette.js.map +1 -0
- package/lib/commonjs/components/LineWidthSlider.js +70 -0
- package/lib/commonjs/components/LineWidthSlider.js.map +1 -0
- package/lib/commonjs/components/MeasurementEditModal.js +153 -0
- package/lib/commonjs/components/MeasurementEditModal.js.map +1 -0
- package/lib/commonjs/components/MiniMap.js +244 -0
- package/lib/commonjs/components/MiniMap.js.map +1 -0
- package/lib/commonjs/components/TextAnnotation.js +162 -0
- package/lib/commonjs/components/TextAnnotation.js.map +1 -0
- package/lib/commonjs/components/TextEditModal.js +133 -0
- package/lib/commonjs/components/TextEditModal.js.map +1 -0
- package/lib/commonjs/components/Toolbar.js +198 -0
- package/lib/commonjs/components/Toolbar.js.map +1 -0
- package/lib/commonjs/components/ZoomBadge.js +161 -0
- package/lib/commonjs/components/ZoomBadge.js.map +1 -0
- package/lib/commonjs/hooks/useFreehandGesture.js +173 -0
- package/lib/commonjs/hooks/useFreehandGesture.js.map +1 -0
- package/lib/commonjs/hooks/usePolygonGesture.js +109 -0
- package/lib/commonjs/hooks/usePolygonGesture.js.map +1 -0
- package/lib/commonjs/hooks/useSelectionGesture.js +236 -0
- package/lib/commonjs/hooks/useSelectionGesture.js.map +1 -0
- package/lib/commonjs/hooks/useShapeGesture.js +181 -0
- package/lib/commonjs/hooks/useShapeGesture.js.map +1 -0
- package/lib/commonjs/hooks/useViewportGesture.js +238 -0
- package/lib/commonjs/hooks/useViewportGesture.js.map +1 -0
- package/lib/commonjs/index.js +104 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/renderers/ArrowRenderer.js +118 -0
- package/lib/commonjs/renderers/ArrowRenderer.js.map +1 -0
- package/lib/commonjs/renderers/CircleRenderer.js +51 -0
- package/lib/commonjs/renderers/CircleRenderer.js.map +1 -0
- package/lib/commonjs/renderers/FreehandRenderer.js +31 -0
- package/lib/commonjs/renderers/FreehandRenderer.js.map +1 -0
- package/lib/commonjs/renderers/InProgressRenderer.js +174 -0
- package/lib/commonjs/renderers/InProgressRenderer.js.map +1 -0
- package/lib/commonjs/renderers/LineRenderer.js +27 -0
- package/lib/commonjs/renderers/LineRenderer.js.map +1 -0
- package/lib/commonjs/renderers/MeasurementRenderer.js +134 -0
- package/lib/commonjs/renderers/MeasurementRenderer.js.map +1 -0
- package/lib/commonjs/renderers/ObjectRenderer.js +65 -0
- package/lib/commonjs/renderers/ObjectRenderer.js.map +1 -0
- package/lib/commonjs/renderers/PolygonRenderer.js +46 -0
- package/lib/commonjs/renderers/PolygonRenderer.js.map +1 -0
- package/lib/commonjs/renderers/RectRenderer.js +51 -0
- package/lib/commonjs/renderers/RectRenderer.js.map +1 -0
- package/lib/commonjs/renderers/SelectedObjectRenderer.js +592 -0
- package/lib/commonjs/renderers/SelectedObjectRenderer.js.map +1 -0
- package/lib/commonjs/renderers/SelectionOverlay.js +120 -0
- package/lib/commonjs/renderers/SelectionOverlay.js.map +1 -0
- package/lib/commonjs/store/useDrawingStore.js +354 -0
- package/lib/commonjs/store/useDrawingStore.js.map +1 -0
- package/lib/commonjs/types.js +6 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils/colors.js +44 -0
- package/lib/commonjs/utils/colors.js.map +1 -0
- package/lib/commonjs/utils/coordinates.js +81 -0
- package/lib/commonjs/utils/coordinates.js.map +1 -0
- package/lib/commonjs/utils/hitTesting.js +181 -0
- package/lib/commonjs/utils/hitTesting.js.map +1 -0
- package/lib/commonjs/utils/serialization.js +42 -0
- package/lib/commonjs/utils/serialization.js.map +1 -0
- package/lib/commonjs/utils/shapeDetection.js +151 -0
- package/lib/commonjs/utils/shapeDetection.js.map +1 -0
- package/lib/commonjs/utils/smoothing.js +85 -0
- package/lib/commonjs/utils/smoothing.js.map +1 -0
- package/lib/module/DrawingEditor.js +811 -0
- package/lib/module/DrawingEditor.js.map +1 -0
- package/lib/module/assets/toolbar-icons/arrow-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/arrow-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/arrow.png +0 -0
- package/lib/module/assets/toolbar-icons/circle-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/circle-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/circle.png +0 -0
- package/lib/module/assets/toolbar-icons/freehand-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/freehand-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/freehand.png +0 -0
- package/lib/module/assets/toolbar-icons/line-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/line-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/line.png +0 -0
- package/lib/module/assets/toolbar-icons/measure-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/measure-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/measure.png +0 -0
- package/lib/module/assets/toolbar-icons/move-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/move-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/move.png +0 -0
- package/lib/module/assets/toolbar-icons/polygon-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/polygon-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/polygon.png +0 -0
- package/lib/module/assets/toolbar-icons/rectangle-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/rectangle-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/rectangle.png +0 -0
- package/lib/module/assets/toolbar-icons/text-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/text-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/text.png +0 -0
- package/lib/module/components/ColorPalette.js +374 -0
- package/lib/module/components/ColorPalette.js.map +1 -0
- package/lib/module/components/LineWidthSlider.js +64 -0
- package/lib/module/components/LineWidthSlider.js.map +1 -0
- package/lib/module/components/MeasurementEditModal.js +148 -0
- package/lib/module/components/MeasurementEditModal.js.map +1 -0
- package/lib/module/components/MiniMap.js +239 -0
- package/lib/module/components/MiniMap.js.map +1 -0
- package/lib/module/components/TextAnnotation.js +157 -0
- package/lib/module/components/TextAnnotation.js.map +1 -0
- package/lib/module/components/TextEditModal.js +128 -0
- package/lib/module/components/TextEditModal.js.map +1 -0
- package/lib/module/components/Toolbar.js +193 -0
- package/lib/module/components/Toolbar.js.map +1 -0
- package/lib/module/components/ZoomBadge.js +155 -0
- package/lib/module/components/ZoomBadge.js.map +1 -0
- package/lib/module/hooks/useFreehandGesture.js +169 -0
- package/lib/module/hooks/useFreehandGesture.js.map +1 -0
- package/lib/module/hooks/usePolygonGesture.js +106 -0
- package/lib/module/hooks/usePolygonGesture.js.map +1 -0
- package/lib/module/hooks/useSelectionGesture.js +232 -0
- package/lib/module/hooks/useSelectionGesture.js.map +1 -0
- package/lib/module/hooks/useShapeGesture.js +177 -0
- package/lib/module/hooks/useShapeGesture.js.map +1 -0
- package/lib/module/hooks/useViewportGesture.js +234 -0
- package/lib/module/hooks/useViewportGesture.js.map +1 -0
- package/lib/module/index.js +20 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/renderers/ArrowRenderer.js +113 -0
- package/lib/module/renderers/ArrowRenderer.js.map +1 -0
- package/lib/module/renderers/CircleRenderer.js +46 -0
- package/lib/module/renderers/CircleRenderer.js.map +1 -0
- package/lib/module/renderers/FreehandRenderer.js +26 -0
- package/lib/module/renderers/FreehandRenderer.js.map +1 -0
- package/lib/module/renderers/InProgressRenderer.js +169 -0
- package/lib/module/renderers/InProgressRenderer.js.map +1 -0
- package/lib/module/renderers/LineRenderer.js +22 -0
- package/lib/module/renderers/LineRenderer.js.map +1 -0
- package/lib/module/renderers/MeasurementRenderer.js +129 -0
- package/lib/module/renderers/MeasurementRenderer.js.map +1 -0
- package/lib/module/renderers/ObjectRenderer.js +60 -0
- package/lib/module/renderers/ObjectRenderer.js.map +1 -0
- package/lib/module/renderers/PolygonRenderer.js +41 -0
- package/lib/module/renderers/PolygonRenderer.js.map +1 -0
- package/lib/module/renderers/RectRenderer.js +46 -0
- package/lib/module/renderers/RectRenderer.js.map +1 -0
- package/lib/module/renderers/SelectedObjectRenderer.js +587 -0
- package/lib/module/renderers/SelectedObjectRenderer.js.map +1 -0
- package/lib/module/renderers/SelectionOverlay.js +116 -0
- package/lib/module/renderers/SelectionOverlay.js.map +1 -0
- package/lib/module/store/useDrawingStore.js +350 -0
- package/lib/module/store/useDrawingStore.js.map +1 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils/colors.js +40 -0
- package/lib/module/utils/colors.js.map +1 -0
- package/lib/module/utils/coordinates.js +71 -0
- package/lib/module/utils/coordinates.js.map +1 -0
- package/lib/module/utils/hitTesting.js +171 -0
- package/lib/module/utils/hitTesting.js.map +1 -0
- package/lib/module/utils/serialization.js +36 -0
- package/lib/module/utils/serialization.js.map +1 -0
- package/lib/module/utils/shapeDetection.js +147 -0
- package/lib/module/utils/shapeDetection.js.map +1 -0
- package/lib/module/utils/smoothing.js +80 -0
- package/lib/module/utils/smoothing.js.map +1 -0
- package/lib/typescript/DrawingEditor.d.ts +3 -0
- package/lib/typescript/DrawingEditor.d.ts.map +1 -0
- package/lib/typescript/components/ColorPalette.d.ts +9 -0
- package/lib/typescript/components/ColorPalette.d.ts.map +1 -0
- package/lib/typescript/components/LineWidthSlider.d.ts +11 -0
- package/lib/typescript/components/LineWidthSlider.d.ts.map +1 -0
- package/lib/typescript/components/MeasurementEditModal.d.ts +11 -0
- package/lib/typescript/components/MeasurementEditModal.d.ts.map +1 -0
- package/lib/typescript/components/MiniMap.d.ts +23 -0
- package/lib/typescript/components/MiniMap.d.ts.map +1 -0
- package/lib/typescript/components/TextAnnotation.d.ts +22 -0
- package/lib/typescript/components/TextAnnotation.d.ts.map +1 -0
- package/lib/typescript/components/TextEditModal.d.ts +10 -0
- package/lib/typescript/components/TextEditModal.d.ts.map +1 -0
- package/lib/typescript/components/Toolbar.d.ts +13 -0
- package/lib/typescript/components/Toolbar.d.ts.map +1 -0
- package/lib/typescript/components/ZoomBadge.d.ts +9 -0
- package/lib/typescript/components/ZoomBadge.d.ts.map +1 -0
- package/lib/typescript/hooks/useFreehandGesture.d.ts +47 -0
- package/lib/typescript/hooks/useFreehandGesture.d.ts.map +1 -0
- package/lib/typescript/hooks/usePolygonGesture.d.ts +47 -0
- package/lib/typescript/hooks/usePolygonGesture.d.ts.map +1 -0
- package/lib/typescript/hooks/useSelectionGesture.d.ts +32 -0
- package/lib/typescript/hooks/useSelectionGesture.d.ts.map +1 -0
- package/lib/typescript/hooks/useShapeGesture.d.ts +54 -0
- package/lib/typescript/hooks/useShapeGesture.d.ts.map +1 -0
- package/lib/typescript/hooks/useViewportGesture.d.ts +37 -0
- package/lib/typescript/hooks/useViewportGesture.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +11 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/renderers/ArrowRenderer.d.ts +9 -0
- package/lib/typescript/renderers/ArrowRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/CircleRenderer.d.ts +9 -0
- package/lib/typescript/renderers/CircleRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/FreehandRenderer.d.ts +9 -0
- package/lib/typescript/renderers/FreehandRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/InProgressRenderer.d.ts +32 -0
- package/lib/typescript/renderers/InProgressRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/LineRenderer.d.ts +9 -0
- package/lib/typescript/renderers/LineRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/MeasurementRenderer.d.ts +9 -0
- package/lib/typescript/renderers/MeasurementRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/ObjectRenderer.d.ts +12 -0
- package/lib/typescript/renderers/ObjectRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/PolygonRenderer.d.ts +13 -0
- package/lib/typescript/renderers/PolygonRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/RectRenderer.d.ts +9 -0
- package/lib/typescript/renderers/RectRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/SelectedObjectRenderer.d.ts +18 -0
- package/lib/typescript/renderers/SelectedObjectRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/SelectionOverlay.d.ts +21 -0
- package/lib/typescript/renderers/SelectionOverlay.d.ts.map +1 -0
- package/lib/typescript/store/useDrawingStore.d.ts +30 -0
- package/lib/typescript/store/useDrawingStore.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +130 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/lib/typescript/utils/colors.d.ts +11 -0
- package/lib/typescript/utils/colors.d.ts.map +1 -0
- package/lib/typescript/utils/coordinates.d.ts +34 -0
- package/lib/typescript/utils/coordinates.d.ts.map +1 -0
- package/lib/typescript/utils/hitTesting.d.ts +18 -0
- package/lib/typescript/utils/hitTesting.d.ts.map +1 -0
- package/lib/typescript/utils/serialization.d.ts +17 -0
- package/lib/typescript/utils/serialization.d.ts.map +1 -0
- package/lib/typescript/utils/shapeDetection.d.ts +22 -0
- package/lib/typescript/utils/shapeDetection.d.ts.map +1 -0
- package/lib/typescript/utils/smoothing.d.ts +16 -0
- package/lib/typescript/utils/smoothing.d.ts.map +1 -0
- package/package.json +108 -0
- package/src/DrawingEditor.tsx +1071 -0
- package/src/assets/toolbar-icons/arrow-disabled.png +0 -0
- package/src/assets/toolbar-icons/arrow-enabled.png +0 -0
- package/src/assets/toolbar-icons/arrow.png +0 -0
- package/src/assets/toolbar-icons/circle-disabled.png +0 -0
- package/src/assets/toolbar-icons/circle-enabled.png +0 -0
- package/src/assets/toolbar-icons/circle.png +0 -0
- package/src/assets/toolbar-icons/freehand-disabled.png +0 -0
- package/src/assets/toolbar-icons/freehand-enabled.png +0 -0
- package/src/assets/toolbar-icons/freehand.png +0 -0
- package/src/assets/toolbar-icons/line-disabled.png +0 -0
- package/src/assets/toolbar-icons/line-enabled.png +0 -0
- package/src/assets/toolbar-icons/line.png +0 -0
- package/src/assets/toolbar-icons/measure-disabled.png +0 -0
- package/src/assets/toolbar-icons/measure-enabled.png +0 -0
- package/src/assets/toolbar-icons/measure.png +0 -0
- package/src/assets/toolbar-icons/move-disabled.png +0 -0
- package/src/assets/toolbar-icons/move-enabled.png +0 -0
- package/src/assets/toolbar-icons/move.png +0 -0
- package/src/assets/toolbar-icons/polygon-disabled.png +0 -0
- package/src/assets/toolbar-icons/polygon-enabled.png +0 -0
- package/src/assets/toolbar-icons/polygon.png +0 -0
- package/src/assets/toolbar-icons/rectangle-disabled.png +0 -0
- package/src/assets/toolbar-icons/rectangle-enabled.png +0 -0
- package/src/assets/toolbar-icons/rectangle.png +0 -0
- package/src/assets/toolbar-icons/text-disabled.png +0 -0
- package/src/assets/toolbar-icons/text-enabled.png +0 -0
- package/src/assets/toolbar-icons/text.png +0 -0
- package/src/components/ColorPalette.tsx +497 -0
- package/src/components/LineWidthSlider.tsx +87 -0
- package/src/components/MeasurementEditModal.tsx +163 -0
- package/src/components/MiniMap.tsx +275 -0
- package/src/components/TextAnnotation.tsx +198 -0
- package/src/components/TextEditModal.tsx +139 -0
- package/src/components/Toolbar.tsx +254 -0
- package/src/components/ZoomBadge.tsx +166 -0
- package/src/hooks/useFreehandGesture.ts +249 -0
- package/src/hooks/usePolygonGesture.ts +162 -0
- package/src/hooks/useSelectionGesture.ts +293 -0
- package/src/hooks/useShapeGesture.ts +256 -0
- package/src/hooks/useViewportGesture.ts +337 -0
- package/src/index.tsx +51 -0
- package/src/renderers/ArrowRenderer.tsx +123 -0
- package/src/renderers/CircleRenderer.tsx +60 -0
- package/src/renderers/FreehandRenderer.tsx +33 -0
- package/src/renderers/InProgressRenderer.tsx +217 -0
- package/src/renderers/LineRenderer.tsx +34 -0
- package/src/renderers/MeasurementRenderer.tsx +179 -0
- package/src/renderers/ObjectRenderer.tsx +42 -0
- package/src/renderers/PolygonRenderer.tsx +66 -0
- package/src/renderers/RectRenderer.tsx +60 -0
- package/src/renderers/SelectedObjectRenderer.tsx +738 -0
- package/src/renderers/SelectionOverlay.tsx +170 -0
- package/src/store/useDrawingStore.ts +357 -0
- package/src/types.ts +186 -0
- package/src/utils/colors.ts +98 -0
- package/src/utils/coordinates.ts +75 -0
- package/src/utils/hitTesting.ts +242 -0
- package/src/utils/serialization.ts +45 -0
- package/src/utils/shapeDetection.ts +160 -0
- package/src/utils/smoothing.ts +84 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useFreehandGesture = useFreehandGesture;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNativeGestureHandler = require("react-native-gesture-handler");
|
|
9
|
+
var _reactNativeReanimated = require("react-native-reanimated");
|
|
10
|
+
var _reactNativeSkia = require("@shopify/react-native-skia");
|
|
11
|
+
var _smoothing = require("../utils/smoothing");
|
|
12
|
+
var _coordinates = require("../utils/coordinates");
|
|
13
|
+
var _serialization = require("../utils/serialization");
|
|
14
|
+
var _shapeDetection = require("../utils/shapeDetection");
|
|
15
|
+
var _useDrawingStore = require("../store/useDrawingStore");
|
|
16
|
+
const MIN_GESTURE_DURATION_MS = 300;
|
|
17
|
+
const MIN_GESTURE_DISTANCE = 5;
|
|
18
|
+
function useFreehandGesture({
|
|
19
|
+
colorSV,
|
|
20
|
+
lineWidthSV,
|
|
21
|
+
fillColorSV,
|
|
22
|
+
fillAlphaSV,
|
|
23
|
+
canvasSize,
|
|
24
|
+
enabled,
|
|
25
|
+
imageOffsetX,
|
|
26
|
+
imageOffsetY,
|
|
27
|
+
imageWidth,
|
|
28
|
+
imageHeight,
|
|
29
|
+
viewScale,
|
|
30
|
+
viewTranslateX,
|
|
31
|
+
viewTranslateY
|
|
32
|
+
}) {
|
|
33
|
+
const rawPoints = (0, _reactNativeReanimated.useSharedValue)([]);
|
|
34
|
+
const isDrawing = (0, _reactNativeReanimated.useSharedValue)(false);
|
|
35
|
+
const gestureStartTime = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
36
|
+
const gestureStartPos = (0, _reactNativeReanimated.useSharedValue)([0, 0]);
|
|
37
|
+
const addObject = (0, _useDrawingStore.useDrawingStore)(s => s.addObject);
|
|
38
|
+
|
|
39
|
+
// Build the path in the Skia worklet on every points update
|
|
40
|
+
const inProgressPath = (0, _reactNativeReanimated.useDerivedValue)(() => {
|
|
41
|
+
if (!isDrawing.value) return null;
|
|
42
|
+
const svg = (0, _smoothing.buildSmoothedPathFromFlat)(rawPoints.value);
|
|
43
|
+
if (!svg) return null;
|
|
44
|
+
const path = _reactNativeSkia.Skia.Path.MakeFromSVGString(svg);
|
|
45
|
+
return path;
|
|
46
|
+
});
|
|
47
|
+
const inProgressColor = (0, _reactNativeReanimated.useDerivedValue)(() => colorSV.value);
|
|
48
|
+
const inProgressWidth = (0, _reactNativeReanimated.useDerivedValue)(() => lineWidthSV.value);
|
|
49
|
+
const commitPath = (0, _react.useCallback)((flatPoints, durationMs, color, lineWidth, fillColor, fillAlpha) => {
|
|
50
|
+
const n = flatPoints.length / 2;
|
|
51
|
+
if (n < 2) return;
|
|
52
|
+
|
|
53
|
+
// Convert flat array to Point[]
|
|
54
|
+
const pixelPoints = [];
|
|
55
|
+
for (let i = 0; i < n; i++) {
|
|
56
|
+
pixelPoints.push({
|
|
57
|
+
x: flatPoints[i * 2],
|
|
58
|
+
y: flatPoints[i * 2 + 1]
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Try auto shape detection
|
|
63
|
+
const detected = (0, _shapeDetection.detectShape)(pixelPoints, durationMs);
|
|
64
|
+
let obj;
|
|
65
|
+
if (detected) {
|
|
66
|
+
const from = (0, _coordinates.normalize)(detected.from, canvasSize);
|
|
67
|
+
const to = (0, _coordinates.normalize)(detected.to, canvasSize);
|
|
68
|
+
switch (detected.type) {
|
|
69
|
+
case "circle":
|
|
70
|
+
obj = {
|
|
71
|
+
id: (0, _serialization.generateId)(),
|
|
72
|
+
type: "circle",
|
|
73
|
+
from,
|
|
74
|
+
to,
|
|
75
|
+
color,
|
|
76
|
+
lineWidth,
|
|
77
|
+
backgroundColor: fillColor ?? undefined,
|
|
78
|
+
backgroundAlpha: fillColor ? fillAlpha : undefined
|
|
79
|
+
};
|
|
80
|
+
break;
|
|
81
|
+
case "rectangle":
|
|
82
|
+
obj = {
|
|
83
|
+
id: (0, _serialization.generateId)(),
|
|
84
|
+
type: "rectangle",
|
|
85
|
+
from,
|
|
86
|
+
to,
|
|
87
|
+
color,
|
|
88
|
+
lineWidth,
|
|
89
|
+
backgroundColor: fillColor ?? undefined,
|
|
90
|
+
backgroundAlpha: fillColor ? fillAlpha : undefined
|
|
91
|
+
};
|
|
92
|
+
break;
|
|
93
|
+
case "line":
|
|
94
|
+
obj = {
|
|
95
|
+
id: (0, _serialization.generateId)(),
|
|
96
|
+
type: "line",
|
|
97
|
+
from,
|
|
98
|
+
to,
|
|
99
|
+
color,
|
|
100
|
+
lineWidth
|
|
101
|
+
};
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
} else {
|
|
105
|
+
// Store as freehand with normalized points
|
|
106
|
+
const normalizedPoints = pixelPoints.map(p => (0, _coordinates.normalize)(p, canvasSize));
|
|
107
|
+
obj = {
|
|
108
|
+
id: (0, _serialization.generateId)(),
|
|
109
|
+
type: "freehand",
|
|
110
|
+
points: normalizedPoints,
|
|
111
|
+
color,
|
|
112
|
+
lineWidth
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
addObject(obj);
|
|
116
|
+
}, [canvasSize, addObject]);
|
|
117
|
+
const gesture = _reactNativeGestureHandler.Gesture.Pan().enabled(enabled).maxPointers(1).minDistance(0).onBegin(e => {
|
|
118
|
+
"worklet";
|
|
119
|
+
|
|
120
|
+
const canvas = (0, _coordinates.screenToCanvas)(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
121
|
+
const x = Math.max(0, Math.min(imageWidth.value, canvas.x - imageOffsetX.value));
|
|
122
|
+
const y = Math.max(0, Math.min(imageHeight.value, canvas.y - imageOffsetY.value));
|
|
123
|
+
isDrawing.value = true;
|
|
124
|
+
gestureStartTime.value = Date.now();
|
|
125
|
+
gestureStartPos.value = [x, y];
|
|
126
|
+
rawPoints.value = [x, y];
|
|
127
|
+
}).onUpdate(e => {
|
|
128
|
+
"worklet";
|
|
129
|
+
|
|
130
|
+
const canvas = (0, _coordinates.screenToCanvas)(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
131
|
+
const x = Math.max(0, Math.min(imageWidth.value, canvas.x - imageOffsetX.value));
|
|
132
|
+
const y = Math.max(0, Math.min(imageHeight.value, canvas.y - imageOffsetY.value));
|
|
133
|
+
// Append new point
|
|
134
|
+
rawPoints.value = [...rawPoints.value, x, y];
|
|
135
|
+
}).onEnd(e => {
|
|
136
|
+
"worklet";
|
|
137
|
+
|
|
138
|
+
const canvas = (0, _coordinates.screenToCanvas)(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
139
|
+
const x = Math.max(0, Math.min(imageWidth.value, canvas.x - imageOffsetX.value));
|
|
140
|
+
const y = Math.max(0, Math.min(imageHeight.value, canvas.y - imageOffsetY.value));
|
|
141
|
+
const duration = Date.now() - gestureStartTime.value;
|
|
142
|
+
const [sx, sy] = gestureStartPos.value;
|
|
143
|
+
const dist = Math.sqrt((x - sx) ** 2 + (y - sy) ** 2);
|
|
144
|
+
|
|
145
|
+
// Cancel accidental taps (< 300ms and < 5px movement)
|
|
146
|
+
if (duration < MIN_GESTURE_DURATION_MS && dist < MIN_GESTURE_DISTANCE) {
|
|
147
|
+
isDrawing.value = false;
|
|
148
|
+
rawPoints.value = [];
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const pts = rawPoints.value;
|
|
152
|
+
const color = colorSV.value;
|
|
153
|
+
const lw = lineWidthSV.value;
|
|
154
|
+
const fc = fillColorSV.value;
|
|
155
|
+
const fa = fillAlphaSV.value;
|
|
156
|
+
isDrawing.value = false;
|
|
157
|
+
rawPoints.value = [];
|
|
158
|
+
(0, _reactNativeReanimated.runOnJS)(commitPath)(pts, duration, color, lw, fc, fa);
|
|
159
|
+
}).onFinalize(() => {
|
|
160
|
+
"worklet";
|
|
161
|
+
|
|
162
|
+
isDrawing.value = false;
|
|
163
|
+
rawPoints.value = [];
|
|
164
|
+
});
|
|
165
|
+
return {
|
|
166
|
+
gesture,
|
|
167
|
+
inProgressPath,
|
|
168
|
+
inProgressColor,
|
|
169
|
+
inProgressWidth,
|
|
170
|
+
isDrawing
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=useFreehandGesture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNativeGestureHandler","_reactNativeReanimated","_reactNativeSkia","_smoothing","_coordinates","_serialization","_shapeDetection","_useDrawingStore","MIN_GESTURE_DURATION_MS","MIN_GESTURE_DISTANCE","useFreehandGesture","colorSV","lineWidthSV","fillColorSV","fillAlphaSV","canvasSize","enabled","imageOffsetX","imageOffsetY","imageWidth","imageHeight","viewScale","viewTranslateX","viewTranslateY","rawPoints","useSharedValue","isDrawing","gestureStartTime","gestureStartPos","addObject","useDrawingStore","s","inProgressPath","useDerivedValue","value","svg","buildSmoothedPathFromFlat","path","Skia","Path","MakeFromSVGString","inProgressColor","inProgressWidth","commitPath","useCallback","flatPoints","durationMs","color","lineWidth","fillColor","fillAlpha","n","length","pixelPoints","i","push","x","y","detected","detectShape","obj","from","normalize","to","type","id","generateId","backgroundColor","undefined","backgroundAlpha","normalizedPoints","map","p","points","gesture","Gesture","Pan","maxPointers","minDistance","onBegin","e","canvas","screenToCanvas","Math","max","min","Date","now","onUpdate","onEnd","duration","sx","sy","dist","sqrt","pts","lw","fc","fa","runOnJS","onFinalize"],"sourceRoot":"../../../src","sources":["hooks/useFreehandGesture.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.usePolygonGesture = usePolygonGesture;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNativeGestureHandler = require("react-native-gesture-handler");
|
|
9
|
+
var _reactNativeReanimated = require("react-native-reanimated");
|
|
10
|
+
var _coordinates = require("../utils/coordinates");
|
|
11
|
+
var _serialization = require("../utils/serialization");
|
|
12
|
+
var _useDrawingStore = require("../store/useDrawingStore");
|
|
13
|
+
/** Distance in pixels to auto-close the polygon when tapping near the first point */
|
|
14
|
+
const CLOSE_DISTANCE = 30;
|
|
15
|
+
function usePolygonGesture({
|
|
16
|
+
colorSV,
|
|
17
|
+
lineWidthSV,
|
|
18
|
+
fillColorSV,
|
|
19
|
+
fillAlphaSV,
|
|
20
|
+
canvasSize,
|
|
21
|
+
enabled,
|
|
22
|
+
imageOffsetX,
|
|
23
|
+
imageOffsetY,
|
|
24
|
+
imageWidth,
|
|
25
|
+
imageHeight,
|
|
26
|
+
viewScale,
|
|
27
|
+
viewTranslateX,
|
|
28
|
+
viewTranslateY
|
|
29
|
+
}) {
|
|
30
|
+
// Flat array of pixel coordinates: [x0, y0, x1, y1, ...]
|
|
31
|
+
const pointsFlat = (0, _reactNativeReanimated.useSharedValue)([]);
|
|
32
|
+
const pointCount = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
33
|
+
const isActive = (0, _reactNativeReanimated.useSharedValue)(false);
|
|
34
|
+
const addObject = (0, _useDrawingStore.useDrawingStore)(s => s.addObject);
|
|
35
|
+
const commitPolygon = (0, _react.useCallback)((flatPoints, closed, color, lineWidth, fillColor, fillAlpha) => {
|
|
36
|
+
const count = flatPoints.length / 2;
|
|
37
|
+
if (count < 3) return; // Need at least 3 points for a polygon
|
|
38
|
+
|
|
39
|
+
const normalizedPoints = [];
|
|
40
|
+
for (let i = 0; i < count; i++) {
|
|
41
|
+
normalizedPoints.push((0, _coordinates.normalize)({
|
|
42
|
+
x: flatPoints[i * 2],
|
|
43
|
+
y: flatPoints[i * 2 + 1]
|
|
44
|
+
}, canvasSize));
|
|
45
|
+
}
|
|
46
|
+
const obj = {
|
|
47
|
+
id: (0, _serialization.generateId)(),
|
|
48
|
+
type: "polygon",
|
|
49
|
+
points: normalizedPoints,
|
|
50
|
+
closed,
|
|
51
|
+
color,
|
|
52
|
+
lineWidth,
|
|
53
|
+
backgroundColor: closed && fillColor ? fillColor : undefined,
|
|
54
|
+
backgroundAlpha: closed && fillColor ? fillAlpha : undefined
|
|
55
|
+
};
|
|
56
|
+
addObject(obj);
|
|
57
|
+
}, [canvasSize, addObject]);
|
|
58
|
+
const resetState = (0, _react.useCallback)(() => {
|
|
59
|
+
pointsFlat.value = [];
|
|
60
|
+
pointCount.value = 0;
|
|
61
|
+
isActive.value = false;
|
|
62
|
+
}, [pointsFlat, pointCount, isActive]);
|
|
63
|
+
const gesture = _reactNativeGestureHandler.Gesture.Tap().enabled(enabled).maxDuration(500).onEnd(e => {
|
|
64
|
+
"worklet";
|
|
65
|
+
|
|
66
|
+
const canvas = (0, _coordinates.screenToCanvas)(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
67
|
+
const x = Math.max(0, Math.min(imageWidth.value, canvas.x - imageOffsetX.value));
|
|
68
|
+
const y = Math.max(0, Math.min(imageHeight.value, canvas.y - imageOffsetY.value));
|
|
69
|
+
const flat = pointsFlat.value;
|
|
70
|
+
const count = pointCount.value;
|
|
71
|
+
|
|
72
|
+
// Check if should close
|
|
73
|
+
if (count >= 3) {
|
|
74
|
+
const firstX = flat[0];
|
|
75
|
+
const firstY = flat[1];
|
|
76
|
+
const dx = x - firstX;
|
|
77
|
+
const dy = y - firstY;
|
|
78
|
+
const dist = Math.sqrt(dx * dx + dy * dy);
|
|
79
|
+
if (dist < CLOSE_DISTANCE) {
|
|
80
|
+
// Close — commit on JS thread
|
|
81
|
+
const snapshot = flat.slice();
|
|
82
|
+
(0, _reactNativeReanimated.runOnJS)(commitPolygon)(snapshot, true, colorSV.value, lineWidthSV.value, fillColorSV.value, fillAlphaSV.value);
|
|
83
|
+
pointsFlat.value = [];
|
|
84
|
+
pointCount.value = 0;
|
|
85
|
+
isActive.value = false;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Add point
|
|
91
|
+
const newFlat = [...flat, x, y];
|
|
92
|
+
pointsFlat.value = newFlat;
|
|
93
|
+
pointCount.value = count + 1;
|
|
94
|
+
isActive.value = true;
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
/** Cancel the current polygon construction (e.g. on tool switch) — discard points */
|
|
98
|
+
const cancel = (0, _react.useCallback)(() => {
|
|
99
|
+
resetState();
|
|
100
|
+
}, [resetState]);
|
|
101
|
+
return {
|
|
102
|
+
gesture,
|
|
103
|
+
pointsFlat,
|
|
104
|
+
pointCount,
|
|
105
|
+
isActive,
|
|
106
|
+
cancel
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=usePolygonGesture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNativeGestureHandler","_reactNativeReanimated","_coordinates","_serialization","_useDrawingStore","CLOSE_DISTANCE","usePolygonGesture","colorSV","lineWidthSV","fillColorSV","fillAlphaSV","canvasSize","enabled","imageOffsetX","imageOffsetY","imageWidth","imageHeight","viewScale","viewTranslateX","viewTranslateY","pointsFlat","useSharedValue","pointCount","isActive","addObject","useDrawingStore","s","commitPolygon","useCallback","flatPoints","closed","color","lineWidth","fillColor","fillAlpha","count","length","normalizedPoints","i","push","normalize","x","y","obj","id","generateId","type","points","backgroundColor","undefined","backgroundAlpha","resetState","value","gesture","Gesture","Tap","maxDuration","onEnd","e","canvas","screenToCanvas","Math","max","min","flat","firstX","firstY","dx","dy","dist","sqrt","snapshot","slice","runOnJS","newFlat","cancel"],"sourceRoot":"../../../src","sources":["hooks/usePolygonGesture.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useSelectionGesture = useSelectionGesture;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNativeGestureHandler = require("react-native-gesture-handler");
|
|
9
|
+
var _reactNativeReanimated = require("react-native-reanimated");
|
|
10
|
+
var _coordinates = require("../utils/coordinates");
|
|
11
|
+
var _useDrawingStore = require("../store/useDrawingStore");
|
|
12
|
+
var _hitTesting = require("../utils/hitTesting");
|
|
13
|
+
var _SelectionOverlay = require("../renderers/SelectionOverlay");
|
|
14
|
+
function useSelectionGesture({
|
|
15
|
+
canvasSize,
|
|
16
|
+
imageOffsetX,
|
|
17
|
+
imageOffsetY,
|
|
18
|
+
viewScale,
|
|
19
|
+
viewTranslateX,
|
|
20
|
+
viewTranslateY,
|
|
21
|
+
onTapEmpty
|
|
22
|
+
}) {
|
|
23
|
+
const isDragging = (0, _reactNativeReanimated.useSharedValue)(false);
|
|
24
|
+
const dragStartX = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
25
|
+
const dragStartY = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
26
|
+
// Live pixel offset for visual feedback during drag
|
|
27
|
+
const dragOffsetX = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
28
|
+
const dragOffsetY = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
29
|
+
// Which anchor is being dragged (-1 = none, moving whole object)
|
|
30
|
+
const draggingAnchorIndex = (0, _reactNativeReanimated.useSharedValue)(-1);
|
|
31
|
+
// True between onEnd and the React re-render that commits the new position
|
|
32
|
+
const pendingCommit = (0, _reactNativeReanimated.useSharedValue)(false);
|
|
33
|
+
|
|
34
|
+
// Pre-computed anchor positions in pixel coords (for worklet access)
|
|
35
|
+
const anchor0X = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
36
|
+
const anchor0Y = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
37
|
+
const anchor1X = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
38
|
+
const anchor1Y = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
39
|
+
const hasAnchors = (0, _reactNativeReanimated.useSharedValue)(false);
|
|
40
|
+
// Flat array of all anchor positions [x0, y0, x1, y1, ...] for N-anchor objects
|
|
41
|
+
const allAnchorsFlat = (0, _reactNativeReanimated.useSharedValue)([]);
|
|
42
|
+
const anchorCount = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
43
|
+
const objects = (0, _useDrawingStore.useDrawingStore)(s => s.objects);
|
|
44
|
+
const selectedObjectId = (0, _useDrawingStore.useDrawingStore)(s => s.selectedObjectId);
|
|
45
|
+
const selectObject = (0, _useDrawingStore.useDrawingStore)(s => s.selectObject);
|
|
46
|
+
const moveObject = (0, _useDrawingStore.useDrawingStore)(s => s.moveObject);
|
|
47
|
+
const resizeObject = (0, _useDrawingStore.useDrawingStore)(s => s.resizeObject);
|
|
48
|
+
|
|
49
|
+
// Sync anchor positions to shared values whenever selection changes
|
|
50
|
+
(0, _react.useEffect)(() => {
|
|
51
|
+
if (!selectedObjectId) {
|
|
52
|
+
hasAnchors.value = false;
|
|
53
|
+
anchorCount.value = 0;
|
|
54
|
+
allAnchorsFlat.value = [];
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const obj = objects.find(o => o.id === selectedObjectId);
|
|
58
|
+
if (!obj) {
|
|
59
|
+
hasAnchors.value = false;
|
|
60
|
+
anchorCount.value = 0;
|
|
61
|
+
allAnchorsFlat.value = [];
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const anchors = (0, _SelectionOverlay.getAnchorPoints)(obj, canvasSize);
|
|
65
|
+
if (anchors.length >= 2) {
|
|
66
|
+
anchor0X.value = anchors[0].x;
|
|
67
|
+
anchor0Y.value = anchors[0].y;
|
|
68
|
+
anchor1X.value = anchors[1].x;
|
|
69
|
+
anchor1Y.value = anchors[1].y;
|
|
70
|
+
hasAnchors.value = true;
|
|
71
|
+
// Store all anchors for N-vertex objects (polygon)
|
|
72
|
+
const flat = [];
|
|
73
|
+
for (const a of anchors) {
|
|
74
|
+
flat.push(a.x, a.y);
|
|
75
|
+
}
|
|
76
|
+
allAnchorsFlat.value = flat;
|
|
77
|
+
anchorCount.value = anchors.length;
|
|
78
|
+
} else {
|
|
79
|
+
hasAnchors.value = false;
|
|
80
|
+
anchorCount.value = 0;
|
|
81
|
+
allAnchorsFlat.value = [];
|
|
82
|
+
}
|
|
83
|
+
}, [selectedObjectId, objects, canvasSize]);
|
|
84
|
+
const handleTap = (0, _react.useCallback)((x, y) => {
|
|
85
|
+
const tapPoint = {
|
|
86
|
+
x,
|
|
87
|
+
y
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
// Find the topmost object that is hit (reverse iteration)
|
|
91
|
+
for (let i = objects.length - 1; i >= 0; i--) {
|
|
92
|
+
const obj = objects[i];
|
|
93
|
+
if ((0, _hitTesting.hitTestObject)(obj, tapPoint, canvasSize)) {
|
|
94
|
+
selectObject(obj.id);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Tap on empty space → delegate or deselect
|
|
99
|
+
if (onTapEmpty) {
|
|
100
|
+
onTapEmpty(x, y);
|
|
101
|
+
} else {
|
|
102
|
+
selectObject(null);
|
|
103
|
+
}
|
|
104
|
+
}, [objects, canvasSize, selectObject, onTapEmpty]);
|
|
105
|
+
const resetDragState = (0, _react.useCallback)(() => {
|
|
106
|
+
isDragging.value = false;
|
|
107
|
+
dragOffsetX.value = 0;
|
|
108
|
+
dragOffsetY.value = 0;
|
|
109
|
+
draggingAnchorIndex.value = -1;
|
|
110
|
+
pendingCommit.value = false;
|
|
111
|
+
}, [isDragging, dragOffsetX, dragOffsetY, draggingAnchorIndex, pendingCommit]);
|
|
112
|
+
const handleDragEnd = (0, _react.useCallback)((dx, dy) => {
|
|
113
|
+
if (!selectedObjectId) {
|
|
114
|
+
// No store update will occur — reset immediately
|
|
115
|
+
resetDragState();
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Convert pixel delta to normalized delta
|
|
120
|
+
const normalizedDx = canvasSize.width > 0 ? dx / canvasSize.width : 0;
|
|
121
|
+
const normalizedDy = canvasSize.height > 0 ? dy / canvasSize.height : 0;
|
|
122
|
+
moveObject(selectedObjectId, normalizedDx, normalizedDy);
|
|
123
|
+
// Drag state is reset by SelectedObjectRenderer's useEffect
|
|
124
|
+
// when the component re-renders with the updated object.
|
|
125
|
+
}, [selectedObjectId, canvasSize, moveObject, resetDragState]);
|
|
126
|
+
const handleResizeEnd = (0, _react.useCallback)((anchorIndex, dx, dy) => {
|
|
127
|
+
if (!selectedObjectId) {
|
|
128
|
+
resetDragState();
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const normalizedDx = canvasSize.width > 0 ? dx / canvasSize.width : 0;
|
|
132
|
+
const normalizedDy = canvasSize.height > 0 ? dy / canvasSize.height : 0;
|
|
133
|
+
resizeObject(selectedObjectId, anchorIndex, normalizedDx, normalizedDy);
|
|
134
|
+
// Drag state is reset by SelectedObjectRenderer's useEffect
|
|
135
|
+
}, [selectedObjectId, canvasSize, resizeObject, resetDragState]);
|
|
136
|
+
const tapGesture = _reactNativeGestureHandler.Gesture.Tap().onEnd(e => {
|
|
137
|
+
"worklet";
|
|
138
|
+
|
|
139
|
+
const canvas = (0, _coordinates.screenToCanvas)(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
140
|
+
const x = canvas.x - imageOffsetX.value;
|
|
141
|
+
const y = canvas.y - imageOffsetY.value;
|
|
142
|
+
(0, _reactNativeReanimated.runOnJS)(handleTap)(x, y);
|
|
143
|
+
});
|
|
144
|
+
const panGesture = _reactNativeGestureHandler.Gesture.Pan().enabled(selectedObjectId !== null).maxPointers(1).minDistance(5).onBegin(e => {
|
|
145
|
+
"worklet";
|
|
146
|
+
|
|
147
|
+
const canvas = (0, _coordinates.screenToCanvas)(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
148
|
+
const x = canvas.x - imageOffsetX.value;
|
|
149
|
+
const y = canvas.y - imageOffsetY.value;
|
|
150
|
+
pendingCommit.value = false;
|
|
151
|
+
isDragging.value = true;
|
|
152
|
+
dragStartX.value = e.x;
|
|
153
|
+
dragStartY.value = e.y;
|
|
154
|
+
dragOffsetX.value = 0;
|
|
155
|
+
dragOffsetY.value = 0;
|
|
156
|
+
|
|
157
|
+
// Check if we hit an anchor handle
|
|
158
|
+
draggingAnchorIndex.value = -1;
|
|
159
|
+
if (hasAnchors.value) {
|
|
160
|
+
const hitRadius = _SelectionOverlay.ANCHOR_HIT_RADIUS;
|
|
161
|
+
let bestDist = hitRadius;
|
|
162
|
+
let bestIdx = -1;
|
|
163
|
+
const flat = allAnchorsFlat.value;
|
|
164
|
+
const count = anchorCount.value;
|
|
165
|
+
for (let i = 0; i < count; i++) {
|
|
166
|
+
const ax = flat[i * 2];
|
|
167
|
+
const ay = flat[i * 2 + 1];
|
|
168
|
+
const d = Math.sqrt((x - ax) ** 2 + (y - ay) ** 2);
|
|
169
|
+
if (d < bestDist) {
|
|
170
|
+
bestDist = d;
|
|
171
|
+
bestIdx = i;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (bestIdx >= 0) {
|
|
175
|
+
draggingAnchorIndex.value = bestIdx;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}).onUpdate(e => {
|
|
179
|
+
"worklet";
|
|
180
|
+
|
|
181
|
+
// Scale drag offset by 1/scale so visual feedback matches canvas coordinates
|
|
182
|
+
dragOffsetX.value = (e.x - dragStartX.value) / viewScale.value;
|
|
183
|
+
dragOffsetY.value = (e.y - dragStartY.value) / viewScale.value;
|
|
184
|
+
}).onEnd(e => {
|
|
185
|
+
"worklet";
|
|
186
|
+
|
|
187
|
+
// Convert screen-space deltas to canvas-space deltas
|
|
188
|
+
const dx = (e.x - dragStartX.value) / viewScale.value;
|
|
189
|
+
const dy = (e.y - dragStartY.value) / viewScale.value;
|
|
190
|
+
|
|
191
|
+
// Keep isDragging + offsets alive so the object stays at its dragged
|
|
192
|
+
// position until React re-renders with the committed store update.
|
|
193
|
+
// SelectedObjectRenderer's useEffect will reset drag state atomically.
|
|
194
|
+
pendingCommit.value = true;
|
|
195
|
+
if (draggingAnchorIndex.value >= 0) {
|
|
196
|
+
(0, _reactNativeReanimated.runOnJS)(handleResizeEnd)(draggingAnchorIndex.value, dx, dy);
|
|
197
|
+
} else {
|
|
198
|
+
(0, _reactNativeReanimated.runOnJS)(handleDragEnd)(dx, dy);
|
|
199
|
+
}
|
|
200
|
+
}).onFinalize(() => {
|
|
201
|
+
"worklet";
|
|
202
|
+
|
|
203
|
+
// Only reset if onEnd didn't fire (gesture was cancelled)
|
|
204
|
+
if (!pendingCommit.value) {
|
|
205
|
+
isDragging.value = false;
|
|
206
|
+
dragOffsetX.value = 0;
|
|
207
|
+
dragOffsetY.value = 0;
|
|
208
|
+
draggingAnchorIndex.value = -1;
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
// Double-tap for editing measurement text or text annotations
|
|
213
|
+
const doubleTapGesture = _reactNativeGestureHandler.Gesture.Tap().numberOfTaps(2).minPointers(1).onEnd(e => {
|
|
214
|
+
"worklet";
|
|
215
|
+
|
|
216
|
+
const canvas = (0, _coordinates.screenToCanvas)(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
217
|
+
const x = canvas.x - imageOffsetX.value;
|
|
218
|
+
const y = canvas.y - imageOffsetY.value;
|
|
219
|
+
// Will be handled in the DrawingEditor for opening edit modals
|
|
220
|
+
(0, _reactNativeReanimated.runOnJS)(handleDoubleTap)(x, y);
|
|
221
|
+
});
|
|
222
|
+
const handleDoubleTap = (0, _react.useCallback)((_x, _y) => {
|
|
223
|
+
// Double-tap handling is delegated to DrawingEditor via callbacks
|
|
224
|
+
// This hook just detects the gesture
|
|
225
|
+
}, []);
|
|
226
|
+
return {
|
|
227
|
+
tapGesture,
|
|
228
|
+
panGesture,
|
|
229
|
+
doubleTapGesture,
|
|
230
|
+
isDragging,
|
|
231
|
+
dragOffsetX,
|
|
232
|
+
dragOffsetY,
|
|
233
|
+
draggingAnchorIndex
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=useSelectionGesture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNativeGestureHandler","_reactNativeReanimated","_coordinates","_useDrawingStore","_hitTesting","_SelectionOverlay","useSelectionGesture","canvasSize","imageOffsetX","imageOffsetY","viewScale","viewTranslateX","viewTranslateY","onTapEmpty","isDragging","useSharedValue","dragStartX","dragStartY","dragOffsetX","dragOffsetY","draggingAnchorIndex","pendingCommit","anchor0X","anchor0Y","anchor1X","anchor1Y","hasAnchors","allAnchorsFlat","anchorCount","objects","useDrawingStore","s","selectedObjectId","selectObject","moveObject","resizeObject","useEffect","value","obj","find","o","id","anchors","getAnchorPoints","length","x","y","flat","a","push","handleTap","useCallback","tapPoint","i","hitTestObject","resetDragState","handleDragEnd","dx","dy","normalizedDx","width","normalizedDy","height","handleResizeEnd","anchorIndex","tapGesture","Gesture","Tap","onEnd","e","canvas","screenToCanvas","runOnJS","panGesture","Pan","enabled","maxPointers","minDistance","onBegin","hitRadius","ANCHOR_HIT_RADIUS","bestDist","bestIdx","count","ax","ay","d","Math","sqrt","onUpdate","onFinalize","doubleTapGesture","numberOfTaps","minPointers","handleDoubleTap","_x","_y"],"sourceRoot":"../../../src","sources":["hooks/useSelectionGesture.ts"],"mappings":"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","ignoreList":[]}
|