lost-sia
Version:
Single Image Annotation Tool
2 lines (1 loc) • 1.19 kB
JavaScript
import{jsxs as H,jsx as u}from"react/jsx-runtime";import{useState as l,useRef as L,useEffect as m}from"react";import S from"../../../utils/mouse.js";const T=({index:v,coordinates:t,annotationSettings:o,pageToStageOffset:x,svgScale:r,svgTranslation:y,style:p,onDeleteNode:g,onMoving:D,onMoved:I,onIsDraggingStateChanged:A})=>{const[E,c]=l(!1),[n,i]=l(!1),[s,a]=l(!1),f=L(s);m(()=>{f.current=s},[s]);const M=e=>{if(!n)return;const C=S.getAntiScaledMouseStagePosition(e,x,r,y);(e.movementX!==0||e.movementY!==0)&&(a(!0),D(v,C))};m(()=>{if(A(n),!n)return;const e=()=>{i(!1),f.current&&I(),a(!1)};return globalThis.addEventListener("mouseup",e),()=>{globalThis.removeEventListener("mouseup",e)}},[n]);const d=e=>{o.canEdit&&(e.ctrlKey?g():i(!0))},h=()=>u("circle",{cx:t.x,cy:t.y,r:12/r,onMouseLeave:e=>o.canEdit&&c(!1),onMouseDown:d,onContextMenu:e=>e.preventDefault()});return H("g",{children:[n&&u("circle",{cx:t.x,cy:t.y,r:"100%",style:{opacity:0},onMouseMove:e=>M(e),onContextMenu:e=>e.preventDefault()}),E&&h(),u("circle",{cx:t.x,cy:t.y,r:10/r,style:p,onMouseOver:()=>{o.canEdit&&c(!0)},onMouseDown:d,onMouseMove:e=>M(e),onContextMenu:e=>e.preventDefault()})]})};export{T as default};