@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.
Files changed (323) hide show
  1. package/README.md +181 -0
  2. package/lib/commonjs/DrawingEditor.js +815 -0
  3. package/lib/commonjs/DrawingEditor.js.map +1 -0
  4. package/lib/commonjs/assets/toolbar-icons/arrow-disabled.png +0 -0
  5. package/lib/commonjs/assets/toolbar-icons/arrow-enabled.png +0 -0
  6. package/lib/commonjs/assets/toolbar-icons/arrow.png +0 -0
  7. package/lib/commonjs/assets/toolbar-icons/circle-disabled.png +0 -0
  8. package/lib/commonjs/assets/toolbar-icons/circle-enabled.png +0 -0
  9. package/lib/commonjs/assets/toolbar-icons/circle.png +0 -0
  10. package/lib/commonjs/assets/toolbar-icons/freehand-disabled.png +0 -0
  11. package/lib/commonjs/assets/toolbar-icons/freehand-enabled.png +0 -0
  12. package/lib/commonjs/assets/toolbar-icons/freehand.png +0 -0
  13. package/lib/commonjs/assets/toolbar-icons/line-disabled.png +0 -0
  14. package/lib/commonjs/assets/toolbar-icons/line-enabled.png +0 -0
  15. package/lib/commonjs/assets/toolbar-icons/line.png +0 -0
  16. package/lib/commonjs/assets/toolbar-icons/measure-disabled.png +0 -0
  17. package/lib/commonjs/assets/toolbar-icons/measure-enabled.png +0 -0
  18. package/lib/commonjs/assets/toolbar-icons/measure.png +0 -0
  19. package/lib/commonjs/assets/toolbar-icons/move-disabled.png +0 -0
  20. package/lib/commonjs/assets/toolbar-icons/move-enabled.png +0 -0
  21. package/lib/commonjs/assets/toolbar-icons/move.png +0 -0
  22. package/lib/commonjs/assets/toolbar-icons/polygon-disabled.png +0 -0
  23. package/lib/commonjs/assets/toolbar-icons/polygon-enabled.png +0 -0
  24. package/lib/commonjs/assets/toolbar-icons/polygon.png +0 -0
  25. package/lib/commonjs/assets/toolbar-icons/rectangle-disabled.png +0 -0
  26. package/lib/commonjs/assets/toolbar-icons/rectangle-enabled.png +0 -0
  27. package/lib/commonjs/assets/toolbar-icons/rectangle.png +0 -0
  28. package/lib/commonjs/assets/toolbar-icons/text-disabled.png +0 -0
  29. package/lib/commonjs/assets/toolbar-icons/text-enabled.png +0 -0
  30. package/lib/commonjs/assets/toolbar-icons/text.png +0 -0
  31. package/lib/commonjs/components/ColorPalette.js +379 -0
  32. package/lib/commonjs/components/ColorPalette.js.map +1 -0
  33. package/lib/commonjs/components/LineWidthSlider.js +70 -0
  34. package/lib/commonjs/components/LineWidthSlider.js.map +1 -0
  35. package/lib/commonjs/components/MeasurementEditModal.js +153 -0
  36. package/lib/commonjs/components/MeasurementEditModal.js.map +1 -0
  37. package/lib/commonjs/components/MiniMap.js +244 -0
  38. package/lib/commonjs/components/MiniMap.js.map +1 -0
  39. package/lib/commonjs/components/TextAnnotation.js +162 -0
  40. package/lib/commonjs/components/TextAnnotation.js.map +1 -0
  41. package/lib/commonjs/components/TextEditModal.js +133 -0
  42. package/lib/commonjs/components/TextEditModal.js.map +1 -0
  43. package/lib/commonjs/components/Toolbar.js +198 -0
  44. package/lib/commonjs/components/Toolbar.js.map +1 -0
  45. package/lib/commonjs/components/ZoomBadge.js +161 -0
  46. package/lib/commonjs/components/ZoomBadge.js.map +1 -0
  47. package/lib/commonjs/hooks/useFreehandGesture.js +173 -0
  48. package/lib/commonjs/hooks/useFreehandGesture.js.map +1 -0
  49. package/lib/commonjs/hooks/usePolygonGesture.js +109 -0
  50. package/lib/commonjs/hooks/usePolygonGesture.js.map +1 -0
  51. package/lib/commonjs/hooks/useSelectionGesture.js +236 -0
  52. package/lib/commonjs/hooks/useSelectionGesture.js.map +1 -0
  53. package/lib/commonjs/hooks/useShapeGesture.js +181 -0
  54. package/lib/commonjs/hooks/useShapeGesture.js.map +1 -0
  55. package/lib/commonjs/hooks/useViewportGesture.js +238 -0
  56. package/lib/commonjs/hooks/useViewportGesture.js.map +1 -0
  57. package/lib/commonjs/index.js +104 -0
  58. package/lib/commonjs/index.js.map +1 -0
  59. package/lib/commonjs/package.json +1 -0
  60. package/lib/commonjs/renderers/ArrowRenderer.js +118 -0
  61. package/lib/commonjs/renderers/ArrowRenderer.js.map +1 -0
  62. package/lib/commonjs/renderers/CircleRenderer.js +51 -0
  63. package/lib/commonjs/renderers/CircleRenderer.js.map +1 -0
  64. package/lib/commonjs/renderers/FreehandRenderer.js +31 -0
  65. package/lib/commonjs/renderers/FreehandRenderer.js.map +1 -0
  66. package/lib/commonjs/renderers/InProgressRenderer.js +174 -0
  67. package/lib/commonjs/renderers/InProgressRenderer.js.map +1 -0
  68. package/lib/commonjs/renderers/LineRenderer.js +27 -0
  69. package/lib/commonjs/renderers/LineRenderer.js.map +1 -0
  70. package/lib/commonjs/renderers/MeasurementRenderer.js +134 -0
  71. package/lib/commonjs/renderers/MeasurementRenderer.js.map +1 -0
  72. package/lib/commonjs/renderers/ObjectRenderer.js +65 -0
  73. package/lib/commonjs/renderers/ObjectRenderer.js.map +1 -0
  74. package/lib/commonjs/renderers/PolygonRenderer.js +46 -0
  75. package/lib/commonjs/renderers/PolygonRenderer.js.map +1 -0
  76. package/lib/commonjs/renderers/RectRenderer.js +51 -0
  77. package/lib/commonjs/renderers/RectRenderer.js.map +1 -0
  78. package/lib/commonjs/renderers/SelectedObjectRenderer.js +592 -0
  79. package/lib/commonjs/renderers/SelectedObjectRenderer.js.map +1 -0
  80. package/lib/commonjs/renderers/SelectionOverlay.js +120 -0
  81. package/lib/commonjs/renderers/SelectionOverlay.js.map +1 -0
  82. package/lib/commonjs/store/useDrawingStore.js +354 -0
  83. package/lib/commonjs/store/useDrawingStore.js.map +1 -0
  84. package/lib/commonjs/types.js +6 -0
  85. package/lib/commonjs/types.js.map +1 -0
  86. package/lib/commonjs/utils/colors.js +44 -0
  87. package/lib/commonjs/utils/colors.js.map +1 -0
  88. package/lib/commonjs/utils/coordinates.js +81 -0
  89. package/lib/commonjs/utils/coordinates.js.map +1 -0
  90. package/lib/commonjs/utils/hitTesting.js +181 -0
  91. package/lib/commonjs/utils/hitTesting.js.map +1 -0
  92. package/lib/commonjs/utils/serialization.js +42 -0
  93. package/lib/commonjs/utils/serialization.js.map +1 -0
  94. package/lib/commonjs/utils/shapeDetection.js +151 -0
  95. package/lib/commonjs/utils/shapeDetection.js.map +1 -0
  96. package/lib/commonjs/utils/smoothing.js +85 -0
  97. package/lib/commonjs/utils/smoothing.js.map +1 -0
  98. package/lib/module/DrawingEditor.js +811 -0
  99. package/lib/module/DrawingEditor.js.map +1 -0
  100. package/lib/module/assets/toolbar-icons/arrow-disabled.png +0 -0
  101. package/lib/module/assets/toolbar-icons/arrow-enabled.png +0 -0
  102. package/lib/module/assets/toolbar-icons/arrow.png +0 -0
  103. package/lib/module/assets/toolbar-icons/circle-disabled.png +0 -0
  104. package/lib/module/assets/toolbar-icons/circle-enabled.png +0 -0
  105. package/lib/module/assets/toolbar-icons/circle.png +0 -0
  106. package/lib/module/assets/toolbar-icons/freehand-disabled.png +0 -0
  107. package/lib/module/assets/toolbar-icons/freehand-enabled.png +0 -0
  108. package/lib/module/assets/toolbar-icons/freehand.png +0 -0
  109. package/lib/module/assets/toolbar-icons/line-disabled.png +0 -0
  110. package/lib/module/assets/toolbar-icons/line-enabled.png +0 -0
  111. package/lib/module/assets/toolbar-icons/line.png +0 -0
  112. package/lib/module/assets/toolbar-icons/measure-disabled.png +0 -0
  113. package/lib/module/assets/toolbar-icons/measure-enabled.png +0 -0
  114. package/lib/module/assets/toolbar-icons/measure.png +0 -0
  115. package/lib/module/assets/toolbar-icons/move-disabled.png +0 -0
  116. package/lib/module/assets/toolbar-icons/move-enabled.png +0 -0
  117. package/lib/module/assets/toolbar-icons/move.png +0 -0
  118. package/lib/module/assets/toolbar-icons/polygon-disabled.png +0 -0
  119. package/lib/module/assets/toolbar-icons/polygon-enabled.png +0 -0
  120. package/lib/module/assets/toolbar-icons/polygon.png +0 -0
  121. package/lib/module/assets/toolbar-icons/rectangle-disabled.png +0 -0
  122. package/lib/module/assets/toolbar-icons/rectangle-enabled.png +0 -0
  123. package/lib/module/assets/toolbar-icons/rectangle.png +0 -0
  124. package/lib/module/assets/toolbar-icons/text-disabled.png +0 -0
  125. package/lib/module/assets/toolbar-icons/text-enabled.png +0 -0
  126. package/lib/module/assets/toolbar-icons/text.png +0 -0
  127. package/lib/module/components/ColorPalette.js +374 -0
  128. package/lib/module/components/ColorPalette.js.map +1 -0
  129. package/lib/module/components/LineWidthSlider.js +64 -0
  130. package/lib/module/components/LineWidthSlider.js.map +1 -0
  131. package/lib/module/components/MeasurementEditModal.js +148 -0
  132. package/lib/module/components/MeasurementEditModal.js.map +1 -0
  133. package/lib/module/components/MiniMap.js +239 -0
  134. package/lib/module/components/MiniMap.js.map +1 -0
  135. package/lib/module/components/TextAnnotation.js +157 -0
  136. package/lib/module/components/TextAnnotation.js.map +1 -0
  137. package/lib/module/components/TextEditModal.js +128 -0
  138. package/lib/module/components/TextEditModal.js.map +1 -0
  139. package/lib/module/components/Toolbar.js +193 -0
  140. package/lib/module/components/Toolbar.js.map +1 -0
  141. package/lib/module/components/ZoomBadge.js +155 -0
  142. package/lib/module/components/ZoomBadge.js.map +1 -0
  143. package/lib/module/hooks/useFreehandGesture.js +169 -0
  144. package/lib/module/hooks/useFreehandGesture.js.map +1 -0
  145. package/lib/module/hooks/usePolygonGesture.js +106 -0
  146. package/lib/module/hooks/usePolygonGesture.js.map +1 -0
  147. package/lib/module/hooks/useSelectionGesture.js +232 -0
  148. package/lib/module/hooks/useSelectionGesture.js.map +1 -0
  149. package/lib/module/hooks/useShapeGesture.js +177 -0
  150. package/lib/module/hooks/useShapeGesture.js.map +1 -0
  151. package/lib/module/hooks/useViewportGesture.js +234 -0
  152. package/lib/module/hooks/useViewportGesture.js.map +1 -0
  153. package/lib/module/index.js +20 -0
  154. package/lib/module/index.js.map +1 -0
  155. package/lib/module/package.json +1 -0
  156. package/lib/module/renderers/ArrowRenderer.js +113 -0
  157. package/lib/module/renderers/ArrowRenderer.js.map +1 -0
  158. package/lib/module/renderers/CircleRenderer.js +46 -0
  159. package/lib/module/renderers/CircleRenderer.js.map +1 -0
  160. package/lib/module/renderers/FreehandRenderer.js +26 -0
  161. package/lib/module/renderers/FreehandRenderer.js.map +1 -0
  162. package/lib/module/renderers/InProgressRenderer.js +169 -0
  163. package/lib/module/renderers/InProgressRenderer.js.map +1 -0
  164. package/lib/module/renderers/LineRenderer.js +22 -0
  165. package/lib/module/renderers/LineRenderer.js.map +1 -0
  166. package/lib/module/renderers/MeasurementRenderer.js +129 -0
  167. package/lib/module/renderers/MeasurementRenderer.js.map +1 -0
  168. package/lib/module/renderers/ObjectRenderer.js +60 -0
  169. package/lib/module/renderers/ObjectRenderer.js.map +1 -0
  170. package/lib/module/renderers/PolygonRenderer.js +41 -0
  171. package/lib/module/renderers/PolygonRenderer.js.map +1 -0
  172. package/lib/module/renderers/RectRenderer.js +46 -0
  173. package/lib/module/renderers/RectRenderer.js.map +1 -0
  174. package/lib/module/renderers/SelectedObjectRenderer.js +587 -0
  175. package/lib/module/renderers/SelectedObjectRenderer.js.map +1 -0
  176. package/lib/module/renderers/SelectionOverlay.js +116 -0
  177. package/lib/module/renderers/SelectionOverlay.js.map +1 -0
  178. package/lib/module/store/useDrawingStore.js +350 -0
  179. package/lib/module/store/useDrawingStore.js.map +1 -0
  180. package/lib/module/types.js +4 -0
  181. package/lib/module/types.js.map +1 -0
  182. package/lib/module/utils/colors.js +40 -0
  183. package/lib/module/utils/colors.js.map +1 -0
  184. package/lib/module/utils/coordinates.js +71 -0
  185. package/lib/module/utils/coordinates.js.map +1 -0
  186. package/lib/module/utils/hitTesting.js +171 -0
  187. package/lib/module/utils/hitTesting.js.map +1 -0
  188. package/lib/module/utils/serialization.js +36 -0
  189. package/lib/module/utils/serialization.js.map +1 -0
  190. package/lib/module/utils/shapeDetection.js +147 -0
  191. package/lib/module/utils/shapeDetection.js.map +1 -0
  192. package/lib/module/utils/smoothing.js +80 -0
  193. package/lib/module/utils/smoothing.js.map +1 -0
  194. package/lib/typescript/DrawingEditor.d.ts +3 -0
  195. package/lib/typescript/DrawingEditor.d.ts.map +1 -0
  196. package/lib/typescript/components/ColorPalette.d.ts +9 -0
  197. package/lib/typescript/components/ColorPalette.d.ts.map +1 -0
  198. package/lib/typescript/components/LineWidthSlider.d.ts +11 -0
  199. package/lib/typescript/components/LineWidthSlider.d.ts.map +1 -0
  200. package/lib/typescript/components/MeasurementEditModal.d.ts +11 -0
  201. package/lib/typescript/components/MeasurementEditModal.d.ts.map +1 -0
  202. package/lib/typescript/components/MiniMap.d.ts +23 -0
  203. package/lib/typescript/components/MiniMap.d.ts.map +1 -0
  204. package/lib/typescript/components/TextAnnotation.d.ts +22 -0
  205. package/lib/typescript/components/TextAnnotation.d.ts.map +1 -0
  206. package/lib/typescript/components/TextEditModal.d.ts +10 -0
  207. package/lib/typescript/components/TextEditModal.d.ts.map +1 -0
  208. package/lib/typescript/components/Toolbar.d.ts +13 -0
  209. package/lib/typescript/components/Toolbar.d.ts.map +1 -0
  210. package/lib/typescript/components/ZoomBadge.d.ts +9 -0
  211. package/lib/typescript/components/ZoomBadge.d.ts.map +1 -0
  212. package/lib/typescript/hooks/useFreehandGesture.d.ts +47 -0
  213. package/lib/typescript/hooks/useFreehandGesture.d.ts.map +1 -0
  214. package/lib/typescript/hooks/usePolygonGesture.d.ts +47 -0
  215. package/lib/typescript/hooks/usePolygonGesture.d.ts.map +1 -0
  216. package/lib/typescript/hooks/useSelectionGesture.d.ts +32 -0
  217. package/lib/typescript/hooks/useSelectionGesture.d.ts.map +1 -0
  218. package/lib/typescript/hooks/useShapeGesture.d.ts +54 -0
  219. package/lib/typescript/hooks/useShapeGesture.d.ts.map +1 -0
  220. package/lib/typescript/hooks/useViewportGesture.d.ts +37 -0
  221. package/lib/typescript/hooks/useViewportGesture.d.ts.map +1 -0
  222. package/lib/typescript/index.d.ts +11 -0
  223. package/lib/typescript/index.d.ts.map +1 -0
  224. package/lib/typescript/renderers/ArrowRenderer.d.ts +9 -0
  225. package/lib/typescript/renderers/ArrowRenderer.d.ts.map +1 -0
  226. package/lib/typescript/renderers/CircleRenderer.d.ts +9 -0
  227. package/lib/typescript/renderers/CircleRenderer.d.ts.map +1 -0
  228. package/lib/typescript/renderers/FreehandRenderer.d.ts +9 -0
  229. package/lib/typescript/renderers/FreehandRenderer.d.ts.map +1 -0
  230. package/lib/typescript/renderers/InProgressRenderer.d.ts +32 -0
  231. package/lib/typescript/renderers/InProgressRenderer.d.ts.map +1 -0
  232. package/lib/typescript/renderers/LineRenderer.d.ts +9 -0
  233. package/lib/typescript/renderers/LineRenderer.d.ts.map +1 -0
  234. package/lib/typescript/renderers/MeasurementRenderer.d.ts +9 -0
  235. package/lib/typescript/renderers/MeasurementRenderer.d.ts.map +1 -0
  236. package/lib/typescript/renderers/ObjectRenderer.d.ts +12 -0
  237. package/lib/typescript/renderers/ObjectRenderer.d.ts.map +1 -0
  238. package/lib/typescript/renderers/PolygonRenderer.d.ts +13 -0
  239. package/lib/typescript/renderers/PolygonRenderer.d.ts.map +1 -0
  240. package/lib/typescript/renderers/RectRenderer.d.ts +9 -0
  241. package/lib/typescript/renderers/RectRenderer.d.ts.map +1 -0
  242. package/lib/typescript/renderers/SelectedObjectRenderer.d.ts +18 -0
  243. package/lib/typescript/renderers/SelectedObjectRenderer.d.ts.map +1 -0
  244. package/lib/typescript/renderers/SelectionOverlay.d.ts +21 -0
  245. package/lib/typescript/renderers/SelectionOverlay.d.ts.map +1 -0
  246. package/lib/typescript/store/useDrawingStore.d.ts +30 -0
  247. package/lib/typescript/store/useDrawingStore.d.ts.map +1 -0
  248. package/lib/typescript/types.d.ts +130 -0
  249. package/lib/typescript/types.d.ts.map +1 -0
  250. package/lib/typescript/utils/colors.d.ts +11 -0
  251. package/lib/typescript/utils/colors.d.ts.map +1 -0
  252. package/lib/typescript/utils/coordinates.d.ts +34 -0
  253. package/lib/typescript/utils/coordinates.d.ts.map +1 -0
  254. package/lib/typescript/utils/hitTesting.d.ts +18 -0
  255. package/lib/typescript/utils/hitTesting.d.ts.map +1 -0
  256. package/lib/typescript/utils/serialization.d.ts +17 -0
  257. package/lib/typescript/utils/serialization.d.ts.map +1 -0
  258. package/lib/typescript/utils/shapeDetection.d.ts +22 -0
  259. package/lib/typescript/utils/shapeDetection.d.ts.map +1 -0
  260. package/lib/typescript/utils/smoothing.d.ts +16 -0
  261. package/lib/typescript/utils/smoothing.d.ts.map +1 -0
  262. package/package.json +108 -0
  263. package/src/DrawingEditor.tsx +1071 -0
  264. package/src/assets/toolbar-icons/arrow-disabled.png +0 -0
  265. package/src/assets/toolbar-icons/arrow-enabled.png +0 -0
  266. package/src/assets/toolbar-icons/arrow.png +0 -0
  267. package/src/assets/toolbar-icons/circle-disabled.png +0 -0
  268. package/src/assets/toolbar-icons/circle-enabled.png +0 -0
  269. package/src/assets/toolbar-icons/circle.png +0 -0
  270. package/src/assets/toolbar-icons/freehand-disabled.png +0 -0
  271. package/src/assets/toolbar-icons/freehand-enabled.png +0 -0
  272. package/src/assets/toolbar-icons/freehand.png +0 -0
  273. package/src/assets/toolbar-icons/line-disabled.png +0 -0
  274. package/src/assets/toolbar-icons/line-enabled.png +0 -0
  275. package/src/assets/toolbar-icons/line.png +0 -0
  276. package/src/assets/toolbar-icons/measure-disabled.png +0 -0
  277. package/src/assets/toolbar-icons/measure-enabled.png +0 -0
  278. package/src/assets/toolbar-icons/measure.png +0 -0
  279. package/src/assets/toolbar-icons/move-disabled.png +0 -0
  280. package/src/assets/toolbar-icons/move-enabled.png +0 -0
  281. package/src/assets/toolbar-icons/move.png +0 -0
  282. package/src/assets/toolbar-icons/polygon-disabled.png +0 -0
  283. package/src/assets/toolbar-icons/polygon-enabled.png +0 -0
  284. package/src/assets/toolbar-icons/polygon.png +0 -0
  285. package/src/assets/toolbar-icons/rectangle-disabled.png +0 -0
  286. package/src/assets/toolbar-icons/rectangle-enabled.png +0 -0
  287. package/src/assets/toolbar-icons/rectangle.png +0 -0
  288. package/src/assets/toolbar-icons/text-disabled.png +0 -0
  289. package/src/assets/toolbar-icons/text-enabled.png +0 -0
  290. package/src/assets/toolbar-icons/text.png +0 -0
  291. package/src/components/ColorPalette.tsx +497 -0
  292. package/src/components/LineWidthSlider.tsx +87 -0
  293. package/src/components/MeasurementEditModal.tsx +163 -0
  294. package/src/components/MiniMap.tsx +275 -0
  295. package/src/components/TextAnnotation.tsx +198 -0
  296. package/src/components/TextEditModal.tsx +139 -0
  297. package/src/components/Toolbar.tsx +254 -0
  298. package/src/components/ZoomBadge.tsx +166 -0
  299. package/src/hooks/useFreehandGesture.ts +249 -0
  300. package/src/hooks/usePolygonGesture.ts +162 -0
  301. package/src/hooks/useSelectionGesture.ts +293 -0
  302. package/src/hooks/useShapeGesture.ts +256 -0
  303. package/src/hooks/useViewportGesture.ts +337 -0
  304. package/src/index.tsx +51 -0
  305. package/src/renderers/ArrowRenderer.tsx +123 -0
  306. package/src/renderers/CircleRenderer.tsx +60 -0
  307. package/src/renderers/FreehandRenderer.tsx +33 -0
  308. package/src/renderers/InProgressRenderer.tsx +217 -0
  309. package/src/renderers/LineRenderer.tsx +34 -0
  310. package/src/renderers/MeasurementRenderer.tsx +179 -0
  311. package/src/renderers/ObjectRenderer.tsx +42 -0
  312. package/src/renderers/PolygonRenderer.tsx +66 -0
  313. package/src/renderers/RectRenderer.tsx +60 -0
  314. package/src/renderers/SelectedObjectRenderer.tsx +738 -0
  315. package/src/renderers/SelectionOverlay.tsx +170 -0
  316. package/src/store/useDrawingStore.ts +357 -0
  317. package/src/types.ts +186 -0
  318. package/src/utils/colors.ts +98 -0
  319. package/src/utils/coordinates.ts +75 -0
  320. package/src/utils/hitTesting.ts +242 -0
  321. package/src/utils/serialization.ts +45 -0
  322. package/src/utils/shapeDetection.ts +160 -0
  323. 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":[]}