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