UNPKG

lost-sia

Version:

Single Image Annotation Tool

2 lines (1 loc) 2.05 kB
import{jsxs as $,jsx as A}from"react/jsx-runtime";import{useState as P,useRef as k,useEffect as x}from"react";import U from"../atoms/Node.js";import u from"../../../models/AnnotationMode.js";import q from"../atoms/Edge.js";import I from"../../../utils/mouse.js";const K=({annotationSettings:C,coordinates:n,isSelected:d,annotationMode:s,pageToStageOffset:l,svgScale:m,svgTranslation:f,style:R,onAddNode:v,onDeleteNode:L,onFinishAnnoCreate:T,onMoving:E,onMoved:w,onIsDraggingStateChanged:y})=>{const[c,g]=P(!1),[p,h]=P(!1),D=k(p);x(()=>{D.current=p},[p]);const b=e=>{if(C.canEdit!==!1){if(e.button===1&&s===u.CREATE){e.preventDefault(),e.stopPropagation();return}if(d&&s!==u.CREATE&&e.button===0&&g(!0),e.button===2&&s==u.CREATE){const o=I.getAntiScaledMouseStagePosition(e,l,m,f),t=[...n];t.push(o),v(t)}}},N=e=>{if(c){const o=n.map(t=>{const r=t.x+=e.movementX/m,i=t.y+=e.movementY/m;return{x:r,y:i}});(e.movementX!==0||e.movementY!==0)&&(h(!0),E(o))}if(s===u.CREATE){const o=I.getAntiScaledMouseStagePosition(e,l,m,f);let t=[...n];n.length>1&&(t=n.slice(0,-1)),t.push(o),E(t)}};x(()=>{if(y(c),!c)return;const e=()=>{g(!1),D.current&&w(),h(!1)};return globalThis.addEventListener("mouseup",e),()=>{globalThis.removeEventListener("mouseup",e)}},[c]);const X=()=>A("circle",{cx:n[0].x,cy:n[0].y,r:"100%",style:{opacity:0},onMouseDown:b,onMouseMove:N,onContextMenu:e=>e.preventDefault()}),Y=()=>n.map((o,t)=>A(U,{index:t,annotationSettings:C,coordinates:o,pageToStageOffset:l,svgScale:m,svgTranslation:f,style:R,onDeleteNode:()=>{const r=[...n];r.splice(t,1),L(r)},onMoving:(r,i)=>{const M=[...n];M[r]=i,E(M)},onMoved:()=>w(),onIsDraggingStateChanged:y},`node_${t}`)),j=()=>n.map((o,t)=>{if(!(t+1>=n.length))return A(q,{startCoordinate:o,endCoordinate:n[t+1],pageToStageOffset:l,svgScale:m,svgTranslation:f,style:R,onAddNode:r=>{const i=[...n];i.splice(t+1,0,r),v(i)},onDoubleClick:()=>s===u.CREATE&&T(),onMouseDown:b,onMouseMove:N},`edge_${t}`)}),_=d&&s!==u.CREATE;return $("g",{children:[(c||s===u.CREATE)&&X(),j(),_&&Y()]})};export{K as default};