PageSourceSearch

https://bigmind2.genie9.com/_next/static/chunks/91154.5ce3dc91a0bf78a7.js

js genie9.com collected 2026-09-24 10:28:57 UTC 827,523 bytes, 313 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[91154],{1227:(e,t,n)=>{var i="__lodash_hash_undefined__",a=1/0,o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,r=/^\w*$/,l=/^\./,s=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,d=/\\(\\)?/g,h=/^\[object .+?Constructor\]$/,c="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,u="object"==typeof self&&self&&self.Object===Object&&self,g=c||u||Function("return this")(),m=Array.prototype,p=Function.prototype,f=Object.prototype,v=g["__core-js_shared__"],I=function(){var e=/[^.]+$/.exec(v&&v.keys&&v.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),C=p.toString,_=f.hasOwnProperty,E=f.toString,w=RegExp("^"+C.call(_).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),A=g.Symbol,S=m.splice,y=N(g,"Map"),b=N(Object,"create"),T=A?A.prototype:void 0,M=T?T.toString:void 0;function D(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function O(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function x(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function P(e,t){for(var n,i,a=e.length;a--;){if(n=e[a][0],n===(i=t)||n!=n&&i!=i)return a}return -1}function L(e,t){var n,i,a=e.__data__;return("string"==(i=typeof(n=t))||"number"==i||"symbol"==i||"boolean"==i?"__proto__"!==n:null===n)?a["string"==typeof t?"string":"hash"]:a.map}function N(e,t){var n,i,a,o=null==e?void 0:e[t];return!(!V(o)||(n=o,I&&I in n))&&("[object Function]"==(a=V(i=o)?E.call(i):"")||"[object GeneratorFunction]"==a||function(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}(o)?w:h).test(function(e){if(null!=e){try{return C.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(o))?o:void 0}D.prototype.clear=function(){this.__data__=b?b(null):{}},D.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},D.prototype.get=function(e){var t=this.__data__;if(b){var n=t[e];return n===i?void 0:n}return _.call(t,e)?t[e]:void 0},D.prototype.has=function(e){var t=this.__data__;return b?void 0!==t[e]:_.call(t,e)},D.prototype.set=function(e,t){return this.__data__[e]=b&&void 0===t?i:t,this},O.prototype.clear=function(){this.__data__=[]},O.prototype.delete=function(e){var t=this.__data__,n=P(t,e);return!(n<0)&&(n==t.length-1?t.pop():S.call(t,n,1),!0)},O.prototype.get=function(e){var t=this.__data__,n=P(t,e);return n<0?void 0:t[n][1]},O.prototype.has=function(e){return P(this.__data__,e)>-1},O.prototype.set=function(e,t){var n=this.__data__,i=P(n,e);return i<0?n.push([e,t]):n[i][1]=t,this},x.prototype.clear=function(){this.__data__={hash:new D,map:new(y||O),string:new D}},x.prototype.delete=function(e){return L(this,e).delete(e)},x.prototype.get=function(e){return L(this,e).get(e)},x.prototype.has=function(e){return L(this,e).has(e)},x.prototype.set=function(e,t){return L(this,e).set(e,t),this};var R=k(function(e){e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(F(e))return M?M.call(e):"";var t=e+"";return"0"==t&&1/e==-a?"-0":t}(t);var t,n=[];return l.test(e)&&n.push(""),e.replace(s,function(e,t,i,a){n.push(i?a.replace(d,"$1"):t||e)}),n});function k(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw TypeError("Expected a function");var n=function(){var i=arguments,a=t?t.apply(this,i):i[0],o=n.cache;if(o.has(a))return o.get(a);var r=e.apply(this,i);return n.cache=o.set(a,r),r};return n.cache=new(k.Cache||x),n}k.Cache=x;var U=Array.isArray;function V(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function F(e){return"symbol"==typeof e||!!e&&"object"==typeof e&&"[object Symbol]"==E.call(e)}e.exports=function(e,t,n){var i=null==e?void 0:function(e,t){var n;t=!function(e,t){if(U(e))return!1;var n=typeof e;return!!("number"==n||"symbol"==n||"boolean"==n||null==e||F(e))||r.test(e)||!o.test(e)||null!=t&&e in Object(t)}(t,e)?U(n=t)?n:R(n):[t];for(var i=0,l=t.length;null!=e&&i<l;)e=e[function(e){if("string"==typeof e||F(e))return e;var t=e+"";return"0"==t&&1/e==-a?"-0":t}(t[i++])];return i&&i==l?e:void 0}(e,t);return void 0===i?n:i}},30294:(e,t,n)=>{"use strict";function i(e,t){let n;if(void 0===t)for(let t of e)null!=t&&(n>t||void 0===n&&t>=t)&&(n=t);else{let i=-1;for(let a of e)null!=(a=t(a,++i,e))&&(n>a||void 0===n&&a>=a)&&(n=a)}return n}n.d(t,{A:()=>i})},45970:(e,t,n)=>{"use strict";function i(e,t,n,i,a){var o=e*e,r=o*e;return((1-3*e+3*o-r)*t+(4-6*o+3*r)*n+(1+3*e+3*o-3*r)*i+r*a)/6}function a(e){var t=e.length-1;return function(n){var a=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),o=e[a],r=e[a+1],l=a>0?e[a-1]:2*o-r,s=a<t-1?e[a+2]:2*r-o;return i((n-a/t)*t,l,o,r,s)}}n.d(t,{A:()=>a,H:()=>i})},54534:()=>{}
1,91154:(e,t,n)=>{"use strict";let i,a,o,r,l;n.r(t),n.d(t,{AdvancedMagnifyTool:()=>_V,AngleTool:()=>_d,AnnotationDisplayTool:()=>l4,AnnotationTool:()=>sd,ArrowAnnotateTool:()=>_r,BaseTool:()=>lH,BidirectionalTool:()=>mP,BrushTool:()=>mf,CONSTANTS:()=>K,CircleROIStartEndThresholdTool:()=>Et,CircleROITool:()=>Cz,CircleScissorsTool:()=>_4,CobbAngleTool:()=>_g,CrosshairsTool:()=>CA,DragProbeTool:()=>IQ,ETDRSGridTool:()=>Cj,EllipticalROITool:()=>CB,Enums:()=>eW,EraserTool:()=>_0,HeightTool:()=>Cg,KeyImageTool:()=>_O,LabelMapEditWithContourTool:()=>E6,LabelTool:()=>Cr,LabelmapBaseTool:()=>mm,LengthTool:()=>Cd,LivewireContourSegmentationTool:()=>_n,LivewireContourTool:()=>C6,MIPJumpToClickTool:()=>Cn,MagnifyTool:()=>_L,OrientationMarkerTool:()=>EL,OverlayGridTool:()=>CP,PaintFillTool:()=>EB,PanTool:()=>IS,PlanarFreehandContourSegmentationTool:()=>dy,PlanarFreehandROITool:()=>d_,PlanarRotateTool:()=>Ce,ProbeTool:()=>IY,RectangleROIStartEndThresholdTool:()=>gs,RectangleROIThresholdTool:()=>gh,RectangleROITool:()=>gt,RectangleScissorsTool:()=>_5,ReferenceCursors:()=>_H,ReferenceLinesTool:()=>CD,RegionSegmentPlusTool:()=>EJ,RegionSegmentTool:()=>E0,ScaleOverlayTool:()=>_z,SculptorTool:()=>_J,SegmentBidirectionalTool:()=>Ib,SegmentLabelTool:()=>EU,SegmentSelectTool:()=>ER,SegmentationIntersectionTool:()=>Ck,SphereScissorsTool:()=>_9,SplineContourSegmentationTool:()=>C0,SplineROITool:()=>CJ,StackScrollTool:()=>I7,Synchronizer:()=>ch,SynchronizerManager:()=>X,ToolGroupManager:()=>j,TrackballRotateTool:()=>ID,Types:()=>vy,UltrasoundDirectionalTool:()=>_v,UltrasoundPleuraBLineTool:()=>_b,VideoRedactionTool:()=>wt,VolumeCroppingControlTool:()=>IX,VolumeCroppingTool:()=>IF,VolumeRotateTool:()=>E$,WholeBodySegmentTool:()=>E9,WindowLevelRegionTool:()=>I3,WindowLevelTool:()=>I1,ZoomTool:()=>I8,addTool:()=>aw,annotation:()=>W,cancelActiveManipulations:()=>cr,cursors:()=>eL,destroy:()=>ci,drawing:()=>Z,init:()=>cn,removeTool:()=>ay,segmentation:()=>eB,splines:()=>eH,state:()=>e0,store:()=>q,synchronizers:()=>Y,utilities:()=>eP,version:()=>c$});var s,d,h,c,u,g,m,p,f,v,I,C,_,E,w,A,S,y,b,T,M,D,O,x,P,L={};n.r(L),n.d(L,{triggerAnnotationAddedForElement:()=>e3,triggerAnnotationAddedForFOR:()=>e4,triggerAnnotationCompleted:()=>e7,triggerAnnotationModified:()=>e9,triggerAnnotationRemoved:()=>e8,triggerContourAnnotationCompleted:()=>e6});var N={};n.r(N),n.d(N,{addAnnotation:()=>th,addChildAnnotation:()=>tl,clearParentAnnotation:()=>tr,getAllAnnotations:()=>to,getAnnotation:()=>ta,getAnnotationManager:()=>tt,getAnnotations:()=>ti,getChildAnnotations:()=>td,getNumberOfAnnotations:()=>tc,getParentAnnotation:()=>ts,invalidateAnnotation:()=>tp,removeAllAnnotations:()=>tg,removeAnnotation:()=>tu,removeAnnotations:()=>tm,setAnnotationManager:()=>tn});var R={};n.r(R),n.d(R,{copyPoints:()=>t6,copyPointsList:()=>t7,getDeltaDistance:()=>t4,getDeltaDistanceBetweenIPoints:()=>t9,getDeltaPoints:()=>t3,getDeltaRotation:()=>t8,getMeanPoints:()=>ne,getMeanTouchPoints:()=>nt});var k={};n.r(k),n.d(k,{checkAndSetAnnotationLocked:()=>ik,getAnnotationsLocked:()=>iL,getAnnotationsLockedCount:()=>iR,isAnnotationLocked:()=>iN,setAnnotationLocked:()=>ix,unlockAllAnnotations:()=>iP});var U={};n.r(U),n.d(U,{getActiveSegmentation:()=>am,setActiveSegmentation:()=>ap});var V={};n.r(V),n.d(V,{addCanvasPointsToArray:()=>oc,arePolylinesIdentical:()=>a1,containsPoint:()=>a$,containsPoints:()=>az,convexHull:()=>
1op,decimate:()=>or,getAABB:()=>aG,getArea:()=>aX,getClosestLineSegmentIntersection:()=>os,getFirstLineSegmentIntersectionIndexes:()=>a7,getLineSegmentIntersectionsCoordinates:()=>ol,getLineSegmentIntersectionsIndexes:()=>a9,getNormal2:()=>aY,getNormal3:()=>aK,getSignedArea:()=>aj,getSubPixelSpacingAndXYDirections:()=>od,getWindingDirection:()=>aq,intersectPolyline:()=>a6,intersectPolylines:()=>a5,isClosed:()=>aW,isPointInsidePolyline3D:()=>om,mergePolylines:()=>oi,pointCanProjectOnLine:()=>ou,pointsAreWithinCloseContourProximity:()=>oh,projectTo2D:()=>og,subtractPolylines:()=>a2});var F={};n.r(F),n.d(F,{hideElementCursor:()=>o2,initElementCursor:()=>oQ,resetElementCursor:()=>o1,setElementCursor:()=>o0});var G={};n.r(G),n.d(G,{deselectAnnotation:()=>lq,getAnnotationsSelected:()=>lK,getAnnotationsSelectedByToolName:()=>lY,getAnnotationsSelectedCount:()=>lJ,isAnnotationSelected:()=>lZ,setAnnotationSelected:()=>lj});var B={};n.r(B),n.d(B,{checkAndSetAnnotationVisibility:()=>si,isAnnotationVisible:()=>l6,setAnnotationVisibility:()=>l9,showAllAnnotations:()=>l7});var H={};n.r(H),n.d(H,{getFont:()=>sc,getState:()=>l5,style:()=>l$});var W={};n.r(W),n.d(W,{AnnotationGroup:()=>sp,FrameOfReferenceSpecificAnnotationManager:()=>sm,config:()=>H,locking:()=>k,selection:()=>G,state:()=>sI,visibility:()=>B});var $={};n.r($),n.d($,{getLockedSegmentIndices:()=>dt,isSegmentIndexLocked:()=>s6,setSegmentIndexLocked:()=>de});var z={};n.r(z),n.d(z,{addColorLUT:()=>dr,getSegmentIndexColor:()=>ds,setColorLUT:()=>dl,setSegmentIndexColor:()=>dd});var X={};n.r(X),n.d(X,{createSynchronizer:()=>cc,destroy:()=>cu,destroySynchronizer:()=>cp,getAllSynchronizers:()=>cm,getSynchronizer:()=>cg,getSynchronizersForViewport:()=>hF});var j={};n.r(j),n.d(j,{createToolGroup:()=>cH,destroy:()=>h7,destroyToolGroup:()=>h9,getAllToolGroups:()=>cW,getToolGroup:()=>s3,getToolGroupForViewport:()=>oy,getToolGroupsWithToolName:()=>e5});var q={};n.r(q),n.d(q,{Synchronizer:()=>ch,SynchronizerManager:()=>X,ToolGroupManager:()=>j,addEnabledElement:()=>hV,addTool:()=>aw,cancelActiveManipulations:()=>cr,hasTool:()=>aA,removeEnabledElement:()=>hW,removeTool:()=>ay,state:()=>e0,svgNodeCache:()=>eJ});var K={};n.r(K),n.d(K,{COLOR_LUT:()=>di});var Y={};n.r(Y),n.d(Y,{createCameraPositionSynchronizer:()=>cj,createImageSliceSynchronizer:()=>ue,createPresentationViewSynchronizer:()=>cY,createSlabThicknessSynchronizer:()=>ui,createStackImageSynchronizer:()=>ua,createVOISynchronizer:()=>cJ,createZoomPanSynchronizer:()=>c1,imageSliceSyncCallback:()=>c9});var Z={};n.r(Z),n.d(Z,{draw:()=>oU,drawArrow:()=>ug,drawCircle:()=>uo,drawEllipse:()=>ul,drawEllipseByCoordinates:()=>ur,drawFan:()=>ud,drawHandle:()=>ln,drawHandles:()=>li,drawHeight:()=>us,drawLine:()=>l_,drawLinkedTextBox:()=>lA,drawPath:()=>le,drawPolyline:()=>lt,drawRect:()=>uc,drawRectByCoordinates:()=>uh,drawRedactionRect:()=>um,drawTextBox:()=>lC,setAttributesIfNecessary:()=>r6,setNewAttributesIfValid:()=>r7});var J={};n.r(J),n.d(J,{AnnotationToPointData:()=>dA,acceptAutogeneratedInterpolations:()=>uQ,areCoplanarContours:()=>uy,contourFinder:()=>uT,detectContourHoles:()=>uO,findContourHoles:()=>ux,findHandlePolylineIndex:()=>u1,findIslands:()=>u2,generateContourSetsFromLabelmap:()=>uJ,getContourHolesDataCanvas:()=>lo,getContourHolesDataWorld:()=>la,getDeduplicatedVTKPolyDataPoints:()=>uM,updateContourPolyline:()=>rx});var Q={};n.r(Q),n.d(Q,{createLabelmapMemo:()=>mh,createRleMemo:()=>mu,restoreMemo:()=>mc});var ee={};n.r(ee),n.d(ee,{run:()=>mW,runGrowCutForBoundingBox:()=>mQ,runGrowCutForSphere:()=>mK,runOneClickGrowCut:()=>m5});var et={};n.r(et),n.d(et,{validate:()=>m8,validatePublic:()=>m4});var en={};n.r(en),n.d(en,{getActiveSegmentIndex:()=>af,setActiveSegmentIndex:()=>m9});var ei={};n.r(ei),n.d(ei,{IslandRemoval:()=>gT,LabelmapMemo:()=>Q,SegmentStatsCalculator:()=>mw,VolumetricCalculator:()=>gF,computeMetabolicStats:()=>pc,computeStackLabelmapFromVolume:()=>pr,computeVolumeLabelmapFromStack:()=>pl,contourAndFindLargestBidirectional:()=>my,createBidirectionalToolData:()=>mb,createLabelmapVolumeForViewport:()=>gp,createMergedLabelmapForIndex:()=>gm,floodFill:()=>gf,getBrushSizeForToolGroup:()=>mC,getBrushThresholdForToolGroup:()=>mE,getBrushToolInstances:()=>mv,getHoveredContourSegmentationAnnotation:()=>
1mG,getOrCreateImageVolume:()=>u$,getOrCreateSegmentationVolume:()=>uH,getReferenceVolumeForSegmentationVolume:()=>uF,getSegmentIndexAtLabelmapBorder:()=>mV,getSegmentIndexAtWorldPoint:()=>mU,getSegmentLargestBidirectional:()=>ps,getStatistics:()=>gz,getUniqueSegmentIndices:()=>i2,growCut:()=>ee,invalidateBrushCursor:()=>mR,rectangleROIThresholdVolumeByRange:()=>gg,segmentContourAction:()=>mN,setBrushSizeForToolGroup:()=>mI,setBrushThresholdForToolGroup:()=>m_,thresholdSegmentationByRange:()=>mA,thresholdVolumeByRange:()=>u5,triggerSegmentationRender:()=>dR,triggerSegmentationRenderBySegmentationId:()=>dk,validateLabelmap:()=>et});var ea={};n.r(ea),n.d(ea,{getTextBoxCoordsCanvas:()=>lS});var eo={};n.r(eo),n.d(eo,{distanceToPoint:()=>pm,distanceToPointSquared:()=>pg,intersectAABB:()=>sb});var er={};n.r(er),n.d(er,{BasicStatsCalculator:()=>lP,Calculator:()=>lb,InstanceBasicStatsCalculator:()=>lL,InstanceCalculator:()=>lT});var el={};n.r(el),n.d(el,{getCanvasCircleCorners:()=>pf,getCanvasCircleRadius:()=>pp});var es={};n.r(es),n.d(es,{getCanvasEllipseCorners:()=>pC,pointInEllipse:()=>pv,precalculatePointInEllipse:()=>pI});var ed={};n.r(ed),n.d(ed,{distanceToPoint:()=>u8,distanceToPointSquared:()=>oo,distanceToPointSquaredInfo:()=>oa,intersectLine:()=>mM,isPointOnLineSegment:()=>oe});var eh={};n.r(eh),n.d(eh,{distanceToPoint:()=>o3,distanceToPointSquared:()=>aH,mirror:()=>p_});var ec={};n.r(ec),n.d(ec,{distanceToPoint:()=>u9});var eu={};n.r(eu),n.d(eu,{findClosestPoint:()=>lE,liangBarksyClip:()=>pw});var eg={};n.r(eg),n.d(eg,{angleBetweenLines:()=>pA});var em={};n.r(em),n.d(em,{BasicStatsCalculator:()=>er,aabb:()=>eo,angle:()=>eg,circle:()=>el,ellipse:()=>es,lineSegment:()=>ed,point:()=>eh,polyline:()=>V,rectangle:()=>ec,vec2:()=>eu});var ep={};n.r(ep),n.d(ep,{default:()=>pD,filterAnnotationsForDisplay:()=>o_,filterAnnotationsWithinSamePlane:()=>ga,filterAnnotationsWithinSlice:()=>oC,getPointInLineOfSightWithCriteria:()=>py,getPointsInLineOfSight:()=>pb,getWorldWidthAndHeightFromCorners:()=>u4,getWorldWidthAndHeightFromTwoPoints:()=>pS,isPlaneIntersectingAABB:()=>pM});var ef={};n.r(ef),n.d(ef,{filterViewportsWithFrameOfReferenceUID:()=>oS,filterViewportsWithParallelNormals:()=>oO,filterViewportsWithToolEnabled:()=>oD,getViewportIdsWithToolToRender:()=>ox});var ev={};n.r(ev),n.d(ev,{getOrientationStringLPS:()=>pO,invertOrientationStringLPS:()=>px});var eI={};n.r(eI),n.d(eI,{Events:()=>pR,addToolState:()=>pU,getToolState:()=>pV,playClip:()=>pH,stopClip:()=>pW});var eC={};n.r(eC),n.d(eC,{extend2DBoundingBoxInViewAxis:()=>gc,getBoundingBoxAroundShape:()=>ij,getBoundingBoxAroundShapeIJK:()=>ij,getBoundingBoxAroundShapeWorld:()=>iq});var e_={};n.r(e_),n.d(e_,{default:()=>pY,smoothAnnotation:()=>pK});var eE={};n.r(eE),n.d(eE,{getBoundsIJKFromRectangleAnnotations:()=>gu,isAxisAlignedRectangle:()=>p0});var ew={};n.r(ew),n.d(ew,{isViewportPreScaled:()=>ly});var eA={};n.r(eA),n.d(eA,{generateImageFromTimeData:()=>fI,getDataInTime:()=>fm,updateVolumeFromTimeData:()=>fC});var eS={};n.r(eS),n.d(eS,{getPoint:()=>f_,getPolyDataPointIndexes:()=>fE,getPolyDataPoints:()=>fw});var ey={};n.r(ey),n.d(ey,{ColorbarRangeTextPosition:()=>T});var eb={};n.r(eb),n.d(eb,{Colorbar:()=>fk,Enums:()=>ey,ViewportColorbar:()=>fF});var eT={};n.r(eT),n.d(eT,{calculateMinMaxMean:()=>fB,extractWindowLevelRegionToolData:()=>f$,getLuminanceFromRegion:()=>fG});var eM={};n.r(eM),n.d(eM,{colorbar:()=>eb,windowLevel:()=>eT});var eD={};n.r(eD),n.d(eD,{LogicalOperation:()=>M,add:()=>ve,addContourSegmentationAnnotation:()=>iG,areSameSegment:()=>hz,checkIntersection:()=>sx,cleanupPolylines:()=>sV,combinePolylines:()=>sN,contourSegmentationOperation:()=>vr,convertContourPolylineToCanvasSpace:()=>sD,convertContourPolylineToWorld:()=>sO,convertContourSegmentationAnnotation:()=>fz,copy:()=>va,copyAnnotation:()=>fK,copyContourSegment:()=>fY,createNewAnnotationFromPolyline:()=>sR,createPolylineHole:()=>sL,deleteOperation:()=>vo,findAllIntersectingContours:()=>hX,getContourHolesData:()=>sP,intersect:()=>vn,intersectPolylinesSets:()=>f4,isContourSegmentationAnnotation:()=>h$,processMultipleIntersections:()=>hq,removeContourSegmentationAnnotation:()=>sT,removeDuplicatePoints:()=>sU,subtract:()=>vt,subtractAnnotationPolylines:()=>f3,subtractMultiplePolylineSets:()=>f5,subtractPolylineSets:()=>f2,unifyAnnotationPolylines:()=>f1,unifyMultiplePolylineSets:()=>f0,unifyPolylineSets:()=>fQ,updateViewportsForAnnotations:()=>sk,xor:()=>vi,xorPolylinesSets:()=>f8});var eO={};n.r(eO),n.d(eO,{checkStandardBasis:()=>vu,inverse3x3Matrix:()=>vh,rotatePoints:()=>vg});var ex={};n.r(ex),n.d(ex,{calculateFanGeometry:()=>vE,default:()=>vC,downloadFanJpeg:()=>v_,exportContourJpeg:()=>vv,getPixelData:()=>vI});var eP={};n.r(eP),n.d(eP,{AnnotationMultiSlice:()=>uS,IslandRemoval:()=>gT,annotationHydration:()=>iM,boundingBox:()=>eC,calibrateImageSpacing:()=>uC,cine:()=>eI,contourSegmentation:()=>eD,contours:()=>J,debounce:()=>ow,drawing:()=>ea,dynamicVolume:()=>eA,geometricSurfaceUtils:()=>eO,getAnnotationNearPoint:()=>up,getAnnotationNearPointOnEnabledElement:()=>uf,getCalibratedAspect:()=>aF,getCalibratedLengthUnitsAndScale:()=>aU,getCalibratedProbeUnitsAndValue:()=>aV,getClosestImageIdForStackViewport:()=>
1iD,getOrCreateImageVolume:()=>u$,getPixelValueUnits:()=>dm,getPixelValueUnitsImageId:()=>dg,getSphereBoundsInfo:()=>uw,getViewportForAnnotation:()=>sQ,isObject:()=>oE,math:()=>em,moveAnnotationToViewPlane:()=>vp,normalizeViewportPlane:()=>gS,orientation:()=>ev,planar:()=>ep,planarFreehandROITool:()=>e_,pointInSurroundingSphereCallback:()=>vs,pointToString:()=>uA,polyDataUtils:()=>eS,rectangleROITool:()=>eE,roundNumber:()=>vw,safeStructuredClone:()=>sr,segmentation:()=>ei,setAnnotationLabel:()=>vm,stackContextPrefetch:()=>fg,stackPrefetch:()=>fo,throttle:()=>oA,touch:()=>R,triggerAnnotationRender:()=>o$,triggerAnnotationRenderForToolGroupIds:()=>s8,triggerAnnotationRenderForViewportIds:()=>oX,triggerEvent:()=>eq.A,usFanExtraction:()=>ex,viewport:()=>ew,viewportFilters:()=>ef,voi:()=>eM});var eL={};n.r(eL),n.d(eL,{CursorNames:()=>vS,CursorSVG:()=>cT,ImageMouseCursor:()=>cC,MouseCursor:()=>oK,SVGMouseCursor:()=>cL,elementCursor:()=>F,registerCursor:()=>cD,setCursorForElement:()=>vA});var eN={};n.r(eN),n.d(eN,{addColorLUT:()=>da,addSegmentations:()=>vN,destroy:()=>vH,getColorLUT:()=>iu,getCurrentLabelmapImageIdForViewport:()=>at,getCurrentLabelmapImageIdsForViewport:()=>an,getNextColorLUTIndex:()=>dn,getSegmentation:()=>n9,getSegmentationRepresentation:()=>n6,getSegmentationRepresentations:()=>n7,getSegmentationRepresentationsBySegmentationId:()=>ie,getSegmentations:()=>mL,getStackSegmentationImageIdsForViewport:()=>vB,getViewportIdsWithSegmentation:()=>s9,getViewportSegmentationRepresentations:()=>vG,getViewportSegmentations:()=>vF,removeAllSegmentationRepresentations:()=>vD,removeAllSegmentations:()=>vU,removeColorLUT:()=>vV,removeContourRepresentation:()=>vx,removeLabelmapRepresentation:()=>vO,removeSegmentation:()=>vk,removeSegmentationRepresentation:()=>vb,removeSurfaceRepresentation:()=>vP,updateLabelmapSegmentationImageReferences:()=>dV});var eR={};n.r(eR),n.d(eR,{getHiddenSegmentIndices:()=>vj,getSegmentIndexVisibility:()=>vX,getSegmentationRepresentationVisibility:()=>v$,setSegmentIndexVisibility:()=>vz,setSegmentationRepresentationVisibility:()=>vW});var ek={};n.r(ek),n.d(ek,{getRenderInactiveSegmentations:()=>vZ,getStyle:()=>vq,hasCustomStyle:()=>vQ,resetToGlobalStyle:()=>vJ,setRenderInactiveSegmentations:()=>vY,setStyle:()=>vK});var eU={};n.r(eU),n.d(eU,{color:()=>z,style:()=>ek,visibility:()=>eR});var eV={};n.r(eV),n.d(eV,{triggerSegmentationDataModified:()=>aa,triggerSegmentationModified:()=>nX,triggerSegmentationRemoved:()=>nj,triggerSegmentationRepresentationModified:()=>nq,triggerSegmentationRepresentationRemoved:()=>nK});var eF={};n.r(eF),n.d(eF,{convertContourHoles:()=>v7,decimateContours:()=>v5,extractSegmentPolylines:()=>v2,getAnnotationMapFromSegmentation:()=>v0,getAnnotationsUIDMapFromSegmentation:()=>s7,getViewportAssociatedToSegmentation:()=>fj,getViewportWithMatchingViewPlaneNormal:()=>fq,removeCompleteContourAnnotation:()=>v3,removeContourHoles:()=>v4,removeContourIslands:()=>v8,smoothContours:()=>v9});var eG={};n.r(eG),n.d(eG,{fillInsideCircle:()=>g4,fillInsideRectangle:()=>Is,fillOutsideCircle:()=>g9,thresholdInsideRectangle:()=>Id});var eB={};n.r(eB),n.d(eB,{activeSegmentation:()=>U,addContourRepresentationToViewport:()=>m6,addContourRepresentationToViewportMap:()=>pe,addDefaultSegmentationListener:()=>dM,addLabelmapRepresentationToViewport:()=>pt,addLabelmapRepresentationToViewportMap:()=>pn,addRepresentationData:()=>iv,addSegmentationListener:()=>dD,addSegmentationRepresentations:()=>m7,addSegmentations:()=>vN,addSurfaceRepresentationToViewport:()=>pi,addSurfaceRepresentationToViewportMap:()=>pa,config:()=>eU,defaultSegmentationStateManager:()=>n8,getActiveSegmentation:()=>ag,getCurrentLabelmapImageIdsForViewport:()=>an,getLabelmapImageIds:()=>Ii,getLabelmapImageIdsForImageId:()=>ai,helpers:()=>Ih,removeAllSegmentationListeners:()=>dx,removeAllSegmentationRepresentations:()=>vD,removeAllSegmentations:()=>vU,removeContourRepresentation:()=>vx,removeLabelmapRepresentation:()=>vO,removeSegment:()=>In,removeSegmentation:()=>vk,removeSegmentationListener:()=>dO,removeSegmentationRepresentation:()=>vb,removeSegmentationRepresentations:()=>vT,removeSurfaceRepresentation:()=>vP,segmentIndex:()=>en,segmentLocking:()=>$,segmentationStyle:()=>n0,state:()=>eN,strategies:()=>eG,triggerSegmentationEvents:()=>eV,updateSegmentations:()=>vR,utilities:()=>eF});var eH={};n.r(eH),n.d(eH,{BSpline:()=>Ip,CardinalSpline:()=>If,CatmullRomSpline:()=>Iv,CubicSpline:()=>Ig,LinearSpline:()=>II,QuadraticBezier:()=>IE,QuadraticSpline:()=>IC,Spline:()=>Iu});var eW={};n.r(eW),n.d(eW,{AnnotationStyleStates:()=>l2,ChangeTypes:()=>eY,Events:()=>eK,KeyboardBindings:()=>C,MeasurementType:()=>w,MouseBindings:()=>I,SegmentationRepresentations:()=>nB,StrategyCallbacks:()=>uB,Swipe:()=>c,ToolModes:()=>e1,WorkerTypes:()=>uR}
1);var e$=n(29804),ez=n(23467),eX=n(86554),ej=n(37437),eq=n(82863);!function(e){e.TOOL_ACTIVATED="CORNERSTONE_TOOLS_TOOL_ACTIVATED",e.TOOLGROUP_VIEWPORT_ADDED="CORNERSTONE_TOOLS_TOOLGROUP_VIEWPORT_ADDED",e.TOOLGROUP_VIEWPORT_REMOVED="CORNERSTONE_TOOLS_TOOLGROUP_VIEWPORT_REMOVED",e.TOOL_MODE_CHANGED="CORNERSTONE_TOOLS_TOOL_MODE_CHANGED",e.CROSSHAIR_TOOL_CENTER_CHANGED="CORNERSTONE_TOOLS_CROSSHAIR_TOOL_CENTER_CHANGED",e.VOLUMECROPPINGCONTROL_TOOL_CHANGED="CORNERSTONE_TOOLS_VOLUMECROPPINGCONTROL_TOOL_CHANGED",e.VOLUMECROPPING_TOOL_CHANGED="CORNERSTONE_TOOLS_VOLUMECROPPING_TOOL_CHANGED",e.STACK_PREFETCH_COMPLETE="CORNERSTONE_TOOLS_STACK_PREFETCH_COMPLETE",e.ANNOTATION_ADDED="CORNERSTONE_TOOLS_ANNOTATION_ADDED",e.ANNOTATION_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_COMPLETED",e.ANNOTATION_MODIFIED="CORNERSTONE_TOOLS_ANNOTATION_MODIFIED",e.ANNOTATION_REMOVED="CORNERSTONE_TOOLS_ANNOTATION_REMOVED",e.ANNOTATION_SELECTION_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_SELECTION_CHANGE",e.ANNOTATION_LOCK_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_LOCK_CHANGE",e.ANNOTATION_VISIBILITY_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_VISIBILITY_CHANGE",e.ANNOTATION_RENDERED="CORNERSTONE_TOOLS_ANNOTATION_RENDERED",e.ANNOTATION_CUT_MERGE_PROCESS_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_CUT_MERGE_PROCESS_COMPLETED",e.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_INTERPOLATION_PROCESS_COMPLETED",e.INTERPOLATED_ANNOTATIONS_REMOVED="CORNERSTONE_TOOLS_INTERPOLATED_ANNOTATIONS_REMOVED",e.SEGMENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_MODIFIED",e.SEGMENTATION_RENDERED="CORNERSTONE_TOOLS_SEGMENTATION_RENDERED",e.SEGMENTATION_REPRESENTATION_ADDED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_ADDED",e.SEGMENTATION_ADDED="CORNERSTONE_TOOLS_SEGMENTATION_ADDED",e.SEGMENTATION_REPRESENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_MODIFIED",e.SEGMENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REMOVED",e.SEGMENTATION_REPRESENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_REMOVED",e.SEGMENTATION_DATA_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_DATA_MODIFIED",e.HISTORY_UNDO="CORNERSTONE_TOOLS_HISTORY_UNDO",e.HISTORY_REDO="CORNERSTONE_TOOLS_HISTORY_REDO",e.KEY_DOWN="CORNERSTONE_TOOLS_KEY_DOWN",e.KEY_UP="CORNERSTONE_TOOLS_KEY_UP",e.MOUSE_DOWN="CORNERSTONE_TOOLS_MOUSE_DOWN",e.MOUSE_UP="CORNERSTONE_TOOLS_MOUSE_UP",e.MOUSE_DOWN_ACTIVATE="CORNERSTONE_TOOLS_MOUSE_DOWN_ACTIVATE",e.MOUSE_DRAG="CORNERSTONE_TOOLS_MOUSE_DRAG",e.MOUSE_MOVE="CORNERSTONE_TOOLS_MOUSE_MOVE",e.MOUSE_CLICK="CORNERSTONE_TOOLS_MOUSE_CLICK",e.MOUSE_DOUBLE_CLICK="CORNERSTONE_TOOLS_MOUSE_DOUBLE_CLICK",e.MOUSE_WHEEL="CORNERSTONE_TOOLS_MOUSE_WHEEL",e.TOUCH_START="CORNERSTONE_TOOLS_TOUCH_START",e.TOUCH_START_ACTIVATE="CORNERSTONE_TOOLS_TOUCH_START_ACTIVATE",e.TOUCH_PRESS="CORNERSTONE_TOOLS_TOUCH_PRESS",e.TOUCH_DRAG="CORNERSTONE_TOOLS_TOUCH_DRAG",e.TOUCH_END="CORNERSTONE_TOOLS_TOUCH_END",e.TOUCH_TAP="CORNERSTONE_TOOLS_TAP",e.TOUCH_SWIPE="CORNERSTONE_TOOLS_SWIPE"}(s||(s={}));let eK=s;!function(e){e.Interaction="Interaction",e.HandlesUpdated="HandlesUpdated",e.StatsUpdated="StatsUpdated",e.InitialSetup="InitialSetup",e.Completed="Completed",e.InterpolationUpdated="InterpolationUpdated",e.History="History",e.MetadataReferenceModified="MetadataReferenceModified",e.LabelChange="LabelChange"}(d||(d={}));let eY=d,eZ={},eJ=eZ,eQ={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:eJ,enabledElements:[],handleRadius:6},e0={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:eJ,enabledElements:[],handleRadius:6};!function(e){e.Active="Active",e.Passive="Passive",e.Enabled="Enabled",e.Disabled="Disabled"}(h||(h={}));let e1=h,e2=[e1.Active,e1.Passive,e1.Enabled],e5=function(e){return e0.toolGroups.filter(({toolOptions:t})=>{let n=Object.keys(t);for(let i=0;i<n.length;i++)if(e===n[i]&&t[e]&&e2.includes(t[e].mode))return!0;return!1})};function e3(e,t){let{renderingEngine:n,viewportId:i}=(0,ej.Ay)(t),a=eK.ANNOTATION_ADDED,o={annotation:e,viewportId:i,renderingEngineId:n.id};(0,eq.A)(ez.A,a,o)}function e4(e){let{toolName:t}=e.metadata,n=e5(t);if(!n.length)return;let i=[];
1n.forEach(t=>{t.viewportsInfo.forEach(t=>{let{renderingEngineId:n,viewportId:a}=t,{FrameOfReferenceUID:o}=(0,ej.b1)(a,n);e.metadata.FrameOfReferenceUID===o&&i.push(t)})});let a=eK.ANNOTATION_ADDED,o={annotation:e};if(!i.length)return void(0,eq.A)(ez.A,a,o);i.forEach(({renderingEngineId:e,viewportId:t})=>{o.viewportId=t,o.renderingEngineId=e,(0,eq.A)(ez.A,a,o)})}function e8(e){let t=eK.ANNOTATION_REMOVED;(0,eq.A)(ez.A,t,e)}function e9(e,t,n=eY.HandlesUpdated){let{viewportId:i,renderingEngineId:a}=t&&(0,ej.Ay)(t)||{},o=eK.ANNOTATION_MODIFIED;(0,eq.A)(ez.A,o,{annotation:e,viewportId:i,renderingEngineId:a,changeType:n})}function e7(e){te({annotation:e})}function e6(e,t=!1){te({annotation:e,contourHoleProcessingEnabled:t})}function te(e){let t=eK.ANNOTATION_COMPLETED;(0,eq.A)(ez.A,t,e)}function tt(){return i}function tn(e){i=e}function ti(e,t){let n=i,a=n.getGroupKey(t);return n.getAnnotations(a,e)}function ta(e){return i.getAnnotation(e)}function to(){return i.getAllAnnotations()}function tr(e){let{annotationUID:t,parentAnnotationUID:n}=e;if(!n)return;let i=ta(n),a=i.childAnnotationUIDs.indexOf(t);i.childAnnotationUIDs.splice(a,1),e.parentAnnotationUID=void 0}function tl(e,t){let{annotationUID:n}=e,{annotationUID:i}=t;tr(t),e.childAnnotationUIDs||(e.childAnnotationUIDs=[]),e.childAnnotationUIDs.includes(i)||(e.childAnnotationUIDs.push(i),t.parentAnnotationUID=n)}function ts(e){return e.parentAnnotationUID?ta(e.parentAnnotationUID):void 0}function td(e){return e.childAnnotationUIDs?.map(e=>ta(e))??[]}function th(e,t){e.annotationUID||(e.annotationUID=eX.A());let n=i;if(t instanceof HTMLDivElement&&(0,ej.Ay)(t)){let i=n.getGroupKey(t);n.addAnnotation(e,i),e3(e,t)}else n.addAnnotation(e,void 0),e4(e);return e.annotationUID}function tc(e,t){let n=i,a=n.getGroupKey(t);return n.getNumberOfAnnotations(a,e)}function tu(e){if(!e)return;let t=i,n=t.getAnnotation(e);n&&(n.childAnnotationUIDs?.forEach(e=>tu(e)),t.removeAnnotation(e),e8({annotation:n,annotationManagerUID:t.uid}))}function tg(){let e=i;for(let t of e.removeAllAnnotations())e8({annotation:t,annotationManagerUID:e.uid})}function tm(e,t){let n=i,a=n.getGroupKey(t);for(let t of n.removeAnnotations(a,e))e8({annotation:t,annotationManagerUID:n.uid})}function tp(e){let t=e;for(;t;)t.invalidated=!0,t=t.parentAnnotationUID?ta(t.parentAnnotationUID):void 0}function tf(e,t){var n,i;let a=t||e.currentTarget,{viewport:o}=(0,ej.Ay)(a)||{};if(!o)return;let r=[(n=e).clientX,n.clientY],l=[(i=e).pageX,i.pageY],s=function(e,t){let n=e.getBoundingClientRect();return[t[0]-n.left-window.pageXOffset,t[1]-n.top-window.pageYOffset]}(a,l),d=o.canvasToWorld(s);return{page:l,client:r,canvas:s,world:d}}let tv=function(e){let t=e.currentTarget,{viewportId:n,renderingEngineId:i}=(0,ej.Ay)(t),a=tf(e,t),o={event:e,eventName:eK.MOUSE_DOUBLE_CLICK,viewportId:n,renderingEngineId:i,camera:{},element:t,startPoints:a,lastPoints:a,currentPoints:a,deltaPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};(0,eq.A)(t,eK.MOUSE_DOUBLE_CLICK,o)||(e.stopImmediatePropagation(),e.preventDefault())},tI=eK.MOUSE_MOVE,tC=function(e){let t=e.currentTarget,n=(0,ej.Ay)(t);if(!n)return;let{renderingEngineId:i,viewportId:a}=n,o=tf(e);(0,eq.A)(t,tI,{renderingEngineId:i,viewportId:a,camera:{},element:t,currentPoints:o,eventName:tI,event:e})||(e.stopImmediatePropagation(),e.preventDefault())},{MOUSE_DOWN:t_,MOUSE_DOWN_ACTIVATE:tE,MOUSE_CLICK:tw,MOUSE_UP:tA,MOUSE_DRAG:tS}=eK,ty={mouseButton:void 0,element:null,renderingEngineId:void 0,viewportId:void 0,isClickEvent:!0,clickDelay:200,preventClickTimeout:null,startPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},lastPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}},tb={mouseButton:void 0,renderingEngineId:void 0,viewportId:void 0,isClickEvent:!0,clickDelay:200,element:null,preventClickTimeout:null,startPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},lastPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}},tT={doubleClickTimeout:null,mouseDownEvent:null,mouseUpEvent:null,ignoreDoubleClick:!1};function tM(e){let t=(0,ej.Ay)(tb.element);if(!t?.viewport)return;let n=tf(e,tb.element),i=tU(tb.element,tb.lastPoints),a=tV(n,i);if(tT.doubleClickTimeout)if(!tx(a.canvas))return;else tL();let o={event:e,eventName:tS,mouseButton:tb.mouseButton,renderingEngineId:tb.renderingEngineId,viewportId:tb.viewportId,camera:{},element:tb.element,startPoints:tk(tb.startPoints),lastPoints:tk(i),currentPoints:n,deltaPoints:a};(0,eq.A)(tb.element,tS,o)||(e.stopImmediatePropagation(),e.preventDefault()),tb.lastPoints=tk(n)}function tD(e){if(clearTimeout(tb.preventClickTimeout),tT.doubleClickTimeout)tT.mouseUpEvent?tR():(tT.mouseUpEvent=e,tb.element.addEventListener("mousemove",tO));else{let t=tb.isClickEvent?tw:tA,n=tf(e,tb.element),i=tV(n,tb.lastPoints),a={event:e,eventName:t,mouseButton:tb.mouseButton,element:tb.element,renderingEngineId:tb.renderingEngineId,viewportId:tb.viewportId,camera:{},startPoints:tk(tb.startPoints),lastPoints:tk(tb.lastPoints),currentPoints:n,deltaPoints:i};(0,eq.A)(a.element,t,a),tR()}document.removeEventListener("mousemove",tM)}function tO(e){tx(tV(tf(e,tb.element),tU(tb.element,tb.lastPoints)).canvas)&&(tL(),tC(e))}function tx(e){return Math.abs(e[0])+Math.abs(e[1])>3}function tP(){tb.isClickEvent=!1}function tL(){tT.ignoreDoubleClick=!0;let e=tT.mouseDownEvent,t=tT.mouseUpEvent;tN();let n=tV(tb.startPoints,tb.startPoints),i={event:e,eventName:t_,element:tb.element,mouseButton:tb.mouseButton,renderingEngineId:tb.renderingEngineId,viewportId:tb.viewportId,camera:{},startPoints:tb.startPoints,lastPoints:tb.startPoints,currentPoints:tb.startPoints,deltaPoints:n};
1tb.lastPoints=tk(i.lastPoints),(0,eq.A)(i.element,t_,i)&&(0,eq.A)(i.element,tE,i),t&&tD(t)}function tN(){tT.doubleClickTimeout&&(clearTimeout(tT.doubleClickTimeout),tT.doubleClickTimeout=null),tT.mouseDownEvent=null,tT.mouseUpEvent=null}function tR(){document.removeEventListener("mouseup",tD),tb.element?.removeEventListener("mousemove",tO),tb.element?.addEventListener("mousemove",tC),tN(),tb=JSON.parse(JSON.stringify(ty))}function tk(e){return JSON.parse(JSON.stringify(e))}function tU(e,t){let{viewport:n}=(0,ej.Ay)(e)||{};if(!n)return t;let i=n.canvasToWorld(t.canvas);return{page:t.page,client:t.client,canvas:t.canvas,world:i}}function tV(e,t){var n,i;return e&&t?{page:tF(e.page,t.page),client:tF(e.client,t.client),canvas:tF(e.canvas,t.canvas),world:(n=e.world,i=t.world,[n[0]-i[0],n[1]-i[1],n[2]-i[2]])}:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}}function tF(e,t){return[e[0]-t[0],e[1]-t[1]]}function tG(e){tT.ignoreDoubleClick?(tT.ignoreDoubleClick=!1,e.stopImmediatePropagation(),e.preventDefault()):tR()}let tB=function(e){if(tT.doubleClickTimeout){if(e.buttons===tT.mouseDownEvent.buttons)return;tT.mouseDownEvent=e,tL();return}tT.doubleClickTimeout=setTimeout(tL,1===e.buttons?400:150),tT.mouseDownEvent=e,tT.ignoreDoubleClick=!1,tb.element=e.currentTarget,tb.mouseButton=e.buttons;let{renderingEngineId:t,viewportId:n}=(0,ej.Ay)(tb.element);tb.renderingEngineId=t,tb.viewportId=n,tb.preventClickTimeout=setTimeout(tP,tb.clickDelay),tb.element.removeEventListener("mousemove",tC);let i=tf(e,tb.element);tb.startPoints=tk(i),tb.lastPoints=tk(i),document.addEventListener("mouseup",tD),document.addEventListener("mousemove",tM)};function tH(e){e.removeEventListener("dblclick",tv),e.removeEventListener("mousedown",tB),e.removeEventListener("mousemove",tC),e.removeEventListener("dblclick",tG,{capture:!0})}let tW={enable:function(e){tH(e),e.addEventListener("dblclick",tv),e.addEventListener("mousedown",tB),e.addEventListener("mousemove",tC),e.addEventListener("dblclick",tG,{capture:!0})},disable:tH},t$=function(e){let t,n,i,a,o=e.currentTarget,{renderingEngineId:r,viewportId:l}=(0,ej.Ay)(o);if(e.deltaY>-1&&e.deltaY<1)return;e.preventDefault();let{spinX:s,spinY:d,pixelX:h,pixelY:c}=(t=0,n=0,i=0,a=0,"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),i=10*t,a=10*n,"deltaY"in e&&(a=e.deltaY),"deltaX"in e&&(i=e.deltaX),(i||a)&&e.deltaMode&&(1===e.deltaMode?(i*=40,a*=40):(i*=800,a*=800)),i&&!t&&(t=i<1?-1:1),a&&!n&&(n=a<1?-1:1),{spinX:t,spinY:n,pixelX:i,pixelY:a}),u={event:e,eventName:eK.MOUSE_WHEEL,renderingEngineId:r,viewportId:l,element:o,camera:{},detail:e,wheel:{spinX:s,spinY:d,pixelX:h,pixelY:c,direction:d<0?-1:1},points:tf(e)};(0,eq.A)(o,eK.MOUSE_WHEEL,u)};function tz(e){e.removeEventListener("wheel",t$)}let tX={enable:function(e){tz(e),e.addEventListener("wheel",t$,{passive:!1})},disable:tz},tj={mouse:0,touch:1};function tq(e,t){let n=Date.now();if(e!==a){if(n-o<=2e3)return t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),!1;a=e}o=n}let tK=tq.bind(null,tj.mouse),tY=tq.bind(null,tj.touch);function tZ(e,t,n){let i=n?tK:tY;t.forEach(function(t){e.addEventListener(t,i,{passive:!1})})}function tJ(e,t,n){let i=n?tK:tY;t.forEach(function(t){e.removeEventListener(t,i)})}let tQ=["mousedown","mouseup","mousemove"],t0=["touchstart","touchend"];function t1(e){tJ(e,tQ,tj.mouse),tJ(e,t0,tj.touch)}let t2={enable:function(e){t1(e),tZ(e,tQ,tj.mouse),tZ(e,t0,tj.touch)},disable:t1};function t5(e,t){let n=t||e.currentTarget,i="touchend"===e.type?e.changedTouches:e.touches;return Object.keys(i).map(e=>{var t,a;let o=[(t=i[e]).clientX,t.clientY],r=[(a=i[e]).pageX,a.pageY],l=function(e,t){let n=e.getBoundingClientRect();return[t[0]-n.left-window.pageXOffset,t[1]-n.top-window.pageYOffset]}(n,r),{viewport:s}=(0,ej.Ay)(n),d=s.canvasToWorld(l);return{page:r,client:o,canvas:l,world:d,touch:{identifier:e,radiusX:i[e].radiusX,radiusY:i[e].radiusY,force:i[e].force,rotationAngle:i[e].rotationAngle}}})}function t3(e,t){var n,i;let a=ne(e),o=ne(t);return{page:nn(a.page,o.page),client:nn(a.client,o.client),canvas:nn(a.canvas,o.canvas),world:(n=a.world,i=o.world,[n[0]-i[0],n[1]-i[1],n[2]-i[2]])}}function t4(e,t){let n=ne(e),i=ne(t);
1return{page:na(n.page,i.page),client:na(n.client,i.client),canvas:na(n.canvas,i.canvas),world:no(n.world,i.world)}}function t8(e,t){}function t9(e,t){let n=ni(e),i=ni(t);return{page:n.page-i.page,client:n.client-i.client,canvas:n.canvas-i.canvas,world:n.world-i.world}}function t7(e){return JSON.parse(JSON.stringify(e))}function t6(e){return JSON.parse(JSON.stringify(e))}function ne(e){return e.reduce((t,n)=>({page:[t.page[0]+n.page[0]/e.length,t.page[1]+n.page[1]/e.length],client:[t.client[0]+n.client[0]/e.length,t.client[1]+n.client[1]/e.length],canvas:[t.canvas[0]+n.canvas[0]/e.length,t.canvas[1]+n.canvas[1]/e.length],world:[t.world[0]+n.world[0]/e.length,t.world[1]+n.world[1]/e.length,t.world[2]+n.world[2]/e.length]}),{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]})}function nt(e){return e.reduce((t,n)=>({page:[t.page[0]+n.page[0]/e.length,t.page[1]+n.page[1]/e.length],client:[t.client[0]+n.client[0]/e.length,t.client[1]+n.client[1]/e.length],canvas:[t.canvas[0]+n.canvas[0]/e.length,t.canvas[1]+n.canvas[1]/e.length],world:[t.world[0]+n.world[0]/e.length,t.world[1]+n.world[1]/e.length,t.world[2]+n.world[2]/e.length],touch:{identifier:null,radiusX:t.touch.radiusX+n.touch.radiusX/e.length,radiusY:t.touch.radiusY+n.touch.radiusY/e.length,force:t.touch.force+n.touch.force/e.length,rotationAngle:t.touch.rotationAngle+n.touch.rotationAngle/e.length}}),{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0],touch:{identifier:null,radiusX:0,radiusY:0,force:0,rotationAngle:0}})}function nn(e,t){return[e[0]-t[0],e[1]-t[1]]}function ni(e){let t=[];for(let n=0;n<e.length;n++)for(let i=0;i<e.length;i++)n<i&&t.push({page:na(e[n].page,e[i].page),client:na(e[n].client,e[i].client),canvas:na(e[n].canvas,e[i].canvas),world:no(e[n].world,e[i].world)});return t.reduce((e,n)=>({page:e.page+n.page/t.length,client:e.client+n.client/t.length,canvas:e.canvas+n.canvas/t.length,world:e.world+n.world/t.length}),{page:0,client:0,canvas:0,world:0})}function na(e,t){return Math.sqrt(Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2))}function no(e,t){return Math.sqrt(Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2)+Math.pow(e[2]-t[2],2))}!function(e){e.UP="UP",e.DOWN="DOWN",e.LEFT="LEFT",e.RIGHT="RIGHT"}(c||(c={}));var nr=n(33999);nr.A.getRuntimeSettings();let{TOUCH_START:nl,TOUCH_START_ACTIVATE:ns,TOUCH_PRESS:nd,TOUCH_DRAG:nh,TOUCH_END:nc,TOUCH_TAP:nu,TOUCH_SWIPE:ng}=eK,nm={page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},np={page:0,client:0,canvas:0,world:0},nf={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...nm,touch:null}],lastPointsList:[{...nm,touch:null}],isTouchStart:!1,startTime:null,pressTimeout:null,pressDelay:700,pressMaxDistance:5,accumulatedDistance:np,swipeDistanceThreshold:48,swiped:!1,swipeToleranceMs:300},nv={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...nm,touch:null}],taps:0,tapTimeout:null,tapMaxDistance:24,tapToleranceMs:300},nI=JSON.parse(JSON.stringify(nf)),nC=JSON.parse(JSON.stringify(nv));function n_(e,t,n){return(0,eq.A)(e,t,n)}function nE(e){let t=t5(e,nI.element),n=nA(nI.element,nI.lastPointsList),i=t.length===n.length?t3(t,n):nm,a=t.length===n.length?t9(t,n):np,o=t.length===n.length?t4(t,nI.lastPointsList):np;nI.accumulatedDistance={page:nI.accumulatedDistance.page+o.page,client:nI.accumulatedDistance.client+o.client,canvas:nI.accumulatedDistance.canvas+o.canvas,world:nI.accumulatedDistance.world+o.world};let r={event:e,eventName:nh,renderingEngineId:nI.renderingEngineId,viewportId:nI.viewportId,camera:{},element:nI.element,startPoints:nt(nI.startPointsList),lastPoints:nt(n),currentPoints:nt(t),startPointsList:t7(nI.startPointsList),lastPointsList:t7(n),currentPointsList:t,deltaPoints:i,deltaDistance:a};n_(nI.element,nh,r),function(e,t){let n=new Date().getTime(),i=nI.startTime.getTime();if(nI.swiped||n-i>nI.swipeToleranceMs)return;let[a,o]=t.canvas,r={event:e,eventName:ng,renderingEngineId:nI.renderingEngineId,viewportId:nI.viewportId,camera:{},element:nI.element,swipe:null};Math.abs(a)>nI.swipeDistanceThreshold&&(r.swipe=a>0?c.RIGHT:c.LEFT,n_(r.element,ng,r),nI.swiped=!0),Math.abs(o)>nI.swipeDistanceThreshold&&(r.swipe=o>0?c.DOWN:c.UP,n_(r.element,ng,r),nI.swiped=!0)}(e,i),nI.lastPointsList=t7(t)}function nw(e){clearTimeout(nI.pressTimeout);let t=t5(e,nI.element),n=nA(nI.element,nI.lastPointsList),i=t.length===n.length?t3(t,n):t3(t,t),a=t.length===n.length?t9(t,n):t9(t,t),o={event:e,eventName:nc,element:nI.element,renderingEngineId:nI.renderingEngineId,viewportId:nI.viewportId,camera:{},startPointsList:t7(nI.startPointsList),lastPointsList:t7(n),currentPointsList:t,startPoints:nt(nI.startPointsList),lastPoints:nt(n),currentPoints:nt(t),deltaPoints:i,deltaDistance:a};n_(o.element,nc,o),function(e){if(new Date().getTime()-nI.startTime.getTime()>nC.tapToleranceMs||(0===nC.taps&&(nC.element=nI.element,nC.renderingEngineId=nI.renderingEngineId,nC.viewportId=nI.viewportId,nC.startPointsList=nI.startPointsList),nC.taps>0&&(nC.element!=nI.element||nC.renderingEngineId!=nI.renderingEngineId||nC.viewportId!=nI.viewportId)))return;let t=t5(e,nC.element);t4(t,nC.startPointsList).canvas>nC.tapMaxDistance||(clearTimeout(nC.tapTimeout),nC.taps+=1,nC.tapTimeout=setTimeout(()=>{let n={event:e,eventName:nu,element:nC.element,renderingEngineId:nC.renderingEngineId,viewportId:nC.viewportId,camera:{},currentPointsList:t,currentPoints:nt(t),taps:nC.taps};n_(n.element,nu,n),nC=JSON.parse(JSON.stringify(nv))},nC.tapToleranceMs))}(e),nI=JSON.parse(JSON.stringify(nf)),document.removeEventListener("touchmove",nE),document.removeEventListener("touchend",nw)}function nA(e,t){let{viewport:n}=(0,ej.Ay)(e);return t.map(e=>{let t=n.canvasToWorld(e.canvas);return{page:e.page,client:e.client,canvas:e.canvas,world:t,touch:e.touch}})}let nS=function(e){nI.element=e.currentTarget;let{renderingEngineId:t,viewportId:n}=(0,ej.Ay)(nI.element);nI.renderingEngineId=t,nI.viewportId=n,nI.isTouchStart||(clearTimeout(nI.pressTimeout),nI.pressTimeout=setTimeout(()=>(function(e){if(nI.accumulatedDistance.canvas>nI.pressMaxDistance)return;let t={event:e,eventName:nd,renderingEngineId:nI.renderingEngineId,viewportId:nI.viewportId,camera:{},element:nI.element,startPointsList:t7(nI.startPointsList),lastPointsList:t7(nI.lastPointsList),startPoints:t6(nt(nI.startPointsList)),lastPoints:t6(nt(nI.lastPointsList))};n_(t.element,nd,t)})(e),nI.pressDelay),function(e){nI.isTouchStart=!0,nI.startTime=new Date;let t=t5(e,nI.element),n=nt(t),i={event:e,eventName:nl,element:nI.element,renderingEngineId:nI.renderingEngineId,viewportId:nI.viewportId,camera:{},startPointsList:t,lastPointsList:t,currentPointsList:t,startPoints:n,lastPoints:n,currentPoints:n,deltaPoints:nm,deltaDistance:np};nI.startPointsList=t7(i.startPointsList),nI.lastPointsList=t7(i.lastPointsList),n_(i.element,nl,i)&&n_(i.element,ns,i)}(e),document.addEventListener("touchmove",nE),document.addEventListener("touchend",nw))};function ny(e){t2.disable(e),e.removeEventListener("touchstart",nS)}let nb={enable:function(e){ny(e),t2.enable(e),e.addEventListener("touchstart",nS,{passive:!1})},disable:ny},nT={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null},nM={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};function nD(e){nM.element=e.currentTarget;let{renderingEngineId:t,viewportId:n}=(0,ej.Ay)(nM.element);nM.renderingEngineId=t,nM.viewportId=n,nM.key=e.key,nM.keyCode=e.keyCode,e.preventDefault();let i={renderingEngineId:nM.renderingEngineId,viewportId:nM.viewportId,element:nM.element,key:nM.key,keyCode:nM.keyCode};(0,eq.A)(i.element,eK.KEY_DOWN,i),document.addEventListener("keyup",nx),document.addEventListener("visibilitychange",nO),nM.element.removeEventListener("keydown",nD)}function nO(){document.removeEventListener("visibilitychange",nO),"hidden"===document.visibilityState&&nP()}function nx(e){let t={renderingEngineId:nM.renderingEngineId,viewportId:nM.viewportId,element:nM.element,key:nM.key,keyCode:nM.keyCode};document.removeEventListener("keyup",nx),document.removeEventListener("visibilitychange",nO),nM.element.addEventListener("keydown",nD),nM=structuredClone(nT),(0,eq.A)(t.element,eK.KEY_UP,t)}function nP(){nM.keyCode=void 0}function nL(e){e.removeEventListener("keydown",nD)}let nN={enable:function(e){nL(e),e.addEventListener("keydown",nD)},disable:nL,getModifierKey:function(){return nM.keyCode}};var nR=n(59993),nk=n(6094),nU=n(59922),nV=n(40857),nF=n(26397),nG=n(28363);!function(e){e.Labelmap="Labelmap",e.Contour="Contour",e.Surface="Surface"}(u||(u={}));let nB=u;var nH=n(6014),nW=n(4837),n$=n(18728),nz=n(95628);function nX(e){(0,eq.A)(ez.A,eK.SEGMENTATION_MODIFIED,{segmentationId:e})}function nj(e){(0,eq.A)(ez.A,eK.SEGMENTATION_REMOVED,{segmentationId:e})}function nq(e,t,n){(0,eq.A)(ez.A,eK.SEGMENTATION_REPRESENTATION_MODIFIED,{segmentationId:t,type:n,viewportId:e})}function nK(e,t,n){(0,eq.A)(ez.A,eK.SEGMENTATION_REPRESENTATION_REMOVED,{viewportId:e,segmentationId:t,type:n})}let nY={renderOutline:!0,outlineWidthAutoGenerated:3,outlineWidth:1,outlineWidthInactive:1,outlineOpacity:1,outlineOpacityInactive:.85,outlineDash:void 0,outlineDashInactive:void 0,outlineDashAutoGenerated:"5,3",activeSegmentOutlineWidthDelta:0,renderFill:!0,fillAlpha:.5,fillAlphaInactive:.3,fillAlphaAutoGenerated:.3},nZ={renderOutline:!0,renderOutlineInactive:!0,outlineWidth:3,outlineWidthInactive:2,activeSegmentOutlineWidthDelta:0,renderFill:!0,renderFillInactive:!0,fillAlpha:.5,fillAlphaInactive:.4,outlineOpacity:1,outlineOpacityInactive:.85};var nJ=n(41083);class nQ{constructor(){this.config={global:{},segmentations:{},viewportsStyle:{}}}setStyle(e,t,n=!0){let i,{viewportId:a,segmentationId:o,type:r,segmentIndex:l}=e,s=this.getStyle(e),d=n?{...s,...t}:t;if(i=(a||o)&&n?this.copyActiveToInactiveIfNotProvided(d,r):d,!r)throw Error("Type is required to set a style");if(a){this.config.viewportsStyle[a]||(this.config.viewportsStyle[a]={renderInactiveSegmentations:!1,representations:{}});let e=this.config.viewportsStyle[a].representations;if(o){e[o]||(e[o]={}),e[o][r]||(e[o][r]={});let t=e[o][r];void 0!==l?(t.perSegment||(t.perSegment={}),t.perSegment[l]=i):t.allSegments=i}else{let t="__allSegmentations__";e[t]||(e[t]={}),e[t][r]||(e[t][r]={}),e[t][r].allSegments=i}}else if(o){this.config.segmentations[o]||(this.config.segmentations[o]={}),this.config.segmentations[o][r]||(this.config.segmentations[o][r]={});let e=this.config.segmentations[o][r];void 0!==l?(e.perSegment||(e.perSegment={}),e.perSegment[l]=i):e.allSegments=i}else this.config.global[r]=i}copyActiveToInactiveIfNotProvided(e,t){let n={...e};return t===nB.Labelmap?(n.renderOutlineInactive??=n.renderOutline,n.outlineWidthInactive??=n.outlineWidth,n.renderFillInactive??=n.renderFill,n.fillAlphaInactive??=n.fillAlpha,n.outlineOpacityInactive??=n.outlineOpacity):t===nB.Contour&&(n.outlineWidthInactive??=n.outlineWidth,n.outlineOpacityInactive??=n.outlineOpacity,n.outlineDashInactive??=n.outlineDash,n.renderOutlineInactive??=n.renderOutline,n.renderFillInactive??=n.renderFill,n.fillAlphaInactive??=n.fillAlpha),n}getStyle(e){let{viewportId:t,segmentationId:n,type:i,segmentIndex:a}=e,o=this.getDefaultStyle(i);if(this.config.global[i]&&(o={...o,...this.config.global[i]}),this.config.segmentations[n]?.[i]&&(o={...o,...this.config.segmentations[n][i].allSegments},void 0!==a&&this.config.segmentations[n][i].perSegment?.[a]&&(o={...o,...this.config.segmentations[n][i].perSegment[a]})),t&&this.config.viewportsStyle[t]){this.config.viewportsStyle[t].renderInactiveSegmentations;let e="__allSegmentations__";this.config.viewportsStyle[t].representations[e]?.[i]&&(o={...o,...this.config.viewportsStyle[t].representations[e][i].allSegments}),n&&this.config.viewportsStyle[t].representations[n]?.[i]&&(o={...o,...this.config.viewportsStyle[t].representations[n][i].allSegments},void 0!==a&&this.config.viewportsStyle[t].representations[n][i].perSegment?.[a]&&(o={...o,...this.config.viewportsStyle[t].representations[n][i].perSegment[a]}))}return o}getRenderInactiveSegmentations(e){return this.config.viewportsStyle[e]?.renderInactiveSegmentations}setRenderInactiveSegmentations(e,t){this.config.viewportsStyle[e]||(this.config.viewportsStyle[e]={renderInactiveSegmentations:!1,representations:{}}),this.config.viewportsStyle[e].renderInactiveSegmentations=t}getDefaultStyle(e){switch(e){case nB.Labelmap:return nZ;case nB.Contour:return nY;case nB.Surface:return{};default:throw Error(`Unknown representation type: ${e}`)}}clearSegmentationStyle(e){this.config.segmentations[e]&&delete this.config.segmentations[e]}clearAllSegmentationStyles(){this.config.segmentations={}}clearViewportStyle(e){this.config.viewportsStyle[e]&&delete this.config.viewportsStyle[e]}clearAllViewportStyles(){for(let e in this.config.viewportsStyle){let t=this.config.viewportsStyle[e].renderInactiveSegmentations;this.config.viewportsStyle[e]={renderInactiveSegmentations:t,representations:{}}}}resetToGlobalStyle(){this.clearAllSegmentationStyles(),this.clearAllViewportStyles()}hasCustomStyle(e){let{type:t}=e,n=this.getStyle(e),i=this.getDefaultStyle(t);return!nJ.b(n,i)}}let n0=new nQ,n1={colorLUT:[],segmentations:[],viewportSegRepresentations:{}};
1class n2{constructor(e){this._stackLabelmapImageIdReferenceMap=new Map,this._labelmapImageIdReferenceMap=new Map,e||=eX.A(),this.state=Object.freeze(nH.G(n1)),this.uid=e}getState(){return this.state}updateState(e){let t=nH.G(this.state);e(t),this.state=Object.freeze(t)}getColorLUT(e){return this.state.colorLUT[e]}getNextColorLUTIndex(){return this.state.colorLUT.length}resetState(){this._stackLabelmapImageIdReferenceMap.clear(),this._labelmapImageIdReferenceMap.clear(),this.state=Object.freeze(nH.G(n1))}getSegmentation(e){return this.state.segmentations.find(t=>t.segmentationId===e)}updateSegmentation(e,t){this.updateState(n=>{let i=n.segmentations.find(t=>t.segmentationId===e);if(!i)return void console.warn(`Segmentation with id ${e} not found. Update aborted.`);Object.assign(i,t)}),nX(e)}addSegmentation(e){var t;if(this.getSegmentation(e.segmentationId))throw Error(`Segmentation with id ${e.segmentationId} already exists`);this.updateState(t=>{let n=nH.G(e);if(n.representationData.Labelmap&&"volumeId"in n.representationData.Labelmap&&!("imageIds"in n.representationData.Labelmap)){let e=this.getLabelmapImageIds(n.representationData);n.representationData.Labelmap.imageIds=e}t.segmentations.push(n)}),t=e.segmentationId,(0,eq.A)(ez.A,eK.SEGMENTATION_ADDED,{segmentationId:t})}removeSegmentation(e){this.updateState(t=>{let n=t.segmentations.filter(t=>t.segmentationId!==e);t.segmentations.splice(0,t.segmentations.length,...n)}),nj(e)}addSegmentationRepresentation(e,t,n,i){if((0,ej.yj)(e)){if(this.getSegmentationRepresentations(e,{type:n,segmentationId:t}).length>0)return void console.debug("A segmentation representation of type",n,"already exists in viewport",e,"for segmentation",t);this.updateState(a=>{a.viewportSegRepresentations[e]||(a.viewportSegRepresentations[e]=[],n0.setRenderInactiveSegmentations(e,!0)),n!==nB.Labelmap?this.addDefaultSegmentationRepresentation(a,e,t,n,i):this.addLabelmapRepresentation(a,e,t,i)}),nq(e,t,n)}}addDefaultSegmentationRepresentation(e,t,n,i,a){let o=e.segmentations.find(e=>e.segmentationId===n);if(!o)return;let r={};Object.keys(o.segments).forEach(e=>{r[Number(e)]={visible:!0}}),e.viewportSegRepresentations[t].push({segmentationId:n,type:i,active:!0,visible:!0,colorLUTIndex:a?.colorLUTIndex||0,segments:r,config:{...n4(i),...a}}),this._setActiveSegmentation(e,t,n)}addLabelmapRepresentation(e,t,n,i=n4(nB.Labelmap)){if(!(0,ej.yj)(t))return;let a=this.getSegmentation(n);if(!a)return;let{representationData:o}=a;if(!o.Labelmap)return this.addDefaultSegmentationRepresentation(e,t,n,nB.Labelmap,i);this.processLabelmapRepresentationAddition(t,n),this.addDefaultSegmentationRepresentation(e,t,n,nB.Labelmap,i)}async processLabelmapRepresentationAddition(e,t){let n=(0,ej.yj)(e);if(!n)return;let i=this.getSegmentation(t);if(!i)return;let a=n.viewport instanceof nU.A,{representationData:o}=i,r="volumeId"in o.Labelmap;n.viewport,a||r||this.updateLabelmapSegmentationImageReferences(e,i.segmentationId)}_updateLabelmapSegmentationReferences(e,t,n,i){let a=t.getCurrentImageId(),o=!1;for(let i of n)t.isReferenceViewable({referencedImageId:i},{asOverlay:!0})&&(o=!0,this._stackLabelmapImageIdReferenceMap.get(e).set(a,i),this._updateLabelmapImageIdReferenceMap({segmentationId:e,referenceImageId:a,labelmapImageId:i}));return i&&i(t,e,n),o?this._stackLabelmapImageIdReferenceMap.get(e).get(a):void 0}updateLabelmapSegmentationImageReferences(e,t){let n=this.getSegmentation(t);if(!n)return;this._stackLabelmapImageIdReferenceMap.has(t)||this._stackLabelmapImageIdReferenceMap.set(t,new Map);let{representationData:i}=n;if(!i.Labelmap)return;let a=this.getLabelmapImageIds(i),o=(0,ej.yj)(e).viewport;return this._updateLabelmapSegmentationReferences(t,o,a,null)}_updateAllLabelmapSegmentationImageReferences(e,t){let n=this.getSegmentation(t);if(!n)return;this._stackLabelmapImageIdReferenceMap.has(t)||this._stackLabelmapImageIdReferenceMap.set(t,new Map);let{representationData:i}=n;if(!i.Labelmap)return;let a=this.getLabelmapImageIds(i),o=(0,ej.yj)(e).viewport;this._updateLabelmapSegmentationReferences(t,o,a,(e,t,n)=>
1{e.getImageIds().forEach((i,a)=>{for(let o of n)e.isReferenceViewable({referencedImageId:o,sliceIndex:a},{asOverlay:!0,withNavigation:!0})&&(this._stackLabelmapImageIdReferenceMap.get(t).set(i,o),this._updateLabelmapImageIdReferenceMap({segmentationId:t,referenceImageId:i,labelmapImageId:o}))})})}getLabelmapImageIds(e){let t,n=e.Labelmap;if(n.imageIds)t=n.imageIds;else if(!t&&n.volumeId){let e=n.volumeId;t=nV.Ay.getVolume(e).imageIds}return t}getLabelmapImageIdsForImageId(e,t){let n=this._generateMapKey({segmentationId:t,referenceImageId:e});return this._labelmapImageIdReferenceMap.get(n)}getCurrentLabelmapImageIdsForViewport(e,t){let n=(0,ej.yj)(e);if(!n)return;let i=n.viewport.getCurrentImageId();return this.getLabelmapImageIdsForImageId(i,t)}getCurrentLabelmapImageIdForViewport(e,t){let n=(0,ej.yj)(e);if(!n||!this._stackLabelmapImageIdReferenceMap.has(t))return;let i=n.viewport.getCurrentImageId();return this._stackLabelmapImageIdReferenceMap.get(t).get(i)}getStackSegmentationImageIdsForViewport(e,t){if(!this.getSegmentation(t))return[];this._updateAllLabelmapSegmentationImageReferences(e,t);let{viewport:n}=(0,ej.yj)(e),i=n.getImageIds(),a=this._stackLabelmapImageIdReferenceMap.get(t);return i.map(e=>a.get(e))}removeSegmentationRepresentationsInternal(e,t){let n=[];return this.updateState(i=>{if(!i.viewportSegRepresentations[e])return;let a=i.viewportSegRepresentations[e],o=!1;if(!t||Object.values(t).every(e=>void 0===e))n.push(...a),delete i.viewportSegRepresentations[e];else{let{segmentationId:r,type:l}=t;i.viewportSegRepresentations[e]=a.filter(e=>{let t=r&&l&&e.segmentationId===r&&e.type===l||r&&!l&&e.segmentationId===r||!r&&l&&e.type===l;return t&&(n.push(e),e.active&&(o=!0)),!t}),0===i.viewportSegRepresentations[e].length?delete i.viewportSegRepresentations[e]:o&&(i.viewportSegRepresentations[e][0].active=!0)}}),n}removeSegmentationRepresentations(e,t){let n=this.removeSegmentationRepresentationsInternal(e,t);n.forEach(t=>{nK(e,t.segmentationId,t.type)});let i=this.getSegmentationRepresentations(e);return i.length>0&&i[0].active&&nq(e,i[0].segmentationId,i[0].type),n}removeSegmentationRepresentation(e,t,n){let i=this.removeSegmentationRepresentationsInternal(e,t);return n||i.forEach(({segmentationId:t,type:n})=>{nK(e,t,n)}),i}_updateLabelmapImageIdReferenceMap({segmentationId:e,referenceImageId:t,labelmapImageId:n}){let i=this._generateMapKey({segmentationId:e,referenceImageId:t});if(!this._labelmapImageIdReferenceMap.has(i))return void this._labelmapImageIdReferenceMap.set(i,[n]);let a=Array.from(new Set([...this._labelmapImageIdReferenceMap.get(i),n]));this._labelmapImageIdReferenceMap.set(i,a)}_setActiveSegmentation(e,t,n){let i=e.viewportSegRepresentations[t];i&&i.forEach(e=>{e.active=e.segmentationId===n})}setActiveSegmentation(e,t){this.updateState(n=>{let i=n.viewportSegRepresentations[e];i&&i.forEach(e=>{e.active=e.segmentationId===t})}),nq(e,t)}getActiveSegmentation(e){if(!this.state.viewportSegRepresentations[e])return;let t=this.state.viewportSegRepresentations[e].find(e=>e.active);if(t)return this.getSegmentation(t.segmentationId)}getSegmentationRepresentations(e,t={}){let n=this.state.viewportSegRepresentations[e];return n?t.type||t.segmentationId?n.filter(e=>{let n=!t.type||e.type===t.type,i=!t.segmentationId||e.segmentationId===t.segmentationId;return n&&i}):n:[]}getSegmentationRepresentation(e,t){return this.getSegmentationRepresentations(e,t)[0]}getSegmentationRepresentationVisibility(e,t){let n=this.getSegmentationRepresentation(e,t);return n?.visible}setSegmentationRepresentationVisibility(e,t,n){this.updateState(i=>{let a=this.getSegmentationRepresentations(e,t);a&&a.forEach(e=>{e.visible=n,Object.entries(e.segments).forEach(([e,t])=>{t.visible=n})})}),nq(e,t.segmentationId,t.type)}addColorLUT(e,t){this.updateState(n=>{n.colorLUT[t]&&console.warn("Color LUT table already exists, overwriting"),n.colorLUT[t]=nH.G(e)})}removeColorLUT(e){this.updateState(t=>{delete t.colorLUT[e]})}_getStackIdForImageIds(e){return e.map(e=>e.slice(-Math.round(.15*e.length))).join("_")}getAllViewportSegmentationRepresentations(){return Object.entries(this.state.viewportSegRepresentations).map(([e,t])=>({viewportId:e,representations:t}))}getSegmentationRepresentationsBySegmentationId(e){let t=[];return Object.entries(this.state.viewportSegRepresentations).forEac
1h(([n,i])=>{let a=i.filter(t=>t.segmentationId===e);a.length>0&&t.push({viewportId:n,representations:a})}),t}_generateMapKey({segmentationId:e,referenceImageId:t}){return`${e}-${t}`}}async function n5({imageIds:e,options:t}){let n=t?.volumeId||eX.A();return await nW.createAndCacheVolumeFromImages(n,e),{volumeId:n}}async function n3({segmentationId:e,options:t}){let n=n8.getSegmentation(e),i=n.representationData.Labelmap,{volumeId:a}=await n5({imageIds:i.imageIds,options:t});n.representationData.Labelmap.volumeId=a}function n4(e){let t=n$.Ay.newInstance(),n=nz.Ay.newInstance();return(n.addPoint(0,0),e===nB.Labelmap)?{cfun:t,ofun:n}:{}}let n8=new n2("DEFAULT");function n9(e){return n8.getSegmentation(e)}function n7(e,t={}){return n8.getSegmentationRepresentations(e,t)}function n6(e,t){if(!t.segmentationId||!t.type)throw Error("getSegmentationRepresentation: No segmentationId or type provided, you need to provide at least one of them");let n=n8.getSegmentationRepresentations(e,t);return n?.[0]}function ie(e){return n8.getSegmentationRepresentationsBySegmentationId(e)}let it=function(e,t){let{viewport:n}=(0,ej.Ay)(e),i=n.getActors().filter(e=>e.representationUID&&"string"==typeof e.representationUID&&e.representationUID.startsWith(t));n.removeActors(i.map(e=>e.uid))};var ii=n(93637),ia=n(95898),io=n(95972),ir=n(13081);function il(e,t,n){let i=(0,ej.yj)(e);if(!i)return;let{renderingEngine:a,viewport:o}=i;if(!a||!o)return;let r=o.getActors().filter(n);return r.length>0?r[0]:void 0}function is(e,t){return function(e,t){let n=(0,ej.yj)(e);if(!n)return;let{renderingEngine:i,viewport:a}=n;if(!i||!a)return;let o=a.getActors().filter(t);return o.length>0?o:void 0}(e,e=>e.representationUID?.startsWith(`${t}-${nB.Labelmap}`))}function id(e,t){return il(e,t,e=>e.representationUID?.startsWith(`${t}-${nB.Labelmap}`))}function ih(e,t){return`${e}-${nB.Surface}-${t}`}let ic=function(e,t,n){var i,a;let o,r=(i=e.id,a=t.segmentIndex,il(i,n,e=>e.representationUID===ih(n,a))),l=r?.actor,s=t.visible;if(l){if(l.setVisibility(s),!s)return;let n=l.getMapper(),i=n.getInputData(),a=t.points,o=t.polys,r=i.getPoints().getData(),d=i.getPolys().getData();if(a.length===r.length&&o.length===d.length)return;let h=io.Ay.newInstance();h.getPoints().setData(a,3);let c=ir.Ay.newInstance({values:Float32Array.from(o)});h.setPolys(c),n.setInputData(h),n.modified(),e.getRenderer().resetCameraClippingRange();return}let d=t.points,h=t.polys,c=t.color,u=io.Ay.newInstance();u.getPoints().setData(d,3);let g=ir.Ay.newInstance({values:Float32Array.from(h)});u.setPolys(g);let m=ii.Ay.newInstance({});m.setInputData(u);let p=ia.Ay.newInstance();p.setMapper(m),p.getProperty().setColor(c[0]/255,c[1]/255,c[2]/255),p.getProperty().setLineWidth(2);let f=ih(n,t.segmentIndex);e.addActor({uid:eX.A(),actor:p,clippingFilter:o,representationUID:f}),e.resetCamera(),e.getRenderer().resetCameraClippingRange(),e.render()};function iu(e){return n8.getColorLUT(e)}let ig={},im=!1;function ip(){if(!ig.addons?.polySeg)return console.warn("PolySeg add-on not configured. This will prevent automatic conversion between segmentation representations (labelmap, contour, surface). To enable these features, install @cornerstonejs/polymorphic-segmentation and register it during initialization: cornerstoneTools.init({ addons: { polySeg } })."),null;let e=ig.addons.polySeg;return im||(e.init(),im=!0),e}let iv=function({segmentationId:e,type:t,data:n}){let i=n9(e);if(!i)throw Error(`Segmentation ${e} not found`);switch(i.representationData[t]&&console.warn(`Representation data of type ${t} already exists for segmentation ${e}, overwriting it.`),t){case nB.Labelmap:case nB.Contour:case nB.Surface:n&&(i.representationData[t]=n);break;default:throw Error(`Invalid representation type ${t}`)}};async function iI(e,t,n,i){let a=await n();return iv({segmentationId:e,type:t,data:a}),i?.(),a}function iC(e,t){let n=n6(e,t);return n?Object.entries(n.segments).reduce((e,[t,n])=>(n.visible||e.add(Number(t)),e),new Set):new Set}let i_={getUpdateFunction:function(e){let t=ip();return n=>t.updateSurfaceData(n,{viewport:e})},render:async function e(e,t){let{segmentationId:n,type:i}=t,a=n9(n);if(!a)return;let o=a.representationData[nB.Surface];if(!o&&ip()?.canComputeRequestedRepresentation(n,nB.Surface)){let t=ip();if(!(o=await iI(n,nB.Surface,()=>t.computeSurfaceData(n,{viewport:e}))))throw Error(`No Surface data found for segmentationId ${n} even we tried to compute it`)}else o||ip()||console.debug(`No surface data found for segmentationId ${n} and PolySeg add-on is not configured. Unable to convert from other representations to surface. Please register PolySeg using cornerstoneTools.init({ addons: { polySeg } }) to enable automatic conversion.`);if(!o)return void console.warn(`No Surface data found for segmentationId ${n}. Skipping render.`);let{geometryIds:r}=o;r?.size||console.warn(`No Surfaces found for segmentationId ${n}. Skipping render.`);let{colorLUTIndex:l}=t,s=iu(l),d=[];r.forEach(t=>{let a=nV.Ay.getGeometry(t);if(!a?.data)return void console.warn(`No Surfaces found for geometryId ${t}. Skipping render.`);let{segmentIndex:o}=a.data,r=iC(e.id,{segmentationId:n,type:i}).has(o),l=a.data;l.color=s[o].slice(0,3),l.visible=!r,d.push(l),ic(e,l,n)}),e.render()},removeRepresentation:function(e,t,n=!1){let i=(0,ej.yj)(e);if(!i)return;
1let{viewport:a}=i;it(a.element,t),n&&a.render()}};var iE=n(87085),iw=n(11641),iA=n(39337),iS=n(52702),iy=n(95264),ib=n(37639),iT=n(42283);function iM(e,t,n,i){let{viewPlaneNormal:a,FrameOfReferenceUID:o}=e.getViewReference(),r={annotationUID:i?.annotationUID||eX.A(),data:{handles:{points:n}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:t,viewPlaneNormal:a,FrameOfReferenceUID:o,referencedImageId:function(e,t,n){let i;if(e instanceof iA.A)i=iD(e,t,n);else if(e instanceof nU.A){let a=function(e){let t=e.getViewReferenceId?.();if(t)return t;if(e instanceof nU.A)return`volumeId:${function(e){let t=e.getActors();if(t)return t.find(e=>"vtkVolume"===e.actor.getClassName())?.uid}(e)}`;throw Error("getTargetId: viewport must have a getTargetId method")}(e),o=iS.A(a),r=nV.Ay.getVolume(o);i=iy.A(r,t,n)}else throw Error("getReferencedImageId: viewport must be a StackViewport or BaseVolumeViewport");return i}(e,n[0],a),...i}};return th(r,e.element),r}function iD(e,t,n){let i=e.getImageIds();if(!i||!i.length)return;let a=i.map(e=>{let{imagePositionPatient:i}=ib.get("imagePlaneModule",e);return{imageId:e,distance:function(e,t,n){let i=iT.vt();return iT.jb(i,e,t),Math.abs(iT.Om(i,n))}(t,i,n)}});return a.sort((e,t)=>e.distance-t.distance),a[0].imageId}let iO=new Set;function ix(e,t=!0){let n=iU();e&&(t?function(e,t,n){if(!t.has(e)){t.add(e),n.added.push(e);let i=ta(e);i&&(i.isLocked=!0)}}(e,iO,n):iV(e,iO,n)),iF(n,iO)}function iP(){var e,t;let n=iU();e=iO,t=n,e.forEach(n=>{iV(n,e,t)}),iF(n,iO)}function iL(){return Array.from(iO)}function iN(e){return iO.has(e)}function iR(){return iO.size}function ik(e){let t=iN(e);return ix(e,t),t}function iU(){return Object.freeze({added:[],removed:[],locked:[]})}function iV(e,t,n){if(t.delete(e)){n.removed.push(e);let t=ta(e);t&&(t.isLocked=!1)}}function iF(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach(t=>void e.locked.push(t)),(0,eq.A)(ez.A,eK.ANNOTATION_LOCK_CHANGE,e))}function iG(e){if(e.parentAnnotationUID)return;if(!e.data.segmentation)throw Error("addContourSegmentationAnnotation: annotation does not have a segmentation data");let{segmentationId:t,segmentIndex:n}=e.data.segmentation,i=n9(t);i.representationData.Contour||(i.representationData.Contour={annotationUIDsMap:new Map});let{annotationUIDsMap:a}=i.representationData.Contour;a||(a=new Map);let o=a?.get(n);o||(o=new Set,a.set(n,o)),i.segments[n].locked&&ix(e.annotationUID,!0),a.set(n,o.add(e.annotationUID))}var iB=n(25773),iH=n(36535),iW=n(53862),i$=n(69201);let{EPSILON:iz}=i$;function iX(e,t,n=!1){let i=1/0,a=n?-1/0:0,o=1/0,r=n?-1/0:0,l=1/0,s=n?-1/0:0,d=e[0]?.length===3;for(let t=0;t<e.length;t++){let n=e[t];i=Math.min(n[0],i),a=Math.max(n[0],a),o=Math.min(n[1],o),r=Math.max(n[1],r),d&&(l=Math.min(n[2]??l,l),s=Math.max(n[2]??s,s))}return t?(i=Math.max(n?t[0]+iz:0,i),a=Math.min(n?t[0]-iz:t[0]-1,a),o=Math.max(n?t[1]+iz:0,o),r=Math.min(n?t[1]-iz:t[1]-1,r),d&&3===t.length&&(l=Math.max(n?t[2]+iz:0,l),s=Math.min(n?t[2]-iz:t[2]-1,s))):!n&&(i=Math.max(0,i),a=Math.min(1/0,a),o=Math.max(0,o),r=Math.min(1/0,r),d&&(l=Math.max(0,l),s=Math.min(1/0,s))),d?[[i,a],[o,r],[l,s]]:[[i,a],[o,r],null]}function ij(e,t){return iX(e,t,!1)}function iq(e,t){return iX(e,t,!0)}let iK=(e,t)=>JSON.stringify(e)===JSON.stringify(t);function iY(e,t,n,i){let a=n[0]/2,o=n[1]/2,r=n[2]/2,l=Array(8);l[0]=iW.A(e,[i[0]-a,i[1]-o,i[2]-r]);let s=[[1,-1,-1],[-1,1,-1],[1,1,-1],[-1,-1,1],[1,-1,1],[-1,1,1],[1,1,1]];for(let t=0;t<7;t++){let[n,d,h]=s[t];l[t+1]=iW.A(e,[i[0]+n*a,i[1]+d*o,i[2]+h*r])}return ij(l,t)}function iZ(e,t){let{spacing:n}=e,i=e.voxelManager.getScalarDataLength(),a=[],o=0;for(let e=0;e<t.length;e++){let{imageData:r,spacing:l,dimensions:s,voxelManager:d}=t[e].volume,h=t[e].volume.voxelManager.getScalarDataLength();h===i&&iK(l,n)&&(o=e);let c=t[e].lower,u=t[e].upper;a.push({imageData:r,lower:c,upper:u,spacing:l,dimensions:s,volumeSize:h,voxelManager:d})}return{volumeInfoList:a,baseVolumeIdx:o}}let iJ=new Map,iQ=e=>{let t=iJ.get(e);t&&(t.isDirty=!0)},i0=e=>{let t=iJ.get(e);return t&&!t.isDirty?t.indices:null},i1=(e,t)=>{iJ.set(e,{indices:t,isDirty:!1})};function i2(e){let t,n=i0(e);if(n)return n;let i=n9(e);if(!i)throw Error(`No segmentation found for segmentationId ${e}`);if(i.representationData.Labelmap)t=function(e,t){var n,i,a;let o=e.representationData[nB.Labelmap],r=new Set;
1return o.imageIds?(n=r,o.imageIds.forEach(e=>{nV.Ay.getImage(e).voxelManager.getScalarData().forEach(e=>{0!==e&&n.add(e)})})):(i=r,a=t,nV.Ay.getVolume(a).voxelManager.forEach(({value:e})=>{0!==e&&i.add(e)})),Array.from(r).map(Number).sort((e,t)=>e-t)}(i,e);else if(i.representationData.Contour)t=function(e){let{annotationUIDsMap:t,geometryIds:n}=e.representationData.Contour||{};if(!n)throw Error(`No geometryIds found for segmentationId ${e.segmentationId}`);let i=new Set([...t.keys()]);return n.forEach(e=>{let t=nV.Ay.getGeometry(e);i.add(t.data.segmentIndex)}),Array.from(i).sort((e,t)=>e-t)}(i);else if(i.representationData.Surface){var a;a=i,t=Array.from((a.representationData.Surface?.geometryIds??[]).keys()).map(Number).sort((e,t)=>e-t)}else throw Error(`Unsupported segmentation type: ${i.representationData}`);return i1(e,t),t}let i5=new Map,i3=new Map,i4={getUpdateFunction:function(e){return null},render:async function e(e,t){var n,i;let{segmentationId:a}=t,o=n9(a);if(!o)return;let r=o.representationData[nB.Contour],l=ip();if(!r&&ip()?.canComputeRequestedRepresentation(a,nB.Contour)&&!i5.get(e.id)){i5.set(e.id,!0);try{r=await iI(a,nB.Contour,()=>l.computeContourData(a,{viewport:e}))}catch(e){console.warn("Unable to compute contour data for segmentationId",a,e)}i5.set(e.id,!1)}else r||ip()||console.debug(`No contour data found for segmentationId ${a} and PolySeg add-on is not configured. Unable to convert from other representations to contour. Please register PolySeg using cornerstoneTools.init({ addons: { polySeg } }) to enable automatic conversion.`);if(!r||!r.geometryIds?.length)return;let s=!1,d=e.getCamera().viewPlaneNormal;r.annotationUIDsMap&&(s=!function(e,t){let n=Array.from(e.values()).flat().map(e=>Array.from(e)).flat();for(let e of iw.p(n,3)){let n=ta(e);if(n?.metadata){if(!n.metadata.viewPlaneNormal)continue;let e=n.metadata.viewPlaneNormal;if(Math.abs(Math.abs(t[0]*e[0]+t[1]*e[1]+t[2]*e[2])-1)>.01)return!1}}return!0}(r.annotationUIDsMap,d)),r.geometryIds.length>0&&(s=!function(e,t){let n=null,i=null;for(let t of e){let e=nV.Ay.getGeometry(t);if(!e)continue;let a=e.data;if(a.contours?.[0]?.points?.length>=3){n=e,i=a;break}}if(!n||!i)return!1;let{points:a}=i.contours[0],[o]=a,r=iT.vt(),{length:l}=a,s=Math.ceil(l/25);for(let e=1;e<l;e+=s){let n=a[e];if(iT.jb(r,o,n),iT.S8(r,r),iT.Om(t,r)>.1)return!1}return!0}(r.geometryIds,d));let h=i3.get(e.id)||new Set;if(s&&!i5.get(e.id)&&!h.has(a)&&e.viewportStatus===iE.A.RENDERED){i5.set(e.id,!0);let t=i2(a),n=(await l.computeSurfaceData(a,{segmentIndices:t,viewport:e})).geometryIds,i=[];for(let e of n.values()){let t=nV.Ay.getGeometry(e).data;i.push({points:t.points,polys:t.polys,segmentIndex:t.segmentIndex,id:t.segmentIndex})}let o=await l.clipAndCacheSurfacesForViewport(i,e),s=l.extractContourData(o),d=l.createAndAddContourSegmentationsFromClippedSurfaces(s,e,a);r.annotationUIDsMap=new Map([...r.annotationUIDsMap,...d]),h.add(a),i3.set(e.id,h),i5.set(e.id,!1)}n=r.geometryIds,i=r.annotationUIDsMap,i.size?e.render():function(e,t,n){let{segmentationId:i}=n,a=new Map;t.forEach(t=>{let n=nV.Ay.getGeometry(t);if(!n)return void console.warn(`No geometry found for geometryId ${t}. Skipping render.`);let o=n.data.segmentIndex;var r=n;if(!r)throw Error(`No contours found for geometryId ${r.id}`);let l=r.id;if(r.type!==iB.A.CONTOUR)throw Error(`Geometry type ${r.type} not supported for rendering.`);r.data||console.warn(`No contours found for geometryId ${l}. Skipping render.`);let s=n0.getStyle({viewportId:e.id,segmentationId:i,type:nB.Contour,segmentIndex:o}),d=n.data,h=e.getCamera().viewPlaneNormal;d.contours.forEach(t=>{let{points:n,color:a,id:r}=t,l=iD(e,n[0],h),s={annotationUID:eX.A(),data:{contour:{closed:!0,polyline:n},segmentation:{segmentationId:i,segmentIndex:o,color:a,id:r},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!0,isVisible:!0,metadata:{referencedImageId:l,toolName:"PlanarFreehandContourSegmentationTool",FrameOfReferenceUID:e.getFrameOfReferenceUID(),viewPlaneNormal:e.getCamera().viewPlaneNormal}};th(s,e.element),iG(s)}),s&&a.set(o,s)}),e.render()}(e,n,t)},removeRepresentation:function(e,t,n=!1){let i=(0,ej.yj)(e);if(!i)return;
1let{viewport:a}=i;n&&a.render()}};var i8=n(13450),i9=n(37373),i7=n(43372),i6=n(89759),ae=n(87068);function at(e,t){let n=an(e,t);if(n?.length)return n[0]}function an(e,t){return n8.getCurrentLabelmapImageIdsForViewport(e,t)}function ai(e,t){return n8.getLabelmapImageIdsForImageId(e,t)}function aa(e,t,n){iQ(e),(0,eq.A)(ez.A,eK.SEGMENTATION_DATA_MODIFIED,{segmentationId:e,modifiedSlicesToUse:t,segmentIndex:n})}var ao=n(93133);let ar=new Map,al=({cfun:e,ofun:t,actor:n})=>{n.getProperty().setRGBTransferFunction(1,e),n.getProperty().setScalarOpacity(1,t)};async function as({viewport:e,volumeInputs:t,segmentationId:n}){let i=e.getDefaultActor(),{actor:a}=i,{uid:o}=i,r=e.getVolumeId();if(ar.get(o)?.added)return{uid:o,actor:a};let l=nV.Ay.getVolume(t[0].volumeId);if(!l)throw Error(`imageVolume with id: ${l.volumeId} does not exist`);let{volumeId:s}=t[0],d=await nW.loadVolume(s);if(!d)throw Error(`segImageVolume with id: ${d.volumeId} does not exist`);let h=d.voxelManager.getCompleteScalarDataArray(),{imageData:c}=d,u=nV.Ay.getVolume(r);if(u.vtkOpenGLTexture.hasUpdatedFrames())return;let g=u.voxelManager.getCompleteScalarDataArray(),m=new Float32Array(2*u.voxelManager.getScalarDataLength()),p=c.getDimensions();for(let e=0;e<p[2];++e)for(let t=0;t<p[1];++t)for(let n=0;n<p[0];++n){let i=n+p[0]*(t+p[1]*e);m[2*i+0]=g[i],m[2*i+1]=h[i]}e.removeActors([o]);let f=a.getMapper(),v=(0,ao.h)(f);a.setMapper(v),v.setBlendMode(i7.A.LABELMAP_EDGE_PROJECTION_BLEND);let I=v.getInputData().getPointData().getArray(0);I.setData(m),I.setNumberOfComponents(2);let C=a.getProperty().getColorMixPreset();a.getProperty().setColorMixPreset(1);let _=a.getProperty().getForceNearestInterpolation(1);a.getProperty().setForceNearestInterpolation(1,!0);let E=a.getProperty().getIndependentComponents();a.getProperty().setIndependentComponents(!0),e.addActor({...i,representationUID:`${n}-${nB.Labelmap}`}),ar.set(o,{added:!0,segmentationRepresentationUID:`${n}`,originalBlendMode:e.getBlendMode()});let w=a.get("preLoad");function A(t){let{segmentationId:n}=t.detail,{representationData:i}=n9(n),{volumeId:a}=i.Labelmap;if(a!==d.volumeId)return;let o=nV.Ay.getVolume(a).voxelManager,r=v.getInputData(),l=r.getPointData().getArray(0),s=l.getData(),h=c.getDimensions();for(let e of Array.from({length:h[2]},(e,t)=>t))for(let t=0;t<h[1];++t)for(let n=0;n<h[0];++n){let i=n+h[0]*(t+h[1]*e);s[2*i+1]=o.getAtIndex(i)}l.setData(s),r.modified(),e.render()}return a.set({preLoad:al}),ez.A.addEventListenerDebounced(eK.SEGMENTATION_DATA_MODIFIED,A,200),ez.A.addEventListener(eK.SEGMENTATION_REPRESENTATION_REMOVED,function t(n){n.detail.viewportId===e.id&&(ez.A.removeEventListener(eK.SEGMENTATION_DATA_MODIFIED,A),ez.A.removeEventListener(eK.SEGMENTATION_REPRESENTATION_REMOVED,t),e.getActor(o)&&e.removeActors([o]),ar.delete(o),e.isDisabled||(a.setMapper(f),a.getProperty().setColorMixPreset(C),a.getProperty().setForceNearestInterpolation(1,_),a.getProperty().setIndependentComponents(E),e.addActor({...i}),a.set(w),e.render()))}),{uid:o,actor:a}}let{uuidv4:ad}=i9;async function ah(e,t,n,i){let{renderingEngine:a,viewport:o}=(0,ej.Ay)(e),{id:r}=o;if(o instanceof nU.A){let e=function(e,t){let{volumeId:n}=e;if(!n){n=ad();let i=n9(t);i.representationData.Labelmap={...i.representationData.Labelmap,volumeId:n},e.volumeId=n,nX(t)}return n}(t,n);nV.Ay.getVolume(e)||await ac(t);let l=i?.blendMode??i7.A.MAXIMUM_INTENSITY_BLEND,s=l===i7.A.LABELMAP_EDGE_PROJECTION_BLEND;if(s){let t=o.getVolumeId(),n=nV.Ay.getVolume(t),i=nV.Ay.getVolume(e).dimensions,a=n.dimensions;(i[0]!==a[0]||i[1]!==a[1]||i[2]!==a[2])&&(s=!1,l=i7.A.MAXIMUM_INTENSITY_BLEND,console.debug("Dimensions mismatch - falling back to regular volume addition"))}let d=[{volumeId:e,visibility:!0,representationUID:`${n}-${nB.Labelmap}`,useIndependentComponents:s,blendMode:l}];if(d[0].useIndependentComponents)return await as({viewport:o,volumeInputs:d,segmentationId:n});await (0,i6.A)(a,d,[r],!1,!0)}else{let e=an(o.id,n).map(e=>({imageId:e,representationUID:`${n}-${nB.Labelmap}-${e}`}));(0,ae.A)(a,e,[r])}aa(n)}async function ac(e){if(!(e.imageIds.length>0))throw Error("cannot create labelmap, no imageIds found for the volume labelmap");return await nW.createAndCacheVolumeFromImages(e.volumeId||ad(),e.imageIds)}let au=function(e,t){let{viewport:n}=(0,ej.Ay)(e);n.removeActors([function(e,t){let n=id(e,t);return n?.uid}(n.id,t)])};function ag(e){return n8.getActiveSegmentation(e)}function am(e){return ag(e)}function ap(e,t){n8.setActiveSegmentation(e,t)}function af(e){let t=n9(e);if(t){let e=Object.keys(t.segments).find(e=>t.segments[e].active);return e?Number(e):void 0}}let av=new Map,aI=!1;function aC(e,t,n){let i={...e,...n||{}},a=t?i.fillAlpha:i.fillAlphaInactive,o=t?i.outlineWidth:i.outlineWidthInactive,r=t?i.renderFill:i.renderFillInactive,l=t?i.renderOutline:i.renderOutlineInactive;return{fillAlpha:a,outlineWidth:o,renderFill:r,renderOutline:l,outlineOpacity:t?i.outlineOpacity:i.outlineOpacityInactive,activeSegmentOutlineWidthDelta:i.activeSegmentOutlineWidthDelta}}async function a_(e,t,n,i){return await ah(e.element,t,n,i)||void 0}let aE={getUpdateFunction:function(e){},render:async function e(e,t){let{segmentationId:n,config:i}=t,a=n9(n);if(!a)return void console.warn("No segmentation found for segmentationId: ",n);let o=a.representationData[nB.Labelmap],r=is(e.id,n);if(!o&&ip()?.canComputeRequestedRepresentation(n,nB.Labelmap)&&!aI){aI=!0;let t=ip();if(!(o=await iI(n,nB.Labelmap,()=>t.computeLabelmapData(n,{viewport:e}),()=>{n8.processLabelmapRepresentationAddition(e.id,n),setTimeout(()=>{aa(n)},0)})))throw Error(`No labelmap data found for segmentationId ${n}.`);aI=!1}else o||ip()||console.debug(`No labelmap data found for segmentationId ${n} and PolySeg add-on is not configured. Unable to convert from other representations to labelmap. Please register PolySeg using cornerstoneTools.init({ addons: { polySeg } }) to enable automatic conversion.`);if(o){if(e instanceof i8.A)r?.length||await a_(e,o,n,i),r=is(e.id,n);else{let t=an(e.id,n);if(!t?.length)return;r||await a_(e,o,n,i),r=is(e.id,n)}if(r?.length)for(let n of r)!function(e,t,n){let{segmentationId:i}=n,{cfun:a,ofun:o}=n.config,{colorLUTIndex:r}
1=n,l=ag(e),s=l?.segmentationId===i,d=n0.getStyle({viewportId:e,type:nB.Labelmap,segmentationId:i}),h=n0.getRenderInactiveSegmentations(e),c=iu(r),u=Math.min(256,c.length),{outlineWidth:g,renderOutline:m,outlineOpacity:p,activeSegmentOutlineWidthDelta:f}=aC(d,s),v=iC(e,{segmentationId:i,type:nB.Labelmap});for(let t=0;t<u;t++){let n=t,r=c[n],{fillAlpha:l,outlineWidth:h,renderFill:u,renderOutline:g}=aC(d,s,n0.getStyle({viewportId:e,type:nB.Labelmap,segmentationId:i,segmentIndex:n})),{forceOpacityUpdate:m,forceColorUpdate:p}=function(e,t,n,{fillAlpha:i,renderFill:a,renderOutline:o,segmentColor:r,outlineWidth:l,segmentsHidden:s,cfun:d,ofun:h}){let c=`${e}-${t}-${n}`,u=av.get(c);if(!u)return av.set(c,{fillAlpha:i,renderFill:a,renderOutline:o,outlineWidth:l,segmentColor:r.slice(),segmentsHidden:new Set(s),cfunMTime:d.getMTime(),ofunMTime:h.getMTime()}),{forceOpacityUpdate:!0,forceColorUpdate:!0};let{fillAlpha:g,renderFill:m,renderOutline:p,outlineWidth:f,segmentColor:v,segmentsHidden:I,cfunMTime:C,ofunMTime:_}=u,E=v[0]!==r[0]||v[1]!==r[1]||v[2]!==r[2],w=v[3]!==r[3]||g!==i||m!==a||p!==o||f!==l||I!==s;return(w||E)&&av.set(c,{fillAlpha:i,renderFill:a,renderOutline:o,outlineWidth:l,segmentColor:r.slice(),segmentsHidden:new Set(s),cfunMTime:d.getMTime(),ofunMTime:h.getMTime()}),{forceOpacityUpdate:w,forceColorUpdate:E}}(e,i,n,{fillAlpha:l,renderFill:u,renderOutline:g,segmentColor:r,outlineWidth:h,segmentsHidden:v,cfun:a,ofun:o});if(p&&a.addRGBPoint(n,r[0]/255,r[1]/255,r[2]/255),m)if(u){let e=v.has(n)?0:r[3]/255*l;o.removePoint(n),o.addPointLong(n,e,.5,1)}else o.addPointLong(n,.01,.5,1)}o.setClamping(!1);let I=t.actor,{preLoad:C}=I.get?.("preLoad")||{preLoad:null};if(C?C({cfun:a,ofun:o,actor:I}):(I.getProperty().setRGBTransferFunction(0,a),I.getProperty().setScalarOpacity(0,o),I.getProperty().setInterpolationTypeToNearest()),m){I.getProperty().setUseLabelOutline(m),I.getProperty().setLabelOutlineOpacity(p);let e=af(n.segmentationId),t=Array(u-1);for(let n=1;n<u;n++){if(v.has(n)){t[n-1]=0;continue}t[n-1]=n===e?g+f:g}I.getProperty().setLabelOutlineThickness(t),I.modified(),I.getProperty().modified(),I.getMapper().modified()}else I.getProperty().setLabelOutlineThickness(Array(u-1).fill(0));let _=s||h;I.setVisibility(_)}(e.id,n,t)}},removeRepresentation:function(e,t,n=!1){let i=(0,ej.yj)(e);if(av.forEach((e,n)=>{n.includes(t)&&av.delete(n)}),!i)return;let{viewport:a}=i;au(a.element,t),n&&a.render()}};function aw(e){let t=e.toolName;if(!t)throw Error(`No Tool Found for the ToolClass ${e.name}`);e0.tools[t]||(e0.tools[t]={toolClass:e})}function aA(e){let t=e.toolName;return!!(t&&e0.tools[t])}function aS(e){return!!(e&&e0.tools[e])}function ay(e){let t=e.toolName;if(!t)throw Error(`No tool found for: ${e.name}`);e0.tools[t],delete e0.tools[t]}var ab=n(23139),aT=n(55907),aM=n(35993),aD=n(39248),aO=n(20103);let{CalibrationTypes:ax}=aO,aP="voxels",aL=[1,2,3,4],aN=["4,3","4,7"],aR={0:"px",1:"percent",2:"dB",3:"cm",4:"seconds",5:"hertz",6:"dB/seconds",7:"cm/sec",8:"cm\xb2",9:"cm\xb2/s",12:"degrees"},ak=[ax.ERMF,ax.USER,ax.ERROR,ax.PROJECTION,ax.CALIBRATED,ax.UNKNOWN],aU=(e,t)=>{let{calibration:n,hasPixelSpacing:i,spacing:a=[1,1,1]}=e,o=i?"mm":"px",r=i?"mm\xb3":aP,l=o+"\xb2",s=n?.scale||1,d=s/(n?.columnPixelSpacing||a[0]),h=s/(n?.rowPixelSpacing||a[1]),c=s/a[2],u="";if(!n||!n.type&&!n.sequenceOfUltrasoundRegions)return{unit:o,areaUnit:l,scale:d,scaleY:h,scaleZ:c,volumeUnit:r};if(ak.includes(n?.type)&&(u=n.type),n.type===ax.UNCALIBRATED)return{unit:"px",areaUnit:"px\xb2",scale:d,scaleY:h,scaleZ:c,volumeUnit:aP};if(n.sequenceOfUltrasoundRegions){let e=n.sequenceOfUltrasoundRegions.find(e=>t.every(t=>t[0]>=e.regionLocationMinX0&&t[0]<=e.regionLocationMaxX1&&t[1]>=e.regionLocationMinY0&&t[1]<=e.regionLocationMaxY1)&&aL.includes(e.regionDataType));if(e&&e.physicalUnitsXDirection===e.physicalUnitsYDirection){let t=Math.abs(e.physicalDeltaX),n=Math.abs(e.physicalDeltaY);d=1/t,h=1/n,u="US Region",l=(o=aR[e.physicalUnitsXDirection]||"unknown")+"\xb2"}}else n.scale&&(d=n.scale);return{unit:o+(u?` ${u}`:""),areaUnit:l+(u?` ${u}`:""),volumeUnit:r+(u?` ${u}`:""),scale:d,scaleY:h,scaleZ:c}},aV=(e,t)=>
1{let[n]=t,{calibration:i}=e,a=["raw"],o=[null],r="";if(!i||!i.type&&!i.sequenceOfUltrasoundRegions)return{units:a,values:o};if(i.sequenceOfUltrasoundRegions){let e=i.sequenceOfUltrasoundRegions.filter(e=>aL.includes(e.regionDataType)&&aN.includes(`${e.physicalUnitsXDirection},${e.physicalUnitsYDirection}`));if(!e?.length)return{units:a,values:o};let t=e.find(e=>n[0]>=e.regionLocationMinX0&&n[0]<=e.regionLocationMaxX1&&n[1]>=e.regionLocationMinY0&&n[1]<=e.regionLocationMaxY1);if(!t)return{units:a,values:o};let{referencePixelX0:l=0,referencePixelY0:s=0}=t,{physicalDeltaX:d,physicalDeltaY:h}=t,c=(n[1]-t.regionLocationMinY0-s)*h;r="US Region",o=[(n[0]-t.regionLocationMinX0-l)*d,c],a=[aR[t.physicalUnitsXDirection],aR[t.physicalUnitsYDirection]]}return{units:a,values:o,calibrationType:r}},aF=e=>e.calibration?.aspect||1;function aG(e,t){let n=e,i=t?.numDimensions||2,a=3===i;if(!Array.isArray(e[0])){let t=e.length/i;n=Array(e.length/i);for(let o=0;o<t;o++)n[o]=[e[o*i],e[o*i+1]],a&&n[o].push(e[o*i+2])}let o=1/0,r=1/0,l=-1/0,s=-1/0,d=1/0,h=-1/0;for(let e=0,t=n.length;e<t;e++){let[t,i,c]=n[e];o=o<t?o:t,r=r<i?r:i,l=l>t?l:t,s=s>i?s:i,a&&(d=d<c?d:c,h=h>c?h:c)}return a?{minX:o,maxX:l,minY:r,maxY:s,minZ:d,maxZ:h}:{minX:o,maxX:l,minY:r,maxY:s}}var aB=n(31142);function aH(e,t){if(e.length!==t.length)throw Error("Both points should have the same dimensionality");let[n,i,a=0]=e,[o,r,l=0]=t,s=o-n,d=r-i,h=l-a;return s*s+d*d+h*h}function aW(e){if(e.length<3)return!1;let t=e.length,n=aH(e[0],e[t-1]);return aB.aI(0,n)}function a$(e,t,n={closed:void 0}){if(e.length<3)return!1;let i=e.length,a=0,{closed:o,holes:r}=n;if(r?.length){for(let e of r)if(a$(e,t))return!1}let l=!(void 0===o?aW(e):o),s=e.length-(l?1:2);for(let n=0;n<=s;n++){let o=e[n],r=e[n===i-1?0:n+1],l=o[0]>=r[0]?o[0]:r[0],s=o[1]>=r[1]?o[1]:r[1],d=o[1]<=r[1]?o[1]:r[1];if(t[0]<=l&&t[1]>=d&&t[1]<s){let e=o[0]===r[0];if(!e){let n=(t[1]-o[1])*(r[0]-o[0])/(r[1]-o[1])+o[0];e=t[0]<=n}a+=+!!e}}return!!(a%2)}function az(e,t){for(let n=0,i=t.length;n<i;n++)if(!a$(e,t[n]))return!1;return!0}function aX(e){let t=e.length,n=0,i=t-1;for(let a=0;a<t;a++)n+=(e[i][0]+e[a][0])*(e[i][1]-e[a][1]),i=a;return Math.abs(n/2)}function aj(e){if(e.length<3)return 0;let t=e[0],n=0;for(let i=0,a=e.length;i<a;i++){let o=e[i],r=e[i===a-1?0:i+1],l=o[0]-t[0],s=o[1]-t[1],d=r[0]-t[0];n+=l*(r[1]-t[1])-s*d}return .5*n}function aq(e){return aj(e)>=0?1:-1}function aK(e){let t=function(e){let t=iT.vt(),n=e[0];for(let i=0,a=e.length;i<a;i++){let o=e[i],r=e[i===a-1?0:i+1],l=o[0]-n[0],s=o[1]-n[1],d=o[2]-n[2],h=r[0]-n[0],c=r[1]-n[1],u=r[2]-n[2];t[0]+=s*u-d*c,t[1]+=d*h-l*u,t[2]+=l*c-s*h}return iT.hs(t,t,.5),t}(e);return iT.S8(t,t)}function aY(e){let t=aj(e);return[0,0,t/Math.abs(t)]}var aZ=n(50107);function aJ(e,t){return e[0]*t[1]-e[1]*t[0]}function aQ(e,t){return aM.n4(e,t,1e-7)}function a0(e,t,n,i){let a=aZ.Re(aZ.vt(),t,e),o=aZ.Re(aZ.vt(),i,n),r=aJ(a,o),l=aZ.Re(aZ.vt(),n,e),s=aJ(l,a);if(1e-7>Math.abs(r)){if(1e-7>Math.abs(s)){let r=aZ.Om(a,a),l=aZ.Om(o,o);if(r<1e-7||l<1e-7)return aQ(e,n)||aQ(e,i)?e:aQ(t,n)||aQ(t,i)?t:null;let s=aZ.Om(aZ.Re(aZ.vt(),n,e),a)/r,d=aZ.Om(aZ.Re(aZ.vt(),i,e),a)/r,h=aZ.Om(aZ.Re(aZ.vt(),e,n),o)/l,c=aZ.Om(aZ.Re(aZ.vt(),t,n),o)/l,u=e=>e>=-1e-7&&e<=1.0000001;if(u(s)&&aQ(n,aZ.Ln(aZ.vt(),e,a,s)))return n;if(u(d)&&aQ(i,aZ.Ln(aZ.vt(),e,a,d)))return i;if(u(h)&&aQ(e,aZ.Ln(aZ.vt(),n,o,h)))return e;if(u(c)&&aQ(t,aZ.Ln(aZ.vt(),n,o,c)))return t}return null}let d=aJ(l,o)/r,h=s/r;return d>=-1e-7&&d<=1.0000001&&h>=-1e-7&&h<=1.0000001?[e[0]+d*a[0],e[1]+d*a[1]]:null}function a1(e,t){if(e.length!==t.length)return!1;let n=e.length;if(0===n)return!0;let i=!0;for(let a=0;a<n;a++)if(!aQ(e[a],t[a])){i=!1;break}if(i)return!0;let a=!0;for(let i=0;i<n;i++)if(!aQ(e[i],t[n-1-i])){a=!1;break}if(a)return!0;for(let i=1;i<n;i++){let a=!0;for(let o=0;o<n;o++)if(!aQ(e[o],t[(o+i)%n])){a=!1;break}if(a)return!0;let o=!0;for(let a=0;a<n;a++)if(!aQ(e[a],t[(n-1-a+i)%n])){o=!1;break}if(o)return!0}return!1}function a2(e,t){if(e.length<3)return[];if(t.length<3)return[e.slice()];let n=t.slice();if(a1(e,t))return[];let i=aj(e),a=aj(n);Math.sign(i)===Math.sign(a)&&Math.abs(a)>1e-7&&n.reverse();let o=[];for(let t=0;t<e.length;t++){let i=e[t],a=e[(t+1)%e.length];for(let e=0;e<n.length;e++){let r=n[e],l=n[(e+1)%n.length],s=a0(i,a,r,l);if(s){let n=Math.sqrt(aZ.hG(i,a)),d=Math.sqrt(aZ.hG(r,l));o.push({coord:s,seg1Idx:t,seg2Idx:e,alpha1:n<1e-7?0:Math.sqrt(aZ.hG(i,s))/n,alpha2:d<1e-7?0:Math.sqrt(aZ.hG(r,
1s))/d})}}}let r=(e,t,n)=>{let i=[],a=0;for(let o=0;o<e.length;o++){let r=e[o];for(let e of(i.push({id:`${t}_v${a++}`,coordinates:r,type:g.Vertex,originalPolyIndex:t,originalVertexIndex:o,next:null,prev:null,isIntersection:!1,visited:!1}),n.filter(e=>(0===t?e.seg1Idx:e.seg2Idx)===o).sort((e,n)=>(0===t?e.alpha1:e.alpha2)-(0===t?n.alpha1:n.alpha2)))){if(i.length>0&&aQ(i[i.length-1].coordinates,e.coord)){i[i.length-1].isIntersection||(i[i.length-1].isIntersection=!0,i[i.length-1].intersectionInfo=e,i[i.length-1].alpha=0===t?e.alpha1:e.alpha2);continue}i.push({id:`${t}_i${a++}`,coordinates:e.coord,type:g.Intersection,originalPolyIndex:t,next:null,prev:null,isIntersection:!0,visited:!1,alpha:0===t?e.alpha1:e.alpha2,intersectionInfo:e})}}let o=[];if(i.length>0){o.push(i[0]);for(let e=1;e<i.length;e++)aQ(i[e].coordinates,o[o.length-1].coordinates)?i[e].isIntersection&&(o[o.length-1].isIntersection=!0,o[o.length-1].intersectionInfo=i[e].intersectionInfo,o[o.length-1].alpha=i[e].alpha):o.push(i[e])}if(o.length>0)for(let e=0;e<o.length;e++)o[e].next=o[(e+1)%o.length],o[e].prev=o[(e-1+o.length)%o.length];return o},l=r(e,0,o),s=r(n,1,o);l.forEach(e=>{if(e.isIntersection){let n=e.intersectionInfo,i=s.find(t=>t.isIntersection&&aQ(t.coordinates,e.coordinates)&&t.intersectionInfo.seg1Idx===n.seg1Idx&&t.intersectionInfo.seg2Idx===n.seg2Idx);if(i){e.partnerNode=i,i.partnerNode=e;let n=e.prev.coordinates,a=e.coordinates,o=i.next.coordinates;aZ.Re(aZ.vt(),a,n),aZ.Re(aZ.vt(),o,a),a$(t,[(e.prev.coordinates[0]+e.coordinates[0])/2,(e.prev.coordinates[1]+e.coordinates[1])/2])?e.intersectionDir=m.Exiting:e.intersectionDir=m.Entering}else e.isIntersection=!1}}),l.forEach(e=>delete e.intersectionInfo),s.forEach(e=>delete e.intersectionInfo);let d=[];for(let e=0;e<l.length;e++){let n=l[e];if(n.visited||n.isIntersection||a$(t,n.coordinates))continue;let i=[],a=n,o=!0,r=0,h=(l.length+s.length)*2;do{if(r++>h){console.warn("Subtraction: Max iterations reached, possible infinite loop.");break}a.visited=!0,0!==i.length&&aQ(i[i.length-1],a.coordinates)||i.push(a.coordinates),a.isIntersection&&(o?a.intersectionDir===m.Entering&&a.partnerNode&&(a=a.partnerNode,o=!1):a.partnerNode?(a=a.partnerNode,o=!0):console.warn("Subtraction: Intersection on source without partner.")),a=a.next}while(a!==n||!o);i.length>=3&&(aQ(i[0],i[i.length-1])&&i.pop(),i.length>=3&&d.push(i))}return d}function a5(e,t){if(e.length<3||t.length<3)return[];let n=t.slice(),i=aj(e),a=aj(n);if(1e-7>Math.abs(i)||1e-7>Math.abs(a))return[];i<0&&(e=e.slice().reverse()),a<0&&(n=n.slice().reverse());let o=n,r=[];for(let t=0;t<e.length;t++){let i=e[t],a=e[(t+1)%e.length];for(let e=0;e<n.length;e++){let o=n[e],l=n[(e+1)%n.length],s=a0(i,a,o,l);if(s){let n=Math.sqrt(aZ.hG(i,a)),d=Math.sqrt(aZ.hG(o,l));r.push({coord:[...s],seg1Idx:t,seg2Idx:e,alpha1:n<1e-7?0:Math.sqrt(aZ.hG(i,s))/n,alpha2:d<1e-7?0:Math.sqrt(aZ.hG(o,s))/d})}}}if(0===r.length)return a$(o,e[0])&&e.every(e=>a$(o,e))?[[...e.map(e=>[...e])]]:a$(e,n[0])&&n.every(t=>a$(e,t))?[[...n.map(e=>[...e])]]:[];let l=(e,t,n)=>{let i=[],a=0;for(let o=0;o<e.length;o++){let r=e[o];for(let e of(i.push({id:`${t}_v${a++}`,coordinates:[...r],type:g.Vertex,originalPolyIndex:t,originalVertexIndex:o,next:null,prev:null,isIntersection:!1,visited:!1,processedInPath:!1,intersectionDir:m.Unknown}),n.filter(e=>(0===t?e.seg1Idx:e.seg2Idx)===o).sort((e,n)=>(0===t?e.alpha1:e.alpha2)-(0===t?n.alpha1:n.alpha2)))){if(i.length>0&&aQ(i[i.length-1].coordinates,e.coord)){let n=i[i.length-1];n.isIntersection||(n.isIntersection=!0,n.intersectionInfo=e,n.alpha=0===t?e.alpha1:e.alpha2,n.type=g.Intersection);continue}i.push({id:`${t}_i${a++}`,coordinates:[...e.coord],type:g.Intersection,originalPolyIndex:t,next:null,prev:null,isIntersection:!0,visited:!1,processedInPath:!1,alpha:0===t?e.alpha1:e.alpha2,intersectionInfo:e,intersectionDir:m.Unknown})}}let o=[];if(i.length>0){o.push(i[0]);for(let e=1;e<i.length;e++)if(aQ(i[e].coordinates,o[o.length-1].coordinates)){let t=o[o.length-1];i[e].isIntersection&&i[e].intersectionInfo&&(t.isIntersection=!0,t.intersectionInfo=i[e].intersectionInfo,t.alpha=i[e].alpha,t.type=g.Intersection)}else o.push(i[e])}if(o.length>1&&aQ(o[0].coordinates,o[o.length-1].coordinates)){let e=o[0],t=o.pop();t.isIntersection&&!e.isIntersection&&t.intersectionInfo&&(e.isIntersection=!0,e.intersectionInfo=t.intersectionInfo,e.alpha=t.alpha,e.type=g.Intersection)}if(o.length>0)for(let e=0;e<o.length;e++)o[e].next=o[(e+1)%o.length],o[e].prev=o[(e-1+o.length)%o.length];return o},s=l(e,0,r),d=l(n,1,r);if(0===s.length||0===d.length)return[];
1s.forEach(e=>{if(e.isIntersection&&e.intersectionInfo){let t=e.intersectionInfo,n=d.find(n=>n.isIntersection&&n.intersectionInfo&&aQ(n.coordinates,e.coordinates)&&n.intersectionInfo.seg1Idx===t.seg1Idx&&n.intersectionInfo.seg2Idx===t.seg2Idx);if(n){e.partnerNode=n,n.partnerNode=e;let t=aZ.Re(aZ.vt(),e.coordinates,e.prev.coordinates),i=aZ.Re(aZ.vt(),n.next.coordinates,n.coordinates),a=t[0]*i[1]-t[1]*i[0];a>1e-7?(e.intersectionDir=m.Entering,n.intersectionDir=m.Exiting):a<-1e-7||a$(o,[(e.prev.coordinates[0]+e.coordinates[0])/2,(e.prev.coordinates[1]+e.coordinates[1])/2])?(e.intersectionDir=m.Exiting,n.intersectionDir=m.Entering):(e.intersectionDir=m.Entering,n.intersectionDir=m.Exiting)}else e.isIntersection=!1,e.intersectionInfo=void 0}});let h=[];for(let e of s){if(!e.isIntersection||e.visited||e.intersectionDir!==m.Entering)continue;let t=[],n=e,a=!0,o=0,r=(s.length+d.length)*2;s.forEach(e=>e.processedInPath=!1),d.forEach(e=>e.processedInPath=!1);do{if(o++>r){console.warn("Intersection: Max iterations in path tracing.",e.id,n.id),t=[];break}if(n.processedInPath&&n!==e){console.warn("Intersection: Path processing loop detected, discarding path segment.",e.id,n.id),t=[];break}n.processedInPath=!0,n.visited=!0,0!==t.length&&aQ(t[t.length-1],n.coordinates)||t.push([...n.coordinates]);let i=!1;n.isIntersection&&n.partnerNode&&(a?(n=n.partnerNode,a=!1):(n=n.partnerNode,a=!0)),n=n.next}while(n!==e||a&&0!==n.originalPolyIndex||!a&&1!==n.originalPolyIndex);if(o>r||0===t.length||t.length>0&&aQ(t[0],t[t.length-1])&&t.pop(),t.length>=3){let e=aj(t);i>0&&e<0?t.reverse():i<0&&e>0&&t.reverse(),h.push(t.map(e=>[...e]))}}return h}function a3(e,t,n,i){let a=!1,o=e[0]<t[0]?e[0]:t[0],r=e[1]<t[1]?e[1]:t[1],l=e[0]>t[0]?e[0]:t[0],s=e[1]>t[1]?e[1]:t[1],d=n[0]<i[0]?n[0]:i[0],h=n[1]<i[1]?n[1]:i[1],c=n[0]>i[0]?n[0]:i[0],u=n[1]>i[1]?n[1]:i[1];if(o>c||l<d||r>u||s<h)return!1;let g=[a4(e,t,n),a4(e,t,i),a4(n,i,e),a4(n,i,t)];return g[0]!==g[1]&&g[2]!==g[3]||(0===g[0]&&a8(e,n,t)||0===g[1]&&a8(e,i,t)||0===g[2]&&a8(n,e,i)?a=!0:0===g[3]&&a8(n,t,i)&&(a=!0),a)}function a4(e,t,n){let i=(t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]);return 0===i?0:i>0?1:2}function a8(e,t,n){return!!(t[0]<=Math.max(e[0],n[0])&&t[0]>=Math.min(e[0],n[0])&&t[1]<=Math.max(e[1],n[1])&&t[1]>=Math.min(e[1],n[1]))}function a9(e,t,n,i=!0){let a=[],o=e.length,r=o-(i?1:2);for(let i=0;i<=r;i++){let r=e[i],l=i===o-1?0:i+1;a3(t,n,r,e[l])&&a.push([i,l])}return a}function a7(e,t,n,i=!0){let a,o;i?(o=e.length-1,a=0):(o=0,a=1);for(let i=a;i<e.length;i++){if(a3(t,n,e[o],e[i]))return[o,i];o=i}}function a6(e,t){for(let n=0,i=e.length;n<i;n++){let a=a7(t,e[n],e[n===i-1?0:n+1]);if(a?.length===2)return!0}return!1}function oe(e,t,n){let i=e[0]<=t[0]?e[0]:t[0],a=e[0]>=t[0]?e[0]:t[0],o=e[1]<=t[1]?e[1]:t[1],r=e[1]>=t[1]?e[1]:t[1];if(!(n[0]>=i-.01&&n[0]<=a+.01&&n[1]>=o-.01&&n[1]<=r+.01))return!1;let l=(t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]);return(l>=0?l:-l)<=.01}function ot(e,t,n,i){let a=[t[0]-e[0],t[1]-e[1]],o=[i[0]-n[0],i[1]-n[1]],r=o[1]*a[0]-o[0]*a[1];if((r>=0?r:-r)<.01){let a=[e[0]<t[0]?e[0]:t[0],e[0]>t[0]?e[0]:t[0],e[1]<t[1]?e[1]:t[1],e[1]>t[1]?e[1]:t[1]],o=[n[0]<i[0]?n[0]:i[0],n[0]>i[0]?n[0]:i[0],n[1]<i[1]?n[1]:i[1],n[1]>i[1]?n[1]:i[1]];if(!(a[0]<=o[1]&&a[1]>=o[0]&&a[2]<=o[3]&&a[3]>=o[2])||!(oe(e,t,n)||oe(e,t,i)||oe(n,i,e)))return;return[((a[0]>o[0]?a[0]:o[0])+(a[1]<o[1]?a[1]:o[1]))*.5,((a[2]>o[2]?a[2]:o[2])+(a[3]<o[3]?a[3]:o[3]))*.5]}let l=e[1]-n[1],s=e[0]-n[0],d=o[0]*l-o[1]*s,h=a[0]*l-a[1]*s;return l=d/r,s=h/r,[e[0]+l*a[0],e[1]+l*a[1]]}function on(e){for(let t=0,n=e.length;t<n;t++){let i=e[t];i.next||(i.next=e[t===n-1?0:t+1])}}function oi(e,t){let n=aY(e),i=aY(t),a=iT.Om(i,n);if(aB.aI(1,a)||(t=t.slice().reverse()),!a6(t,e)&&az(t,e))return t.slice();let{targetPolylinePoints:o}=function(e,t){let n=[],i=[],a=new Map,o=a$(t,e[0])?v.Exiting:v.Entering;for(let i=0,r=e.length;i<r;i++){let l=e[i],s=a$(t,l),d={type:p.Vertex,coordinates:l,position:s?f.Inside:f.Outside,visited:!1,next:null};n.push(d);let h=e[i===r-1?0:i+1],c=a9(t,l,h).map(e=>{let n=e[0],i=ot(l,h,t[e[0]],t[e[1]]),a=aH(l,i);return{sourceLineSegmentId:n,coordinate:i,targetStartPointDistSquared:a}});c.sort((e,t)=>
1e.targetStartPointDistSquared-t.targetStartPointDistSquared),c.forEach(e=>{let{sourceLineSegmentId:t,coordinate:i}=e,r={type:p.Intersection,coordinates:i,position:f.Edge,direction:o,visited:!1,next:null},l={...r,direction:v.Unknown,cloned:!0};o===v.Entering?r.next=l:l.next=r;let s=a.get(t);s||(s=[],a.set(t,s)),n.push(r),s.push(l),o*=-1})}for(let e=0,n=t.length;e<n;e++){let n=e,o=t[e],r={type:p.Vertex,coordinates:o,visited:!1,next:null};i.push(r);let l=a.get(n);l?.length&&l.map(e=>({intersectionPoint:e,lineSegStartDistSquared:aH(o,e.coordinates)})).sort((e,t)=>e.lineSegStartDistSquared-t.lineSegStartDistSquared).map(({intersectionPoint:e})=>e).forEach(e=>i.push(e))}return on(n),on(i),{targetPolylinePoints:n,sourcePolylinePoints:i}}(e,t),r=function(e){for(let t=0,n=e.length;t<n;t++){let n=e[t];if(!n.visited&&n.position===f.Outside&&n.type===p.Vertex)return n}for(let t=0,n=e.length;t<n;t++){let n=e[t];if(!n.visited&&n.position===f.Outside)return n}}(o);if(!r)return e.slice();let l=[r.coordinates],s=r.next,d=0,h=e.length+t.length+1e3;for(;s!==r&&d<h;){if(d++,s.type===p.Intersection&&s.cloned){s=s.next;continue}if(l.push(s.coordinates),!(s=s.next)){console.warn("Broken linked list detected in mergePolylines, breaking loop");break}}return d>=h&&console.warn("Maximum iterations reached in mergePolylines, possible infinite loop detected"),l}function oa(e,t,n){let i,a=aH(e,t);if(e[0]===t[0]&&e[1]===t[1]&&(i=e),!i){let o=((n[0]-e[0])*(t[0]-e[0])+(n[1]-e[1])*(t[1]-e[1]))/a;i=o<0?e:o>1?t:[e[0]+o*(t[0]-e[0]),e[1]+o*(t[1]-e[1])]}return{point:[...i],distanceSquared:aH(n,i)}}function oo(e,t,n){return oa(e,t,n).distanceSquared}function or(e,t=.1){let n=e.length;if(n<3)return e;let i=t*t,a=[[0,n-1]],o=Array(n).fill(!1),r=2;for(o[0]=!0,o[n-1]=!0;a.length;){let[t,n]=a.pop();if(n-t==1)continue;let l=e[t],s=e[n],d=-1/0,h=-1;for(let i=t+1;i<n;i++){let t=oo(l,s,e[i]);t>d&&(d=t,h=i)}d<i||(o[h]=!0,r++,a.push([h,n]),a.push([t,h]))}let l=Array(r);for(let t=0,i=0;t<n;t++)o[t]&&(l[i++]=e[t]);return l}function ol(e,t,n,i=!0){let a=[],o=a9(e,t,n,i);for(let i=0;i<o.length;i++){let r=ot(t,n,e[o[i][0]],e[o[i][1]]);a.push(r)}return a}function os(e,t,n,i=!0){let a,o;i?(o=e.length-1,a=0):(o=0,a=1);let r=[];for(let i=a;i<e.length;i++)a3(t,n,e[o],e[i])&&r.push([o,i]),o=i;if(0===r.length)return;let l=[];r.forEach(n=>{let i=[e[n[0]],e[n[1]]],a=[(i[0][0]+i[1][0])/2,(i[0][1]+i[1][1])/2];l.push(aZ.Io(a,t))});let s=Math.min(...l);return{segment:r[l.indexOf(s)],distance:s}}!function(e){e[e.Vertex=0]="Vertex",e[e.Intersection=1]="Intersection"}(g||(g={})),function(e){e[e.Entering=0]="Entering",e[e.Exiting=1]="Exiting",e[e.Unknown=2]="Unknown"}(m||(m={})),!function(e){e[e.Vertex=0]="Vertex",e[e.Intersection=1]="Intersection"}(p||(p={})),function(e){e[e.Outside=-1]="Outside",e[e.Edge=0]="Edge",e[e.Inside=1]="Inside"}(f||(f={})),function(e){e[e.Exiting=-1]="Exiting",e[e.Unknown=0]="Unknown",e[e.Entering=1]="Entering"}(v||(v={}));let od=(e,t)=>{let n,i,a;if(e instanceof iA.A){let t=e.getImageData();if(!t)return;i=t.direction.slice(0,3),a=t.direction.slice(3,6),n=t.spacing}else{let t,o,{direction:r,spacing:l}=e.getImageData(),{viewPlaneNormal:s,viewUp:d}=e.getCamera(),h=r.slice(0,3),c=r.slice(3,6),u=r.slice(6,9),g=iT.vt();iT.$A(g,d,s);let m=Math.abs(iT.Om(g,h)),p=Math.abs(iT.Om(g,c)),f=Math.abs(iT.Om(g,u));if(.001>Math.abs(1-m))t=l[0],i=h;else if(.001>Math.abs(1-p))t=l[1],i=c;else if(.001>Math.abs(1-f))t=l[2],i=u;else throw Error("No support yet for oblique plane planar contours");let v=Math.abs(iT.Om(d,h)),I=Math.abs(iT.Om(d,c)),C=Math.abs(iT.Om(d,u));if(.001>Math.abs(1-v))o=l[0],a=h;else if(.001>Math.abs(1-I))o=l[1],a=c;else if(.001>Math.abs(1-C))o=l[2],a=u;else throw Error("No support yet for oblique plane planar contours");n=[t,o]}return{spacing:[n[0]/t,n[1]/t],xDir:i,yDir:a}},oh=(e,t,n)=>aZ.xg(e,t)<n,oc=(e,t,n,i)=>{let{xDir:a,yDir:o,spacing:r}=i,{viewport:l}=(0,ej.Ay)(e);if(!t.length)return t.push(n),console.log(">>>>> !canvasPoints. :: RETURN"),1;let s=l.canvasToWorld(t[t.length-1]),d=l.canvasToWorld(n),h=iT.vt();iT.Re(h,d,s);let c=Math.abs(iT.Om(h,a)),u=Math.abs(iT.Om(h,o)),g=Math.max(Math.floor(c/r[0]),Math.floor(u/r[0]));if(g>1){let e=t[t.length-1],i=aZ.xg(e,n),a=aZ.vt();aZ.Re(a,n,e),aZ.hZ(a,a[0]/i,a[1]/i);let o=i/g;for(let n=1;n<=g;n++)t.push([e[0]+o*a[0]*n,e[1]+o*a[1]*n])}else t.push(n);return g},ou=(e,t,n,i)=>{let a=[e[0]-t[0],e[1]-t[1]],o=[n[0]-t[0],n[1]-t[1]],r=a[0]*o[0]+a[1]*o[1];if(r<0)return!1;let l=Math.sqrt(o[0]*o[0]+o[1]*o[1]);if(0===l)return!1;let s=r/l,d=[o[0]/l,o[1]/l],h=[d[0]*s,d[1]*s],c=[t[0]+h[0],t[1]+h[1]];return!(aZ.Io(e,c)>i||aZ.Io(t,c)>aZ.Io(t,n))};function og(e){let t,n=iw.p(e,50);for(let e=0;e<3;e++)if(n.every((t,n,i)=>1e-6>Math.abs(t[e]-i[0][e]))){t=e;break}if(void 0===t)throw Error("Cannot find a shared dimension index for polyline, probably oblique plane");let i=[],a=(t+1)%3,o=(t+2)%3;for(let t=0;t<e.length;t++)i.push([e[t][a],e[t][o]]);return{sharedDimensionIndex:t,projectedPolyline:i}}function om(e,t,n={}){let{sharedDimensionIndex:i,projectedPolyline:a}=og(t),{holes:o}=n,r=[];if(o)for(let e=0;e<o.length;
1e++){let t=o[e],n=[];for(let e=0;e<t.length;e++)n.push([t[e][(i+1)%3],t[e][(i+2)%3]]);r.push(n)}return a$(a,[e[(i+1)%3],e[(i+2)%3]],{holes:r})}function op(e){if(e.length<3)return e.slice();let t=e.map(e=>[e[0],e[1]]).sort((e,t)=>e[0]===t[0]?e[1]-t[1]:e[0]-t[0]);function n(e,t,n){return(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0])}let i=[];for(let e of t){for(;i.length>=2&&0>=n(i[i.length-2],i[i.length-1],e);)i.pop();i.push(e)}let a=[];for(let e=t.length-1;e>=0;e--){let i=t[e];for(;a.length>=2&&0>=n(a[a.length-2],a[a.length-1],i);)a.pop();a.push(i)}return i.pop(),a.pop(),i.concat(a)}let{isEqual:of}=i9,{EPSILON:ov}=i$,oI=1-ov;function oC(e,t,n){let{viewPlaneNormal:i}=t,a=e.filter(e=>{let{planeRestriction:n,referencedImageId:a}=e.metadata,{viewPlaneNormal:o}=e.metadata;if(n){let{inPlaneVector1:e,inPlaneVector2:t}=n;return(!e||!!of(0,iT.Om(i,e)))&&(!t||!!of(0,iT.Om(i,t)))}if(!e.metadata.referencedImageId&&!o&&e.metadata.FrameOfReferenceUID){for(let n of e.data.handles.points){let e=iT.jb(iT.vt(),n,t.focalPoint);if(!of(iT.Om(e,i),0))return!1}return e.metadata.viewPlaneNormal=i,e.metadata.cameraFocalPoint=t.focalPoint,!0}if(!o&&a){let{imageOrientationPatient:t}=ib.get("imagePlaneModule",a),n=iT.fA(t[0],t[1],t[2]),i=iT.fA(t[3],t[4],t[5]);o=iT.vt(),iT.$A(o,n,i),e.metadata.viewPlaneNormal=o}let r=Math.abs(iT.Om(i,o))>oI;return o&&r});if(!a.length)return[];let o=n/2,{focalPoint:r}=t,l=[];for(let e of a){let{data:t,metadata:n,isVisible:a}=e;if(!a)continue;let s=n.planeRestriction?.point||t.handles?.points?.[0]||t.contour?.polyline[0];if(!s){l.push(e);continue}let d=iT.jb(iT.vt(),r,s);Math.abs(iT.Om(d,i))<o&&l.push(e)}return l}function o_(e,t,n={}){if(e instanceof i8.A){let n=e.getCamera(),{spacingInNormalDirection:i}=aT.A(e,n);return oC(t,n,i)}if(e instanceof iA.A){let t=e.getCurrentImageId();if(!t)return[];let i=t.indexOf(":");n.imageURI=t.substring(i+1)}return t.filter(t=>!!t.isVisible&&(!!t.data.isCanvasAnnotation||e.isReferenceViewable(t.metadata,n)))}let oE=function(e){let t=typeof e;return null!==e&&("object"===t||"function"===t)},ow=function(e,t,n){let i,a,o,r,l,s,d=0,h=!1,c=!1,u=!0,g=!t&&0!==t&&"function"==typeof window.requestAnimationFrame;if("function"!=typeof e)throw TypeError("Expected a function");function m(t){let n=i,o=a;return i=a=void 0,d=t,r=e.apply(o,n)}function p(e,t){return g?window.requestAnimationFrame(e):setTimeout(e,t)}function f(e){let n=e-s,i=e-d;return void 0===s||n>=t||n<0||c&&i>=o}function v(){let e=Date.now();if(f(e))return I(e);l=p(v,function(e){let n=e-s,i=e-d,a=t-n;return c?Math.min(a,o-i):a}(e))}function I(e){return(l=void 0,u&&i)?m(e):(i=a=void 0,r)}function C(...e){let n=Date.now(),o=f(n);if(i=e,a=this,s=n,o){if(void 0===l){var u;return d=u=s,l=p(v,t),h?m(u):r}if(c)return l=p(v,t),m(s)}return void 0===l&&(l=p(v,t)),r}return t=Number(t)||0,oE(n)&&(h=!!n.leading,o=(c="maxWait"in n)?Math.max(Number(n.maxWait)||0,t):o,u="trailing"in n?!!n.trailing:u),C.cancel=function(){void 0!==l&&function(e){if(g)return window.cancelAnimationFrame(e);clearTimeout(e)}(l),d=0,i=s=a=l=void 0},C.flush=function(){return void 0===l?r:I(Date.now())},C.pending=function(){return void 0!==l},C},oA=function(e,t,n){let i=!0,a=!0;if("function"!=typeof e)throw TypeError("Expected a function");return oE(n)&&(i="leading"in n?!!n.leading:i,a="trailing"in n?!!n.trailing:a),ow(e,t,{leading:i,trailing:a,maxWait:t})};function oS(e,t){let n=e.length,i=[];for(let a=0;a<n;a++){let n=e[a];n.getFrameOfReferenceUID()===t&&i.push(n)}return i}let oy=function(e,t){t||(t=(0,nG.qO)().find(t=>t.getViewports().find(t=>t.id===e))?.id);let n=e0.toolGroups.filter(n=>n.viewportsInfo.some(n=>n.renderingEngineId===t&&(!n.viewportId||n.viewportId===e)));if(n.length){if(n.length>1)throw Error(`Multiple tool groups found for renderingEngineId: ${t} and viewportId: ${e}. You should only
2      have one tool group per viewport in a renderingEngine.`);return n[0]}},{Active:ob,Passive:oT,Enabled:oM}=e1;function oD(e,t){let n=e.length,i=[];for(let a=0;a<n;a++){let n=e[a],o=oy(n.id,n.renderingEngineId);o&&function(e,t){let{toolOptions:n}=e,i=n[t];if(!i)return!1;let a=i.mode;return a===ob||a===oT||a===oM}(o,t)&&i.push(n)}return i}let oO=function(e,t,n=.999){return e.filter(e=>{let i=e.getCamera();return Math.abs(iT.Om(i.viewPlaneNormal,t.viewPlaneNormal))>n})};function ox(e,t,n=!0){let i=(0,ej.Ay)(e),{renderingEngine:a,FrameOfReferenceUID:o}=i,r=a.getViewports();r=oD(r=oS(r,o),t);let l=a.getViewport(i.viewportId);return n&&(r=oO(r,l.getCamera())),r.map(e=>e.id)}function oP(e,t){if(e0.svgNodeCache[e]&&e0.svgNodeCache[e][t])return e0.svgNodeCache[e][t].domRef}function oL(e,t,n,i){if(!e0.svgNodeCache[t])return null;e0.svgNodeCache[t][i]={touched:!0,domRef:n},e.appendChild(n)}function oN(e,t){e0.svgNodeCache[e]&&e0.svgNodeCache[e][t]&&(e0.svgNodeCache[e][t].touched=!0)}function oR(e,t){e0.svgNodeCache[t]&&Object.keys(e0.svgNodeCache[t]).forEac
2h(n=>{let i=e0.svgNodeCache[t][n];!i.touched&&i.domRef&&(e.removeChild(i.domRef),delete e0.svgNodeCache[t][n])})}let ok=function(e){let{viewportId:t,renderingEngineId:n}=(0,ej.Ay)(e),i=`${t}:${n}`,a=function(e){let t=e.querySelector(".viewport-element");return t?.querySelector(":scope > .svg-layer")}(e);return Object.keys(e0.svgNodeCache[i]).forEach(e=>{e0.svgNodeCache[i][e].touched=!1}),{svgLayerElement:a,svgNodeCacheForCanvas:e0.svgNodeCache,getSvgNode:oP.bind(this,i),appendNode:oL.bind(this,a,i),setNodeTouched:oN.bind(this,i),clearUntouched:oR.bind(this,a,i)}},oU=function(e,t){let n=ok(e);t(n),n.clearUntouched()};function oV(e,t){let{renderingEngineId:n,viewportId:i}=(0,ej.Ay)(e),a=oy(i,n);if(!a)return[];let o=[],r=Object.keys(a.toolOptions);for(let e=0;e<r.length;e++){let n=r[e],i=a.toolOptions[n];if(i&&t.includes(i.mode)){let e=a.getToolInstance(n);o.push(e)}}return o}let{Active:oF,Passive:oG,Enabled:oB}=e1;class oH{constructor(){this._needsRender=new Set,this._animationFrameSet=!1,this._animationFrameHandle=null,this._renderFlaggedViewports=()=>{this._throwIfDestroyed();let e=Array.from(this._viewportElements.values());for(let t=0;t<e.length;t++){let n=e[t];if(this._needsRender.has(n)&&(this._triggerRender(n),this._needsRender.delete(n),0===this._needsRender.size))break}this._animationFrameSet=!1,this._animationFrameHandle=null,this._render()},this._viewportElements=new Map}addViewportElement(e,t){this._viewportElements.set(e,t)}removeViewportElement(e,t){this._viewportElements.delete(e),this._needsRender.delete(t),this._reset()}renderViewport(e){this._setViewportsToBeRenderedNextFrame([e])}_throwIfDestroyed(){if(this.hasBeenDestroyed)throw Error("this.destroy() has been manually called to free up memory, can not longer use this instance. Instead make a new one.")}_setAllViewportsToBeRenderedNextFrame(){[...this._viewportElements.values()].forEach(e=>{this._needsRender.add(e)}),this._renderFlaggedViewports()}_setViewportsToBeRenderedNextFrame(e){let t=[...this._viewportElements.values()];e.forEach(e=>{-1!==t.indexOf(e)&&this._needsRender.add(e)}),this._render()}_render(){this._needsRender.size>0&&!1===this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedViewports),this._animationFrameSet=!0)}
2_triggerRender(e){let t=(0,ej.Ay)(e);if(!t)return;if(!(0,nG.lD)(t.renderingEngineId))return void console.warn("rendering Engine has been destroyed");let n=oV(e,[oF,oG,oB]),{renderingEngineId:i,viewportId:a}=t,o={element:e,renderingEngineId:i,viewportId:a};oU(e,i=>{let a=!1;n.forEach(e=>{if(e.renderAnnotation){let n=e.renderAnnotation(t,i);a=a||n}}),a&&(0,eq.A)(e,eK.ANNOTATION_RENDERED,{...o})})}_reset(){window.cancelAnimationFrame(this._animationFrameHandle),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null,this._setAllViewportsToBeRenderedNextFrame()}}let oW=new oH,o$=function(e){oW.renderViewport(e)};function oz(e){e.length&&e.forEach(e=>{let t=(0,ej.yj)(e);if(!t)return void console.warn(`Viewport not available for ${e}`);let{viewport:n}=t;if(!n)return void console.warn(`Viewport not available for ${e}`);o$(n.element)})}let oX=oz,oj=Symbol("DefinedCursors"),oq=new Set(["alias","all-scroll","auto","cell","col-resize","context-menu","copy","crosshair","default","e-resize","ew-resize","grab","grabbing","help","move","ne-resize","nesw-resize","no-drop","none","not-allowed","n-resize","ns-resize","nw-resize","nwse-resize","pointer","progress","row-resize","se-resize","s-resize","sw-resize","text","vertical-text","wait","w-resize","zoom-in","zoom-out"]);class oK{constructor(e,t){this.name=e+"",this.fallback=t}getName(){return this.name+""}addFallbackStyleProperty(e){let{fallback:t}=this;return t instanceof oK?`${e}, ${t.getStyleProperty()}`:e+""}getStyleProperty(){return this.addFallbackStyleProperty(this.name)+""}static getDefinedCursor(e){let t=oY(oK,oj),n=t.get(e);return n instanceof oK?n:oq.has(e)?(n=new oK(e),t.set(e,n),n):void 0}static setDefinedCursor(e,t){return t instanceof oK&&(oY(oK,oj).set(e,t),!0)}}function oY(e,t){let n=e[t];return n instanceof Map||Object.defineProperty(e,t,{value:n=new Map}),n}let oZ=oq.values(),oJ=Symbol("ElementCursorsMap");function oQ(e,t){o5(e)[0]=t,o0(e,t)}function o0(e,t){let n=o5(e);n[1]=n[0],n[0]=t,e.style.cursor=(t instanceof oK?t:oK.getDefinedCursor("auto")).getStyleProperty()}function o1(e){o0(e,o5(e)[1])}function o2(e){o0(e,oK.getDefinedCursor("none"))}function o5(e){let t=o5[oJ];t instanceof WeakMap||Object.defineProperty(o5,oJ,{value:t=new WeakMap});let n=t.get(e);return n||(n=[null,null],t.set(e,n)),n}function o3(e,t){return Math.sqrt(aH(e,t))}var o4=n(45970);function o8(e,t){for(var n=Array(t),i=0;i<t;++i)n[i]=e(i/(t-1));return n}var o9=n(30294);function o7(e){return e.length}function o6(){return function(e){if(!(a=e.length))return[];for(var t=-1,n=(0,o9.A)(e,o7),i=Array(n);++t<n;)for(var a,o=-1,r=i[t]=Array(a);++o<a;)r[o]=e[o][t];return i}(arguments)}function re(e,t,n,i){let a=n-t+1,o=Math.floor(i/100*a)??1,r=Math.floor(a/o)??1;if(isNaN(a)||!a||!r||a/r<2)return e;let l=Math.max(0,t),s=Math.min(e.length-1,n),d=e.slice(0,l),h=e.slice(s+1,e.length);return[...d,...function(e,t){if(!t||0===t.length||t.length===e.length)return e;let n=t[t.length-1]-t[0]+1,i=(0,o4.A)(t.map(t=>e[t][0])),a=(0,o4.A)(t.map(t=>e[t][1]));if(e[0]?.length!==3)return o6(o8(i,n),o8(a,n));{let o=(0,o4.A)(t.map(t=>e[t][2]));return o6(o8(i,n),o8(a,n),o8(o,n))}}(e,function(e,t){let n=[],[i,a]=t,o=a-i+1,r=Math.floor(o/e),l=0,s=Math.round((o-1)/(r-1)*0)+i;for(;s<=a;)n.push(s),s=Math.round((o-1)/(r-1)*++l)+i;return n}(r,[l,s])),...h]}function rt(e,t){return!t?.autoGenerated&&(e?.smoothing?.smoothOnAdd===!0||e?.smoothing?.smoothOnEdit===!0)}function rn(e,t,n,i){let[,a,o]=e,[,r,l]=t,s=o.length,d=l.length,h=e[0],c=t[0];if(!o[h]||!l[c]||!o[a]||!l[r])return[void 0,void 0];for(;h!==a&&c!==r;){if(n(l[c],o[h]))return[h,c];h=(h+s+i)%s,c=(c+d+i)%d}return[void 0,void 0]}function ri(e,t,n){let{interpolation:i,smoothing:a}=e;if(i){let{knotsRatioPercentageOnAdd:e,knotsRatioPercentageOnEdit:i,smoothOnAdd:o=!1,smoothOnEdit:r=!1}=a;if(n?r:o){let[a,o]=n?function(e,t){var n,i,a,o;let[r,l]=function(e,t){for(let n=0;n<e.length;n++)for(let i=0;i<t.length;i++)if(0===o3(e[n],t[i]))return[n,i]}(e,t)||[],s=(e,t)=>!1==.001>o3(e,t),[d,h]=rn([(r+(n=e.length)+1)%n,r,e],[(l+(i=t.length)+1)%i,l,t],s,1),[c]=rn([(d+(a=e.length)+-1)%a,d,e],[(h+(o=t.length)+-1)%o,h,t],s,-1);return[d,c]}(t,n):[0,t.length-1];return t[a]&&t[o]?re(t,a,o,n?i:e):t}}return t}!function(e){e[e.Primary=1]="Primary",e[e.Secondary=2]="Secondary",e[e.Primary_And_Secondary=3]="Primary_And_Secondary",e[e.Auxiliary=4]="Auxiliary",e[e.Primary_And_Auxiliary=5]="Primary_And_Auxiliary",e[e.Secondary_And_Auxiliary=6]="Secondary_And_Auxiliary",e[e.Primary_And_Secondary_And_Auxiliary=7]="Primary_And_Secondary_And_Auxiliary",e[e.Fourth_Button=8]="Fourth_Button",e[e.Fifth_Button=16]="Fifth_Button",e[e.Wheel=524288]="Wheel",e[e.Wheel_Primary=524289]="Wheel_Primary"}(I||(I={})),function(e){e[e.Shift=16]="Shift",e[e.Ctrl=17]="Ctrl",e[e.Alt=18]="Alt",e[e.Meta=91]="Meta",e[e.ShiftCtrl=1617]="ShiftCtrl",e[e.ShiftAlt=1618]="ShiftAlt",e[e.ShiftMeta=1691]="ShiftMeta",e[e.CtrlAlt=1718]="CtrlAlt",e[e.CtrlMeta=1791]="CtrlMeta",e[e.AltMeta=1891]="AltMeta"}(C||(C={}));
2let ra=e=>e.shiftKey?e.ctrlKey?C.ShiftCtrl:e.altKey?C.ShiftAlt:e.metaKey?C.ShiftMeta:C.Shift:e.ctrlKey?e.altKey?C.CtrlAlt:e.metaKey?C.CtrlMeta:C.Ctrl:e.altKey?e.metaKey&&C.AltMeta||C.Alt:e.metaKey?C.Meta:void 0;function ro(e,t,n){return"orthogonalT"===n?function(e,t){let n=e[0],i=e[e.length-1],a=aZ.jb(aZ.vt(),i,n);aZ.S8(a,a);let o=[a[0],a[1]],r=[(n[0]+i[0])/2,(n[1]+i[1])/2],l=aZ.vt(),s=null,d=null,h=null;for(let t of e){aZ.jb(l,t,r);let e=aZ.Om(o,l);if(null!==s&&s*e<0){let n=Math.abs(s)/(Math.abs(s)+Math.abs(e));h=[d[0]+n*(t[0]-d[0]),d[1]+n*(t[1]-d[1])];break}if(1e-10>Math.abs(e)){h=t;break}s=e,d=t}return h?[h,r].map(t.canvasToWorld):(console.warn("No orthogonal intersection found for open U-shaped contour"),null)}(e,t):"lineSegment"===n?null:n?function(e,t){let n=e[0],i=e[e.length-1],a=aZ.vt();aZ.hZ(a,i[0]-n[0],i[1]-n[1]),aZ.S8(a,a);let o=aZ.vt(),r=aZ.vt();aZ.hZ(o,-a[1],a[0]),aZ.hZ(r,a[1],-a[0]);let l=[(n[0]+i[0])/2,(n[1]+i[1])/2],s={dist:0,index:null};for(let t=0;t<e.length;t++){let n=e[t],i=aZ.xg(n,l);i>s.dist&&(s.dist=i,s.index=t)}return[e[s.index],l].map(t.canvasToWorld)}(e,t):null}!function(e){e[e.CounterClockwise=-1]="CounterClockwise",e[e.Unknown=0]="Unknown",e[e.Clockwise=1]="Clockwise"}(_||(_={}));let{addCanvasPointsToArray:rr,pointsAreWithinCloseContourProximity:rl,getFirstLineSegmentIntersectionIndexes:rs,getSubPixelSpacingAndXYDirections:rd}=V;function rh(e,t,n){this.isDrawing=!0;let{currentPoints:i,element:a}=e.detail,o=i.canvas,{viewport:r}=(0,ej.Ay)(a),l=ra(e.detail.event)===this.configuration.contourHoleAdditionModifierKey,{spacing:s,xDir:d,yDir:h}=rd(r,this.configuration.subPixelResolution)||{};s&&d&&h&&(this.drawData={canvasPoints:[o],polylineIndex:0,contourHoleProcessingEnabled:l,newAnnotation:!0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:s,xDir:d,yDir:h,movingTextBox:!1},e0.isInteractingWithTool=!0,a.addEventListener(eK.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(eK.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(eK.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(eK.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(eK.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(eK.TOUCH_TAP,this.mouseUpDrawCallback),o2(a))}function rc(e){e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this.mouseUpDrawCallback),e.removeEventListener(eK.MOUSE_DRAG,this.mouseDragDrawCallback),e.removeEventListener(eK.MOUSE_CLICK,this.mouseUpDrawCallback),e.removeEventListener(eK.TOUCH_END,this.mouseUpDrawCallback),e.removeEventListener(eK.TOUCH_DRAG,this.mouseDragDrawCallback),e.removeEventListener(eK.TOUCH_TAP,this.mouseUpDrawCallback),o1(e)}function ru(e){let t=e.detail,{currentPoints:n,element:i}=t,a=n.world,o=n.canvas,{viewport:r}=(0,ej.Ay)(i),{annotation:l,viewportIdsToRender:s,xDir:d,yDir:h,spacing:c,movingTextBox:u}=this.commonData,{polylineIndex:g,canvasPoints:m,newAnnotation:p}=this.drawData;this.createMemo(i,l,{newAnnotation:p});let f=m[m.length-1],v=r.canvasToWorld(f),I=iT.vt();iT.Re(I,a,v);let C=Math.abs(iT.Om(I,d)),_=Math.abs(iT.Om(I,h));if(!(C<=c[0])||!(_<=c[1])){if(u){this.isDrawing=!1;let{deltaPoints:e}=t,n=e.world,{textBox:i}=l.data.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else{let t=this.findCrossingIndexDuringCreate(e);if(void 0!==t)this.applyCreateOnCross(e,t);else{let e=rr(i,m,o,this.commonData);this.drawData.polylineIndex=g+e}l.invalidated=!0}oX(s),l.invalidated&&e9(l,i,eY.HandlesUpdated)}}function rg(e){let{allowOpenContours:t}=this.configuration,{canvasPoints:n,contourHoleProcessingEnabled:i}=this.drawData,a=n[0],o=n[n.length-1],{element:r}=e.detail;this.doneEditMemo(),this.drawData.newAnnotation=!1,t&&!rl(a,o,this.configuration.closeContourProximity)?this.completeDrawOpenContour(r,{contourHoleProcessingEnabled:i}):this.completeDrawClosedContour(r,{contourHoleProcessingEnabled:i})}function rm(e,t){this.removeCrossedLinesOnCompleteDraw();let{canvasPoints:n}=this.drawData,{contourHoleProcessingEnabled:i,minPointsToSave:a}=t??{};if(a&&n.length<a||this.haltDrawing(e,n))return!1;let{annotation:o,viewportIdsToRender:r}=this.commonData,{viewport:l}=(0,ej.Ay)(e);rr(e,n,n[0],this.commonData),n.pop();let s=rt(this.configuration,o)?ri(this.configuration,n):n;this.updateContourPolyline(o,{points:s,closed:!0,targetWindingDirection:_.Clockwise},l);let{textBox:d}=o.data.handles;return d?.hasMoved||e6(o,i),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,oX(r),this.deactivateDraw(e),!0}function rp(){let{canvasPoints:e}=this.drawData,t=e.length,n=[e[0],e[t-1]],i=rs(e.slice(0,-1).slice(1),n[0],n[1],!1);if(i){let t=i[1];1===t?this.drawData.canvasPoints=e.splice(1):this.drawData.canvasPoints=e.splice(0,t)}}function rf(e,t){let{canvasPoints:n}=this.drawData,{contourHoleProcessingEnabled:i}=t??{};if(this.haltDrawing(e,n))return!1;let{annotation:a,viewportIdsToRender:o}=this.commonData,{viewport:r}=(0,ej.Ay)(e),l=rt(this.configuration,a)?ri(this.configuration,n):n;this.updateContourPolyline(a,{points:l,closed:!1}
2,r);let{textBox:s}=a.data.handles,d=a.data.contour.polyline;return a.data.handles.points=[d[0],d[d.length-1]],!a.data.isOpenUShapeContour&&this.configuration?.openUShapeContour&&(a.data.isOpenUShapeContour=this.configuration.openUShapeContour),a.data.isOpenUShapeContour&&(a.data.openUShapeContourVectorToPeak=ro(n,r,a.data.isOpenUShapeContour)),s.hasMoved||e6(a,i),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,oX(o),this.deactivateDraw(e),!0}function rv(e){let{currentPoints:t,lastPoints:n}=e.detail,i=t.canvas,a=n.canvas,{canvasPoints:o}=this.drawData,r=rs(o.slice(0,-1),i,a,!1);if(void 0!==r)return r[0]}function rI(e,t){let{element:n}=e.detail,{canvasPoints:i,contourHoleProcessingEnabled:a}=this.drawData,{annotation:o,viewportIdsToRender:r}=this.commonData;rr(n,i,i[t],this.commonData),i.pop();let l=aX(i.slice(t));if(aM.n4(l,0))return void i.splice(t+1);i.splice(0,t),this.completeDrawClosedContour(n,{contourHoleProcessingEnabled:a,minPointsToSave:3})&&this.activateClosedContourEdit(e,o,r)}function rC(e){let{allowOpenContours:t}=this.configuration,{canvasPoints:n,contourHoleProcessingEnabled:i}=this.drawData,a=n[0],o=n[n.length-1];t&&!rl(a,o,this.configuration.closeContourProximity)?this.completeDrawOpenContour(e,{contourHoleProcessingEnabled:i}):this.completeDrawClosedContour(e,{contourHoleProcessingEnabled:i})}function r_(e,t){let{subPixelResolution:n}=this.configuration;if(function(e,t){let n=Math.max(3*t,3);return e.length<n}(t,n)){let{annotation:t,viewportIdsToRender:n}=this.commonData;return tu(t.annotationUID),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,oX(n),this.deactivateDraw(e),!0}return!1}let rE=function(e){e.activateDraw=rh.bind(e),e.deactivateDraw=rc.bind(e),e.applyCreateOnCross=rI.bind(e),e.findCrossingIndexDuringCreate=rv.bind(e),e.completeDrawOpenContour=rf.bind(e),e.removeCrossedLinesOnCompleteDraw=rp.bind(e),e.mouseDragDrawCallback=ru.bind(e),e.mouseUpDrawCallback=rg.bind(e),e.completeDrawClosedContour=rm.bind(e),e.cancelDrawing=rC.bind(e),e.haltDrawing=r_.bind(e)},{addCanvasPointsToArray:rw,getFirstLineSegmentIntersectionIndexes:rA}=V;function rS(e,t){let{element:n,currentPoints:i,lastPoints:a}=e.detail,o=i.canvas,r=a.canvas,{editCanvasPoints:l,prevCanvasPoints:s}=this.editData,d=rA(s,o,r,t);if(d)this.editData.startCrossingIndex=d[0],this.removePointsUpUntilFirstCrossing(t);else if(s.length>=2)if(l.length>this.configuration.checkCanvasEditFallbackProximity){let e=l[0],t=[];for(let n=0;n<s.length;n++){let i=s[n],a=aZ.Io(i,e);t.push({distance:a,index:n})}t.sort((e,t)=>e.distance-t.distance);let n=[t[0],t[1]],i=Math.min(n[0].index,n[1].index);this.editData.startCrossingIndex=i}else{let e=aZ.vt();aZ.Re(e,l[1],l[0]),aZ.S8(e,e);let i=[l[0][0]-6*e[0],l[0][1]-6*e[1]],a=rA(s,i,l[0],t);if(a){let e=[i];rw(n,e,l[0],this.commonData),l.unshift(...e),this.removePointsUpUntilFirstCrossing(t),this.editData.editIndex=l.length-1,this.editData.startCrossingIndex=a[0]}}}function ry(e){let{editCanvasPoints:t,prevCanvasPoints:n}=this.editData,i=0;for(let a=0;a<t.length-1;a++){let o=[t[a],t[a+1]],r=!!rA(n,o[0],o[1],e);if(i++,r)break}t.splice(0,i),this.editData.editIndex=t.length-1}function rb(e,t){let{currentPoints:n,lastPoints:i}=e.detail,a=n.canvas,o=i.canvas,{prevCanvasPoints:r}=this.editData;return!!rA(r,a,o,t)}function rT(e){let{prevCanvasPoints:t,editCanvasPoints:n}=this.editData;for(let i=n.length-1;i>0;i--){let a=[n[i],n[i-1]],o=!!rA(t,a[0],a[1],e);if(n.pop(),o)break}}function rM(){let{editCanvasPoints:e,prevCanvasPoints:t,startCrossingIndex:n}=this.editData;if(void 0===n)return;let i=e[e.length-1],a=[];for(let e=0;e<t.length;e++){let n=t[e],o=aZ.Io(n,i);a.push({distance:o,index:e})}a.sort((e,t)=>e.distance-t.distance);let o=e.slice(0,-1);for(let n=0;n<a.length;n++){let{index:i}=a[n];if(!rA(o,t[i],e[e.length-1],!1))return i}return -1}function rD(e){let{currentPoints:t,lastPoints:n}=e.detail,i=t.canvas,a=n.canvas,{editCanvasPoints:o}=this.editData,r=rA(o.slice(0,-2),i,a,!1);if(!r)return;let l=r[0],s=o.length-l;for(let e=0;e<s;e++)o.pop()}let rO=function(e){e.checkForFirstCrossing=rS.bind(e),e.removePointsUpUntilFirstCrossing=ry.bind(e),e.checkForSecondCrossing=rb.bind(e),e.findSnapIndex=rM.bind(e),e.removePointsAfterSecondCrossing=rT.bind(e),e.checkAndRemoveCrossesOnEditLine=rD.bind(e)};function rx(e,t,n,i){let{canvasToWorld:a,worldToCanvas:o}=n,{data:r}=e,{targetWindingDirection:l}=t,{points:s}=t,d=aq(s);i?.decimate?.enabled&&(s=or(t.points,i?.decimate?.epsilon));let{closed:h}=t,c=s.length,u=Array(c);aq(s);let g=ts(e);if(void 0===h){let e=!1;if(s.length>3){let t=aH(s[0],s[c-1]);e=aM.n4(0,t)}h=e}if(i?.updateWindingDirection!==!1){let e=g?-1*g.data.contour.windingDirection:l;void 0===e&&(e=d),e!==d&&s.reverse();let t=(r.handles?.points??[]).map(o);t.length>2&&aq(t)!==e&&r.handles.points.reverse(),d=e}for(let e=0;e<c;e++)u[e]=a(s[e]);r.contour.polyline=u,r.contour.closed=h,r.contour.windingDirection=d,tp(e)}let{getSubPixelSpacingAndXYDirections:rP,addCanvasPointsToArray:rL,getArea:rN}=V;function rR(e,t,n){this.isEditingClosed=!0;let{currentPoints:i,element:a}=e.detail,o=i.canvas,r=(0,ej.Ay)(a);if(!r)return;let{viewport:l}=r,s=t.data.contour.polyline.map(l.worldToCanvas),{spacing:d,xDir:h,yDir:c}=rP(l,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:s,editCanvasPoints:[o],startCrossingIndex:void 0,editIndex:0,annotation:t},this.commonData={annotation:t,viewportIdsToRender:n,spacing:d,xDir:h,yDir:c,movingTextBox:!1},e0.isInteractingWithTool=!0,a.addEventListener(eK.MOUSE_UP,this.mouseUpClosedContourEditCallback),a.addEventListener(eK.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(eK.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),a.addEventListener(eK.TOUCH_END,this.mouseUpClosedContourEditCallback),a.addEventListener(eK.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(eK.TOUCH_TAP,this.mouseUpClosedContourEditCallback),o2(a)}function rk(e){e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this.mouseUpClosedContourEditCallback),e.removeEventListener(eK.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(eK.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),e.removeEventListener(eK.TOUCH_END,this.mouseUpClosedContourEditCallback),e.removeEventListener(eK.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(eK.TOUCH_TAP,this.mouseUpClosedContourEditCallback),o1(e)}function rU(e){let{currentPoints:t,element:n}=e.detail,i=t.world,a=t.canvas,{viewport:o}=(0,ej.Ay)(n),{viewportIdsToRender:r,xDir:l,yDir:s,spacing:d}=this.commonData,{editIndex:h,editCanvasPoints:c,startCrossingIndex:u,annotation:g}=this.editData;this.createMemo(n,g);let m=c[c.length-1],p=o.canvasToWorld(m),f=iT.vt();iT.Re(f,i,p);let v=Math.abs(iT.Om(f,l)),I=Math.abs(iT.Om(f,s));if(v<=d[0]&&I<=d[1])return;void 0!==u&&this.checkAndRemoveCrossesOnEditLine(e);let C=rL(n,c,a,this.commonData);if(this.editData.editIndex=h+C,void 0===u&&c.length>1&&this.checkForFirstCrossing(e,!0),this.editData.snapIndex=this.findSnapIndex(),-1===this.editData.snapIndex)return void this.finishEditAndStartNewEdit(e);this.editData.fusedCanvasPoints=this.fuseEditPointsWithClosedContour(e),void 0!==u&&this.checkForSecondCrossing(e,!0)&&(this.removePointsAfterSecondCrossing(!0),this.finishEditAndStartNewEdit(e)),oX(r)}
2function rV(e){let{element:t}=e.detail,{viewport:n,renderingEngine:i}=(0,ej.Ay)(t),{annotation:a,viewportIdsToRender:o}=this.commonData,{fusedCanvasPoints:r,editCanvasPoints:l}=this.editData;rx(a,{points:r,closed:!0,targetWindingDirection:_.Clockwise},n),a.autoGenerated&&(a.autoGenerated=!1),e9(a,t);let s=l.pop();this.editData={prevCanvasPoints:r,editCanvasPoints:[s],startCrossingIndex:void 0,editIndex:0,snapIndex:void 0,annotation:a},oX(o)}function rF(e){let t,n,{prevCanvasPoints:i,editCanvasPoints:a,startCrossingIndex:o,snapIndex:r}=this.editData;if(void 0===o||void 0===r)return;let{element:l}=e.detail,s=[...a];rL(l,s,i[r],this.commonData),s.length>a.length&&s.pop(),o>r?(t=r,n=o):(t=o,n=r);let d=aZ.Io(i[t],s[0]),h=aZ.Io(i[t],s[s.length-1]),c=aZ.Io(i[n],s[0]),u=aZ.Io(i[n],s[s.length-1]),g=[];for(let e=0;e<t;e++){let t=i[e];g.push([t[0],t[1]])}let m=d+u,p=h+c;if(m<p)for(let e=0;e<s.length;e++){let t=s[e];g.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){let t=s[e];g.push([t[0],t[1]])}for(let e=n;e<i.length;e++){let t=i[e];g.push([t[0],t[1]])}let f=[];for(let e=t;e<n;e++){let t=i[e];f.push([t[0],t[1]])}if((m=c+h)<(p=u+d))for(let e=0;e<s.length;e++){let t=s[e];f.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){let t=s[e];f.push([t[0],t[1]])}return rN(g)>rN(f)?g:f}function rG(e){let{element:t}=e.detail;this.completeClosedContourEdit(t)}function rB(e){let{viewport:t}=(0,ej.Ay)(e),{annotation:n,viewportIdsToRender:i}=this.commonData;this.doneEditMemo();let{fusedCanvasPoints:a,prevCanvasPoints:o}=this.editData;if(a){let i=rt(this.configuration,n)?ri(this.configuration,a,o):a,r=this.configuration?.decimate||{};rx(n,{points:i,closed:!0,targetWindingDirection:_.Clockwise},t,{decimate:{enabled:!!r.enabled,epsilon:r.epsilon}}),n.autoGenerated&&(n.autoGenerated=!1),e9(n,e)}this.isEditingClosed=!1,this.editData=void 0,this.commonData=void 0,oX(i),this.deactivateClosedContourEdit(e)}function rH(e){this.completeClosedContourEdit(e)}let rW=function(e){e.activateClosedContourEdit=rR.bind(e),e.deactivateClosedContourEdit=rk.bind(e),e.mouseDragClosedContourEditCallback=rU.bind(e),e.mouseUpClosedContourEditCallback=rG.bind(e),e.finishEditAndStartNewEdit=rV.bind(e),e.fuseEditPointsWithClosedContour=rF.bind(e),e.cancelClosedContourEdit=rH.bind(e),e.completeClosedContourEdit=rB.bind(e)},{addCanvasPointsToArray:r$,getSubPixelSpacingAndXYDirections:rz}=V;function rX(e,t,n){this.isEditingOpen=!0;let{currentPoints:i,element:a}=e.detail,o=i.canvas,{viewport:r}=(0,ej.Ay)(a);this.doneEditMemo();let l=t.data.contour.polyline.map(r.worldToCanvas),{spacing:s,xDir:d,yDir:h}=rz(r,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:l,editCanvasPoints:[o],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:s,xDir:d,yDir:h,movingTextBox:!1},e0.isInteractingWithTool=!0,a.addEventListener(eK.MOUSE_UP,this.mouseUpOpenContourEditCallback),a.addEventListener(eK.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(eK.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),a.addEventListener(eK.TOUCH_END,this.mouseUpOpenContourEditCallback),a.addEventListener(eK.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(eK.TOUCH_TAP,this.mouseUpOpenContourEditCallback),o2(a)}function rj(e){e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this.mouseUpOpenContourEditCallback),e.removeEventListener(eK.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(eK.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),e.removeEventListener(eK.TOUCH_END,this.mouseUpOpenContourEditCallback),e.removeEventListener(eK.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(eK.TOUCH_TAP,this.mouseUpOpenContourEditCallback),o1(e)}function rq(e){let{currentPoints:t,element:n}=e.detail,i=t.world,a=t.canvas,{viewport:o}=(0,ej.Ay)(n),{viewportIdsToRender:r,xDir:l,yDir:s,spacing:d}=this.commonData,{editIndex:h,editCanvasPoints:c,startCrossingIndex:u}=this.editData,g=c[c.length-1],m=o.canvasToWorld(g),p=iT.vt();this.createMemo(n,this.commonData.annotation),iT.Re(p,i,m);let f=Math.abs(iT.Om(p,l)),v=Math.abs(iT.Om(p,s));if(f<=d[0]&&v<=d[1])return;void 0!==u&&this.checkAndRemoveCrossesOnEditLine(e);let I=r$(n,c,a,this.commonData);this.editData.editIndex=h+I,void 0===u&&c.length>1&&this.checkForFirstCrossing(e,!1),this.editData.snapIndex=this.findSnapIndex(),this.editData.fusedCanvasPoints=this.fuseEditPointsWithOpenContour(e),void 0!==u&&this.checkForSecondCrossing(e,!1)?(this.removePointsAfterSecondCrossing(!1),this.finishEditOpenOnSecondCrossing(e)):this.checkIfShouldOverwriteAnEnd(e)&&this.openContourEditOverwriteEnd(e),oX(r)}function rK(e){let{element:t}=e.detail,{viewport:n}=(0,ej.Ay)(t),{annotation:i,viewportIdsToRender:a}=this.commonData;rx(i,{points:this.fuseEditPointsForOpenContourEndEdit(),closed:!1}
2,n);let o=i.data.contour.polyline;i.data.handles.points=[o[0],o[o.length-1]],i.data.handles.activeHandleIndex=1,e9(i,t),this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,this.doneEditMemo(),this.deactivateOpenContourEdit(t),this.activateOpenContourEndEdit(e,i,a,null)}function rY(e){let{currentPoints:t,lastPoints:n}=e.detail,i=t.canvas,a=n.canvas,{snapIndex:o,prevCanvasPoints:r,startCrossingIndex:l}=this.editData;if(void 0===l||void 0===o)return!1;if(-1===o)return!0;if(0!==o&&o!==r.length-1)return!1;let s=r[o],d=aZ.vt(),h=aZ.vt();aZ.hZ(d,i[0]-a[0],i[1]-a[1]),aZ.hZ(h,i[0]-s[0],i[1]-s[1]);let c=aZ.Om(d,h);return Math.acos(c/(Math.sqrt(d[0]*d[0]+d[1]*d[1])*Math.sqrt(h[0]*h[0]+h[1]*h[1])))<Math.PI/2}function rZ(){let{snapIndex:e,prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:i}=this.editData,a=[];if(0===e)for(let e=t.length-1;e>=i;e--){let n=t[e];a.push([n[0],n[1]])}else for(let e=0;e<i;e++){let n=t[e];a.push([n[0],n[1]])}if(aZ.Io(t[i],n[0])<aZ.Io(t[i],n[n.length-1]))for(let e=0;e<n.length;e++){let t=n[e];a.push([t[0],t[1]])}else for(let e=n.length-1;e>=0;e--){let t=n[e];a.push([t[0],t[1]])}return a}function rJ(e){let t,n,{prevCanvasPoints:i,editCanvasPoints:a,startCrossingIndex:o,snapIndex:r}=this.editData;if(void 0===o||void 0===r)return;let{element:l}=e.detail,s=[...a];r$(l,s,i[r],this.commonData),s.length>a.length&&s.pop(),o>r?(t=r,n=o):(t=o,n=r);let d=aZ.Io(i[t],s[0]),h=aZ.Io(i[t],s[s.length-1]),c=aZ.Io(i[n],s[0]),u=aZ.Io(i[n],s[s.length-1]),g=[];for(let e=0;e<t;e++){let t=i[e];g.push([t[0],t[1]])}if(d+u<h+c)for(let e=0;e<s.length;e++){let t=s[e];g.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){let t=s[e];g.push([t[0],t[1]])}for(let e=n;e<i.length;e++){let t=i[e];g.push([t[0],t[1]])}return g}function rQ(e){let{element:t}=e.detail,{viewport:n,renderingEngine:i}=(0,ej.Ay)(t),{annotation:a,viewportIdsToRender:o}=this.commonData,{fusedCanvasPoints:r,editCanvasPoints:l}=this.editData;rx(a,{points:r,closed:!1},n);let s=a.data.contour.polyline;a.data.handles.points=[s[0],s[s.length-1]],e9(a,t);let d=l.pop();this.editData={prevCanvasPoints:r,editCanvasPoints:[d],startCrossingIndex:void 0,editIndex:0},oX(o)}function r0(e){let{element:t}=e.detail;this.completeOpenContourEdit(t)}function r1(e){let{viewport:t}=(0,ej.Ay)(e),{annotation:n,viewportIdsToRender:i}=this.commonData;this.doneEditMemo();let{fusedCanvasPoints:a,prevCanvasPoints:o}=this.editData;if(a){let i=rt(this.configuration)?ri(this.configuration,a,o):a,r=this.configuration?.decimate||{};rx(n,{points:i,closed:!1},t,{decimate:{enabled:!!r.enabled,epsilon:r.epsilon}});let l=n.data.contour.polyline;n.data.handles.points=[l[0],l[l.length-1]],n.data.isOpenUShapeContour&&(n.data.openUShapeContourVectorToPeak=ro(a,t,n.data.isOpenUShapeContour)),e9(n,e)}this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,oX(i),this.deactivateOpenContourEdit(e)}function r2(e){this.completeOpenContourEdit(e)}let r5=function(e){e.activateOpenContourEdit=rX.bind(e),e.deactivateOpenContourEdit=rj.bind(e),e.mouseDragOpenContourEditCallback=rq.bind(e),e.mouseUpOpenContourEditCallback=r0.bind(e),e.fuseEditPointsWithOpenContour=rJ.bind(e),e.finishEditOpenOnSecondCrossing=rQ.bind(e),e.checkIfShouldOverwriteAnEnd=rY.bind(e),e.fuseEditPointsForOpenContourEndEdit=rZ.bind(e),e.openContourEditOverwriteEnd=rK.bind(e),e.cancelOpenContourEdit=r2.bind(e),e.completeOpenContourEdit=r1.bind(e)},{getSubPixelSpacingAndXYDirections:r3}=V;function r4(e,t,n,i){this.isDrawing=!0;let{element:a}=e.detail,{viewport:o}=(0,ej.Ay)(a),{spacing:r,xDir:l,yDir:s}=r3(o,this.configuration.subPixelResolution),d=t.data.contour.polyline.map(o.worldToCanvas);0===t.data.handles.activeHandleIndex&&d.reverse();let h=!1;i?.worldPosition&&(h=!0),this.drawData={canvasPoints:d,polylineIndex:d.length-1},this.commonData={annotation:t,viewportIdsToRender:n,spacing:r,xDir:l,yDir:s,movingTextBox:h},e0.isInteractingWithTool=!0,a.addEventListener(eK.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(eK.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(eK.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(eK.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(eK.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(eK.TOUCH_TAP,this.mouseUpDrawCallback),o2(a)}let r8=function(e){e.activateOpenContourEndEdit=r4.bind(e)},r9=function(e,t,n){return`${e}::${t}::${n}`},r7=function(e,t){Object.keys(e).forEach(n=>{let i=e[n];void 0!==i&&""!==i&&t.setAttribute(n,i)})},r6=function(e,t){Object.keys(e).forEach(n=>{let i=t.getAttribute(n),a=e[n];void 0===a||""===a?t.removeAttribute(n):i!==a&&t.setAttribute(n,a)})};function le(e,t,n,i,a){let o=i.length&&i[0].length&&Array.isArray(i[0][0])?i:[i],{color:r="rgb(0, 255, 0)",width:l=10,fillColor:s="none",fillOpacity:d=0,lineWidth:h,lineDash:c,closePath:u=!1}=a,g=r9(t,"path",n),m=e.getSvgNode(g),p="";for(let e=0,t=o.length;e<t;
2e++){let t=o[e],n=t.length;if(!(n<2)){for(let e=0;e<n;e++){let n=t[e],i=e?"L":"M";p+=`${i} ${n[0].toFixed(1)}, ${n[1].toFixed(1)} `}u&&(p+="Z ")}}if(!p)return;let f={d:p,stroke:r,fill:s,"fill-opacity":d,"stroke-width":h||l,"stroke-dasharray":c};if(m)r6(f,m),e.setNodeTouched(g);else{let t=document.createElementNS("http://www.w3.org/2000/svg","path");r7(f,t),e.appendNode(t,g)}}function lt(e,t,n,i,a){if(i.length<2)return;let{color:o="rgb(0, 255, 0)",width:r=10,fillColor:l="none",fillOpacity:s=0,lineWidth:d,lineDash:h,closePath:c=!1,markerStartId:u=null,markerEndId:g=null}=a,m=r9(t,"polyline",n),p=e.getSvgNode(m),f="";for(let e of i)f+=`${e[0].toFixed(1)}, ${e[1].toFixed(1)} `;if(c){let e=i[0];f+=`${e[0]}, ${e[1]}`}let v={points:f,stroke:o,fill:l,"fill-opacity":s,"stroke-width":d||r,"stroke-dasharray":h,"marker-start":u?`url(#${u})`:"","marker-end":g?`url(#${g})`:""};if(p)r6(v,p),e.setNodeTouched(m);else{let t=document.createElementNS("http://www.w3.org/2000/svg","polyline");r7(v,t),e.appendNode(t,m)}}let ln=function(e,t,n,i,a={},o){let r,{color:l,handleRadius:s,width:d,lineWidth:h,fill:c,type:u,opacity:g}=Object.assign({color:"rgb(0, 255, 0)",handleRadius:"6",width:"2",lineWidth:void 0,fill:"transparent",type:"circle",opacity:1},a),m=h||d,p=r9(t,"handle",`hg-${n}-index-${o}`);if("circle"===u)r={cx:`${i[0]}`,cy:`${i[1]}`,r:s,stroke:l,fill:c,"stroke-width":m,opacity:g};else if("rect"===u){let e=1.5*parseFloat(s),t=i[0]-.5*e,n=i[1]-.5*e;r={x:`${t}`,y:`${n}`,width:`${e}`,height:`${e}`,stroke:l,fill:c,"stroke-width":m,rx:`${.1*e}`,opacity:g}}else throw Error(`Unsupported handle type: ${u}`);let f=e.getSvgNode(p);if(f)r6(r,f),e.setNodeTouched(p);else{let t=document.createElementNS("http://www.w3.org/2000/svg",u);r7(r,t),e.appendNode(t,p)}},li=function(e,t,n,i,a={}){i.forEach((i,o)=>{ln(e,t,n,i,a,o)})};function la(e){return(e.childAnnotationUIDs??[]).map(e=>ta(e).data.contour.polyline)}function lo(e,t){let n=la(e),i=[];return n.forEach(e=>{let n=e.length,a=Array(n);for(let i=0;i<n;i++)a[i]=t.worldToCanvas(e[i]);i.push(a)}),i}let{pointsAreWithinCloseContourProximity:lr}=V;function ll(e,t){let n={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id,annotationUID:t.annotationUID},{lineWidth:i,lineDash:a,color:o,fillColor:r,fillOpacity:l}=this.getAnnotationStyle({annotation:t,styleSpecifier:n}),{closed:s}=t.data.contour;return{color:o,width:i,lineDash:a,fillColor:r,fillOpacity:this.configuration?.fillOpacity!==void 0?this.configuration.fillOpacity:l,closePath:s}}function ls(e,t,n){var i,a;e?.viewport?.getImageData()&&(n.data.contour.closed?this.renderClosedContour(e,t,n):n.data.isOpenUShapeContour?("lineSegment"!==n.data.isOpenUShapeContour&&(i=e,(a=n).data.openUShapeContourVectorToPeak||(a.data.openUShapeContourVectorToPeak=function(e,t){let{viewport:n}=e;return ro(t.data.contour.polyline.map(n.worldToCanvas),n,t.data.isOpenUShapeContour)}(i,a))),this.renderOpenUShapedContour(e,t,n)):this.renderOpenContour(e,t,n))}function ld(e,t,n){if(n.parentAnnotationUID)return;let{viewport:i}=e,a=this._getRenderingOptions(e,n),o=[n.data.contour.polyline.map(e=>i.worldToCanvas(e)),...lo(n,i)];le(t,n.annotationUID,"1",o,a)}function lh(e,t,n){let{viewport:i}=e,a=this._getRenderingOptions(e,n),o=n.data.contour.polyline.map(e=>i.worldToCanvas(e));lt(t,n.annotationUID,"1",o,a);let r=n.data.handles.activeHandleIndex;if(this.configuration.alwaysRenderOpenContourHandles?.enabled===!0){let e=this.configuration.alwaysRenderOpenContourHandles.radius,i=[o[0],o[o.length-1]];0===r?i.shift():1===r&&i.pop(),li(t,n.annotationUID,"0",i,{color:a.color,handleRadius:e})}if(null!==r){let e=0===r?0:o.length-1,i=o[e];li(t,n.annotationUID,"1",[i],{color:a.color})}}function lc(e,t,n){let{viewport:i}=e,{openUShapeContourVectorToPeak:a}=n.data,{polyline:o}=n.data.contour;this.renderOpenContour(e,t,n);let r="lineSegment"===n.data.isOpenUShapeContour;if(!r&&!a)return;let l=i.worldToCanvas(o[0]),s=i.worldToCanvas(o[o.length-1]),d=this._getRenderingOptions(e,n);if(lt(t,n.annotationUID,"first-to-last",[l,s],{color:d.color,width:d.width,closePath:!1,lineDash:"2,2"}),!r){let e=[i.worldToCanvas(a[0]),i.worldToCanvas(a[1])];lt(t,n.annotationUID,"midpoint-to-open-contour",[e[0],e[1]],{color:d.color,width:d.width,closePath:!1,lineDash:"2,2"})}if(d.fillOpacity>0){let e=o.map(e=>i.worldToCanvas(e));le(t,n.annotationUID,"u-shape-fill",[[...e,l]],{color:d.fillColor||d.color,fillColor:d.fillColor||d.color,fillOpacity:d.fillOpacity,closePath:!0,width:0})}}function lu(e,t,n){let i=this._getRenderingOptions(e,n),{allowOpenContours:a}=this.configuration,{canvasPoints:o}=this.drawData;if(i.closePath=!1,lt(t,n.annotationUID,"1",o,i),a){let e=o[0],a=o[o.length-1];lr(e,a,this.configuration.closeContourProximity)?lt(t,n.annotationUID,"2",[a,e],i):li(t,n.annotationUID,"0",[e],{color:i.color,handleRadius:2})}}function lg(e,t,n){let{viewport:i}=e,{fusedCanvasPoints:a}=this.editData;if(void 0===a)return void this.renderClosedContour(e,t,n);let o=[a,...lo(n,i)],r=this._getRenderingOptions(e,n);n.parentAnnotationUID&&r.fillOpacity&&(r.fillOpacity=0),le(t,n.annotationUID,"preview-1",o,r)}function lm(e,t,n){let{fusedCanvasPoints:i}=this.editData;if(void 0===i)return void this.renderOpenContour(e,t,n);let a=this._getRenderingOptions(e,n);lt(t,n.annotationUID,"preview-1",i,a)}function lp(e,t,n){if(n.parentAnnotationUID)return;let{viewport:i}=e,a=this._getRenderingOptions(e,n),o=n.data.contour.polyline.map(e=>i.worldToCanvas(e)),r=lo(n,i),l=o[0],s=[];for(let e=0;e<100;e++){let t=e/100*2*Math.PI,n=l[0]+6*Math.cos(t),i=l[1]+6*Math.sin(t);s.push([n,i])}let d=[[l[0]-12,l[1]],[l[0]+12,l[1]],[l[0],l[1]-12],[l[0],l[1]+12]];le(t,n.annotationUID,"1-crosshair_v",[d[0],d[1]],a),le(t,n.annotationUID,"1-crosshair_h",[d[2],d[3]],a);let h=[s,...r];le(t,n.annotationUID,"1",h,a)}let lf=function(e){e.renderContour=ls.bind(e),e.renderClosedContour=ld.bind(e),e.renderOpenContour=lh.bind(e),e.renderPointContourWithMarker=lp.bind(e),e.renderOpenUShapedContour=lc.bind(e),e.renderContourBeingDrawn=lu.bind(e),e.renderClosedContourBeingEdited=lg.bind(e),e.renderOpenContourBeingEdited=lm.bind(e),e._getRenderingOptions=ll.bind(e)};function lv(e){let t=document.createElementNS("http://www.w3.org/2000/svg","tspan");return t.setAttribute("x","0"),t.setAttribute("dy","1.2em"),t.textContent=e,t}
2function lI(e,t){let{color:n,textBoxBorderRadius:i=0,textBoxMargin:a=0}=t,o=e.querySelector("rect.background"),r=e.querySelector("text").getBBox();if(!n)return o&&e.removeChild(o),e.getBBox();o||((o=document.createElementNS("http://www.w3.org/2000/svg","rect")).setAttribute("class","background"),e.insertBefore(o,e.firstChild));let l=e.getBBox(),s={x:`${l.x}`,y:`${l.y}`,width:`${r.width+2*Number(a)}`,height:`${r.height+2*Number(a)}`,fill:n,rx:i,ry:i};return a&&Array.from(e.querySelector("text").querySelectorAll("tspan")).forEach((e,t)=>{0===t&&e.setAttribute("y",a),e.setAttribute("x",a)}),r6(s,o),l}let lC=function(e,t,n,i,a,o={}){return function(e,t,n,i=[""],a,o){let r,{padding:l,color:s,fontFamily:d,fontSize:h,background:c,textBoxBorderRadius:u,textBoxMargin:g}=o,[m,p]=[a[0]+l,a[1]+l],f={color:c,textBoxBorderRadius:u,textBoxMargin:g},v=r9(t,"text",n),I=e.getSvgNode(v);if(I){let n=I.querySelector("text"),a=Array.from(n.children);for(let e=0;e<a.length;e++)a[e].textContent=i[e]||"";if(i.length>a.length){for(let e=0;e<i.length-a.length;e++){let t=lv(i[e+a.length]);n.appendChild(t)}I.appendChild(n),e.appendNode(I,v)}let o={transform:`translate(${m} ${p})`};r6({fill:s,"font-size":h,"font-family":d},n),r6(o,I),I.setAttribute("data-annotation-uid",t),r=lI(I,f),e.setNodeTouched(v)}else{let n=document.createElementNS("http://www.w3.org/2000/svg","g");n.setAttribute("data-annotation-uid",t),n.setAttribute("transform",`translate(${m} ${p})`);let a=function(e,t){let{color:n,fontFamily:i,fontSize:a}=t,o=document.createElementNS("http://www.w3.org/2000/svg","text"),r=`filter:url(#shadow-${e.svgLayerElement.id});`,l=`user-select: none; pointer-events: none; -webkit-tap-highlight-color:  rgba(255, 255, 255, 0);${r}`;return o.setAttribute("x","0"),o.setAttribute("y","0"),o.setAttribute("fill",n),o.setAttribute("font-family",i),o.setAttribute("font-size",a),o.setAttribute("style",l),o.setAttribute("pointer-events","visible"),o}(e,o);for(let e=0;e<i.length;e++){let t=lv(i[e]);a.appendChild(t)}n.appendChild(a),e.appendNode(n,v),r=lI(n,f)}return Object.assign({},r,{x:m,y:p,height:r.height+l,width:r.width+l})}(e,t,n,i,a,Object.assign({fontFamily:"Helvetica, Arial, sans-serif",fontSize:"14px",color:"rgb(255, 255, 0)",background:"",padding:25,centerX:!1,centerY:!0},o))};function l_(e,t,n,i,a,o={},r=""){if(isNaN(i[0])||isNaN(i[1])||isNaN(a[0])||isNaN(a[1]))return;let{color:l="rgb(0, 255, 0)",width:s=10,lineWidth:d,lineDash:h,markerStartId:c=null,markerEndId:u=null,shadow:g=!1,strokeOpacity:m=1,textBoxLinkLineColor:p}=o,f=r9(t,"line",n),v=e.getSvgNode(f),I=e.svgLayerElement.id,C=g?`filter:url(#shadow-${I});`:"",_={x1:`${i[0]}`,y1:`${i[1]}`,x2:`${a[0]}`,y2:`${a[1]}`,stroke:p||l,style:C,"stroke-width":d||s,"stroke-dasharray":h,"marker-start":c?`url(#${c})`:"","marker-end":u?`url(#${u})`:"","stroke-opacity":m};if(v)r6(_,v),e.setNodeTouched(f);else{let t=document.createElementNS("http://www.w3.org/2000/svg","line");""!==r&&t.setAttribute("data-id",r),r7(_,t),e.appendNode(t,f)}}function lE(e,t){let n=[0,0],i=Number.MAX_SAFE_INTEGER;return e.forEach(function(e){let a=function(e,t){let[n,i]=e,[a,o]=t;return Math.sqrt(Math.pow(n-a,2)+Math.pow(i-o,2))}(t,e);a<i&&(i=a,n=[...e])}),n}let lw=function(e,t,n,i,a,o,r={}){let l=i.length>0?lE(i,a):a,s=lE(function(e){let{x:t,y:n,height:i,width:a}=e,o=a/2,r=i/2;return[[t+o,n],[t,n+r],[t+o,n+i],[t+a,n+r]]}(o),l);l_(e,t,`link-${n}`,l,s,Object.assign({color:"rgb(255, 255, 0)",lineWidth:"1",lineDash:"2,3"},r))},lA=function(e,t,n,i,a,o,r,l={}){let s=Object.assign({handleRadius:"6",centering:{x:!1,y:!0}},l),d=lC(e,t,n,i,a,s);return lw(e,t,n,o,a,d,s),d};function lS(e){let t=function(e){let t=[e[0],e[1]].sort(function(e,t){return e[0]<t[0]?-1:1}),n=[e[0],e[1]].sort(function(e,t){return e[1]<t[1]?-1:1}),i=t[t.length-1];return{top:n[0],bottom:n[n.length-1],right:i}}(e),n=(t.top[1]+t.bottom[1])/2;return[t.right[0],n]}function ly(e,t){if(e instanceof nU.A){let e=iS.A(t),n=nV.Ay.getVolume(e);return!!n?.scaling&&Object.keys(n.scaling).length>0}if(!(e instanceof iA.A))return!1;{let{preScale:t}=e.getImageData()||{};return!!t?.scaled}}class lb{}class lT{constructor(e){this.storePointData=e.storePointData}getStatistics(){console.debug("InstanceCalculator getStatistics called")}}let{PointsManager:lM}=i9;function lD(e){return{max:[-1/0],min:[1/0],sum:[0],count:0,maxIJK:null,maxLPS:null,minIJK:null,minLPS:null,runMean:[0],m2:[0],m3:[0],m4:[0],allValues:[[]],pointsInShape:e?lM.create3(1024):null,sumLPS:[0,0,0]}}function lO(e,t,n=null,i=null){Array.isArray(t)&&t.length>1&&1===e.max.length&&(e.max.push(e.max[0],e.max[0]),e.min.push(e.min[0],e.min[0]),e.sum.push(e.sum[0],e.sum[0]),e.runMean.push(0,0),e.m2.push(e.m2[0],e.m2[0]),e.m3.push(e.m3[0],e.m3[0]),e.m4.push(e.m4[0],e.m4[0]),e.allValues.push([],[])),e?.points
2InShape&&n&&e.pointsInShape.push(n);let a=Array.isArray(t)?t:[t];e.count+=1,n&&(e.sumLPS[0]+=n[0],e.sumLPS[1]+=n[1],e.sumLPS[2]+=n[2]),e.max.forEach((t,o)=>{let r=a[o];e.allValues[o].push(r);let l=e.count,s=r-e.runMean[o],d=s/l,h=s*d*(l-1);e.sum[o]+=r,e.runMean[o]+=d,e.m4[o]+=h*d*d*(l*l-3*l+3)+6*d*d*e.m2[o]-4*d*e.m3[o],e.m3[o]+=h*d*(l-2)-3*d*e.m2[o],e.m2[o]+=h,r<e.min[o]&&(e.min[o]=r,0===o&&(e.minIJK=i?[...i]:null,e.minLPS=n?[...n]:null)),r>e.max[o]&&(e.max[o]=r,0===o&&(e.maxIJK=i?[...i]:null,e.maxLPS=n?[...n]:null))})}function lx(e,t){let n=e.sum.map(t=>t/e.count),i=e.m2.map(t=>Math.sqrt(t/e.count)),a=e.sumLPS.map(t=>t/e.count),o=e.m3.map((t,n)=>{let i=e.m2[n]/e.count;return 0===i?0:t/(e.count*Math.pow(i,1.5))}),r=e.m4.map((t,n)=>{let i=e.m2[n]/e.count;return 0===i?0:t/(e.count*i*i)-3}),l=e.allValues.map(e=>(function(e){if(0===e.length)return 0;let t=[...e].sort((e,t)=>e-t),n=Math.floor(t.length/2);return t.length%2==0?(t[n-1]+t[n])/2:t[n]})(e)),s={max:{name:"max",label:"Max Pixel",value:1===e.max.length?e.max[0]:e.max,unit:t,pointIJK:e.maxIJK?[...e.maxIJK]:null,pointLPS:e.maxLPS?[...e.maxLPS]:null},min:{name:"min",label:"Min Pixel",value:1===e.min.length?e.min[0]:e.min,unit:t,pointIJK:e.minIJK?[...e.minIJK]:null,pointLPS:e.minLPS?[...e.minLPS]:null},mean:{name:"mean",label:"Mean Pixel",value:1===n.length?n[0]:n,unit:t},stdDev:{name:"stdDev",label:"Standard Deviation",value:1===i.length?i[0]:i,unit:t},count:{name:"count",label:"Voxel Count",value:e.count,unit:null},median:{name:"median",label:"Median",value:1===l.length?l[0]:l,unit:t},skewness:{name:"skewness",label:"Skewness",value:1===o.length?o[0]:o,unit:null},kurtosis:{name:"kurtosis",label:"Kurtosis",value:1===r.length?r[0]:r,unit:null},maxLPS:{name:"maxLPS",label:"Max LPS",value:e.maxLPS?Array.from(e.maxLPS):null,unit:null},minLPS:{name:"minLPS",label:"Min LPS",value:e.minLPS?Array.from(e.minLPS):null,unit:null},pointsInShape:e.pointsInShape,center:{name:"center",label:"Center",value:a?[...a]:null,unit:null},array:[]};s.array.push(s.min,s.max,s.mean,s.stdDev,s.median,s.skewness,s.kurtosis,s.count,s.maxLPS,s.minLPS),s.center.value&&s.array.push(s.center);let d=lD(null!==e.pointsInShape);return e.max=d.max,e.min=d.min,e.sum=d.sum,e.count=d.count,e.maxIJK=d.maxIJK,e.maxLPS=d.maxLPS,e.minIJK=d.minIJK,e.minLPS=d.minLPS,e.runMean=d.runMean,e.m2=d.m2,e.m3=d.m3,e.m4=d.m4,e.allValues=d.allValues,e.pointsInShape=d.pointsInShape,e.sumLPS=d.sumLPS,s}class lP extends lb{static{this.state=lD(!0)}static statsInit(e){e.storePointData||(this.state.pointsInShape=null),this.state=lD(e.storePointData)}static{this.statsCallback=({value:e,pointLPS:t=null,pointIJK:n=null})=>{lO(this.state,e,t,n)}}static{this.getStatistics=e=>lx(this.state,e?.unit)}}class lL extends lT{constructor(e){super(e),this.state=lD(e.storePointData)}statsInit(e){this.state=lD(e.storePointData)}statsCallback(e){lO(this.state,e.value,e.pointLPS,e.pointIJK)}getStatistics(e){return lx(this.state,e?.unit)}}var lN=n(8116),lR=n(23036),lk=n(65086),lU=n(77765),lV=n(97051),lF=n(22131);let{DefaultHistoryMemo:lG}=lN;class lB{get configurationTyped(){return this.configuration}static{this.defaults={configuration:{strategies:{},defaultStrategy:void 0,activeStrategy:void 0,strategyOptions:{}}}}constructor(e,t){this.isPrimary=!1;let n=lB.mergeDefaultProps(lB.defaults,t),{configuration:i={},supportedInteractionTypes:a,toolGroupId:o}=ab.A(n,e);this.toolGroupId=o,this.supportedInteractionTypes=a||[],this.configuration=Object.assign({},i),this.mode=e1.Disabled}static mergeDefaultProps(e={},t){return t?ab.A(e,t):e}static isSpecifiedTargetId(e){return(t,{targetId:n})=>n.includes(e)}get toolName(){return this.getToolName()}getToolName(){return this.constructor.toolName}applyActiveStrategy(e,t){let{strategies:n,activeStrategy:i}=this.configuration;return n[i]?.call(this,e,t)}applyActiveStrategyCallback(e,t,n,...i){let{strategies:a,activeStrategy:o}=this.configuration;if(!a[o])throw Error(`applyActiveStrategyCallback: active strategy ${o} not found, check tool configuration or spellings`);return a[o][n]?.call(this,e,t,...i)}setConfiguration(e){this.configuration=ab.A(this.configuration,e)}setActiveStrategy(e){this.setConfiguration({activeStrategy:e})}getTargetImageData(e){if(e.startsWith("imageId:")){let t=e.split("imageId:")[1],n=lk.A(t),i=lU.A(n);if(i&&i.length&&(i=i.filter(e=>e.getCurrentImageId()===t))&&i.length)return i[0].getImageData()}else if(e.startsWith("volumeId:")){let t=iS.A(e),n=lV.A(t);if(!n||!n.length)return;return n[0].getImageData()}else if(e.startsWith("videoId:")){let t=lk.A(e),n=lU.A(t);if(!n||!n.length)return;return n[0].getImageData()}else throw Error('getTargetIdImage: targetId must start with "imageId:" or "volumeId:"')}getTargetId(e,t){let{isPreferredTargetId:n}=this.configurationTyped;
2if(n&&t?.cachedStats){for(let[i,a]of Object.entries(t.cachedStats))if(n(e,{targetId:i,cachedStat:a}))return i}let i=e.getViewReferenceId?.();if(i)return i;throw Error("getTargetId: viewport must have a getViewReferenceId method")}undo(){this.doneEditMemo(),lG.undo()}redo(){lG.redo()}static createZoomPanMemo(e){let t={pan:e.getPan(),zoom:e.getZoom()},n={restoreMemo:()=>{let n=e.getPan(),i=e.getZoom();e.setZoom(t.zoom),e.setPan(t.pan),e.render(),t.pan=n,t.zoom=i}};return lG.push(n),n}doneEditMemo(){this.memo?.commitMemo?.()&&lG.push(this.memo),this.memo=null}static startGroupRecording(){lG.startGroupRecording()}static endGroupRecording(){lG.endGroupRecording()}static calculateLengthInIndex(e,t,n=!1){let i=e?.scale||1,a=e?.scaleY||i,o=e?.scaleZ||i,r=0,l=t.length,s=+!n,d=n?t[l-1]:t[0];for(let e=s;e<l;e++){let n=t[e],l=(n[0]-d[0])/i,s=(n[1]-d[1])/a,h=(n[2]-d[2])/o;r+=Math.sqrt(l*l+s*s+h*h),d=n}return r}static isInsideVolume(e,t){let{length:n}=t;for(let i=0;i<n;i++)if(!lF.A(t[i],e))return!1;return!0}}lB.toolName="BaseTool";let lH=lB;class lW{constructor(){this._initializeConfig({color:"rgb(255, 255, 0)",colorHighlighted:"rgb(0, 255, 0)",colorSelected:"rgb(0, 220, 0)",colorLocked:"rgb(209, 193, 90)",lineWidth:"1",lineDash:"",shadow:!0,textBoxVisibility:!0,textBoxFontFamily:"Helvetica Neue, Helvetica, Arial, sans-serif",textBoxFontSize:"14px",textBoxColor:"rgb(255, 255, 0)",textBoxColorHighlighted:"rgb(0, 255, 0)",textBoxColorSelected:"rgb(0, 255, 0)",textBoxColorLocked:"rgb(209, 193, 90)",textBoxBackground:"",textBoxLinkLineWidth:"1",textBoxLinkLineDash:"2,3",textBoxShadow:!0,markerSize:"10",angleArcLineDash:""})}getAnnotationToolStyles(e){return this.config.annotations&&this.config.annotations[e]}getViewportToolStyles(e){return this.config.viewports&&this.config.viewports[e]}getToolGroupToolStyles(e){return this.config.toolGroups&&this.config.toolGroups[e]}getDefaultToolStyles(){return this.config.default}setAnnotationStyles(e,t){let n=this.config.annotations;n||(this.config={...this.config,annotations:{}},n=this.config.annotations),n[e]=t}setViewportToolStyles(e,t){let n=this.config.viewports;n||(this.config={...this.config,viewports:{}},n=this.config.viewports),n[e]=t}setToolGroupToolStyles(e,t){let n=this.config.toolGroups;n||(this.config={...this.config,toolGroups:{}},n=this.config.toolGroups),n[e]=t}setDefaultToolStyles(e){this.config.default=e}getStyleProperty(e,t){let{annotationUID:n,viewportId:i,toolGroupId:a,toolName:o}=t;return this._getToolStyle(e,n,i,a,o)}_getToolStyle(e,t,n,i,a){if(t){let n=this.getAnnotationToolStyles(t);if(n&&void 0!==n[e])return n[e]}if(n){let t=this.getViewportToolStyles(n);if(t){if(t[a]&&void 0!==t[a][e])return t[a][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}if(i){let t=this.getToolGroupToolStyles(i);if(t){if(t[a]&&void 0!==t[a][e])return t[a][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}let o=this.getDefaultToolStyles();return o[a]&&void 0!==o[a][e]?o[a][e]:o.global&&void 0!==o.global[e]?o.global[e]:void 0}_initializeConfig(e){let t={};for(let n in e)t[n]=e[n];this.config={default:{global:t}}}}let l$=new lW;function lz(e,t,n,i){let a=function(e,t,n){let i=[`${e}`];return t&&i.push(`${i[0]}${t}`),n&&i.push(`${i[i.length-1]}${n}`),i}(e,n,i);for(let e=a.length-1;e>=0;--e){let n=l$.getStyleProperty(a[e],t);if(void 0!==n)return n}}let lX=new Set;function lj(e,t=!0,n=!1){t?function(e,t=!1){let n=lQ();if(!t){l0(lX,n);let t=ta(e);t&&(t.isSelected=!0)}if(e&&!lX.has(e)){lX.add(e),n.added.push(e);let t=ta(e);t&&(t.isSelected=!0)}l1(n,lX)}(e,n):lq(e)}function lq(e){let t=lQ();e?lX.delete(e)&&(t.removed.push(e),ta(e).isSelected=!1):l0(lX,t),l1(t,lX)}function lK(){return Array.from(lX)}function lY(e){return lK().filter(t=>{let n=ta(t);return n?.metadata?.toolName===e})}function lZ(e){return lX.has(e)}function lJ(){return lX.size}function lQ(){return Object.freeze({added:[],removed:[],selection:[]})}function l0(e,t){e.forEach(n=>{if(e.delete(n)){t.removed.push(n);let e=ta(n);e&&(e.isSelected=!1)}})}function l1(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach(t=>void e.selection.push(t)),(0,eq.A)(ez.A,eK.ANNOTATION_SELECTION_CHANGE,e))}!function(e){e.Default="",e.Highlighted="Highlighted",e.Selected="Selected",e.Locked="Locked",e.AutoGenerated="AutoGenerated"}(E||(E={}));let l2=E,l5=function(e){if(e){if(e.data&&e.highlighted)return l2.Highlighted;if(lZ(e.annotationUID))return l2.Selected;if(iN(e.annotationUID))return l2.Locked;if(e.data&&e.autoGenerated)return l2.AutoGenerated}return l2.Default};class l3 extends lH{constructor(){super(...arguments),this.onImageSpacingCalibrated=e=>{let{element:t,imageId:n}=e.detail,a=lk.A(n),o=i;
2o.getFramesOfReference().forEach(e=>{let n=o.getAnnotations(e)[this.getToolName()];n&&n.length&&(n.forEach(e=>{e.metadata?.referencedImageId&&lk.A(e.metadata.referencedImageId)===a&&(e.invalidated=!0,e.data.cachedStats={})}),o$(t))})}}filterInteractableAnnotationsForElement(e,t){if(!t?.length)return[];let{viewport:n}=(0,ej.Ay)(e);return o_(n,t)}static createAnnotation(...e){let t={annotationUID:null,highlighted:!0,invalidated:!0,isLocked:!1,isVisible:!0,metadata:{toolName:this.toolName},data:{handles:{points:[],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},cachedStats:{},label:""}};for(let n of e)t=ab.A(t,n);return t}createAnnotation(e,t,...n){let{currentPoints:i,element:a}=e.detail,{world:o}=i,{viewport:r}=(0,ej.Ay)(a),{viewPlaneNormal:l,viewUp:s,position:d}=r.getCamera(),h=this.getReferencedImageId(r,o,l,s),c=r.getViewReference({points:[o]});return l3.createAnnotation({metadata:{toolName:this.getToolName(),...c,referencedImageId:h,viewUp:s,cameraPosition:d},data:{handles:{points:t||[]}}},...n)}getReferencedImageId(e,t,n,i){let a=this.getTargetId(e),o=a.split(/^[a-zA-Z]+:/)[1];if(e instanceof nU.A){let e=iS.A(a),i=nV.Ay.getVolume(e);o=iy.A(i,t,n)}return o}getStyle(e,t,n){return lz(e,t,l5(n),this.mode)}}l3.toolName="AnnotationDisplayTool";let l4=l3,l8=new Set;function l9(e,t=!0){var n,i,a;let o=se();e&&(t?st(e,l8,o):(n=e,i=l8,a=o,i.has(n)||(i.add(n),lZ(n)&&lq(n),a.lastHidden.push(n),ta(n).isVisible=!1))),sn(o)}function l7(){let e=se();l8.forEach(t=>{st(t,l8,e)}),sn(e)}function l6(e){if(ta(e))return!l8.has(e)}function se(){return Object.freeze({lastVisible:[],lastHidden:[],hidden:[]})}function st(e,t,n){t.delete(e)&&(n.lastVisible.push(e),ta(e).isVisible=!0)}function sn(e){(e.lastHidden.length>0||e.lastVisible.length>0)&&(l8.forEach(t=>void e.hidden.push(t)),(0,eq.A)(ez.A,eK.ANNOTATION_VISIBILITY_CHANGE,e))}function si(e){let t=!l8.has(e);return l9(e,t),t}let{PointsManager:sa}=i9,so=new Map([["pointsInVolume",null],["projectionPoints",null],["contour",function(e,t){return null!=t&&"object"==typeof t&&"polyline"in t?{...t,polyline:null,pointsManager:sa.create3(t.polyline.length,t.polyline)}:t}],["spline",null]]);function sr(e){return null==e||"object"!=typeof e?e:Array.isArray(e)?e.map(e=>sr(e)):function e(t){let n={};for(let[i,a]of Object.entries(t)){if(so.has(i)){let e=so.get(i);e&&(n[i]=e(i,a));continue}null==a||"object"!=typeof a?n[i]=a:Array.isArray(a)?n[i]=a.map(e=>sr(e)):n[i]=e(a)}return n}(e)}let{DefaultHistoryMemo:sl}=lN;class ss extends l4{static createAnnotationForViewport(e,...t){return this.createAnnotation({metadata:e.getViewReference()},...t)}static createAndAddAnnotation(e,...t){let n=this.createAnnotationForViewport(e,...t);th(n,e.element),e9(n,e.element)}constructor(e,t){super(e,t),this.mouseMoveCallback=(e,t)=>{if(!t)return!1;let{element:n,currentPoints:i}=e.detail,a=i.canvas,o=!1;for(let e of t){if(iN(e.annotationUID)||!l6(e.annotationUID))continue;let{data:t}=e,i=t.handles?t.handles.activeHandleIndex:void 0,r=this._imagePointNearToolOrHandle(n,e,a,6),l=r&&!e.highlighted,s=!r&&e.highlighted;l||s?(e.highlighted=!e.highlighted,o=!0):t.handles&&t.handles.activeHandleIndex!==i&&(o=!0)}return o},this.isSuvScaled=ss.isSuvScaled,e.configuration?.getTextLines&&(this.configuration.getTextLines=e.configuration.getTextLines),e.configuration?.statsCalculator&&(this.configuration.statsCalculator=e.configuration.statsCalculator)}getHandleNearImagePoint(e,t,n,i){let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,{isCanvasAnnotation:r}=o,{points:l,textBox:s}=o.handles;if(s){let{worldBoundingBox:e}=s;if(e){let t={topLeft:a.worldToCanvas(e.topLeft),topRight:a.worldToCanvas(e.topRight),bottomLeft:a.worldToCanvas(e.bottomLeft),bottomRight:a.worldToCanvas(e.bottomRight)};if(n[0]>=t.topLeft[0]&&n[0]<=t.bottomRight[0]&&n[1]>=t.topLeft[1]&&n[1]<=t.bottomRight[1])return o.handles.activeHandleIndex=null,s}}for(let e=0;e<l?.length;e++){let t=l[e],s=r?t.slice(0,2):a.worldToCanvas(t);if(!0==aZ.Io(n,s)<i)return o.handles.activeHandleIndex=e,t}o.handles.activeHandleIndex=null}getLinkedTextBoxStyle(e,t){return{visibility:this.getStyle("textBoxVisibility",e,t),fontFamily:this.getStyle("textBoxFontFamily",e,t),fontSize:this.getStyle("textBoxFontSize",e,t),color:this.getStyle("textBoxColor",e,t),shadow:this.getStyle("textBoxShadow",e,t),background:this.getStyle("textBoxBackgroun
2d",e,t),lineWidth:this.getStyle("textBoxLinkLineWidth",e,t),lineDash:this.getStyle("textBoxLinkLineDash",e,t),textBoxBorderRadius:this.getStyle("textBoxBorderRadius",e,t),textBoxMargin:this.getStyle("textBoxMargin",e,t),textBoxLinkLineColor:this.getStyle("textBoxLinkLineColor",e,t)}}static isSuvScaled(e,t,n){if(e instanceof nU.A){let e=iS.A(t),n=nV.Ay.getVolume(e);return n?.scaling?.PT!==void 0}let i=n&&ib.get("scalingModule",n);return"number"==typeof i?.suvbw}getAnnotationStyle(e){let{annotation:t,styleSpecifier:n}=e,i=e=>this.getStyle(e,n,t),{annotationUID:a}=t,o=l6(a),r=iN(a),l=i("lineWidth"),s=i("lineDash"),d=i("angleArcLineDash"),h=i("color"),c=i("markerSize");return{visibility:o,locked:r,color:h,lineWidth:l,lineDash:s,lineOpacity:1,fillColor:h,fillOpacity:0,shadow:i("shadow"),textbox:this.getLinkedTextBoxStyle(n,t),markerSize:c,angleArcLineDash:d}}_imagePointNearToolOrHandle(e,t,n,i){if(this.getHandleNearImagePoint(e,t,n,i)||this.isPointNearTool(e,t,n,i,"mouse"))return!0}static createAnnotationState(e,t){let{data:n,annotationUID:i}=e;return{annotationUID:i,data:sr(n),deleting:t}}static createAnnotationMemo(e,t,n){if(!t)return;let{newAnnotation:i,deleting:a=!i&&void 0}=n||{},{annotationUID:o}=t,r=ss.createAnnotationState(t,a),l={restoreMemo:()=>{let n=ss.createAnnotationState(t,a),{viewport:i}=(0,ej.Ay)(e)||{};if(i?.setViewReference(t.metadata),!0===r.deleting){if(r.deleting=!1,Object.assign(t.data,r.data),t.data.contour){let e=t.data;e.contour.polyline=r.data.contour.pointsManager.points,delete r.data.contour.pointsManager,e.segmentation&&iG(t)}r.data=n.data,th(t,e),lj(t.annotationUID,!0),i?.render();return}if(!1===r.deleting){r.deleting=!0,r.data=n.data,lj(t.annotationUID),tu(t.annotationUID),i?.render();return}let l=ta(o);if(!l)return void console.warn("No current annotation");Object.assign(l.data,r.data),l.data.contour&&(l.data.contour.polyline=r.data.contour.pointsManager.points),r.data=n.data,l.invali
2dated=!0,e&&e9(l,e,eY.History)},id:o,operationType:"annotation"};return sl.push(l),l}createMemo(e,t,n){this.memo||=ss.createAnnotationMemo(e,t,n)}startGroupRecording(){sl.startGroupRecording()}endGroupRecording(){sl.endGroupRecording()}static hydrateBase(e,t,n,i={}){let a;if(!t)return null;let{viewport:o}=t,r=o.getFrameOfReferenceUID(),l=o.getCamera(),s=i.viewplaneNormal??l.viewPlaneNormal,d=i.viewUp??l.viewUp,h=i.toolInstance||new e,c=s,u=d;if(i.referencedImageId)a=i.referencedImageId,c=void 0,u=void 0;else if(o instanceof iA.A){let e=lR.A(n[0],o);void 0!==e&&(a=o.getImageIds()[e])}else if(o instanceof nU.A)a=h.getReferencedImageId(o,n[0],s,d);else throw Error("Unsupported viewport type");return{FrameOfReferenceUID:r,referencedImageId:a,viewPlaneNormal:c,viewUp:u,instance:h,viewport:o}}}ss.toolName="AnnotationTool";let sd=ss;class sh extends sd{constructor(e,t){super(e,t)}static getContourSequence(e,t){let{data:n}=e,i=[];for(let e of n.contour.polyline)for(let t of e)i.push(t.toFixed(2));let{referencedImageId:a}=e.metadata,o=t.get("ImageSopInstanceReference",a);return{NumberOfContourPoints:i.length/3,ContourImageSequence:o,ContourGeometricType:"CLOSED_PLANAR",ContourData:i}}renderAnnotation(e,t){let n=!1,{viewport:i}=e,{element:a}=i;if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r=this.getTargetId(i),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let i=0;i<o.length;i++){let a=o[i];l.annotationUID=a.annotationUID;let s=this.getAnnotationStyle({annotation:a,styleSpecifier:l});if(!s.visibility)continue;let d=this.renderAnnotationInstance({enabledElement:e,targetId:r,annotation:a,annotationStyle:s,svgDrawingHelper:t});n||=d,a.invalidated=!1}return n}createAnnotation(e){let t=super.createAnnotation(e);return Object.assign(t.data,{contour:{polyline:[],closed:!1}}),Object.assign(t,{interpolationUID:"",autoGenerated:!1}),t}addAnnotation(e,t){return th(e,t)}cancelAnnotation(e){}moveAnnotation(e,t){let{points:n}=e.data.handles;for(let e=0,i=n.length;e<i;e++){let i=n[e];i[0]+=t[0],i[1]+=t[1],i[2]+=t[2]}e.invalidated=!0,td(e).forEach(e=>this.moveAnnotation(e,t))}updateContourPolyline(e,t,n,i){let a=this.configuration?.decimate||{};rx(e,t,n,{decimate:{enabled:!!a.enabled,epsilon:a.epsilon},updateWindingDirection:i?.updateWindingDirection})}getPolylinePoints(e){return e.data.contour?.polyline??e.data.polyline}renderAnnotationInstance(e){let{enabledElement:t,annotationStyle:n,svgDrawingHelper:i}=e,a=e.annotation;if(a.parentAnnotationUID)return;let{annotationUID:o}=a,{viewport:r}=t,{worldToCanvas:l}=r,s=this.getPolylinePoints(a).map(e=>l(e)),{lineWidth:d,lineDash:h,color:c,fillColor:u,fillOpacity:g}=n;return le(i,o,"contourPolyline",[s,...lo(a,r)],{color:c,lineDash:h,lineWidth:Math.max(.1,d),fillColor:u,fillOpacity:g}),!0}}let sc=function(e,t,n){let i=lz("textBoxFontSize",e,t,n),a=lz("textBoxFontFamily",e,t,n);return`${i}px ${a}`};class su{constructor(e){this.getGroupKey=e=>{if("string"==typeof e)return e;let t=(0,ej.Ay)(e);if(!t)throw Error("Element not enabled, you must have an enabled element if you are not providing a FrameOfReferenceUID");return t.FrameOfReferenceUID},this._imageVolumeModifiedHandler=e=>{let{FrameOfReferenceUID:t}=e.detail,n=this.annotations[t];n&&Object.keys(n).forEach(e=>{n[e].forEach(e=>{void 0!==e.invalidated&&(e.invalidated=!0)})})},this.getFramesOfReference=()=>Object.keys(this.annotations),this.getAnnotations=(e,t)=>{let n=this.annotations;return n[e]?t?n[e][t]?n[e][t]:[]:n[e]:[]},this.getAnnotation=e=>{let t=this.annotations;for(let n in t){let i=t[n];for(let t in i)for(let n of i[t])if(e===n.annotationUID)return n}},this.getNumberOfAnnotations=(e,t)=>{let n=this.getAnnotations(e,t);if(!n.length)return 0;if(t)return n.length;let i=0;for(let e in n)i+=n[e].length;return i},this.addAnnotation=(e,t)=>{let{metadata:n}=e,{FrameOfReferenceUID:i,toolName:a}=n;t=t||i;let o=this.annotations,r=o[t];r||(o[t]={},r=o[t]);let l=r[a];l||(r[a]=[],l=r[a]),this.preprocessingFn&&(e=this.preprocessingFn(e)),l.push(e)},this.removeAnnotation=e=>{let{annotations:t}=this;for(let n in t){let i=t[n];for(let t in i){let n=i[t],a=n.findIndex(t=>t.annotationUID===e);-1!==a&&(n.splice(a,1),0===n.length&&delete i[t])}0===Object.keys(i).length&&delete t[n]}},this.removeAnnotations=(e,t)=>{let n=this.annotations,i=[];if(!n[e])return i;if(t){let a=n[e][t];if(a)for(let e of a)this.removeAnnotation(e.annotationUID),i.push(e)}else for(let t in n[e])for(let a of n[e][t])this.removeAnnotation(a.annotationUID),i.push(a);return i},this.saveAnnotations=(e,t)=>{let n=this.annotations;if(e&&t){let i=n[e];if(!i)return;return structuredClone(i[t])}return e?structuredClone(n[e]):structuredClone(n)},this.restoreAnnotations=(e,t,n)=>{let i=this.annotations;if(t&&n){let a=i[t];a||(i[t]={},a=i[t]),a[n]=e}
2else t?i[t]=e:this.annotations=structuredClone(e)},this.getAllAnnotations=()=>Object.values(this.annotations).map(e=>Object.values(e)).flat(2),this.getNumberOfAllAnnotations=()=>{let e=0,t=this.annotations;for(let n in t){let i=t[n];for(let t in i)e+=i[t].length}return e},this.removeAllAnnotations=()=>{let e=[];for(let t of this.getAllAnnotations())this.removeAnnotation(t.annotationUID),e.push(t);return e},e||(e=eX.A()),this.annotations={},this.uid=e,ez.A.addEventListener(e$.A.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedHandler)}setPreprocessingFn(e){this.preprocessingFn=e}}let sg=new su("DEFAULT"),sm=su;class sp{constructor(){this.annotationUIDs=new Set,this._isVisible=!0,this.visibleFilter=this.unboundVisibleFilter.bind(this)}unboundVisibleFilter(e){return!this._isVisible||!this.annotationUIDs.has(e)}has(e){return this.annotationUIDs.has(e)}setVisible(e=!0,t,n){this._isVisible!==e&&(this._isVisible=e,this.annotationUIDs.forEach(i=>{let a=ta(i);if(!a)return void this.annotationUIDs.delete(i);if(a.isVisible===e||!e&&n?.(i)===!1)return;a.isVisible=e;let o={...t,annotation:a};(0,eq.A)(ez.A,eK.ANNOTATION_MODIFIED,o)}))}get isVisible(){return this._isVisible}findNearby(e,t){let n=[...this.annotationUIDs];if(0===n.length)return null;if(!e)return n[1===t?0:n.length-1];let i=n.indexOf(e);return -1===i||i+t<0||i+t>=n.length?null:n[i+t]}add(...e){e.forEach(e=>this.annotationUIDs.add(e))}remove(...e){e.forEach(e=>this.annotationUIDs.delete(e))}clear(){this.annotationUIDs.clear()}}let sf=e=>(e.data||(e.data={}),e.data.handles||(e.data.handles={}),e.data.handles.textBox||(e.data.handles.textBox={}),e),sv=e=>(e.data||(e.data={}),e.data.cachedStats||(e.data.cachedStats={}),e);sg.setPreprocessingFn(e=>{let t=(e=sv(e=sf(e))).annotationUID,n=ik(t);e.isLocked=n;let i=si(t);return e.isVisible=i,e}),i=sg;let sI={...N,...L,resetAnnotationManager:function(){i=sg}},sC="PlanarFreehandContourSegmentationTool";function s_(e,t=[]){let{viewport:n,sliceData:i,annotation:a}=e,o=new Map,{toolName:r,originalToolName:l}=a.metadata,s=l||r,d=(ti(s,n.element)||[]).filter(e=>!e.metadata.originalToolName||e.metadata.originalToolName===s);if(s!==sC){let e=ti(sC,n.element);e?.length&&e.forEach(e=>{let{metadata:t}=e;t.originalToolName===s&&t.originalToolName!==t.toolName&&d.push(e)})}if(!d?.length)return o;for(let e=0;e<i.numberOfSlices;e++){let n=d.filter(t=>t.metadata.sliceIndex===e);if(!n?.length)continue;let i=n.filter(e=>t.every(t=>{let n=t.parentKey?t.parentKey(e):e,i=n?.[t.key];return Array.isArray(i)?i.every((e,n)=>e===t.value[n]):i===t.value}));i.length&&o.set(e,i)}return o}function sE(e,t,n){let i=ab.A({data:{},metadata:{}},n);return Object.assign(i,{highlighted:!1,invalidated:!0,autoGenerated:!0,annotationUID:void 0,cachedStats:{},childAnnotationUIDs:[],parentAnnotationUID:void 0}),Object.assign(i.data,{handles:{points:t.points||t||[],interpolationSources:t.sources,activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},contour:{...n.data.contour,polyline:e}}),i}let sw=function(e,t){let n=s_(t,[{key:"interpolationUID",value:t.interpolationUID}]),i=function(e){let t=1/0,n=-1/0,i=!1;for(let[a,o]of e.entries())o.length&&(t=Math.min(a,t),n=Math.max(a,n),i=!0);if(i)return[t,n]}(n);if(!i)return void console.warn("No annotations found to interpolate",n);let a=function(e,t){for(let[n,i]of e)for(let e=0;e<i.length;e++)if(i[e].annotationUID===t)return n}(n,e.annotationUID),o=[];for(let e=i[0]+1;e<i[1];e++)if(function(e,t){let n=e.get(t);return!n?.length||1===n.length&&n[0].autoGenerated}(n,e)){let t=function(e,t,n){let i=[],a=!0;for(let o=e-1;o>=t[0];o--){let e=n.get(o);if(e?.length){if(e[0].autoGenerated)continue;e.length>1&&(a=!1),i.push(o);break}}if(a&&i.length){for(let o=e+1;o<=t[1];o++){let e=n.get(o);if(e?.length){if(e[0].autoGenerated)continue;e.length>1&&(a=!1),i.push(o);break}}if(a&&!(i.length<2))return i}}(e,i,n);(t?.[0]===a||t?.[1]===a)&&function(e,t,n){let[i]=e;t[i]||={pair:e,list:[]},t[i].list.push(n)}(t,o,e)}return{interpolationData:n,interpolationList:o}},{PointsManager:sA}=i9;function sS(e,t,n,i,a){n<t&&(n+=a);let o=n-t,r=Math.ceil(o/i);if(r<=0)return e[e.length-1]!==n&&e.push(sy(n,a)),n;for(let n=1;n<=r;
2n++){let i=sy(t+n*o/r,a);e.push(i)}return e[e.length-1]}function sy(e,t){return(Math.round(e)+t)%t}function sb(e,t){return e.minX<=t.maxX&&e.maxX>=t.minX&&e.minY<=t.maxY&&e.maxY>=t.minY}function sT(e){if(!e.data.segmentation)throw Error("removeContourSegmentationAnnotation: annotation does not have a segmentation data");let{segmentationId:t,segmentIndex:n}=e.data.segmentation,i=n9(t),{annotationUIDsMap:a}=i?.representationData.Contour||{},o=a?.get(n);o&&(o.delete(e.annotationUID),o.size||a.delete(n))}let sM="PlanarFreehandContourSegmentationTool";function sD(e,t){let n=e.length,i=Array(n);for(let a=0;a<n;a++)i[a]=t.worldToCanvas(e[a]);return i}function sO(e,t){let n=e.length,i=Array(n);for(let a=0;a<n;a++)i[a]=t.canvasToWorld(e[a]);return i}function sx(e,t){if(!sb(aG(e),aG(t)))return{hasIntersection:!1,isContourHole:!1};let n=a6(e,t),i=!n&&az(t,e);return{hasIntersection:n||i,isContourHole:i}}function sP(e,t){return td(t).map(t=>{let n=sD(t.data.contour.polyline,e);return{annotation:t,polyline:n}})}function sL(e,t,n){tl(t,n),sT(n);let{contour:i}=n.data;rx(n,{points:sD(i.polyline,e),closed:i.closed,targetWindingDirection:t.data.contour.windingDirection===_.Clockwise?_.CounterClockwise:_.Clockwise},e);let{element:a}=e;sk(e,[t,n])}function sN(e,t,n,i,a){if(!aS(sM))return void console.warn(`${sM} is not registered in cornerstone. Cannot combine polylines.`);let o=a$(n,a[0]),r=new Set(sP(e,t)),l=new Map,s=(e,t)=>{let n=l.get(e);n||(n=[],l.set(e,n)),n.push(t),r.delete(t)},d=[];if(o){let e=oi(n,a);d.push(e),Array.from(r.keys()).forEach(t=>s(e,t))}else a2(n,a).forEach(e=>{d.push(e),Array.from(r.keys()).forEach(t=>{az(e,t.polyline)&&s(e,t)})});Array.from(l.values()).forEach(e=>e.forEach(e=>tr(e.annotation)));let{element:h}=e,{metadata:c,data:u}=t,{handles:g,segmentation:m}=u,{textBox:p}=g;tu(i.annotationUID),tu(t.annotationUID),sT(i),sT(t);let f=[];for(let n=0;n<d.length;n++){let i=d[n];if(!i||i.length<3){console.warn("Skipping creation of new annotation due to invalid polyline:",i);continue}let a=sR(e,t,i);th(a,h),iG(a),e9(a,e.element),f.push(a),l.get(i)?.forEach(e=>tl(a,e.annotation))}sk(e,[t,i])}function sR(e,t,n){let i=e.canvasToWorld(n[0]),a=e.canvasToWorld(n[n.length-1]),o={metadata:{...t.metadata,toolName:sM,originalToolName:t.metadata.originalToolName||t.metadata.toolName},data:{cachedStats:{},handles:{points:[i,a],textBox:t.data.handles.textBox?{...t.data.handles.textBox}:void 0},contour:{polyline:[],closed:!0},spline:t.data.spline,segmentation:{...t.data.segmentation}},annotationUID:eX.A(),highlighted:!0,invalidated:!0,isLocked:!1,isVisible:void 0,interpolationUID:t.interpolationUID,interpolationCompleted:t.interpolationCompleted};return rx(o,{points:n,closed:!0,targetWindingDirection:_.Clockwise},e),o}function sk(e,t){let{element:n}=e,i=new Set([sM]);for(let e of(t.forEach(e=>{i.add(e.metadata.toolName)}),i.values()))aS(e)&&oX(ox(n,e))}function sU(e){if(!e||e.length<2)return e;let t=[e[0]];for(let n=1;n<e.length;n++){let i=e[n],a=t[t.length-1],o=Math.abs(i[0]-a[0]),r=Math.abs(i[1]-a[1]);(o>1e-10||r>1e-10)&&t.push(i)}return t}function sV(e){let t=[],n=new Set;for(let i of e){if(!i||i.length<3||(i=sU(i)).length<3)continue;let e=[...i].sort((e,t)=>e[0]!==t[0]?e[0]-t[0]:e[1]-t[1]).map(e=>`${e[0].toFixed(6)},${e[1].toFixed(6)}`).join("|");n.has(e)||(n.add(e),t.push(i))}return t}let{PointsManager:sF}=i9;function sG(e,t,n){let{viewport:i}=n,a=sI.getAnnotations(e.metadata.toolName,i.element);for(let n=0;n<a.length;n++){let i=a[n];if(i.interpolationUID===e.interpolationUID&&i.metadata.sliceIndex===t)return i}}function sB(e,t){t-=e.length*Math.floor(t/e.length);let n=e.splice(0,t);return e.push(...n),e}function sH(e,t){let n={x:[],y:[],z:[],I:[]};for(let i=0;i<e.x.length-1;i++){n.x.push(e.x[i]),n.y.push(e.y[i]),n.z.push(e.z[i]),n.I.push(!0);let a=(e.x[i+1]-e.x[i])/(t[i]+1),o=(e.y[i+1]-e.y[i])/(t[i]+1),r=(e.z[i+1]-e.z[i])/(t[i]+1);for(let e=0;e<t[i]-1;e++)n.x.push(n.x[n.x.length-1]+a),n.y.push(n.y[n.y.length-1]+o),n.z.push(n.z[n.z.length-1]+r),n.I.push(!1)}return n}function sW(e,t){let n=[];for(let t=0;t<e.length;++t)n[t]=t;n.sort(function(t,n){return e[t]<e[n]?-1:1});let i=[];for(let e=0;e<t.length;e++)i.push(t[n[e]]);let a=i.reduce(function(e,t,n){return t&&e.push(n),e},[]),o=[];for(let e=0;e<a.length-1;e++)o.push(a[e+1]-a[e]);return o}function s$(e,t){let n=Array(e+t);return n.fill(!1,0,e),n.fill(!0,e,e+t),n}function sz(e,t){let n=1/(e-1),i=[n];for(let t=1;t<e-2;t++)i.push(i[i.length-1]+n);return i.concat(t)}function sX(e){let t=[];for(let n=0;n<e.length;n++)t.push(e[n]/e[e.length-1]);return t}function sj(e){let t=[0];for(let n=1;n<e.x.length;n++){let i=Math.sqrt((e.x[n]-e.x[n-1])**2+(e.y[n]-e.y[n-1])**2+(e.z[n]-e.z[n-1])**2);t.push(t[n-1]+i)}return t}function sq(e){let t={x:[],y:[],z:[]};for(let n=0;n<e.length;n++)t.x[n]=e[n][0],t.y[n]=e[n][1],t.z[n]=e[n][2];return t.x.push(t.x[0]),t.y.push(t.y[0]),t.z.push(t.z[0]),t}let sK=function(e){if(!e.annotation)return;let{isInterpolationUpdate:t,annotation:n}=e;queueMicrotask(()=>{try{t&&(n.isInterpolationUpdate=!0,n.autoGenerated=!1),function(e){let{annotation:t}=e;!function(e){let{parentAnnotationUID:t,annotationUID:n}=e;if(!t)return e.interpolationUID;let i=sI.getAnnotation(t),{interpolationUID:a}=i,o=i.childAnnotationUIDs.indexOf(n);e.interpolationUID=`${a}-${o}`,e.interpolationUID}(t);let{interpolationData:n,interpolationList:i}=sw(t,e)||{};if(!n||!i)return;let a={toolName:t.metadata.toolName,toolType:t.metadata.toolName,viewport:e.viewport};for(let e=0;e<i.length;e++)i[e]&&function(e,t,n,i){let a=n.get(t[0])[0],o=n.get(t[1])[0],r=sq(a.data.contour.polyline),l=sq(o.data.contour.polyline);console.warn("annotation0=",a);let{c1Interp:s,c2Interp:d}=function(e,t){let n=sj(e),i=sj(t),a=Math.max(Math.ceil(n[n.length-1]/.2),Math.ceil(i[i.length-1]/.2)),o=sX(n),r=sX(i),l=a+t.x.length,s=a+e.x.length,d=sz(l,o),h=sz(s,r),c=s$(l-2,e.x.length),u=s$(s-2,t.x.length),g=sW(d,c),m=sW(h,u),p=sH(e,g),f=sH(t,m);return function(e,t){let n=e.x.length,i={startingNode:0,totalSquaredXYLengths:1/0};for(let a=0;a<n;a++){let o=a,r=0;for(let i=0;i<n;i++)r+=(e.x[o]-t.x[i])**2+(e.y[o]-t.y[i])**2+(e.z[o]-t.z[i])**2,++o===n&&(o=0);r<i.totalSquaredXYLengths&&(i.totalSquaredXYLengths=r,i.startingNode=a)}let a=i.startingNode;sB(e.x,a),sB(e.y,a),sB(e.z,a),sB(e.I,a)}(p,f),function(e,t){let n={x:[],y:[],z:[],I:[]},i={x:[],y:[],z:[],I:[]};for(let a=0;a<e.x.length;
2a++)(e.I[a]||t.I[a])&&(n.x.push(e.x[a]),n.y.push(e.y[a]),n.z.push(e.z[a]),n.I.push(e.I[a]),i.x.push(t.x[a]),i.y.push(t.y[a]),i.z.push(t.z[a]),i.I.push(t.I[a]));return{c1Interp:n,c2Interp:i}}(p,f)}(r,l);s.kIndex=t[0],d.kIndex=t[1],e.forEach(function(e){!function(e,t,n,i,a,o,r){let[l,s]=i,d=(n-l)/(s-l),h=a.get(l)[0],c=a.get(s)[0],u=function(e,t,n,i){let a=i?e.I:t.I,o=sF.fromXYZ(e),r=sF.fromXYZ(t),{length:l}=o,s=sF.create3(l),d=iT.vt(),h=iT.vt(),c=sF.create3(l);c.kIndex=e.kIndex;let u=sF.create3(l);u.kIndex=t.kIndex;for(let t=0;t<e.x.length;t++)if(a[t]){let e=o.getPoint(t),i=r.getPoint(t);c.push(e),u.push(i),iT.jb(d,i,e),s.push(iT.Ln(h,e,d,n))}return s.sources=[c,u],s}(e,t,d,o),g=d>.5?c:h,m=function(e,t={}){let{handleCount:n=12,isOpenUShapeContour:i}=t,a=sA.create3(n);a.sources=[];let{sources:o}=a,{length:r,sources:l=[]}=e;if(i){let t=e.subselect(n);return t.push(e.getPoint(e.length-1)),t}if(r<15)return e.subselect(n);let s=Math.floor(Math.max(2*r/n,10));l.forEach(()=>o.push(sA.create3(n)));let d=function(e,t){let n,{max:i,deviation:a}=function(e){let{length:t}=e,n=0,i=1/0,a=-1/0,o=0;for(let o=0;o<t;o++){let t=e[o];n+=t,i=Math.min(i,t),a=Math.max(a,t)}let r=n/t;for(let n=0;n<t;n++){let t=e[n]-r;o+=t*t}return{mean:r,max:a,min:i,sumSq:o,deviation:Math.sqrt(o/t)}}(e),{length:o}=e;if(a<.01||o<3*t)return[];let r=[],l=null,s=0;for(let t=0;t<o;t++){let o=e[t];o<i-a?l?(l[2]=t,o<n&&(n=o,s=t),l[1]=s):(n=o,s=t,l=[t,t,t]):l&&(r.push(l),l=null)}return l&&(0===r[0][0]?r[0][0]=l[0]:(l[1]=s,l[2]=o-1,r.push(l))),r}(function(e,t=6){let{length:n}=e,i=iT.vt(),a=iT.vt(),o=new Float32Array(n);for(let r=0;r<n;r++){let l=e.getPoint(r),s=e.getPoint(r-t),d=e.getPoint((r+t)%n);iT.jb(i,l,s),iT.jb(a,d,l);let h=iT.Om(i,a)/(iT.Il(i)*iT.Il(a));o[r]=h}return o}(e,5),n),h=[];if(d?.length>2){let e=-1,t=s/3;d.forEach(n=>{let[i,,a]=n,o=Math.ceil((i+a)/2);!(a-e<t)&&(o-i>2*t?(sS(h,e,i,s,r),e=sS(h,i,o,s,r)):e=sS(h,e,o,s,r),a-e>t&&(e=sS(h,e,a,s,r)))});let n=h[0];sy(n+r-e,r)>2*t&&sS(h,e,n-t,s,r)}else{let e=Math.floor(r/n);sS(h,-1,r-e,e,r)}return h.forEach(t=>{let n=e.getPointArray(t);a.push(n),l.forEach((e,n)=>o[n].push(e.getPoint(t)))}),a}(u,{isOpenUShapeContour:g.data.isOpenUShapeContour});a.has(n)?function(e,t,n,i,a){let o=sG(i,n,a),r=sE(e.points,t,o);Object.assign(o,{metadata:r.metadata,data:r.data})}(u,m,n,g,r):function(e,t,n,i,a){let o=e.points,{viewport:r}=a,l=sE(o,t,i),s=r.getViewReference({sliceIndex:n});if(!s)throw Error(`Can't find slice ${n}`);Object.assign(l.metadata,s),sI.addAnnotation(l,r.element),i.onInterpolationComplete?.(l,i);let{parentAnnotationUID:d}=i;d&&sL(r,sG(sI.getAnnotation(d),n,a),l)}(u,m,n,g,r)}(s,d,e,t,n,r.x.length>l.x.length,i)})}(i[e].list,i[e].pair,n,a);let{id:o,renderingEngineId:r,element:l}=e.viewport,s={annotation:t,element:l,viewportId:o,renderingEngineId:r};i.length&&((0,eq.A)(e.viewport.element,eK.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED,s),(0,eq.A)(ez.A,eK.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED,s))}(e)}finally{t&&(n.autoGenerated=!0)}})};function sY(e){let{annotation:t}=e,n=s_(e,[{key:"interpolationUID",value:e.interpolationUID}]),i=t.metadata.sliceIndex,a=-1,o=e.sliceData.numberOfSlices;for(let[e,t]of n.entries())e!==i&&t.find(e=>!e.autoGenerated)&&(e<i?a=Math.max(e,a):o=Math.min(e,o));let r=[];for(let[e,t]of n.entries())e<=a||e>=o||e===i||t.forEach(e=>{e.autoGenerated&&(sI.removeAnnotation(e.annotationUID),r.push(e))});if(r.length){let t={annotations:r,element:e.viewport.element,viewportId:e.viewport.id,renderingEngineId:e.viewport.getRenderingEngine().id};(0,eq.A)(e.viewport.element,eK.INTERPOLATED_ANNOTATIONS_REMOVED,t)}if(a>=0&&o<e.sliceData.numberOfSlices){let t=n.get(o)[0];sK({viewport:e.viewport,sliceData:{numberOfSlices:e.sliceData.numberOfSlices,imageIndex:t.metadata.sliceIndex},annotation:t,interpolationUID:t.interpolationUID})}}let{isEqual:sZ}=i9;function sJ(e){let{metadata:t}=e;return(0,ej.zb)().filter(e=>{if(e.FrameOfReferenceUID===t.FrameOfReferenceUID){let{viewPlaneNormal:n,viewUp:i}=e.viewport.getCamera();return sZ(n,t.viewPlaneNormal)&&(!t.viewUp||sZ(i,t.viewUp))}}).map(e=>e.viewport)}function sQ(e){let t=sJ(e);if(t?.length)return t.find(t=>t.getImageIds().some(t=>t===e.metadata.referencedImageId))??t[0]}let{uuidv4:s0}=i9,s1=[eY.HandlesUpdated,eY.InterpolationUpdated];class s2{static{this.toolNames=[]}static addTool(e){this.toolNames.includes(e)||this.toolNames.push(e)}static removeTool(e){this.toolNames.includes(e)&&(this.toolNames=this.toolNames.filter(t=>t!==e))}static acceptAutoGenerated(e,t={}){let{toolNames:n,segmentationId:i,segmentIndex:a,sliceIndex:o}=t;for(let t of n||s2.toolNames){let n=sI.getAnnotations(t,e);if(n?.length)for(let e of n){let{interpolationUID:t,data:n,autoGenerated:r,metadata:l}=e;t&&(e.interpolationCompleted=!0),r&&(!a||a===n.segmentation.segmentIndex)&&(void 0===o||!l||o===l.sliceIndex)&&(i&&i!==n.segmentation.segmentationId||(iG(e),e.autoGenerated=!1))}}}static{this.handleAnnotationCompleted=e=>{let t=e.detail.annotation;if(!t?.metadata)return;let{toolName:n,originalToolName:i}=t.metadata;if(!this.toolNames.includes(n)&&!this.toolNames.includes(i))return;let a=sQ(t);if(!a)return void console.warn("Unable to find viewport for",t);
2let o=s5(a),r={viewport:a,sliceData:o,annotation:t,interpolationUID:t.interpolationUID},l=!!t.interpolationUID;if(t.autoGenerated=!1,l){sY(r),sK(r);return}let s=function(e,t){let n=s_(e,t),i=[];if(!n?.size)return i;for(let e of n.values())e.forEach(e=>{i.push(e)});return i}(r,[{key:"segmentIndex",value:t.data.segmentation.segmentIndex,parentKey:e=>e.data.segmentation},{key:"viewPlaneNormal",value:t.metadata.viewPlaneNormal,parentKey:e=>e.metadata},{key:"viewUp",value:t.metadata.viewUp,parentKey:e=>e.metadata}]),{sliceIndex:d}=t.metadata,h=new Set;s.forEach(e=>{if(e.interpolationCompleted||e.metadata.sliceIndex===d){let{interpolationUID:t}=e;h.add(t)}}),s=s.filter(e=>!h.has(e.interpolationUID)),t.interpolationUID=s[0]?.interpolationUID||s0(),r.interpolationUID=t.interpolationUID,sK(r)}}static{this.handleAnnotationUpdate=e=>{let t=e.detail.annotation,{changeType:n=eY.HandlesUpdated}=e.detail;if(!t?.metadata)return;let{toolName:i,originalToolName:a}=t.metadata;if(!this.toolNames.includes(i)&&!this.toolNames.includes(a)||!s1.includes(n))return;let o=sQ(t);if(!o)return void console.warn("Unable to find matching viewport for annotation interpolation",t);t.autoGenerated&&(iG(t),t.autoGenerated=!1);let r=s5(o);sK({viewport:o,sliceData:r,annotation:t,interpolationUID:t.interpolationUID,isInterpolationUpdate:n===eY.InterpolationUpdated})}}static{this.handleAnnotationDelete=e=>{let t=e.detail.annotation;if(!t?.metadata)return;let{toolName:n}=t.metadata;if(!this.toolNames.includes(n)||t.autoGenerated)return;let i=sQ(t);if(!i)return void console.warn("No viewport, can't delete interpolated results",t);let a=s5(i),o={viewport:i,sliceData:a,annotation:t,interpolationUID:t.interpolationUID};t.autoGenerated=!1,sY(o)}}}function s5(e){return{numberOfSlices:e.getNumberOfSlices(),imageIndex:e.getCurrentImageIdIndex()}}let s3=function(e){return e0.toolGroups.find(t=>t.id===e)};function s4(e){e.forEach(e=>{let t=s3(e);if(!t)return void console.warn(`ToolGroup not available for ${e}`);t.getViewportsInfo().forEach(e=>{let{renderingEngineId:t,viewportId:n}=e,i=(0,nG.lD)(t);if(!i)return void console.warn(`RenderingEngine not available for ${t}`);o$(i.getViewport(n).element)})})}let s8=s4;function s9(e){return Object.entries(n8.getState().viewportSegRepresentations).filter(([,t])=>t.some(t=>t.segmentationId===e)).map(([e])=>e)}function s7(e){let t=n9(e);if(!t)return;let n=t.representationData?.Contour;if(!n)return;let{annotationUIDsMap:i}=n;if(i)return i}function s6(e,t){let n=n9(e);if(!n)throw Error(`No segmentation state found for ${e}`);let{segments:i}=n;return i[t].locked}function de(e,t,n=!0){let i=n9(e);if(!i)throw Error(`No segmentation state found for ${e}`);let{segments:a}=i;a[t].locked=n,i?.representationData?.Contour&&function(e,t,n){let i=s7(e.segmentationId);if(!i)return;let a=i.get(t);a&&a.forEach(e=>{ix(e,n)})}(i,t,n),nX(e)}function dt(e){let t=n9(e);if(!t)throw Error(`No segmentation state found for ${e}`);let{segments:n}=t;return Object.keys(n).filter(e=>n[e].locked).map(e=>parseInt(e))}function dn(){return n8.getNextColorLUTIndex()}let di=[[0,0,0,0],[221,84,84,255],[77,228,121,255],[166,70,235,255],[189,180,116,255],[109,182,196,255],[204,101,157,255],[123,211,94,255],[93,87,218,255],[225,128,80,255],[73,232,172,255],[181,119,186,255],[176,193,112,255],[105,153,200,255],[208,97,120,255],[90,215,101,255],[135,83,222,255],[229,178,76,255],[122,183,181,255],[190,115,171,255],[149,197,108,255],[100,118,205,255],[212,108,93,255],[86,219,141,255],[183,79,226,255],[233,233,72,255],[118,167,187,255],[194,111,146,255],[116,201,104,255],[115,96,209,255],[216,147,89,255],[82,223,188,255],[230,75,224,255],[163,184,121,255],[114,143,191,255],[198,107,114,255],[99,206,122,255],[153,92,213,255],[220,192,85,255],[78,215,227,255],[234,71,173,255],[141,188,117,255],[110,113,195,255],[202,128,103,255],[95,210,157,255],[195,88,217,255],[206,224,81,255],[74,166,231,255],[185,120,139,255],[113,192,113,255],[133,106,199,255],[207,162,98,255],[91,214,198,255],[221,84,198,255],[159,228,77,255],[70,111,235,255],[189,119,116,255],[109,196,138,255],[165,101,204,255],[211,201,94,255],[87,191,218,255],[225,80,153,255],[106,232,73,255],[124,119,186,255],[193,142,112,255],[105,200,168,255],[203,97,208,255],[184,215,90,255],[83,147,222,255],[229,76,101,255],[122,183,130,255],[146,115,190,255],[197,171,108,255],[100,205,205,255],[212,93,177,255],[141,219,86,255],[79,97,226,255],[233,99,72,255],[118,187,150,255],[173,111,194,255],[197,201,104,255],[96,171,209,255],[216,89,137,255],[94,223,82,255],[107,75,230,255],[184,153,121,255],[114,191,175,255],[198,107,191,255],[166,206,99,255],[92,132,213,255],[220,85,91,255],[78,227,115,255],[159,71,234,255],[188,176,117,255],[110,185,195,255],[202,103,161,255],[129,210,95,255],[88,88,217,255],[224,123,81,255],[74,231,166,255],[177,120,185,255],[179,192,113,255],[106,156,199,255],[207,98,125,255],[91,214,96,255],[130,84,221,255],[228,171,77,255],[70,235,221,255],[189,116,174,255],[153,196,109,255],[101,123,204,255],[211,104,94,255],[87,218,136,255],[177,80,225,255],[232,225,73,255],[119,169,186,255],[193,112,149,255],[121,200,105,255],[111,97,208,255],[215,142,90,255],[83,222,181,255],[229,76,229,255],[165,183,122,255],[115,146,190,255],[197,108,119,255],[100,205,118,255],[148,93,212,255],[219,186,86,255],[79,220,226,255],[233,72,179,255],[144,187,118,255],[111,118,194,255],[201,124,104,255],[96,209,153,255],[189,89,216,255],[211,223,82,255],[75,172,230,255],[184,121,142,255],[117,191,114,255],[130,107,198,255],[206,157,99,255],[92,213,193,255],[220,85,203,255],[165,227,78,255],[71,118,234,255],[188,117,117,255],[110,195,135,255],[161,103,202,255],[210,195,95,255],[88,195,217,255],[224,81,158,255],[113,231,74,255],[123,120,185,255],[192,139,113,255],[106,199,164,255],[198,98,207,255],[188,214,91,255],[84,153,221,255],[228,77,108,255],[70,235,84,255],[143,116,189,255],[196,167,109,255],[101,204,199,255],[211,94,182,255],[147,218,87,255],[80,104,225,255],[232,93,73,255],[119,186,147,255],[170,112,193,255],[200,200,105,255],[97,175,208,255],[215,90,142,255],[100,222,83,255],[101,76,229,255],[183,150,122,255],[115,190,171,255],[197,108,194,255],[170,205,100,255],[93,138,212,255],[219,86,97,255],[79,226,110,255],[153,72,233,255],[187,173,118,255],[111,187,194,255],[201,104,165,255],[134,209,96,255],[89,95,216,255],[223,117,82,255],[75,230,159,255],[174,121,184,255],[182,191,114,255],[107,160,198,255],[206,99,130,255],[92,213,92,255],[124,85,220,255],[227,165,78,255],[71,234,214,255],[188,117,176,255],[156,195,110,255],[103,128,202,255],[210,100,95,255],[88,217,131,255],[170,81,224,255],[231,218,74,255],[120,172,185,255],[192,113,153,255],[125,199,106,255],[107,98,207,255],[214,137,91,255],[84,221,175,255],[222,77,228,255],[194,235,70,255],[116,149,189,255],[196,109,123,255],[101,204,114,255],[143,94,211,255],[218,180,87,255],[80,225,225,255],[232,73,186,255],[147,186,119,255],[112,122,193,255],[200,121,105,255],[97,208,148,255],[184,90,215,255],[216,222,83,255],[76,178,229,255],[183,122,145,255],[121,190,115,255],[126,108,197,255],[205,153,100,255],[93,212,187,255],[219,86,208,255],[171,226,79,255],[72,126,233,255],[187,118,121,255],[111,194,132,255],[157,104,201,255],[209,190,96,255],[89,200,216,255],[223,82,164,255],[120,230,75,255],[121,121,184,255],[191,136,114,255],[107,198,160,255],[192,99,206,255],[193,213,92,255],[85,158,220,255],[227,78,115,255],[71,234,78,255],[141,117,188,255],[195,163,110,255],[103,202,194,255],[210,95,186,255],[153,217,88,255],[81,111,224,255]];function da(e,t){let n=t??dn(),i=[...e];if(aM.n4(i[0],[0,0,0,0])||(console.warn("addColorLUT: [0, 0, 0, 0] color is not provided for the background color (segmentIndex =0), automatically adding it"),i=[[0,0,0,0],...i]),(i=i.map(e=>3===e.length?[e[0],e[1],e[2],255]:e)).length<255){let e=di.slice(i.length);i=[...i,...e]}return n8.addColorLUT(i,n),n}function dr(e,t){if(!e)throw Error("addColorLUT: colorLUT is required");return da(e,t)}function dl(e,t,n){if(!iu(n))throw Error(`setColorLUT: could not find colorLUT with index ${n}`);let i=n7(e,{segmentationId:t});if(!i)throw Error(`viewport specific state for viewport ${e} does not exist`);
2i.forEach(e=>{e.colorLUTIndex=n}),nq(e,t)}function ds(e,t,n){let i=n7(e,{segmentationId:t});if(!i||0===i.length)return null;let{colorLUTIndex:a}=i[0],o=iu(a),r=o[n];if(!r){if("number"!=typeof n)return console.warn(`Can't create colour for LUT index ${n}`),null;r=o[n]=[0,0,0,0]}return r}function dd(e,t,n,i){let a=ds(e,t,n);for(let e=0;e<i.length;e++)a[e]=i[e];nq(e,t)}function dh(e,t){return n8.getSegmentationRepresentationVisibility(e,t)}function dc({segmentationId:e,segmentIndex:t,viewportId:n,autoGenerated:i=!1}){let a,o=ds(n,e,t),r=dh(n,{segmentationId:e,type:nB.Contour}),l=ag(n),s=l?.segmentationId===e,d=n0.getRenderInactiveSegmentations(n),h=n0.getStyle({viewportId:n,segmentationId:e,type:nB.Contour,segmentIndex:t}),c=1,u=1,g=0,m=h.renderFill??!0,p=h.renderOutline??!0;i?(c=h.outlineWidthAutoGenerated??c,a=h.outlineDashAutoGenerated??a,u=h.outlineOpacity??u,g=h.fillAlphaAutoGenerated??g):s?(c=h.outlineWidth??c,a=h.outlineDash??a,u=h.outlineOpacity??u,g=h.fillAlpha??g):(c=h.outlineWidthInactive??c,a=h.outlineDashInactive??a,u=h.outlineOpacityInactive??u,g=h.fillAlphaInactive??g,m=h.renderFillInactive??m,p=h.renderOutlineInactive??p),af(e)===t&&(c+=h.activeSegmentOutlineWidthDelta),c=p?c:0,g=m?g:0;let f=`rgba(${o[0]}, ${o[1]}, ${o[2]}, ${u})`,v=`rgb(${o[0]}, ${o[1]}, ${o[2]})`,I=!iC(n,{segmentationId:e,type:nB.Contour}).has(t);return{color:f,fillColor:v,lineWidth:c,fillOpacity:g,lineDash:a,textbox:{color:f},visibility:s?r&&I:d}}class du extends sh{static{this.PreviewSegmentIndex=255}constructor(e,t){super(e,t),this.configuration.interpolation?.enabled&&s2.addTool(this.getToolName())}onSetToolConfiguration(){this.configuration.interpolation?.enabled?s2.addTool(this.getToolName()):s2.removeTool(this.getToolName())}isContourSegmentationTool(){return!0}createAnnotation(e){let{element:t}=e.detail,n=(0,ej.Ay)(t);if(!n)return;let{viewport:i}=n,a=super.createAnnotation(e);if(!this.isContourSegmentationTool())return a;let o=ag(i.id);if(!o)throw Error("No active segmentation detected, create one before using scissors tool");if(!o.representationData.Contour)throw Error("A contour segmentation must be active");let{segmentationId:r}=o,l=af(r);return ab.A(a,{data:{segmentation:{segmentationId:r,segmentIndex:l}}})}addAnnotation(e,t){let n=super.addAnnotation(e,t);return this.isContourSegmentationTool()&&iG(e),n}cancelAnnotation(e){this.isContourSegmentationTool()&&sT(e),super.cancelAnnotation(e)}getAnnotationStyle(e){let t=super.getAnnotationStyle(e);if(!this.isContourSegmentationTool())return t;let n=this._getContourSegmentationStyle(e);return ab.A(t,n)}renderAnnotationInstance(e){let{annotation:t}=e,{invalidated:n}=t,i=super.renderAnnotationInstance(e);if(n&&this.isContourSegmentationTool()){let{segmentationId:e}=t.data.segmentation;aa(e),s4(s9(e).map(e=>{let t=oy(e);return t?.id}).filter(e=>null!=e))}return i}filterInteractableAnnotationsForElement(e,t){if(!t||!t.length)return;let n=super.filterInteractableAnnotationsForElement(e,t);if(!n||!n.length)return;let{viewport:i}=(0,ej.Ay)(e);return n.filter(e=>{let t=e?.data?.segmentation?.segmentationId;return!t||!!n8.getSegmentationRepresentation(i.id,{segmentationId:t,type:nB.Contour})})}_getContourSegmentationStyle(e){let t=e.annotation,{segmentationId:n,segmentIndex:i}=t.data.segmentation,{viewportId:a}=e.styleSpecifier,o=n7(a,{segmentationId:n});if(!o?.length)return{};o.length>1?o.find(e=>e.segmentationId===n&&e.type===nB.Contour):o[0];let{autoGenerated:r}=t,l=dt(n).includes(i),{color:s,fillColor:d,lineWidth:h,fillOpacity:c,lineDash:u,visibility:g}=dc({segmentationId:n,segmentIndex:i,viewportId:a,autoGenerated:r});return{color:s,fillColor:d,lineWidth:h,fillOpacity:c,lineDash:u,textbox:{color:s},visibility:g,locked:l}}}function dg(e,t){return dm(ib.get("generalSeriesModule",e).modality,e,t)}function dm(e,t,n){return"CT"===e?"HU":"PT"===e?function(e,t){if(!t.isPreScaled)return"raw";if(t.isSuvScaled)return"SUV";let n=ib.get("generalSeriesModule",e);if(n?.modality==="PT"){let t=ib.get("petSeriesModule",e);return t?.units||"unitless"}return"unknown"}(t,n):""}!function(e){e.Linear="Linear",e.Area="Area",e.Volume="Volume",e.Pixel="Pixel"}(w||(w={}));let{pointCanProjectOnLine:dp}=V,{EPSILON:df}=i$,dv=1-df;class dI extends du{static{this.toolName="PlanarFreehandROI"}constructor(e={}
2,t={supportedInteractionTypes:["Mouse","Touch"],configuration:{storePointData:!1,shadow:!0,preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:C.Shift,alwaysRenderOpenContourHandles:{enabled:!1,radius:2},allowOpenContours:!0,closeContourProximity:10,checkCanvasEditFallbackProximity:6,makeClockWise:!0,subPixelResolution:4,smoothing:{smoothOnAdd:!1,smoothOnEdit:!1,knotsRatioPercentageOnAdd:40,knotsRatioPercentageOnEdit:40},interpolation:{enabled:!1,onInterpolationComplete:null},decimate:{enabled:!1,epsilon:.1},displayOnePointAsCrosshairs:!1,calculateStats:!0,getTextLines:dC,statsCalculator:lP}}){super(e,t),this.isDrawing=!1,this.isEditingClosed=!1,this.isEditingOpen=!1,this.addNewAnnotation=e=>{let{element:t}=e.detail,n=this.createAnnotation(e);this.addAnnotation(n,t);let i=ox(t,this.getToolName());return this.activateDraw(e,n,i),e.preventDefault(),oX(i),n},this.handleSelectedCallback=(e,t,n)=>{let{element:i}=e.detail,a=ox(i,this.getToolName());this.activateOpenContourEndEdit(e,t,a,n)},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail,i=ox(n,this.getToolName());t.data.contour.closed?this.activateClosedContourEdit(e,t,i):this.activateOpenContourEdit(e,t,i),e.preventDefault()},this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{polyline:o}=t.data.contour,r=a.worldToCanvas(o[0]);for(let e=1;e<o.length;e++){let t=r,l=a.worldToCanvas(o[e]);if(dp(n,t,l,i))return!0;r=l}return!!t.data.contour.closed&&dp(n,a.worldToCanvas(o[0]),a.worldToCanvas(o[o.length-1]),i)},this.cancel=e=>{let t=this.isDrawing,n=this.isEditingOpen,i=this.isEditingClosed;t?this.cancelDrawing(e):n?this.cancelOpenContourEdit(e):i&&this.cancelClosedContourEdit(e)},this._calculateCachedStats=(e,t,n,i)=>{let{data:a}=e,{cachedStats:o}=a,{polyline:r,closed:l}=a.contour,s=Object.keys(o);for(let n=0;n<s.length;n++){let i=s[n],d=this.getTargetImageData(i);if(!d)continue;let{imageData:h,metadata:c}=d,u=r.map(e=>t.worldToCanvas(e)),g={isPreScaled:ly(t,i),isSuvScaled:this.isSuvScaled(t,i,e.metadata.referencedImageId)},m=dm(c.Modality,e.metadata.referencedImageId,g),p=a.contour.polyline,f=p.length,v=Array(f);for(let e=0;e<f;e++)v[e]=t.worldToCanvas(p[e]);let{maxX:I,maxY:C,minX:_,minY:E}=aG(v),w=t.canvasToWorld([_,E]),A=iW.A(h,w),S=t.canvasToWorld([I,C]),y=aU(d,[A,iW.A(h,S)]),b=u[0],T=t.canvasToWorld(b),M=t.canvasToWorld([b[0]+1,b[1]]),D=t.canvasToWorld([b[0],b[1]+1]),O={targetId:i,viewport:t,canvasCoordinates:u,points:r,imageData:h,metadata:c,cachedStats:o,modalityUnit:m,calibratedScale:y,deltaInX:iT.Io(T,M),deltaInY:iT.Io(T,D)};l?this.updateClosedCachedStats(O):this.updateOpenCachedStats(O)}let d=e.invalidated;return e.invalidated=!1,d&&e9(e,i.viewport.element,eY.StatsUpdated),o},this._renderStats=(e,t,n,i)=>{let{data:a}=e,o=this.getTargetId(t,a),r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id,annotationUID:e.annotationUID},l=this.getLinkedTextBoxStyle(r,e);if(!l.visibility)return;let s=this.configuration.getTextLines(a,o);if(!s||0===s.length)return;let d=a.contour.polyline.map(e=>t.worldToCanvas(e));if(!a.handles.textBox.hasMoved){let e=lS(d);a.handles.textBox.worldPosition=t.canvasToWorld(e)}let h=t.worldToCanvas(a.handles.textBox.worldPosition),{x:c,y:u,width:g,height:m}=lA(i,e.annotationUID??"","1",s,h,d,{},l);a.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([c,u]),topRight:t.canvasToWorld([c+g,u]),bottomLeft:t.canvasToWorld([c,u+m]),bottomRight:t.canvasToWorld([c+g,u+m])}},rE(this),rO(this),rW(this),r5(this),r8(this),lf(this),this._throttledCalculateCachedStats=oA(this._calculateCachedStats,100,{trailing:!0})}filterInteractableAnnotationsForElement(e,t){let n;if(!t?.length)return[];let i=super.filterInteractableAnnotationsForElement(e,t);if(!i?.length)return[];let{viewport:a}=(0,ej.Ay)(e);if(a instanceof i8.A){let e=a.getCamera(),{spacingInNormalDirection:t}=aT.A(a,e);n=this.filterAnnotationsWithinSlice(i,e,t)}else n=o_(a,t);return n}filterAnnotationsWithinSlice(e,t,n){let{viewPlaneNormal:i}=t,a=e.filter(e=>{let n=e.metadata.viewPlaneNormal;if(!e.metadata.referencedImageId&&!n&&e.metadata.FrameOfReferenceUID){for(let n of e.data.contour.polyline){let e=iT.jb(iT.vt(),n,t.focalPoint),i=iT.Om(e,t.viewPlaneNormal);if(!aM.n4(i,0))return!1}return e.metadata.viewPlaneNormal=t.viewPlaneNormal,e.metadata.cameraFocalPoint=t.focalPoint,!0}if(!n){let{referencedImageId:t}=e.metadata,{imageOrientationPatient:i}=ib.get("imagePlaneModule",t),a=iT.fA(i[0],i[1],i[2]),o=iT.fA(i[3],i[4],i[5]);n=iT.vt(),iT.$A(n,a,o),e.metadata.viewPlaneNormal=n}
2let a=Math.abs(iT.Om(i,n))>dv;return n&&a});if(!a.length)return[];let o=n/2,{focalPoint:r}=t,l=[];for(let e of a){let t=e.data.contour.polyline[0];if(!e.isVisible)continue;let n=iT.vt();iT.jb(n,r,t),Math.abs(iT.Om(n,i))<o&&l.push(e)}return l}isContourSegmentationTool(){return!1}createAnnotation(e){let t=e.detail.currentPoints.world,n=super.createAnnotation(e);return ab.A(n,{data:{contour:{polyline:[[...t]]},label:"",cachedStats:{}},onInterpolationComplete:e=>{e.data.handles.points.length=0}})}getAnnotationStyle(e){return super.getAnnotationStyle(e)}renderAnnotationInstance(e){let{enabledElement:t,targetId:n,svgDrawingHelper:i}=e,a=e.annotation,o=!1,{viewport:r,renderingEngine:l}=t,s=this.isDrawing,d=this.isEditingOpen,h=this.isEditingClosed;if(s||d||h){let e=this.commonData.annotation.annotationUID;if(a.annotationUID===e)if(s)this.renderContourBeingDrawn(t,i,a);else if(h)this.renderClosedContourBeingEdited(t,i,a);else if(d)this.renderOpenContourBeingEdited(t,i,a);else throw Error(`Unknown ${this.getToolName()} annotation rendering state`);else this.configuration.displayOnePointAsCrosshairs&&1===a.data.contour.polyline.length?this.renderPointContourWithMarker(t,i,a):this.renderContour(t,i,a);o=!0}else this.configuration.displayOnePointAsCrosshairs&&1===a.data.contour.polyline.length?this.renderPointContourWithMarker(t,i,a):this.renderContour(t,i,a);if(this.configuration.calculateStats)return a.invalidated&&this._calculateStatsIfActive(a,n,r,l,t),this._renderStats(a,r,t,i),o}_calculateStatsIfActive(e,t,n,i,a){let o=this.commonData?.annotation.annotationUID;if((e.annotationUID!==o||this.commonData?.movingTextBox)&&!this.commonData?.movingTextBox){let{data:o}=e;o.cachedStats[t]?.unit?e.invalidated&&this._throttledCalculateCachedStats(e,n,i,a):(o.cachedStats[t]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null,unit:null},this._calculateCachedStats(e,n,i,a))}}updateClosedCachedStats({viewport:e,points:t,imageData:n,metadata:i,cachedStats:a,targetId:o,modalityUnit:r,canvasCoordinates:l,calibratedScale:s,deltaInX:d,deltaInY:h}){let c,{scale:u,areaUnit:g,unit:m}=s,{voxelManager:p}=e.getImageData(),f=t.map(e=>n.worldToIndex(e)),v=Number.MAX_SAFE_INTEGER,I=Number.MIN_SAFE_INTEGER,C=Number.MAX_SAFE_INTEGER,_=Number.MIN_SAFE_INTEGER,E=Number.MAX_SAFE_INTEGER,A=Number.MIN_SAFE_INTEGER;for(let e=0;e<t.length;e++){let t=f[e].map(Math.floor);v=Math.min(v,t[0]),I=Math.max(I,t[0]),C=Math.min(C,t[1]),_=Math.max(_,t[1]),E=Math.min(E,t[2]),A=Math.max(A,t[2])}let S=aX(l)/u/u;S*=d*h;let y=dI.calculateLengthInIndex(s,f,closed),b=.01*(I-v),T=.01*(_-C),M=.01*(A-E),D=[[v=Math.floor(v-b),I=Math.ceil(I+b)],[C=Math.floor(C-T),_=Math.ceil(_+T)],[E=Math.floor(E-M),A=Math.ceil(A+M)]],O=n.indexToWorld([I,_,A]),x=e.worldToCanvas(O),P=0,L=[],N=0;p&&(c=p.forEach(this.configuration.statsCalculator.statsCallback,{imageData:n,isInObject:(t,n)=>{let i=!0,a=e.worldToCanvas(t);a[1]!=P&&(N=0,P=a[1],(L=ol(l,a,[x[0],a[1]])).sort(function(e,t){return e[0]===t[0]?0:e[0]<t[0]?-1:1}));return L.length&&a[0]>L[0][0]&&(L.shift(),N++),N%2==0&&(i=!1),i},boundsIJK:D,returnPoints:this.configuration.storePointData}));let R=this.configuration.statsCalculator.getStatistics(),k={name:"area",value:S,unit:g,type:w.Area},U={name:"perimeter",value:y,unit:m,type:w.Linear};a[o]={Modality:i.Modality,area:S,perimeter:y,mean:R.mean?.value,max:R.max?.value,min:R.min?.value,stdDev:R.stdDev?.value,statsArray:[k,U,...R.array],pointsInShape:c,areaUnit:g,modalityUnit:r,unit:m}}updateOpenCachedStats({targetId:e,metadata:t,cachedStats:n,modalityUnit:i,calibratedScale:a,imageData:o,points:r}){let{unit:l}=a,s=r.map(e=>o.worldToIndex(e)),d=dI.calculateLengthInIndex(a,s),h={name:"length",value:d,unit:l,type:w.Linear};n[e]={Modality:t.Modality,length:d,modalityUnit:i,unit:l,statArray:[h]}}}function dC(e,t){let{area:n,mean:i,stdDev:a,length:o,perimeter:r,max:l,min:s,isEmptyArea:d,unit:h,areaUnit:c,modalityUnit:u}=e.cachedStats[t]||{},g=[];if(aM.Et(n)){let e=d?"Area: Oblique not supported":`Area: ${aD.A(n)} ${c}`;g.push(e)}return aM.Et(i)&&g.push(`Mean: ${aD.A(i)} ${u}
2`),aM.Et(l)&&g.push(`Max: ${aD.A(l)} ${u}`),aM.Et(s)&&g.push(`Min: ${aD.A(s)} ${u}`),aM.Et(a)&&g.push(`Std Dev: ${aD.A(a)} ${u}`),aM.Et(r)&&g.push(`Perimeter: ${aD.A(r)} ${h}`),aM.Et(o)&&g.push(`${aD.A(o)} ${h}`),g}let d_=dI;class dE{constructor(){}static getContourSequence(e,t){let{data:n}=e,{projectionPoints:i,projectionPointsImageIds:a}=n.cachedStats;return i.map((e,n)=>{var i;let o=[...(i=e)[0],...i[1],...i[3],...i[2]].flat().map(e=>e.toFixed(2)),r=function(e,t){let n=t.get("sopCommonModule",e);return{ReferencedSOPClassUID:n.sopClassUID,ReferencedSOPInstanceUID:n.sopInstanceUID}}(a[n],t);return{NumberOfContourPoints:o.length/3,ContourImageSequence:r,ContourGeometricType:"CLOSED_PLANAR",ContourData:o}})}}dE.toolName="RectangleROIStartEndThreshold";class dw{static{this.TOOL_NAMES={}}constructor(){}static convert(e,t,n){if(!e?.data)throw Error("Tool data is empty");if(!e.metadata||!e.metadata.referencedImageId)throw Error("Tool data is not associated with any imageId");let{toolName:i}=e.metadata,a=dw.TOOL_NAMES[i];if(!a)throw Error(`Unknown tool type: ${i}, cannot convert to RTSSReport`);let o=a.getContourSequence(e,n),r=t.color?.slice(0,3)||[Math.floor(255*Math.random()),Math.floor(255*Math.random()),Math.floor(255*Math.random())];return{ReferencedROINumber:t.segmentIndex,ROIDisplayColor:r,ContourSequence:Array.isArray(o)?o:[o]}}static register(e){dw.TOOL_NAMES[e.toolName]=e}}dw.register(dE);let dA=dw;class dS extends d_{static{this.toolName="PlanarFreehandContourSegmentationTool"}constructor(e){super(ab.A({configuration:{calculateStats:!1,allowOpenContours:!1}},e))}static{dA.register(this)}isContourSegmentationTool(){return!0}renderAnnotationInstance(e){let t=e.annotation,{invalidated:n}=t,i=super.renderAnnotationInstance(e);if(n){let{segmentationId:e}=t.data.segmentation;aa(e)}return i}}let dy=dS,db={[nB.Labelmap]:aE,[nB.Contour]:i4,[nB.Surface]:i_},dT=new Map;function dM(e,t,n){let i=db[n].getUpdateFunction(e);i&&dD(t,n,i)}function dD(e,t,n){dT.has(e)||dT.set(e,new Map);let i=dT.get(e);i.has(t)&&dO(e,t);let a=function(e,t,n){let i=ow(i=>{let a=i.detail?.segmentationId,o=n9(a);a===e&&o?.representationData?.[t]&&(n(e),nX(e))},300);return e=>{i(e)}}(e,t,n);ez.A.addEventListener(eK.SEGMENTATION_DATA_MODIFIED,a),i.set(t,a)}function dO(e,t){let n=dT.get(e);if(!n)return;let i=n.get(t);i&&(ez.A.removeEventListener(eK.SEGMENTATION_DATA_MODIFIED,i),n.delete(t))}function dx(e){let t=dT.get(e);if(t){for(let e of t.values())ez.A.removeEventListener(eK.SEGMENTATION_DATA_MODIFIED,e);dT.delete(e)}}let dP={[nB.Labelmap]:aE,[nB.Contour]:i4,[nB.Surface]:i_},dL=dy.toolName;class dN{constructor(){this._needsRender=new Set,this._pendingRenderQueue=[],this._animationFrameSet=!1,this._animationFrameHandle=null,this._getAllViewports=()=>(0,nG.qO)().flatMap(e=>e.getViewports()),this._renderFlaggedSegmentations=()=>{if(this._throwIfDestroyed(),Array.from(this._needsRender).forEach(e=>{this._triggerRender(e)}),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null,this._pendingRenderQueue.length>0){let e=this._pendingRenderQueue.shift();e&&e.length>0&&this._setViewportsToBeRenderedNextFrame(e)}}}renderSegmentationsForViewport(e){let t=e?[e]:this._getViewportIdsForSegmentation();this._setViewportsToBeRenderedNextFrame(t)}renderSegmentation(e){let t=this._getViewportIdsForSegmentation(e);this._setViewportsToBeRenderedNextFrame(t)}_getViewportIdsForSegmentation(e){let t=this._getAllViewports(),n=[];for(let i of t){let t=i.id;if(e){let i=n7(t,{segmentationId:e});i?.length>0&&n.push(t)}else{let e=n7(t);e?.length>0&&n.push(t)}}return n}_throwIfDestroyed(){if(this.hasBeenDestroyed)throw Error("this.destroy() has been manually called to free up memory, can not longer use this instance. Instead make a new one.")}_setViewportsToBeRenderedNextFrame(e){if(this._animationFrameSet)return void this._pendingRenderQueue.push(e);e.forEach(e=>{this._needsRender.add(e)}),this._render()}_render(){this._needsRender.size>0&&!1===this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedSegmentations),this._animationFrameSet=!0)}
2_triggerRender(e){let t=n7(e);if(!t?.length)return;let{viewport:n}=(0,ej.yj)(e)||{};n&&Promise.allSettled(t.map(e=>{e.type===nB.Contour&&this._addPlanarFreeHandToolIfAbsent(n);let t=dP[e.type],i=void 0!==n9(e.segmentationId).representationData[e.type];try{t.render(n,e).then(()=>{i||dM(n,e.segmentationId,e.type)})}catch(e){console.error(e)}return Promise.resolve({segmentationId:e.segmentationId,type:e.type})})).then(e=>{let t=e.filter(e=>"fulfilled"===e.status).map(e=>e.value);n.element.addEventListener(e$.A.IMAGE_RENDERED,function e(n){let{element:i,viewportId:a}=n.detail;i.removeEventListener(e$.A.IMAGE_RENDERED,e),t.forEach(e=>{let t={viewportId:a,segmentationId:e.segmentationId,type:e.type};(0,eq.A)(ez.A,eK.SEGMENTATION_RENDERED,{...t})})}),n.render()})}_addPlanarFreeHandToolIfAbsent(e){dL in e0.tools||aw(dy);let t=oy(e.id);t.hasTool(dL)||(t.addTool(dL),t.setToolPassive(dL))}}function dR(e){dU.renderSegmentationsForViewport(e)}function dk(e){dU.renderSegmentation(e)}let dU=new dN;function dV(e,t){return n8.updateLabelmapSegmentationImageReferences(e,t)}function dF(e){let{viewportId:t,renderingEngineId:n}=e.detail,{viewport:i}=(0,ej.b1)(t,n),a=n7(t);if(!a?.length)return;let o=a.filter(e=>e.type===nB.Labelmap),r=i.getActors();o.forEach(e=>{let{segmentationId:n}=e;dV(t,n)});let l=o.flatMap(e=>is(t,e.segmentationId)).filter(e=>void 0!==e);l.length&&(l.forEach(e=>{o.find(n=>{let i=an(t,n.segmentationId);return i?.includes(e.referencedId)})||i.removeActors([e.uid])}),o.forEach(n=>{let{segmentationId:a}=n,o=i.getCurrentImageId(),l=an(t,a);if(!l)return;let s=!1;l.forEach(e=>{let t=nV.Ay.getImage(e);if(!t)return void console.warn("No derived image found in the cache for segmentation representation",n);let l=r.find(t=>t.referencedId===e);if(l){let e=l.actor.getMapper().getInputData();e.setDerivedImage?e.setDerivedImage(t):nF.J(e,t)}else{let{dimensions:n,spacing:r,direction:l}=i.getImageDataMetadata(t),d=nV.Ay.getImage(o)||{imageId:o},{origin:h}=i.getImageDataMetadata(d),c=t.voxelManager.getConstructor(),u=t.voxelManager.getScalarData(),g=nR.Ay.newInstance({name:"Pixels",numberOfComponents:1,values:new c(u)}),m=nk.Ay.newInstance();m.setDimensions(n[0],n[1],1),m.setSpacing(r),m.setDirection(l),m.setOrigin(h),m.getPointData().setScalars(g),m.modified(),i.addImages([{imageId:e,representationUID:`${a}-${nB.Labelmap}-${t.imageId}`,callback:({imageActor:e})=>{e.getMapper().setInputData(m)}}]),s=!0;return}}),s&&dR(t),i.render(),e.type===e$.A.IMAGE_RENDERED&&i.element.removeEventListener(e$.A.IMAGE_RENDERED,dF)}))}let dG={enable:function(e){if(!e)return;let t=(0,ej.Ay)(e);if(!t)return;let{viewport:n}=t;n instanceof nU.A||(e.addEventListener(e$.A.PRE_STACK_NEW_IMAGE,dF),e.addEventListener(e$.A.IMAGE_RENDERED,dF))},disable:function(e){e.removeEventListener(e$.A.PRE_STACK_NEW_IMAGE,dF),e.removeEventListener(e$.A.IMAGE_RENDERED,dF)}},dB=function(e){o$(e.detail.element)},dH={enable:function(e){e.addEventListener(e$.A.IMAGE_RENDERED,dB)},disable:function(e){e.removeEventListener(e$.A.IMAGE_RENDERED,dB)}};function dW(e,t,n){let{renderingEngineId:i,viewportId:a}=e.detail,o=oy(a,i);if(!o)return[];let r=[],l=Object.keys(o.toolOptions);for(let e=0;e<l.length;e++){let i=l[e],a=o.toolOptions[i],s=null!=n&&a.bindings.length&&a.bindings.some(e=>e.mouseButton===n);if(t.includes(a.mode)&&(!n||s)){let e=o.getToolInstance(i);r.push(e)}}return r}let{Active:d$,Passive:dz,Enabled:dX}=e1,dj=function(e){dW(e,[d$,dz,dX]).forEach(t=>{t.onCameraModified&&t.onCameraModified(e)})},dq={enable:function(e){e.addEventListener(e$.A.CAMERA_MODIFIED,dj)},disable:function(e){e.removeEventListener(e$.A.CAMERA_MODIFIED,dj)}},{Active:dK,Passive:dY,Enabled:dZ}=e1,dJ=function(e){dW(e,[dK,dY,dZ]).forEach(t=>{t.onImageSpacingCalibrated&&t.onImageSpacingCalibrated(e)})},dQ={enable:function(e){e.addEventListener(e$.A.IMAGE_SPACING_CALIBRATED,dJ)},disable:function(e){e.removeEventListener(e$.A.IMAGE_SPACING_CALIBRATED,dJ)}},{Active:d0,Passive:d1,Enabled:d2}=e1,d5=function(e){dW(e,[d0,d1,d2]).forEach(t=>{t.onResetCamera&&t.onResetCamera(e)})},d3={enable:function(e){e.addEventListener(e$.A.CAMERA_RESET,d5)},disable:function(e){e.removeEventListener(e$.A.CAMERA_RESET,d5)}},{Active:d4}=e1;function d8(e,t,n){let i;if(e0.isInteractingWithTool)return!1;let{renderingEngineId:a,viewportId:o}
2=n.detail,r=oy(o,a);if(!r)return!1;let l=Object.keys(r.toolOptions);for(let e=0;e<l.length;e++){let n=l[e],a=r.toolOptions[n],o=r.getToolInstance(n);if(a.mode===d4&&"function"==typeof o[t]){i=r.getToolInstance(n);break}}i&&i[t](n)}let d9=d8.bind(null,"Mouse","mouseClickCallback");function d7(e,t,n,i="mouse"){let a="touch"===i?36:6,o=[];return t.forEach(({tool:t,annotations:i})=>{for(let r of i){if(r.isLocked||!r.isVisible)continue;let i=t.getHandleNearImagePoint(e,r,n,a);if(i){o.push({tool:t,annotation:r,handle:i});break}}}),o}function d6(e,t){let n=[];for(let i=0;i<t.length;i++){let a=t[i];if(!a){console.warn("undefined tool in filterToolsWithAnnotationsForElement");continue}let o=ti(a.constructor.toolName,e);o?.length&&("function"==typeof a.filterInteractableAnnotationsForElement&&(o=a.filterInteractableAnnotationsForElement(e,o)),o?.length>0&&n.push({tool:a,annotations:o}))}return n}function he(e,t,n,i="mouse"){let a="touch"===i?36:6,o=[];return t.forEach(({tool:t,annotations:r})=>{for(let l of r)if(!l.isLocked&&l.isVisible&&t.isPointNearTool(e,l,n,a,i)){o.push({tool:t,annotation:l});break}}),o}let{Active:ht}=e1;function hn(e){let{renderingEngineId:t,viewportId:n,event:i}=e.detail,a=ra(i)||nN.getModifierKey(),o=oy(n,t);if(!o)return null;let r=Object.keys(o.toolOptions),l=o.getDefaultMousePrimary(),s=e.detail.buttons??i?.buttons??l;for(let e=0;e<r.length;e++){let t=r[e],n=o.toolOptions[t],i=n.bindings.length&&n.bindings.some(e=>e.mouseButton===s&&e.modifierKey===a);if(n.mode===ht&&i)return o.getToolInstance(t)}}let{Active:hi,Passive:ha}=e1,{Active:ho,Passive:hr}=e1;function hl(e){if(e0.isInteractingWithTool)return;let t=hn(e);if(t&&"function"==typeof t.preMouseDownCallback&&t.preMouseDownCallback(e))return;let n=[...dW(e,[ho])||[],...dW(e,[hr])||[]];if(function(e){if(e0.isInteractingWithTool)return!1;let t=e.detail,{element:n}=t,i=(0,ej.Ay)(n),{canvas:a}=t.currentPoints;if(!i)return!1;let o=function(e,t){let n=new Map,{renderingEngineId:i,viewportId:a}=e.detail,o=oy(a,i);if(!o)return n;let r=Object.keys(o.toolOptions),l=o.getDefaultMousePrimary(),s=e.detail.event,d=s?.buttons??l,h=ra(s)||nN.getModifierKey();for(let e=0;e<r.length;e++){let i=r[e],a=o.getToolInstance(i),l=Object.values(a.configuration?.actions??{});if(!l?.length||!t.includes(a.mode))continue;let s=l.find(e=>e.bindings?.length&&e.bindings.some(e=>e.mouseButton===d&&e.modifierKey===h));s&&n.set(a,s)}return n}(e,[hi,ha]),r=d6(n,Array.from(o.keys())),l=he(n,r,a);if(l.length>0){let{tool:t,annotation:n}=l[0],i=o.get(t);return("string"==typeof i.method?t[i.method]:i.method).call(t,e,n),!0}return!1}(e))return;let i=e.detail,{element:a}=i,o=d6(a,n),r=i.currentPoints.canvas,l=d7(a,o,r,"mouse"),s=!!e.detail.event.shiftKey;if(l.length>0){let{tool:t,annotation:n,handle:i}=hs(l);hd(n.annotationUID,s),t.handleSelectedCallback(e,n,i,"Mouse");return}let d=he(a,o,r,"mouse");if(d.length>0){let{tool:t,annotation:n}=hs(d);hd(n.annotationUID,s),t.toolSelectedCallback(e,n,"Mouse",r);return}if(t&&"function"==typeof t.postMouseDownCallback&&t.postMouseDownCallback(e))return}function hs(e){if(e.length>1){let t=e.find(e=>{let t=!iN(e.annotation.annotationUID),n=l6(e.annotation.annotationUID);return t&&n});if(t)return t}return e[0]}function hd(e,t=!1){t?lZ(e)?lj(e,!1):lj(e,!0,!0):lj(e,!0,!1)}function hh(e){if(e0.isInteractingWithTool)return;let t=hn(e);if(t&&!e0.isMultiPartToolActive&&t.addNewAnnotation)try{let n=t.addNewAnnotation(e,"mouse");lj(n.annotationUID)}catch(e){console.warn("Error adding new annotation, viewport not ready:",e)}}let hc=d8.bind(null,"Mouse","doubleClickCallback");function hu(e){if(e0.isInteractingWithTool)return;let t=hn(e);t&&"function"==typeof t.mouseDragCallback&&t.mouseDragCallback(e)}let{Active:hg,Passive:hm}=e1;function hp(e){if(e0.isInteractingWithTool||e0.isMultiPartToolActive)return;let t=dW(e,[hg,hm]),{element:n}=e.detail,i=d6(n,t),a=t.filter(e=>!i.some(t=>t.tool.getToolName()===e.getToolName())),o=!1;for(let{tool:t,annotations:n}of i)"function"==typeof t.mouseMoveCallback&&(o=t.mouseMoveCallback(e,n)||o);a.forEach(t=>{"function"==typeof t.mouseMoveCallback&&t.mouseMoveCallback(e)}),!0===o&&o$(n)}let hf=d8.bind(null,"Mouse","mouseUpCallback"),hv=function(e){if(e0.isInteractingWithTool)return;e.detail.buttons=I.Wheel|(e.detail.event.buttons||0);let t=hn(e);if(t)return t.mouseWheelCallback(e)},hI={enable:function(e){e.addEventListener(eK.MOUSE_CLICK,d9),e.addEventListener(eK.MOUSE_DOWN,hl),e.addEventListener(eK.MOUSE_DOWN_ACTIVATE,hh),e.addEventListener(eK.MOUSE_DOUBLE_CLICK,hc),e.addEventListener(eK.MOUSE_DRAG,hu),e.addEventListener(eK.MOUSE_MOVE,hp),e.addEventListener(eK.MOUSE_UP,hf),e.addEventListener(eK.MOUSE_WHEEL,hv)},disable:function(e){e.removeEventListener(eK.MOUSE_CLICK,d9),e.removeEventListener(eK.MOUSE_DOWN,hl),e.removeEventListener(eK.MOUSE_DOWN_ACTIVATE,hh),e.removeEventListener(eK.MOUSE_DOUBLE_CLICK,hc),e.removeEventListener(eK.MOUSE_DRAG,hu),e.removeEventListener(eK.MOUSE_MOVE,hp),e.removeEventListener(eK.MOUSE_UP,hf),e.removeEventListener(eK.MOUSE_WHEEL,hv)}},{Active:hC}=e1;function h_(e){let{renderingEngineId:t,viewportId:n}=e.detail,i=tb.mouseButton,a=nN.getModifierKey(),o=oy(n,t);if(!o)return null;let r=Object.keys(o.toolOptions),l=o.getDefaultMousePrimary();for(let e=0;e<r.length;e++){let t=r[e],n=o.toolOptions[t];if(n.mode===hC&&n.bindings.length&&n.bindings.some(e=>e.mouseButton===(i??l)&&e.modifierKey===a))return o.getToolInstance(t)}}function hE(e){let t=h_(e);if(t){let{renderingEngineId:n,viewportId:i}=e.detail,a=oy(i,n),o=t.getToolName();Object.keys(a.toolOptions).includes(o)&&a.setViewportsCursorByToolName(o)}let n=function(e,t){let n=new Map,{renderingEngineId:i,viewportId:a}=e.detail,o=oy(a,i);if(!o)return n;
2let r=Object.keys(o.toolOptions),l=e.detail.key;for(let e=0;e<r.length;e++){let i=r[e],a=o.getToolInstance(i),s=a.configuration?.actions;if(!s)continue;let d=Object.values(s);if(!d?.length||!t.includes(a.mode))continue;let h=d.find(e=>e.bindings?.some(e=>e.key===l));h&&n.set(a,h)}return n}(e,[e1.Active]);if(n?.size){let{element:t}=e.detail;for(let[i,a]of[...n.entries()])("function"==typeof a.method?a.method:i[a.method]).call(i,t,a,e)}}function hw(e){let t=h_(e);if(!t)return;let{renderingEngineId:n,viewportId:i}=e.detail,a=oy(i,n);nP();let o=t.getToolName();Object.keys(a.toolOptions).includes(o)&&a.setViewportsCursorByToolName(o)}let hA={enable:function(e){e.addEventListener(eK.KEY_DOWN,hE),e.addEventListener(eK.KEY_UP,hw)},disable:function(e){e.removeEventListener(eK.KEY_DOWN,hE),e.removeEventListener(eK.KEY_UP,hw)}},{Active:hS}=e1;function hy(e){let{renderingEngineId:t,viewportId:n}=e.detail,i=e.detail.event,a=oy(n,t);if(!a)return null;let o=Object.keys(a.toolOptions),r=Object.keys(i.touches).length,l=ra(i)||nN.getModifierKey(),s=a.getDefaultMousePrimary();for(let e=0;e<o.length;e++){let t=o[e],n=a.toolOptions[t],i=n.bindings.length&&n.bindings.some(e=>(e.numTouchPoints===r||1===r&&e.mouseButton===s)&&e.modifierKey===l);if(n.mode===hS&&i)return a.getToolInstance(t)}}function hb(e,t,n){let{renderingEngineId:i,viewportId:a}=e.detail,o=oy(a,i);if(!o)return[];let r=[],l=Object.keys(o.toolOptions);for(let e=0;e<l.length;e++){let i=l[e],a=o.toolOptions[i],s=null!=n&&a.bindings.length&&a.bindings.some(e=>e.numTouchPoints===n);if(t.includes(a.mode)&&(!n||s)){let e=o.getToolInstance(i);r.push(e)}}return r}let{Active:hT,Passive:hM}=e1;function hD(e){if(e0.isInteractingWithTool)return;let t=hy(e);if(t&&"function"==typeof t.preTouchStartCallback&&t.preTouchStartCallback(e))return;let n=[...hb(e,[hT])||[],...hb(e,[hM])||[]],i=e.detail,{element:a}=i,o=d6(a,n),r=i.currentPoints.canvas,l=d7(a,o,r,"touch");if(l.length>0){let{tool:t,annotation:n,handle:i}=hO(l);hx(n.annotationUID,!1),t.handleSelectedCallback(e,n,i,"Touch");return}let s=he(a,o,r,"touch");if(s.length>0){let{tool:t,annotation:n}=hO(s);hx(n.annotationUID,!1),t.toolSelectedCallback(e,n,"Touch",r);return}if(t&&"function"==typeof t.postTouchStartCallback&&t.postTouchStartCallback(e))return}function hO(e){return e.length>1&&e.find(e=>!iN(e.annotation.annotationUID)&&l6(e.annotation.annotationUID))||e[0]}function hx(e,t=!1){t?lZ(e)?lj(e,!1):lj(e,!0,!0):lj(e,!0,!1)}function hP(e){if(e0.isInteractingWithTool)return;let t=hy(e);
2t&&!e0.isMultiPartToolActive&&t.addNewAnnotation&&lj(t.addNewAnnotation(e,"touch").annotationUID)}function hL(e){if(e0.isInteractingWithTool)return;let t=hy(e);t&&"function"==typeof t.touchDragCallback&&t.touchDragCallback(e)}let hN=d8.bind(null,"Touch","touchEndCallback"),hR=d8.bind(null,"Touch","touchTapCallback"),hk=d8.bind(null,"Touch","touchPressCallback"),hU={enable:function(e){e.addEventListener(eK.TOUCH_START,hD),e.addEventListener(eK.TOUCH_START_ACTIVATE,hP),e.addEventListener(eK.TOUCH_DRAG,hL),e.addEventListener(eK.TOUCH_END,hN),e.addEventListener(eK.TOUCH_TAP,hR),e.addEventListener(eK.TOUCH_PRESS,hk)},disable:function(e){e.removeEventListener(eK.TOUCH_START,hD),e.removeEventListener(eK.TOUCH_START_ACTIVATE,hP),e.removeEventListener(eK.TOUCH_DRAG,hL),e.removeEventListener(eK.TOUCH_END,hN),e.removeEventListener(eK.TOUCH_PRESS,hk)}};function hV(e){var t;let{element:n,viewportId:i}=e.detail,a=function(e){let t="http://www.w3.org/2000/svg",n=document.createElementNS(t,"svg"),i=`svg-layer-${e}`;n.classList.add("svg-layer"),n.setAttribute("id",i),n.setAttribute("xmlns","http://www.w3.org/2000/svg"),n.style.width="100%",n.style.height="100%",n.style.pointerEvents="none",n.style.position="absolute";let a=document.createElementNS(t,"defs"),o=document.createElementNS(t,"filter"),r=document.createElementNS(t,"feOffset"),l=document.createElementNS(t,"feColorMatrix"),s=document.createElementNS(t,"feBlend");return o.setAttribute("id",`shadow-${i}`),o.setAttribute("filterUnits","userSpaceOnUse"),r.setAttribute("result","offOut"),r.setAttribute("in","SourceGraphic"),r.setAttribute("dx","0.5"),r.setAttribute("dy","0.5"),l.setAttribute("result","matrixOut"),l.setAttribute("in","offOut"),l.setAttribute("in2","matrix"),l.setAttribute("values","0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0"),s.setAttribute("in","SourceGraphic"),s.setAttribute("in2","matrixOut"),s.setAttribute("mode","normal"),o.appendChild(r),o.appendChild(l),o.appendChild(s),a.appendChild(o),n.appendChild(a),n}(i);(function(e){let{viewportUid:t,renderingEngineUid:n}=e.dataset,i=`${t}:${n}`;e0.svgNodeCache[i]={}})(n),t=a,n.querySelector("div.viewport-element").appendChild(t),oW.addViewportElement(i,n),tW.enable(n),tX.enable(n),nb.enable(n),nN.enable(n),dG.enable(n),dH.enable(n),dq.enable(n),dQ.enable(n),d3.enable(n),hI.enable(n),hA.enable(n),hU.enable(n),e0.enabledElements.push(n)}let hF=function(e,t){let n=[];if(!t&&!e)throw Error("At least one of renderingEngineId or viewportId should be given");for(let i=0;i<e0.synchronizers.length;i++){let a=e0.synchronizers[i],o=!a.isDisabled(),r=a.hasSourceViewport(t,e),l=a.hasTargetViewport(t,e);o&&(r||l)&&n.push(a)}return n},hG=e=>{let t=(0,ej.Ay)(e);t&&hF(t.viewportId,t.renderingEngineId).forEach(e=>{e.remove(t)})},hB=e=>{let t=(0,ej.Ay)(e);if(!t)return;let{renderingEngineId:n,viewportId:i}=t,a=oy(i,n);a&&a.removeViewports(n,i)},hH=function(e){let t=e0.enabledElements.findIndex(t=>t===e);t>-1&&e0.enabledElements.splice(t,1)},hW=function(e){let{element:t,viewportId:n}=e.detail;(function(e){let{viewportUid:t,renderingEngineUid:n}=e.dataset,i=`${t}:${n}`;delete e0.svgNodeCache[i]})(t),function(e){let t=e.querySelector("div.viewport-element"),n=t.querySelector("svg");n&&t.removeChild(n)}(t),oW.removeViewportElement(n,t),tW.disable(t),tX.disable(t),nb.disable(t),nN.disable(t),dG.disable(t),dH.disable(t),dq.disable(t),dQ.disable(t),d3.disable(t),hI.disable(t),hA.disable(t),hU.disable(t),hG(t),hB(t),hH(t)};function h$(e){return!!e.data?.segmentation}function hz(e,t){let{segmentation:n}=e.data,{segmentation:i}=t.data;return n.segmentationId===i.segmentationId&&n.segmentIndex===i.segmentIndex}function hX(e,t,n){let i=[],a=aG(t);for(let o=0;o<n.length;o++){let r=n[o],l=function(e,t){let n=e.length,i=Array(n);for(let a=0;a<n;a++)i[a]=t.worldToCanvas(e[a]);return i}(r.data.contour.polyline,e);if(!sb(a,aG(l)))continue;let s=a6(t,l),d=!s&&az(l,t);(s||d)&&i.push({targetAnnotation:r,targetPolyline:l,isContourHole:d})}return i}let hj="PlanarFreehandContourSegmentationTool";function hq(e,t,n,i){let a=i.filter(e=>e.isContourHole),o=i.filter(e=>!e.isContourHole);if(a.length>0){let n=a[0];(function(e,t,n){tl(t,n),sT(n);
2let{contour:i}=n.data;rx(n,{points:hK(i.polyline,e),closed:i.closed,targetWindingDirection:t.data.contour.windingDirection===_.Clockwise?_.CounterClockwise:_.Clockwise},e)})(e,n.targetAnnotation,t),hY(e,[t,n.targetAnnotation]);return}if(0!==o.length){if(!aS(hj))return void console.warn(`${hj} is not registered in cornerstone. Cannot process multiple intersections.`);!function(e,t,n,i){var a,o,r;let{element:l}=e,s=[t],d=[],h=[];i.forEach(({targetAnnotation:t})=>{var n;let i=(n=e,td(t).map(e=>{let t=hK(e.data.contour.polyline,n);return{annotation:e,polyline:t}}));h.push(...i),s.push(t)});let c=n[0];if(i.some(({targetPolyline:e})=>a$(e,c))){let e=n;i.forEach(({targetPolyline:t})=>{e=oi(e,t)}),d.push(e)}else i.forEach(({targetPolyline:e})=>{let t=a2(e,n);d.push(...t)});s.forEach(e=>{tu(e.annotationUID),sT(e)}),h.forEach(e=>tr(e.annotation));let u=i[0].targetAnnotation,g=[];d.forEach(t=>{if(!t||t.length<3)return void console.warn("Skipping creation of new annotation due to invalid polyline:",t);let n=function(e,t,n){let i=e.canvasToWorld(n[0]),a=e.canvasToWorld(n[n.length-1]),o={metadata:{...t.metadata,toolName:hj,originalToolName:t.metadata.originalToolName||t.metadata.toolName},data:{cachedStats:{},handles:{points:[i,a],textBox:t.data.handles.textBox?{...t.data.handles.textBox}:void 0},contour:{polyline:[],closed:!0},spline:t.data.spline,segmentation:{...t.data.segmentation}},annotationUID:eX.A(),highlighted:!0,invalidated:!0,isLocked:!1,isVisible:void 0,interpolationUID:t.interpolationUID,interpolationCompleted:t.interpolationCompleted};return rx(o,{points:n,closed:!0,targetWindingDirection:_.Clockwise},e),o}(e,u,t);th(n,l),iG(n),e9(n,e.element),g.push(n)}),a=e,o=h,r=g,o.forEach(e=>{let t=r.find(t=>az(hK(t.data.contour.polyline,a),e.polyline));t&&tl(t,e.annotation)}),hY(e,s)}(e,t,n,o)}}function hK(e,t){let n=e.length,i=Array(n);for(let a=0;a<n;a++)i[a]=t.worldToCanvas(e[a]);return i}function hY(e,t){let{element:n}=e,i=new Set([hj]);for(let e of(t.forEach(e=>{i.add(e.metadata.toolName)}),i.values()))aS(e)&&oX(ox(n,e))}async function hZ(e){let t=e.detail.annotation;if(!h$(t))return;let n=function(e){let t=sJ(e);return t.find(e=>(function(e,t=!1){let n,i="PlanarFreehandContourSegmentationTool",a=oy(e.id,e.renderingEngineId);return a?a.hasTool(i)?a.getToolOptions(i)||(n=`Tool ${i} must be in active/passive state in ${a.id} toolGroup`):n=`Tool ${i} not added to ${a.id} toolGroup`:n=`ToolGroup not found for viewport ${e.id}`,n&&!t&&console.warn(n),!n})(e,!0))??t[0]}(t),i=function(e,t){let{annotationUID:n}=t;return to().filter(i=>i.annotationUID&&i.annotationUID!==n&&h$(i)&&hz(i,t)&&e.isReferenceViewable(i.metadata))}(n,t);if(!i.length)return void(0,eq.A)(ez.A,eK.ANNOTATION_CUT_MERGE_PROCESS_COMPLETED,{element:n.element,sourceAnnotation:t});let a=sD(t.data.contour.polyline,n),o=hX(n,a,i);if(!o.length)return void(0,eq.A)(ez.A,eK.ANNOTATION_CUT_MERGE_PROCESS_COMPLETED,{element:n.element,sourceAnnotation:t});if(o.length>1)return void hq(n,t,a,o);let{targetAnnotation:r,targetPolyline:l,isContourHole:s}=o[0];if(s){let{contourHoleProcessingEnabled:i=!1}=e.detail;if(!i)return;sL(n,r,t)}else sN(n,r,l,t,a)}function hJ(e){h$(e.detail.annotation)&&hZ(e)}let hQ=function(e){let{viewportId:t}=e.detail;oX([t])},h0=function(e){e.detail.removed.length&&(0,nG.qO)().forEach(e=>{oz(e.getViewports().map(e=>e.id))})};function h1(e){h$(e.detail.annotation)&&sT(e.detail.annotation)}let h2=function(e){let{segmentationId:t}=e.detail;dk(t)},h5=e=>{let t=(0,ej.yj)(e);return t?.viewport??void 0},h3=function(e){let{segmentationId:t,modifiedSlicesToUse:n}=e.detail,{representationData:i}=n9(t),a=s9(t),o=a.some(e=>h5(e)instanceof i8.A),r=a.some(e=>h5(e)instanceof iA.A),l=o&&r;a.forEach(e=>{let o=h5(e);o instanceof i8.A&&function({modifiedSlicesToUse:e,representationData:t,type:n}){let i,a=nV.Ay.getVolume(t[n].volumeId);if(!a)return console.warn("segmentation not found in cache");let{imageData:o,vtkOpenGLTexture:r}=a;(e?.length>0?e:[...Array(o.getDimensions()[2]).keys()]).forEach(e=>{r.setUpdatedFrame(e)}),o.modified()}({modifiedSlicesToUse:l?[]:n,representationData:i,type:nB.Labelmap}),o instanceof iA.A&&function({viewportIds:e,segmentationId:t}
2){e.forEach(e=>{let n=n7(e,{segmentationId:t});(n=n.filter(e=>e.type===nB.Labelmap)).forEach(n=>{if(n.segmentationId!==t)return;let i=(0,ej.yj)(e);if(!i)return;let{viewport:a}=i;if(a instanceof i8.A)return;let o=is(e,t);o?.length&&o.forEach((n,i)=>{let a=n.actor.getMapper().getInputData(),o=an(e,t),r=nV.Ay.getImage(o[i]);a.modified(),nF.J(a,r)})})})}({viewportIds:a,segmentationId:t})})},h4=function(e){let{segmentationId:t}=e.detail,{representationData:n}=n9(t);n.Labelmap&&h3(e),dk(t)},h8={enable:function(){ez.A.addEventListener(eK.ANNOTATION_COMPLETED,s2.handleAnnotationCompleted),ez.A.addEventListener(eK.ANNOTATION_MODIFIED,s2.handleAnnotationUpdate),ez.A.addEventListener(eK.ANNOTATION_REMOVED,s2.handleAnnotationDelete)},disable:function(){ez.A.removeEventListener(eK.ANNOTATION_COMPLETED,s2.handleAnnotationCompleted),ez.A.removeEventListener(eK.ANNOTATION_MODIFIED,s2.handleAnnotationUpdate),ez.A.removeEventListener(eK.ANNOTATION_REMOVED,s2.handleAnnotationDelete)}},h9=function(e){let t=e0.toolGroups.findIndex(t=>t.id===e);t>-1&&e0.toolGroups.splice(t,1)},h7=function(){for(let e of[...e0.toolGroups])h9(e.id);e0.toolGroups=[]},h6=function(e){let{viewportId:t}=e.detail;dR(t)},ce=function(e){let{segmentationId:t}=e.detail;to().filter(e=>t===e?.data?.segmentation?.segmentationId).forEach(e=>{tu(e.annotationUID)})},ct=!1;function cn(e={}){ct||(ig=e,function(){ca();let e=e$.A.ELEMENT_ENABLED,t=e$.A.ELEMENT_DISABLED;ez.A.addEventListener(e,hV),ez.A.addEventListener(t,hW),h8.enable()}(),co(),ez.A.addEventListener(eK.ANNOTATION_COMPLETED,hJ),ez.A.addEventListener(eK.ANNOTATION_MODIFIED,hQ),ez.A.addEventListener(eK.ANNOTATION_SELECTION_CHANGE,h0),ez.A.addEventListener(eK.ANNOTATION_SELECTION_CHANGE,h0),ez.A.addEventListener(eK.ANNOTATION_REMOVED,h1),ez.A.addEventListener(eK.SEGMENTATION_MODIFIED,h2),ez.A.addEventListener(eK.SEGMENTATION_DATA_MODIFIED,h4),ez.A.addEventListener(eK.SEGMENTATION_REPRESENTATION_MODIFIED,h6),ez.A.addEventListener(eK.SEGMENTATION_REPRESENTATION_ADDED,h6),ez.A.addEventListener(eK.SEGMENTATION_REMOVED,ce),ct=!0)}function ci(){ca(),co(),h7(),eZ={},e0={...structuredClone({...eQ,svgNodeCache:{}}),svgNodeCache:{...eQ.svgNodeCache}},i.restoreAnnotations({}),n8.resetState(),ct=!1}function ca(){let e=e$.A.ELEMENT_ENABLED,t=e$.A.ELEMENT_DISABLED;ez.A.removeEventListener(e,hV),ez.A.removeEventListener(t,hW),h8.disable()}function co(){ez.A.removeEventListener(eK.ANNOTATION_COMPLETED,hJ),ez.A.removeEventListener(eK.ANNOTATION_MODIFIED,hQ),ez.A.removeEventListener(eK.ANNOTATION_SELECTION_CHANGE,h0),ez.A.removeEventListener(eK.ANNOTATION_SELECTION_CHANGE,h0),ez.A.removeEventListener(eK.ANNOTATION_REMOVED,h1),ez.A.removeEventListener(eK.SEGMENTATION_MODIFIED,h2),ez.A.removeEventListener(eK.SEGMENTATION_DATA_MODIFIED,h4),ez.A.removeEventListener(eK.SEGMENTATION_REPRESENTATION_MODIFIED,h6),ez.A.removeEventListener(eK.SEGMENTATION_REPRESENTATION_ADDED,h6),ez.A.removeEventListener(eK.SEGMENTATION_REMOVED,ce)}function cr(e){let t=oV(e,[e1.Active,e1.Passive]);for(let{tool:n}of d6(e,t)){let t=n.cancel(e);if(t)return t}}class cl{constructor(e,t,n,i){this._viewportOptions={},this._onEvent=e=>{if(!0===this._ignoreFiredEvents||!this._targetViewports.length)return;let t="element"===this._eventSource?(0,ej.Ay)(e.currentTarget):(0,ej.yj)(e.detail?.viewportId);if(!t)return;let{renderingEngineId:n,viewportId:i}=t;this._sourceViewports.find(e=>e.viewportId===i)&&this.fireEvent({renderingEngineId:n,viewportId:i},e)},this._enabled=!0,this._eventName=t,this._eventHandler=n,this._ignoreFiredEvents=!1,this._sourceViewports=[],this._targetViewports=[],this._options=i||{},this._eventSource=this._options.eventSource||"element",this._auxiliaryEvents=this._options.auxiliaryEvents||[],this.id=e}isDisabled(){return!this._enabled||!this._hasSourceElements()}setOptions(e,t={}){this._viewportOptions[e]=t}setEnabled(e){this._enabled=e}getOptions(e){return this._viewportOptions[e]}add(e){this.addTarget(e),this.addSource(e)}addSource(e){if(cd(this._sourceViewports,e))return;let{renderingEngineId:t,viewportId:n}=e,i=(0,nG.lD)(t).getViewport(n);if(!i)return void console.warn(`Synchronizer.addSource: No viewport for ${t} ${n}`);("element"===this._eventSource?i.element:ez.A).addEventListener(this._eventName,this._onEvent.bind(this)),this._auxiliaryEvents.forEac
2h(({name:e,source:t="element"})=>{("element"===t?i.element:ez.A).addEventListener(e,this._onEvent.bind(this))}),this._updateDisableHandlers(),this._sourceViewports.push(e)}addTarget(e){cd(this._targetViewports,e)||(this._targetViewports.push(e),this._updateDisableHandlers())}getSourceViewports(){return this._sourceViewports}getTargetViewports(){return this._targetViewports}destroy(){this._sourceViewports.forEach(e=>this.removeSource(e)),this._targetViewports.forEach(e=>this.removeTarget(e))}remove(e){this.removeTarget(e),this.removeSource(e)}removeSource(e){let t=cs(this._sourceViewports,e);if(-1===t)return;let n="element"===this._eventSource?this.getViewportElement(e):ez.A;this._sourceViewports.splice(t,1),n.removeEventListener(this._eventName,this._eventHandler),this._auxiliaryEvents.forEach(({name:t,source:n})=>{("element"===n?this.getViewportElement(e):ez.A).removeEventListener(t,this._eventHandler)}),this._updateDisableHandlers()}removeTarget(e){let t=cs(this._targetViewports,e);-1!==t&&(this._targetViewports.splice(t,1),this._updateDisableHandlers())}hasSourceViewport(e,t){return cd(this._sourceViewports,{renderingEngineId:e,viewportId:t})}hasTargetViewport(e,t){return cd(this._targetViewports,{renderingEngineId:e,viewportId:t})}fireEvent(e,t){if(this.isDisabled()||this._ignoreFiredEvents)return;this._ignoreFiredEvents=!0;let n=[];try{for(let i=0;i<this._targetViewports.length;i++){let a=this._targetViewports[i];if(e.viewportId===a.viewportId)continue;let o=this._eventHandler(this,e,a,t,this._options);o instanceof Promise&&n.push(o)}}catch(e){console.warn(`Synchronizer, for: ${this._eventName}`,e)}finally{n.length?Promise.allSettled(n).then(()=>{this._ignoreFiredEvents=!1}):this._ignoreFiredEvents=!1}}_hasSourceElements(){return 0!==this._sourceViewports.length}_updateDisableHandlers(){let e=function(e,t){let n=[],i=e.concat(t);for(let e=0;e<i.length;e++){let t=i[e];n.some(e=>t.renderingEngineId===e.renderingEngineId&&t.viewportId===e.viewportId)||n.push(t)}return n}(this._sourceViewports,this._targetViewports),t=this.remove.bind(this),n=e=>{t(e.detail.element)};e.forEach(e=>{let t=this.getEventSource(e);t&&(t.removeEventListener(e$.A.ELEMENT_DISABLED,n),t.addEventListener(e$.A.ELEMENT_DISABLED,n))})}getEventSource(e){return"element"===this._eventSource?this.getViewportElement(e):ez.A}getViewportElement(e){let{renderingEngineId:t,viewportId:n}=e,i=(0,nG.lD)(t);if(!i)return null;let a=i.getViewport(n);return a?a.element:null}}function cs(e,t){return e.findIndex(e=>t.renderingEngineId===e.renderingEngineId&&t.viewportId===e.viewportId)}function cd(e,t){return e.some(e=>e.renderingEngineId===t.renderingEngineId&&e.viewportId===t.viewportId)}let ch=cl,cc=function(e,t,n,i){if(e0.synchronizers.some(t=>t.id===e))throw Error(`Synchronizer with id '${e}' already exists.`);let a=new ch(e,t,n,i);return e0.synchronizers.push(a),a},cu=function(){for(;e0.synchronizers.length>0;)e0.synchronizers.pop().destroy()},cg=function(e){return e0.synchronizers.find(t=>t.id===e)},cm=function(){return e0.synchronizers},cp=function(e){let t=e0.synchronizers.findIndex(t=>t.id===e);t>-1&&(e0.synchronizers[t].destroy(),e0.synchronizers.splice(t,1))};var cf=n(1227),cv=n.n(cf),cI=n(1766);class cC extends oK{constructor(e,t,n,i,a){super(i||cC.getUniqueInstanceName("image-cursor"),a),this.url=e,this.x=Number(t)||0,this.y=Number(n)||0}getStyleProperty(){let{url:e,x:t,y:n}=this,i=`url('${e}')`;return t>=0&&n>=0&&(t>0||n>0)&&(i+=` ${t} ${n}`),this.addFallbackStyleProperty(i)}static getUniqueInstanceName(e){return`${e}-${cI.A(cC)}`}}let c_={iconContent:"",iconSize:16,viewBox:{x:16,y:16},mousePoint:{x:8,y:8},mousePointerGroupString:`
3    <path stroke="{{color}}" d="M8 16L8 0"></path>
4    <path stroke="{{color}}" d="M16 8L0 8"></path>
5  `},cE={x:127,y:60},cw=`
6<rect fill="{{color}}" x="80.19" y="25.03" width="47.14" height="15.85"/>
7`,cA=`
8<rect fill="{{color}}" x="80.19" y="25.03" width="47.14" height="15.85"/>
9<rect fill="{{color}}" x="95.84" y="9.38" width="15.85" height="47.14"/>
10`,cS='<path fill="{{color}}" d="M82.89,10a12.09,12.09,0,0,0-16.8-2.5l-27.5,20.4-8.5-6.3a2.93,2.93,0,0,1-1.1-3,14.66,14.66,0,0,0,.1-6.6,14.08,14.08,0,1,0-6.5,15.2,2.87,2.87,0,0,1,3.2.2l8.2,6.1-8.2,6.1a2.87,2.87,0,0,1-3.2.2,14.16,14.16,0,1,0,6.7,14.4,14,14,0,0,0-.3-5.8,2.93,2.93,0,0,1,1.1-3l8.5-6.3,27.5,20.4A11.91,11.91,0,0,0,82.89,57l-31.7-23.5ZM15.29,21a5.9,5.9,0,1,1,5.9-5.9A5.91,5.91,0,0,1,15.29,21Zm0,36.8a5.9,5.9,0,1,1,5.9-5.9A5.91,5.91,0,0,1,15.29,57.77Zm28.3-21.5a2.8,2.8,0,1,1,2.8-2.8A2.8,2.8,0,0,1,43.59,36.27Z" transform="translate(-1.17 -0.96)"/>',cy='<path fill="{{color}}" d="M8.86,2.25V66.08H72.69V2.25H8.86ZM65.28,58.67h-49v-49h49v49Z" transform="translate(-8.86 -2.25)"/>',cb='<path fill="{{color}}" d="M40.77,2.25A31.92,31.92,0,1,0,72.69,34.16,31.92,31.92,0,0,0,40.77,2.25Zm0,57.63A25.71,25.71,0,1,1,66.48,34.16,25.71,25.71,0,0,1,40.77,59.87Z" transform="translate(-8.86 -2.25)"/>',cT={Angle:cM(c_,{name:"Angle",iconContent:`<path fill="{{color}}" d="M1203 544q0 13-10 23l-393 393 393 393q10 10 10 23t-10 23l-50
11    50q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l466-466q10-10 23-10t23
12    10l50 50q10 10 10 23z" />`,viewBox:{x:1792,y:1792}}),ArrowAnnotate:cM(c_,{name:"ArrowAnnotate",iconContent:`<g id="arrowAnnotate-group" fill="none" stroke-width="1" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">
13    <path id="arrowAnnotate-arrow" d="M23,7 l-15,15 M7,17 l0,6 6,0" stroke-width="2" />
14  </g>`,viewBox:{x:24,y:24}}),Bidirectional:cM(c_,{name:"Bidirectional",iconContent:`<g fill="{{color}}" stroke-width="3" stroke="{{color}}">
15    <path d="M27.63 3.21L3.12 28.81"></path>
16    <path d="M27.63 15.75L15.27 4.43"></path>
17    <path d="M16.5 4.28C16.5 4.96 15.95 5.51 15.27 5.51C14.59 5.51 14.03 4.96 14.03 4.28C14.03 3.59 14.59 3.04 15.27 3.04C15.95 3.04 16.5 3.59 16.5 4.28Z" ></path>
18    <path d="M28.87 3.19C28.87 3.87 28.31 4.43 27.63 4.43C26.95 4.43 26.4 3.87 26.4 3.19C26.4 2.51 26.95 1.95 27.63 1.95C28.31 1.95 28.87 2.51 28.87 3.19Z"></path>
19    <path d="M28.87 15.75C28.87 16.43 28.31 16.99 27.63 16.99C26.95 16.99 26.4 16.43 26.4 15.75C26.4 15.07 26.95 14.51 27.63 14.51C28.31 14.51 28.87 15.07 28.87 15.75Z"></path>
20    <path d="M4.73 28.44C4.73 29.12 4.17 29.68 3.49 29.68C2.81 29.68 2.25 29.12 2.25 28.44C2.25 27.76 2.81 27.2 3.49 27.2C4.17 27.2 4.73 27.76 4.73 28.44Z"></path>
21  </g>`,viewBox:{x:48,y:48}}),CobbAngle:cM(c_,{name:"CobbAngle",iconContent:`<g stroke="{{color}}" stroke-width="3">
22    <path d="M28.59 2.34L3.82 12.32"></path>
23    <path d="M28.59 29.66L3.82 19.68"></path>
24    <path stroke-dasharray="2" fill-opacity="0" d="M12.37
25      23.06C12.67 22.36 12.85 21.93 12.92 21.76C14.6 17.8 14.68 13.35 13.15
26      9.33C13.11 9.24 13.02 9 12.88 8.63">
27    </path>
28  </g>`,viewBox:{x:32,y:32}}),CircleROI:cM(c_,{name:"CircleROI",iconContent:'<circle stroke="{{color}}" fill="none" stroke-width="3" cx="16" cy="16" r="14" />',viewBox:{x:32,y:32}}),EllipticalROI:cM(c_,{name:"EllipticalROI",iconContent:`<path stroke="{{color}}" fill="none" stroke-width="3" d="M30.74 15.76C30.74 20.99 24.14 25.23 16
29    25.23C7.86 25.23 1.26 20.99 1.26 15.76C1.26 10.54 7.86 6.3 16 6.3C24.14
30    6.3 30.74 10.54 30.74 15.76Z" />`,viewBox:{x:32,y:32}}),FreehandROI:cM(c_,{name:"FreehandROI",iconContent:`<g fill="{{color}}" stroke="{{color}}" stroke-width="2">
31    <ellipse ry="1" rx="1" id="svg_3" cy="4.240343" cx="14.306499"/>
32    <line id="svg_4" y2="3.58462" x2="12.242186" y1="3.997482" x1="13.432202"/>
33    <line id="svg_5" y2="3.268901" x2="10.857882" y1="3.608906" x1="12.387902"/>
34    <line id="svg_6" y2="3.147471" x2="9.740724" y1="3.293187" x1="10.955026"/>
35    <line id="svg_7" y2="3.147471" x2="8.089274" y1="3.196043" x1="9.983585"/>
36    <line id="svg_8" y2="3.268901" x2="6.874972" y1="3.123185" x1="8.307848"/>
37    <line id="svg_9" y2="3.657478" x2="5.587812" y1="3.220329" x1="7.020688"/>
38    <line id="svg_10" y2="4.046054" x2="4.737801" y1="3.560334" x1="5.854959"/>
39    <line id="svg_11" y2="4.337487" x2="4.300652" y1="3.997482" x1="4.834945"/>
40    <line id="svg_12" y2="4.726063" x2="3.88779" y1="4.191771" x1="4.470655"/>
41    <line id="svg_15" y2="5.3575" x2="3.377783" y1="4.604633" x1="3.960648"/>
42    <line id="svg_16" y2="6.183226" x2="2.916348" y1="5.138926" x1="3.547785"/>
43    <line id="svg_17" y2="6.960379" x2="2.770632" y1="5.867507" x1="3.037779"/>
44    <line id="svg_18" y2="7.713246" x2="2.673488" y1="6.741804" x1="2.819204"/>
45    <line id="svg_19" y2="8.684687" x2="2.697774" y1="7.616102" x1="2.673488"/>
46    <line id="svg_20" y2="9.753273" x2="2.892062" y1="8.611829" x1="2.697774"/>
47    <line id="svg_21" y2="10.724714" x2="3.134923" y1="9.534698" x1="2.84349"/>
48    <line id="svg_23" y2="11.647583" x2="3.596357" y1="10.578998" x1="3.086351"/>
49    <line id="svg_25" y2="12.521881" x2="4.276366" y1="11.501867" x1="3.499213"/>
50    <line id="svg_26" y2="13.930471" x2="5.830673" y1="12.376165" x1="4.13065"/>
51    <line id="svg_28" y2="14.707624" x2="7.263549" y1="13.881899" x1="5.733528"/>
52    <line id="svg_29" y2="15.339061" x2="8.963571" y1="14.61048" x1="7.06926"/>
53    <line id="svg_30" y2="15.581921" x2="10.882168" y1="15.314775" x1="8.817855"/>
54    <line id="svg_31" y2="15.460491" x2="12.023612" y1="15.581921" x1="10.785024"/>
55    <line id="svg_33" y2="15.120487" x2="13.092197" y1="15.484777" x1="11.877895"/>
56    <line id="svg_34" y2="14.586194" x2="13.86935" y1="15.217631" x1="12.897909"/>
57    <line id="svg_35" y2="13.833327" x2="14.597931" y1="14.756196" x1="13.699348"/>
58    <line id="svg_37" y2="12.716169" x2="15.180796" y1="13.881899" x1="14.549359"/>
59    <line id="svg_39" y2="11.429009" x2="15.520801" y1="12.813313" x1="15.15651"/>
60    <ellipse ry="1" rx="1" id="svg_40" cy="10.967574" cx="15.520801"/>
61  </g>`,viewBox:{x:18,y:18}}),FreehandROISculptor:cM(c_,{name:"FreehandROISculptor",iconContent:`<g id="icon-freehand-sculpt" fill="none" stroke-width="1.5" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">
62    <line id="svg_1" y2="2.559367" x2="10.184807" y1="4.467781" x1="8.81711"/>
63    <line id="svg_4" y2="1.493836" x2="11.727442" y1="2.766112" x1="10.089386"/>
64    <line id="svg_7" y2="1.080346" x2="13.047428" y1="1.748291" x1="11.345759"/>
65    <line id="svg_8" y2="1.000829" x2="14.351511" y1="1.112153" x1="12.77707"/>
66    <line id="svg_9" y2="1.350705" x2="15.242104" y1="0.905408" x1="13.969828"/>
67    <line id="svg_10" y2="2.098167" x2="15.862339" y1="1.14396" x1="14.955842"/>
68    <line id="svg_11" y2="3.195505" x2="16.41896" y1="1.939133" x1="15.766918"/>
69    <line id="svg_12" y2="4.292843" x2="16.530284" y1="2.925147" x1="16.387153"/>
70    <line id="svg_16" y2="5.644637" x2="16.196311" y1="3.831643" x1="16.593898"/>
71    <line id="svg_18" y2="7.266789" x2="15.623787" y1="5.19934" x1="16.275829"/>
72    <line id="svg_19" y2="10.813258" x2="14.526449" y1="6.726071" x1="15.766918"/>
73    <line id="svg_20" y2="5.056209" x2="8.085552" y1="4.181519" x1="8.976145"/>
74    <line id="svg_23" y2="5.326568" x2="7.481221" y1="4.78585" x1="8.403621"/>
75    <line id="svg_24" y2="5.565119" x2="6.749662" y1="5.294761" x1="7.624352"/>
76    <line id="svg_25" y2="5.994512" x2="5.429675" y1="5.533312" x1="6.956407"/>
77    <line id="svg_27" y2="6.551133" x2="4.284627" y1="5.962706" x1="5.572807"/>
78    <line id="svg_28" y2="7.584858" x2="3.044158" y1="6.392099" x1="4.427758"/>
79    <line id="svg_29" y2="8.84123" x2="2.185372" y1="7.489437" x1="3.219096"/>
80    <line id="svg_31" y2="10.606513" x2="1.644654" y1="8.602678" x1="2.280792"/>
81    <line id="svg_32" y2="13.214679" x2="1.48562" y1="10.352058" x1="1.724171"/>
82    <line id="svg_33" y2="14.375631" x2="1.676461" y1="12.992031" x1="1.453813"/>
83    <line id="svg_34" y2="15.298031" x2="2.264889" y1="14.152983" x1="1.517427"/>
84    <line id="svg_35" y2="16.172721" x2="3.521261" y1="14.948155" x1="1.915013"/>
85    <line id="svg_36" y2="16.824762" x2="5.207027" y1="15.997783" x1="3.28271"/>
86    <line id="svg_38" y2="17.063314" x2="7.035924" y1="16.745245" x1="4.968475"/>
87    <line id="svg_39" y2="16.888376" x2="9.278311" y1="17.047411" x1="6.733758"/>
88    <line id="svg_40" y2="16.284045" x2="10.661911" y1="16.983797" x1="8.992048"/>
89    <line id="svg_41" y2="15.313934" x2="11.647925" y1="16.395369" x1="10.455166"/>
90    <line id="svg_44" y2="13.898527" x2="12.82478" y1="15.425259" x1="11.504794"/>
91    <line id="svg_45" y2="12.037824" x2="14.144766" y1="14.312017" x1="12.522614"/>
92    <line id="svg_47" y2="10.59061" x2="14.605966" y1="12.228665" x1="13.953925"/>
93    <ellipse ry="1" rx="1" id="svg_48" cy="3.982726" cx="13.460918"/>
94  </g>`,viewBox:{x:18,y:18}}),Length:cM(c_,{name:"Length",iconContent:`<g id="length-group" fill="none" stroke-width="1" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">
95    <path id="length-dashes" d="m22.5,6 -16.5,16.5" stroke-width="3" stroke-dasharray="0.6666,5" />
96  </g>`,viewBox:{x:24,y:24}}),Height:cM(c_,{name:"Height",iconContent:'<path d="m 6 22 l 8.5 0 v -16 h 8" stroke-width="3" fill="none" stroke="{{color}}" />',viewBox:{x:24,y:24}}),Probe:cM(c_,{name:"Probe",iconContent:`<path fill="{{color}}" d="M1152 896q0 106-75 181t-181 75-181-75-75-181 75-181 181-75 181 75
97    75 181zm-256-544q-148 0-273 73t-198 198-73 273 73 273 198 198 273 73 273-73
98    198-198 73-273-73-273-198-198-273-73zm768 544q0 209-103 385.5t-279.5
99    279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5
100    385.5-103 385.5 103 279.5 279.5 103 385.5z" />`,viewBox:{x:1792,y:1792}}),RectangleROI:cM(c_,{name:"RectangleROI",iconContent:`<path fill="{{color}}" d="M1312 256h-832q-66 0-113 47t-47 113v832q0 66 47
101    113t113 47h832q66 0 113-47t47-113v-832q0-66-47-113t-113-47zm288 160v832q0
102    119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119
103    84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z" />`,viewBox:{x:1792,y:1792}}),Label:cM(c_,{name:"Label",iconContent:`<path fill="{{color}}" d="M789 559l-170 450q33 0 136.5 2t160.5 2q19 0
104    57-2-87-253-184-452zm-725 1105l2-79q23-7 56-12.5t57-10.5 49.5-14.5 44.5-29
105    31-50.5l237-616 280-724h128q8 14 11 21l205 480q33 78 106 257.5t114 274.5q15
106    34 58 144.5t72 168.5q20 45 35 57 19 15 88 29.5t84 20.5q6 38 6 57 0 5-.5
107    13.5t-.5 12.5q-63 0-190-8t-191-8q-76 0-215 7t-178 8q0-43 4-78l131-28q1 0
108    12.5-2.5t15.5-3.5 14.5-4.5 15-6.5 11-8 9-11
109    2.5-14q0-16-31-96.5t-72-177.5-42-100l-450-2q-26 58-76.5 195.5t-50.5 162.5q0
110    22 14 37.5t43.5 24.5 48.5 13.5 57 8.5 41 4q1 19 1 58 0 9-2 27-58
111    0-174.5-10t-174.5-10q-8 0-26.5 4t-21.5 4q-80 14-188 14z" />`,viewBox:{x:1792,y:1792}}),Crosshairs:cM(c_,{name:"Crosshairs",iconContent:`<path fill="{{color}}" d="M1325 1024h-109q-26 0-45-19t-19-45v-128q0-26
112    19-45t45-19h109q-32-108-112.5-188.5t-188.5-112.5v109q0 26-19 45t-45
113    19h-128q-26 0-45-19t-19-45v-109q-108 32-188.5 112.5t-112.5 188.5h109q26
114    0 45 19t19 45v128q0 26-19 45t-45 19h-109q32 108 112.5 188.5t188.5
115    112.5v-109q0-26 19-45t45-19h128q26 0 45 19t19 45v109q108-32
116    188.5-112.5t112.5-188.5zm339-192v128q0 26-19 45t-45 19h-143q-37 161-154.5
117    278.5t-278.5 154.5v143q0 26-19 45t-45 19h-128q-26
118    0-45-19t-19-45v-143q-161-37-278.5-154.5t-154.5-278.5h-143q-26
119    0-45-19t-19-45v-128q0-26 19-45t45-19h143q37-161
120    154.5-278.5t278.5-154.5v-143q0-26 19-45t45-19h128q26 0 45 19t19 45v143q161
121    37 278.5 154.5t154.5 278.5h143q26 0 45 19t19 45z" />`,viewBox:{x:1792,y:1792}}),Eraser:cM(c_,{name:"Eraser",iconContent:`<path transform="translate(0,1792) scale(1,-1)" fill="{{color}}" d="M960 1408l336-384h-768l-336 384h768zm1013-1077q15
122    34 9.5 71.5t-30.5 65.5l-896 1024q-38 44-96 44h-768q-38
123    0-69.5-20.5t-47.5-54.5q-15-34-9.5-71.5t30.5-65.5l896-1024q38-44 96-44h768q38
124    0 69.5 20.5t47.5 54.5z" />`,viewBox:{x:2048,y:1792}}),Magnify:cM(c_,{name:"Magnify",iconContent:`<path fill="{{color}}" d="M508.5 481.6l-129-129c-2.3-2.3-5.3-3.5-8.5-3.5h-10.3C395
125    312 416 262.5 416 208 416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c54.5
126    0 104-21 141.1-55.2V371c0 3.2 1.3 6.2 3.5 8.5l129 129c4.7 4.7 12.3 4.7 17
127    0l9.9-9.9c4.7-4.7 4.7-12.3 0-17zM208 384c-97.3 0-176-78.7-176-176S110.7 32 208
128    32s176 78.7 176 176-78.7 176-176 176z" />`,viewBox:{x:512,y:512}}),Pan:cM(c_,{name:"Pan",iconContent:`<path fill="{{color}}" d="M1411 541l-355 355 355 355 144-144q29-31 70-14 39 17
129    39 59v448q0 26-19 45t-45 19h-448q-42 0-59-40-17-39 14-69l144-144-355-355-355
130    355 144 144q31 30 14 69-17 40-59 40h-448q-26 0-45-19t-19-45v-448q0-42 40-59
131    39-17 69 14l144 144 355-355-355-355-144 144q-19 19-45 19-12
132    0-24-5-40-17-40-59v-448q0-26 19-45t45-19h448q42 0 59 40 17 39-14 69l-144
133    144 355 355 355-355-144-144q-31-30-14-69 17-40 59-40h448q26 0 45 19t19
134    45v448q0 42-39 59-13 5-25 5-26 0-45-19z" />`,viewBox:{x:1792,y:1792}}),Rotate:cM(c_,{name:"Rotate",iconContent:`<path fill="{{color}}" d="M1664 256v448q0 26-19 45t-45 19h-448q-42 0-59-40-17-39
135    14-69l138-138q-148-137-349-137-104 0-198.5 40.5t-163.5 109.5-109.5
136    163.5-40.5 198.5 40.5 198.5 109.5 163.5 163.5 109.5 198.5 40.5q119 0
137    225-52t179-147q7-10 23-12 15 0 25 9l137 138q9 8 9.5 20.5t-7.5 22.5q-109
138    132-264 204.5t-327 72.5q-156 0-298-61t-245-164-164-245-61-298 61-298
139    164-245 245-164 298-61q147 0 284.5 55.5t244.5 156.5l130-129q29-31 70-14
140    39 17 39 59z" />`,viewBox:{x:1792,y:1792}}),StackScroll:cM(c_,{name:"StackScroll",iconContent:`<path fill="{{color}}" d="M24 21v2c0 0.547-0.453 1-1 1h-22c-0.547
141    0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 13v2c0
142    0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547
143    0 1 0.453 1 1zM24 5v2c0 0.547-0.453 1-1 1h-22c-0.547
144    0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1z" />`,viewBox:{x:24,y:28}}),WindowLevelRegion:cM(c_,{name:"WindowLevelRegion",iconContent:`<path fill="{{color}}" d="M1664 416v960q0 119-84.5 203.5t-203.5 84.5h-960q-119
145    0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5
146    84.5t84.5 203.5z" />`,viewBox:{x:1792,y:1792}}),WindowLevel:cM(c_,{name:"WindowLevel",iconContent:`
147    <path fill="{{color}}" d="M14.5,3.5 a1 1 0 0 1 -11,11 Z" stroke="none" opacity="0.8" />
148    <circle cx="9" cy="9" r="8" fill="none" stroke-width="2" stroke="{{color}}" />`,viewBox:{x:18,y:18}}),Zoom:cM(c_,{name:"Zoom",iconContent:`
149  <path fill="{{color}}" d="M508.5 481.6l-129-129c-2.3-2.3-5.3-3.5-8.5-3.5h-10.3C395
150    312 416 262.5 416 208 416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c54.5
151    0 104-21 141.1-55.2V371c0 3.2 1.3 6.2 3.5 8.5l129 129c4.7 4.7 12.3 4.7 17
152    0l9.9-9.9c4.7-4.7 4.7-12.3 0-17zM208 384c-97.3 0-176-78.7-176-176S110.7 32 208
153    32s176 78.7 176 176-78.7 176-176 176z" />
154  <path fill="{{color}}" transform="scale(0.22,0.22) translate(1400,0)" d="M1216
155    320q0 26-19 45t-45 19h-128v1024h128q26 0 45 19t19 45-19 45l-256 256q-19
156    19-45 19t-45-19l-256-256q-19-19-19-45t19-45 45-19h128v-1024h-128q-26
157    0-45-19t-19-45 19-45l256-256q19-19 45-19t45 19l256 256q19 19 19 45z" />`,viewBox:{x:640,y:512}}),SegmentationFreeHandEraseInside:cM(c_,{name:"SegmentationFreeHandEraseInside",iconContent:`${cS} ${cw}`,viewBox:cE}
157),SegmentationFreeHandFillInside:cM(c_,{name:"SegmentationFreeHandFillInside",iconContent:`${cS} ${cA}`,viewBox:cE}),SegmentationFreeHandEraseOutside:cM(c_,{name:"SegmentationFreeHandEraseOutside",iconContent:`${cS} ${cw}`,viewBox:cE}),SegmentationFreeHandFillOutside:cM(c_,{name:"SegmentationFreeHandFillOutside",iconContent:`${cS} ${cA}`,viewBox:cE}),SegmentationRectangleEraseInside:cM(c_,{name:"SegmentationRectangleEraseInside",iconContent:`${cy} ${cw}`,viewBox:cE}),RectangleScissor:cM(c_,{name:"RectangleScissor",iconContent:`${cy} ${cA}`,viewBox:cE}),"RectangleScissor.FILL_INSIDE":cM(c_,{name:"RectangleScissor.FILL_INSIDE",iconContent:`${cy} ${cA}`,viewBox:cE}),"RectangleScissor.FILL_OUTSIDE":cM(c_,{name:"RectangleScissor.FILL_OUTSIDE",iconContent:`${cy} ${cA}`,viewBox:cE}),"RectangleScissor.ERASE_OUTSIDE":cM(c_,{name:"RectangleScissor.ERASE_OUTSIDE",iconContent:`${cy} ${cw}`,viewBox:cE}),"RectangleScissor.ERASE_INSIDE":cM(c_,{name:"RectangleScissor.ERASE_INSIDE",iconContent:`${cy} ${cw}`,viewBox:cE}),CircleScissor:cM(c_,{name:"CircleScissor",iconContent:`${cb} ${cA}`,viewBox:cE}),"CircleScissor.FILL_INSIDE":cM(c_,{name:"CircleScissor.FILL_INSIDE",iconContent:`${cb} ${cA}`,viewBox:cE}),"CircleScissor.ERASE_OUTSIDE":cM(c_,{name:"CircleScissor.ERASE_OUTSIDE",iconContent:`${cb} ${cw}`,viewBox:cE}),"CircleScissor.FILL_OUTSIDE":cM(c_,{name:"CircleScissor.FILL_OUTSIDE",iconContent:`${cb} ${cA}`,viewBox:cE})};function cM(e,t){return Object.assign(Object.create(e),{...t,name:t.name||e.name})}function cD(e,t,n){cT[e]=cM(c_,{iconContent:t,viewBox:n})}let cO=Object.keys(cT),cx=l2.Highlighted,cP=e1.Active;class cL extends cC{constructor(e,t,n,i,a){super(e,t,n,i,a)}static getDefinedCursor(e,t=!1,n){var i,a,o;n||(n=lz("color",{},cx,cP));let r=(i=e,a=t,o=n,`${a?"pointer":"cursor"}:${i}/${o}`),l=super.getDefinedCursor(r),s=Number(lz("pointerStrokeWidth",{}));if(!l){let i=cT[e];
157i&&(l=function(e,t,n,i,a,o){let{x:r,y:l}=e.mousePoint;return new cL(function(e,t,n){let i=new Blob([(t?function(e,t){let{iconContent:n,iconSize:i,viewBox:a,mousePointerGroupString:o}=e,r=i/Math.max(a.x,a.y,1),l=16+i,s=t.pointerStrokeWidth||1;return cN(`
158    <svg data-icon="cursor" role="img" xmlns="http://www.w3.org/2000/svg"
159      width="${l}" height="${l}" viewBox="0 0 ${l} ${l}">
160      <g stroke-width="${s}">${o}</g>
161      <g transform="translate(16, 16) scale(${r})">${n}</g>
162    </svg>`,t)}:function(e,t){let{iconContent:n,iconSize:i,viewBox:a}=e;return cN(`
163    <svg data-icon="cursor" role="img" xmlns="http://www.w3.org/2000/svg"
164      width="${i}" height="${i}" viewBox="0 0
165      ${a.x} ${a.y}">
166      ${n}
167    </svg>`,t)})(e,n)],{type:"image/svg+xml"}),a=URL.createObjectURL(i);return`${a}#${e.name||"unknown"}-${t?"pointer":"cursor"}`}(e,n,{color:i,pointerStrokeWidth:a}),r,l,t,o)}(i,r,t,n,s,super.getDefinedCursor("default")),super.setDefinedCursor(r,l))}return l}}function cN(e,t){let n=Object(t),i=Object.prototype.hasOwnProperty.bind(n);return(e+"").replace(/\{\{(\w+)\}\}/g,(e,t)=>i(t)?n[t]+"":"")}let{Active:cR,Passive:ck,Enabled:cU,Disabled:cV}=e1,cF=[{mouseButton:I.Primary}];class cG{constructor(e){this.viewportsInfo=[],this.toolOptions={},this.currentActivePrimaryToolName=null,this.prevActivePrimaryToolName=null,this.restoreToolOptions={},this._toolInstances={},this.id=e}getViewportIds(){return this.viewportsInfo.map(({viewportId:e})=>e)}getViewportsInfo(){return this.viewportsInfo.slice()}getToolInstance(e){let t=this._toolInstances[e];return t||void console.warn(`'${e}' is not registered with this toolGroup (${this.id}).`)}getToolInstances(){return this._toolInstances}hasTool(e){return!!this._toolInstances[e]}addTool(e,t={}){let n=e0.tools[e],i=void 0!==e&&""!==e,a=this.toolOptions[e];if(!i)return void console.warn("Tool with configuration did not produce a toolName: ",t);if(!n)return void console.warn(`'${e}' is not registered with the library. You need to use cornerstoneTools.addTool to register it.`);if(a)return void console.warn(`'${e}' is already registered for ToolGroup ${this.id}.`);let{toolClass:o}
167=n,r=new o({name:e,toolGroupId:this.id,configuration:t});this._toolInstances[e]=r}addToolInstance(e,t,n={}){let i=e0.tools[e]?.toolClass;if(!i){let n=e0.tools[t].toolClass;class a extends n{}a.toolName=e,i=a,e0.tools[e]={toolClass:a}}this.addTool(i.toolName,n)}addViewport(e,t){if("string"!=typeof e)throw Error("viewportId must be defined and be a string");let n=this._findRenderingEngine(e,t);this.viewportsInfo.some(({viewportId:t})=>t===e)||this.viewportsInfo.push({viewportId:e,renderingEngineId:n});let i=this.getActivePrimaryMouseButtonTool();this.setViewportsCursorByToolName(i);let a={toolGroupId:this.id,viewportId:e,renderingEngineId:n};(0,eq.A)(ez.A,eK.TOOLGROUP_VIEWPORT_ADDED,a)}removeViewports(e,t){let n=[];if(this.viewportsInfo.forEach((i,a)=>{let o=!1;i.renderingEngineId===e&&(o=!0,t&&i.viewportId!==t&&(o=!1)),o&&n.push(a)}),n.length)for(let e=n.length-1;e>=0;e--)this.viewportsInfo.splice(n[e],1);let i={toolGroupId:this.id,viewportId:t,renderingEngineId:e};(0,eq.A)(ez.A,eK.TOOLGROUP_VIEWPORT_REMOVED,i)}setActiveStrategy(e,t){let n=this._toolInstances[e];if(void 0===n)return void console.warn(`Tool ${e} not added to toolGroup, can't set tool configuration.`);n.setActiveStrategy(t)}setToolMode(e,t,n={}){return e?t===e1.Active?void this.setToolActive(e,n||this.restoreToolOptions[e]):t===e1.Passive?void this.setToolPassive(e):t===e1.Enabled?void this.setToolEnabled(e):t===e1.Disabled?void this.setToolDisabled(e):void console.warn("setToolMode: mode must be defined"):void console.warn("setToolMode: toolName must be defined")}setToolActive(e,t={}){let n=this._toolInstances[e];if(void 0===n)return void console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);if(!n)return void console.warn(`'${e}' instance ${n} is not registered with this toolGroup, can't set tool mode.`);let i=[...this.toolOptions[e]?this.toolOptions[e].bindings:[],...t.bindings?t.bindings:[]].reduce((e,t)=>{let n=void 0!==t.numTouchPoints,i=void 0!==t.mouseButton;return!e.some(e=>cB(e,t))&&(n||i)&&e.push(t),e},[]);if(this.toolOptions[e]={bindings:i,mode:cR},this._toolInstances[e].mode=cR,this._hasMousePrimaryButtonBinding(t))this.setViewportsCursorByToolName(e),n.isPrimary=!0;else{if(!this.getActivePrimaryMouseButtonTool()){let e=oK.getDefinedCursor("default");this._setCursorForViewports(e)}n.isPrimary=!1}this._hasMousePrimaryButtonBinding(t)&&(null===this.prevActivePrimaryToolName?this.prevActivePrimaryToolName=e:this.prevActivePrimaryToolName=this.currentActivePrimaryToolName,this.currentActivePrimaryToolName=e),"function"==typeof n.onSetToolActive&&n.onSetToolActive(),this._renderViewports();let a={toolGroupId:this.id,toolName:e,toolBindingsOptions:t};(0,eq.A)(ez.A,eK.TOOL_ACTIVATED,a),this._triggerToolModeChangedEvent(e,cR,t)}setToolPassive(e,t){let n=this._toolInstances[e];if(void 0===n)return void console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);let i=this.getToolOptions(e),a=Object.assign({bindings:i?i.bindings:[]},i,{mode:ck}),o=Array.isArray(t?.removeAllBindings)?t.removeAllBindings:this.getDefaultPrimaryBindings();a.bindings=a.bindings.filter(e=>t?.removeAllBindings!==!0&&!o.some(t=>cB(e,t)));let r=ck;0!==a.bindings.length&&(a.mode=r=cR),this.toolOptions[e]=a,n.mode=r,n.isPrimary=!1,"function"==typeof n.onSetToolPassive&&n.onSetToolPassive(),this._renderViewports(),this._triggerToolModeChangedEvent(e,ck)}setToolEnabled(e){let t=this._toolInstances[e];if(void 0===t)return void console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);this.toolOptions[e]={bindings:[],mode:cU},t.mode=cU,"function"==typeof t.onSetToolEnabled&&t.onSetToolEnabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,cU)}setToolDisabled(e){let t=this._toolInstances[e];if(void 0===t)return void console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);this.restoreToolOptions[e]=this.toolOptions[e],this.toolOptions[e]={bindings:[],mode:cV},t.mode=cV,"function"==typeof t.onSetToolDisabled&&t.onSetToolDisabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,cV)}getToolOptions(e){let t=this.toolOptions[e];if(void 0!==t)return t}getActivePrimaryMouseButtonTool(){return Object.keys(this.toolOptions).find(e=>{let t=this.toolOptions[e];return t.mode===cR&&this._hasMousePrimaryButtonBinding(t)})}setViewportsCursorByToolName(e,t){let n=this._getCursor(e,t);this._setCursorForViewports(n)}_getCursor(e,t){let n,i;return t&&(n=`${e}.${t}`,i=cL.getDefinedCursor(n,!0))?i:(n=`${e}`,(i=cL.getDefinedCursor(n,!0))||(n=e,i=cL.getDefinedCursor(n,!0)))?i:oK.getDefinedCursor("default")}_setCursorForViewports(e){nr.A.getRuntimeSettings().get("useCursors")&&this.viewportsInfo.forEach(({renderingEngineId:t,viewportId:n})=>{let i=(0,ej.b1)(n,t);if(!i)return;
167let{viewport:a}=i;oQ(a.element,e)})}setToolConfiguration(e,t,n){let i,a=this._toolInstances[e];return void 0===a?(console.warn(`Tool ${e} not present, can't set tool configuration.`),!1):(i=n?t:Object.assign(a.configuration,t),a.configuration=i,"function"==typeof a.onSetToolConfiguration&&a.onSetToolConfiguration(),this._renderViewports(),!0)}getDefaultMousePrimary(){return I.Primary}getDefaultPrimaryBindings(){return cF}getToolConfiguration(e,t){if(void 0===this._toolInstances[e])return void console.warn(`Tool ${e} not present, can't set tool configuration.`);let n=cv()(this._toolInstances[e].configuration,t)||this._toolInstances[e].configuration;return nH.G(n)}getPrevActivePrimaryToolName(){return this.prevActivePrimaryToolName}setActivePrimaryTool(e){let t=this.getCurrentActivePrimaryToolName();this.setToolDisabled(t),this.setToolActive(e,{bindings:[{mouseButton:I.Primary}]})}getCurrentActivePrimaryToolName(){return this.currentActivePrimaryToolName}clone(e,t=null){let n=s3(e);return n?console.debug(`ToolGroup ${e} already exists`):(n=new cG(e),e0.toolGroups.push(n),t=t??(()=>!0),Object.keys(this._toolInstances).filter(t).forEach(e=>{let t=this._toolInstances[e],i=this.toolOptions[e],a=t.mode;n.addTool(e),n.setToolMode(e,a,{bindings:i.bindings??[]})})),n}_hasMousePrimaryButtonBinding(e){let t=this.getDefaultPrimaryBindings();return e?.bindings?.some(e=>t.some(t=>cB(e,t)))}_renderViewports(){this.viewportsInfo.forEach(({renderingEngineId:e,viewportId:t})=>{(0,nG.lD)(e).renderViewport(t)})}_triggerToolModeChangedEvent(e,t,n){let i={toolGroupId:this.id,toolName:e,mode:t,toolBindingsOptions:n};(0,eq.A)(ez.A,eK.TOOL_MODE_CHANGED,i)}_findRenderingEngine(e,t){let n=(0,nG.qO)();if(n?.length===0)throw Error("No rendering engines found.");if(t)return t;let i=n.filter(t=>t.getViewport(e));if(0===i.length){if(1===n.length)return n[0].id;throw Error("No rendering engines found that contain the viewport with the same viewportId, you must specify a renderingEngineId.")}if(i.length>1)throw Error("Multiple rendering engines found that contain the viewport with the same viewportId, you must specify a renderingEngineId.");return i[0].id}}function cB(e,t){return e.mouseButton===t.mouseButton&&e.numTouchPoints===t.numTouchPoints&&e.modifierKey===t.modifierKey}let cH=function(e){if(e0.toolGroups.some(t=>t.id===e))return void console.warn(`'${e}' already exists.`);let t=new cG(e);return e0.toolGroups.push(t),t},cW=function(){return e0.toolGroups},c$="4.17.0";function cz(e,t,n,i){let{camera:a}=i.detail,o=(0,nG.lD)(n.renderingEngineId);if(!o)throw Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);let r=o.getViewport(n.viewportId);r.setCamera(a),r.render()}let{CAMERA_MODIFIED:cX}=e$.A;function cj(e){return cc(e,cX,cz)}function cq(e,t,n,i,a){let o=(0,nG.lD)(n.renderingEngineId);if(!o)throw Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);let r=o.getViewport(n.viewportId),l=o.getViewport(t.viewportId).getViewPresentation(a);r.setViewPresentation(l),r.render()}let{CAMERA_MODIFIED:cK}=e$.A;function cY(e,t){return cc(e,cK,cq,{viewPresentation:t})}function cZ(e,t,n,i,a){let{volumeId:o,range:r,invertStateChanged:l,invert:s,colormap:d}=i.detail,h=(0,nG.lD)(n.renderingEngineId);if(!h)throw Error(`Rendering Engine does not exist: ${n.renderingEngineId}`);let c=h.getViewport(n.viewportId),u={voiRange:r};if(a?.syncInvertState&&l&&(u.invert=s),a?.syncColormap&&d&&(u.colormap=d),c instanceof nU.A)c._actors&&c._actors.size>1?c.setProperties(u,o):c.setProperties(u);else if(c instanceof iA.A)c.setProperties(u);else throw Error("Viewport type not supported.");c.render()}function cJ(e,t){return t=Object.assign({syncInvertState:!0,syncColormap:!0},t),cc(e,e$.A.VOI_MODIFIED,cZ,{auxiliaryEvents:[{name:e$.A.COLORMAP_MODIFIED}],...t})}function cQ(e,t,n){let i=(0,nG.lD)(n.renderingEngineId);if(!i)throw Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);let a=e.getOptions(n.viewportId),o=i.getViewport(n.viewportId),r=i.getViewport(t.viewportId);if(a?.syncZoom!==!1){let e=r.getZoom();o.setZoom(e)}if(a?.syncPan!==!1){let e=r.getPan();o.setPan(e)}o.render()}let{CAMERA_MODIFIED:c0}=e$.A;function c1(e){return cc(e,c0,cQ)}var c2=n(76637),c5=n(2520),c3=n(25693),c4=n(82052);let c8=(e,t)=>c5.A.get("spatialRegistrationModule",e,t);async function c9(e,t,n){var i;let a=(0,nG.lD)(n.renderingEngineId);if(!a)throw Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);let o=a.getViewport(t.viewportId),r=e.getOptions(n.viewportId);if(r?.disabled)return;let l=a.getViewport(n.viewportId),s=o.getCurrentImageId(),d=ib.get("imagePlaneModule",s).imagePositionPatient,h=l.getImageIds();if(!function(e,t){let{viewPlaneNormal:n}=e.getCamera(),{viewPlaneNormal:i}=t.getCamera();return Math.abs(iT.Om(n,i))>.9}(o,l))return;let c=c8(n.viewportId,t.viewportId);if(!c&&(o.getFrameOfReferenceUID()===l.getFrameOfReferenceUID()&&r?.useInitialPosition!==!1?c=c2.identity(c2.create()):(c3.A(o,l),c=c8(n.viewportId,t.viewportId)),!c))return;
167let u=(i=iT.Z0(iT.vt(),d,c),h.reduce((e,t,n)=>{let{imagePositionPatient:a}=ib.get("imagePlaneModule",t),o=iT.Io(a,i);return o<e.distance?{distance:o,index:n}:e},{distance:1/0,index:-1})),g=u.index;l instanceof i8.A&&(g=h.length-u.index-1),-1!==u.index&&l.getCurrentImageIdIndex()!==u.index&&await c4.e(l.element,{imageIndex:g})}let{STACK_NEW_IMAGE:c7,VOLUME_NEW_IMAGE:c6}=e$.A;function ue(e){return cc(e,c7,c9,{auxiliaryEvents:[{name:"VOLUME_NEW_IMAGE"}]})}function ut(e,t,n){let i=(0,nG.lD)(n.renderingEngineId);if(!i)throw Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);let a=i.getViewport(n.viewportId),o=i.getViewport(t.viewportId),r=o.getSlabThickness?.();r&&(a.setSlabThickness?.(r),a.render())}let{CAMERA_MODIFIED:un}=e$.A;function ui(e){return cc(e,un,ut)}let ua=ue,uo=function(e,t,n,i,a,o={},r=""){let{color:l,fill:s,width:d,lineWidth:h,lineDash:c,fillOpacity:u,strokeOpacity:g}=Object.assign({color:"rgb(0, 255, 0)",fill:"transparent",width:"2",lineDash:void 0,lineWidth:void 0,strokeOpacity:1,fillOpacity:1},o),m=r9(t,"circle",n),p=e.getSvgNode(m),f={cx:`${i[0]}`,cy:`${i[1]}`,r:`${a}`,stroke:l,fill:s,"stroke-width":h||d,"stroke-dasharray":c,"fill-opacity":u,"stroke-opacity":g};if(p)r6(f,p),e.setNodeTouched(m);else{let t=document.createElementNS("http://www.w3.org/2000/svg","circle");""!==r&&t.setAttribute("data-id",r),r7(f,t),e.appendNode(t,m)}},ur=function(e,t,n,i,a={},o=""){let{color:r,width:l,lineWidth:s,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a),h=r9(t,"ellipse",n),c=e.getSvgNode(h),[u,g,m,p]=i,f=Math.hypot(m[0]-p[0],m[1]-p[1]),v=Math.hypot(g[0]-u[0],g[1]-u[1]),I=180*Math.atan2(m[1]-p[1],m[0]-p[0])/Math.PI,C=[(m[0]+p[0])/2,(g[1]+u[1])/2],_={cx:`${C[0]}`,cy:`${C[1]}`,rx:`${f/2}`,ry:`${v/2}`,stroke:r,fill:"transparent",transform:`rotate(${I} ${C[0]} ${C[1]})`,"stroke-width":s||l,"stroke-dasharray":d};if(c)r6(_,c),e.setNodeTouched(h);else{let t=document.createElementNS("http://www.w3.org/2000/svg","ellipse");""!==o&&t.setAttribute("data-id",o),r7(_,t),e.appendNode(t,h)}},ul=function(e,t,n,i,a,o={},r=""){let l=[(i[0]+a[0])/2,i[1]],s=[(i[0]+a[0])/2,a[1]];ur(e,t,n,[s,l,[i[0],(i[1]+a[1])/2],[a[0],(i[1]+a[1])/2]],{},"")};function us(e,t,n,i,a,o={}){if(isNaN(i[0])||isNaN(i[1])||isNaN(a[0])||isNaN(a[1]))return;let{color:r,width:l,lineWidth:s,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},o),h=a[0]+(i[0]-a[0])/2,c=[h,i[1]],u=[h,a[1]],g={start:i,end:c},m={start:c,end:u},p={start:u,end:a};l_(e,t,"1",g.start,g.end,{color:r,width:l,lineWidth:s,lineDash:d}),l_(e,t,"2",m.start,m.end,{color:r,width:l,lineWidth:s,lineDash:d}),l_(e,t,"3",p.start,p.end,{color:r,width:l,lineWidth:s,lineDash:d})}let ud=function(e,t,n,i,a,o,r,l,s={},d="",h){let{color:c,fill:u,width:g,lineWidth:m,lineDash:p,fillOpacity:f,strokeOpacity:v}=Object.assign({color:"rgb(0, 255, 0)",fill:"transparent",width:"2",lineDash:void 0,lineWidth:void 0,strokeOpacity:1,fillOpacity:1},s),I=r9(t,"fan",n),C=e.getSvgNode(I),_=r*Math.PI/180,E=l*Math.PI/180,w=i[0],A=i[1],S=w+o*Math.cos(_),y=A+o*Math.sin(_),b=w+o*Math.cos(E),T=A+o*Math.sin(E),M=w+a*Math.cos(_),D=A+a*Math.sin(_),O=w+a*Math.cos(E),x=A+a*Math.sin(E),P=l-r<=180?0:1,L=`M ${S} ${y}`,N={d:L+=` A ${o} ${o} 0 ${P} 1 ${b} ${T} L ${O} ${x} A ${a} ${a} 0 ${P} 0 ${M} ${D} Z`,stroke:c,fill:u,"stroke-width":m||g,"stroke-dasharray":p,"fill-opacity":f,"stroke-opacity":v,"mix-blend-mode":"normal"};if(C)r6(N,C),e.setNodeTouched(I);else{let t=document.createElementNS("http://www.w3.org/2000/svg","path");""!==d&&t.setAttribute("data-id",d),void 0!==h&&(t.style.zIndex=h.toString()),r7(N,t),e.appendNode(t,I)}};function uh(e,t,n,i,a={},o=""){let{color:r,width:l,lineWidth:s,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a),h=r9(t,"rect",n),c=e.getSvgNode(h),[u,g,m,p]=i,f=Math.hypot(u[0]-g[0],u[1]-g[1]),v=Math.hypot(u[0]-m[0],u[1]-m[1]),I=[(p[0]+u[0])/2,(p[1]+u[1])/2],C=[(m[0]+u[0])/2,(m[1]+u[1])/2],_=180*Math.atan2(I[1]-C[1],I[0]-C[0])/Math.PI,E={x:`${I[0]-f/2}`,y:`${I[1]-v/2}`,width:`${f}`,height:`${v}`,stroke:r,fill:"transparent",transform:`rotate(${_} ${I[0]} ${I[1]})`,"stroke-width":s||l,"stroke-dasharray":d};if(c)r6(E,c),e.setNodeTouched(h);else{let t=document.createElementNS("http://www.w3.org/2000/svg","rect");""!==o&&t.setAttribute("data-id",o),r7(E,t),e.appendNode(t,h)}}function uc(e,t,n,i,a,o={},r=""){let l=[i[0],i[1]],s=[a[0],i[1]];uh(e,t,n,[l,s,[i[0],a[1]],[a[0],a[1]]],o,r)}let uu="http://www.w3.org/2000/svg";function ug(e,t,n,i,a,o={}){if(isNaN(i[0])||isNaN(i[1])||isNaN(a[0])||isNaN(a[1]))return;let{viaMarker:r=!1,color:l="rgb(0, 255, 0)",markerSize:s=10}=o;if(!r)return void function(e,t,n,i,a,o={}){let{color:r="rgb(0, 255, 0)",width:l=2,lineWidth:s,lineDash:d}=o,h=Math.atan2(a[1]-i[1],a[0]-i[0]),c={start:[a[0]-10*Math.cos(h-Math.PI/7),a[1]-10*Math.sin(h-Math.PI/7)],end:a},u={start:[a[0]-10*Math.cos(h+Math.PI/7),a[1]-10*Math.sin(h+Math.PI/7)],end:a};l_(e,t,n,i,a,{color:r,width:l,lineWidth:s,lineDash:d}
167),l_(e,t,"2",c.start,c.end,{color:r,width:l,lineWidth:s,lineDash:d}),l_(e,t,"3",u.start,u.end,{color:r,width:l,lineWidth:s,lineDash:d})}(e,t,n,i,a,o);let d=e.svgLayerElement.id,h=`arrow-${t}`,c=`${h}-${d}`,u=e.svgLayerElement.querySelector("defs"),g=u.querySelector(`#${c}`);if(g){g.setAttribute("markerWidth",`${s}`),g.setAttribute("markerHeight",`${s}`);let e=g.querySelector("path");e&&e.setAttribute("fill",l)}else{(g=document.createElementNS(uu,"marker")).setAttribute("id",c),g.setAttribute("viewBox","0 0 10 10"),g.setAttribute("refX","8"),g.setAttribute("refY","5"),g.setAttribute("markerWidth",`${s}`),g.setAttribute("markerHeight",`${s}`),g.setAttribute("orient","auto");let e=document.createElementNS(uu,"path");e.setAttribute("d","M 0 0 L 10 5 L 0 10 z"),e.setAttribute("fill",l),g.appendChild(e),u.appendChild(g)}o.markerEndId=c,l_(e,t,n,i,a,o)}function um(e,t,n,i,a,o={}){let{color:r,width:l,lineWidth:s,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},o),h=r9(t,"rect",n),c=e.getSvgNode(h),u=[Math.min(i[0],a[0]),Math.min(i[1],a[1])],g=Math.abs(i[0]-a[0]),m=Math.abs(i[1]-a[1]),p={x:`${u[0]}`,y:`${u[1]}`,width:`${g}`,height:`${m}`,stroke:r,fill:"black","stroke-width":s||l,"stroke-dasharray":d};if(c)r6(p,c),e.setNodeTouched(h);else{let t=document.createElementNS("http://www.w3.org/2000/svg","rect");r7(p,t),e.appendNode(t,h)}}function up(e,t,n=5){let i=(0,ej.Ay)(e);if(!i)throw Error("getAnnotationNearPoint: enabledElement not found");return uf(i,t,n)}function uf(e,t,n){let{renderingEngineId:i,viewportId:a}=e,o=oy(a,i);if(!o)return null;let{_toolInstances:r}=o;for(let i in r){let a=function(e,t,n,i){let{viewport:a}=t,o=ti(e.constructor.toolName,a?.element),r=a?.getCurrentImageId?.();if(o?.length){let{element:a}=t.viewport;for(let t of o){let o=t.metadata?.referencedImageId;if((!r||!o||r===o)&&e.isPointNearTool&&(e.isPointNearTool(a,t,n,i,"")||e.getHandleNearImagePoint(a,t,n,i)))return t}}return null}(r[i],e,t,n);if(a)return a}return null}var uv=n(92528);let{calibratedPixelSpacingMetadataProvider:uI}=i9;function uC(e,t,n){"number"==typeof n&&(n={type:uv.A.USER,scale:n}),uI.add(e,n),t.getStackViewports().forEach(t=>{t.getImageIds().includes(e)&&t.calibrateSpacing(e)})}let{transformWorldToIndex:u_}=i9;function uE(e,t,n){let[i,a]=e,o=iT.fA((i[0]+a[0])/2,(i[1]+a[1])/2,(i[2]+a[2])/2),r=iT.Io(i,a)/2,{boundsIJK:l,topLeftWorld:s,bottomRightWorld:d}=function(e,t,n,i,a){let o=e.getDimensions(),{row:r,column:l,normal:s}=t,d=iT.vt(),h=iT.vt();iT.Ln(d,i,s,a),iT.Ln(h,i,s,-a),iT.Ln(d,d,l,-a),iT.Ln(h,h,l,a),iT.Ln(d,d,r,-a),iT.Ln(h,h,r,a);let c=u_(e,d);return{boundsIJK:ij([c,u_(e,h),...n.map(t=>u_(e,t))],o),topLeftWorld:d,bottomRightWorld:h}}(t,n,e,o,r);return{boundsIJK:l,centerWorld:o,radiusWorld:r,topLeftWorld:s,bottomRightWorld:d}}function uw(e,t){let n=t.getDirection(),i=iT.fA(n[0],n[1],n[2]),a=iT.fA(n[3],n[4],n[5]),o=iT.fA(n[6],n[7],n[8]);return uE(e,t,{row:i,column:a,normal:iT.ze(iT.vt(),o)})}function uA(e,t=5){return parseFloat(e[0]).toFixed(t)+","+parseFloat(e[1]).toFixed(t)+","+parseFloat(e[2]).toFixed(t)+","}class uS{static setStartRange(e,t,n=e.getCurrentImageIdIndex()){this.setRange(e,t,n)}
167static setEndRange(e,t,n=e.getCurrentImageIdIndex()){this.setRange(e,t,void 0,n)}static setRange(e,t,n,i){let{metadata:a}=t;void 0===n&&(n=a.sliceIndex<i?a.sliceIndex:0,void 0===i&&(i=e.getNumberOfSlices()-1));let o=e.getSliceIndexForImage(a.multiSliceReference);void 0===i&&(i=o>=n?o:e.getNumberOfSlices()-1),i=Math.max(n,i),a.sliceIndex=Math.min(n,i),a.referencedImageId=e.getCurrentImageId(a.sliceIndex),a.referencedImageURI=void 0,i===a.sliceIndex?a.multiSliceReference=void 0:i!==a.multiSliceReference?.sliceIndex&&(a.multiSliceReference={referencedImageId:e.getCurrentImageId(i),sliceIndex:i});let r={viewportId:e.id,renderingEngineId:e.renderingEngineId,changeType:eY.MetadataReferenceModified,annotation:t};(0,eq.A)(ez.A,eK.ANNOTATION_MODIFIED,r),this.setViewportFrameRange(e,a)}static setSingle(e,t,n=e.getCurrentImageIdIndex()){this.setRange(e,t,n,n)}static getFrameRange(e){let{metadata:t}=e,{sliceIndex:n,multiSliceReference:i}=t,a=i?.sliceIndex;return a?[n+1,a+1]:n+1}static getFrameRangeStr(e){let t=this.getFrameRange(e);return Array.isArray(t)?`${t[0]}-${t[1]}`:String(t)}static setViewportFrameRange(e,t){e.setFrameRange&&t.multiSliceReference?.sliceIndex&&e.setFrameRange(t.sliceIndex+1,t.multiSliceReference.sliceIndex+1)}}function uy(e,t){let{viewPlaneNormal:n}=e.metadata,{viewPlaneNormal:i}=t.metadata,a=iT.Om(n,i);if(!aB.aI(1,Math.abs(a)))return!1;let{polyline:o}=e.data.contour,{polyline:r}=t.data.contour,l=iT.Om(n,o[0]),s=iT.Om(n,r[0]);return aB.aI(l,s)}function ub(e){if(0==e.length)return[];let t=[],n=e.shift();t.push(n.a),t.push(n.b);let i=function e(t,n,i){let a=-1;if(n.forEach((e,n)=>{a>=0||e.a==t.b&&(a=n)}),a>=0){let t=n[a];return(n.splice(a,1),i.push(t.b),i[0]==t.b)?{remainingLines:n,contourPoints:i,type:"CLOSED_PLANAR"}:e(t,n,i)}return{remainingLines:n,contourPoints:i,type:"OPEN_PLANAR"}}(n,e,t);if(0==i.remainingLines.length)return[{type:i.type,contourPoints:i.contourPoints}];{let e=ub(i.remainingLines);return e.push({type:i.type,contourPoints:i.contourPoints}),e}}let uT={findContours:ub,findContoursFromReducedSet:function(e){return ub(e)}};function uM(e,t=!1){let n=e.getPoints(),i=e.getLines(),a=Array(n.getNumberOfPoints()).fill(0).map((e,t)=>n.getPoint(t).slice()),o=Array(i.getNumberOfCells()).fill(0).map((e,t)=>{let n=i.getCell(3*t).slice();return{a:n[0],b:n[1]}});if(t)return{points:a,lines:o};let r=[];for(let[e,t]of a.entries()){let n=r.findIndex(e=>e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]);if(n>=0)o.map(t=>(t.a===e&&(t.a=n),t.b===e&&(t.b=n),t));else{let n=r.length;r.push(t),o.map(t=>(t.a===e&&(t.a=n),t.b===e&&(t.b=n),t))}}return{points:r,lines:o.filter(e=>e.a!==e.b)}}let uD=(e,t)=>{let n=e[0],i=e[1],a=!1;for(let e=0,o=t.length-1;e<t.length;o=e++){let r=t[e][0],l=t[e][1],s=t[o][0],d=t[o][1];l>i!=d>i&&n<(s-r)*(i-l)/(d-l)+r&&(a=!a)}return a},uO={processContourHoles:function(e,t,n=!0){let i=e.filter(e=>"CLOSED_PLANAR"!==e.type),a=e.filter(e=>"CLOSED_PLANAR"===e.type),o=[],r=[];return a.forEach((e,n)=>{let i=[];a.forEach((a,o)=>{n!=o&&function(e,t,n){let i=[];e.contourPoints.forEach(e=>{i.push([n[e][0],n[e][1]])});let a=0;return t.contourPoints.forEach(e=>{!uD([n[e][0],n[e][1]],i)&&a++}),0===a}(e,a,t)&&i.push(o)}),i.length>0?o.push({contour:e,holes:i}):r.push(n)}),n&&(o.forEach(e=>{e.contour.type="CLOSEDPLANAR_XOR",i.push(e.contour),e.holes.forEach(e=>{a[e].type="CLOSEDPLANAR_XOR",i.push(a[e]),r=r.filter(t=>t!==e)})}),r.forEach(e=>{i.push(a[e])})),i}};function ux(e){let t=[],n=[];e.forEach((e,t)=>{aW(e)&&n.push({polyline:e,originalIndex:t})});for(let e=0;e<n.length;e++){let a=n[e],o=Math.abs(aj(a.polyline)),r=[];for(let t=0;t<n.length;t++){var i;if(e===t)continue;let l=n[t];Math.abs(aj(l.polyline))<o&&(i=l.polyline,az(a.polyline,i))&&r.push(l.originalIndex)}r.length>0&&t.push({contourIndex:a.originalIndex,holeIndexes:r.sort((e,t)=>e-t)})}return t.sort((e,t)=>e.contourIndex-t.contourIndex)}var uP=n(49395),uL=n(92591),uN=n(1735);!function(e){e.POLYSEG_CONTOUR_TO_LABELMAP="Converting Contour to Labelmap",e.POLYSEG_SURFACE_TO_LABELMAP="Converting Surfaces to Labelmap",e.POLYSEG_CONTOUR_TO_SURFACE="Converting Contour to Surface",e.POLYSEG_LABELMAP_TO_SURFACE="Converting Labelmap to Surface",e.SURFACE_CLIPPING="Clipping Surfaces",e.COMPUTE_STATISTICS="Computing Statistics",e.INTERPOLATE_LABELMAP="Interpolating Labelmap",e.COMPUTE_LARGEST_BIDIRECTIONAL="Computing Largest Bidirectional",e.GENERATE_CONTOUR_SETS="Generating Contour Sets"}(A||(A={}));let uR=A,uk=!1;function uU(){if(uk)return;uk=!0;let e=(0,uP.G_)(),t=ig.computeWorker,i={maxWorkerInstances:1,autoTerminateOnIdle:t?.autoTerminateOnIdle??{enabled:!0,idleTimeThreshold:2e3}};e.registerWorker("compute",()=>
167new Worker(n.tu(new URL(n.p+n.u(33694),n.b)),{name:"compute",type:void 0}),i)}var uV=n(24045);function uF(e){let t,n=nV.Ay.getVolume(e);if(!n)return null;let i=n.referencedVolumeId;if(i)t=nV.Ay.getVolume(i);else{let e=n.imageIds,i=nV.Ay.getImage(e[0]),a=i.referencedImageId,o=nV.Ay.getVolumeContainingImageId(a);o?.volume||(o=nV.Ay.getVolumeContainingImageId(i.imageId)),t=o?.volume}return t}function uG({operationData:e,viewport:t,strategy:n}){return e?"volumeId"in e&&null!=e.volumeId||"referencedVolumeId"in e&&null!=e.referencedVolumeId?function({operationData:e}){let{volumeId:t}=e;if(!t){let e=new CustomEvent(e$.A.ERROR_EVENT,{detail:{type:"Segmentation",message:"No volume id found for the segmentation"},cancelable:!0});return ez.A.dispatchEvent(e),null}let n=nV.Ay.getVolume(t),i=uF(t);if(!n||!i)return null;let{imageData:a}=n,{voxelManager:o}=n,{voxelManager:r,imageData:l}=i;return{segmentationImageData:a,segmentationVoxelManager:o,segmentationScalarData:null,imageScalarData:null,imageVoxelManager:r,imageData:l}}({operationData:e}):function({operationData:e,viewport:t,strategy:n}){let i,a,o,r,l,s,{segmentationId:d}=e;if(n.ensureSegmentationVolumeFor3DManipulation)n.ensureSegmentationVolumeFor3DManipulation({operationData:e,viewport:t}),a=e.segmentationVoxelManager,i=e.segmentationImageData,o=null;else{let n=at(t.id,d);if(!n)return null;let r=id(t.id,d);if(!r)return null;let l=nV.Ay.getImage(n);i=r.actor.getMapper().getInputData(),a=l.voxelManager;let s=e.imageId,h=nV.Ay.getImage(s);if(!h)return null;o=h.getPixelData?.()}if(n.ensureImageVolumeFor3DManipulation)n.ensureImageVolumeFor3DManipulation({operationData:e,viewport:t}),l=e.imageVoxelManager,r=e.imageScalarData,s=e.imageData;else{let e=t.getCurrentImageId();if(!e)return null;let n=nV.Ay.getImage(e);s=n?null:t.getImageData(),r=n?.getPixelData()||s.getScalarData(),l=n?.voxelManager}return{segmentationImageData:i,segmentationScalarData:o,imageScalarData:r,segmentationVoxelManager:a,imageVoxelManager:l,imageData:s}}({operationData:e,viewport:t,strategy:n}):null}!function(e){e.CalculateCursorGeometry="calculateCursorGeometry",e.RenderCursor="renderCursor",e.OnInteractionStart="onInteractionStart",e.OnInteractionEnd="onInteractionEnd",e.Preview="preview",e.RejectPreview="rejectPreview",e.AcceptPreview="acceptPreview",e.Fill="fill",e.Interpolate="interpolate",e.StrategyFunction="strategyFunction",e.CreateIsInThreshold="createIsInThreshold",e.Initialize="initialize",e.INTERNAL_setValue="setValue",e.AddPreview="addPreview",e.ComputeInnerCircleRadius="computeInnerCircleRadius",e.GetStatistics="getStatistics",e.EnsureImageVolumeFor3DManipulation="ensureImageVolumeFor3DManipulation",e.EnsureSegmentationVolumeFor3DManipulation="ensureSegmentationVolumeFor3DManipulation"}(S||(S={}));let uB=S,uH=function(e){let t,{representationData:n}=n9(e);if(!n.Labelmap)return;let{volumeId:i}=n.Labelmap;if(i&&(t=nV.Ay.getVolume(i)))return t;let{imageIds:a}=n.Labelmap;if((i=nV.Ay.generateVolumeId(a),a&&0!==a.length)&&uV.p(a))return nW.createAndCacheVolumeFromImagesSync(i,a)},uW={[uB.EnsureSegmentationVolumeFor3DManipulation]:e=>{let{operationData:t,viewport:n}=e,{segmentationId:i,imageIds:a}=t,o=n?n.getImageIds():a.map(e=>nV.Ay.getImage(e).referencedImageId);if(!uV.p(o))throw Error("Volume is not reconstructable for sphere manipulation");let r=uH(i);r&&(t.segmentationVoxelManager=r.voxelManager,t.segmentationImageData=r.imageData)}},u$=function(e){if(!e?.length||!uV.p(e))return;let t=nV.Ay.generateVolumeId(e),n=nV.Ay.getVolume(t);return n||(n=nW.createAndCacheVolumeFromImagesSync(t,e))},uz={[uB.EnsureImageVolumeFor3DManipulation]:e=>{let t,{operationData:n,viewport:i}=e;if(i){if(t=i.getImageIds(),!uV.p(t))throw Error("Volume is not reconstructable for sphere manipulation")}else t=n9(n.segmentationId).representationData.Labelmap.imageIds.map(e=>nV.Ay.getImage(e).referencedImageId);let a=u$(t);if(!a)throw Error("Failed to create or get image volume");n.imageVoxelManager=a.voxelManager,n.imageData=a.imageData}},uX=(e,t)=>{(0,eq.A)(ez.A,e$.A.WEB_WORKER_PROGRESS,{progress:t,type:e})},uj=(e,t)=>{let{representationData:n}=n9(e),{Labelmap:i}=n;if(!i)return console.debug("No labelmap found for segmentation",e),null;let a=i.volumeId,o=i.imageIds,r=!1;if(o){let e=o.map(e=>nV.Ay.getImage(e).referencedImageId);r=uV.p(e)}let l=t;return l?Array.isArray(l)||(l=[l,255]):l=[af(e)],{operationData:{segmentationId:e,volumeId:a,imageIds:o},segVolumeId:a,segImageIds:o,reconstructableVolume:r,indices:l}},uq=e=>uG({operationData:e,strategy:{ensureSegmentationVolumeFor3DManipulation:uW.ensureSegmentationVolumeFor3DManipulation,ensureImageVolumeFor3DManipulation:uz.ensureImageVolumeFor3DManipulation}}),uK=e=>{let t=[],n=[];for(let i of e){let e=nV.Ay.getImage(i),a=e.getPixelData(),{origin:o,direction:r,spacing:l,dimensions:s}=uL.T(e);t.push({scalarData:a,dimensions:s,spacing:l,origin:o,direction:r});let d=e.referencedImageId;if(d){let e=nV.Ay.getImage(d);if(!e)continue;let t=e.getPixelData(),i=e.voxelManager,a=[e.rowPixelSpacing,e.columnPixelSpacing];n.push({scalarData:t,dimensions:i?i.dimensions:[e.columns,e.rows,1],spacing:a})}}return{segmentationInfo:t,imageInfo:n}},uY=(e,t)=>
167{let n;if(e){let t=nV.Ay.getVolume(e).imageIds,i=nV.Ay.getImage(t[0]);i&&(n=i.referencedImageId)}else t?.length&&(n=nV.Ay.getImage(t[0]).referencedImageId);let i=nV.Ay.getImage(n),a=ib.get("scalingModule",n);return{refImageId:n,modalityUnitOptions:{isPreScaled:!!i?.preScale?.scaled,isSuvScaled:"number"==typeof a?.suvbw}}},{Labelmap:uZ}=nB;async function uJ({segmentations:e}){uU(),uX(uR.GENERATE_CONTOUR_SETS,0);let{representationData:t,segments:n=[0,1],segmentationId:i}=e,{volumeId:a}=t[uZ];if(!a){let e=uH(i);e&&(a=e.volumeId)}let o=nV.Ay.getVolume(a);if(!o)return void console.warn(`No volume found for ${a}`);let r={scalarData:o.voxelManager.getCompleteScalarDataArray(),dimensions:o.dimensions,spacing:o.imageData.getSpacing(),origin:o.imageData.getOrigin(),direction:o.imageData.getDirection()},l=Array.isArray(n)?n.filter(e=>null!==e).map(e=>e.segmentIndex||e):Object.values(n).filter(e=>null!==e).map(e=>e.segmentIndex||e),s=await (0,uP.G_)().executeTask("compute","generateContourSetsFromLabelmapVolume",{segmentation:r,indices:l,mode:"individual"}),d=o.imageIds.map(e=>{let t=nV.Ay.getImage(e)?.referencedImageId;return t?nV.Ay.getImage(t):void 0}),h=d.map(e=>uL.T(e)),c=s.map(e=>{let t,i=n[e.segment.segmentIndex]||{};if(!e.sliceContours.length)return null;let a=e.sliceContours[0].polyData.points[0];if(a){let e=h.findIndex(e=>{let{scanAxisNormal:t,origin:n}=e,i=uN.planeEquation(t,n);return uN.isPointOnPlane(a,i)});-1!==e&&(t=d[e].imageId)}return{label:i.label,color:i.color,metadata:{FrameOfReferenceUID:o.metadata.FrameOfReferenceUID,referencedImageId:t},sliceContours:e.sliceContours.map(e=>({contours:e.contours,polyData:e.polyData,FrameNumber:e.sliceIndex+1,sliceIndex:e.sliceIndex,FrameOfReferenceUID:o.metadata.FrameOfReferenceUID,referencedImageId:t}))}}).filter(e=>null!==e);return uX(uR.GENERATE_CONTOUR_SETS,100),c}function uQ(e,t){s2.acceptAutoGenerated(e,t)}let{isEqual:u0}=i9;function u1(e,t){let{polyline:n}=e.data.contour,{points:i}=e.data.handles,{length:a}=i;if(t===a)return n.length;if(t<0&&(t=(t+a)%a),0===t)return 0;let o=i[t],r=n.findIndex(e=>u0(o,e));if(-1!==r)return r;let l=1/0;return n.reduce((e,t,n)=>{let i=iT.hG(t,o);return i<l?(l=i,n):e},-1)}function u2(e,t){if(!e||0===e.length||t<=0)return[];let n=[];for(let i=0;i<e.length;i++){let a=e[i];a&&!(a.length<3)&&aW(a)&&Math.abs(aj(a))/100<t&&n.push(i)}return n}let u5=function(e,t,n){let i,a,o,{imageData:r}=e,{overwrite:l,boundsIJK:s,segmentationId:d}=n;if(!d)throw Error("Segmentation ID is required to be passed inside thresholdVolumeByRange as options");let h=n?.overlapType||0,c=e.voxelManager,u=e.voxelManager.getScalarDataLength();if(l)for(let e=0;e<u;e++)c.setAtIndex(e,0);let{baseVolumeIdx:g,volumeInfoList:m}=iZ(e,t),p=(e,t,n)=>{let{imageData:r,dimensions:l,lower:s,upper:d}=e,c=iY(r,l,t,n);a=0,i=0,o={lower:s,upper:d};let u=!1,{voxelManager:g}=r.get("voxelManager");return g.forEach(({value:e})=>{a+=1,e>=o.lower&&e<=o.upper&&(i+=1)},{imageData:r,boundsIJK:c}),0===h?u=i>0:1==h&&(u=i===a),u},f=(e,t)=>{let{imageData:n,lower:i,upper:a}=e,o=n.get("voxelManager").voxelManager,r=o.toIndex(t),l=o.getAtIndex(r);return!(l<=i)&&!(l>=a)};return e.voxelManager.forEach(({index:e,pointIJK:t,pointLPS:i})=>{let a=m.length>0;for(let e=0;e<m.length&&(a=m[e].volumeSize===u?f(m[e],t):p(m[e],m[g].spacing,i));e++);a&&c.setAtIndex(e,n.segmentIndex||1)},{imageData:r,boundsIJK:s}),aa(n.segmentationId),e};var u3=n(83107);function u4(e,t,n,i){let a=iT.vt();iT.$A(a,t,e);let o=iT.fA(...n),r=iT.fA(...i),l=iT.vt();iT.Re(l,o,r);let s=iT.Bw(l);if(s<1e-4)return{worldWidth:0,worldHeight:0};let d=iT.Om(l,a)/(s*iT.Bw(a));return{worldWidth:Math.sqrt(1-d*d)*s,worldHeight:d*s}}function u8(e,t,n){if(2!==e.length||2!==t.length||2!==n.length)throw Error("lineStart, lineEnd, and point should have 2 elements of [x, y]");return Math.sqrt(oo(e,t,n))}function u9(e,t){if(4!==e.length||2!==t.length)throw Error("rectangle:[left, top, width, height] or point: [x,y] not defined correctly");let[n,i,a,o]=e,r=655535,l={top:[[n,i],[n+a,i]],right:[[n+a,i],[n+a,i+o]],bottom:[[n+a,i+o],[n,i+o]],left:[[n,i+o],[n,i]]};
167return Object.keys(l).forEach(e=>{let[n,i]=l[e],a=u8(n,i,t);a<r&&(r=a)}),r}let{transformWorldToIndex:u7}=i9;class u6 extends sd{static{this.toolName="RectangleROI"}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{storePointData:!1,shadow:!0,preventHandleOutsideImage:!1,calculateStats:!0,getTextLines:ge,statsCalculator:lP}}){super(e,t),this.addNewAnnotation=e=>{let{currentPoints:t,element:n}=e.detail,i=t.world,{viewport:a}=(0,ej.Ay)(n);this.isDrawing=!0;let o=this.constructor.createAnnotationForViewport(a,{data:{handles:{points:[[...i],[...i],[...i],[...i]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},cachedStats:{}}});th(o,n);let r=ox(n,this.getToolName());return this.editData={annotation:o,viewportIdsToRender:r,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(n),o2(n),e.preventDefault(),oX(r),o},this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,{points:r}=o.handles,l=a.worldToCanvas(r[0]),s=a.worldToCanvas(r[3]),d=this._getRectangleImageCoordinates([l,s]),h=[n[0],n[1]],{left:c,top:u,width:g,height:m}=d;return u9([c,u,g,m],h)<=i},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(n),o2(n);let{renderingEngine:a}=(0,ej.Ay)(n);oX(i),e.preventDefault()},this.handleSelectedCallback=(e,t,n)=>{let i,{element:a}=e.detail,{data:o}=t;t.highlighted=!0;let r=!1;n.worldPosition?r=!0:i=o.handles.points.findIndex(e=>e===n);let l=ox(a,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:i,movingTextBox:r},this._activateModify(a),o2(a);let{renderingEngine:s}=(0,ej.Ay)(a);oX(l),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;(!a||o)&&(r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t),this.doneEditMemo(),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),a&&e7(n))},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:o,movingTextBox:r,newAnnotation:l}=this.editData;this.createMemo(n,i,{newAnnotation:l});let{data:s}=i;if(r){let{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else if(void 0===o){let{deltaPoints:e}=t,n=e.world,{points:a}=s.handles;a.forEach(e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]}),i.invalidated=!0}else{let e,a,r,l,d,h,c,u,{currentPoints:g}=t,{worldToCanvas:m,canvasToWorld:p}=(0,ej.Ay)(n).viewport,f=g.world,{points:v}=s.handles;switch(v[o]=[...f],o){case 0:case 3:e=m(v[0]),a=[(l=m(v[3]))[0],e[1]],r=[e[0],l[1]],h=p(a),c=p(r),v[1]=h,v[2]=c;break;case 1:case 2:a=m(v[1]),e=[(r=m(v[2]))[0],a[1]],l=[a[0],r[1]],d=p(e),u=p(l),v[0]=d,v[3]=u}i.invalidated=!0}this.editData.hasMoved=!0,(0,ej.Ay)(n),oX(a),i.invalidated&&e9(i,n,eY.HandlesUpdated)},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,oX(n),i&&e7(t),this.editData=null,t.annotationUID}},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let a=0;a<o.length;a++){let s,d=o[a],{annotationUID:h,data:c}=d,{points:u,activeHandleIndex:g}=c.handles,m=u.map(e=>i.worldToCanvas(e)),p=this.getTargetId(i,c);l.annotationUID=h;let{color:f,lineWidth:v,lineDash:I}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),{viewPlaneNormal:C,viewUp:_}=i.getCamera();if(c.cachedStats[p]&&null!=c.cachedStats[p].areaUnit){if(d.invalidated&&(this._throttledCalculateCachedStats(d,C,_,r,e),i instanceof i8.A)){let{referencedImageId:e}=d.metadata;for(let t in c.cachedStats)t.startsWith("imageId")&&r.getStackViewports().find(t=>{let n=lk.A(e),i=t.hasImageURI(n),a=lk.A(t.getCurrentImageId());return i&&a!==n})&&delete c.cachedStats[t]}}else c.cachedStats[p]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(d,C,_,r,e);if(!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(h))continue;iN(h)||this.editData||null==g||(s=[m[g]]);let E=!!lz("showHandlesAlways",{});(s||E)&&li(t,h,"0",E?m:s,{color:f});let w=`${h}-rect`;uh(t,h,"0",m,{color:f,lineDash:I,lineWidth:v},w),n=!0;let A=this.getLinkedTextBoxStyle(l,d);if(!A.visibility){c.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}let S=this.configuration.getTextLines(c,p);if(!S||0===S.length)continue;if(!c.handles.textBox.hasMoved){let e=lS(m);c.handles.textBox.worldPosition=i.canvasToWorld(e)}let{x:y,y:b,width:T,height:M}=lA(t,h,"1",S,i.worldToCanvas(c.handles.textBox.worldPosition),m,{},A);c.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([y,b]),topRight:i.canvasToWorld([y+T,b]),bottomLeft:i.canvasToWorld([y,b+M]),bottomRight:i.canvasToWorld([y+T,b+M])}}return n},this._getRectangleImageCoordinates=e=>{let[t,n]=e;return{left:Math.min(t[0],n[0]),top:Math.min(t[1],n[1]),width:Math.abs(t[0]-n[0]),height:Math.abs(t[1]-n[1])}},this._calculateCachedStats=(e,t,n,i,a)=>
167{if(!this.configuration.calculateStats)return;let{data:o}=e,{viewport:r}=a,{element:l}=r,s=o.handles.points,{cachedStats:d}=o,h=Object.keys(d);for(let t=0;t<h.length;t++){let n=h[t],i=this.getTargetImageData(n);if(!i)continue;let{dimensions:a,imageData:o,metadata:l,voxelManager:c}=i,u=s.map(e=>u7(o,e)),g=u[0].map(Math.floor),m=u[3].map(Math.floor);if(this._isInsideVolume(g,m,a)){let t;this.isHandleOutsideImage=!1;let a=Math.min(g[0],m[0]),s=Math.max(g[0],m[0]),h=Math.min(g[1],m[1]),p=Math.max(g[1],m[1]),f=[[a,s],[h,p],[Math.min(g[2],m[2]),Math.max(g[2],m[2])]],v=aU(i,[g,m]),I=Math.abs(u6.calculateLengthInIndex(v,u.slice(0,2))*u6.calculateLengthInIndex(v,u.slice(2,4))),{areaUnit:C}=v,_={isPreScaled:ly(r,n),isSuvScaled:this.isSuvScaled(r,n,e.metadata.referencedImageId)},E=dm(l.Modality,e.metadata.referencedImageId,_);c&&(t=c.forEach(this.configuration.statsCalculator.statsCallback,{boundsIJK:f,imageData:o,returnPoints:this.configuration.storePointData}));let w=this.configuration.statsCalculator.getStatistics();d[n]={Modality:l.Modality,area:I,mean:w.mean?.value,stdDev:w.stdDev?.value,max:w.max?.value,min:w.min?.value,statsArray:w.array,pointsInShape:t,areaUnit:C,modalityUnit:E}}else this.isHandleOutsideImage=!0,d[n]={Modality:l.Modality}}let c=e.invalidated;return e.invalidated=!1,c&&e9(e,l,eY.StatsUpdated),d},this._isInsideVolume=(e,t,n)=>lF.A(e,n)&&lF.A(t,n),this._throttledCalculateCachedStats=oA(this._calculateCachedStats,100,{trailing:!0})}static{this.hydrate=(e,t,n)=>{let i=(0,ej.yj)(e);if(!i)return;let{FrameOfReferenceUID:a,referencedImageId:o,viewPlaneNormal:r,instance:l,viewport:s}=this.hydrateBase(u6,i,t,n),{toolInstance:d,...h}=n||{};th({annotationUID:n?.annotationUID||eX.A(),data:{handles:{points:t,activeHandleIndex:null},label:"",cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:l.getToolName(),viewPlaneNormal:r,FrameOfReferenceUID:a,referencedImageId:o,...h}},s.element),oX([s.id])}}}function ge(e,t){let{area:n,mean:i,max:a,stdDev:o,areaUnit:r,modalityUnit:l,min:s}=e.cachedStats[t];if(null==i)return;let d=[];return aM.Et(n)&&d.push(`Area: ${aD.A(n)} ${r}`),aM.Et(i)&&d.push(`Mean: ${aD.A(i)} ${l}`),aM.Et(a)&&d.push(`Max: ${aD.A(a)} ${l}`),aM.Et(s)&&d.push(`Min: ${aD.A(s)} ${l}`),aM.Et(o)&&d.push(`Std Dev: ${aD.A(o)} ${l}`),d}let gt=u6,{EPSILON:gn}=i$,gi=1-gn;function ga(e,t){let{viewPlaneNormal:n}=t,i=e.filter(e=>{let t=e.metadata.viewPlaneNormal;if(!t){let{referencedImageId:n}=e.metadata,{imageOrientationPatient:i}=ib.get("imagePlaneModule",n),a=iT.fA(i[0],i[1],i[2]),o=iT.fA(i[3],i[4],i[5]);t=iT.vt(),iT.$A(t,a,o),e.metadata.viewPlaneNormal=t}let i=Math.abs(iT.Om(n,t))>gi;return t&&i});return i.length?i:[]}let{transformWorldToIndex:go}=i9;class gr extends gt{constructor(e={},t={configuration:{storePointData:!1,numSlicesToPropagate:10,calculatePointsInsideVolume:!0,getTextLines:gl,statsCalculator:lP,showTextBox:!1,throttleTimeout:100}}){super(e,t),this.addNewAnnotation=e=>{let t,n,i,{currentPoints:a,element:o}=e.detail,r=a.world,l=(0,ej.Ay)(o),{viewport:s,renderingEngine:d}=l;this.isDrawing=!0;let{viewPlaneNormal:h,viewUp:c}=s.getCamera();if(s instanceof iA.A)throw Error("Stack Viewport Not implemented");{let e=this.getTargetId(s);i=iS.A(e),n=nV.Ay.getVolume(i),t=iy.A(n,r,h)}let u=u3.A(n,h),g=this._getStartCoordinate(r,h),m=this._getEndCoordinate(r,u,h),p={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...h],enabledElement:l,viewUp:[...c],FrameOfReferenceUID:s.getFrameOfReferenceUID(),referencedImageId:t,toolName:this.getToolName(),volumeId:i,spacingInNormal:u},data:{label:"",startCoordinate:g,endCoordinate:m,cachedStats:{pointsInVolume:[],projectionPoints:[],projectionPointsImageIds:[t],statistics:[]},handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...r],[...r],[...r],[...r]],activeHandleIndex:null},labelmapUID:null}};this._computeProjectionPoints(p,n),th(p,o);let f=ox(o,this.getToolName());return this.editData={annotation:p,viewportIdsToRender:f,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),o2(o),e.preventDefault(),oX(f),p},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;if(a&&!o)return;r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t);let{metadata:l}=n,{enabledElement:s}=l;this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID);let d=this.getTargetId(s.viewport),h=nV.Ay.getVolume(d.split(/volumeId:|\?/)[1]);this._computePointsInsideVolume(n,d,h,s),oX(i),a?e7(n):e9(n,t)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,a=ti(this.getToolName(),i.element);if(!a?.length)return n;a=ga(a,i.getCamera());let o={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<a.length;e++){let r,l=a[e],{annotationUID:s,data:d,metadata:h}=l,{startCoordinate:c,endCoordinate:u}=d,{points:g,activeHandleIndex:m}=d.handles,{enabledElement:p}=h,f=g.map(e=>i.worldToCanvas(e));o.annotationUID=s;let v=this.getStyle("lineWidth",o,l),I=this.getStyle("lineDash",o,l),C=this.getStyle("color",o,l),_=i.getCamera().focalPoint,E=i.getCamera().viewPlaneNormal,w=c,A=u;if(Array.isArray(c)){w=this._getCoordinateForViewplaneNormal(w,E);let e=this._getIndexOfCoordinatesForViewplaneNormal(E);
167d.handles.points.forEach(t=>{t[e]=w}),d.startCoordinate=w}Array.isArray(u)&&(d.endCoordinate=A=this._getCoordinateForViewplaneNormal(A,E),d.endCoordinate=A);let S=aD.C(w),y=aD.C(A),b=this._getCoordinateForViewplaneNormal(_,E),T=aD.C(b);if(T<Math.min(S,y)||T>Math.max(S,y))continue;for(let e of p.viewport?.volumeIds.values())l.invalidated&&l.metadata.volumeId===e&&this._throttledCalculateCachedStats(l,p);let M=!1;if((T===S||T===y)&&(M=!0),!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(s))continue;iN(s)||this.editData||null===m||!M||(r=[f[m]]),r&&li(t,s,"0",r,{color:C});let D=I;if(M||(D=2),uc(t,s,"0",f[0],f[3],{color:C,lineDash:D,lineWidth:v}),n=!0,this.configuration.showTextBox){let e=this.getLinkedTextBoxStyle(o,l);if(!e.visibility){d.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}let n=this.configuration.getTextLines(d,{metadata:h});if(!n||0===n.length)continue;if(!d.handles.textBox.hasMoved){let e=lS(f);d.handles.textBox.worldPosition=i.canvasToWorld(e)}let{x:a,y:r,width:c,height:u}=lA(t,s,"1",n,i.worldToCanvas(d.handles.textBox.worldPosition),f,{},e);d.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([a,r]),topRight:i.canvasToWorld([a+c,r]),bottomLeft:i.canvasToWorld([a,r+u]),bottomRight:i.canvasToWorld([a+c,r+u])}}}return n},this.configuration.calculatePointsInsideVolume?this._throttledCalculateCachedStats=oA(this._calculateCachedStatsTool,this.configuration.throttleTimeout,{trailing:!0}):this._throttledCalculateCachedStats=ow(this._calculateCachedStatsTool,this.configuration.throttleTimeout)}_computeProjectionPoints(e,t){let{data:n,metadata:i}=e,{viewPlaneNormal:a,spacingInNormal:o}=i,{imageData:r}=t,{startCoordinate:l,endCoordinate:s}=n,{points:d}=n.handles,h=go(r,d[0]),c=go(r,d[0]),u=iT.vt();r.indexToWorldVec3(h,u);let g=iT.vt();r.indexToWorldVec3(c,g);let m=this._getIndexOfCoordinatesForViewplaneNormal(a);2==m?(u[2]=l,g[2]=s):0==m?(u[0]=l,g[0]=s):1==m&&(u[1]=l,g[1]=s);let p=iT.vt();iT.Re(p,g,u);let f=iT.Bw(p);iT.S8(p,p);let v=[];for(let e=0;e<f;e+=o)v.push(d.map(t=>{let n=iT.vt();return iT.Ln(n,t,p,e),Array.from(n)}));n.cachedStats.projectionPoints=v}_computePointsInsideVolume(e,t,n,i){let{data:a,metadata:o}=e,{viewPlaneNormal:r,viewUp:l}=o,{viewport:s}=i,d=a.cachedStats.projectionPoints,h=[[]],c=this.getTargetImageData(t),u=a.handles.points[0],g=a.handles.points[3],{worldWidth:m,worldHeight:p}=u4(r,l,u,g),f=aU(c,a.habdles),v=Math.abs(m*p)/(f.scale*f.scale),I={isPreScaled:ly(s,t),isSuvScaled:this.isSuvScaled(s,t,e.metadata.referencedImageId)},C=dm(o.Modality,e.metadata.referencedImageId,I);for(let e=0;e<d.length;e++){if(!n)continue;let t=d[e][0],{dimensions:i,imageData:a,voxelManager:o}=n,l=go(a,u),s=go(a,t),c=this._getIndexOfCoordinatesForViewplaneNormal(r);l[0]=Math.floor(l[0]),l[1]=Math.floor(l[1]),l[2]=Math.floor(l[2]),l[c]=s[c];let m=go(a,g);if(m[0]=Math.floor(m[0]),m[1]=Math.floor(m[1]),m[2]=Math.floor(m[2]),m[c]=s[c],this._isInsideVolume(l,m,i)){this.isHandleOutsideImage=!1;let e=Math.min(l[0],m[0]),t=Math.max(l[0],m[0]),n=Math.min(l[1],m[1]),i=Math.max(l[1],m[1]),r=[[e,t],[n,i],[Math.min(l[2],m[2]),Math.max(l[2],m[2])]],s=o.forEach(this.configuration.statsCalculator.statsCallback,{boundsIJK:r,imageData:a,returnPoints:this.configuration.storePointData});h.push(s)}}let _=this.configuration.statsCalculator.getStatistics();a.cachedStats.pointsInVolume=h,a.cachedStats.statistics={Modality:o.Modality,area:v,mean:_.mean?.value,stdDev:_.stdDev?.value,max:_.max?.value,statsArray:_.array,areaUnit:f.areaUnit,modalityUnit:C}}_calculateCachedStatsTool(e,t){let n=e.data,{viewport:i}=t,{cachedStats:a}=n,o=this.getTargetId(i),r=nV.Ay.getVolume(o.split(/volumeId:|\?/)[1]);return this._computeProjectionPoints(e,r),this._computePointsInsideVolume(e,o,r,t),e.invalidated=!1,e9(e,i.element),a}_getStartCoordinate(e,t){return this._getCoordinateForViewplaneNormal(e,t)}_getEndCoordinate(e,t,n){let i=this.configuration.numSlicesToPropagate,a=iT.vt();return iT.Ln(a,e,n,i*t),this._getCoordinateForViewplaneNormal(a,n)}_getIndexOfCoordinatesForViewplaneNormal(e){let t=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])];return t.indexOf(Math.max(...t))}_getCoordinateForViewplaneNormal(e,t){return e[this._getIndexOfCoordinatesForViewplaneNormal(t)]}}
167function gl(e,t={}){let{area:n,mean:i,max:a,stdDev:o,areaUnit:r,modalityUnit:l}=e.cachedStats.statistics;if(void 0===i)return;let s=[];return s.push(`Area: ${aD.A(n)} ${r}`),s.push(`Mean: ${aD.A(i)} ${l}`),s.push(`Max: ${aD.A(a)} ${l}`),s.push(`Std Dev: ${aD.A(o)} ${l}`),s}gr.toolName="RectangleROIStartEndThreshold";let gs=gr;class gd extends gt{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}){super(e,t),this.addNewAnnotation=e=>{let t,n,{currentPoints:i,element:a}=e.detail,o=i.world,r=(0,ej.Ay)(a),{viewport:l,renderingEngine:s}=r;this.isDrawing=!0;let{viewPlaneNormal:d,viewUp:h}=l.getCamera(),c=this.getTargetId(l);if(l instanceof iA.A)t=c.split("imageId:")[1];else{n=iS.A(c);let e=nV.Ay.getVolume(n);t=iy.A(e,o,d)}let u={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:r,viewUp:[...h],FrameOfReferenceUID:l.getFrameOfReferenceUID(),referencedImageId:t,toolName:this.getToolName(),volumeId:n},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},segmentationId:null}};th(u,a);let g=ox(a,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:g,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),o2(a),e.preventDefault(),oX(g),u},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<o.length;e++){let l,s=o[e],{annotationUID:d,data:h}=s,{points:c,activeHandleIndex:u}=h.handles,g=c.map(e=>i.worldToCanvas(e));r.annotationUID=d;let m=this.getStyle("lineWidth",r,s),p=this.getStyle("lineDash",r,s),f=this.getStyle("color",r,s);if(!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}e9(s,a),l6(d)&&(iN(d)||this.editData||null===u||(l=[g[u]]),l&&li(t,d,"0",l,{color:f}),uc(t,d,"0",g[0],g[3],{color:f,lineDash:p,lineWidth:m}),n=!0)}return n}}}gd.toolName="RectangleROIThreshold";let gh=gd,gc=function(e,t){let n=e.findIndex(([e,t])=>e===t);if(-1===n)throw Error("3D bounding boxes not supported in an oblique plane");return e[n][0]-=t,e[n][1]+=t,e},gu=function(e,t,n={}){let i=[];return(e.forEach(e=>{let{data:a}=e,{points:o}=a.handles,{imageData:r,dimensions:l}=t,s=o;if(a.cachedStats?.projectionPoints){let{projectionPoints:e}=a.cachedStats;s=[].concat(...e)}let d=ij(s.map(e=>iW.A(r,e)),l);n.numSlicesToProject&&!a.cachedStats?.projectionPoints&&(d=gc(d,n.numSlicesToProject)),i.push(d)}),1===i.length)?i[0]:i.reduce((e,t)=>({iMin:Math.min(e.iMin,t.iMin),jMin:Math.min(e.jMin,t.jMin),kMin:Math.min(e.kMin,t.kMin),iMax:Math.max(e.iMax,t.iMax),jMax:Math.max(e.jMax,t.jMax),kMax:Math.max(e.kMax,t.kMax)}),{iMin:1/0,jMin:1/0,kMin:1/0,iMax:-1/0,jMax:-1/0,kMax:-1/0})},gg=function(e,t,n,i){let a,o=e.map(e=>sI.getAnnotation(e));var r=o;let l=[gh.toolName,gs.toolName];for(let e of r){let t=e.metadata.toolName;if(!l.includes(t))throw Error("rectangleROIThresholdVolumeByRange only supports RectangleROIThreshold and RectangleROIStartEndThreshold annotations")}for(let e=0;e<n.length;e++)(n[e].volume.voxelManager.getScalarDataLength()===t.voxelManager.getScalarDataLength()||0===e)&&(a=gu(o,n[e].volume,i));let s=u5(t,n,{...i,boundsIJK:a,segmentationId:i.segmentationId});return s.modified(),s},gm=function(e,t=1,n="mergedLabelmap"){let i;e.forEach(({direction:t,dimensions:n,origin:i,spacing:a})=>{if(!aM.n4(n,e[0].dimensions)||!aM.n4(t,e[0].direction)||!aM.n4(a,e[0].spacing)||!aM.n4(i,e[0].origin))throw Error("labelmaps must have the same size and shape")});let a=e[0],o=new(a.voxelManager.getConstructor())(a.voxelManager.getScalarDataLength());e.forEach(e=>{let n=e.voxelManager,i=n.getScalarDataLength();for(let e=0;e<i;e++)n.getAtIndex(e)===t&&(o[e]=t)});let r={scalarData:o,metadata:a.metadata,spacing:a.spacing,origin:a.origin,direction:a.direction,dimensions:a.dimensions},l=nV.Ay.getVolume(n);return l?(i=l).voxelManager.setCompleteScalarDataArray(o):i=nW.createLocalVolume(n,r),i};async function gp(e){let{viewportId:t,renderingEngineId:n,options:i}=e,{segmentationId:a}=e,o=(0,ej.b1)(t,n);if(!o)throw Error("element disabled");let{viewport:r}=o;if(!(r instanceof i8.A))throw Error("Segmentation only supports VolumeViewport");let{uid:l}=r.getDefaultActor();if(void 0===a&&(a=`${l}-based-segmentation-${i?.volumeId??eX.A().slice(0,8)}`),i){let e=structuredClone(i);await nW.createLocalVolume(a,e)}else{let e=r.getVolumeId();nW.createAndCacheDerivedLabelmapVolume(e,{volumeId:a})}return a}let gf=function(e,t,n={}){let i=n.onFlood,a=n.onBoundary,o=n.equals,r=n.filter,l=n.diagonals||!1,s=e(...t),d=(function(e){let t=[];for(let o=0;o<Math.pow(3,e);o+=1){var n,i,a;let r=(n=o.toString(3),i="0",(Array((a=e)+1).join("0")+n).slice(-a));t.push(r.split("").map(function(e){return parseInt(e,10)-1}))}return t})(t.length).filter(function(e){let t=function(e){let t=0;for(let n=0;n<e.length;n+=1)0!==e[n]&&(t+=1);return t}(e);return 0!==t&&(1===t||l)}),h=[],c=[],u=new Set,g=n.bounds;for(h.push({currentArgs:t});h.length>0;)!function(t){var n;let l=t.currentArgs,p=t.previousArgs;m(l)||(function(e){let[t,n,i=0]=e;u.add(t+32768+65536*(n+32768+65536*(i+32768)))}(l),function(t){let n=e(...t);return o?o(n,s):n===s}(l)?(n=l,c.push(n),i&&i(...n),function(e){for(let t=0;t<d.length;t+=1){let n=d[t],i=e.slice(0);for(let t=0;t<e.length;t+=1)i[t]+=n[t];r?.(i)!==!1&&(m(i)||h.push({currentArgs:i,previousArgs:e}))}}(l)):function(e){let[t,n,i=0]=e;g?.set(t+32768+65536*(n+32768+65536*(i+32768)),e),a&&a(...e)}(p))}(h.pop());return{flooded:c};function m(e){let[t,n,i=0]=e;return u.has(t+32768+65536*(n+32768+65536*(i+32768)))}},gv={[uB.OnInteractionStart]:e=>{let{segmentIndex:t,previewSegmentIndex:n,segmentationVoxelManager:i,centerIJK:a,viewPlaneNormal:o,segmentationImageData:r,configuration:l}=e;if(!l?.useCenterSegmentIndex){e.centerSegmentIndexInfo.segmentIndex=null,e.centerSegmentIndexInfo.hasSegmentIndex=!1,e.centerSegmentIndexInfo.hasPreviewIndex=!1;return}
167let s=!1,d=!1,h=[...i.getBoundsIJK()];if(Math.abs(o[0])>.8?h[0]=[a[0],a[0]]:Math.abs(o[1])>.8?h[1]=[a[1],a[1]]:Math.abs(o[2])>.8&&(h[2]=[a[2],a[2]]),i.forEach(({value:e})=>{s||=e===t,d||=e===n},{imageData:r,isInObject:e.isInObject,boundsIJK:h}),!s&&!d){e.centerSegmentIndexInfo.segmentIndex=null;return}let c=i.getAtIJKPoint(a);e.centerSegmentIndexInfo.segmentIndex=c,e.centerSegmentIndexInfo.hasSegmentIndex=s,e.centerSegmentIndexInfo.hasPreviewIndex=d}},gI={[uB.Initialize]:e=>{let{operationName:t,centerIJK:n,segmentationVoxelManager:i,imageVoxelManager:a,configuration:o,segmentIndex:r,viewport:l}=e;if(!o?.threshold?.isDynamic||!n||!r||t===uB.RejectPreview||t===uB.OnInteractionEnd)return;let s=i.getBoundsIJK(),{range:d,dynamicRadius:h=0}=o.threshold,c=d?0:h,{viewPlaneNormal:u}=l.getCamera(),g=s.map((e,t)=>{let[i,a]=e;return[Math.max(i,n[t]-c),Math.min(a,n[t]+c)]});Math.abs(u[0])>.8?g[0]=[n[0],n[0]]:Math.abs(u[1])>.8?g[1]=[n[1],n[1]]:Math.abs(u[2])>.8&&(g[2]=[n[2],n[2]]);let m=d||[1/0,-1/0],p=c*c;a.forEach(({value:e,pointIJK:t})=>{if(iT.lo(n,t)>p)return;let i=Array.isArray(e)?iT.Il(e):e;m[0]=Math.min(i,m[0]),m[1]=Math.max(i,m[1])},{boundsIJK:g}),o.threshold.range=m},[uB.OnInteractionStart]:e=>{let{configuration:t}=e;t?.threshold?.isDynamic&&(t.threshold.range=null)},[uB.ComputeInnerCircleRadius]:e=>{let{configuration:t,viewport:n}=e,i=t?.threshold;if(!i)return;let{dynamicRadius:a=0,isDynamic:o}=i;if(!o){i.dynamicRadiusInCanvas=0;return}if(0===a)return;let r=n.getImageData();if(!r)return;let{spacing:l}=r,s=[n.element.clientWidth/2,n.element.clientHeight/2],d=a*l[0],h=n.canvasToWorld(s).map(e=>e+d),c=n.worldToCanvas(h),u=Math.abs(s[0]-c[0]);i.dynamicRadiusInCanvas||(i.dynamicRadiusInCanvas=0),i.dynamicRadiusInCanvas=3+u}},gC={[uB.Initialize]:e=>{e.segmentIndex=0}},{isEqual:g_}=i9,gE={toIJK:e=>e,fromIJK:e=>e,type:"acquistion"},gw={toIJK:([e,t,n])=>[n,e,t],fromIJK:([e,t,n])=>[t,n,e],type:"jk"},gA={toIJK:([e,t,n])=>[e,n,t],fromIJK:([e,t,n])=>[e,n,t],type:"ik"};function gS(e,t){if(!(e instanceof nU.A))return{...gE,boundsIJKPrime:t};let{viewPlaneNormal:n}=e.getCamera(),i=g_(Math.abs(n[0]),1)&&gw||g_(Math.abs(n[1]),1)&&gA||g_(Math.abs(n[2]),1)&&gE;return i?{...i,boundsIJKPrime:i.fromIJK(t)}:{toIJK:null,boundsIJKPrime:null,fromIJK:null,error:`Only mappings orthogonal to acquisition plane are permitted, but requested ${n}`}}let{RLEVoxelMap:gy,VoxelManager:gb}=i9;!function(e){e[e.SEGMENT=-1]="SEGMENT",e[e.ISLAND=-2]="ISLAND",e[e.INTERIOR=-3]="INTERIOR",e[e.EXTERIOR=-4]="EXTERIOR",e[e.INTERIOR_SMALL=-5]="INTERIOR_SMALL",e[e.INTERIOR_TEST=-6]="INTERIOR_TEST"}(y||(y={}));class gT{constructor(e){this.fillInternalEdge=!1,this.maxInternalRemove=128,this.maxInternalRemove=e?.maxInternalRemove??this.maxInternalRemove,this.fillInternalEdge=e?.fillInternalEdge??this.fillInternalEdge}initialize(e,t,n){let i=!!t.sourceVoxelManager,a=i?t.sourceVoxelManager:t,o=i?t:gb.createRLEHistoryVoxelManager(a),{segmentIndex:r=1,previewSegmentIndex:l=1}=n,s=n.points||a.getPoints();if(!s?.length)return;let d=a.getBoundsIJK().map((e,t)=>[Math.min(e[0],...s.map(e=>e[t])),Math.max(e[1],...s.map(e=>e[t]))]);if(d.find(e=>e[0]<0||e[1]>65535))return;let{toIJK:h,fromIJK:c,boundsIJKPrime:u,error:g}=gS(e,d);if(g)return void console.warn("Not performing island removal for planes not orthogonal to acquisition plane",g);let[m,p,f]=c(a.dimensions),v=new gy(m,p,f);return v.fillFrom((e,t,n)=>{let i=a.toIndex(h([e,t,n])),o=a.getAtIndex(i);if(o===l||o===r)return y.SEGMENT},u),v.normalizer={toIJK:h,fromIJK:c,boundsIJKPrime:u},this.segmentSet=v,this.previewVoxelManager=o,this.segmentIndex=r,this.previewSegmentIndex=l??r,this.selectedPoints=s,!0}floodFillSegmentIsland(){let{selectedPoints:e,segmentSet:t}=this,n=0,{fromIJK:i}=t.normalizer;return e.forEach(e=>{let a=i(e),o=t.toIndex(a),[r,l,s]=a;t.get(o)===y.SEGMENT&&(n+=t.floodFill(r,l,s,y.ISLAND))}),n}removeExternalIslands(){let{previewVoxelManager:e,segmentSet:t}=this,{toIJK:n}=t.normalizer;t.forEach((i,a)=>{let[,o,r]=t.toIJK(i);if(a.value!==y.ISLAND)for(let t=a.start;t<a.end;t++){let i=n([t,o,r]),a=e.getAtIJKPoint(i);e.setAtIJKPoint(i,void 0===a?0:null)}},{rowModified:!0})}
167removeInternalIslands(){let{segmentSet:e,previewVoxelManager:t,previewSegmentIndex:n}=this,{height:i,normalizer:a,width:o}=e,{toIJK:r}=a;return e.forEachRow((t,n)=>{let i;for(let a of[...n])if(a.value===y.ISLAND){if(!i){if(this.fillInternalEdge&&a.start>0)for(let n=0;n<a.start;n++)e.set(t+n,y.INTERIOR);i=a;continue}for(let n=i.end;n<a.start;n++)e.set(t+n,y.INTERIOR);i=a}if(this.fillInternalEdge&&i?.end<o)for(let n=i.end;n<o;n++)e.set(t+n,y.INTERIOR)}),e.forEach((t,n)=>{if(n.value!==y.INTERIOR)return;let[,a,o]=e.toIJK(t),r=a>0?e.getRun(a-1,o):null,l=a+1<i?e.getRun(a+1,o):null,s=a===i-1,d=0===a,h=gT.covers(n,r)||d&&this.fillInternalEdge,c=gT.covers(n,l)||s&&this.fillInternalEdge;!(n.end-n.start>2)||h&&c||e.floodFill(n.start,a,o,y.EXTERIOR,{singlePlane:!0})}),e.forEach((t,n)=>{if(n.value!==y.INTERIOR)return;let[,i,a]=e.toIJK(t),o=e.floodFill(n.start,i,a,y.INTERIOR_TEST)>this.maxInternalRemove?y.EXTERIOR:y.INTERIOR_SMALL;e.floodFill(n.start,i,a,o)}),e.forEach((i,a)=>{if(a.value===y.INTERIOR_SMALL)for(let o=a.start;o<a.end;o++){let a=r(e.toIJK(i+o));t.setAtIJKPoint(a,n)}}),t.getArrayOfModifiedSlices()}static covers(e,t){if(!t)return!1;let{start:n}=e,{end:i}=e;for(let e of t)if(n>=e.start&&n<e.end&&(n=e.end)>=i)return!0;return!1}}let gM={[uB.OnInteractionEnd]:e=>{let{previewSegmentIndex:t,segmentIndex:n,viewport:i,segmentationVoxelManager:a,activeStrategy:o,memo:r}=e;if("THRESHOLD_INSIDE_SPHERE_WITH_ISLAND_REMOVAL"!==o||null===n)return;let l=new gT,s=r?.voxelManager||a;if(!l.initialize(i,s,{previewSegmentIndex:t,segmentIndex:n}))return;l.floodFillSegmentIsland(),l.removeExternalIslands(),l.removeInternalIslands();let d=s.getArrayOfModifiedSlices();d&&aa(e.segmentationId,d,t)}},gD={[uB.Preview]:function(e){let{previewSegmentIndex:t,configuration:n,enabledElement:i}=e;if(!t||!n)return;this.onInteractionStart?.(i,e);let a=this.fill(i,e);return a&&this.onInteractionEnd?.(i,e),a},[uB.Initialize]:e=>{let{segmentIndex:t,previewColor:n,previewSegmentIndex:i}=e;if(e.modified=!1,null==i||null==t)return;let a=s9(e.segmentationId);a?.forEach(t=>{dd(t,e.segmentationId,i,n)}),e.modified=!0},[uB.AcceptPreview]:e=>{let{previewSegmentIndex:t,segmentationVoxelManager:n,memo:i,segmentIndex:a,centerSegmentIndexInfo:o}=e||{},{changedIndices:r}=o||{};n.forEach(({index:e})=>{let o=n.getAtIndex(e);r?.length>0?r.includes(e)&&i.voxelManager.setAtIndex(e,0):o===t&&i.voxelManager.setAtIndex(e,a)}),aa(e.segmentationId,n.getArrayOfModifiedSlices(),a),e.centerSegmentIndexInfo.changedIndices=[]},[uB.RejectPreview]:e=>{e&&lN.DefaultHistoryMemo.undoIf(t=>{if(!t?.voxelManager)return!1;let{segmentationVoxelManager:n}=t,i=!1;return n.forEach(({value:t})=>{t===e.previewSegmentIndex&&(i=!0)}),i})}},gO={[uB.Fill]:e=>{let{segmentsLocked:t,segmentationImageData:n,segmentationVoxelManager:i,brushStrategy:a,centerIJK:o}=e,r=a.createIsInThreshold?.(e),{setValue:l}=a,s=r?n=>{let{value:i,index:a}=n;!t.includes(i)&&r(a)&&l(e,n)}:t=>l(e,t);i.forEach(s,{imageData:n,isInObject:e.isInObject,boundsIJK:e.isInObjectBoundsIJK}),i.addPoint(o)}},gx={[uB.INTERNAL_setValue]:(e,{value:t,index:n})=>{let{segmentsLocked:i,previewSegmentIndex:a,memo:o,segmentationVoxelManager:r,centerSegmentIndexInfo:l,segmentIndex:s}=e,d=r.getAtIndex(n);if(!i.includes(t)&&(l||d!==s)&&(l?.segmentIndex===0||d!==s)){if(l?.segmentIndex===null)return void o.voxelManager.setAtIndex(n,a??s);if(!a){let e=s;l&&(e=l.segmentIndex),o.voxelManager.setAtIndex(n,e);return}!function({operationData:e,existingValue:t,index:n}){let{previewSegmentIndex:i,memo:a,centerSegmentIndexInfo:o,previewOnHover:r,segmentIndex:l}=e,{hasPreviewIndex:s,hasSegmentIndex:d,segmentIndex:h}=o;if(0===h&&d&&s)return t===l||r||t===i&&a.voxelManager.setAtIndex(n,0);if(0===h&&d&&!s){if(0===t||t!==l)return;a.voxelManager.setAtIndex(n,i),o.changedIndices.push(n);return}if(0===h&&!d&&s)return t===l||r||t===i&&a.voxelManager.setAtIndex(n,0);if(0===h&&!d&&!s)return t===l||t===i&&a.voxelManager.setAtIndex(n,i);if(h===i&&d&&s||h===i&&!d&&s||h===l&&d&&s||h===l&&d&&!s){if(t===l)return;a.voxelManager.setAtIndex(n,i)}}({operationData:e,existingValue:d,index:n})}}},gP={[uB.CreateIsInThreshold]:e=>{let{imageVoxelManager:t,segmentIndex:n,configuration:i}=e;if(i&&n)return e=>{let n=t.getAtIndex(e),a=Array.isArray(n)?iT.Bw(n):n,{threshold:o}=i||{};return!o?.range?.length||o.range[0]<=a&&a<=o.range[1]}}};var gL=n(22714);function gN(){return{maxIJKs:[]}}function gR(e,t){let{value:n}=t,{maxIJKs:i}=e,a=i.length;if("number"!=typeof n||a>=10&&n<i[0].value)return;let o={value:t.value,pointLPS:t.pointLPS?[t.pointLPS[0],t.pointLPS[1],t.pointLPS[2]]:void 0,pointIJK:t.pointIJK?[t.pointIJK[0],t.pointIJK[1],t.pointIJK[2]]:void 0};if(!a||n>=i[a-1].value)i.push(o);else for(let e=0;e<a;e++)if(n<=i[e].value){i.splice(e,0,o);break}a>=10&&i.splice(0,1)}
167function gk(e,t,n){let{spacing:i,calibration:a}=n,{volumeUnit:o}=aU({calibration:a,hasPixelSpacing:!0},[]),r=i?i[0]*i[1]*i[2]:1;return t.volume={value:Array.isArray(t.count.value)?t.count.value.map(e=>e*r):t.count.value*r,unit:o,name:"volume",label:"Volume"},t.maxIJKs=e.maxIJKs.filter(e=>void 0!==e.pointIJK),t.array.push(t.volume),e.maxIJKs=[],t}class gU extends lP{static{this.volumetricState=gN()}static statsInit(e){super.statsInit(e),this.volumetricState=gN()}static statsCallback(e){super.statsCallback(e),gR(this.volumetricState,e)}static getStatistics(e){let t={...e,unit:e?.unit||"none",calibration:e?.calibration,hasPixelSpacing:e?.hasPixelSpacing},n=super.getStatistics(t);return gk(this.volumetricState,n,t)}}class gV extends lL{constructor(e){super(e),this.volumetricState=gN()}statsInit(e){super.statsInit(e),this.volumetricState=gN()}statsCallback(e){super.statsCallback(e),gR(this.volumetricState,e)}getStatistics(e){let t={...e,unit:e?.unit||"none",calibration:e?.calibration,hasPixelSpacing:e?.hasPixelSpacing},n=super.getStatistics(t);return gk(this.volumetricState,n,t)}}let gF=gU,gG=Math.pow(3e3/(4*Math.PI),1/3);async function gB({operationData:e,indices:t,unit:n,mode:i}){let a=uq(e);if(!a)return;let{segmentationVoxelManager:o,imageVoxelManager:r,segmentationImageData:l,imageData:s}=a;if(!o||!l)return;let d=l.getSpacing(),{boundsIJK:h}=o;if(!h)return gF.getStatistics({spacing:d});let c={scalarData:o.getCompleteScalarDataArray(),dimensions:l.getDimensions(),spacing:l.getSpacing(),origin:l.getOrigin(),direction:l.getDirection()},u={scalarData:r.getCompleteScalarDataArray(),dimensions:s.getDimensions(),spacing:s.getSpacing(),origin:s.getOrigin(),direction:s.getDirection()};if(!u.scalarData?.length)return;let g=await (0,uP.G_)().executeTask("compute","calculateSegmentsStatisticsVolume",{segmentationInfo:c,imageInfo:u,indices:t,unit:n,mode:i});if(uX(uR.COMPUTE_STATISTICS,100),"collective"===i)return gW({stats:g,unit:n,spacing:d,segmentationImageData:l,imageVoxelManager:r});{let e={};return Object.entries(g).forEach(([t,i])=>{e[t]=gW({stats:i,unit:n,spacing:d,segmentationImageData:l,imageVoxelManager:r})}),e}}let gH=(e,t)=>{if(!e.array)return;let n=e.array.findIndex(e=>e.name===t.name);-1!==n?e.array[n]=t:e.array.push(t)},gW=({stats:e,unit:t,spacing:n,segmentationImageData:i,imageVoxelManager:a})=>{if(e.mean.unit=t,e.max.unit=t,e.min.unit=t,"SUV"!==t)return e;let o=n.map(e=>Math.max(1,Math.round(1.1*gG/e)));for(let r of e.maxIJKs){let l=function(e,t,n,i,a){let{pointIJK:o,pointLPS:r}=e;if(!o)return;let l=o.map((e,n)=>[e-t[n],e+t[n]]);return gF.statsInit({storePointData:!1}),gL.ii(n,{pointInShapeFn:(e,n)=>{let i=(n[0]-o[0])/t[0],a=(n[1]-o[1])/t[1],r=(n[2]-o[2])/t[2];return i*i+a*a+r*r<=1},callback:({pointIJK:e,pointLPS:t})=>{let n=i.getAtIJKPoint(e);void 0!==n&&gF.statsCallback({value:n,pointLPS:t,pointIJK:e})},boundsIJK:l}),gF.getStatistics({spacing:a})}(r,o,i,a,n);if(!l)continue;let{mean:s}=l;(!e.peakValue||e.peakValue.value<=s.value)&&(e.peakValue={name:"peakValue",label:"Peak Value",value:s.value,unit:t},e.peakPoint={name:"peakLPS",label:"Peak SUV Point",value:r.pointLPS?[...r.pointLPS]:null,unit:null},gH(e,e.peakValue),gH(e,e.peakPoint))}if(e.volume&&e.mean){let n=e.volume.value,i=e.mean.value;e.lesionGlycolysis={name:"lesionGlycolysis",label:"Lesion Glycolysis",value:n*i,unit:`${e.volume.unit}\xb7${t}`},gH(e,e.lesionGlycolysis)}return e};async function g$({segImageIds:e,indices:t,unit:n,mode:i}){uX(uR.COMPUTE_STATISTICS,0);let{segmentationInfo:a,imageInfo:o}=uK(e),r=await (0,uP.G_)().executeTask("compute","calculateSegmentsStatisticsStack",{segmentationInfo:a,imageInfo:o,indices:t,mode:i});uX(uR.COMPUTE_STATISTICS,100);let l=a[0].spacing,s=a[0],d=o[0].voxelManager;if("collective"===i)return gW({stats:r,unit:n,spacing:l,segmentationImageData:s,imageVoxelManager:d});{let e={};return Object.entries(r).forEach(([t,i])=>{e[t]=gW({stats:i,unit:n,spacing:l,segmentationImageData:s,imageVoxelManager:d})}),e}}let gz=async function e({segmentationId:e,segmentIndices:t,mode:n="collective"}){uU(),uX(uR.COMPUTE_STATISTICS,0);let i=uj(e,t);if(!i)return;let{operationData:a,segVolumeId:o,segImageIds:r,reconstructableVolume:l,indices:s}=i,{refImageId:d,modalityUnitOptions:h}=uY(o,r),c=dg(d,h);return l?await gB({operationData:a,indices:s,unit:c,mode:n}):await g$({segImageIds:r,indices:s,unit:c,mode:n})},gX={determineSegmentIndex:gv,dynamicThreshold:gI,erase:gC,islandRemoval:gM,preview:gD,regionFill:gO,setValue:gx,threshold:gP,labelmapStatistics:{[uB.GetStatistics]:function(e,t,n){let{indices:i}=n,{segmentationId:a,viewport:o}=t;gz({segmentationId:a,segmentIndices:i})}},ensureSegmentationVolumeFor3DManipulation:uW,ensureImageVolumeFor3DManipulation:uz,circularCursor:{[uB.CalculateCursorGeometry]:function(e,t){if(!t)return;let{configuration:n,activeStrategy:i,hoverData:a}=t,{viewport:o}=e,r=o.getCamera(),{brushSize:l}=n,s=iT.fA(r.viewUp[0],r.viewUp[1],r.viewUp[2]),d=iT.fA(r.viewPlaneNormal[0],r.viewPlaneNormal[1],r.viewPlaneNormal[2]),h=iT.vt();iT.$A(h,s,d);let{canvasToWorld:c}=o,{centerCanvas:u}=a,g=c([u[0],u[1]]),m=iT.vt(),p=iT.vt(),f=iT.vt(),v=iT.vt();for(let e=0;e<=2;e++)m[e]=g[e]-s[e]*l,p[e]=g[e]+s[e]*l,f[e]=g[e]-h[e]*l,v[e]=g[e]+h[e]*l;if(!a)return;let{brushCursor:I}=a,{data:C}=I;void 0===C.handles&&(C.handles={}),C.handles.points=[m,p,f,v];let _=n.strategies[i];"function"==typeof _?.computeInnerCircleRadius&&_.computeInnerCircleRadius({configuration:n,viewport:o}),C.invalidated=!1},[uB.RenderCursor]:function(e,t,n){if(!t)return;let{configuration:i,hoverData:a}=t,{viewport:o}=e,{brushCursor:r}=a,l=r.metadata;if(!l)return;let s=l.brushCursorUID,{points:d}=r.data.handles,h=d.map(e=>o.worldToCanvas(e)),c=h[0],u=h[1],g=[Math.floor((c[0]+u[0])/2),Math.floor((c[1]+u[1])/2)],m=Math.abs(c[1]-Math.floor((c[1]+u[1])/2)),p=`rgb(${l.segmentColor?.slice(0,3)||[0,0,0]})`;if(!o.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");uo(n,s,"0",g,m,{color:p,lineDash:0===this.centerSegmentIndexInfo.segmentIndex?[1,2]:null});let{dynamicRadiusInCanvas:f}=i?.threshold||{dynamicRadiusInCanvas:0};f&&uo(n,s,"1",g,f,{color:p})}}};class gj{static{this.COMPOSITIONS=gX}static{this.childFunctions={[uB.OnInteractionStart]:gq(uB.OnInteractionStart,uB.Initialize),[uB.OnInteractionEnd]:gq(uB.OnInteractionEnd,uB.Initialize),[uB.Fill]:gq(uB.Fill),[uB.Initialize]:gq(uB.Initialize),[uB.CreateIsInThreshold]:gK(uB.CreateIsInThreshold),[uB.Interpolate]:gq(uB.Interpolate,uB.Initialize),[uB.AcceptPreview]:gq(uB.AcceptPreview,uB.Initialize),[uB.RejectPreview]:gq(uB.RejectPreview,uB.Initialize),[uB.INTERNAL_setValue]:gK(uB.INTERNAL_setValue),[uB.Preview]:gK(uB.Preview,!1),[uB.C
167omputeInnerCircleRadius]:gq(uB.ComputeInnerCircleRadius),[uB.EnsureSegmentationVolumeFor3DManipulation]:gq(uB.EnsureSegmentationVolumeFor3DManipulation),[uB.EnsureImageVolumeFor3DManipulation]:gq(uB.EnsureImageVolumeFor3DManipulation),[uB.AddPreview]:gq(uB.AddPreview),[uB.GetStatistics]:gK(uB.GetStatistics),[uB.CalculateCursorGeometry]:gK(uB.CalculateCursorGeometry,!0),[uB.RenderCursor]:gK(uB.RenderCursor,!0),compositions:null}}constructor(e,...t){this._initialize=[],this._fill=[],this._onInteractionStart=[],this.fill=(e,t)=>{let n=this.initialize(e,t,uB.Fill);if(!n)return;this._fill.forEach(e=>e(n));let{segmentationVoxelManager:i,segmentIndex:a}=n;return aa(n.segmentationId,i.getArrayOfModifiedSlices(),a),n},this.onInteractionStart=(e,t)=>{let n=this.initialize(e,t);n&&this._onInteractionStart.forEach(e=>e.call(this,n))},this.addPreview=(e,t)=>{let n=this.initialize(e,t,uB.AddPreview);if(n)return n},this.configurationName=e;let n=t.find(e=>e.hasOwnProperty(uB.CalculateCursorGeometry)),i=t.find(e=>e.hasOwnProperty(uB.RenderCursor));for(let e of(n||t.push({[uB.CalculateCursorGeometry]:gX.circularCursor.calculateCursorGeometry}),i||t.push({[uB.RenderCursor]:gX.circularCursor.renderCursor}),this.compositions=t,t.forEach(e=>{let t="function"==typeof e?e():e;if(t)for(let e in t){if(!gj.childFunctions[e])throw Error(`Didn't find ${e} as a brush strategy`);gj.childFunctions[e](this,t[e])}}),this.strategyFunction=(e,t)=>this.fill(e,t),Object.keys(gj.childFunctions)))this.strategyFunction[e]=this[e]}initialize(e,t,n){let{viewport:i}=e,a=uG({operationData:t,viewport:i,strategy:this});if(!a||!a.imageVoxelManager||!a.segmentationVoxelManager||!a.segmentationImageData)return null;let{imageVoxelManager:o,segmentationVoxelManager:r,segmentationImageData:l}=a,s=t.createMemo(t.segmentationId,r),d={operationName:n,...t,segmentIndex:t.segmentIndex,enabledElement:e,imageVoxelManager:o,segmentationVoxelManager:r,segmentationImageData:l,viewport:i,centerWorld:null,isInObject:null,isInObjectBoundsIJK:null,brushStrategy:this,memo:s};return this._initialize.forEach(e=>e(d)),d}}function gq(e,t){let n=`_${e}`;return(i,a)=>{i[n]||=[],i[n].push(a),i[e]||=t?(a,o,...r)=>{let l,s=i[t](a,o,e);return i[n].forEach(e=>{let t=e.call(i,s,...r);l||=t}),l}:(e,...t)=>{i[n].forEach(n=>n.call(i,e,...t))}}}function gK(e,t=!0){return(n,i)=>{if(n[e])throw Error(`The singleton method ${e} already exists`);n[e]=t?i:(e,t,...a)=>(t.enabledElement=e,i.call(n,t,...a))}}function gY(e,t){let{center:n,radius:i}=e,a=e.radius2||i*i;return(t[0]-n[0])*(t[0]-n[0])+(t[1]-n[1])*(t[1]-n[1])+(t[2]-n[2])*(t[2]-n[2])<=a}let{transformWorldToIndex:gZ,transformIndexToWorld:gJ,isEqual:gQ}=i9;function g0(e){let[t,n,i,a]=e,o=[i[0],n[1]],r=[a[0],t[1]];return[o,r,[i[0],t[1]],[a[0],n[1]]]}let g1={[uB.Initialize]:e=>{let{points:t,viewport:n,segmentationImageData:i,viewUp:a,viewPlaneNormal:o}=e;if(!t)return;let r=iT.vt();t.length>=2?(iT.WQ(r,t[0],t[1]),iT.hs(r,r,.5)):iT.C(r,t[0]),e.centerWorld=r,e.centerIJK=gZ(i,r);let l=t.length>=2?iT.Io(t[0],t[1])/2:0,s=g0(t.map(e=>n.worldToCanvas(e))).map(e=>n.canvasToWorld(e)),d=iT.fA(a[0],a[1],a[2]);iT.S8(d,d);let h=iT.fA(o[0],o[1],o[2]);iT.S8(h,h);let c=iT.vt();iT.$A(c,d,h),iT.S8(c,c);let u=(e.strokePointsWorld&&e.strokePointsWorld.length>0?e.strokePointsWorld:[e.centerWorld]).map(e=>iT.o8(e)),g=ij(u.flatMap(e=>(function(e,t,n,i){let a=iT.fA(e[0],e[1],e[2]),o=iT.vt();iT.Ln(o,a,t,i);let r=iT.vt();iT.Ln(r,a,t,-i);let l=iT.vt();iT.Ln(l,a,n,i);let s=iT.vt();return iT.Ln(s,a,n,-i),[r,o,s,l]})(e,d,c,l)).map(e=>gZ(i,e)),i.getDimensions());e.strokePointsWorld=u,e.isInObject=g2(s,{strokePointsWorld:u,segmentationImageData:i,radius:l}),e.isInObjectBoundsIJK=g}};function g2(e=[],t={}){if(!e||4!==e.length)throw Error("createPointInEllipse: cornersInWorld must have 4 points");let[n,i,a,o]=e,r=iT.vt();iT.WQ(r,n,i),iT.hs(r,r,.5);let l=iT.vt();iT.Re(l,o,n);let s=iT.Bw(l)/2;iT.S8(l,l);let d=iT.vt();iT.Re(d,a,n);let h=iT.Bw(d)/2;iT.S8(d,d);let c=iT.vt();iT.$A(c,l,d),iT.S8(c,c);let u=t.radius??Math.max(s,h),g=function(e,t){if(!e.length||t<=0)return null;let n=t*t,i=e.map(e=>[e[0],e[1],e[2]]),a=[];for(let e=1;e<i.length;e++){let t=i[e-1],n=i[e],o=n[0]-t[0],r=n[1]-t[1],l=n[2]-t[2],s=o*o+r*r+l*l;a.push({start:t,vector:[o,r,l],lengthSquared:s})}return e=>{if(!e)return!1;for(let t of i){let i=e[0]-t[0],a=e[1]-t[1],o=e[2]-t[2];if(i*i+a*a+o*o<=n)return!0}for(let{start:t,vector:i,lengthSquared:o}of a){if(0===o){let i=e[0]-t[0],a=e[1]-t[1],o=e[2]-t[2];if(i*i+a*a+o*o<=n)return!0;continue}let a=e[0]-t[0],r=e[1]-t[1],l=e[2]-t[2],s=Math.max(0,Math.min(1,(a*i[0]+r*i[1]+l*i[2])/o)),d=t[0]+i[0]*s,h=t[1]+i[1]*s,c=t[2]+i[2]*s,u=e[0]-d,g=e[1]-h,m=e[2]-c;if(u*u+g*g+m*m<=n)return!0}return!1}}(t.strokePointsWorld||[],u);if(gQ(s,h)){let e={center:r,radius:s,radius2:s*s};return(n,i)=>{let a=n;return!a&&i&&t.segmentationImageData&&(a=gJ(t.segmentationImageData,i)),!!a&&(!!g?.(a)||gY(e,a))}}return(e,i)=>{let a=e;if(!a&&i&&t.segmentationImageData&&(a=gJ(t.segmentationImageData,i)),!a)return!1;if(g?.(a))return!0;let o=iT.vt();iT.Re(o,a,r);let u=iT.Om(o,c),m=iT.vt();iT.Ln(m,o,c,-u);let p=iT.vt(),f=iT.vt();iT.Re(f,r,n),iT.Re(p,m,f);let v=iT.Om(p,l),I=iT.Om(p,d);return v*v/(s*s)+I*I/(h*h)<=1}}let g5=new gj("Circle",gX.regionFill,gX.setValue,g1,gX.determineSegmentIndex,gX.preview,gX.labelmapStatistics),g3=new gj("CircleThreshold",gX.regionFill,gX.setValue,g1,gX.determineSegmentIndex,gX.dynamicThreshold,gX.threshold,gX.preview,gX.islandRemoval,gX.labelmapStatistics),g4=g5.strategyFunction,g8=g3.strategyFunction;function g9(){throw Error("Not yet implemented")}let{transformWorldToIndex:g7}=i9,g6={[uB.Initialize]:e=>{let{points:t,viewport:n,segmentationImageData:i}=e;if(!t)return;let a=iT.vt();t.length>=2?(iT.WQ(a,t[0],t[1]),iT.hs(a,a,.5)):iT.C(a,t[0]),e.centerWorld=a,e.centerIJK=g7(i,a);let o=function(e,t,n){if(!n)throw Error("viewport is required in order to calculate the sphere bounds");let i=n.getCamera(),a=iT.fA(i.viewUp[0],i.viewUp[1],i.viewUp[2]),o=iT.fA(i.viewPlaneNormal[0],i.viewPlaneNormal[1],i.viewPlaneNormal[2]),r=iT.vt();return iT.$A(r,a,o),uE(e,t,{row:r,normal:o,column:iT.ze(iT.vt(),a)})}(t.slice(0,2),i,n),r=g0(t.map(e=>n.worldToCanvas(e))).map(e=>n.canvasToWorld(e)),l=t.length>=2?iT.Io(t[0],t[1])/2:void 0,s=e.strokePointsWorld&&e.strokePointsWorld.length>0?e.strokePointsWorld:[e.centerWorld],d=o.boundsIJK,h=e.centerIJK,c=s.reduce((e,t)=>
167{if(!t)return e;let n=g7(i,t),a=[n[0]-h[0],n[1]-h[1],n[2]-h[2]],o=[[d[0][0]+a[0],d[0][1]+a[0]],[d[1][0]+a[1],d[1][1]+a[1]],[d[2][0]+a[2],d[2][1]+a[2]]];return e?[[Math.min(e[0][0],o[0][0]),Math.max(e[0][1],o[0][1])],[Math.min(e[1][0],o[1][0]),Math.max(e[1][1],o[1][1])],[Math.min(e[2][0],o[2][0]),Math.max(e[2][1],o[2][1])]]:o},null)??o.boundsIJK;if(i){let t=i.getDimensions();e.isInObjectBoundsIJK=[[Math.max(0,Math.min(c[0][0],t[0]-1)),Math.max(0,Math.min(c[0][1],t[0]-1))],[Math.max(0,Math.min(c[1][0],t[1]-1)),Math.max(0,Math.min(c[1][1],t[1]-1))],[Math.max(0,Math.min(c[2][0],t[2]-1)),Math.max(0,Math.min(c[2][1],t[2]-1))]]}else e.isInObjectBoundsIJK=c;e.isInObject=g2(r,{strokePointsWorld:e.strokePointsWorld,segmentationImageData:i,radius:l})}},me=new gj("Sphere",gX.regionFill,gX.setValue,g6,gX.determineSegmentIndex,gX.preview,gX.labelmapStatistics,gX.ensureSegmentationVolumeFor3DManipulation),mt=me.strategyFunction,mn=new gj("SphereThreshold",...me.compositions,gX.dynamicThreshold,gX.threshold,gX.ensureSegmentationVolumeFor3DManipulation,gX.ensureImageVolumeFor3DManipulation),mi=new gj("SphereThreshold",...me.compositions,gX.dynamicThreshold,gX.threshold,gX.islandRemoval,gX.ensureSegmentationVolumeFor3DManipulation,gX.ensureImageVolumeFor3DManipulation),ma=mn.strategyFunction,mo=mi.strategyFunction,mr=new gj("EraseSphere",gX.erase,...me.compositions).strategyFunction,ml=new gj("EraseCircle",gX.erase,...g5.compositions).strategyFunction,{VoxelManager:ms,RLEVoxelMap:md}=i9;function mh(e,t){return mu(e,t)}function mc(e){let{segmentationVoxelManager:t,undoVoxelManager:n,redoVoxelManager:i}=this,a=!1===e?i:n;a.forEach(({value:e,pointIJK:n})=>{t.setAtIJKPoint(n,e)});let o=a.getArrayOfModifiedSlices();aa(this.segmentationId,o)}function mu(e,t){let n=ms.createRLEHistoryVoxelManager(t);return{segmentationId:e,restoreMemo:mc,commitMemo:mg,segmentationVoxelManager:t,voxelManager:n,id:eX.A(),operationType:"labelmap"}}function mg(){if(this.redoVoxelManager)return!0;if(!this.voxelManager.modifiedSlices.size)return!1;let{segmentationVoxelManager:e}=this,t=ms.createRLEHistoryVoxelManager(e);for(let e of(md.copyMap(t.map,this.voxelManager.map),this.voxelManager.modifiedSlices.keys()))t.modifiedSlices.add(e);this.undoVoxelManager=t;let n=ms.createRLEVolumeVoxelManager({dimensions:this.segmentationVoxelManager.dimensions});return this.redoVoxelManager=n,t.forEach(({index:t,pointIJK:i,value:a})=>{let o=e.getAtIJKPoint(i);o!==a&&n.setAtIndex(t,o)}),!0}class mm extends lH{static{this.previewData={preview:null,element:null,timerStart:0,timer:null,startPoint:[NaN,NaN],isDrag:!1}}constructor(e,t){super(e,t),this.memoMap=new Map,this.acceptedMemoIds=new Map,this.centerSegmentIndexInfo={segmentIndex:null,hasSegmentIndex:!1,hasPreviewIndex:!1,changedIndices:[]}}_historyRedoHandler(e){let{id:t,operationType:n}=e.detail;if("labelmap"===n){if(this.acceptedMemoIds.has(t)){this._hoverData=null;let e=this.acceptedMemoIds.get(t),n=e?.element,i=this.getOperationData(n);i.segmentIndex=e?.segmentIndex,n&&this.applyActiveStrategyCallback((0,ej.Ay)(n),i,uB.AcceptPreview)}this._previewData.isDrag=!0}}get _previewData(){return mm.previewData}hasPreviewData(){return!!this._previewData.preview}shouldResolvePreviewRequests(){return("Active"===this.mode||"Enabled"===this.mode)&&this.hasPreviewData()}createMemo(e,t){let n=t.id;if(this.memo&&this.memo.segmentationVoxelManager===t)return this.memo;let i=this.memoMap.get(n);return i?i.redoVoxelManager&&(i=mu(e,t),this.memoMap.set(n,i)):(i=mu(e,t),this.memoMap.set(n,i)),this.memo=i,i}createEditData(e){let{viewport:t}=(0,ej.Ay)(e),n=ag(t.id);if(!n){let e=new CustomEvent(e$.A.ERROR_EVENT,{detail:{type:"Segmentation",message:"No active segmentation detected, create a segmentation representation before using the brush tool"},cancelable:!0});return ez.A.dispatchEvent(e),null}let{segmentationId:i}=n,a=dt(i),{representationData:o}=n9(i);return this.getEditData({viewport:t,representationData:o,segmentsLocked:a,segmentationId:i})}getEditData({viewport:e,representationData:t,segmentsLocked:n,segmentationId:i}){if(e instanceof nU.A){if(!t[nB.Labelmap])return;let{volumeId:i}=t[nB.Labelmap];if(!i)return;let a=e.getActors();if(e instanceof iA.A){let e=new CustomEvent(e$.A.ERROR_EVENT,{detail:{type:"Segmentation",message:"Cannot perform brush operation on the selected viewport"},cancelable:!0});return ez.A.dispatchEvent(e),null}let o=a.filter(e=>e.referencedId).map(e=>nV.Ay.getVolume(e.referencedId)),r=nV.Ay.getVolume(i),l=o.find(e=>aM.n4(e.dimensions,r.dimensions))?.volumeId||o[0]?.volumeId;return{volumeId:i,referencedVolumeId:this.configuration.threshold?.volumeId??l,segmentsLocked:n}}{let t=at(e.id,i);if(!t)return;return{imageId:t,segmentsLocked:n}}}createHoverData(e,t){let{viewport:n}=(0,ej.Ay)(e),{viewPlaneNormal:i,viewUp:a}=n.getCamera(),o=[n.id],{segmentIndex:r,segmentationId:l,segmentColor:s}=this.getActiveSegmentationData(n)||{};return{brushCursor:{metadata:{viewPlaneNormal:[...i],viewUp:[...a],FrameOfReferenceUID:n.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:s},data:{}},centerCanvas:t,segmentIndex:r,viewport:n,segmentationId:l,segmentColor:s,viewportIdsToRender:o}}getActiveSegmentationData(e){let t=e.id,n=ag(t);if(!n)return;let{segmentationId:i}=n,a=af(i);if(!a)return;let o=ds(t,i,a);return{segmentIndex:a,segmentationId:i,segmentColor:o}}getOperationData(e){let t=this._editData||this.createEditData(e),{segmentIndex:n,segmentationId:i,brushCursor:a}=this._hoverData||this.createHoverData(e),{data:o,metadata:r={}}=a||{},{viewPlaneNormal:l,viewUp:s}=r,d=this.configuration.preview?.previewColors?.[n],{viewport:h}=(0,ej.Ay)(e),c=ds(h.id,i,n);if(!d&&!c)return;let u=null,g=null;return this.configuration.preview?.enabled&&(u=d||function(e,t,n,i,a=.4){return[Math.round(e+(255-e)*a),Math.round(t+(255-t)*a),Math.round(n+(255-n)*a),i]}(...c),g=255),{...t,points:o?.handles?.points,segmentIndex:n,viewPlaneNormal:l,previewOnHover:!this._previewData.isDrag,toolGroupId:this.toolGroupId,segmentationId:i,viewUp:s,centerSegmentIndexInfo:this.centerSegmentIndexInfo,activeStrategy:this.configuration.activeStrategy,configuration:this.configuration,previewColor:u,previewSegmentIndex:g,createMemo:this.createMemo.bind(this),hoverData:this._hoverData}}addPreview(e=this._previewData.element,t){let{_previewData:n}=this,i=t?.acceptReject;!0===i?this.acceptPreview(e):!1===i&&this.rejectPreview(e);let a=(0,ej.Ay)(e),o=this.applyActiveStrategyCallback(a,this.getOperationData(e),uB.AddPreview);return n.isDrag=!0,o?.modified&&(n.preview=o,n.element=e),o}rejectPreview(e=this._previewData.element){if(!e)return;this.doneEditMemo();let t=(0,ej.Ay)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),uB.RejectPreview),this._previewData.preview=null,this._previewData.isDrag=!1}acceptPreview(e=this._previewData.element){if(!e)return;let t=this.getOperationData(e);this.memo&&this.memo.id&&this.acceptedMemoIds.set(this.memo.id,{element:e,segmentIndex:t.segmentIndex});let n=(0,ej.Ay)(e);this.applyActiveStrategyCallback(n,t,uB.AcceptPreview),this.doneEditMemo(),this._previewData.preview=null,this._previewData.isDrag=!1}static viewportContoursToLabelmap(e,t){let n=t?.removeContours??!0,i=o_(e,to());if(!i?.length)return;let a=i.filter(e=>e.data.contour?.polyline?.length);if(!a.length)return;let{memo:o,segmentationId:r}=new mm({},{configuration:{strategies:{FILL_INSIDE_CIRCLE:g4},activeStrategy:"FILL_INSIDE_CIRCLE"}}).addPreview(e.element),l=o?.voxelManager,s=l.sourceVoxelManager||l,{dimensions:d}=l,h=e.getDefaultActor().actor.getMapper().getInputData();for(let e of a){let t=[[1/0,-1/0],[1/0,-1/0],[1/0,-1/0]],{polyline:i}=e.data.contour;for(let e of i)h.worldToIndex(e).forEach((e,n)=>{t[n][0]=Math.min(t[n][0],e),t[n][1]=Math.max(t[n][1],e)});t.forEach((e,t)=>{e[0]=Math.round(Math.max(0,e[0])),e[1]=Math.round(Math.min(d[t]-1,e[1]))});let a=af(r),o=e.data.handles?.[0]||i[0],c=h.worldToIndex(o).map(Math.round),u=s.getAtIJKPoint(c)||0,g=!1,m=!1;for(let e of i){let t=h.worldToIndex(e).map(Math.round),n=s.getAtIJKPoint(t);n===u?g=!0:n>=0&&(m=!0)}let p=g&&m?u:0===u?a:0;for(let e=t[0][0];e<=t[0][1];e++)for(let n=t[1][0];n<=t[1][1];n++)for(let a=t[2][0];a<=t[2][1];a++)om(h.indexToWorld([e,n,a]),i)&&l.setAtIJK(e,n,a,p);n&&tu(e.annotationUID)}aa(r,l.getArrayOfModifiedSlices())}}class mp extends mm{constructor(e={}
167,t={supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE_CIRCLE:g4,ERASE_INSIDE_CIRCLE:ml,FILL_INSIDE_SPHERE:mt,ERASE_INSIDE_SPHERE:mr,THRESHOLD_INSIDE_CIRCLE:g8,THRESHOLD_INSIDE_SPHERE:ma,THRESHOLD_INSIDE_SPHERE_WITH_ISLAND_REMOVAL:mo},defaultStrategy:"FILL_INSIDE_CIRCLE",activeStrategy:"FILL_INSIDE_CIRCLE",brushSize:25,useCenterSegmentIndex:!1,preview:{enabled:!1,previewColors:{0:[255,255,255,128]},previewTimeMs:250,previewMoveDistance:8,dragMoveDistance:4,dragTimeMs:500},actions:{[uB.AcceptPreview]:{method:uB.AcceptPreview,bindings:[{key:"Enter"}]},[uB.RejectPreview]:{method:uB.RejectPreview,bindings:[{key:"Escape"}]},[uB.Interpolate]:{method:uB.Interpolate,bindings:[{key:"i"}],configuration:{useBallStructuringElement:!0,noUseDistanceTransform:!0,noUseExtrapolation:!0}},interpolateExtrapolation:{method:uB.Interpolate,bindings:[{key:"e"}],configuration:{}}}}}){super(e,t),this._lastDragInfo=null,this.onSetToolPassive=e=>{this.disableCursor()},this.onSetToolEnabled=()=>{this.disableCursor()},this.onSetToolDisabled=e=>{this.disableCursor()},this.preMouseDownCallback=e=>{let{element:t,currentPoints:n}=e.detail,i=(0,ej.Ay)(t),{viewport:a}=i;this._editData=this.createEditData(t),this._activateDraw(t),o2(t),e.preventDefault(),this._previewData.isDrag=!1,this._previewData.timerStart=Date.now();let o=aZ.o8(n.canvas),r=a.canvasToWorld([o[0],o[1]]);this._lastDragInfo={canvas:o,world:iT.o8(r)},oX((this._hoverData||this.createHoverData(t)).viewportIdsToRender);let l=this.getOperationData(t);return!!l&&(this.applyActiveStrategyCallback(i,l,uB.OnInteractionStart),!0)},this.mouseMoveCallback=e=>{if(this.isPrimary&&this.mode===e1.Active){if(this.updateCursor(e),!this.configuration.preview.enabled)return;let{previewTimeMs:t,previewMoveDistance:n,dragMoveDistance:i}=this.configuration.preview,{currentPoints:a,element:o}=e.detail,{canvas:r}=a,{startPoint:l,timer:s,timerStart:d,isDrag:h}=this._previewData;if(h)return;let c=aZ.Io(r,l),u=Date.now()-d;if((c>n||u>t&&c>i)&&(s&&(window.clearTimeout(s),this._previewData.timer=null),h||this.rejectPreview(o)),!this._previewData.timer){let e=window.setTimeout(this.previewCallback,250);Object.assign(this._previewData,{timerStart:Date.now(),timer:e,startPoint:r,element:o})}}},this.previewCallback=()=>{if(this._previewData.isDrag){this._previewData.timer=null;return}this._previewData.timer=null;let e=this.getOperationData(this._previewData.element),t=(0,ej.Ay)(this._previewData.element);if(!t)return;let{viewport:n}=t,i=uG({operationData:e,viewport:n,strategy:this.configuration.activeStrategy});if(!e)return;let a=this.createMemo(e.segmentationId,i.segmentationVoxelManager);this._previewData.preview=this.applyActiveStrategyCallback((0,ej.Ay)(this._previewData.element),{...e,...i,memo:a},uB.Preview)},this._dragCallback=e=>{let{element:t,currentPoints:n}=e.detail,i=(0,ej.Ay)(t),{viewport:a}=i;this.updateCursor(e);let{viewportIdsToRender:o}=this._hoverData;oX(o);let r=aZ.Io(n.canvas,this._previewData.startPoint),{dragTimeMs:l,dragMoveDistance:s}=this.configuration.preview;if(!this._previewData.isDrag&&Date.now()-this._previewData.timerStart<l&&r<s)return;if(this._previewData.timer&&(window.clearTimeout(this._previewData.timer),this._previewData.timer=null),!this._lastDragInfo){let e=this._previewData.startPoint,t=a.canvasToWorld([e[0],e[1]]);this._lastDragInfo={canvas:aZ.o8(e),world:iT.o8(t)}}let d=n.canvas,h=a.canvasToWorld([d[0],d[1]]);this._hoverData=this.createHoverData(t,d),this._calculateCursor(t,d);let c=this.getOperationData(t);if(!c)return;c.strokePointsWorld=[iT.o8(this._lastDragInfo.world),iT.o8(h)],this._previewData.preview=this.applyActiveStrategy(i,c);let u=aZ.o8(d);this._lastDragInfo={canvas:u,world:iT.o8(h)},this._previewData.element=t,this._previewData.timerStart=Date.now()+l,this._previewData.isDrag=!0,this._previewData.startPoint=u},this._endCallback=e=>{let{element:t}=e.detail,n=(0,ej.Ay)(t),i=this.getOperationData(t);i&&(this._previewData.preview||this._previewData.isDrag||this.applyActiveStrategy(n,i),this.doneEditMemo(),this._deactivateDraw(t),o1(t),this.updateCursor(e),this._editData=null,this._lastDragInfo=null,this.applyActiveStrategyCallback(n,i,uB.OnInteractionEnd),this._previewData.isDrag||this.acceptPreview(t))},this._activateDraw=e=>{e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback)},this._deactivateDraw=e=>{e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback)}}
167disableCursor(){this._hoverData=void 0,this.rejectPreview()}updateCursor(e){let t=e.detail,{element:n}=t,{currentPoints:i}=t,a=i.canvas;this._hoverData=this.createHoverData(n,a),this._calculateCursor(n,a),this._hoverData&&(mp.activeCursorTool=this,oX(this._hoverData.viewportIdsToRender))}_calculateCursor(e,t){let n=(0,ej.Ay)(e);this.applyActiveStrategyCallback(n,this.getOperationData(e),uB.CalculateCursorGeometry)}getStatistics(e,t){if(!e)return;let n=(0,ej.Ay)(e);return this.applyActiveStrategyCallback(n,this.getOperationData(e),uB.GetStatistics,t)}rejectPreview(e=this._previewData.element){if(!e)return;this.doneEditMemo();let t=(0,ej.Ay)(e);t&&(this.applyActiveStrategyCallback(t,this.getOperationData(e),uB.RejectPreview),this._previewData.preview=null,this._previewData.isDrag=!1)}acceptPreview(e=this._previewData.element){e&&super.acceptPreview(e)}interpolate(e,t){if(!e)return;let n=(0,ej.Ay)(e);this._previewData.preview=this.applyActiveStrategyCallback(n,this.getOperationData(e),uB.Interpolate,t.configuration),this._previewData.isDrag=!0}invalidateBrushCursor(){if(void 0===this._hoverData)return;let{data:e}=this._hoverData.brushCursor,{viewport:t}=this._hoverData;e.invalidated=!0;let{segmentColor:n}=this.getActiveSegmentationData(t)||{};this._hoverData.brushCursor.metadata.segmentColor=n}renderAnnotation(e,t){if(!this._hoverData||mp.activeCursorTool!==this)return;let{viewport:n}=e;if(this._hoverData.viewportIdsToRender.includes(n.id)){if(!0===this._hoverData.brushCursor.data.invalidated){let{centerCanvas:e}=this._hoverData,{element:t}=n;this._calculateCursor(t,e)}this.applyActiveStrategyCallback(e,this.getOperationData(n.element),uB.Ren
167derCursor,t)}}}mp.toolName="Brush";let mf=mp;function mv(e,t){let n=s3(e);if(void 0===n)return[];let i=n._toolInstances;return Object.keys(i).length?t&&i[t]?[i[t]]:Object.values(i).filter(e=>e instanceof mf):[]}function mI(e,t,n){let i=s3(e);void 0!==i&&(mv(e,n).forEach(e=>{let n=e.configuration.minRadius,i=e.configuration.maxRadius,a=n?Math.max(t,n):t;a=i?Math.min(a,i):a,e.configuration.brushSize=a,e.invalidateBrushCursor()}),oX(i.getViewportIds()))}function mC(e,t){let n=s3(e);if(void 0===n||!Object.keys(n._toolInstances).length)return;let i=mv(e,t)[0];if(i)return i.configuration.brushSize}function m_(e,t){let n=s3(e);if(void 0!==n)mv(e).forEach(e=>{e.configuration.activeStrategy.toLowerCase().includes("threshold")&&(e.configuration={...e.configuration,threshold:{...e.configuration.threshold,...t}})}),n.getViewportsInfo().length&&oX(n.getViewportIds())}function mE(e){let t=s3(e);if(void 0===t||!Object.keys(t._toolInstances).length)return;let n=mv(e)[0];if(n)return n.configuration.threshold.range}class mw{static{this.calculators=new Map}static{this.indices=[]}static{this.mode="collective"}static statsInit(e){let{storePointData:t,indices:n,mode:i}=e;this.mode=i,this.indices=n,this.calculators.clear(),"individual"===this.mode?n.forEach(e=>{this.calculators.set(e,new gV({storePointData:t}))}):this.calculators.set(n,new gV({storePointData:t}))}static statsCallback(e){let{segmentIndex:t,...n}=e;if(!t)throw Error("Segment index is required for stats calculation");let i="individual"===this.mode?this.calculators.get(t):this.calculators.get(this.indices);if(!i)throw Error(`No calculator found for segment ${t}`);i.statsCallback(n)}static getStatistics(e){if("individual"===this.mode){let t={};return this.calculators.forEach((n,i)=>{t[i]=n.getStatistics(e)}),t}return this.calculators.get(this.indices).getStatistics(e)}}let mA=function(e,t,n,i,a){if(!a)throw Error("Segmentation ID is required to be passed inside thresholdSegmentationByRange");let{baseVolumeIdx:o,volumeInfoList:r}=iZ(e,n),{voxelManager:l}=r[o],s=e.voxelManager.getScalarDataLength(),d=e.voxelManager;return r.forEach(e=>{let{volumeSize:n}=e;n===s?function(e,t,n,i){let{lower:a,upper:o}=i,r=e.getScalarDataLength();for(let i=0;i<r;i++)if(e.getAtIndex[i]===n){let r=t.getAtIndex(i);e.setAtIndex(i,r>=a&&r<=o?n:0)}}(d,l,t,e):function(e,t,n,i,a,o,r){let l,s,d,{imageData:h,lower:c,upper:u,dimensions:g}=i,m=e.getScalarDataLength();for(let t=0;t<m;t++)if(m.getAtIndex(t)===n){let i=iY(h,g,a[o].spacing,a[o].imageData.getPoint(t)),m=({value:e})=>{l+=1,e>=d.lower&&e<=d.upper&&(s+=1)};l=0,s=0,d={lower:c,upper:u};let p=!1;e.forEach(m,{imageData:h,boundsIJK:i}),p=0===r?s>0:s===l,e.setAtIndex(t,p?n:0)}}(d,0,t,e,r,o,i)}),aa(a),e};function mS(e,t,n){let i=n.toIJK(e),a=n.toIJK(t),o=iT.vt(),{testIJK:r}=n,l=iT.jb(iT.vt(),i,a),s=Math.round(Math.max(...l.map(Math.abs)));if(s<2)return!0;let d=iT.hs(iT.vt(),l,1/s);for(let e=1;e<s;e++)if(iT.Ln(o,a,d,e),!r(o))return!1;return!0}async function my(e){let t=await uJ({segmentations:e});if(!t?.length||!t[0].sliceContours.length)return;let{segments:n=[null,{label:"Unspecified",color:null,containedSegmentIndices:null}]}=e,i=uH(e.segmentationId);if(!i)return;let a=n.findIndex(e=>!!e);if(-1!==a)return n[a].segmentIndex=a,function(e,t,n){let i,{sliceContours:a}=e,{segmentIndex:o,containedSegmentIndices:r}=n,l=function(e,t,n){let i=nV.Ay.getVolume(e);return i?function({dimensions:e,imageData:t,voxelManager:n,segmentIndex:i,containedSegmentIndices:a}){let o=e[0],r=o*e[1];return{testCenter:(e,l)=>{let s=iT.WQ(iT.vt(),e,l).map(e=>e/2),[d,h,c]=t.worldToIndex(s).map(Math.round),u=n.getAtIndex(d+h*o+c*r);return u===i||a?.has(u)},toIJK:e=>t.worldToIndex(e),testIJK:e=>{let[t,l,s]=e,d=Math.round(t)+Math.round(l)*o+Math.round(s)*r,h=n.getAtIndex(d);return h===i||a?.has(h)}}}({dimensions:i.dimensions,imageData:i.imageData,voxelManager:i.voxelManager,segmentIndex:t,containedSegmentIndices:n}):void console.warn(`No volume found for ${e}`)}(t,o,r);for(let e of a){let t=function(e,t,n={maxMajor:0,maxMinor:0}){let i,a,{points:o}=e.polyData,{maxMinor:r,maxMajor:l}=n,s=l*l,d=r*r;for(let e=0;e<o.length;e++)for(let n=e+1;n<o.length;n++){let a=o[e],r=o[n],l=iT.lo(a,r);!(l<s)&&(!(l-.01<s+.01)||!i)&&t.testCenter(a,r)&&mS(a,r,t)&&(s=l-.01,i=[e,n],d=0)}if(!i)return;s=Math.sqrt(s+.01);let h=o[i[0]],c=o[i[1]],u=iT.jb(iT.vt(),h,c);iT.hs(u,u,1/s);for(let e=0;e<o.length;e++)for(let n=e+1;n<o.length;n++){let i=o[e],r=o[n],l=iT.lo(i,r);if(l<=d)continue;let s=iT.jb(iT.vt(),i,r);!(Math.abs(iT.Om(s,u))/Math.sqrt(l)>.01)&&t.testCenter(i,r)&&mS(i,r,t)&&(d=l,a=[e,n])}if(a)return d=Math.sqrt(d),{majorAxis:[h,c],minorAxis:[o[a[0]],o[a[1]]],maxMajor:s,maxMinor:d,...e}}(e,l,i);t&&(i=t)}return i&&Object.assign(i,n),i}(t[0],i.volumeId,n[a])}function mb(e,t){let{majorAxis:n,minorAxis:i,label:a="",sliceIndex:o}=e,[r,l]=n,[s,d]=i;return{highlighted:!0,invalidated:!0,metadata:{toolName:"Bidirectional",...t.getViewReference({sliceIndex:o})},data:{handles:{points:[r,l,s,d],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:a,cachedStats:{}},isLocked:!1,isVisible:!0}}function mT(e){return"number"==typeof e?e?e<0?-1:1:e==e?0:NaN:NaN}function mM(e,t,n,i,a=!1){let o,[r,l]=e,[s,d]=t,[h,c]=n,[u,g]=i;if(a){let e=(r-s)*(c-g)-(l-d)*(h-u);if(1e-10>Math.abs(e))return;let t=((r-h)*(c-g)-(l-c)*(h-u))/e;return[r+t*(s-r),l+t*(d-l)]}let m=d-l,p=r-s,f=s*l-r*d,v=m*h+p*c+f,I=m*u+p*g+f;if(0!==v&&0!==I&&mT(v)===mT(I))return;let C=g-c,_=h-u,E=u*c-h*g,w=C*r+_*l+E,A=C*s+_*d+E;if(0!==w&&0!==A&&mT(w)===mT(A))return;let S=m*_-C*p;return[(p*E-_*f)/S,(C*f-m*E)/S]}let{transformWorldToIndex:mD}=i9;class mO extends sd{static{this.toolName="Bidirectional"}constructor(e={}
167,t={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:mx}}){super(e,t),this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,{points:r}=o.handles,l=a.worldToCanvas(r[0]),s=a.worldToCanvas(r[1]),d={start:{x:l[0],y:l[1]},end:{x:s[0],y:s[1]}},h=u8([d.start.x,d.start.y],[d.end.x,d.end.y],[n[0],n[1]]);return h<=i||(l=a.worldToCanvas(r[2]),s=a.worldToCanvas(r[3]),(h=u8([(d={start:{x:l[0],y:l[1]},end:{x:s[0],y:s[1]}}).start.x,d.start.y],[d.end.x,d.end.y],[n[0],n[1]]))<=i)},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(n);let{renderingEngine:a}=(0,ej.Ay)(n);oX(i),o2(n),e.preventDefault()},this.handleSelectedCallback=(e,t,n)=>{let i,{element:a}=e.detail,o=t.data;t.highlighted=!0;let r=!1;n.worldPosition?r=!0:i=o.handles.points.findIndex(e=>e===n);let l=ox(a,this.getToolName());o2(a),this.editData={annotation:t,viewportIdsToRender:l,handleIndex:i,movingTextBox:r},this._activateModify(a);let{renderingEngine:s}=(0,ej.Ay)(a);oX(l),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;if(a&&!o)return;this.doneEditMemo(),r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t);let{renderingEngine:l}=(0,ej.Ay)(t);if(void 0!==this.editData.handleIndex){let{points:e}=r.handles,t=iT.Io(e[0],e[1]);if(iT.Io(e[2],e[3])>t){let t,n=[[...e[2]],[...e[3]]],i=[...e[0]],a=[...e[1]],o=aZ.vt();aZ.hZ(o,n[1][0]-n[0][0],n[1][1]-n[1][0]);let l=aZ.vt();aZ.hZ(l,-o[1],o[0]);let s=aZ.vt();aZ.hZ(s,a[0]-i[0],a[1]-i[0]),t=aZ.Om(s,l)>0?[i,a]:[a,i],r.handles.points=[n[0],n[1],t[0],t[1]]}}this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),a&&e7(n),this.editData=null,this.isDrawing=!1},this._dragDrawCallback=e=>{this.isDrawing=!0;let{currentPoints:t,element:n}=e.detail,{viewport:i}=(0,ej.Ay)(n),{worldToCanvas:a}=i,{annotation:o,viewportIdsToRender:r,handleIndex:l,newAnnotation:s}=this.editData;this.createMemo(n,o,{newAnnotation:s});let{data:d}=o,h=t.world;d.handles.points[l]=[...h];let c=d.handles.points.map(a),u={longLineSegment:{start:{x:c[0][0],y:c[0][1]},end:{x:c[1][0],y:c[1][1]}},shortLineSegment:{start:{x:c[2][0],y:c[2][1]},end:{x:c[3][0],y:c[3][1]}}},g=aZ.Io(c[0],c[1])/3,m=u.longLineSegment.start.x-u.longLineSegment.end.x,p=u.longLineSegment.start.y-u.longLineSegment.end.y,f=Math.sqrt(m*m+p*p),v=m/f,I=p/f,C=(u.longLineSegment.start.x+u.longLineSegment.end.x)/2,_=(u.longLineSegment.start.y+u.longLineSegment.end.y)/2;d.handles.points[2]=i.canvasToWorld([C+g*I,_-g*v]),d.handles.points[3]=i.canvasToWorld([C-g*I,_+g*v]),o.invalidated=!0,oX(r),e9(o,n,eY.HandlesUpdated),this.editData.hasMoved=!0},this._dragModifyCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:o,movingTextBox:r,newAnnotation:l}=this.editData;this.createMemo(n,i,{newAnnotation:l});let{data:s}=i;if(r){let{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else if(void 0===o){let{deltaPoints:e}=t,n=e.world;s.handles.points.forEach(e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]}),i.invalidated=!0}else this._dragModifyHandle(e),i.invalidated=!0;oX(a),i.invalidated&&e9(i,n,eY.HandlesUpdated)},this._dragModifyHandle=e=>{let{currentPoints:t,element:n}=e.detail,{viewport:i}=(0,ej.Ay)(n),{annotation:a,handleIndex:o}=this.editData,{data:r}=a,l=t.world,s=[i.worldToCanvas(r.handles.points[0]),i.worldToCanvas(r.handles.points[1]),i.worldToCanvas(r.handles.points[2]),i.worldToCanvas(r.handles.points[3])],d={start:{x:s[0][0],y:s[0][1]},end:{x:s[1][0],y:s[1][1]}},h={start:{x:s[2][0],y:s[2][1]},end:{x:s[3][0],y:s[3][1]}},c=[...l],u=i.worldToCanvas(c);if(0===o||1===o){let e=s[+(0===o)],t=aZ.hZ(aZ.vt(),u[0]-e[0],u[1]-e[1]),n=aZ.hZ(aZ.vt(),s[o][0]-e[0],s[o][1]-e[1]);aZ.S8(t,t),aZ.S8(n,n);let a={start:{x:e[0],y:e[1]},end:{x:u[0],y:u[1]}};if(this._movingLongAxisWouldPutItThroughShortAxis(a,h))return;let l=this._getSignedAngle(n,t),d=s[2][0],g=s[2][1],m=s[3][0],p=s[3][1];d-=e[0],g-=e[1],m-=e[0],p-=e[1];let f=d*Math.cos(l)-g*Math.sin(l),v=d*Math.sin(l)+g*Math.cos(l),I=m*Math.cos(l)-p*Math.sin(l),C=m*Math.sin(l)+p*Math.cos(l);d=f+e[0],g=v+e[1],m=I+e[0],p=C+e[1];let _=i.canvasToWorld([d,g]),E=i.canvasToWorld([m,p]);r.handles.points[o]=c,r.handles.points[2]=_,r.handles.points[3]=E}else{let e=2===o?3:2,t={longLineSegment:{start:d.start,end:d.end},shortLineSegment:{start:h.start,end:h.end}},n=aZ.Re(aZ.vt(),[t.longLineSegment.end.x,t.longLineSegment.end.y],[t.longLineSegment.start.x,t.longLineSegment.start.y]),a=aZ.S8(aZ.vt(),n),l=aZ.Re(aZ.vt(),[u[0],u[1]],[s[o][0],s[o][1]]),g=aZ.Bw(l),m=Math.cos(this._getSignedAngle(a,l))*g,p=aZ.Ln(aZ.vt(),[s[e][0],s[e][1]],a,m);if(this._movingLongAxisWouldPutItThroughShortAxis({start:{x:u[0],y:u[1]},end:{x:p[0],y:p[1]}},{start:{x:t.longLineSegment.start.x,y:t.longLineSegment.start.y},end:{x:t.longLineSegment.end.x,y:t.longLineSegment.end.y}})||!mM([u[0],u[1]],[p[0],p[1]],[d.start.x,d.start.y],[d.end.x,d.end.y])
167)return;r.handles.points[e]=i.canvasToWorld(p),r.handles.points[o]=c}},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,oX(n),i&&e7(t),this.editData=null,t.annotationUID}},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragDrawCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragDrawCallback)},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!0,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r=this.getTargetId(i),l=i.getRenderingEngine(),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let a=0;a<o.length;a++){let d,h,c=o[a],{annotationUID:u,data:g}=c,{points:m,activeHandleIndex:p}=g.handles,f=m.map(e=>i.worldToCanvas(e));s.annotationUID=u;let{color:v,lineWidth:I,lineDash:C,shadow:_}=this.getAnnotationStyle({annotation:c,styleSpecifier:s});if(g.cachedStats[r]&&null!=g.cachedStats[r].unit?c.invalidated&&this._throttledCalculateCachedStats(c,l,e):(g.cachedStats[r]={length:null,width:null,unit:null},this._calculateCachedStats(c,l,e)),!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(u))continue;iN(u)||this.editData||null===p||(d=[f[p]]);let E=!!lz("showHandlesAlways",{});(d||E)&&li(t,u,"0",E?f:d,{color:v});let w=`${u}-line-1`,A=`${u}-line-2`;l_(t,u,"0",f[0],f[1],{color:v,lineDash:C,lineWidth:I,shadow:_},w),l_(t,u,"1",f[2],f[3],{color:v,lineDash:C,lineWidth:I,shadow:_},A),n=!0;let S=this.getLinkedTextBoxStyle(s,c);if(!S.visibility){g.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}let y=this.configuration.getTextLines(g,r);if(!y||0===y.length)continue;g.handles.textBox.hasMoved||(h=lS(f),g.handles.textBox.worldPosition=i.canvasToWorld(h));let{x:b,y:T,width:M,height:D}=lA(t,u,"1",y,i.worldToCanvas(g.handles.textBox.worldPosition),f,{},S);g.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([b,T]),topRight:i.canvasToWorld([b+M,T]),bottomLeft:i.canvasToWorld([b,T+D]),bottomRight:i.canvasToWorld([b+M,T+D])}}return n},this._movingLongAxisWouldPutItThroughShortAxis=(e,t)=>{let n=aZ.vt();aZ.hZ(n,t.end.x-t.start.x,t.end.y-t.start.y),aZ.S8(n,n);let i={start:{x:t.start.x-10*n[0],y:t.start.y-10*n[1]},end:{x:t.end.x+10*n[0],y:t.end.y+10*n[1]}};return!mM([i.start.x,i.start.y],[i.end.x,i.end.y],[e.start.x,e.start.y],[e.end.x,e.end.y])},this._calculateCachedStats=(e,t,n)=>{let{data:i}=e,{element:a}=n.viewport;i.handles.points[0],i.handles.points[1],i.handles.points[2],i.handles.points[3];let{cachedStats:o}=i,r=Object.keys(o);for(let e=0;e<r.length;e++){let t=r[e],n=this.getTargetImageData(t);
167if(!n)continue;let{imageData:a,dimensions:l}=n,s=i.handles.points.map(e=>a.worldToIndex(e)),d=s.slice(0,2),h=s.slice(2,4),c=aU(n,s),u=mO.calculateLengthInIndex(c,d),g=mO.calculateLengthInIndex(c,h),{unit:m}=c,p=u>g?u:g,f=u>g?g:u;this.isHandleOutsideImage=!mO.isInsideVolume(l,s),o[t]={length:p,width:f,unit:m,widthUnit:m,statsArray:[{value:p,name:"height",unit:m,type:w.Linear},{value:f,name:"width",unit:m,type:w.Linear}]}}let l=e.invalidated;return e.invalidated=!1,l&&e9(e,a,eY.StatsUpdated),o},this._getSignedAngle=(e,t)=>Math.atan2(e[0]*t[1]-e[1]*t[0],e[0]*t[0]+e[1]*t[1]),this._throttledCalculateCachedStats=oA(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){let{currentPoints:t,element:n}=e.detail,i=t.world;this.isDrawing=!0;let a=this.createAnnotation(e,[[...i],[...i],[...i],[...i]]);th(a,n);let o=ox(n,this.getToolName());return this.editData={annotation:a,viewportIdsToRender:o,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(n),o2(n),e.preventDefault(),oX(o),a}static{this.hydrate=(e,t,n)=>{let i=(0,ej.yj)(e);if(!i)return;let{FrameOfReferenceUID:a,referencedImageId:o,viewPlaneNormal:r,instance:l,viewport:s}=this.hydrateBase(mO,i,t[0],n),[d,h]=t,[c,u]=d,[g,m]=h,{toolInstance:p,...f}=n||{},v={annotationUID:n?.annotationUID||eX.A(),data:{handles:{points:[c,u,g,m],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:l.getToolName(),viewPlaneNormal:r,FrameOfReferenceUID:a,referencedImageId:o,...f}};return th(v,s.element),oX([s.id]),v}}}function mx(e,t){let{cachedStats:n,label:i}=e,{length:a,width:o,unit:r}=n[t],l=[];return i&&l.push(i),void 0===a||l.push(`L: ${aD.A(a)} ${r||r}`,`W: ${aD.A(o)} ${r}`),l}let mP=mO;function mL(){return n8.getState().segmentations}async function mN(e,t){let n;console.warn("Deprecation Alert: There is a new getSegmentLargestBidirectional function that handles volume, stack and individual segment cases properly. This function is deprecated and will be removed in a future version.");let{data:i}=t,a=(0,ej.Ay)(e),o=(i.getSegment||function(e,t){let n=mL();if(!n.length)return;let i=t.segmentationId||n[0].segmentationId,a=t.segmentIndex??af(i);if(!a)return;let o=t.segmentData?.get(a);return{label:`Segment ${a}`,segmentIndex:a,segmentationId:i,...o}})(a,i);if(!o)return;let r=a.viewport.getFrameOfReferenceUID(),l=mL(),{segmentIndex:s,segmentationId:d}=o,h=sI.getAnnotations(this.toolName||mP.toolName,r),c=!1,u=h.filter(e=>{let t=e.data.segment;return!!t&&(t.segmentationId===d&&t.segmentIndex===s&&(c=!0,e.data.segment=t),!0)});if(c||u.push({data:{segment:o}}),u.forEach(async e=>{let t=[],i=e.data.segment,{segmentIndex:s,segmentationId:d}=i;t[s]=i,sI.removeAnnotation(e.annotationUID);let h=await my({...l.find(e=>e.segmentationId===d),segments:t});if(!h)return;let c=mb(h,a.viewport);c.annotationUID=e.annotationUID,c.data.segment=i;let u=sI.addAnnotation(c,r);if(i.segmentIndex===o.segmentIndex&&i.segmentationId===o.segmentationId){n=h;let{style:e}=o;e&&l$.setAnnotationStyles(u,e)}}),n){let{sliceIndex:t}=n,i=a.viewport.getImageIds();c4.e(e,{imageIndex:i.length-1-t}),a.viewport.render()}else console.warn("No bidirectional found");return n}function mR(e){let t=s3(e);if(void 0===t)return;mv(e).forEach(e=>{e.invalidateBrushCursor()});let n=t.getViewportsInfo();Object.keys(n).map(e=>n[e]).length&&oX(t.getViewportIds())}var mk=n(28580);function mU(e,t,n={}){let i=n9(e),a=i.representationData,o=n?.representationType??Object.keys(a)[0];if(!o)throw Error(`Segmentation ${e} does not have any representations`);switch(o){case nB.Labelmap:return function(e,t,{viewport:n}){let i=e.representationData.Labelmap;if(n instanceof nU.A){let{volumeId:e}=i,n=nV.Ay.getVolume(e);if(!n)return;return n.imageData.getScalarValueFromWorld(t)}let a=an(n.id,e.segmentationId);if(a.length>1)return void console.warn("Segment selection for labelmaps with multiple imageIds in stack viewports is not supported yet.");let o=a[0];if(!nV.Ay.getImage(o))return;let r=id(n.id,e.segmentationId),l=r?.actor.getMapper().getInputData(),s=iW.A(l,t),d=l.getDimensions();return(l.voxelManager||mk.A.createScalarVolumeVoxelManager({dimensions:d,scalarData:l.getPointData().getScalars().getData()})).getAtIJKPoint(s)}(i,t,n);case nB.Contour:return function(e,t,{viewport:n}){let i=e.representationData.Contour,a=Array.from(i.annotationUIDsMap.keys()),{viewPlaneNormal:o}=n.getCamera();for(let e of a){let n=i.annotationUIDsMap.get(e);if(n)for(let i of n){let n=ta(i);if(!n)continue;let{polyline:a}=n.data.contour;if(aM.n4(o,n.metadata.viewPlaneNormal)&&om(t,a))return Number(e)}}}(i,t,n);default:return}}function mV(e,t,{viewport:n,searchRadius:i}){var a,o,r,l,s,d,h,c;let u=n9(e).representationData.Labelmap;if(n instanceof nU.A){let{volumeId:e}=u,s=nV.Ay.getVolume(e);if(!s)return;let d=s.voxelManager,h=s.imageData,c=iW.A(h,t),g=d.getAtIJK(c[0],c[1],c[2]);return(a=n.worldToCanvas(t),o=g,r=n,l=h,mF((e,t)=>{let n=[a[0]+e,a[1]+t],i=r.canvasToWorld(n),o=l.get("voxelManager").voxelManager,s=iW.A(l,i);return o.getAtIJK(s[0],s[1],s[2])},o,i))?g:void 0}let g=at(n.id,e);if(!nV.Ay.getImage(g))return;let m=id(n.id,e),p=m?.actor.getMapper().getInputData(),f=iW.A(p,t),v=p.getDimensions(),I=p.voxelManager||mk.A.createScalarVolumeVoxelManager({dimensions:v,scalarData:p.getPointData().getScalars().getData()}),C=I.getAtIJKPoint(f);return(s=f,d=0,h=I,mF((e,t,n)=>{let i=[s[0]+e,s[1]+t,s[2]+n];return h.getAtIJK(i[0],i[1],i[2])},C,void 0))?C:void 0}function mF(e,t,n=1){let i=Array.from({length:2*n+1},(e,t)=>t-n);for(let n of i)for(let a of i)for(let o of i){if(0===n&&0===a&&0===o)continue;let i=e(n,a,o);if(void 0!==i&&t!==i)return!0}return!1}function mG(e){let{annotationUIDsMap:t}=n9(e).representationData.Contour;for(let[e,n]of t.entries())if(Array.from(n).find(e=>ta(e).highlighted))return e}let mB=`
168const MAX_STRENGTH = 65535f;
169
170// Workgroup size - X*Y*Z must be multiple of 32 for better performance
171override workGroupSizeX = 1u;
172override workGroupSizeY = 1u;
173override workGroupSizeZ = 1u;
174
175// Compare the current voxel to neighbors using a 9x9x9 window
176override windowSize = 9i;
177
178struct Params {
179  size: vec3u,
180  iteration: u32,
181}
182
183// New structure to track bounds of modified voxels
184struct Bounds {
185  minX: atomic<i32>,
186  minY: atomic<i32>,
187  minZ: atomic<i32>,
188  maxX: atomic<i32>,
189  maxY: atomic<i32>,
190  maxZ: atomic<i32>,
191}
192
193@group(0) @binding(0) var<uniform> params: Params;
194@group(0) @binding(1) var<storage> volumePixelData: array<f32>;
195@group(0) @binding(2) var<storage, read_write> labelmap: array<u32>;
196@group(0) @binding(3) var<storage, read_write> strengthData: array<f32>;
197@group(0) @binding(4) var<storage> prevLabelmap: array<u32>;
198@group(0) @binding(5) var<storage> prevStrengthData: array<f32>;
199@group(0) @binding(6) var<storage, read_write> updatedVoxelsCounter: array<atomic<u32>>;
200@group(0) @binding(7) var<storage, read_write> modifiedBounds: Bounds;
201
202fn getPixelIndex(ijkPos: vec3u) -> u32 {
203  let numPixelsPerSlice = params.size.x * params.size.y;
204  return ijkPos.x + ijkPos.y * params.size.x + ijkPos.z * numPixelsPerSlice;
205}
206
207fn updateBounds(position: vec3i) {
208  // Atomically update min bounds (use min operation)
209  let oldMinX = atomicMin(&modifiedBounds.minX, position.x);
210  let oldMinY = atomicMin(&modifiedBounds.minY, position.y);
211  let oldMinZ = atomicMin(&modifiedBounds.minZ, position.z);
212
213  // Atomically update max bounds (use max operation)
214  let oldMaxX = atomicMax(&modifiedBounds.maxX, position.x);
215  let oldMaxY = atomicMax(&modifiedBounds.maxY, position.y);
216  let oldMaxZ = atomicMax(&modifiedBounds.maxZ, position.z);
217}
218
219@compute @workgroup_size(workGroupSizeX, workGroupSizeY, workGroupSizeZ)
220fn main(
221  @builtin(global_invocation_id) globalId: vec3u,
222) {
223  // Make sure it will not get out of bounds for volume with sizes that
224  // are not multiple of workGroupSize
225  if (
226    globalId.x >= params.size.x ||
227    globalId.y >= params.size.y ||
228    globalId.z >= params.size.z
229  ) {
230    return;
231  }
232
233  // Initialize bounds for the first iteration
234  if (params.iteration == 0 && globalId.x == 0 && globalId.y == 0 && globalId.z == 0) {
235    // Initialize to opposite extremes to ensure any update will improve the bounds
236    atomicStore(&modifiedBounds.minX, i32(params.size.x));
237    atomicStore(&modifiedBounds.minY, i32(params.size.y));
238    atomicStore(&modifiedBounds.minZ, i32(params.size.z));
239    atomicStore(&modifiedBounds.maxX, -1);
240    atomicStore(&modifiedBounds.maxY, -1);
241    atomicStore(&modifiedBounds.maxZ, -1);
242  }
243
244  let currentCoord = vec3i(globalId);
245  let currentPixelIndex = getPixelIndex(globalId);
246
247  let numPixels = arrayLength(&volumePixelData);
248  let currentPixelValue = volumePixelData[currentPixelIndex];
249
250  if (params.iteration == 0) {
251    // All non-zero initial labels are given maximum strength
252    strengthData[currentPixelIndex] = select(MAX_STRENGTH, 0., labelmap[currentPixelIndex] == 0);
253
254    // Update bounds for non-zero initial labels
255    if (labelmap[currentPixelIndex] != 0) {
256      updateBounds(currentCoord);
257    }
258    return;
259  }
260
261  // It should at least copy the values from previous state
262  var newLabel = prevLabelmap[currentPixelIndex];
263  var newStrength = prevStrengthData[currentPixelIndex];
264
265  let window = i32(ceil(f32(windowSize - 1) * .5));
266  let minWindow = -1i * window;
267  let maxWindow = 1i * window;
268
269  for (var k = minWindow; k <= maxWindow; k++) {
270    for (var j = minWindow; j <= maxWindow; j++) {
271      for (var i = minWindow; i <= maxWindow; i++) {
272        // Skip current voxel
273        if (i == 0 && j == 0 && k == 0) {
274          continue;
275        }
276
277        let neighborCoord = currentCoord + vec3i(i, j, k);
278
279        //  Boundary conditions. Do not grow outside of the volume
280        if (
281          neighborCoord.x < 0i || neighborCoord.x >= i32(params.size.x) ||
282          neighborCoord.y < 0i || neighborCoord.y >= i32(params.size.y) ||
283          neighborCoord.z < 0i || neighborCoord.z >= i32(params.size.z)
284        ) {
285          continue;
286        }
287
288        let neighborIndex = getPixelIndex(vec3u(neighborCoord));
289        let neighborPixelValue = volumePixelData[neighborIndex];
290        let prevNeighborStrength = prevStrengthData[neighborIndex];
291        let strengthCost = abs(neighborPixelValue - currentPixelValue);
292        let takeoverStrength = prevNeighborStrength - strengthCost;
293
294        if (takeoverStrength > newStrength) {
295          newLabel = prevLabelmap[neighborIndex];
296          newStrength = takeoverStrength;
297        }
298      }
299    }
300  }
301
302  if (labelmap[currentPixelIndex] != newLabel) {
303    atomicAdd(&updatedVoxelsCounter[params.iteration], 1u);
304
305    // Update bounds for modified voxels
306    updateBounds(currentCoord);
307  }
308
309  labelmap[currentPixelIndex] = newLabel;
310  strengthData[currentPixelIndex] = newStrength;
311}
312`,mH={windowSize:3,maxProcessingTime:3e4,inspection:{numCyclesInterval:5,numCyclesBelowThreshold:3,threshold:1e-4}};async function mW(e,t,n=mH){let{windowSize:i,maxProcessingTime:a}=Object.assign({},mH,n),o=Object.assign({},mH.inspection,n.inspection),r=nV.Ay.getVolume(e),l=nV.Ay.getVolume(t),[s,d,h]=r.dimensions;
312if(l.dimensions[0]!==s||l.dimensions[1]!==d||l.dimensions[2]!==h)throw Error("Volume and labelmap must have the same size");let c=Math.floor(Math.sqrt(d**2+s**2+h**2)/2);c=Math.min(c,500);let u=l.voxelManager.getCompleteScalarDataArray(),g=r.voxelManager.getCompleteScalarDataArray();g instanceof Float32Array||(g=new Float32Array(g));let m=await navigator.gpu?.requestAdapter(),p=await m.requestDevice({requiredLimits:{maxStorageBufferBindingSize:2136746229.76,maxBufferSize:2136746229.76}}),f=g.byteLength,v=c*Uint32Array.BYTES_PER_ELEMENT,I=6*Int32Array.BYTES_PER_ELEMENT,C=p.createShaderModule({code:mB}),_=new Uint32Array([s,d,h,0]),E=p.createBuffer({size:_.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),w=p.createBuffer({size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});p.queue.writeBuffer(w,0,g);let A=[0,1].map(()=>p.createBuffer({size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}));p.queue.writeBuffer(A[0],0,new Uint32Array(u));let S=[0,1].map(()=>p.createBuffer({size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST})),y=p.createBuffer({size:v,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),b=p.createBuffer({size:I,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),T=new Int32Array([s,d,h,-1,-1,-1]);p.queue.writeBuffer(b,0,T);let M=p.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:6,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:7,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]}),D=[0,1].map(e=>{let t=A[e],n=S[e],i=A[(e+1)%2],a=S[(e+1)%2];return p.createBindGroup({layout:M,entries:[{binding:0,resource:{buffer:E}},{binding:1,resource:{buffer:w}},{binding:2,resource:{buffer:t}},{binding:3,resource:{buffer:n}},{binding:4,resource:{buffer:i}},{binding:5,resource:{buffer:a}},{binding:6,resource:{buffer:y}},{binding:7,resource:{buffer:b}}]})}),O=p.createComputePipeline({layout:p.createPipelineLayout({bindGroupLayouts:[M]}),compute:{module:C,entryPoint:"main",constants:{workGroupSizeX:8,workGroupSizeY:8,workGroupSizeZ:4,windowSize:i}}}),x=[Math.ceil(s/8),Math.ceil(d/8),Math.ceil(h/4)],P=p.createBuffer({size:v,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),L=a?performance.now()+a:0,N=o.numCyclesInterval,R=0;for(let e=0;e<c;e++){_[3]=e,p.queue.writeBuffer(E,0,_);let t=p.createCommandEncoder(),n=t.beginComputePass();if(n.setPipeline(O),n.setBindGroup(0,D[e%2]),n.dispatchWorkgroups(x[0],x[1],x[2]),n.end(),t.copyBufferToBuffer(y,e*Uint32Array.BYTES_PER_ELEMENT,P,e*Uint32Array.BYTES_PER_ELEMENT,Uint32Array.BYTES_PER_ELEMENT),p.queue.submit([t.finish()]),e>0&&!(e%N)){await P.mapAsync(GPUMapMode.READ,0,v);let t=new Uint32Array(P.getMappedRange(0,v).slice(0))[e]/g.length;if(P.unmap(),e>=1&&t<o.threshold){if(N=1,++R===o.numCyclesBelowThreshold)break}else N=o.numCyclesInterval}if(L&&performance.now()>L){console.warn(`Exceeded processing time limit (${a})ms`);break}}let k=p.createCommandEncoder(),U=(c+1)%2,V=p.createBuffer({size:f,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),F=p.createBuffer({size:I,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});k.copyBufferToBuffer(A[U],0,V,0,f),k.copyBufferToBuffer(b,0,F,0,I),p.queue.submit([k.finish()]),await V.mapAsync(GPUMapMode.READ,0,f);let G=new Uint32Array(V.getMappedRange(0,f));u.set(G),V.unmap(),await F.mapAsync(GPUMapMode.READ,0,I);let B=new Int32Array(F.getMappedRange(0,I).slice(0));F.unmap();let H=B[0],W=B[1],$=B[2],z=B[3],X=B[4],j=B[5];l.voxelManager.setCompleteScalarDataArray(u),l.voxelManager.clearBounds(),l.voxelManager.setBounds([[H,z],[W,X],[$,j]])}var m$=n(4684),mz=n(84944),mX=n(31193);let{transformWorldToIndex:mj}=i9;async function mq(e,t,n,i){let a=await nW.createAndCacheDerivedLabelmapVolume(e.volumeId);return!function(e,t,n,i){let a=e.voxelManager.getCompleteScalarDataArray(),o=n.center,[r,l,s]=e.dimensions,d=r*l,h=mj(e.imageData,o),c=a[h[2]*d+h[1]*r+h[0]],u=i.positiveSeedValue??254,g=Math.abs(c*(i.positiveSeedVariance??.1)),m=c-g,p=c+g,f=[[-1,0,0],[1,0,0],[0,-1,0],[0,1,0],[0,0,-1],[0,0,1]],v=h[2]*d+h[1]*r+h[0];t.voxelManager.setAtIndex(v,u);let I=[h];for(;I.length;){let[e,n,i]=I.shift();for(let o=0,h=f.length;o<h;o++){let h=f[o],c=e+h[0],g=n+h[1],v=i+h[2];if(c<0||c>=r||g<0||g>=l||v<0||v>=s)continue;let C=v*d+g*r+c,_=a[C];t.voxelManager.getAtIndex(C)===u||_<m||_>p||(t.voxelManager.setAtIndex(C,u),I.push([c,g,v]))}}}(e,a,t,i),!function(e,t,n,i,a){let o=e.voxelManager.getCompleteScalarDataArray(),[r,l,s]=t.dimensions,d=r*l,{worldVecRowDir:h,worldVecSliceDir:c}=mz.A(t.imageData,i.getCamera()),u=mj(e.imageData,n.center),g=o[u[2]*r*l+u[1]*r+u[0]],m=a.negativeSeedVariance??.8,p=a?.negativeSeedValue??255,f=Math.abs(g*m),v=g-f,I=g+f,C=2*Math.PI/360,_=m$.x8(m$.vt(),c,C),E=iT.o8(h);for(let e=0;e<360;e++){let e=iT.Ln(iT.vt(),n.center,E,n.radius),[i,a,h]=mj(t.imageData,e);if(iT.gL(E,E,_),i<0||i>=r||a<0||a>=l||h<0||h>=s)continue;let c=i+a*r+h*d,u=o[c];(u<v||u>I)&&t.voxelManager.setAtIndex(c,p)}}(e,a,t,n,i),a}async function mK(e,t,n,i){let a=function(e,t,n){let i=e.imageData,a=n.getCamera(),{ijkVecRowDir:o,ijkVecColDir:r}=mz.A(i,a);if([o,r].some(e=>!aM.n4(Math.abs(e[0]),1)&&!aM.n4(Math.abs(e[1]),1)&&!aM.n4(Math.abs(e[2]),1)))return void console.warn("Oblique view is not supported!");let{boundsIJK:l}=function(e,t){let n=e.imageData.getDirection(),i=iT.fA(n[3],n[4],n[5]),{center:a,radius:o}=t,r=e.imageData,l=iT.Ln(iT.vt(),a,i,-o),s=uw([iT.Ln(iT.vt(),a,i,o),l],r),{topLeftWorld:d,bottomRightWorld:h}=s,c=mj(e.imageData,d),u=mj(e.imageData,h);return{...s,topLeftIJK:c,bottomRightIJK:u}}(e,t),s={minX:l[0][0],maxX:l[0][1]+1,minY:l[1][0],maxY:l[1][1]+1,minZ:l[2][0],maxZ:l[2][1]+1};return mX.A(e.volumeId,s,{targetBuffer:{type:"Float32Array"}}
312)}(nV.Ay.getVolume(e),t,n),o=await mq(a,t,n,i);return await mW(a.volumeId,o.volumeId),o}let mY=[-1/0,-995],mZ=[0,1900];async function mJ(e,t){let n=nW.createAndCacheDerivedLabelmapVolume(e.volumeId);return!function(e,t,n){let{positiveSeedValue:i=254,positivePixelRange:a=mZ}=n,o=e.voxelManager.getCompleteScalarDataArray();t.voxelManager.getCompleteScalarDataArray();let[r,l,s]=t.dimensions,d=Math.max(Math.floor(s/2)-3,0),h=Math.max(d+5,s),c=r*l;for(let e=d;e<h;e++){let n=e*c;for(let e=0;e<l;e++){let l=e*r;for(let e=0;e<r;e++){let r=n+l+e,s=o[r];s>=a[0]&&s<=a[1]&&t.voxelManager.setAtIndex(r,i)}}}}(e,n,t),!function(e,t,n){let{negativeSeedValue:i=255,negativePixelRange:a=mY}=n,o=e.voxelManager.getCompleteScalarDataArray(),[r,l,s]=t.dimensions,d=Math.floor(s/2),h=Array(r*l).fill(!1),c=d*r*l,u=(e,n)=>{let s=[[e,n]];for(;s.length;){let[e,n]=s.shift(),d=n*r+e;if(e<0||e>=r||n<0||n>=l||h[d])continue;h[d]=!0;let u=c+d,g=o[u];g<a[0]||g>a[1]||(t.voxelManager.setAtIndex(u,i),s.push([e-1,n]),s.push([e+1,n]),s.push([e,n-1]),s.push([e,n+1]))}},g=(e,t,n,i)=>{for(let l=e;l!==t;l+=n){let e=i*r+l,t=o[c+e];if(t<a[0]||t>a[1])break;h[e]||u(l,i)}};for(let e=0;e<l;e++)g(0,r-1,1,e),g(r-1,0,-1,e)}(e,n,t),n}async function mQ(e,t,n){let{boundingBox:i}=t,{ijkTopLeft:a,ijkBottomRight:o}=i,r={minX:a[0],maxX:o[0],minY:a[1],maxY:o[1],minZ:a[2],maxZ:o[2]},l=mX.A(e,r,{targetBuffer:{type:"Float32Array"}}),s=await mJ(l,n);return await mW(l.volumeId,s.volumeId),s}var m0=n(31456);let{transformWorldToIndex:m1}=i9;function m2(e,t,n){let{dimensions:i,imageData:a}=e,[o,r,l]=i,s=e.voxelManager,d=s.getCompleteScalarDataArray(),h=o*r,c=n?.initialNeighborhoodRadius??1,u=n?.positiveStdDevMultiplier??1.8,g=n?.negativeStdDevMultiplier??3.2,m=n?.negativeSeedMargin??30,p=n?.negativeSeedsTargetPatches??70,f=m1(a,t).map(Math.round),v=s.toIndex(f);if(f[0]<0||f[0]>=o||f[1]<0||f[1]>=r||f[2]<0||f[2]>=l)return console.warn("Click position is outside volume bounds."),null;let I=m0.c(d,i,f,c);0===I.count&&(I.mean=d[v],I.stdDev=0);let C=I.mean-u*I.stdDev,_=I.mean+u*I.stdDev,E=[[-1,0,0],[1,0,0],[0,-1,0],[0,1,0],[0,0,-1],[0,0,1]],w=1/0,A=1/0,S=1/0,y=-1/0,b=-1/0,T=-1/0,M=new Set,D=[],O=d[v];if(!(O>=C)||!(O<=_))return console.warn("Clicked voxel intensity is outside the calculated positive range. No positive seeds generated."),{positiveSeedIndices:new Set,negativeSeedIndices:new Set};M.add(v),D.push(f),w=y=f[0],A=b=f[1],S=T=f[2];let x=0;for(;x<D.length&&M.size<1e5;){let[e,t,n]=D[x++];w=Math.min(e,w),A=Math.min(t,A),S=Math.min(n,S),y=Math.max(e,y),b=Math.max(t,b),T=Math.max(n,T);for(let i=0;i<E.length;i++){let[a,s,c]=E[i],u=e+a,g=t+s,m=n+c;if(u<0||u>=o||g<0||g>=r||m<0||m>=l)continue;let p=m*h+g*o+u;if(M.has(p))continue;let f=d[p];f>=C&&f<=_&&(M.add(p),M.size<1e5&&D.push([u,g,m]))}}if(M.size>=1e5&&console.debug("Reached maximum number of positive seeds (100000). Stopping BFS."),0===M.size)return console.warn("No positive seeds found after BFS."),{positiveSeedIndices:new Set,negativeSeedIndices:new Set};let P=0,L=0;M.forEach(e=>{let t=d[e];P+=t,L+=t*t});let N=M.size,R=P/N,k=g*Math.sqrt(Math.max(0,L/N-R*R)),U=Math.max(0,w-m),V=Math.max(0,A-m),F=Math.max(0,S-m),G=Math.min(o-1,y+m),B=Math.min(r-1,b+m),H=Math.min(l-1,T+m),W=new Set,$=0,z=0,X=50*p;for(;z<p&&$<X;){$++;let e=Math.floor(Math.random()*(G-U+1)+U),t=Math.floor(Math.random()*(B-V+1)+V),n=Math.floor(Math.random()*(H-F+1)+F),i=n*h+t*o+e;if(!(M.has(i)||W.has(i))&&Math.abs(d[i]-R)>k){let i=!1;for(let a=-1;a<=1;a++){let l=t+a;if(!(l<0)&&!(l>=r))for(let t=-1;t<=1;t++){let a=e+t;if(a<0||a>=o)continue;let r=n*h+l*o+a;M.has(r)||W.has(r)||(W.add(r),i=!0)}}i&&z++}}return 0===W.size&&console.warn("Could not find any negative seeds. GrowCut might fail or produce poor results."),console.debug("positiveSeedIndices",M.size),console.debug("negativeSeedIndices",W.size),{positiveSeedIndices:M,negativeSeedIndices:W}}async function m5({referencedVolumeId:e,worldPosition:t,options:n}){let i=nV.Ay.getVolume(e),a=nW.createAndCacheDerivedLabelmapVolume(e);a.voxelManager.forEach(({index:e,value:t})=>{0!==t&&a.voxelManager.setAtIndex(e,0)});let o=n.seeds??m2(i,t,n),r=n?.positiveSeedValue??254,l=n?.negativeSeedValue??255;if(!o)return null;let{positiveSeedIndices:s,negativeSeedIndices:d}=o;return s.size<10||s.size>
3121e5||d.size<10?console.warn("Not enough seeds found. GrowCut might fail or produce poor results."):(s.forEach(e=>{a.voxelManager.setAtIndex(e,r)}),d.forEach(e=>{a.voxelManager.setAtIndex(e,l)}),await mW(e,a.volumeId,n)),a}function m3(e){if("volumeId"in e){if(!nV.Ay.getVolume(e.volumeId))throw Error(`volumeId of ${e.volumeId} not found in cache, you should load and cache volume before adding segmentation`)}else if("imageIds"in e){if(!e.imageIds)throw Error("The segmentationInput.representationData.imageIds is undefined, please provide a valid representationData.imageIds for stack data")}else throw Error("The segmentationInput.representationData is undefined, please provide a valid representationData")}function m4(e){if(!e.representation.data)throw Error("The segmentationInput.representationData.data is undefined, please provide a valid representationData.data");m3(e.representation.data)}function m8(e){m3(e)}function m9(e,t){let n=n9(e);"string"==typeof t&&(console.warn("segmentIndex is a string, converting to number"),t=Number(t)),Object.values(n.segments).forEach(e=>{e.active=!1}),n.segments[t]||(n.segments[t]={segmentIndex:t,label:"",locked:!1,cachedStats:{},active:!1}),!0!==n.segments[t].active&&(n.segments[t].active=!0,nX(e));let i=s9(e);i.forEach(n=>{n7(n,{segmentationId:e}).forEach(e=>{e.segments[t]||(e.segments[t]={visible:!0})})}
312),i.forEach(e=>{let t=oy(e);t&&mR(t.id)})}function m7(e,t){t.map(t=>(function(e,t){let{segmentationId:n,config:i}=t,a={colorLUTIndex:function(e){let{colorLUTOrIndex:t}=e||{};return void 0===t?da(JSON.parse(JSON.stringify(di))):"number"==typeof t?t:Array.isArray(t)&&t.every(e=>Array.isArray(e)&&4===e.length)?da(t):da(JSON.parse(JSON.stringify(di)))}(i),...i};n8.addSegmentationRepresentation(e,n,t.type,a);let{viewport:o}=(0,ej.yj)(e)||{};if(o&&dM(o,n,t.type),!af(n)){let e=1,t=n8.getSegmentation(n);if(t){let i=Object.keys(t.segments);i.length>0&&(e=i.map(e=>Number(e)).sort()[0]),m9(n,e)}}t.type===nB.Contour&&oz([e]),t.type===nB.Surface&&aa(n),nX(n)})(e,t))}function m6(e,t){return m7(e,t.map(e=>({...e,type:nB.Contour})))}function pe(e){let t={};for(let[n,i]of Object.entries(e))t[n]=m6(n,i);return t}function pt(e,t){return m7(e,t.map(e=>({...e,type:nB.Labelmap})))}function pn(e){let t={};for(let[n,i]of Object.entries(e))t[n]=pt(n,i.map(e=>({...e,type:nB.Labelmap})))}function pi(e,t){return m7(e,t.map(e=>({...e,type:nB.Surface})))}function pa(e){let t={};for(let[n,i]of Object.entries(e))t[n]=pi(n,i);return t}async function po({segmentationId:e,viewportId:t,imageIds:n,options:i}){let a=n9(e);if(i?.removeOriginal){let e=a.representationData.Labelmap;nV.Ay.getVolume(e.volumeId)&&nV.Ay.removeVolumeLoadObject(e.volumeId),a.representationData.Labelmap={imageIds:n}}else a.representationData.Labelmap={...a.representationData.Labelmap,imageIds:n};await m7(t,[{segmentationId:e,type:nB.Labelmap}]),ez.A.addEventListenerOnce(eK.SEGMENTATION_RENDERED,()=>aa(e))}async function pr({volumeId:e}){return{imageIds:nV.Ay.getVolume(e).imageIds}}async function pl(e){return n5(e)}async function ps({segmentationId:e,segmentIndices:t,mode:n="individual"}){uU(),uX(uR.COMPUTE_LARGEST_BIDIRECTIONAL,0);let i=uj(e,t);if(!i)return;let{operationData:a,segImageIds:o,reconstructableVolume:r,indices:l}=i,s=r?await pd({operationData:a,indices:l,mode:n}):await ph({segImageIds:o,indices:l,mode:n});return uX(uR.COMPUTE_LARGEST_BIDIRECTIONAL,100),s}async function pd({operationData:e,indices:t,mode:n}){let{segmentationVoxelManager:i,segmentationImageData:a}=uq(e),o={scalarData:i.getCompleteScalarDataArray(),dimensions:a.getDimensions(),spacing:a.getSpacing(),origin:a.getOrigin(),direction:a.getDirection()};return await (0,uP.G_)().executeTask("compute","getSegmentLargestBidirectionalInternal",{segmentationInfo:o,indices:t,mode:n})}async function ph({segImageIds:e,indices:t,mode:n}){let{segmentationInfo:i}=uK(e);return await (0,uP.G_)().executeTask("compute","getSegmentLargestBidirectionalInternal",{segmentationInfo:i,indices:t,mode:n,isStack:!0})}async function pc({segmentationIds:e,segmentIndex:t}){uU(),uX(uR.COMPUTE_STATISTICS,0);let{imageIds:n}=n9(e[0]).representationData.Labelmap;if(!uV.p(n))throw Error("Invalid volume - TMTV cannot be calculated");return await pu({segmentationIds:e,segmentIndex:t})}async function pu({segmentationIds:e,segmentIndex:t}){let n=gm(e.map(e=>uH(e)),t);if(!n)throw Error("Invalid volume - TMTV cannot be calculated");let{imageData:i,dimensions:a,direction:o,origin:r,voxelManager:l}=n,s=i.getSpacing(),d={scalarData:l.getCompleteScalarDataArray(),dimensions:a,spacing:s,origin:r,direction:o},h=function(e){let t,n=n9(e);if(!n)return null;let i=n.representationData.Labelmap;if("imageIds"in i){let{imageIds:e}=i,n=nV.Ay.getImage(e[0]),a=nV.Ay.getVolumeContainingImageId(n.referencedImageId);if(a?.volume)return a.volume;t=e.map(e=>nV.Ay.getImage(e).referencedImageId)}else if("volumeId"in i){let{volumeId:e,referencedVolumeId:n}=i;if(n){let e=nV.Ay.getVolume(n);if(e)return e}let a=nV.Ay.getVolume(e);a&&(t=a.imageIds.map(e=>nV.Ay.getImage(e).referencedImageId))}return u$(t)}(e[0]),c={dimensions:h.dimensions,spacing:h.spacing,origin:h.origin,direction:h.direction,scalarData:h.voxelManager.getCompleteScalarDataArray()};if(0===c.scalarData.length||0===d.scalarData.length)return{[t]:{name:"TMTV",value:0}};let u=await (0,uP.G_)().executeTask("compute","computeMetabolicStats",{segmentationInfo:d,imageInfo:c});return uX(uR.COMPUTE_STATISTICS,100),u}function pg(e,t){let n=e.maxX-e.minX,i=e.maxY-e.minY,a=[n,i],o=[e.minX+n/2,e.minY+i/2],r=[Math.abs(t[0]-o[0]),Math.abs(t[1]-o[1])],l=r[0]-.5*a[0],s=r[1]-.5*a[1];if(l>0&&s>0)return l*l+s*s;let d=Math.max(l,0)+Math.max(s,0);return d*d}function pm(e,t){return Math.sqrt(pg(e,t))}function pp(e){let[t,n]=e;return o3(t,n)}function pf(e){let[t,n]=e,i=o3(t,n);return[[t[0]-i,t[1]-i],[t[0]+i,t[1]+i]]}function pv(e,t,n={}){return n.precalculated||pI(e,n),n.precalculated(t)}let pI=(e,t={})=>{let{xRadius:n,yRadius:i,zRadius:a}=e;(void 0===t.invXRadiusSq||void 0===t.invYRadiusSq||void 0===t.invZRadiusSq)&&(t.invXRadiusSq=0!==n?1/n**2:0,t.invYRadiusSq=0!==i?1/i**2:0,t.invZRadiusSq=0!==a?1/a**2:0);let{invXRadiusSq:o,invYRadiusSq:r,invZRadiusSq:l}=t,{center:s}=e,[d,h,c]=s;return t.precalculated=e=>{let t=e[0]-d,n=t*t*o;if(n>1)return!1;let i=e[1]-h;if((n+=i*i*r)>1)return!1;let a=e[2]-c;return(n+=a*a*l)<=1},t};function pC(e){let[t,n,i,a]=e;return[[i[0],n[1]],[a[0],t[1]]]}function p_(e,t){let[n,i]=e,[a,o]=t;return[2*a-n,2*o-i]}function pE(e,t,n){let[i,a]=n;if(1e-6>Math.abs(t))return e<0;let o=e/t;if(t>0){if(o>a)return 0;o>i&&(n[0]=o)}else{if(o<i)return 0;o<a&&(n[1]=o)}return 1}function pw(e,t,n,i,a){let[o,r]=e,[l,s]=t,d=l-o,h=s-r;if(void 0===i||void 0===a?(i=e,a=t):(i[0]=e[0],i[1]=e[1],a[0]=t[0],a[1]=t[1]),1e-6>Math.abs(d)&&1e-6>Math.abs(h)&&o>=n[0]&&o<=n[2]&&r>=n[1]&&r<=n[3])return 1;let c=[0,1];
312if(pE(n[0]-o,d,c)&&pE(o-n[2],-d,c)&&pE(n[1]-r,h,c)&&pE(r-n[3],-h,c)){let[e,t]=c;return t<1&&(a[0]=o+t*d,a[1]=r+t*h),e>0&&(i[0]+=e*d,i[1]+=e*h),1}return 0}function pA(e,t){return 3===e[0].length?function(e,t){let[n,i]=e,[a,o]=t,r=iT.jb(iT.vt(),i,n),l=iT.jb(iT.vt(),a,o),s=iT.Om(r,l),d=iT.Bw(r);return 180*Math.acos(s/(d*iT.Bw(l)))/Math.PI}(e,t):function(e,t){let[n,i]=e,[a,o]=t,r=aZ.jb(aZ.vt(),i,n),l=aZ.jb(aZ.vt(),a,o),s=aZ.Om(r,l),d=aZ.Bw(r);return 180/Math.PI*Math.acos(s/(d*aZ.Bw(l)))}(e,t)}function pS(e,t,n,i){let a=iT.vt();iT.$A(a,t,e);let o=iT.fA(...n),r=iT.fA(...i),l=iT.vt();iT.Re(l,o,r);let s=iT.Bw(l);if(s<1e-4)return{worldWidth:0,worldHeight:0};let d=iT.Om(l,a)/(s*iT.Bw(a));return{worldWidth:Math.sqrt(1-d*d)*s,worldHeight:d*s}}function py(e,t,n,i,a=.25){let o;for(let r of pb(e,t,{targetVolumeId:n,stepSize:a})){let t=i(e.getIntensityFromWorld(r),r);t&&(o=t)}return o}function pb(e,t,{targetVolumeId:n,stepSize:i}){let a=e.getCamera(),{viewPlaneNormal:o}=a,{spacingInNormalDirection:r}=aT.A(e,a,n),l=r*i||1,s=e.getBounds(),d=[],h=[...t];for(;pT(h,s);)d.push([...h]),h[0]+=o[0]*l,h[1]+=o[1]*l,h[2]+=o[2]*l;for(h=[...t];pT(h,s);)d.push([...h]),h[0]-=o[0]*l,h[1]-=o[1]*l,h[2]-=o[2]*l;return d}let pT=function(e,t){let[n,i,a,o,r,l]=t;return e[0]>n+10&&e[0]<i-10&&e[1]>a+10&&e[1]<o-10&&e[2]>r+10&&e[2]<l-10},pM=(e,t,n,i,a,o,r,l)=>{let s=[iT.fA(n,i,a),iT.fA(o,i,a),iT.fA(n,r,a),iT.fA(o,r,a),iT.fA(n,i,l),iT.fA(o,i,l),iT.fA(n,r,l),iT.fA(o,r,l)],d=iT.fA(t[0],t[1],t[2]),h=iT.fA(e[0],e[1],e[2]),c=-iT.Om(d,h),u=null;for(let e of s){let t=iT.Om(d,e)+c;if(null===u)u=Math.sign(t);else if(Math.sign(t)!==u)return!0}return!1},pD={filterAnnotationsWithinSlice:oC,getWorldWidthAndHeightFromCorners:u4,getWorldWidthAndHeightFromTwoPoints:pS,filterAnnotationsForDisplay:o_,getPointInLineOfSightWithCriteria:py,isPlaneIntersectingAABB:pM,filterAnnotationsWithinSamePlane:ga,getPointsInLineOfSight:pb};function pO(e){let t="",n=e[0]<0?"R":"L",i=e[1]<0?"A":"P",a=e[2]<0?"F":"H",o=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])];for(let e=0;e<3;e++)if(o[0]>1e-4&&o[0]>o[1]&&o[0]>o[2])t+=n,o[0]=0;else if(o[1]>1e-4&&o[1]>o[0]&&o[1]>o[2])t+=i,o[1]=0;else if(o[2]>1e-4&&o[2]>o[0]&&o[2]>o[1])t+=a,o[2]=0;else if(o[0]>1e-4&&o[1]>1e-4&&o[0]===o[1])t+=n+i,o[0]=0,o[1]=0;else if(o[0]>1e-4&&o[2]>1e-4&&o[0]===o[2])t+=n+a,o[0]=0,o[2]=0;else if(o[1]>1e-4&&o[2]>1e-4&&o[1]===o[2])t+=i+a,o[1]=0,o[2]=0;else break;return t}function px(e){let t=e.replace("H","f");return(t=(t=(t=(t=(t=t.replace("F","h")).replace("R","l")).replace("L","r")).replace("A","p")).replace("P","a")).toUpperCase()}var pP=n(18987),pL=n(23478),pN=n(2548);!function(e){e.CLIP_STOPPED="CORNERSTONE_CINE_TOOL_STOPPED",e.CLIP_STARTED="CORNERSTONE_CINE_TOOL_STARTED"}(b||(b={}));let pR=b,pk={};function pU(e,t){let{viewportId:n}=(0,ej.Ay)(e);pk[n]=t}function pV(e){let{viewportId:t}=(0,ej.Ay)(e);return pk[t]}let{ViewportStatus:pF}=aO,{triggerEvent:pG}=i9,pB=new Map;function pH(e,t){let n,i;if(void 0===e)throw Error("playClip: element must not be undefined");let a=(0,ej.Ay)(e);if(!a)throw Error("playClip: element must be a valid Cornerstone enabled element");t||(t={}),t.dynamicCineEnabled=t.dynamicCineEnabled??!0;let{viewport:o}
312=a,r=function(e,t){if(e instanceof iA.A){var n,i=t.waitForRendered??30;let a=e.getImageIds();return{get numScrollSteps(){return a.length},get currentStepIndex(){return e.getTargetImageIdIndex()},get frameTimeVectorEnabled(){return!0},waitForRenderedCount:0,scroll(t){if(this.waitForRenderedCount<=i&&e.viewportStatus!==pF.RENDERED)return void this.waitForRenderedCount++;this.waitForRenderedCount=0,pL.A(e,{delta:t,debounceLoading:!0})}}}if(e instanceof i8.A){let n=pj(e);if(t.dynamicCineEnabled&&n?.isDynamicVolume())return{get numScrollSteps(){return n.numDimensionGroups},get currentStepIndex(){return n.dimensionGroupNumber-1},get frameTimeVectorEnabled(){return!1},scroll(e){n.scroll(e)}};let{volumeId:i}=n,a={viewPlaneNormal:iT.vt(),scrollInfo:null},o=()=>{let t=e.getCamera();if(!a.scrollInfo||!iT.aI(t.viewPlaneNormal,a.viewPlaneNormal)){let n=pN.A(e,i);a.viewPlaneNormal=t.viewPlaneNormal,a.scrollInfo=n}return a.scrollInfo};return{get numScrollSteps(){return o().numScrollSteps},get currentStepIndex(){return o().currentStepIndex},get frameTimeVectorEnabled(){let t=e.getCamera(),i=n.direction.slice(6,9).map(e=>-e),a=iT.Om(i,t.viewPlaneNormal);return aB.aI(a,1)},scroll(t){o().currentStepIndex+=t,pL.A(e,{delta:t})}}}if(e instanceof pP.A)return n=t.waitForRendered??30,{get numScrollSteps(){return e.getNumberOfSlices()},get currentStepIndex(){return e.getSliceIndex()},get frameTimeVectorEnabled(){return!0},waitForRenderedCount:0,scroll(t){if(this.waitForRenderedCount<=n&&e.viewportStatus!==pF.RENDERED)return void this.waitForRenderedCount++;this.waitForRenderedCount=0,pL.A(e,{delta:t,debounceLoading:!0})},play:t=>(t&&e.setPlaybackRate(t/24),e.play(),e.getFrameRate())};throw Error("Unknown viewport type")}(o,t),l=pV(e),s=t.dynamicCineEnabled;if(s&&pz(e),l?p$(e,{stopDynamicCine:!s,viewportId:o.id}):pU(e,l={intervalId:void 0,framesPerSecond:30,lastFrameTimeStamp:void 0,ignoreFrameTimeVector:!1,usingFrameTimeVector:!1,frameTimeVector:t.frameTimeVector??void 0,speed:t.frameTimeVectorSpeedMultiplier??1,reverse:t.reverse??!1,loop:t.loop??!0,bounce:t.bounce??!1}),l.dynamicCineEnabled=t.dynamicCineEnabled,(t.framesPerSecond<0||t.framesPerSecond>0)&&(l.framesPerSecond=Number(t.framesPerSecond),l.reverse=l.framesPerSecond<0,l.ignoreFrameTimeVector=!0),!0!==l.ignoreFrameTimeVector&&l.frameTimeVector&&l.frameTimeVector.length===r.numScrollSteps&&r.frameTimeVectorEnabled){let{timeouts:e,isTimeVarying:t}=function(e,t){let n,i,a,o=0,r=e.length,l=[],s=!1;for(("number"!=typeof t||t<=0)&&(t=1),n=1;n<r;
312n++)l.push(a=Number(e[n])/t|0),1===n?i=a:a!==i&&(s=!0),o+=a;return l.length>0&&(a=s?o/l.length|0:l[0],l.push(a)),{timeouts:l,isTimeVarying:s}}(l.frameTimeVector,l.speed);n=e,i=t}void 0!==t.bounce&&(l.bounce=t.bounce);let d=()=>{let{numScrollSteps:t,currentStepIndex:n}=r,i=n+(l.reverse?-1:1);if(i<0||i>=t)if(l.bounce)l.reverse=!l.reverse,i=Math.max(0,Math.min(t-1,i=n+(l.reverse?-1:1)));else if(l.loop)i=l.reverse?t-1:0;else{p$(e,{stopDynamicCine:!s,viewportId:o.id}),pG(e,pR.CLIP_STOPPED,{element:e});return}let a=i-n;if(a)try{r.scroll(a)}catch(t){console.warn("Play clip not scrolling",t),pX(l),pG(e,pR.CLIP_STOPPED,{element:e})}};if(s){let t=pj(o);t&&pB.set(t.volumeId,e)}r.play?l.framesPerSecond=r.play(t.framesPerSecond):n&&n.length>0&&i?(l.usingFrameTimeVector=!0,l.intervalId=window.setTimeout(function e(){l.intervalId=window.setTimeout(e,n[r.currentStepIndex]),d()},0)):(l.usingFrameTimeVector=!1,l.intervalId=window.setInterval(d,1e3/Math.abs(l.framesPerSecond))),pG(e,pR.CLIP_STARTED,{element:e})}function pW(e,t={}){p$(e,{stopDynamicCine:!0,...t})}function p$(e,t={stopDynamicCine:!0,viewportId:void 0}){let n,{stopDynamicCine:i,viewportId:a}=t,o=(0,ej.Ay)(e),r=o?.viewport;if(o){let{viewport:e}=o;n=pV(e.element)}else{if(!a)return;n=pk[a]}n&&pX(n),r instanceof pP.A?r.pause():i&&r instanceof nU.A&&pz(e)}function pz(e){let{viewport:t}=(0,ej.Ay)(e);if(t instanceof i8.A){let n=pj(t);if(n?.isDynamicVolume()){let t=pB.get(n.volumeId);pB.delete(n.volumeId),t&&t!==e&&pW(t)}}}function pX(e){let t=e.intervalId;void 0!==t&&(e.intervalId=void 0,e.usingFrameTimeVector?clearTimeout(t):clearInterval(t))}function pj(e){if(!(e instanceof i8.A))return;let t=e.getAllVolumeIds();if(!t?.length)return;let n=t.find(e=>nV.Ay.getVolume(e)?.isDynamicVolume())??t[0];return nV.Ay.getVolume(n)}function pq(e,t=Math.floor(Math.random()*(e.length-1))){if(0===t)return 0;let n=[...e],{length:i}=e;for(let a=0;a<i;a++)e[a]=n[(a+t+i)%i];return t}function pK(e,t){if(function(e,t){let n=t?.knotsRatioPercentage||30;return!e?.data?.contour?.polyline?.length||!!(n<=0)}(e,t))return!1;let{viewPlaneNormal:n}=e.metadata,{closed:i,polyline:a}=e.data.contour,o=function(e,t){let n=c2.create(),i=iT.WQ(iT.vt(),t,e),a=Math.abs(e[0])>.1?iT.fA(-e[1],e[0],0):iT.fA(0,-e[2],e[1]);return c2.lookAt(n,t,i,a),n}(n,e.data.contour.polyline[0]),r=e.data.contour.polyline.map(e=>{let t=iT.Z0(iT.vt(),e,o);return[t[0],t[1]]}),l=i?pq(r):0,s=re(r,0,r.length-1,t?.knotsRatioPercentage||30);if(s===r)return!1;pq(s,-l);for(let e=1;e<t?.loop;e++)l=i?pq(s):0,pq(s=re(s,0,s.length-1,t?.knotsRatioPercentage||30),-l);let d=c2.invert(c2.create(),o);return e.data.contour.polyline=s.map(e=>iT.Z0([0,0,0],[...e,0],d)),!0}let pY={smoothAnnotation:pK},{isEqual:pZ}=i9,pJ=iT.fA(1,0,0),pQ=[pJ,iT.fA(0,1,0),iT.fA(0,0,1)];function p0(e){let t=iT.Re(iT.vt(),e[0],e[1]),n=iT.Re(iT.vt(),e[0],e[2]);return[...p1(t,pQ),...p1(n,pQ)].every(e=>pZ(e,0)||pZ(e,90)||pZ(e,180)||pZ(e,270))}function p1(e,t){return t.map(t=>180*iT.g7(e,t)/Math.PI)}var p2=n(90048),p5=n(57735);let p3={};function p4(e,t){let{viewportId:n}=(0,ej.Ay)(e);p3[n]=t}function p8(e){let{viewportId:t}=(0,ej.Ay)(e);return p3[t]}let p9=n(53750).A.Prefetch;function p7(e){let t=(0,ej.Ay)(e);if(!t)return null;let{viewport:n}=t;return n instanceof iA.A?{currentImageIdIndex:n.getCurrentImageIdIndex(),imageIds:n.getImageIds()}:null}function p6(e){return function(t){let n,i=t.detail;try{n=p7(e)}catch(e){return}if(!n||!n.imageIds||0===n.imageIds.length)return;let a=n.imageIds.indexOf(i.imageId);if(a<0)return;let o=p8(e);o&&o.indicesToRequest&&o.indicesToRequest.length&&o.indicesToRequest.push(a)}}let fe=e=>{let t=new Set(e.imageIds);return e=>e.type!==p9||!t.has(e.additionalDetails.imageId)},{imageRetrieveMetadataProvider:ft}=i9,fn={maxImagesToPrefetch:1/0,preserveExistingPool:!0};function fi(e){var t,n;let i,a,o,r,l=p8(e);if(!l)return;let s=l||{},d=p7(e);if(!d?.imageIds?.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");let{currentImageIdIndex:h}=d;if(s.enabled=s.enabled&&(s.indicesToRequest?.length??0)>0,!1===s.enabled)return;function c(e){let t=s.indicesToRequest.indexOf(e);t>-1&&s.indicesToRequest.splice(t,1)}if(l.indicesToRequest.sort((e,t)=>
312e-t),s.indicesToRequest.slice().forEach(function(e){let t=d.imageIds[e];t&&(6>Math.abs(h-e)?nV.Ay.getImageLoadObject(t):nV.Ay.isLoaded(t))&&c(e)}),!s.indicesToRequest.length)return;fn.preserveExistingPool||p2.A.clearRequestStack(p9);let u=(t=s.indicesToRequest,n=d.currentImageIdIndex,o=0,r=t.length-1,t.forEach((e,t)=>{e<n?o=Math.max(t,o):e>n&&(r=Math.min(t,r))}),{low:o,high:r}),g=u.low,m=u.high,p=[];for(;g>=0||m<s.indicesToRequest.length;){let e=d.currentImageIdIndex,t=e-s.indicesToRequest[g]>fn.maxImagesToPrefetch,n=s.indicesToRequest[m]-e>fn.maxImagesToPrefetch,o=!t&&g>=0,r=!n&&m<s.indicesToRequest.length;if(!r&&!o)break;o&&(a=s.indicesToRequest[g--],i=d.imageIds[a],p.push(i)),r&&(a=s.indicesToRequest[m++],i=d.imageIds[a],p.push(i))}let f=(t,n)=>{let{retrieveOptions:i={}}=ib.get(ft.IMAGE_RETRIEVE_CONFIGURATION,t,"stack")||{};return n.retrieveOptions={...n.retrieveOptions,...i.default||Object.values(i)?.[0]||{}},p5.loadAndCacheImage(t,n).then(()=>{console.log("prefetch done: %s",t),c(d.imageIds.indexOf(t)),0===s.indicesToRequest.length&&(0,eq.A)(ez.A,eK.STACK_PREFETCH_COMPLETE,{element:e,lastPrefetchedImageId:t})})};p.forEach(e=>{p2.A.addRequest(f.bind(null,e,{requestType:p9}),p9,{imageId:e},0)})}function fa(e){clearTimeout(r),r=setTimeout(function(){let t=e.target;try{fi(t)}catch(e){return}},10)}let fo={enable:function(e){let t=p7(e);if(!t||!t.imageIds||0===t.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");let n={indicesToRequest:function(e,t){e=Math.round(e)||0;let n=[],i=(t=Math.round(t)||0)-e+1;if(i<=0)return n;for(;i--;)n[i]=t--;return n}(0,t.imageIds.length-1),enabled:!0,direction:1},i=n.indicesToRequest.indexOf(t.currentImageIdIndex);n.indicesToRequest.splice(i,1),p4(e,n),fi(e),e.removeEventListener(e$.A.STACK_NEW_IMAGE,fa),e.addEventListener(e$.A.STACK_NEW_IMAGE,fa);let a=p6(e);ez.A.removeEventListener(e$.A.IMAGE_CACHE_IMAGE_REMOVED,a),ez.A.addEventListener(e$.A.IMAGE_CACHE_IMAGE_REMOVED,a)},disable:function(e){clearTimeout(r),e.removeEventListener(e$.A.STACK_NEW_IMAGE,fa);let t=p6(e);ez.A.removeEventListener(e$.A.IMAGE_CACHE_IMAGE_REMOVED,t);let n=p8(e);n&&n.indicesToRequest.length&&(n.enabled=!1,p2.A.clearRequestStack(p9))},getConfiguration:function(){return fn},setConfiguration:function(e){fn=e}},{imageRetrieveMetadataProvider:fr}=i9,fl={maxImagesToPrefetch:1/0,minBefore:2,maxAfter:2,directionExtraImages:10,preserveExistingPool:!1},fs={};function fd(e,t=0){let n=p7(e);if(!n)return;if(!n?.imageIds?.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");let i=p8(e);if(!i)return;let a=i||{};if(a.enabled=a.enabled&&(a.indicesToRequest?.length??0)>0,!1===a.enabled)return;function o(e){let t=a.indicesToRequest.indexOf(e);t>-1&&a.indicesToRequest.splice(t,1)}let r=a.indicesToRequest.slice(),{currentImageIdIndex:l}=n;if(r.forEach(e=>{let t=n.imageIds[e];t&&(6>Math.abs(l-e)?nV.Ay.getImageLoadObject(t):nV.Ay.isLoaded(t))&&o(e)}),!a.indicesToRequest.length)return;fl.preserveExistingPool||p2.A.filterRequests(fe(n));let s=(i,r)=>{let{retrieveOptions:l={}}=ib.get(fr.IMAGE_RETRIEVE_CONFIGURATION,i,"stack")||{};return r.retrieveOptions={...r.retrieveOptions,...l.default||Object.values(l)?.[0]||{}},p5.loadAndCacheImage(i,r).then(()=>(function(i){o(n.imageIds.indexOf(i));let r=nV.Ay.getCachedImageBasedOnImageURI(i),{stats:l}=a,s=r?.image?.decodeTimeInMS||0;if(s){l.imageIds.set(i,s),l.decodeTimeInMS+=s;let e=r?.image?.loadTimeInMS||0;l.loadTimeInMS+=e}if(!a.indicesToRequest.length&&r?.sizeInBytes){let{sizeInBytes:n}=r,i=nV.Ay.getMaxCacheSize()/4/n;if(a.cacheFill){if(l.imageIds.size){l.fillTime=Date.now()-l.start;let{size:e}=l.imageIds;l.fillSize=e}}else l.initialTime=Date.now()-l.start,l.initialSize=l.imageIds.size,fu(e,i),fd(e,t)}0===a.indicesToRequest.length&&(0,eq.A)(ez.A,eK.STACK_PREFETCH_COMPLETE,{element:e,lastPrefetchedImageId:i})})(i))};a.indicesToRequest.forEach(e=>{let i=n.imageIds[e];p2.A.addRequest(s.bind(null,i,{requestType:p9}),p9,{imageId:i},t)})}function fh(e){clearTimeout(l),l=setTimeout(function(){let t=e.target;try{fu(t),fd(t,fs[t])}catch(e){return}},5)}let fc=e=>e<0?-1:1,fu=(e,t)=>
312{let n=p7(e);if(!n)return;if(!n.imageIds?.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");let{currentImageIdIndex:i}=n,{maxAfter:a=2,minBefore:o=2}=fl,{directionExtraImages:r=10}=fl,l=p8(e)||{indicesToRequest:[],currentImageIdIndex:i,stackCount:0,enabled:!0,direction:1,stats:{start:Date.now(),imageIds:new Map,decodeTimeInMS:0,loadTimeInMS:0,totalBytes:0}},s=i-l.currentImageIdIndex;if(l.direction=fc(s),l.currentImageIdIndex=i,l.enabled=!0,l.stackCount<100&&(l.stackCount+=r),Math.abs(s)>a||!s)if(l.stackCount=0,t){let e=i/n.imageIds.length;o=Math.ceil(t*e),a=Math.ceil(t*(1-e)),l.cacheFill=!0}else l.cacheFill=!1;else s<0?(o+=l.stackCount,a=0):(a+=l.stackCount,o=0);let d=Math.max(0,i-o),h=Math.min(n.imageIds.length-1,i+a),c=[];for(let e=i+1;e<=h;e++)c.push(e);for(let e=i-1;e>=d;e--)c.push(e);l.indicesToRequest=c,p4(e,l)},fg={enable:(e,t=0)=>{let n=p7(e);if(!n)return;if(!n.imageIds?.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");fu(e),fs[e]=t,fd(e,t),e.removeEventListener(e$.A.STACK_NEW_IMAGE,fh),e.addEventListener(e$.A.STACK_NEW_IMAGE,fh);let i=p6(e);ez.A.removeEventListener(e$.A.IMAGE_CACHE_IMAGE_REMOVED,i),ez.A.addEventListener(e$.A.IMAGE_CACHE_IMAGE_REMOVED,i)},disable:function(e){clearTimeout(l),e.removeEventListener(e$.A.STACK_NEW_IMAGE,fh);let t=p6(e);ez.A.removeEventListener(e$.A.IMAGE_CACHE_IMAGE_REMOVED,t);let n=p8(e);n&&(n.enabled=!1)},getConfiguration:function(){return fl},setConfiguration:function(e){fl=e}},fm=function(e,t){let n,i=t.dimensionGroupNumbers||t.frameNumbers||Array.from({length:e.numDimensionGroups},(e,t)=>t+1);if(t.frameNumbers&&console.warn("Warning: frameNumbers parameter is deprecated. Please use dimensionGroupNumbers instead."),!t.maskVolumeId&&!t.worldCoordinate)throw Error("You should provide either maskVolumeId or imageCoordinate");if(t.maskVolumeId&&t.worldCoordinate)throw Error("You can only use one of maskVolumeId or imageCoordinate");if(t.maskVolumeId){let n=nV.Ay.getVolume(t.maskVolumeId);if(!n)throw Error("Segmentation volume not found");let[a,o]=function(e,t,n){let{imageData:i}=n,a=n.voxelManager,o=a.getScalarDataLength(),r=[];r.length=o;let l=0;for(let e=0;e<o;e++)0!==a.getAtIndex(e)&&(r[l++]=e);r.length=l;let s=[],d=t.voxelManager.getScalarDataLength()===o&&JSON.stringify(t.spacing)===JSON.stringify(n.spacing),h=[];if(d){for(let n=0;n<r.length;n++){let i=[],o=r[n];for(let n=0;n<e.length;n++)i.push(t.voxelManager.getAtIndexAndDimensionGroup(o,e[n]));s.push(i),h.push(a.toIJK(o))}return[s,h]}return n.voxelManager.forEach(({pointLPS:n,value:i,pointIJK:a})=>{if(0===i)return;let o=iY(t.imageData,t.dimensions,t.spacing,n),r=0,l=new Map;e.forEach(e=>l.set(e,0)),t.voxelManager.forEach(({index:n})=>{for(let i=0;i<e.length;i++){let a=t.voxelManager.getAtIndexAndDimensionGroup(n,e[i]),o=e[i];l.set(o,l.get(o)+a)}r++},{imageData:t.imageData,boundsIJK:o});let d=[];l.forEach(e=>{d.push(e/r)}),h.push(a),s.push(d)},{imageData:i}),[s,h]}(i,e,n);return[a,o]}return t.worldCoordinate?function(e,t,n){let{dimensions:i,imageData:a}=n,o=a.worldToIndex(t);if(o[0]=Math.floor(o[0]),o[1]=Math.floor(o[1]),o[2]=Math.floor(o[2]),!lF.A(o,i))throw Error("outside bounds");let r=i[0],l=i[0]*i[1],s=[];return e.forEach(e=>{let t=o[2]*l+o[1]*r+o[0];s.push(n.voxelManager.getAtIndexAndDimensionGroup(t,e))}),s}(i,t.worldCoordinate,e):n};var fp=n(80159);function ff(e,t){let n=e.getScalarDataLength(),i=new Float32Array(n);for(let a of t){let t=e.getDimensionGroupScalarData(a);for(let e=0;e<n;e++)i[e]+=t[e]}return i}let fv={[fp.$.SUM]:(e,t,n)=>{let i=ff(e,t);for(let e=0;e<i.length;e++)n(e,i[e])},[fp.$.AVERAGE]:(e,t,n)=>{let i=function(e,t){let n=ff(e,t),i=t.length;for(let e=0;e<n.length;e++)n[e]/=i;return n}(e,t);for(let e=0;e<i.length;e++)n(e,i[e])},[fp.$.SUBTRACT]:(e,t,n)=>{if(2!==t.length)throw Error("Please provide only 2 dimension groups for subtraction.");let i=e.getScalarDataLength(),a=e.getDimensionGroupScalarData(t[0]),o=e.getDimensionGroupScalarData(t[1]);for(let e=0;e<i;e++){let t=a[e]-o[e];n(e,t)}}};function fI(e,t,n){let{dimensionGroupNumbers:i,frameNumbers:a}=n;a&&console.warn("Warning: frameNumbers parameter is deprecated. Please use dimensionGroupNumbers instead.");let o=i||a||Array.from({length:e.numDimensionGroups},(e,t)=>t+1);if(o.length<=1)throw Error("Please provide two or more dimension groups");let r=e.voxelManager,l=r.getScalarDataLength(),s=fv[t];if(!s)throw Error(`Unsupported operation: ${t}`);let d=new Float32Array(l);return s(r,o,(e,t)=>{d[e]=t}),d}
312function fC(e,t,n){let{dimensionGroupNumbers:i,frameNumbers:a,targetVolume:o}=n;if(!o)throw Error("A target volume must be provided");a&&console.warn("Warning: frameNumbers parameter is deprecated. Please use dimensionGroupNumbers instead.");let r=i||a||Array.from({length:e.numDimensionGroups},(e,t)=>t+1);if(r.length<=1)throw Error("Please provide two or more dimension groups");let l=e.voxelManager,s=o.voxelManager,d=fv[t];if(!d)throw Error(`Unsupported operation: ${t}`);d(l,r,(e,t)=>{s.setAtIndex(e,t)}),s.resetModifiedSlices();for(let e=0;e<o.dimensions[2];e++)s.modifiedSlices.add(e)}function f_(e,t){let n=3*t;if(n<e.length)return iT.fA(e[n],e[n+1],e[n+2])}function fE(e){let t=e.getLines().getData(),n=0,i=new Map;for(;n<t.length;){let e=t[n++],a=[];for(let i=0;i<e;i++)a.push(t[n+i]);i.set(a[0],a),n+=e}let a=[],o=e=>{for(let[t,n]of e.entries())if(void 0!==n)return t;return -1},r=o(i);for(;-1!==r;){let e=[r];for(;i.has(r);){let t=i.get(r)[1];i.has(t)&&e.push(t),i.delete(r),r=t}a.push(e),r=o(i)}return a.length?a:void 0}function fw(e){let t=fE(e);if(!t)return;let n=e.getPoints().getData();return t.map(e=>e.map(e=>f_(n,e)))}!function(e){e.Top="top",e.Left="left",e.Bottom="bottom",e.Right="right"}(T||(T={}));var fA=n(80523),fS=n(91921);let fy=e=>e&&e.upper>e.lower,fb=(e,t)=>!!e&&!!t&&e.lower===t.lower&&e.upper===t.upper,fT=(e,t,n)=>[e[0]*(1-n)+t[0]*n,e[1]*(1-n)+t[1]*n,e[2]*(1-n)+t[2]*n],fM=e=>!!e&&e.width>0&&e.height>0,fD=(e,t)=>!!e&&!!t&&e.width===t.width&&e.height===t.height,{clamp:fO}=i9;class fx{constructor(e){fx.validateProps(e);let{colormap:t,size:n={width:20,height:100},imageRange:i={lower:0,upper:1},voiRange:a={lower:0,upper:1},container:o,showFullPixelValueRange:r=!1}=e;this._colormap=t,this._imageRange=i,this._voiRange=a,this._showFullImageRange=r,this._canvas=this._createRootElement(n),o&&this.appendTo(o)}get colormap(){return this._colormap}set colormap(e){this._colormap=e,this.render()}get size(){let{width:e,height:t}=this._canvas;return{width:e,height:t}}set size(e){let{_canvas:t}=this;!fM(e)||fD(t,e)||(this._setCanvasSize(t,e),this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){!fy(e)||fb(e,this._imageRange)||(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){!fy(e)||fb(e,this._voiRange)||(this._voiRange=e,this.render())}get showFullImageRange(){return this._showFullImageRange}set showFullImageRange(e){e!==this._showFullImageRange&&(this._showFullImageRange=e,this.render())}appendTo(e){e.appendChild(this._canvas),this.render()}dispose(){let{_canvas:e}=this,{parentElement:t}=e;t?.removeChild(e)}static validateProps(e){let{size:t,imageRange:n,voiRange:i}=e;if(t&&!fM(t))throw Error('Invalid "size"');if(n&&!fy(n))throw Error('Invalid "imageRange"');if(i&&!fy(i))throw Error('Invalid "voiRange"')}_setCanvasSize(e,t){let{width:n,height:i}=t;e.width=n,e.height=i,Object.assign(e.style,{width:`${n}px`,height:`${i}px`})}_createRootElement(e){let t=document.createElement("canvas");return Object.assign(t.style,{position:"absolute",top:"0",left:"0",pointerEvents:"none",boxSizing:"border-box"}),this._setCanvasSize(t,e),t}render(){let e;if(!this._canvas.isConnected)return;let{_colormap:t}=this,{RGBPoints:n}=t,i=n.length/4,a=e=>{let t=4*e;if(!(e<0)&&!(e>=i))return{index:e,position:n[t],color:[n[t+1],n[t+2],n[t+3]]}},{width:o,height:r}=this._canvas,l=this._canvas.getContext("2d");if(!l)return;let s=o>r,d=s?o:r,{_voiRange:h}=this,c=this._showFullImageRange?this._imageRange:{...h},u=a(0),g=(c.upper-c.lower)/(d-1),m=c.lower;for(let t=0;t<d;t++){let n,d=(m-h.lower)/Math.abs(h.upper-h.lower);if(u)for(let t=u.index;t<i&&!(d<=u.position);t++)e=u,u=a(t+1);if(e)if(u){let t=(d-e.position)/(u.position-e.position);n=fT(e.color,u.color,t)}else n=[...e.color];else n=[...u.color];let c=n.map(e=>fO(Math.round(255*e),0,255));l.fillStyle=`rgb(${c[0]}, ${c[1]}, ${c[2]})`,s?l.fillRect(t,0,1,r):l.fillRect(0,r-t-1,o,1),m+=g}}}let fP={FONT:"10px Arial",COLOR:"white",TICK_SIZE:5,TICK_WIDTH:1,TICK_LABEL_MARGIN:3,MAX_NUM_TICKS:8,TICKS_STEPS:[1,2.5,5,10]};class fL{constructor(e){fL.validateProps(e);let{top:t=0,left:n=0,size:i={width:20,height:100},imageRange:a={lower:0,upper:1},voiRange:o={lower:0,upper:1},ticks:r,container:l,showFullPixelValueRange:s=!1}=e,{style:d,position:h}=r??{};this._imageRange=a,this._voiRange=o,this._font=d?.font??fP.FONT,this._color=d?.color??fP.COLOR,this._tickSize=d?.tickSize??fP.TICK_SIZE,this._tickWidth=d?.tickWidth??fP.TICK_WIDTH,this._labelMargin=d?.labelMargin??fP.TICK_LABEL_MARGIN,this._maxNumTicks=d?.maxNumTicks??fP.MAX_NUM_TICKS,this._rangeTextPosition=h??T.Right,this._showFullPixelValueRange=s,this._canvas=this._createCanvasElement(i,t,n),l&&this.appendTo(l)}get size(){let{width:e,height:t}=this._canvas;return{width:e,height:t}}set size(e){let{_canvas:t}=this;!fM(e)||fD(t,e)||(this._setCanvasSize(t,e),this.render())}get top(){return Number.parseInt(this._canvas.style.top)}set top(e){let{_canvas:t}=this;e!==this.top&&(t.style.top=`${e}px`,this.render())}get left(){return Number.parseInt(this._canvas.style.left)}set left(e){let{_canvas:t}=this;e!==this.left&&(t.style.left=`${e}px`,this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){!fy(e)||fb(e,this._imageRange)||(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){!fy(e)||fb(e,this._voiRange)||(this._voiRange=e,this.render())}get tickSize(){return this._tickSize}set tickSize(e){e!==this._tickSize&&(this._tickSize=e,this.render())}get tickWidth(){return this._tickWidth}set tickWidth(e){e!==this._tickWidth&&(this._tickWidth=e,this.render())}get color(){return this._color}set color(e){e!==this._color&&(this._color=e,this.render())}get showFullPixelValueRange(){return this._showFullPixelValueRange}set showFullPixelValueRange(e){e!==this._showFullPixelValueRange&&(this._showFullPixelValueRange=e,this.render())}get visible(){return"block"===this._canvas.style.display}set visible(e){e!==this.visible&&(this._canvas.style.display=e?"block":"none",e&&this.render())}appendTo(e){e.appendChild(this._canvas),this.render()}static validateProps(e){let{size:t,imageRange:n,voiRange:i}=e;if(t&&!fM(t))throw Error('Invalid "size"');if(n&&!fy(n))throw Error('Invalid "imageRange"');if(i&&!fy(i))throw Error('Invalid "voiRange"')}_setCanvasSize(e,t){let{width:n,height:i}=t;e.width=n,e.height=i,Object.assign(e.style,{width:`${n}px`,height:`${i}px`})}_createCanvasElement(e,t,n){let i=document.createElement("canvas");return Object.assign(i.style,{display:"none",position:"absolute",boxSizing:"border-box",top:`${t}px`,left:`${n}px`}),this._setCanvasSize(i,e),i}_getTicks(e){let{lower:t,upper:n}=e,i=(n-t)/(this._maxNumTicks-1),a=Math.pow(10,-Math.floor(Math.log10(Math.abs(i)))),o=i*a,r
312=fP.TICKS_STEPS.find(e=>e>=o)/a,l=Math.ceil(n/r)*r,s=Math.floor(t/r)*r,d=Math.round((l-s)/r)+1,h=[];for(let e=0;e<d;e++)h.push(s+e*r);return{scaleMin:s,scaleMax:l,step:r,ticks:h}}_getLeftTickInfo({position:e,labelMeasure:t}){let{width:n}=this._canvas,i=n-this.tickSize-t.width-this._labelMargin,a={start:[n-this._tickSize,e],end:[n,e]};return{labelPoint:[i,e],tickPoints:a}}_getRightTickInfo({position:e}){return{labelPoint:[this._tickSize+this._labelMargin,e],tickPoints:{start:[0,e],end:[this._tickSize,e]}}}_getTopTickInfo({position:e,labelMeasure:t}){let{height:n}=this._canvas,i=n-this.tickSize-this._labelMargin,a={start:[e,n-this._tickSize],end:[e,n]};return{labelPoint:[e,i],tickPoints:a}}_getBottomTickInfo({position:e,labelMeasure:t}){return{labelPoint:[e,this._tickSize+this._labelMargin],tickPoints:{start:[e,0],end:[e,this._tickSize]}}}render(){let{_canvas:e}=this;if(!e.isConnected||!this.visible)return;let{width:t,height:n}=e,i=t>=n,a=i?t:n,o=e.getContext("2d"),{_voiRange:r}=this,l=this._showFullPixelValueRange?this._imageRange:{...r},s=l.upper-l.lower,{ticks:d}=this._getTicks(l);o.clearRect(0,0,t,n),o.font=this._font,o.textBaseline=i?"top":"middle",o.textAlign=i?"center":"left",o.fillStyle=this._color,o.strokeStyle=this._color,o.lineWidth=this.tickWidth,d.forEach(e=>{let t,r=Math.round(a*((e-l.lower)/s));if(i||(r=n-r),r<0||r>a)return;let d=e.toString(),h=o.measureText(d),{labelPoint:c,tickPoints:u}=i?this._rangeTextPosition===T.Top?this._getTopTickInfo({position:r,labelMeasure:h}):this._getBottomTickInfo({position:r,labelMeasure:h}):this._rangeTextPosition===T.Left?this._getLeftTickInfo({position:r,labelMeasure:h}):this._getRightTickInfo({position:r}),{start:g,end:m}=u;return o.beginPath(),o.moveTo(g[0],g[1]),o.lineTo(m[0],m[1]),o.fillText(d,c[0],c[1]),o.stroke(),r})}}class fN{constructor({id:e,container:t}){this._containerResizeCallback=e=>{let t,n,{contentRect:i,contentBoxSize:a}=e[0];i?(t=i.width,n=i.height):a?.length&&(t=a[0].inlineSize,n=a[0].blockSize),this._containerSize={width:t,height:n},this.onContainerResize()},this._id=e,this._containerSize={width:0,height:0},this._rootElement=this.createRootElement(e),this._containerResizeObserver=new ResizeObserver(this._containerResizeCallback),t&&this.appendTo(t)}get id(){return this._id}get rootElement(){return this._rootElement}appendTo(e){let{_rootElement:t,_containerResizeObserver:n}=this,{parentElement:i}=t;e&&e!==i&&(i&&n.unobserve(i),e.appendChild(t),n.observe(e))}destroy(){let{_rootElement:e,_containerResizeObserver:t}=this,{parentElement:n}=e;n?.removeChild(e),t.disconnect()}get containerSize(){return{...this._containerSize}}createRootElement(e){let t=document.createElement("div");return t.id=e,t.classList.add("widget"),Object.assign(t.style,{width:"100%",height:"100%"}),t}onContainerResize(){}}let fR={MULTIPLIER:1,RANGE_TEXT_POSITION:T.Right,TICKS_BAR_SIZE:50};class fk extends fN{constructor(e){super(e),this._isMouseOver=!1,this._isInteracting=!1,this._mouseOverCallback=e=>{this._isMouseOver=!0,this.showTicks(),e.stopPropagation()},this._mouseOutCallback=e=>{this._isMouseOver=!1,this.hideTicks(),e.stopPropagation()},this._mouseDownCallback=e=>{this._isInteracting=!0,this.showTicks(),this._addVOIEventListeners(e),e.stopPropagation()},this._mouseDragCallback=(e,t)=>{let n=this.getVOIMultipliers(),i=this._getPointsFromMouseEvent(e),{points:a,voiRange:o}=t,r=aZ.jb(aZ.vt(),i.local,a.local),l=r[0]*n[0],s=r[1]*n[1];if(!l&&!s)return;let{lower:d,upper:h}=o,{windowWidth:c,windowCenter:u}=fA.toWindowLevel(d,h);c=Math.max(c+l,1),u+=s;let g=fA.toLowHighRange(c,u);this.voiRange=g,e.stopPropagation(),e.preventDefault()},this._mouseUpCallback=e=>{this._isInteracting=!1,this.hideTicks(),this._removeVOIEventListeners(),e.stopPropagation()},this._eventListenersManager=new fS.I,this._colormaps=fk.getColormapsMap(e),this._activeColormapName=fk.getInitialColormapName(e),this._canvas=this._createCanvas(e),this._ticksBar=this._createTicksBar(e),this._rangeTextPosition=e.ticks?.position??fR.RANGE_TEXT_POSITION,this._canvas.appendTo(this.rootElement),this._ticksBar.appendTo(this.rootElement),this._addRootElementEventListeners()}get activeColormapName(){return this._activeColormapName}set activeColormapName(e){if(e===this._activeColormapName)return;let t=this._colormaps.get(e);if(!t)return void console.warn(`Invalid colormap name (${e})`);this._activeColormapName=e,this._canvas.colormap=t}get imageRange(){return this._canvas.imageRange}set imageRange(e){this._canvas.imageRange=e,this._ticksBar.imageRange=e}get voiRange(){return this._canvas.voiRange}set voiRange(e){let{voiRange:t}=this._canvas;!fy(e)||fb(e,t)||(this._canvas.voiRange=e,this._ticksBar.voiRange=e,this.onVoiChange(e))}
312get showFullImageRange(){return this._canvas.showFullImageRange}set showFullImageRange(e){this._canvas.showFullImageRange=e,this._ticksBar.showFullPixelValueRange=e}destroy(){super.destroy(),this._eventListenersManager.reset()}createRootElement(){let e=document.createElement("div");return Object.assign(e.style,{position:"relative",fontSize:"0",width:"100%",height:"100%"}),e}onContainerResize(){super.onContainerResize(),this.updateTicksBar(),this._canvas.size=this.containerSize}getVOIMultipliers(){return[fR.MULTIPLIER,fR.MULTIPLIER]}onVoiChange(e){}showTicks(){this.updateTicksBar(),this._ticksBar.visible=!0}hideTicks(){this._isInteracting||this._isMouseOver||(this._ticksBar.visible=!1)}static getColormapsMap(e){let{colormaps:t}=e;return t.reduce((e,t)=>e.set(t.Name,t),new Map)}static getInitialColormapName(e){let{activeColormapName:t,colormaps:n}=e;return t&&n.some(e=>e.Name===t)?t:n[0].Name}_createCanvas(e){let{imageRange:t,voiRange:n,showFullPixelValueRange:i}=e;return new fx({colormap:this._colormaps.get(this._activeColormapName),imageRange:t,voiRange:n,showFullPixelValueRange:i})}_createTicksBar(e){let t=e.ticks;return new fL({imageRange:e.imageRange,voiRange:e.voiRange,ticks:t,showFullPixelValueRange:e.showFullPixelValueRange})}_getPointsFromMouseEvent(e){let{rootElement:t}=this,n=[e.clientX,e.clientY],i=[e.pageX,e.pageY],a=t.getBoundingClientRect(),o=[i[0]-a.left-window.pageXOffset,i[1]-a.top-window.pageYOffset];return{client:n,page:i,local:o}}updateTicksBar(){let e,t,{width:n,height:i}=this.containerSize;if(0===n&&0===i)return;let{_ticksBar:a,_rangeTextPosition:o}=this,r=n>=i,l=r?n:fR.TICKS_BAR_SIZE,s=r?fR.TICKS_BAR_SIZE:i;if(!(n>=i?[T.Top,T.Bottom]:[T.Left,T.Right]).includes(o))throw Error("Invalid rangeTextPosition value for the current colobar orientation");a.size={width:l,height:s},r?(t=0,e=o===T.Top?-s:i):(e=0,t=o===T.Left?-l:n),a.top=e,a.left=t}_addRootElementEventListeners(){let{_eventListenersManager:e}=this,{rootElement:t}=this;e.addEventListener(t,"mouseover",this._mouseOverCallback),e.addEventListener(t,"mouseout",this._mouseOutCallback),e.addEventListener(t,"mousedown",this._mouseDownCallback)}_addVOIEventListeners(e){let{_eventListenersManager:t}=this,n={points:this._getPointsFromMouseEvent(e),voiRange:{...this._canvas.voiRange}};this._removeVOIEventListeners(),t.addEventListener(document,"voi.mouseup",this._mouseUpCallback),t.addEventListener(document,"voi.mousemove",e=>this._mouseDragCallback(e,n))}_removeVOIEventListeners(){let{_eventListenersManager:e}=this;e.removeEventListener(document,"voi.mouseup"),e.removeEventListener(document,"voi.mousemove")}}let{Events:fU}=aO,fV={lower:-1e3,upper:1e3};class fF extends fk{constructor(e){let{element:t,volumeId:n}=e;super({...e,imageRange:fF._getImageRange(t,n),voiRange:fF._getVOIRange(t,n)}),this.autoHideTicks=()=>{if(this._hideTicksTimeoutId)return;let e=this._hideTicksTime-Date.now();e<=0?this.hideTicks():this._hideTicksTimeoutId=window.setTimeout(()=>{this._hideTicksTimeoutId=0,this.autoHideTicks()},e)},this._stackNewImageCallback=()=>{this.imageRange=fF._getImageRange(this._element)},this._imageVolumeModifiedCallback=e=>{let{volumeId:t}=e.detail;if(t!==this._volumeId)return;let{_element:n}=this;this.imageRange=fF._getImageRange(n,t)},this._viewportVOIModifiedCallback=e=>{let{viewportId:t,volumeId:n,range:i,colormap:a}=e.detail,{viewport:o}=this.enabledElement;t===o.id&&n===this._volumeId&&(this.voiRange=i,a&&(this.activeColormapName=a.name),this.showAndAutoHideTicks())},this._viewportColormapModifiedCallback=e=>{let{viewportId:t,colormap:n,volumeId:i}=e.detail,{viewport:a}=this.enabledElement;t===a.id&&i===this._volumeId&&(this.activeColormapName=n.name)},this._element=t,this._volumeId=n,this._addCornerstoneEventListener()}get element(){return this._element}get enabledElement(){return(0,ej.Ay)(this._element)}getVOIMultipliers(){let{viewport:e}=this.enabledElement;return function(e,t,n){if("PT"===i9.getViewportModality(e,t)){let{clientWidth:n,clientHeight:i}=e.element,a=5/Math.max(n,i),o=ly(e,t),{fixedPTWindowWidth:r=!0}=(void 0)??{},l=r?0:a;return o?[l,a]:[l,4]}return[4,4]}(e,this._volumeId)}onVoiChange(e){super.onVoiChange(e);let{viewport:t}=this.enabledElement;if(t instanceof iA.A)t.setProperties({voiRange:e}),t.render();else if(t instanceof i8.A){let{_volumeId:n}=this,i=lV.A(n);t.setProperties({voiRange:e}
312,n),i.forEach(e=>e.render())}}static _getImageRange(e,t){let n,{viewport:i}=(0,ej.Ay)(e),a=i.getImageActor(t);if(!a)return fV;let o=a.getMapper().getInputData().getPointData().getScalars();if(o)n=o.getRange();else{if(!t)throw Error("volumeId is required when scalarData is not available");let[e,i]=nV.Ay.getVolume(t).voxelManager.getRange();n=[e,i]}return 0===n[0]&&0===n[1]?fV:{lower:n[0],upper:n[1]}}static _getVOIRange(e,t){let{viewport:n}=(0,ej.Ay)(e),i=n.getImageActor(t);if(!i)return fV;let a=i.getProperty().getRGBTransferFunction(0).getRange();return 0===a[0]&&0===a[1]?fV:{lower:a[0],upper:a[1]}}showAndAutoHideTicks(e=1e3){this._hideTicksTime=Date.now()+e,this.showTicks(),this.autoHideTicks()}_addCornerstoneEventListener(){let{_element:e}=this;ez.A.addEventListener(fU.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedCallback),e.addEventListener(fU.STACK_NEW_IMAGE,this._stackNewImageCallback),e.addEventListener(fU.VOI_MODIFIED,this._viewportVOIModifiedCallback),e.addEventListener(fU.COLORMAP_MODIFIED,this._viewportColormapModifiedCallback)}destroy(){super.destroy();let{_element:e}=this;ez.A.removeEventListener(fU.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedCallback),e.removeEventListener(fU.STACK_NEW_IMAGE,this._stackNewImageCallback),e.removeEventListener(fU.VOI_MODIFIED,this._viewportVOIModifiedCallback),e.removeEventListener(fU.COLORMAP_MODIFIED,this._viewportColormapModifiedCallback)}}function fG(e,t,n,i,a){let o,r,l,s=[],d=0,h=e.scalarData;if(e.color)for(r=0;r<a;r++)for(l=0;l<i;l++){let i=h[o=((r+n)*e.columns+(l+t))*4],a=h[o+1],c=h[o+2];s[d++]=.2126*i+.7152*a+.0722*c}else for(r=0;r<a;r++)for(l=0;l<i;l++)o=(r+n)*e.columns+(l+t),s[d++]=h[o];return s}function fB(e,t,n){let i=e.length,a=n,o=t,r=0;if(i<2)return{min:a,max:o,mean:(t+n)/2};for(let t=0;t<i;t++){let n=e[t];a=Math.min(a,n),o=Math.max(o,n),r+=n}return{min:a,max:o,mean:r/i}}var fH=n(52052),fW=n(73851);function f$(e){if(e instanceof i8.A){var t=e;let{scalarData:n,width:i,height:a}=fH.A(t),{min:o,max:r}=fW.A(n);return{scalarData:n,minPixelValue:o,maxPixelValue:r,width:i,height:a,rows:i,columns:a}}if(e instanceof iA.A)return function(e){let t=e.getImageData(),{scalarData:n}=t,{min:i,max:a}=fW.A(n),o=t.dimensions[0],r=t.dimensions[1],{rows:l,columns:s,color:d}=e.getCornerstoneImage();return{scalarData:n,width:o,height:r,minPixelValue:i,maxPixelValue:a,rows:l,columns:s,color:d}}(e);throw Error("Viewport not supported")}function fz(e){let{polyline:t}=e.data?.contour||{};if(!t||t.length<3)return void console.warn("Skipping creation of new annotation due to invalid polyline:",t);tu(e.annotationUID),sT(e);let n=t[0],i=t[t.length-1],a={metadata:{...e.metadata,toolName:"PlanarFreehandContourSegmentationTool",originalToolName:e.metadata.originalToolName||e.metadata.toolName},data:{cachedStats:{},handles:{points:[n,i],textBox:e.data.handles.textBox?{...e.data.handles.textBox}:void 0},contour:{...e.data.contour},spline:e.data.spline,segmentation:{...e.data.segmentation}},annotationUID:eX.A(),highlighted:!0,invalidated:!0,isLocked:!1,isVisible:void 0,interpolationUID:e.interpolationUID,interpolationCompleted:e.interpolationCompleted};return th(a,e.metadata.FrameOfReferenceUID),iG(a),e9(a),a}function fX(e){let t=s9(e);if(t?.length===0)return[];let n=[];for(let e of t){let{viewport:t}=(0,ej.yj)(e)||{};t&&n.push(t)}return n}function fj(e){let t=fX(e);return t.length>0?t[0]:void 0}function fq(e,t,n=.99){let i=t.metadata?.viewPlaneNormal;if(!i||!Array.isArray(i))return;let a=iT.vt();for(let t of(iT.S8(a,i),e)){let e=t.getCamera();if(!e?.viewPlaneNormal)continue;let i=iT.vt();if(iT.S8(i,e.viewPlaneNormal),Math.abs(iT.Om(a,i))>=n)return t}}function fK(e,t,n){let i={annotationUID:eX.A(),data:{contour:{closed:!0,polyline:[]},segmentation:{segmentationId:t,segmentIndex:n},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{...e.metadata,toolName:e.metadata.toolName}};return i.data.segmentation.segmentationId=t,i.data.segmentation.segmentIndex=n,e.data.contour?.polyline&&(i.data.contour.polyline=[...e.data.contour.polyline]),e.data.handles?.points&&(i.data.handles.points=e.data.handles.points.map(e=>[...e])),i}function fY(e,t,n,i){let a=s7(e),o=s7(n);if(!a||!o||!a?.has(t))return;let r=a.get(t),l=fj(n);if(!l)return;let s=oy(l.id),d=e=>{let t=fK(e,n,i);if(s){let n=s.getToolInstance(e.metadata.toolName);
312n&&"function"==typeof n.isSplineAnnotation&&n.isSplineAnnotation(e)&&n.createSplineObjectFromType(t,e.data.spline.type)}return th(t,l.element),h.add(t.annotationUID),t},h=new Set;for(let e of r){let t=ta(e),n=d(t);if(t?.childAnnotationUIDs)for(let e of(n.childAnnotationUIDs=[],t.childAnnotationUIDs)){let t=d(ta(e));t.parentAnnotationUID=n.annotationUID,n.childAnnotationUIDs.push(t.annotationUID)}}o.set(i,h)}function fZ(e){let{metadata:t}=e;if(!t)return{};let{FrameOfReferenceUID:n,referencedImageId:i,referencedImageURI:a,multiSliceReference:o,cameraFocalPoint:r,viewPlaneNormal:l,viewUp:s,sliceIndex:d,volumeId:h,bounds:c}=t;return{FrameOfReferenceUID:n,referencedImageId:i,referencedImageURI:a,multiSliceReference:o,cameraFocalPoint:r,viewPlaneNormal:l,viewUp:s,sliceIndex:d,volumeId:h,bounds:c}}function fJ(e,t){if(!e||!t||e.FrameOfReferenceUID!==t.FrameOfReferenceUID||e.referencedImageId!==t.referencedImageId||!e.viewPlaneNormal||!t.viewPlaneNormal||e.viewPlaneNormal.length!==t.viewPlaneNormal.length)return!1;for(let n=0;n<e.viewPlaneNormal.length;n++)if(e.viewPlaneNormal[n]!==t.viewPlaneNormal[n])return!1;return!0}function fQ(e,t){let n=[],i=new Set,a=new Set;for(let o=0;o<e.length;o++){if(i.has(o))continue;let r=e[o],l=!1;for(let e=0;e<t.length;e++){if(a.has(e))continue;let s=t[e];if(!fJ(r.viewReference,s.viewReference))continue;if(a1(r.polyline,s.polyline)){n.push(r),i.add(o),a.add(e),l=!0;break}let d=sx(r.polyline,s.polyline);if(d.hasIntersection&&!d.isContourHole){let t=oi(r.polyline,s.polyline);n.push({polyline:t,viewReference:r.viewReference}),i.add(o),a.add(e),l=!0;break}}l||(n.push(r),i.add(o))}for(let e=0;e<t.length;e++)a.has(e)||n.push(t[e]);return n}function f0(e){if(0===e.length)return[];if(1===e.length)return[...e[0]];let t=[...e[0]];for(let n=1;n<e.length;n++)t=fQ(t,e[n]);return t}function f1(e,t,n){return fQ(e.map(e=>({polyline:sD(e.data.contour.polyline,n),viewReference:fZ(e)})),t.map(e=>({polyline:sD(e.data.contour.polyline,n),viewReference:fZ(e)})))}function f2(e,t){let n=[];for(let i=0;i<e.length;i++){let a=[e[i]];for(let e=0;e<t.length;e++){let n=t[e],i=[];for(let e of a){if(!fJ(e.viewReference,n.viewReference)){i.push(e);continue}if(a1(e.polyline,n.polyline))continue;let t=sx(e.polyline,n.polyline);if(t.hasIntersection&&!t.isContourHole)for(let t of sV(a2(e.polyline,n.polyline))){let n=sU(t);n.length>=3&&i.push({polyline:n,viewReference:e.viewReference})}else i.push({polyline:e.polyline,viewReference:e.viewReference})}a=i}n.push(...a)}return n}function f5(e,t){if(0===t.length)return[...e];let n=[...e];for(let e=0;e<t.length;e++)n=f2(n,t[e]);return n}function f3(e,t,n){return f2(e.map(e=>({polyline:sD(e.data.contour.polyline,n),viewReference:fZ(e)})),t.map(e=>({polyline:sD(e.data.contour.polyline,n),viewReference:fZ(e)})))}function f4(e,t){if(!e.length||!t.length)return[];let n=[];for(let i of e)for(let e of t){if(!fJ(i.viewReference,e.viewReference))continue;if(a1(i.polyline,e.polyline)){n.push({...i});continue}let t=sx(i.polyline,e.polyline);if(t.hasIntersection&&!t.isContourHole){let t=sV(a5(i.polyline,e.polyline));t&&t.length>0&&t.forEach(e=>{n.push({polyline:e,viewReference:i.viewReference})})}}return n}function f8(e,t){if(!e.length&&!t.length)return[];if(!e.length)return t;if(!t.length)return e;if(e.length===t.length){let n=!0;for(let i=0;i<e.length;i++){let a=!1;for(let n=0;n<t.length;n++)if(fJ(e[i].viewReference,t[n].viewReference)&&a1(e[i].polyline,t[n].polyline)){a=!0;break}if(!a){n=!1;break}}if(n)return[]}return[...f2(e,t),...f2(t,e)]}function f9(e,t){let n=[],{annotationUIDsMap:i}=e||{};if(i?.has(t)){for(let e of i.get(t)){let t=ta(e),{polyline:i}=t.data.contour;n.push({polyline:i,viewReference:fZ(t)})}return n}}function f7(e){e.forEach(e=>{let t=ta(e);tu(e),sT(t)}),e.clear()}function f6(e,t,n,i){let a,o=fj(e.segmentationId);if(!o)return;let{polyLinesInfoCanvas1:r,polyLinesInfoCanvas2:l}=function(e,t,n){let i=n9(t.segmentationId),a=n9(n.segmentationId);if(!i||!a||!i.representationData.Contour||!a.representationData.Contour)return;let o=f9(i.representationData.Contour,t.segmentIndex),r=f9(a.representationData.Contour,n.segmentIndex);if(o&&r)return{polyLinesInfoCanvas1:o.map(({polyline:t,viewReference:n})=>({polyline:sD(t,e),viewReference:n})),polyLinesInfoCanvas2:r.map(({polyline:t,viewReference:n})=>({polyline:sD(t,e),viewReference:n}))}}(o,e,t)||{};if(!r||!l)return;switch(i){case M.Union:a=fQ(r,l);break;case M.Subtract:a=f2(r,l);break;case M.Intersect:a=f4(r,l);break;case M.XOR:a=f8(r,l);break;default:a=fQ(r,l)}let s=a.map(({polyline:e,viewReference:t})=>({polyline:sO(e,o),viewReference:t})),d=n9(n.segmentationId),h=n.segmentIndex,c=n.color,u=n.label,{annotationUIDsMap:g}=d.representationData.Contour;if(g){var m;if(e.segmentationId===n.segmentationId&&e.segmentIndex===h){let e=g.get(h);e&&f7(e)}
312m=d.segmentationId,s.forEach(({polyline:e,viewReference:t})=>{if(e.length<3)return;let n={annotationUID:eX.A(),data:{contour:{closed:!0,polyline:e},segmentation:{segmentationId:m,segmentIndex:h},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:"PlanarFreehandContourSegmentationTool",...t}};th(n,o.element);let i=g?.get(h)||new Set;i.add(n.annotationUID),g.set(h,i)}),function(e,{segmentIndex:t,label:n,color:i}){if(!e?.segments)return;let a=e.segments[t]??{active:!1,locked:!1,segmentIndex:t,cachedStats:{},label:n,color:i};void 0!==n&&(a.label=n),void 0!==i&&(a.color=i),e.segments[t]=a}(d,{segmentIndex:h,color:c,label:u})}}function ve(e,t,n){f6(e,t,n,M.Union)}function vt(e,t,n){f6(e,t,n,M.Subtract)}function vn(e,t,n){f6(e,t,n,M.Intersect)}function vi(e,t,n){f6(e,t,n,M.XOR)}function va(e,t){fY(e.segmentationId,e.segmentIndex,t.segmentationId,t.segmentIndex)}function vo(e){let t=n9(e.segmentationId);if(!t)return void console.log("No active segmentation detected");if(!t.representationData.Contour)return void console.log("No contour representation found");let{annotationUIDsMap:n}=t.representationData.Contour;return n?n.has(e.segmentIndex)?void f7(n.get(e.segmentIndex)):void console.log("Segmentation index has no annotations"):void console.log("No annotation map found")}async function vr(e,t,n,i=!0){let a="string"==typeof e?ta(e):e,o="string"==typeof t?ta(t):t;if(!a||!o)throw Error("Both source and target annotations must be valid");n||(n=function(e){let t=sJ(e);if(!t.length)throw Error("No viewport found for the annotation");return t[0]}(a));let r=sD(a.data.contour.polyline,n),l=sD(o.data.contour.polyline,n),s=sx(r,l);if(!s.hasIntersection)return void console.warn("No intersection found between the two annotations");if(s.isContourHole){if(!i)return void console.warn("Hole processing is disabled");sL(n,o,a)}else sN(n,o,l,a,r)}!function(e){e[e.Union=0]="Union",e[e.Subtract=1]="Subtract",e[e.Intersect=2]="Intersect",e[e.XOR=3]="XOR",e[e.Copy=4]="Copy",e[e.Delete=5]="Delete"}(M||(M={}));let{transformWorldToIndex:vl}=i9;function vs(e,t,n,i){let{boundsIJK:a,centerWorld:o,radiusWorld:r}=function(e,t,n){let i,[a,o]=e,r=iT.fA((a[0]+o[0])/2,(a[1]+o[1])/2,(a[2]+o[2])/2),l=iT.Io(a,o)/2;if(!n){let e=vl(t,r),n=Math.ceil(l/Math.min(...t.getSpacing()));return{boundsIJK:[[e[0]-n,e[0]+n],[e[1]-n,e[1]+n],[e[2]-n,e[2]+n]],centerWorld:r,radiusWorld:l}}return{boundsIJK:function(e,t,n,i,a){let[o,r]=n,l=e.getDimensions(),s=t.getCamera(),d=iT.fA(s.viewUp[0],s.viewUp[1],s.viewUp[2]),h=iT.fA(s.viewPlaneNormal[0],s.viewPlaneNormal[1],s.viewPlaneNormal[2]),c=iT.vt();iT.$A(c,d,h);let u=iT.vt(),g=iT.vt();return iT.Ln(u,r,h,a),iT.Ln(g,o,h,-a),iT.Ln(u,u,c,-a),iT.Ln(g,g,c,a),ij([vl(e,u),vl(e,g)],l)}(t,n,e,0,l),centerWorld:r,radiusWorld:l}}(t,e,i),l={center:o,radius:r},s=e.getDimensions();mk.A.createScalarVolumeVoxelManager({dimensions:s,scalarData:e.getPointData().getScalars().getData()}).forEach(n,{boundsIJK:a,isInObject:e=>gY(l,e),imageData:e})}function vd(e){if(!Array.isArray(e)||9!==e.length)throw Error("Matrix must be an array of 9 numbers");if(!e.every(e=>"number"==typeof e&&!isNaN(e)))throw Error("Matrix must contain only valid numbers")}function vh(e){vd(e);let t=[[e[0],e[1],e[2]],[e[3],e[4],e[5]],[e[6],e[7],e[8]]],n=t[0][0]*(t[1][1]*t[2][2]-t[1][2]*t[2][1])-t[0][1]*(t[1][0]*t[2][2]-t[1][2]*t[2][0])+t[0][2]*(t[1][0]*t[2][1]-t[1][1]*t[2][0]);if(1e-10>Math.abs(n))throw Error("Matrix is not invertible (determinant is zero)");let i=[[t[1][1]*t[2][2]-t[1][2]*t[2][1],-(t[0][1]*t[2][2]-t[0][2]*t[2][1]),t[0][1]*t[1][2]-t[0][2]*t[1][1]],[-(t[1][0]*t[2][2]-t[1][2]*t[2][0]),t[0][0]*t[2][2]-t[0][2]*t[2][0],-(t[0][0]*t[1][2]-t[0][2]*t[1][0])],[t[1][0]*t[2][1]-t[1][1]*t[2][0],-(t[0][0]*t[2][1]-t[0][1]*t[2][0]),t[0][0]*t[1][1]-t[0][1]*t[1][0]]],a=[];for(let e=0;e<3;e++)for(let t=0;t<3;t++)a.push(i[e][t]/n);return a}function vc(e){let t=Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);return e.map(e=>e/t)}function vu(e){vd(e);let t=e.slice(0,3),n=e.slice(3,6),i=e.slice(6,9),a=vc(t),o=vc(n),r=vc(i),l={x:[1,0,0],y:[0,1,0],z:[0,0,1]},s=a.every((e,t)=>1e-10>Math.abs(e-l.x[t]))&&o.every((e,t)=>1e-10>Math.abs(e-l.y[t]))&&r.every((e,t)=>1e-10>Math.abs(e-l.z[t])),d=s?[...l.x,...l.y,...l.z]:vh([...a,...o,...r]);return{isStandard:s,rotationMatrix:d}}function vg(e,t,n){let i=[];for(let a=0;a<n.length;a+=3){let o=function(e,t,n){let i=e[0]-t[0],a=e[1]-t[1],o=e[2]-t[2];return[n[0]*i+n[1]*a+n[2]*o+t[0],n[3]*i+n[4]*a+n[5]*o+t[1],n[6]*i+n[7]*a+n[8]*o+t[2]]}(n.slice(a,a+3),t,e);i.push(...o)}return i}function vm(e,t,n){e.data.label=n,e9(e,t,eY.LabelChange)}function vp(e,t){let{data:n}=e,{points:i}=n.handles,{focalPoint:a,viewPlaneNormal:o}=t.getCamera(),r=iT.Om(iT.jb(iT.vt(),i[0],a),o);
312return i.forEach(e=>{iT.WQ(e,e,iT.hs(iT.vt(),[-o[0],-o[1],-o[2]],r))}),t instanceof iA.A&&(e.metadata.referencedImageId=t.getCurrentImageId()),e}function vf(e,t){return Math.atan2(t[1]-e[1],t[0]-e[0])}function vv(e,t,n,i,a={}){let{strokeStyle:o="#f00",lineWidth:r=2,quality:l=.92}=a,s=document.createElement("canvas");s.width=t,s.height=n;let d=s.getContext("2d"),h=t*n,c=e.length/h,u=d.createImageData(t,n),g=u.data;for(let t=0;t<h;t++){let n=t*c,i=4*t;if(1===c){let t=e[n];g[i]=t,g[i+1]=t,g[i+2]=t,g[i+3]=255}else g[i]=e[n],g[i+1]=e[n+1],g[i+2]=e[n+2],g[i+3]=4===c?e[n+3]:255}if(d.putImageData(u,0,0),i.length>0){d.strokeStyle=o,d.lineWidth=r,d.beginPath(),d.moveTo(i[0][0]+.5,i[0][1]+.5);for(let e=1;e<i.length;e++)d.lineTo(i[e][0]+.5,i[e][1]+.5);d.closePath(),d.stroke()}return s.toDataURL("image/jpeg",l)}function vI(e){let t=nV.Ay.getImage(e);if(!t)return;let n=t.width,i=t.height;return{pixelData:t.getPixelData(),width:n,height:i}}function vC(e,t){let n=document.createElement("a");n.href=e,n.download=t,document.body.appendChild(n),n.style.display="none",n.click(),n.remove()}function v_(e,t=5){let n,{contour:i,simplified:a,hull:o,refined:r,fanGeometry:l}=vE(e),{pixelData:s,width:d,height:h}=vI(e)||{};s&&vC(1===t?vv(s,d,h,i):2===t?vv(s,d,h,a):3===t?vv(s,d,h,o):4===t?vv(s,d,h,[r.P1,r.P2,r.P3,r.P4]):function(e,t,n,i,a={}){let{center:o,startAngle:r,endAngle:l,innerRadius:s,outerRadius:d}=i,{strokeStyle:h="#0ff",lineWidth:c=2,quality:u=.92}=a,g=r*Math.PI/180,m=l*Math.PI/180,p=document.createElement("canvas");p.width=t,p.height=n;let f=p.getContext("2d"),v=t*n,I=e.length/v,C=f.createImageData(t,n),_=C.data;for(let t=0;t<v;t++){let n=4*t;if(1===I){let i=e[t];_[n]=i,_[n+1]=i,_[n+2]=i,_[n+3]=255}else{let i=t*I;_[n]=e[i],_[n+1]=e[i+1],_[n+2]=e[i+2],_[n+3]=4===I?e[i+3]:255}}f.putImageData(C,0,0),f.beginPath();for(let e=g;e<=m;e+=.01){let t=o[0]+s*Math.cos(e),n=o[1]+s*Math.sin(e);e===g?f.moveTo(t,n):f.lineTo(t,n)}for(let e=m;e>=g;e-=.01){let t=o[0]+d*Math.cos(e),n=o[1]+d*Math.sin(e);f.lineTo(t,n)}return f.closePath(),f.strokeStyle=h,f.lineWidth=c,f.stroke(),p.toDataURL("image/jpeg",u)}(s,d,h,l,{strokeStyle:"#f00",lineWidth:3,quality:.95}),"contour.jpg")}function vE(e){let{pixelData:t,width:n,height:i}=vI(e)||{};if(!t)return;let a=function(e,t,n){let i=t*n,a=e.length/i;if(![1,3,4].includes(a))throw Error("Buffer must be 1, 3, or 4 channels per pixel");let o=Array.from({length:n},()=>Array(t).fill(!1));for(let i=0;i<n;i++)for(let n=0;n<t;n++){let r=(i*t+n)*a,l=!1;for(let t=0;t<Math.min(3,a);t++)if(e[r+t]>0){l=!0;break}o[i][n]=l}let r=Array.from({length:n},()=>Array(t).fill(0)),l=0,s={};for(let e=0;e<n;e++)for(let i=0;i<t;i++)if(o[e][i]&&0===r[e][i]){l++;let a=0;gf((e,i)=>!(e<0)&&!(e>=t)&&!(i<0)&&!(i>=n)&&o[i][e]&&0===r[i][e],[i,e],{onFlood:(e,t)=>{r[t][e]=l,a++},diagonals:!1}),s[l]=a}if(0===l)return[];let d=Object.keys(s).reduce((e,t)=>s[e]>s[t]?e:t);function h(e,i){if(r[i][e]!==+d)return!1;for(let[a,o]of[[1,0],[-1,0],[0,1],[0,-1]]){let l=e+a,s=i+o;if(l<0||l>=t||s<0||s>=n||r[s][l]!==+d)return!0}return!1}let c=null;e:for(let e=0;e<n;e++)for(let n=0;n<t;n++)if(h(n,e)){c=[n,e];break e}if(!c)return[];let u=[[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]],g=[],m=c,p=[c[0]-1,c[1]];do{g.push([m[0],m[1]]);let e=p[0]-m[0],i=p[1]-m[1],a=u.findIndex(t=>t[0]===e&&t[1]===i);a<0&&(a=0);let o=null;for(let e=1;e<=8;e++){let[i,r]=u[(a+e)%8],l=m[0]+i,s=m[1]+r;if(l>=0&&l<t&&s>=0&&s<n&&h(l,s)){o=[l,s];let[t,n]=u[(a+e-1+8)%8];p=[m[0]+t,m[1]+n];break}}if(!o)break;m=o}while(m[0]!==c[0]||m[1]!==c[1]);return g}(t,n,i),{simplified:o,hull:r}=function(e){let t=or(e,2),n=op(t);return{simplified:t,hull:n}}(a),l=function(e,t,n,i,a,o={}){let{maxDist:r=15,slack:l=2}=o;function s(i,{dx:o,dy:d},h=5){let c=o<0?i[0]-r:i[0]-l,u=o<0?i[0]+l:i[0]+r,g=d<0?i[1]-r:i[1]-l,m=d<0?i[1]+l:i[1]+r,p=i;for(let[i,r]of a){if(i<c||i>u||r<g||r>m)continue;let a=Math.round(i),l=Math.round(r);if(a<0||a>=t||l<0||l>=n)continue;let s=(a-p[0])*o,f=(l-p[0])*d;e[l*t+a]>h&&(s>0||f>0)&&(p=[i,r])}return p}return{P1:s(i.P1,{dx:-1,dy:-1}),P2:s(i.P2,{dx:-1,dy:1}),P3:s(i.P3,{dx:1,dy:1}),P4:s(i.P4,{dx:1,dy:-1})}}(t,n,i,function(e,t=7){if(!e.length)throw Error("Convex hull is empty");let n=e.length,i=e=>(e+1)%n,a=(e,t)=>{let n=[];for(let a=e;n.push(a),a!==t;a=i(a));return n},o=0,r=0;for(let t=1;t<n;t++)e[t][0]<e[o][0]&&(o=t),e[t][0]>e[r][0]&&(r=t);let l=e[o],s=e[r],d=a(o,r),h=a(r,o),c=Math.min(...e.map(e=>e[1])),u=d.some(t=>e[t][1]===c)?d:h,g=Math.min(...u.map(t=>e[t][1])),m=u.map(t=>e[t]).filter(e=>Math.abs(e[1]-g)<=t);return m.length<2&&(m=u.map(t=>e[t]).sort((e,t)=>
312e[1]-t[1]).slice(0,2)),{P1:m.reduce((e,t)=>t[0]<e[0]?t:e,m[0]),P2:l,P3:s,P4:m.reduce((e,t)=>t[0]>e[0]?t:e,m[0])}}(r),o,{maxDist:20,step:.5}),s=function(e){let{P1:t,P2:n,P3:i,P4:a}=e,o=mM(t,n,a,i,!0);if(!o)throw Error("Fan edges appear parallel — no apex found");let r=vf(o,t)*(180/Math.PI),l=vf(o,a)*(180/Math.PI);if(l<=r){let e=r;r=l,l=e}let s=Math.hypot(t[0]-o[0],t[1]-o[1]),d=Math.hypot(a[0]-o[0],a[1]-o[1]),h=Math.hypot(n[0]-o[0],n[1]-o[1]),c=Math.hypot(i[0]-o[0],i[1]-o[1]);return{center:o,startAngle:r,endAngle:l,innerRadius:Math.min(s,d),outerRadius:Math.max(h,c)}}({P1:l.P1,P2:l.P2,P3:l.P3,P4:l.P4});return{contour:a,simplified:o,hull:r,refined:l,fanGeometry:s}}let vw=aD.A,vA=function(e,t){let n=cL.getDefinedCursor(t,!0);n||(n=oK.getDefinedCursor(t)),n||(console.log(`Cursor ${t} is not defined either as SVG or as a standard cursor.`),n=oK.getDefinedCursor(t)),o0(e,n)},vS=[...cO,...oZ];var vy=n(54534);function vb(e,t,n){return vM(e,t,n)}function vT(e,t,n){return vM(e,t,n)}function vM(e,t,n){let{segmentationId:i,type:a}=t;return function(e,t,n,i){n7(e,{segmentationId:t,type:n}).forEach(t=>{t.type===nB.Labelmap?aE.removeRepresentation(e,t.segmentationId,i):t.type===nB.Contour?i4.removeRepresentation(e,t.segmentationId,i):t.type===nB.Surface&&i_.removeRepresentation(e,t.segmentationId,i),dO(t.segmentationId,t.type)});let{viewport:a}=(0,ej.yj)(e)||{};a&&a.render()}(e,i,a,n),n8.removeSegmentationRepresentations(e,{segmentationId:i,type:a})}function vD(){n8.getAllViewportSegmentationRepresentations().forEach(({viewportId:e,representations:t})=>{t.forEach(({segmentationId:t,type:n})=>{vM(e,{segmentationId:t,type:n},void 0)})}),n8.resetState()}function vO(e,t,n){vM(e,{segmentationId:t,type:nB.Labelmap},n)}function vx(e,t,n){vM(e,{segmentationId:t,type:nB.Contour},n)}function vP(e,t,n){vM(e,{segmentationId:t,type:nB.Surface},n)}let vL=function(e){var t;let{segmentationId:n,representation:i,config:a}=e,{type:o,data:r}=i,l=r?{...r}:{};if(!l)throw Error("Segmentation representation data may not be undefined");o===nB.Contour&&((t=l).geometryIds=t.geometryIds??[],t.annotationUIDsMap=t.annotationUIDsMap??new Map);let s=function(e,t,n){let i={};return e?Object.entries(e).forEach(([e,t])=>{let{label:n,locked:a,cachedStats:o,active:r,...l}=t,s={segmentIndex:Number(e),label:n??`Segment ${e}`,locked:a??!1,cachedStats:o??{},active:r??!1,...l};i[e]=s}):t===nB.Contour?function(e,t){let{geometryIds:n}=t;n?.forEach(t=>{let n=nV.Ay.getGeometry(t);if(n?.data){let{segmentIndex:t}=n.data;e[t]={segmentIndex:t}}})}(i,n):t===nB.Surface?function(e,t){let{geometryIds:n}=t;n?.forEach(t=>{let n=nV.Ay.getGeometry(t);if(n?.data){let{segmentIndex:t}=n.data;e[t]={segmentIndex:t}}})}(i,n):i[1]={segmentIndex:1,label:"Segment 1",locked:!1,cachedStats:{},active:!0},i}(a?.segments,o,l);return delete a?.segments,{segmentationId:n,label:a?.label??null,cachedStats:a?.cachedStats??{},segments:s,representationData:{[o]:{...l}}}};function vN(e,t){e.forEach(e=>{let n=vL(e);n8.addSegmentation(n),t||nX(n.segmentationId)})}function vR(e,t){e.forEach(e=>{n8.updateSegmentation(e.segmentationId,e.payload),t||nX(e.segmentationId)})}function vk(e){n8.getAllViewportSegmentationRepresentations().filter(({representations:t})=>t.some(t=>t.segmentationId===e)).map(({viewportId:e})=>e).forEach(t=>{vM(t,{segmentationId:e},void 0)}),n8.removeSegmentation(e),nj(e)}function vU(){n8.getState().segmentations.map(e=>e.segmentationId).forEach(e=>{vk(e)}),n8.resetState()}function vV(e){n8.removeColorLUT(e)}function vF(e,t){return vG(e).map(e=>(t&&e.type,n9(e.segmentationId))).filter(e=>void 0!==e)}function vG(e){return n8.getState().viewportSegRepresentations[e]}function vB(e,t){return n8.getStackSegmentationImageIdsForViewport(e,t)}function vH(){n8.resetState()}function vW(e,t,n){let i=n7(e,t);i&&i.forEach(t=>{var i;i={segmentationId:t.segmentationId,type:t.type},n8.setSegmentationRepresentationVisibility(e,i,n)})}function v$(e,t){return dh(e,t)}function vz(e,t,n,i){let a=n7(e,t);a&&(a.forEach(e=>{e.segments&&e.segments[n]&&(e.visible||=i,e.segments[n].visible=i)}),dk(t.segmentationId),nq(e,t.segmentationId))}function vX(e,t,n){return!vj(e,t).has(n)}function vj(e,t){let n=n6(e,t);return n?Object.entries(n.segments).reduce((e,[t,n])=>(n.visible||e.add(Number(t)),e),new Set):new Set}function vq(e){return n0.getStyle(e)}
312function vK(e,t,n){n0.setStyle(e,t,n),e.viewportId||e.segmentationId||mL().forEach(e=>{dR(e.segmentationId)}),nq(e.viewportId,e.segmentationId,e.type)}function vY(e,t){n0.setRenderInactiveSegmentations(e,t),dR(e),vF(e).forEach(t=>{nq(e,t.segmentationId)})}function vZ(e){return n0.getRenderInactiveSegmentations(e)}function vJ(){n0.resetToGlobalStyle(),dR()}function vQ(e){return n0.hasCustomStyle(e)}function v0(e,t={}){let n=e.annotationUIDsMap,i=t.segmentIndices?.length?t.segmentIndices:Array.from(n.keys()),a=new Map;return i.forEach(e=>{let t=Array.from(n.get(e)),i=(t=t.filter(e=>!ta(e).parentAnnotationUID)).map(e=>{let t=ta(e),n=t.childAnnotationUIDs?.length,i=n&&t.childAnnotationUIDs.map(e=>{let t=ta(e);return{polyline:t.data.contour.polyline,isClosed:t.data.contour.closed}}),a=n&&i.map(e=>e.isClosed),o=n&&i.map(e=>e.polyline);return{polyline:t.data.contour.polyline,isClosed:t.data.contour.closed,annotationUID:t.annotationUID,referencedImageId:t.metadata.referencedImageId,holesPolyline:o,holesUIDs:t.childAnnotationUIDs,holesClosed:a}});a.set(e,i)}),{segmentIndices:i,annotationUIDsInSegmentMap:a}}function v1(e,t){if(!e||0===e.length)return[];if(!t)return[...e];let n=e[0],i=e[e.length-1];return n[0]===i[0]&&n[1]===i[1]&&n[2]===i[2]?[...e]:[...e,n]}function v2(e,t){let n=fX(e),i=n9(e);if(!i||!i.representationData.Contour)return;let a=i.representationData.Contour,{annotationUIDsMap:o}=a;if(!o||!o.get(t))return;let r=function(e,t){let{annotationUIDsInSegmentMap:n}=v0(e);if(!n.has(t))return void console.warn(`No contour information found for segmentIndex ${t}`);let i=new Map;for(let e of n.get(t)){i.set(e.annotationUID,v1(e.polyline,e.isClosed));for(let t=0;t<e.holesUIDs?.length;t++)i.set(e.holesUIDs[t],v1(e.holesPolyline[t],e.holesClosed[t]))}return i}(a,t);if(!r)return;let l=Array.from(r?.keys()),s=new Map;for(let e of l){let t=fq(n,ta(e));s.set(e,sD(r.get(e),t))}return s}function v5(e,t,n={epsilon:.1}){let i=n9(e);if(!i)return void console.warn(`Invalid segmentation given ${e}`);if(!i.representationData.Contour)return void console.warn(`No contour representation found for segmentation ${e}`);let a=fX(e);if(!a)return void console.warn("No viewport associated to the segmentation found");let o=v2(e,t);if(!o)return void console.warn(`Error extracting contour data from segment ${t} in segmentation ${e}`);for(let e of Array.from(o?.keys())){let t=ta(e);if(!t)continue;let i=or(o.get(e),n.epsilon),r=fq(a,t);r&&(t.data.contour.polyline=i.map(e=>r.canvasToWorld(e)),tp(t))}}function v3(e){e&&(e.parentAnnotationUID&&tr(e),tu(e.annotationUID),sT(e))}function v4(e,t){let n=n9(e);if(!n)return void console.warn(`Invalid segmentation given ${e}`);if(!n.representationData.Contour)return void console.warn(`No contour representation found for segmentation ${e}`);let i=v2(e,t);if(!i)return void console.warn(`Error extracting contour data from segment ${t} in segmentation ${e}`);let a=Array.from(i?.keys()),o=ux(a.map(e=>i.get(e)));o?.length>0&&o.forEach(e=>{e.holeIndexes.forEach(e=>{v3(ta(a[e]))})})}function v8(e,t,n={threshold:3}){let i=n9(e);if(!i)return void console.warn(`Invalid segmentation given ${e}`);if(!i.representationData.Contour)return void console.warn(`No contour representation found for segmentation ${e}`);let a=v2(e,t);if(!a)return void console.warn(`Error extracting contour data from segment ${t} in segmentation ${e}`);let o=Array.from(a?.keys()),r=u2(o.map(e=>a.get(e)),n.threshold);r?.length>0&&r.forEach(e=>{v3(ta(o[e]))})}function v9(e,t,n={knotsRatioPercentage:30}){let i=n9(e);if(!i)return void console.warn(`Invalid segmentation given ${e}`);if(!i.representationData.Contour)return void console.warn(`No contour representation found for segmentation ${e}`);let{annotationUIDsMap:a}=i.representationData.Contour;return a?a.has(t)?void a.get(t).forEach(e=>{let t=ta(e);if(!t)return;let i=t.data.contour.polyline;if(!i||i.length<3)return;let a=re(i,0,i.length-1,n.knotsRatioPercentage);t.data.contour.polyline=a}):void console.warn(`Error extracting contour data from segment ${t} in segmentation ${e}`):void console.warn(`No contours found for segmentation ${e}`)}function v7(e,t,n,i){let a,o=n9(e);if(!o)return void console.warn(`Invalid segmentation given ${e}`);if(!o.representationData.Contour)return void console.warn(`No contour representation found for segmentation ${e}`);let{annotationUIDsMap:r}=o?.representationData.Contour||{};if(!r)return void console.warn(`No annotation map found for segmentation ${e}`);let l=r?.get(t);if(!l)return void console.warn(`Segmentation index ${t} has no annotations in segmentation ${e}`);if(n&&"number"==typeof i){let e=n9(n);if(!e)return void console.warn(`Target segmentation ${n} does not exist.`);if(!e.representationData.Contour)return void console.warn(`No contour representation found for target segmentation ${n}`);(a=e.representationData.Contour.annotationUIDsMap.get(i))||(a=new Set,e.representationData.Contour.annotationUIDsMap.set(i,a))}let s=v2(e,t);if(!s)return void console.warn(`Error extracting contour data from segment ${t} in segmentation ${e}`);let d=Array.from(s?.keys()),h=ux(d.map(e=>s.get(e)));h?.length>
3120&&h.forEach(e=>{e.holeIndexes.forEach(e=>{let t=ta(d[e]);tr(t),n&&"number"==typeof i?a.add(t.annotationUID):l.add(t.annotationUID)})})}async function v6(e){let t=n3(e);return nX(e.segmentationId),t}let{DefaultHistoryMemo:Ie}=lN;function It(e,t,n){let i=n9(e);if(i.representationData.Labelmap){let{representationData:a}=i,o=a.Labelmap;("imageIds"in o||"volumeId"in o)&&("imageIds"in o?o.imageIds.map(e=>nV.Ay.getImage(e)):[nV.Ay.getVolume(o.volumeId)]).forEach(i=>{if(!i)return;let{voxelManager:a}=i,o=n?.recordHistory?mu(e,a):null,r=o?.voxelManager??a;a.forEach(({value:e,index:n})=>{e===t&&r.setAtIndex(n,0)}),o?.commitMemo()&&Ie.push(o)}),aa(e)}else throw Error("Invalid segmentation type, only labelmap is supported right now")}function In(e,t,n={setNextSegmentAsActive:!0}){let i=n9(e);if(i?.representationData.Contour)!function(e,t,n){let i=s7(e);if(!i)return;let a=i.get(t);if(!a)return;let o=Array.from(a),r=[];for(let e of o){let t=ta(e);h$(t)&&r.push(t)}if(0!==r.length)for(let e of r)e.parentAnnotationUID||(n?.recordHistory&&sd.createAnnotationMemo(null,e,{deleting:!0}),v3(e))}(e,t,{recordHistory:n.recordHistory});else if(i?.representationData.Labelmap)It(e,t,{recordHistory:n.recordHistory});else throw Error("Invalid segmentation type");let a=af(e)===t,{segments:o}=i;if(delete o[t],vR([{segmentationId:e,payload:{segments:{...o}}}]),a&&!1!==n.setNextSegmentAsActive){let n=Object.keys(o).map(Number).sort((e,t)=>e-t),i=n.indexOf(t),a=n[i+1],r=n[i-1];void 0!==a?m9(e,a):void 0!==r&&m9(e,r)}s9(e).forEach(n=>{n7(n,{segmentationId:e}).forEach(e=>{delete e.segments[t]})})}function Ii(e){let t=n9(e);return n8.getLabelmapImageIds(t.representationData)}let{transformWorldToIndex:Ia}=i9,Io={[uB.Initialize]:e=>{let{points:t,viewport:n,segmentationImageData:i}=e;if(!t)return;let a=iT.fA(0,0,0);t.forEach(e=>{iT.WQ(a,a,e)}),iT.hs(a,a,1/t.length),e.centerWorld=a,e.centerIJK=Ia(i,a);let{boundsIJK:o,pointInShapeFn:r}=function(e,t,n){let i=t.map(e=>Ia(n,e)),a=ij(i=i.map(e=>e.map(e=>Math.round(e))),n.getDimensions()),[o,r,l,s]=t,d=iT.vt(),h=iT.vt();iT.Re(d,r,o),iT.Re(h,s,o);let c=iT.Bw(d),u=iT.Bw(h);iT.S8(d,d),iT.S8(h,h);let g=iT.vt();iT.$A(g,d,h),iT.S8(g,g);let m=n.getDirection(),p=n.getSpacing(),{viewPlaneNormal:f}=e.getCamera(),v=u3.A({direction:m,spacing:p},f);return{boundsIJK:a,pointInShapeFn:e=>{let t=iT.vt();iT.Re(t,e,o);let n=iT.Om(t,d),i=iT.Om(t,h),a=Math.abs(iT.Om(t,g));return n>=-v&&n<=c+v&&i>=-v&&i<=u+v&&a<=v}}}(n,t,i);e.isInObject=r,e.isInObjectBoundsIJK=o}},Ir=new gj("Rectangle",gX.regionFill,gX.setValue,Io,gX.determineSegmentIndex,gX.preview,gX.labelmapStatistics),Il=new gj("RectangleThreshold",gX.regionFill,gX.setValue,Io,gX.determineSegmentIndex,gX.dynamicThreshold,gX.threshold,gX.preview,gX.islandRemoval,gX.labelmapStatistics),Is=Ir.strategyFunction,Id=Il.strategyFunction,Ih={clearSegmentValue:It,convertStackToVolumeLabelmap:v6,computeVolumeLabelmapFromStack:pl,convertVolumeToStackLabelmap:function({segmentationId:e,options:t}){let n=n9(e);if(!n)return;let{volumeId:i}=n.representationData.Labelmap,a=nV.Ay.getVolume(i);return po({segmentationId:e,viewportId:t.viewportId,imageIds:a.imageIds,options:t})}};var Ic=n(99845);class Iu{constructor(e){this._controlPoints=[],this._invalidated=!1,this._length=0,this._controlPoints=[],this._resolution=e?.resolution??20,this._fixedResolution=e?.fixedResolution??!1,this._closed=e?.closed??!1,this._invalidated=!0}get controlPoints(){return this._controlPoints}get numControlPoints(){return this._controlPoints.length}get resolution(){return this._resolution}set resolution(e){this._fixedResolution||this._resolution===e||(this._resolution=e,this.invalidated=!0)}get fixedResolution(){return this._fixedResolution}get closed(){return this._closed}set closed(e){this._closed!==e&&(this._closed=e,this.invalidated=!0)}get aabb(){return this._update(),this._aabb}get length(){return this._update(),this._length}get invalidated(){return this._invalidated}set invalidated(e){this._invalidated=e}hasTangentPoints(){return!1}addControlPoint(e){this._controlPoints.push([e[0],e[1]]),this.invalidated=!0}
312addControlPoints(e){e.forEach(e=>this.addControlPoint(e))}addControlPointAtU(e){let{start:t,end:n}=this._getLineSegmentAt(e).points,i=Math.floor(e),a=this._curveSegments[i],o=e-Math.floor(i),r=[t[0]+o*(n[0]-t[0]),t[1]+o*(n[1]-t[1])],l=this._controlPoints.indexOf(a.controlPoints.p1)+1;return this._controlPoints.splice(l,0,r),this.invalidated=!0,{index:l,point:r}}deleteControlPointByIndex(e){let t=this._closed?3:1;return!!(e>=0&&e<this._controlPoints.length&&this._controlPoints.length>t)&&(this._controlPoints.splice(e,1),this.invalidated=!0,!0)}clearControlPoints(){this._controlPoints=[],this.invalidated=!0}setControlPoints(e){this.clearControlPoints(),this.addControlPoints(e)}updateControlPoint(e,t){if(e<0||e>=this._controlPoints.length)throw Error("Index out of bounds");this._controlPoints[e]=[...t],this.invalidated=!0}getControlPoints(){return this._controlPoints.map(e=>[e[0],e[1]])}getClosestControlPoint(e){let t=this._controlPoints,n=1/0,i=-1;for(let a=0,o=t.length;a<o;a++){let o=t[a],r=e[0]-o[0],l=e[1]-o[1],s=r*r+l*l;s<n&&(n=s,i=a)}return{index:i,point:-1===i?void 0:[...t[i]],distance:Math.sqrt(n)}}getClosestControlPointWithinDistance(e,t){let n=this.getClosestControlPoint(e);return n.distance<=t?n:void 0}getClosestPoint(e){let t,n,i;this._update();let a=this._getCurveSegmmentsDistanceSquaredInfo(e);if(!a.length)return;a.sort((e,t)=>e.distanceSquared-t.distanceSquared);let o=-1,r=1/0;for(let l=0;l<a.length;l++){let s=a[l];if(s.distanceSquared>r)continue;let{curveSegmentIndex:d,curveSegment:h}=s,{lineSegments:c}=h;for(let a=0;a<c.length;a++){let l=c[a],{point:h,distanceSquared:u}=oa(l.points.start,l.points.end,e);u<r&&(i=l,o=d,n=s.curveSegment,t=h,r=u)}}let l=o+(i.previousLineSegmentsLength+o3(i.points.start,t))/n.length;return{point:t,uValue:l,distance:Math.sqrt(r)}}getClosestPointOnControlPointLines(e){let t,n=[...this._controlPoints];if(this._closed&&n.push(this._controlPoints[0]),!n.length)return;let i=1/0,a=n[0];for(let o=1,r=n.length;o<r;o++){let r=n[o],{point:l,distanceSquared:s}=oa(a,r,e);s<i&&(t=l,i=s),a=r}return{point:t,distance:Math.sqrt(i)}}getPolylinePoints(){return this._update(),this._convertCurveSegmentsToPolyline(this._curveSegments)}getPreviewPolylinePoints(e,t){if(this._closed)return[];this._update();let n=this.getClosestControlPointWithinDistance(e,t),i=n?.index===0,a=this.getPreviewCurveSegments(e,i);return a?.length?this._convertCurveSegmentsToPolyline(a):[]}isPointNearCurve(e,t){this._update();let n=this._getCurveSegmmentsWithinDistance(e,t),i=t*t;for(let t=0;t<n.length;t++){let{lineSegments:a}=n[t];for(let t=0;t<a.length;t++){let n=a[t];if(oo(n.points.start,n.points.end,e)<=i)return!0}}return!1}containsPoint(e){if(this._update(),this._controlPoints.length<3)return!1;let t=[...this._curveSegments],n=this._getClosingCurveSegmentWithStraightLineSegment();n&&t.push(n);let i=0;for(let n=0;n<t.length;n++){let a=t[n],{aabb:o}=a;if(!(e[0]<=o.maxX&&e[1]>=o.minY&&e[1]<o.maxY))continue;let{lineSegments:r}=a;for(let t=0;t<r.length;t++){let n=r[t],{aabb:a}=n;if(e[0]<=a.maxX&&e[1]>=a.minY&&e[1]<a.maxY){let{start:t,end:a}=n.points,o=t[0]===a[0],r=(e[1]-t[1])*(a[0]-t[0])/(a[1]-t[1])+t[0];i+=o||e[0]<=r?1:0}}}return i%2==1}_update(){if(!this._invalidated)return;let e=this.getSplineCurves(),t=0,n=1/0,i=1/0,a=-1/0,o=-1/0;for(let r=0,l=e.length;r<l;r++){let{aabb:l,length:s}=e[r];n=n<=l.minX?n:l.minX,i=i<=l.minY?i:l.minY,a=a>=l.maxX?a:l.maxX,o=o>=l.maxY?o:l.maxY,t+=s}this._curveSegments=e,this._aabb={minX:n,minY:i,maxX:a,maxY:o},this._length=t,this._invalidated=!1}_convertCurveSegmentsToPolyline(e){this._update();let t=[];return e.forEach(({lineSegments:e},n)=>{e.forEach((e,i)=>{0===n&&0===i&&t.push([...e.points.start]),t.push([...e.points.end])})}),t}_getCurveSegmmentsDistanceSquaredInfo(e){this._update();let t=[],{_curveSegments:n}=this;for(let i=0;i<n.length;i++){let a=n[i],o=pg(a.aabb,e);t.push({curveSegmentIndex:i,curveSegment:a,distanceSquared:o})}return t}_getCurveSegmmentsWithinDistance(e,t){this._update();let n=t*t;if(pg(this.aabb,e)>n)return[];let i=this._getCurveSegmmentsDistanceSquaredInfo(e),a=[];for(let e=0,t=i.length;e<t;e++){let{curveSegment:t,distanceSquared:o}=i[e];o<=n&&a.push(t)}return a}_getLineSegmentAt(e){this._update();let t=Math.floor(e),n=this._curveSegments[t],{lineSegments:i}=n,a=n.length*(e-t);for(let e=0;e<i.length;e++){let t=i[e],n=t.previousLineSegmentsLength+t.length;if(a>=t.previousLineSegmentsLength&&a<=n)return t}}_getClosingCurveSegmentWithStraightLineSegment(){if(this.closed)return;let e=this._controlPoints,t=e[0],n=e[e.length-1],i={points:{start:[...t],end:[...n]},aabb:{minX:Math.min(t[0],n[0]),minY:Math.min(t[1],n[1]),maxX:Math.max(t[0],n[0]),maxY:Math.max(t[1],n[1])}};return{aabb:{minX:i.aabb.minX,minY:i.aabb.minY,maxX:i.aabb.maxX,maxY:i.aabb.maxY},lineSegments:[i]}}}class Ig extends Iu{getPreviewCurveSegments(e,t){let n=this._getNumCurveSegments()+1,i=Math.max(0,n-2),a=t?n:n-1,o=this.getTransformMatrix(),r=[...this.controlPoints],l=[];t||r.push(e);for(let e=i;e<=a;e++){let n=this._getCurveSegment(e,o,r,t);l.push(n)}return l}getSplineCurves(){let e=this._getNumCurveSegments(),t=Array(e);if(e<=0)return[];let n=this.getTransformMatrix(),i=0;for(let a=0;a<e;a++){let e=this._getCurveSegment(a,n);e.previousCurveSegmentsLength=i,t[a]=e,i+=e.length}return t}_getNumCurveSegments(e=this.controlPoints,t=this.closed){return t?e.length:Math.max(0,e.length-1)}_getPoint(e,t,n=this.controlPoints,i=this.closed){let a=this._getNumCurveSegments(n,i),o=Math.floor(e),r=o%a,l=e-o;if(r<0||r>=a)if(!this.closed)return;else r=(a+r)%a;let{p0:s,p1:d,p2:h,p3:c}=this._getCurveSegmentPoints(r,n,i),u=l*l,g=Ic.fA(1,l,u,u*l),m=Ic.Z0(Ic.vt(),g,t);return[Ic.Om(m,Ic.fA(s[0],d[0],h[0],c[0])),Ic.Om(m,Ic.fA(s[1],d[1],h[1],c[1]))]}_getCurveSegmentPoints(e,t=this.controlPoints,n=this.closed){let i,a,o=this._getNumCurveSegments(t,n),r=e-1,l=n?(e+1)%o:e+1,s=l+1,d=t[e],h=t[l];return i=r>=0?t[r]:n?t[t.length-1]:p_(h,d),a=s<t.length?t[s]:n?t[0]:p_(d,h),{p0:i,p1:d,p2:h,p3:a}}_getLineSegments(e,t,n=this.controlPoints,i=this.closed){let a,o=this._getNumCurveSegments(n,i),r=this.resolution+1,l=1/r,s=e+1;i||e!==o-1||(s-=1e-8);let d=[],h=0;for(let o=0,c=e;o<=r;o++,c+=l){c=c>s?s:c;let e=this._getPoint(c,t,n,i);if(!o){a=e;continue}let r=Math.sqrt((e[0]-a[0])**2+(e[1]-a[1])**2),l={minX:a[0]<=e[0]?a[0]:e[0],maxX:a[0]>=e[0]?a[0]:e[0],minY:a[1]<=e[1]?a[1]:e[1],maxY:a[1]>=e[1]?a[1]:e[1]};d.push({points:{start:a,end:e},aabb:l,length:r,previousLineSegmentsLength:h}),a=e,h+=r}return d}
312_getCurveSegment(e,t=this.getTransformMatrix(),n=this.controlPoints,i=this.closed){let{p0:a,p1:o,p2:r,p3:l}=this._getCurveSegmentPoints(e,n,i),s=this._getLineSegments(e,t,n,i),d=0,h=1/0,c=1/0,u=-1/0,g=-1/0;return s.forEach(({aabb:e,length:t})=>{h=Math.min(h,e.minX),c=Math.min(c,e.minY),u=Math.max(u,e.maxX),g=Math.max(g,e.maxY),d+=t}),{controlPoints:{p0:a,p1:o,p2:r,p3:l},aabb:{minX:h,minY:c,maxX:u,maxY:g},length:d,previousCurveSegmentsLength:0,lineSegments:s}}}let Im=c2.multiplyScalar(c2.create(),c2.fromValues(1,4,1,0,-3,0,3,0,3,-6,3,0,-1,3,-3,1),1/6);class Ip extends Ig{getTransformMatrix(){return Im}}class If extends Ig{constructor(e){super(e),this._scale=e?.scale??.5,this._fixedScale=e?.fixedScale??!1}get scale(){return this._scale}set scale(e){this._fixedScale||this._scale===e||(this._scale=e,this.invalidated=!0)}get fixedScale(){return this._fixedScale}getTransformMatrix(){let{scale:e}=this,t=2*e;return[0,1,0,0,-e,0,e,0,t,e-3,3-t,-e,-e,2-e,e-2,e]}}class Iv extends If{constructor(){super({scale:.5,fixedScale:!0})}}class II extends If{constructor(){super({resolution:0,fixedResolution:!0,scale:0,fixedScale:!0})}}class IC extends Iu{getSplineCurves(){return[]}getLineSegments(){return[]}getPreviewCurveSegments(e,t){return[]}}let I_=[1,0,0,-2,2,0,1,-2,1];class IE extends IC{hasTangentPoints(){return!0}getTransformMatrix(){return I_}}var Iw=n(47296);class IA extends lH{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{limitToViewport:!1,ignoreX:!1,ignoreY:!1,ignoreZ:!1}}){super(e,t)}touchDragCallback(e){this._dragCallback(e)}mouseDragCallback(e){this._dragCallback(e)}_checkImageInViewport(e,t){let n,{canvas:i}=e,a=window.devicePixelRatio,o=i.width/a,r=i.height/a,l=e.getDefaultActor(),s=e.getRenderer();n=l&&Iw.e(l)?l.actor.getMapper().getInputData().getBounds():s.computeVisiblePropBounds();let[d,h]=e.worldToCanvas([n[0],n[2],n[4]]),[c,u]=e.worldToCanvas([n[1],n[3],n[5]]);if(1>=e.getZoom()){if(d+t[0]<0&&t[0]<0||c+t[0]>o&&t[0]>0||h+t[1]<0&&t[1]<0||u+t[1]>r&&t[1]>0)return!1}else if(d+t[0]>0&&t[0]>0||c+t[0]<o&&t[0]<0||h+t[1]>0&&t[1]>0||u+t[1]<r&&t[1]<0)return!1;return!0}_dragCallback(e){let{element:t,deltaPoints:n}=e.detail,i=(0,ej.Ay)(t),a=n.world,o=n.canvas;if(0===a[0]&&0===a[1]&&0===a[2])return;this.configuration.ignoreX&&(a[0]=0),this.configuration.ignoreY&&(a[1]=0),this.configuration.ignoreZ&&(a[2]=0);let r=i.viewport,{focalPoint:l,position:s}=r.getCamera();if(this.configuration.limitToViewport&&!this._checkImageInViewport(r,o))return;let d=[s[0]-a[0],s[1]-a[1],s[2]-a[2]],h=[l[0]-a[0],l[1]-a[1],l[2]-a[2]];r.setCamera({focalPoint:h,position:d}),r.render()}}IA.toolName="Pan";let IS=IA;class Iy extends mP{static{this.toolName="SegmentBidirectional"}constructor(e={}){super(e),this.renderAnnotation=(e,t)=>{let n=!0,{viewport:i}=e,{element:a}=i,o=i.id,r=ti(this.getToolName(),a);if(!r?.length||(r=this.filterInteractableAnnotationsForElement(a,r),!r?.length))return n;let l=this.getTargetId(i),s=i.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let a=0;a<r.length;a++){let h,c,u=r[a],{annotationUID:g,data:m}=u,{points:p,activeHandleIndex:f}=m.handles,v=p.map(e=>i.worldToCanvas(e));d.annotationUID=g;let{segmentIndex:I,segmentationId:C}=u.metadata,{lineWidth:_,lineDash:E,shadow:w}=this.getAnnotationStyle({annotation:u,styleSpecifier:d}),A=ds(o,C,I),S=`rgb(${A.slice(0,3).join(",")})`;if(m.cachedStats[l]&&null!=m.cachedStats[l].unit?u.invalidated&&this._throttledCalculateCachedStats(u,s,e):(m.cachedStats[l]={length:null,width:null,unit:null},this._calculateCachedStats(u,s,e)),!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(g))continue;iN(g)||this.editData||null===f||(h=[v[f]]),h&&li(t,g,"0",h,{color:S});let y=`${g}-line-1`,b=`${g}-line-2`;l_(t,g,"0",v[0],v[1],{color:S,lineWidth:_,lineDash:E,shadow:w},y),l_(t,g,"1",v[2],v[3],{color:S,lineWidth:_,lineDash:E,shadow:w},b),n=!0;let T=this.getLinkedTextBoxStyle(d,u);if(!T.visibility){m.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}T.color=S;let M=this.configuration.getTextLines(m,l);if(!M||0===M.length)continue;m.handles.textBox.hasMoved||(c=lS(v),m.handles.textBox.worldPosition=i.canvasToWorld(c));let{x:D,y:O,width:x,height:P}=lA(t,g,"1",M,i.worldToCanvas(m.handles.textBox.worldPosition),v,{},T);m.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([D,O]),topRight:i.canvasToWorld([D+x,O]),bottomLeft:i.canvasToWorld([D,O+P]),bottomRight:i.canvasToWorld([D+x,O+P])}}return n}}addNewAnnotation(e){let{currentPoints:t,element:n}
312=e.detail,i=t.world,{viewport:a}=(0,ej.Ay)(n);this.isDrawing=!0;let{viewPlaneNormal:o,viewUp:r}=a.getCamera(),l=this.getReferencedImageId(a,i,o,r),s=a.getFrameOfReferenceUID(),d={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...o],viewUp:[...r],FrameOfReferenceUID:s,referencedImageId:l,...a.getViewReference({points:[i]})},data:{handles:{points:[[...i],[...i],[...i],[...i]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}}};th(d,n);let h=ox(n,this.getToolName());return this.editData={annotation:d,viewportIdsToRender:h,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(n),o2(n),e.preventDefault(),oX(h),d}static{this.hydrate=(e,t,n)=>{let i=(0,ej.yj)(e);if(!i)return;let{viewport:a}=i,o=to().filter(e=>"SegmentBidirectional"===e.metadata.toolName).find(e=>{let{metadata:t}=e;return t.segmentIndex===n?.segmentIndex&&t.segmentationId===n?.segmentationId});o&&tu(o.annotationUID);let{FrameOfReferenceUID:r,referencedImageId:l,viewPlaneNormal:s,instance:d}=this.hydrateBase(Iy,i,t[0],n),[h,c]=t,[u,g]=h,[m,p]=c,{toolInstance:f,...v}=n||{},I={annotationUID:n?.annotationUID||eX.A(),data:{handles:{points:[u,g,m,p],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{segmentIndex:n?.segmentIndex,segmentationId:n?.segmentationId,toolName:d.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:r,referencedImageId:l,...v}};return th(I,a.element),oX([a.id]),I}}}let Ib=Iy;var IT=n(74582);class IM extends lH{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{rotateIncrementDegrees:2,rotateSampleDistanceFactor:2}}){super(e,t),this._resizeObservers=new Map,this._hasResolutionChanged=!1,this.preMouseDownCallback=e=>{let{element:t}=e.detail,{viewport:n}=(0,ej.Ay)(t),i=n.getDefaultActor().actor.getMapper();if(!("getSampleDistance"in i||"getCurrentSampleDistance"in i))return!0;let a=i.getSampleDistance();if(!this._hasResolutionChanged){let{rotateSampleDistanceFactor:e}=this.configuration;i.setSampleDistance(a*e),this._hasResolutionChanged=!0,null!==this.cleanUp&&document.removeEventListener("mouseup",this.cleanUp),this.cleanUp=()=>{i.setSampleDistance(a),n.render(),this._hasResolutionChanged=!1},document.addEventListener("mouseup",this.cleanUp,{once:!0})}return!0},this._getViewportsInfo=()=>s3(this.toolGroupId).viewportsInfo,this.onSetToolActive=()=>{let e=()=>{this._getViewportsInfo().forEach(({viewportId:e,renderingEngineId:t})=>{if(!this._resizeObservers.has(e)){let{viewport:n}=(0,ej.b1)(e,t)||{viewport:null};if(!n)return;let{element:i}=n,a=new ResizeObserver(()=>{let n=(0,ej.b1)(e,t);if(!n)return;let{viewport:i}=n,a=i.getViewPresentation();i.resetCamera(),i.setViewPresentation(a),i.render()});a.observe(i),this._resizeObservers.set(e,a)}})};e(),this._viewportAddedListener=t=>{t.detail.toolGroupId===this.toolGroupId&&e()},ez.A.addEventListener(eK.TOOLGROUP_VIEWPORT_ADDED,this._viewportAddedListener)},this.onSetToolDisabled=()=>{this._resizeObservers.forEach((e,t)=>{e.disconnect(),this._resizeObservers.delete(t)}),this._viewportAddedListener&&(ez.A.removeEventListener(eK.TOOLGROUP_VIEWPORT_ADDED,this._viewportAddedListener),this._viewportAddedListener=null)},this.rotateCamera=(e,t,n,i)=>{let a=e.getVtkActiveCamera(),o=a.getViewUp(),r=a.getFocalPoint(),l=a.getPosition(),s=[0,0,0],d=[0,0,0],h=[0,0,0],c=c2.identity(new Float32Array(16));c2.translate(c,c,t),c2.rotate(c,c,i,n),c2.translate(c,c,[-t[0],-t[1],-t[2]]),iT.Z0(s,l,c),iT.Z0(d,r,c),c2.identity(c),c2.rotate(c,c,i,n),iT.Z0(h,o,c),e.setCamera({position:s,viewUp:h,focalPoint:d})},this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){let{element:t,currentPoints:n,lastPoints:i}=e.detail,a=n.canvas,o=i.canvas,{rotateIncrementDegrees:r}=this.configuration,{viewport:l}=(0,ej.Ay)(t),s=l.getCamera(),d=t.clientWidth,h=t.clientHeight,c=[a[0]/d,a[1]/h],u=[o[0]/d,o[1]/h],g=l.canvasToWorld([.5*d,.5*h]),m=(1+Math.abs(.5))**2,p=[u[0],0,0],f=[c[0],0,0],v=p[0]
312**2,I=f[0]**2,C=v>m?0:Math.sqrt(m-v),_=I>m?0:Math.sqrt(m-I),E=[p[0],0,C];IT.Ay.normalize(E);let w=[f[0],0,_];IT.Ay.normalize(w);let A=IT.Ay.dot(E,w);if(Math.abs(A)>1e-4){let e=-2*Math.acos(IT.Ay.clampValue(A,-1,1))*Math.sign(c[0]-u[0])*r,t=s.viewUp,n=s.viewPlaneNormal,i=[0,0,0],a=[0,0,0];IT.Ay.cross(t,n,i),IT.Ay.normalize(i),IT.Ay.cross(n,i,a),IT.Ay.normalize(a),IT.Ay.normalize(t),this.rotateCamera(l,g,a,e);let o=(u[1]-c[1])*r;this.rotateCamera(l,g,i,o),l.render()}}}IM.toolName="TrackballRotate";let ID=IM;var IO=n(14288),Ix=n(25987);let IP={radius:.5,latLongTessellation:!1,thetaResolution:8,startTheta:0,endTheta:360,phiResolution:8,startPhi:0,endPhi:180,center:[0,0,0],pointType:"Float64Array"};var IL={newInstance:Ix.m.newInstance(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,IP,n),Ix.m.obj(e,t),Ix.m.setGet(e,t,["radius","latLongTessellation","thetaResolution","startTheta","endTheta","phiResolution","startPhi","endPhi"]),Ix.m.setGetArray(e,t,["center"],3),Ix.m.algo(e,t,0,1),t.classHierarchy.push("vtkSphereSource"),e.requestData=(e,n)=>{let i=n[0],a=i?i.getPoints().getDataType():t.pointType;i=i?.initialize()||io.Ay.newInstance();let o=0,{thetaResolution:r}=t,l=t.startTheta<t.endTheta?t.startTheta:t.endTheta;l*=Math.PI/180;let s=t.endTheta>t.startTheta?t.endTheta:t.startTheta;s*=Math.PI/180;let d=t.startPhi<t.endPhi?t.startPhi:t.endPhi;d*=Math.PI/180;let h=t.endPhi>t.startPhi?t.endPhi:t.startPhi;h*=Math.PI/180,Math.abs(l-s)<2*Math.PI&&++r;let c=(s-l)/t.thetaResolution,u=+(t.startPhi<=0),g=t.phiResolution+(t.endPhi>=180?-1:0),m=t.phiResolution*r+2,p=2*t.phiResolution*t.thetaResolution,f=0,v=Ix.m.newTypedArray(a,3*m),I=new Float32Array(3*m),C=0,_=new Uint32Array(5*p);t.startPhi<=0&&(v[3*f+0]=t.center[0],v[3*f+1]=t.center[1],v[3*f+2]=t.center[2]+t.radius,I[3*f+0]=0,I[3*f+1]=0,I[3*f+2]=1,f++,o++),t.endPhi>=180&&(v[3*f+0]=t.center[0],v[3*f+1]=t.center[1],v[3*f+2]=t.center[2]-t.radius,I[3*f+0]=0,I[3*f+1]=0,I[3*f+2]=-1,f++,o++);let E=t.phiResolution-o,w=(h-d)/(t.phiResolution-1);for(let e=0;e<r;e++){let n=l+e*c;for(let e=u;e<g;e++){let i=d+e*w,a=t.radius*Math.sin(i);I[3*f+0]=a*Math.cos(n),I[3*f+1]=a*Math.sin(n),I[3*f+2]=t.radius*Math.cos(i),v[3*f+0]=I[3*f+0]+t.center[0],v[3*f+1]=I[3*f+1]+t.center[1],v[3*f+2]=I[3*f+2]+t.center[2];let o=Math.sqrt(I[3*f+0]*I[3*f+0]+I[3*f+1]*I[3*f+1]+I[3*f+2]*I[3*f+2]);o=0===o?1:o,I[3*f+0]/=o,I[3*f+1]/=o,I[3*f+2]/=o,f++}}let A=E*r;if(Math.abs(l-s)<2*Math.PI&&--r,t.startPhi<=0)for(let e=0;e<r;e++)_[C++]=3,_[C++]=E*e+o,_[C++]=E*(e+1)%A+o,_[C++]=0;if(t.endPhi>=180){let e=E-1+o;for(let t=0;t<r;t++)_[C++]=3,_[C++]=E*t+e,_[C++]=o-1,_[C++]=E*(t+1)%A+e}for(let e=0;e<r;e++)for(let n=0;n<E-1;n++){let i=E*e+n+o,a=i+1,r=(E*(e+1)+n)%A+o+1;t.latLongTessellation?(_[C++]=4,_[C++]=i,_[C++]=a):(_[C++]=3,_[C++]=i,_[C++]=a,_[C++]=r,_[C++]=3,_[C++]=i),_[C++]=r,_[C++]=r-1}v=v.subarray(0,3*f),i.getPoints().setData(v,3),I=I.subarray(0,3*f);let S=nR.Ay.newInstance({name:"Normals",values:I,numberOfComponents:3});i.getPointData().setNormals(S),_=_.subarray(0,C),i.getPolys().setData(_,1),n[0]=i}},"vtkSphereSource")},IN=n(54204),IR=n(11832);let Ik={XMIN:0,XMAX:1,YMIN:2,YMAX:3,ZMIN:4,ZMAX:5},IU={XMIN:0,XMAX:1,YMIN:2,YMAX:3,ZMIN:4,ZMAX:5,XMIN_YMIN_ZMIN:6,XMIN_YMIN_ZMAX:7,XMIN_YMAX_ZMIN:8,XMIN_YMAX_ZMAX:9,XMAX_YMIN_ZMIN:10,XMAX_YMIN_ZMAX:11,XMAX_YMAX_ZMIN:12,XMAX_YMAX_ZMAX:13};class IV extends lH{constructor(e={},t={configuration:{showCornerSpheres:!0,showHandles:!0,showClippingPlanes:!0,mobile:{enabled:!1,opacity:.8},initialCropFactor:.08,sphereColors:{SAGITTAL:[1,1,0],CORONAL:[0,1,0],AXIAL:[1,0,0],CORNERS:[0,0,1]},sphereRadius:8,grabSpherePixelDistance:20,rotateIncrementDegrees:2,rotateSampleDistanceFactor:2}}){super(e,t),this._resizeObservers=new Map,this._hasResolutionChanged=!1,this.originalClippingPlanes=[],this.draggingSphereIndex=null,this.toolCenter=[0,0,0],this.cornerDragOffset=null,this.faceDragOffset=null,this.sphereStates=[],this.edgeLines={},this.onSetToolConfiguration=()=>{console.debug("Setting tool settoolconfiguration : volumeCropping")},this.onSetToolEnabled=()=>{console.debug("Setting tool enabled: volumeCropping")},this.onCameraModified=e=>{let{element:t}=e.currentTarget?{element:e.currentTarget}:e.detail,n=(0,ej.Ay)(t);this._updateClippingPlanes(n.viewport),n.viewport.render()},this.preMouseDownCallback=e=>{let{element:t}=e.detail,{viewport:n}=(0,ej.Ay)(t),i=n.getDefaultActor().actor.getMapper(),a=[e.detail.currentPoints.canvas[0],e.detail.currentPoints.canvas[1]];this.draggingSphereIndex=null,this.cornerDragOffset=null,this.faceDragOffset=null;for(let e=0;e<this.sphereStates.length;++e){let i=n.worldToCanvas(this.sphereStates[e].point);if(Math.sqrt(Math.pow(a[0]-i[0],2)+Math.pow(a[1]-i[1],2))<this.configuration.grabSpherePixelDistance){this.draggingSphereIndex=e,t.style.cursor="grabbing";let i=this.sphereStates[e],o=n.canvasToWorld(a);if(i.isCorner)this.cornerDragOffset=[i.point[0]-o[0],i.point[1]-o[1],i.point[2]-o[2]],this.faceDragOffset=null;else{let e={x:0,y:1,z:2}[i.axis];this.faceDragOffset=i.point[e]-o[e],this.cornerDragOffset=null}return!0}}if(!("getSampleDistance"in i||"getCurrentSampleDistance"in i))return!0;let o=i.getSampleDistance();if(!this._hasResolutionChanged){let{rotateSampleDistanceFactor:t}=this.configuration;i.setSampleDistance(o*t),this._hasResolutionChanged=!0,null!==this.cleanUp&&document.removeEventListener("mouseup",this.cleanUp),this.cleanUp=()=>
312{if(i.setSampleDistance(o),e.target.style.cursor="",null!==this.draggingSphereIndex){let e=this.sphereStates[this.draggingSphereIndex],[t]=this._getViewportsInfo(),n=(0,nG.lD)(t.renderingEngineId).getViewport(t.viewportId);e.isCorner&&(this._updateCornerSpheres(),this._updateFaceSpheresFromCorners(),this._updateClippingPlanesFromFaceSpheres(n))}this.draggingSphereIndex=null,this.cornerDragOffset=null,this.faceDragOffset=null,n.render(),this._hasResolutionChanged=!1},document.addEventListener("mouseup",this.cleanUp,{once:!0})}return!0},this._onMouseMoveSphere=e=>{if(null===this.draggingSphereIndex)return!1;let t=this.sphereStates[this.draggingSphereIndex];if(!t)return!1;let{viewport:n,world:i}=this._getViewportAndWorldCoords(e);if(!n||!i)return!1;if(t.isCorner){let e=this._calculateNewCornerPosition(i);this._updateSpherePosition(t,e);let n=this._parseCornerKey(t.uid);this._updateRelatedCorners(t,e,n),this._updateFaceSpheresFromCorners(),this._updateCornerSpheres()}else{let e={x:0,y:1,z:2}[t.axis],n=i[e];null!==this.faceDragOffset&&(n+=this.faceDragOffset),t.point[e]=n,t.sphereSource.setCenter(...t.point),t.sphereSource.modified(),this._updateCornerSpheresFromFaces(),this._updateFaceSpheresFromCorners(),this._updateCornerSpheres()}return this._updateClippingPlanesFromFaceSpheres(n),n.render(),this._triggerToolChangedEvent(t),!0},this._onControlToolChange=e=>{let t=this._getViewport();if(e.detail.toolCenter){if(e.detail.seriesInstanceUID!==this.seriesInstanceUID)return;let n="min"===e.detail.handleType,i=n?e.detail.toolCenterMin:e.detail.toolCenterMax,a=n?[[1,0,0],[0,1,0],[0,0,1]]:[[-1,0,0],[0,-1,0],[0,0,-1]],o=n?[Ik.XMIN,Ik.YMIN,Ik.ZMIN]:[Ik.XMAX,Ik.YMAX,Ik.ZMAX],r=n?[IU.XMIN,IU.YMIN,IU.ZMIN]:[IU.XMAX,IU.YMAX,IU.ZMAX],l=["x","y","z"],s=[IR.A.SAGITTAL,IR.A.CORONAL,IR.A.AXIAL];for(let n=0;n<3;++n){let d=[0,0,0];d[n]=i[n];let h=IN.Ay.newInstance({origin:d,normal:a[n]});this.originalClippingPlanes[o[n]].origin=h.getOrigin(),this.sphereStates[r[n]].point[n]=h.getOrigin()[n],this.sphereStates[r[n]].sphereSource.setCenter(...this.sphereStates[r[n]].point),this.sphereStates[r[n]].sphereSource.modified();let c=(this.sphereStates.find((e,t)=>e.axis===l[n]&&t!==r[n]).point[n]+h.getOrigin()[n])/2;this.sphereStates.forEach(t=>{t.isCorner||t.axis===l[n]||e.detail.viewportOrientation.includes(s[n])||(t.point[n]=c,t.sphereSource.setCenter(t.point),t.sphereActor.getProperty().setColor(t.color),t.sphereSource.modified())});let u=t.getDefaultActor()?.actor;if(u){let e=u.getMapper().getClippingPlanes();e&&e[o[n]].setOrigin(h.getOrigin())}}this._updateCornerSpheres(),t.render()}else(0,eq.A)(ez.A,eK.VOLUMECROPPING_TOOL_CHANGED,{originalClippingPlanes:this.originalClippingPlanes,viewportId:t.id,renderingEngineId:t.renderingEngineId,seriesInstanceUID:this.seriesInstanceUID})},this._getViewportsInfo=()=>s3(this.toolGroupId).viewportsInfo,this._initialize3DViewports=e=>{if(!e||!e.length||!e[0])return void console.warn("VolumeCroppingTool: No viewportsInfo available for initialization of volumecroppingtool.");let t=this._getViewport(),n=t.getActors();if(!n||0===n.length)return void console.warn("VolumeCroppingTool: No volume actors found in the viewport.");let i=n[0].actor.getMapper().getInputData();if(!i)return void console.warn("VolumeCroppingTool: No image data found for volume actor.");this.seriesInstanceUID=i.seriesInstanceUID||"unknown";let a=i.getBounds(),o=this.configuration.initialCropFactor||.1,r=a[1]-a[0],l=a[3]-a[2],s=a[5]-a[4],d=a[0]+o*r,h=a[1]-o*r,c=a[2]+o*l,u=a[3]-o*l,g=a[4]+o*s,m=a[5]-o*s,p=[],f=IN.Ay.newInstance({origin:[d,0,0],normal:[1,0,0]}),v=IN.Ay.newInstance({origin:[h,0,0],normal:[-1,0,0]}),I=IN.Ay.newInstance({origin:[0,c,0],normal:[0,1,0]}),C=IN.Ay.newInstance({origin:[0,u,0],normal:[0,-1,0]}),_=IN.Ay.newInstance({origin:[0,0,g],normal:[0,0,1]}),E=IN.Ay.newInstance({origin:[0,0,m],normal:[0,0,-1]}),w=t.getDefaultActor().actor.getMapper();p.push(f),p.push(v),p.push(I),p.push(C),p.push(_),p.push(E);let A=p.map(e=>({origin:[...e.getOrigin()],normal:[...e.getNormal()]}));this.originalClippingPlanes=A;let S=[d,(u+c)/2,(m+g)/2],y=[h,(u+c)/2,(m+g)/2],b=[(h+d)/2,c,(m+g)/2],T=[(h+d)/2,u,(m+g)/2],M=[(h+d)/2,(u+c)/2,g],D=[(h+d)/2,(u+c)/2,m],O=this._calculateAdaptiveSphereRadius(Math.sqrt(r*r+l*l+s*s));this._addSphere(t,S,"x","min",null,O),this._addSphere(t,y,"x","max",null,O),this._addSphere(t,b,"y","min",null,O),this._addSphere(t,T,"y","max",null,O),this._addSphere(t,M,"z","min",null,O),this._addSphere(t,D,"z","max",null,O);let x=[[d,c,g],[d,c,m],[d,u,g],[d,u,m],[h,c,g],[h,c,m],[h,u,g],[h,u,m]],P=["XMIN_YMIN_ZMIN","X
312MIN_YMIN_ZMAX","XMIN_YMAX_ZMIN","XMIN_YMAX_ZMAX","XMAX_YMIN_ZMIN","XMAX_YMIN_ZMAX","XMAX_YMAX_ZMIN","XMAX_YMAX_ZMAX"];for(let e=0;e<x.length;e++)this._addSphere(t,x[e],"corner",null,P[e],O);[["XMIN_YMIN_ZMIN","XMAX_YMIN_ZMIN"],["XMIN_YMIN_ZMAX","XMAX_YMIN_ZMAX"],["XMIN_YMAX_ZMIN","XMAX_YMAX_ZMIN"],["XMIN_YMAX_ZMAX","XMAX_YMAX_ZMAX"],["XMIN_YMIN_ZMIN","XMIN_YMAX_ZMIN"],["XMIN_YMIN_ZMAX","XMIN_YMAX_ZMAX"],["XMAX_YMIN_ZMIN","XMAX_YMAX_ZMIN"],["XMAX_YMIN_ZMAX","XMAX_YMAX_ZMAX"],["XMIN_YMIN_ZMIN","XMIN_YMIN_ZMAX"],["XMIN_YMAX_ZMIN","XMIN_YMAX_ZMAX"],["XMAX_YMIN_ZMIN","XMAX_YMIN_ZMAX"],["XMAX_YMAX_ZMIN","XMAX_YMAX_ZMAX"]].forEach(([e,n],i)=>{let a=this.sphereStates.find(t=>t.uid===`corner_${e}`),o=this.sphereStates.find(e=>e.uid===`corner_${n}`);if(a&&o){let i=`edge_${e}_${n}`,{actor:r,source:l}=this._addLine3DBetweenPoints(t,a.point,o.point,[.7,.7,.7],i);this.edgeLines[i]={actor:r,source:l,key1:e,key2:n}}}),w.addClippingPlane(f),w.addClippingPlane(v),w.addClippingPlane(I),w.addClippingPlane(C),w.addClippingPlane(_),w.addClippingPlane(E),ez.A.addEventListener(eK.VOLUMECROPPINGCONTROL_TOOL_CHANGED,e=>{this._onControlToolChange(e)}),t.render()},this._getViewportAndWorldCoords=e=>{let t=this._getViewport(),n=e.detail.currentPoints.canvas[0],i=e.detail.currentPoints.canvas[1],a=t.canvasToWorld([n,i]);return{viewport:t,world:a}},this._getViewport=()=>{let[e]=this._getViewportsInfo();return(0,nG.lD)(e.renderingEngineId).getViewport(e.viewportId)},this._handleCornerSphereMovement=(e,t,n)=>{let i=this._calculateNewCornerPosition(t);this._updateSpherePosition(e,i);let a=this._parseCornerKey(e.uid);this._updateRelatedCorners(e,i,a),this._updateAfterCornerMovement(n)},this._handleFaceSphereMovement=(e,t,n)=>{let i={x:0,y:1,z:2}[e.axis],a=t[i];null!==this.faceDragOffset&&(a+=this.faceDragOffset),e.point[i]=a,e.sphereSource.setCenter(...e.point),e.sphereSource.modified(),this._updateAfterFaceMovement(n)},this._calculateNewCornerPosition=e=>{let t=[e[0],e[1],e[2]];return this.cornerDragOffset&&(t=[e[0]+this.cornerDragOffset[0],e[1]+this.cornerDragOffset[1],e[2]+this.cornerDragOffset[2]]),t},this._parseCornerKey=e=>{let t=e.replace("corner_","");return{isXMin:t.includes("XMIN"),isXMax:t.includes("XMAX"),isYMin:t.includes("YMIN"),isYMax:t.includes("YMAX"),isZMin:t.includes("ZMIN"),isZMax:t.includes("ZMAX")}},this._updateSpherePosition=(e,t)=>{e.point=t,e.sphereSource.setCenter(...t),e.sphereSource.modified()},this._updateRelatedCorners=(e,t,n)=>{this.sphereStates.forEach(i=>{if(!i.isCorner||i===e)return;let a=i.uid.replace("corner_","");this._shouldUpdateCorner(a,n)&&this._updateCornerCoordinates(i,t,a,n)})},this._shouldUpdateCorner=(e,t)=>t.isXMin&&e.includes("XMIN")||t.isXMax&&e.includes("XMAX")||t.isYMin&&e.includes("YMIN")||t.isYMax&&e.includes("YMAX")||t.isZMin&&e.includes("ZMIN")||t.isZMax&&e.includes("ZMAX"),this._updateCornerCoordinates=(e,t,n,i)=>{(i.isXMin&&n.includes("XMIN")||i.isXMax&&n.includes("XMAX"))&&(e.point[0]=t[0]),(i.isYMin&&n.includes("YMIN")||i.isYMax&&n.includes("YMAX"))&&(e.point[1]=t[1]),(i.isZMin&&n.includes("ZMIN")||i.isZMax&&n.includes("ZMAX"))&&(e.point[2]=t[2]),e.sphereSource.setCenter(...e.point),e.sphereSource.modified()},this._updateAfterCornerMovement=e=>{this._updateFaceSpheresFromCorners(),this._updateCornerSpheres(),this._updateClippingPlanesFromFaceSpheres(e)},this._updateAfterFaceMovement=e=>{this._updateCornerSpheresFromFaces(),this._updateClippingPlanesFromFaceSpheres(e)},this._triggerToolChangedEvent=e=>{(0,eq.A)(ez.A,eK.VOLUMECROPPING_TOOL_CHANGED,{toolCenter:e.point,axis:e.isCorner?"corner":e.axis,draggingSphereIndex:this.draggingSphereIndex,seriesInstanceUID:this.seriesInstanceUID})},this._onNewVolume=()=>{let e=this._getViewportsInfo();this.originalClippingPlanes=[],this.sphereStates=[],this.edgeLines={},this._initialize3DViewports(e)},this._rotateCamera=(e,t,n,i)=>{let a=e.getVtkActiveCamera(),o=a.getViewUp(),r=a.getFocalPoint(),l=a.getPosition(),s=[0,0,0],d=[0,0,0],h=[0,0,0],c=c2.identity(new Float32Array(16));c2.translate(c,c,t),c2.rotate(c,c,i,n),c2.translate(c,c,[-t[0],-t[1],-t[2]]),iT.Z0(s,l,c),iT.Z0(d,r,c),c2.identity(c),c2.rotate(c,c,i,n),iT.Z0(h,o,
312c),e.setCamera({position:s,viewUp:h,focalPoint:d})},this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}onSetToolActive(){if(this.sphereStates&&this.sphereStates.length>0)this.configuration.showHandles?(this.setHandlesVisible(!1),this.setClippingPlanesVisible(!1)):(this.setHandlesVisible(!0),this.setClippingPlanesVisible(!0));else{let e=this._getViewportsInfo(),t=()=>{e.forEach(({viewportId:e,renderingEngineId:t})=>{if(!this._resizeObservers.has(e)){let{viewport:n}=(0,ej.b1)(e,t)||{viewport:null};if(!n)return;let{element:i}=n,a=new ResizeObserver(()=>{let n=(0,ej.b1)(e,t);if(!n)return;let{viewport:i}=n,a=i.getViewPresentation();i.resetCamera(),i.setViewPresentation(a),i.render()});a.observe(i),this._resizeObservers.set(e,a)}})};t(),this._viewportAddedListener=e=>{e.detail.toolGroupId===this.toolGroupId&&t()},ez.A.addEventListener(eK.TOOLGROUP_VIEWPORT_ADDED,this._viewportAddedListener),this._unsubscribeToViewportNewVolumeSet(e),this._subscribeToViewportNewVolumeSet(e),this._initialize3DViewports(e),this.sphereStates&&this.sphereStates.length>0?this.setHandlesVisible(!0):(this.originalClippingPlanes=[],this._initialize3DViewports(e))}}onSetToolDisabled(){this._resizeObservers.forEach((e,t)=>{e.disconnect(),this._resizeObservers.delete(t)}),this._viewportAddedListener&&(ez.A.removeEventListener(eK.TOOLGROUP_VIEWPORT_ADDED,this._viewportAddedListener),this._viewportAddedListener=null);let e=this._getViewportsInfo();this._unsubscribeToViewportNewVolumeSet(e)}setHandlesVisible(e){this.configuration.showHandles=e,e&&(this.sphereStates[IU.XMIN].point[0]=this.originalClippingPlanes[Ik.XMIN].origin[0],this.sphereStates[IU.XMAX].point[0]=this.originalClippingPlanes[Ik.XMAX].origin[0],this.sphereStates[IU.YMIN].point[1]=this.originalClippingPlanes[Ik.YMIN].origin[1],this.sphereStates[IU.YMAX].point[1]=this.originalClippingPlanes[Ik.YMAX].origin[1],this.sphereStates[IU.ZMIN].point[2]=this.originalClippingPlanes[Ik.ZMIN].origin[2],this.sphereStates[IU.ZMAX].point[2]=this.originalClippingPlanes[Ik.ZMAX].origin[2],[IU.XMIN,IU.XMAX,IU.YMIN,IU.YMAX,IU.ZMIN,IU.ZMAX].forEach(e=>{let t=this.sphereStates[e];t.sphereSource.setCenter(...t.point),t.sphereSource.modified()}),this._updateCornerSpheres()),this._updateHandlesVisibility();let[t]=this._getViewportsInfo();(0,nG.lD)(t.renderingEngineId).getViewport(t.viewportId).render()}getHandlesVisible(){return this.configuration.showHandles}getClippingPlanesVisible(){return this.configuration.showClippingPlanes}setClippingPlanesVisible(e){this.configuration.showClippingPlanes=e;let t=this._getViewport();this._updateClippingPlanes(t),t.render()}_dragCallback(e){let{element:t,currentPoints:n,lastPoints:i}=e.detail;if(null!==this.draggingSphereIndex)this._onMouseMoveSphere(e);else{let e=n.canvas,a=i.canvas,{rotateIncrementDegrees:o}=this.configuration,{viewport:r}=(0,ej.Ay)(t),l=r.getCamera(),s=t.clientWidth,d=t.clientHeight,h=[e[0]/s,e[1]/d],c=[a[0]/s,a[1]/d],u=r.canvasToWorld([.5*s,.5*d]),g=(1+Math.abs(.5))**2,m=[c[0],0,0],p=[h[0],0,0],f=m[0]**2,v=p[0]**2,I=f>g?0:Math.sqrt(g-f),C=v>g?0:Math.sqrt(g-v),_=[m[0],0,I];IT.Ay.normalize(_);let E=[p[0],0,C];IT.Ay.normalize(E);let w=IT.Ay.dot(_,E);if(Math.abs(w)>1e-4){let e=-2*Math.acos(IT.Ay.clampValue(w,-1,1))*Math.sign(h[0]-c[0])*o,t=l.viewUp,n=l.viewPlaneNormal,i=[0,0,0],a=[0,0,0];IT.Ay.cross(t,n,i),IT.Ay.normalize(i),IT.Ay.cross(n,i,a),IT.Ay.normalize(a),IT.Ay.normalize(t),this._rotateCamera(r,u,a,e);let s=(c[1]-h[1])*o;this._rotateCamera(r,u,i,s)}r.render()}}_updateClippingPlanes(e){let t=e.getDefaultActor();if(!t||!t.actor){e._missingActorWarned||(console.warn("VolumeCroppingTool._updateClippingPlanes: No default actor found in viewport."),e._missingActorWarned=!0);return}let n=t.actor,i=n.getMapper(),a=n.getMatrix();if(!this.configuration.showClippingPlanes)return void i.removeAllClippingPlanes();let o=IO.create();IO.fromMat4(o,a);let r=IO.create();IO.invert(r,o),IO.transpose(r,r);let l=this.originalClippingPlanes;if(!l||!l.length)return;i.removeAllClippingPlanes();let s=[],d=[];for(let e=0;e<l.length;++e){let t=l[e],n=iT.vt();iT.Z0(n,new Float32Array(t.origin),a);let i=[n[0],n[1],n[2]],o=iT.vt();iT.ei(o,new Float32Array(t.normal),r),iT.S8(o,o);let h=[o[0],o[1],o[2]];s.push(i),d.push(h)}for(let e=0;e<s.length;++e){let t=IN.Ay.newInstance({origin:s[e],normal:d[e]});i.addClippingPlane(t)}}
312_updateHandlesVisibility(){this.sphereStates.forEach(e=>{e.sphereActor&&e.sphereActor.setVisibility(this.configuration.showHandles)}),Object.values(this.edgeLines).forEach(({actor:e})=>{e&&e.setVisibility(this.configuration.showHandles)})}_addLine3DBetweenPoints(e,t,n,i=[.7,.7,.7],a=""){if(t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2])return{actor:null,source:null};let o=iH.Ay.newInstance();o.setNumberOfPoints(2),o.setPoint(0,t[0],t[1],t[2]),o.setPoint(1,n[0],n[1],n[2]);let r=ir.Ay.newInstance({values:[2,0,1]}),l=io.Ay.newInstance();l.setPoints(o),l.setLines(r);let s=ii.Ay.newInstance();s.setInputData(l);let d=ia.Ay.newInstance();return d.setMapper(s),d.getProperty().setColor(...i),d.getProperty().setLineWidth(.5),d.getProperty().setOpacity(1),d.getProperty().setInterpolationToFlat(),d.getProperty().setAmbient(1),d.getProperty().setDiffuse(0),d.getProperty().setSpecular(0),d.setVisibility(this.configuration.showHandles),e.addActor({actor:d,uid:a}),{actor:d,source:l}}_addSphere(e,t,n,i,a=null,o){let r=a?`corner_${a}`:`${n}_${i}`;if(this.sphereStates.find(e=>e.uid===r))return;let l=IL.newInstance();l.setCenter(t),l.setRadius(o);let s=ii.Ay.newInstance();s.setInputConnection(l.getOutputPort());let d=ia.Ay.newInstance();d.setMapper(s);let h=[0,1,0],c=this.configuration.sphereColors||{};a?h=c.CORNERS||[0,0,1]:"z"===n?h=c.AXIAL||[1,0,0]:"x"===n?h=c.SAGITTAL||[1,1,0]:"y"===n&&(h=c.CORONAL||[0,1,0]);let u=this.sphereStates.findIndex(e=>e.uid===r);-1===u?this.sphereStates.push({point:t.slice(),axis:n,uid:r,sphereSource:l,sphereActor:d,isCorner:!!a,color:h}):(this.sphereStates[u].point=t.slice(),this.sphereStates[u].sphereSource=l),e.getActors().find(e=>e.uid===r)||(d.getProperty().setColor(h),d.setVisibility(this.configuration.showHandles),e.addActor({actor:d,uid:r}))}_calculateAdaptiveSphereRadius(e){void 0!==this.configuration.sphereRadius&&this.configuration.sphereRadius;let t=this.configuration.sphereRadiusScale||.01;return Math.max(this.configuration.minSphereRadius||2,Math.min(this.configuration.maxSphereRadius||50,e*t))}_updateClippingPlanesFromFaceSpheres(e){let t=e.getDefaultActor().actor.getMapper();this.originalClippingPlanes[0].origin=[...this.sphereStates[IU.XMIN].point],this.originalClippingPlanes[1].origin=[...this.sphereStates[IU.XMAX].point],this.originalClippingPlanes[2].origin=[...this.sphereStates[IU.YMIN].point],this.originalClippingPlanes[3].origin=[...this.sphereStates[IU.YMAX].point],this.originalClippingPlanes[4].origin=[...this.sphereStates[IU.ZMIN].point],this.originalClippingPlanes[5].origin=[...this.sphereStates[IU.ZMAX].point],t.removeAllClippingPlanes();for(let e=0;e<6;++e){let n=this.originalClippingPlanes[e].origin,i=this.originalClippingPlanes[e].normal,a=IN.Ay.newInstance({origin:n,normal:i});t.addClippingPlane(a)}}_updateCornerSpheresFromFaces(){let e=this.sphereStates[IU.XMIN].point[0],t=this.sphereStates[IU.XMAX].point[0],n=this.sphereStates[IU.YMIN].point[1],i=this.sphereStates[IU.YMAX].point[1],a=this.sphereStates[IU.ZMIN].point[2],o=this.sphereStates[IU.ZMAX].point[2];for(let r of[{key:"XMIN_YMIN_ZMIN",pos:[e,n,a]},{key:"XMIN_YMIN_ZMAX",pos:[e,n,o]},{key:"XMIN_YMAX_ZMIN",pos:[e,i,a]},{key:"XMIN_YMAX_ZMAX",pos:[e,i,o]},{key:"XMAX_YMIN_ZMIN",pos:[t,n,a]},{key:"XMAX_YMIN_ZMAX",pos:[t,n,o]},{key:"XMAX_YMAX_ZMIN",pos:[t,i,a]},{key:"XMAX_YMAX_ZMAX",pos:[t,i,o]}]){let e=this.sphereStates.find(e=>e.uid===`corner_${r.key}`);e&&(e.point[0]=r.pos[0],e.point[1]=r.pos[1],e.point[2]=r.pos[2],e.sphereSource.setCenter(...e.point),e.sphereSource.modified())}}_updateFaceSpheresFromCorners(){let e=[this.sphereStates[IU.XMIN_YMIN_ZMIN].point,this.sphereStates[IU.XMIN_YMIN_ZMAX].point,this.sphereStates[IU.XMIN_YMAX_ZMIN].point,this.sphereStates[IU.XMIN_YMAX_ZMAX].point,this.sphereStates[IU.XMAX_YMIN_ZMIN].point,this.sphereStates[IU.XMAX_YMIN_ZMAX].point,this.sphereStates[IU.XMAX_YMAX_ZMIN].point,this.sphereStates[IU.XMAX_YMAX_ZMAX].point],t=e.map(e=>e[0]),n=e.map(e=>e[1]),i=e.map(e=>e[2]),a=Math.min(...t),o=Math.max(...t),r=Math.min(...n),l=Math.max(...n),s=Math.min(...i),d=Math.max(...i);this.sphereStates[IU.XMIN].point=[a,(r+l)/2,(s+d)/2],this.sphereStates[IU.XMAX].point=[o,(r+l)/2,(s+d)/2],this.sphereStates[IU.YMIN].point=[(a+o)/2,r,(s+d)/2],this.sphereStates[IU.YMAX].point=[(a+o)/2,l,(s+d)/2],this.sphereStates[IU.ZMIN].point=[(a+o)/2,(r+l)/2,s],this.sphereStates[IU.ZMAX].point=[(a+o)/2,(r+l)/2,d],[IU.XMIN,IU.XMAX,IU.YMIN,IU.YMAX,IU.ZMIN,IU.ZMAX].forEac
312h(e=>{let t=this.sphereStates[e];t.sphereSource.setCenter(...t.point),t.sphereSource.modified()})}_updateCornerSpheres(){let e=this.sphereStates[IU.XMIN].point[0],t=this.sphereStates[IU.XMAX].point[0],n=this.sphereStates[IU.YMIN].point[1],i=this.sphereStates[IU.YMAX].point[1],a=this.sphereStates[IU.ZMIN].point[2],o=this.sphereStates[IU.ZMAX].point[2];for(let r of[{key:"XMIN_YMIN_ZMIN",pos:[e,n,a]},{key:"XMIN_YMIN_ZMAX",pos:[e,n,o]},{key:"XMIN_YMAX_ZMIN",pos:[e,i,a]},{key:"XMIN_YMAX_ZMAX",pos:[e,i,o]},{key:"XMAX_YMIN_ZMIN",pos:[t,n,a]},{key:"XMAX_YMIN_ZMAX",pos:[t,n,o]},{key:"XMAX_YMAX_ZMIN",pos:[t,i,a]},{key:"XMAX_YMAX_ZMAX",pos:[t,i,o]}]){let e=this.sphereStates.find(e=>e.uid===`corner_${r.key}`);e&&(e.point[0]=r.pos[0],e.point[1]=r.pos[1],e.point[2]=r.pos[2],e.sphereSource.setCenter(...e.point),e.sphereSource.modified())}Object.values(this.edgeLines).forEach(({source:e,key1:t,key2:n})=>{let i=this.sphereStates.find(e=>e.uid===`corner_${t}`),a=this.sphereStates.find(e=>e.uid===`corner_${n}`);if(i&&a){let t=e.getPoints();t.setPoint(0,i.point[0],i.point[1],i.point[2]),t.setPoint(1,a.point[0],a.point[1],a.point[2]),t.modified(),e.modified()}})}_unsubscribeToViewportNewVolumeSet(e){e.forEach(({viewportId:e,renderingEngineId:t})=>{let{viewport:n}=(0,ej.b1)(e,t),{element:i}=n;i.removeEventListener(e$.A.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)})}_subscribeToViewportNewVolumeSet(e){e.forEach(({viewportId:e,renderingEngineId:t})=>{let{viewport:n}=(0,ej.b1)(e,t),{element:i}=n;i.addEventListener(e$.A.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)})}}IV.toolName="VolumeCropping";let IF=IV;var IG=n(80431);let{RENDERING_DEFAULTS:IB}=i$;function IH(){return"rgb(0, 200, 0)"}function IW(){return!0}let I$={DRAG:1};class Iz extends sd{constructor(e={},t={supportedInteractionTypes:["Mouse"],configuration:{viewportIndicators:!1,viewportIndicatorsConfig:{radius:5,x:null,y:null},extendReferenceLines:!0,initialCropFactor:.2,mobile:{enabled:!1,opacity:.8},lineColors:{AXIAL:[1,0,0],CORONAL:[0,1,0],SAGITTAL:[1,1,0],UNKNOWN:[0,0,1]},lineWidth:1.5,lineWidthActive:2.5}}){super(e,t),this._virtualAnnotations=[],this.sphereStates=[],this.draggingSphereIndex=null,this.toolCenter=[0,0,0],this.toolCenterMin=[0,0,0],this.toolCenterMax=[0,0,0],this.initializeViewport=({renderingEngineId:e,viewportId:t})=>{if(!e||!t)return void console.warn("VolumeCroppingControlTool: Missing renderingEngineId or viewportId");let n=(0,ej.b1)(t,e);if(!n)return;let{viewport:i}=n;this._updateToolCentersFromViewport(i);let{element:a}=i,{position:o,focalPoint:r,viewPlaneNormal:l}=i.getCamera(),s=this._getAnnotations(n);s=this.filterInteractableAnnotationsForElement(a,s),s?.length&&tu(s[0].annotationUID);let d=this._getOrientationFromNormal(i.getCamera().viewPlaneNormal);return th({highlighted:!1,metadata:{cameraPosition:[...o],cameraFocalPoint:[...r],toolName:this.getToolName()},data:{handles:{toolCenter:this.toolCenter,toolCenterMin:this.toolCenterMin,toolCenterMax:this.toolCenterMax},activeOperation:null,activeViewportIds:[],viewportId:t,referenceLines:[],orientation:d}},a),{normal:l,point:i.canvasToWorld([100,100])}},this._getViewportsInfo=()=>s3(this.toolGroupId).viewportsInfo,this.resetCroppingSpheres=()=>{let e=this._getViewportsInfo();for(let t of e){let{viewportId:e,renderingEngineId:n}=t,i=(0,ej.b1)(e,n),a=i.viewport;a.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,resetRotation:!0,suppressEvents:!0}),a.resetSlabThickness();let{element:o}=a,r=this._getAnnotations(i);(r=this.filterInteractableAnnotationsForElement(o,r)).length&&tu(r[0].annotationUID),a.render()}this._computeToolCenter(e)},this.computeToolCenter=()=>{this._getViewportsInfo()},this._computeToolCenter=e=>{if(!e||!e[0])return void console.warn("  _computeToolCenter : No valid viewportsInfo for computeToolCenter.");let t=["AXIAL","CORONAL","SAGITTAL"],n=e.map(e=>{if(e.renderingEngineId){let t=(0,nG.lD)(e.renderingEngineId).getViewport(e.viewportId);if(t&&t.getCamera){let e=this._getOrientationFromNormal(t.getCamera().viewPlaneNormal);if(e)return e}}return null}).filter(Boolean),i=t.find(e=>!n.includes(e)),a=[],o=[],r=e.filter(e=>{let n=null;if(e.renderingEngineId){let t=(0,nG.lD)(e.renderingEngineId).getViewport(e.viewportId);t&&t.getCamera&&(n=this._getOrientationFromNormal(t.getCamera().viewPlaneNormal))}return n&&t.includes(n)});
312if(r.forEach(e=>{let{normal:t,point:n}=this.initializeViewport(e);a.push(t),o.push(n)}),2===r.length&&i){let e=[0,0,0];iT.$A(e,a[0],a[1]),iT.S8(e,e);let t=[(o[0][0]+o[1][0])/2,(o[0][1]+o[1][1])/2,(o[0][2]+o[1][2])/2],n={highlighted:!1,metadata:{cameraPosition:[...t],cameraFocalPoint:[...t],toolName:this.getToolName()},data:{handles:{activeOperation:null,toolCenter:this.toolCenter,toolCenterMin:this.toolCenterMin,toolCenterMax:this.toolCenterMax},activeViewportIds:[],viewportId:i,referenceLines:[],orientation:null},isVirtual:!0,virtualNormal:e};this._virtualAnnotations=[n]}else if(1===r.length){let e=null,n=r[0];if(n.renderingEngineId){let t=(0,nG.lD)(n.renderingEngineId).getViewport(n.viewportId);t&&t.getCamera&&(e=this._getOrientationFromNormal(t.getCamera().viewPlaneNormal))}let i=o[0],a={AXIAL:[0,0,1],CORONAL:[0,1,0],SAGITTAL:[1,0,0]},l=t.filter(t=>t!==e).map(e=>{let t=a[e];return{highlighted:!1,metadata:{cameraPosition:[...i],cameraFocalPoint:[...i],toolName:this.getToolName()},data:{handles:{activeOperation:null,toolCenter:this.toolCenter,toolCenterMin:this.toolCenterMin,toolCenterMax:this.toolCenterMax},activeViewportIds:[],viewportId:e,referenceLines:[],orientation:e},isVirtual:!0,virtualNormal:t}});this._virtualAnnotations=l}e&&e.length&&oX(e.map(({viewportId:e})=>e))},this.cancel=()=>{console.log("Not implemented yet")},this.isPointNearTool=(e,t,n,i)=>!!this._pointNearTool(e,t,n,6),this.toolSelectedCallback=(e,t,n)=>{let{element:i}=e.detail;t.highlighted=!0,this._activateModify(i),o2(i),e.preventDefault()},this.onResetCamera=e=>{this.resetCroppingSpheres()},this.mouseMoveCallback=(e,t)=>{if(!t)return;let{element:n,currentPoints:i}=e.detail,a=i.canvas,o=!1;for(let e=0;e<t.length;e++){let i=t[e];if(iN(i.annotationUID))continue;let{data:r,highlighted:l}=i;if(!r.handles)continue;r.handles.activeOperation,r.activeViewportIds&&r.activeViewportIds.length>0&&[...r.activeViewportIds],r.activeViewportIds=[];let s=!1,d=(s=this._pointNearTool(n,i,a,6))&&!l,h=!s&&l;(d||h)&&(i.highlighted=!l,o=!0)}return o},this.filterInteractableAnnotationsForElement=(e,t)=>{if(!t||!t.length)return[];let n=(0,ej.Ay)(e),i=null;return n.viewport&&n.viewport.getCamera&&(i=this._getOrientationFromNormal(n.viewport.getCamera().viewPlaneNormal)),t.filter(e=>!!e.isVirtual||!!e.data.orientation&&!!i&&e.data.orientation===i)},this.renderAnnotation=(e,t)=>{let n=this._getViewportsInfo();if(!n||0===n.length)return!1;let i=!1,{viewport:a,renderingEngine:o}=e,{element:r}=a,l=this._getAnnotations(e);this._virtualAnnotations&&this._virtualAnnotations.length&&(l=l.concat(this._virtualAnnotations));let s=a.getCamera(),d=this.filterInteractableAnnotationsForElement(r,l)[0];if(!d||!d.data)return i;let h=d.annotationUID,{clientWidth:c,clientHeight:u}=a.canvas,g=Math.sqrt(c*c+u*u),m=d.data,p=l,f=a.worldToCanvas(this.toolCenterMin),v=a.worldToCanvas(this.toolCenterMax),I=[],C=[0,0,c,u];p.forEach(e=>{let t,i,r,l,d,h,c,u=e.data,m="isVirtual"in e&&!0===e.isVirtual;if(u.handles.toolCenter=this.toolCenter,m){let s=n.filter(e=>e.viewportId!==u.viewportId);if(2===s.length){let e=o.getViewport(s[0].viewportId),n=o.getViewport(s[1].viewportId),g=e.getCamera().viewPlaneNormal,m=n.getCamera().viewPlaneNormal,p=iT.vt();iT.$A(p,g,m),iT.S8(p,p),i={viewPlaneNormal:p,position:u.handles.toolCenter,focalPoint:u.handles.toolCenter,viewUp:[0,1,0]},d=Math.sqrt((r=a.canvas.clientWidth)*r+(l=a.canvas.clientHeight)*l),h=[.5*r,.5*l],c=u.handles.toolCenter,t={id:u.viewportId,canvas:a.canvas,canvasToWorld:()=>u.handles.toolCenter}}else i={viewPlaneNormal:e.virtualNormal??[0,0,1],position:u.handles.toolCenter,focalPoint:u.handles.toolCenter,viewUp:[0,1,0]},d=Math.sqrt((r=a.canvas.clientWidth)*r+(l=a.canvas.clientHeight)*l),h=[.5*r,.5*l],c=u.handles.toolCenter,t={id:u.viewportId,canvas:a.canvas,canvasToWorld:()=>u.handles.toolCenter}}else i=(t=o.getViewport(u.viewportId)).getCamera(),d=Math.sqrt((r=t.canvas.clientWidth)*r+(l=t.canvas.clientHeight)*l),h=[.5*r,.5*l],c=t.canvasToWorld(h);let p=this._getReferenceLineControllable(t.id),_=[0,0,0];IT.Ay.cross(s.viewPlaneNormal,i.viewPlaneNormal,_),IT.Ay.normalize(_),IT.Ay.multiplyScalar(_,d);let E=[0,0,0];IT.Ay.add(c,_,E),IT.Ay.subtract(c,_,[0,0,0]);let w=a.worldToCanvas(E),A=a.worldToCanvas([c[0]??0,c[1]??0,c[2]??0]),S=aZ.vt();aZ.Re(S,w,A),aZ.S8(S,S);let y=aZ.vt();aZ.hs(y,S,100*g);let b=p?aZ.o8(f):aZ.o8(A),T=aZ.vt(),M=aZ.vt();aZ.WQ(T,b,y),aZ.Re(M,b,y),pw(T,M,C),I.push([t,T,M,"min"]);let D=p?aZ.o8(v):aZ.o8(A),O=aZ.vt(),x=aZ.vt();aZ.WQ(O,D,y),aZ.Re(x,D,y),pw(O,x,C),I.push([t,O,x,"max"])}),m.referenceLines=I;let _=this._getReferenceLineColor(a.id),E=void 0!==_?_:"rgb(200, 200, 200)";
312if(I.forEach((e,n)=>{let i=[];for(let t=0;t<I.length;++t){if(t===n)continue;let a=I[t],o=function(e,t,n,i){let a=t[0]-e[0],o=t[1]-e[1],r=i[0]-n[0],l=i[1]-n[1],s=-r*o+a*l;if(1e-8>Math.abs(s))return null;let d=(-o*(e[0]-n[0])+a*(e[1]-n[1]))/s,h=(r*(e[1]-n[1])-l*(e[0]-n[0]))/s;return d>=0&&d<=1&&h>=0&&h<=1?[e[0]+h*a,e[1]+h*o]:null}(e[1],e[2],a[1],a[2]);o&&i.push({with:a[3],point:o})}let a=e[0],o=null;if(a&&a.id){let e=l.find(e=>e.data.viewportId===a.id);if(e&&e.data.orientation)o=String(e.data.orientation).toUpperCase();else{let e=a.id.toUpperCase();e.includes("AXIAL")?o="AXIAL":e.includes("CORONAL")?o="CORONAL":e.includes("SAGITTAL")&&(o="SAGITTAL")}}let r=this.configuration.lineColors||{},s=r[o]||r.unknown||[1,0,0],d=Array.isArray(s)?`rgb(${s.map(e=>Math.round(255*e)).join(",")})`:s,c=this._getReferenceLineControllable(a.id),u=m.activeViewportIds.find(e=>e===a.id),g=this.configuration.lineWidth??1.5;null!==m.handles.activeOperation&&m.handles.activeOperation===I$.DRAG&&u&&(g=this.configuration.activeLineWidth??2.5);let p=`${n}`;if(c&&(2===i.length&&l_(t,h,p,i[0].point,i[1].point,{color:d,lineWidth:g}),this.configuration.extendReferenceLines&&2===i.length&&this.configuration.extendReferenceLines&&2===i.length)){let n=i.map(t=>({...t,distance:aZ.Io(e[1],t.point)})).sort((e,t)=>e.distance-t.distance);l_(t,h,p+"_dashed_before",e[1],n[0].point,{color:d,lineWidth:g,lineDash:[4,4]}),l_(t,h,p+"_dashed_after",n[1].point,e[2],{color:d,lineWidth:g,lineDash:[4,4]})}}),i=!0,this.configuration.viewportIndicators){let{viewportIndicatorsConfig:e}=this.configuration,n=e?.xOffset||.95,i=e?.yOffset||.05;uo(t,h,"0",[c*n,u*i],e?.circleRadius||.01*g,{color:E,fill:E})}return i},this._getAnnotations=e=>{let{viewport:t}=e,n=ti(this.getToolName(),t.element)||[],i=this._getViewportsInfo().map(({viewportId:e})=>e);return n.filter(e=>{let{data:t}=e;return i.includes(t.viewportId)})},this._onSphereMoved=e=>{if(e.detail.originalClippingPlanes)this._syncWithVolumeCroppingTool(e.detail.originalClippingPlanes);else{if(e.detail.seriesInstanceUID!==this.seriesInstanceUID)return;let{draggingSphereIndex:t,toolCenter:n}=e.detail,i=[...this.toolCenterMin],a=[...this.toolCenterMax];if(t>=0&&t<=5){let e=Math.floor(t/2);(t%2==0?i:a)[e]=n[e],this.setToolCenter(i,"min"),this.setToolCenter(a,"max");return}t>=6&&t<=13&&(t<10?i[0]=n[0]:a[0]=n[0],[6,7,10,11].includes(t)?i[1]=n[1]:a[1]=n[1],t%2==0?i[2]=n[2]:a[2]=n[2],this.setToolCenter(i,"min"),this.setToolCenter(a,"max"))}},this._onNewVolume=()=>{let e=this._getViewportsInfo();if(e&&e.length>0){let{viewportId:t,renderingEngineId:n}=e[0],i=(0,nG.lD)(n).getViewport(t),a=i.getActors();if(a.length>0){let e=a[0].actor.getMapper().getInputData();e&&(this.seriesInstanceUID=e.seriesInstanceUID,this._updateToolCentersFromViewport(i),(ti(this.getToolName(),t)||[]).forEach(e=>{e.data&&e.data.handles&&(e.data.handles.toolCenter=[...this.toolCenter])}))}}this._computeToolCenter(e),(0,eq.A)(ez.A,eK.VOLUMECROPPINGCONTROL_TOOL_CHANGED,{toolGroupId:this.toolGroupId,viewportsInfo:e,seriesInstanceUID:this.seriesInstanceUID})},this._getAnnotationsForViewportsWithDifferentCameras=(e,t)=>{let{viewportId:n,renderingEngine:i,viewport:a}=e,o=t.filter(e=>e.data.viewportId!==n);if(!o||!o.length)return[];let{viewPlaneNormal:r,position:l}=a.getCamera();return o.filter(e=>{let{viewportId:t}=e.data,n=i.getViewport(t).getCamera();return!(aM.n4(n.viewPlaneNormal,r,.01)&&aM.n4(n.position,l,1))})},this._filterViewportWithSameOrientation=(e,t,n)=>{let{renderingEngine:i}=e,{data:a}=t,o=i.getViewport(a.viewportId),r=n.filter(e=>{let{data:t}=e,n=i.getViewport(t.viewportId);return!0===this._getReferenceLineControllable(n.id)});if(!r||!r.length)return[];let l=o.getCamera(),s=l.viewPlaneNormal;return IT.Ay.normalize(s),r.filter(e=>{let{viewportId:t}=e.data,n=i.getViewport(t).getCamera(),a=n.viewPlaneNormal;return IT.Ay.normalize(a),aM.n4(s,a,.01)&&aM.n4(l.viewUp,n.viewUp,.01)})},this._activateModify=e=>{e0.isInteractingWithTool=!this.configuration.mobile?.enabled,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this._endCallback=e=>{let{element:t}=e.detail;this.editData.annotation.data.handles.activeOperation=null,this.editData.annotation.data.activeViewportIds=[],this._deactivateModify(t),o1(t),this.editData=null,oX(ox(t,this.getToolName(),!1))},this._dragCallback=e=>{let t=e.detail,n=t.deltaPoints.world;if(.001>Math.abs(n[0])&&.001>Math.abs(n[1])&&.001>Math.abs(n[2]))return;let{element:i}=t,a=(0,ej.Ay)(i),{viewport:o}=a;if(o.type===IG.A.VOLUME_3D)return;let r=this._getAnnotations(a),l=this.filterInteractableAnnotationsForElement(i,r)[0];if(!l)return;let{handles:s}=l.data;s.activeOperation===I$.DRAG&&("min"===s.activeType?(this.toolCenterMin[0]+=n[0],this.toolCenterMin[1]+=n[1],this.toolCenterMin[2]+=n[2]):"max"===s.activeType?(this.toolCenterMax[0]+=n[0],this.toolCenterMax[1]+=n[1],this.toolCenterMax[2]+=n[2]):(this.toolCenter[0]+=n[0],this.toolCenter[1]+=n[1],this.toolCenter[2]+=n[2]),oX(this._getViewportsInfo().map(({viewportId:e})=>e)),(0,eq.A)(ez.A,eK.VOLUMECROPPINGCONTROL_TOOL_CHANGED,{toolGroupId:this.toolGroupId,toolCenter:this.toolCenter,toolCenterMin:this.toolCenterMin,toolCenterMax:this.toolCenterMax,handleType:s.activeType,viewportOrientation:[],seriesInstanceUID:this.seriesInstanceUID}))},this._getReferenceLineColor=e.configuration?.getReferenceLineColor||IH,this._getReferenceLineControllable=e.configuration?.getReferenceLineControllable||IW;let n=s3(this.toolGroupId)?.viewportsInfo;if(ez.A.addEventListener(eK.VOLUMECROPPING_TOOL_CHANGED,this._onSphereMoved),n&&n.length>0){let{viewportId:e,renderingEngineId:t}=n[0];(0,ej.b1)(e,t);let i=(0,nG.lD)(t).getViewport(e).getActors();if(!i||!i.length)return void console.warn(`VolumeCroppingControlTool: No volume actors found in viewport ${e}.`);let a=i[0].actor.getMapper().getInputData();if(a){let e=a.getDimensions(),t=a.getSpacing(),n=a.getOrigin();this.seriesInstanceUID=a.seriesInstanceUID||"unknown";let i=this.configuration.initialCropFactor??.2;this.toolCenter=[n[0]+i*(e[0]-1)*t[0],n[1]+i*(e[1]-1)*t[1],n[2]+i*(e[2]-1)*t[2]];let o=1-i;this.toolCenterMin=[n[0]+i*(e[0]-1)*t[0],n[1]+i*(e[1]-1)*t[1],n[2]+i*(e[2]-1)*t[2]],this.toolCenterMax=[n[0]+o*(e[0]-1)*t[0],n[1]+o*(e[1]-1)*t[1],n[2]+o*(e[2]-1)*t[2]]}}}_updateToolCentersFromViewport(e){let t=e.getActors();if(!t||!t.length)return;let n=t[0].actor.getMapper().getInputData();if(!n)return;this.seriesInstanceUID=n.seriesInstanceUID||"unknown";
312let i=n.getDimensions(),a=n.getSpacing(),o=n.getOrigin(),r=this.configuration.initialCropFactor??.2,l=r/2,s=1-r/2;this.toolCenter=[o[0]+(l+s)/2*(i[0]-1)*a[0],o[1]+(l+s)/2*(i[1]-1)*a[1],o[2]+(l+s)/2*(i[2]-1)*a[2]],this.toolCenterMin=[o[0]+l*(i[0]-1)*a[0],o[1]+l*(i[1]-1)*a[1],o[2]+l*(i[2]-1)*a[2]],this.toolCenterMax=[o[0]+s*(i[0]-1)*a[0],o[1]+s*(i[1]-1)*a[1],o[2]+s*(i[2]-1)*a[2]]}onSetToolInactive(){console.debug(`VolumeCroppingControlTool: onSetToolInactive called for tool ${this.getToolName()}`)}onSetToolActive(){let e=this._getViewportsInfo(),t=!1;for(let n of e){let e=(0,ej.b1)(n.viewportId,n.renderingEngineId),i=this._getAnnotations(e);if(i&&i.length>0){t=!0;break}}if(t)for(let t of e){let e=(0,ej.b1)(t.viewportId,t.renderingEngineId);if(!e)continue;let n=this._getAnnotations(e);n&&n.length>0&&n.forEach(e=>{tu(e.annotationUID)}),e.viewport.render()}else this._unsubscribeToViewportNewVolumeSet(e),this._subscribeToViewportNewVolumeSet(e),this._computeToolCenter(e),(0,eq.A)(ez.A,eK.VOLUMECROPPINGCONTROL_TOOL_CHANGED,{toolGroupId:this.toolGroupId,viewportsInfo:e,seriesInstanceUID:this.seriesInstanceUID})}onSetToolEnabled(){console.debug(`VolumeCroppingControlTool: onSetToolEnabled called for tool ${this.getToolName()}`),this._getViewportsInfo()}onSetToolDisabled(){console.debug(`VolumeCroppingControlTool: onSetToolDisabled called for tool ${this.getToolName()}`);let e=this._getViewportsInfo();this._unsubscribeToViewportNewVolumeSet(e),e.forEach(({renderingEngineId:e,viewportId:t})=>{let n=(0,ej.b1)(t,e);if(!n)return;let i=this._getAnnotations(n);i?.length&&i.forEach(e=>{tu(e.annotationUID)})})}_getOrientationFromNormal(e){if(!e)return null;for(let[t,n]of Object.entries({AXIAL:[0,0,1],CORONAL:[0,1,0],SAGITTAL:[1,0,0]}))if(.01>Math.abs(e[0]-n[0])&&.01>Math.abs(e[1]-n[1])&&.01>Math.abs(e[2]-n[2])||.01>Math.abs(e[0]+n[0])&&.01>Math.abs(e[1]+n[1])&&.01>Math.abs(e[2]+n[2]))return t;return null}_syncWithVolumeCroppingTool(e){if(e.length>=6){this.toolCenterMin=[e[0].origin[0],e[2].origin[1],e[4].origin[2]],this.toolCenterMax=[e[1].origin[0],e[3].origin[1],e[5].origin[2]],this.toolCenter=[(this.toolCenterMin[0]+this.toolCenterMax[0])/2,(this.toolCenterMin[1]+this.toolCenterMax[1])/2,(this.toolCenterMin[2]+this.toolCenterMax[2])/2];let t=this._getViewportsInfo();t.forEach(({viewportId:t,renderingEngineId:n})=>{let i=(0,ej.b1)(t,n);i&&this._getAnnotations(i).forEach(t=>{if(t.data&&t.data.handles&&t.data.orientation){let n=t.data.orientation;"AXIAL"===n?(t.data.handles.toolCenterMin=[e[0].origin[0],e[2].origin[1],t.data.handles.toolCenterMin[2]],t.data.handles.toolCenterMax=[e[1].origin[0],e[3].origin[1],t.data.handles.toolCenterMax[2]]):"CORONAL"===n?(t.data.handles.toolCenterMin=[e[0].origin[0],t.data.handles.toolCenterMin[1],e[4].origin[2]],t.data.handles.toolCenterMax=[e[1].origin[0],t.data.handles.toolCenterMax[1],e[5].origin[2]]):"SAGITTAL"===n&&(t.data.handles.toolCenterMin=[t.data.handles.toolCenterMin[0],e[2].origin[1],e[4].origin[2]],t.data.handles.toolCenterMax=[t.data.handles.toolCenterMax[0],e[3].origin[1],e[5].origin[2]]),t.data.handles.toolCenter=[(t.data.handles.toolCenterMin[0]+t.data.handles.toolCenterMax[0])/2,(t.data.handles.toolCenterMin[1]+t.data.handles.toolCenterMax[1])/2,(t.data.handles.toolCenterMin[2]+t.data.handles.toolCenterMax[2])/2]}})}),this._virtualAnnotations&&this._virtualAnnotations.length>0&&this._virtualAnnotations.forEach(t=>{if(t.data&&t.data.handles&&t.data.orientation){let n=t.data.orientation.toUpperCase();"AXIAL"===n?(t.data.handles.toolCenterMin=[e[0].origin[0],e[2].origin[1],t.data.handles.toolCenterMin[2]],t.data.handles.toolCenterMax=[e[1].origin[0],e[3].origin[1],t.data.handles.toolCenterMax[2]]):"CORONAL"===n?(t.data.handles.toolCenterMin=[e[0].origin[0],t.data.handles.toolCenterMin[1],e[4].origin[2]],t.data.handles.toolCenterMax=[e[1].origin[0],t.data.handles.toolCenterMax[1],e[5].origin[2]]):"SAGITTAL"===n&&(t.data.handles.toolCenterMin=[t.data.handles.toolCenterMin[0],e[2].origin[1],e[4].origin[2]],t.data.handles.toolCenterMax=[t.data.handles.toolCenterMax[0],e[3].origin[1],e[5].origin[2]]),t.data.handles.toolCenter=[(t.data.handles.toolCenterMin[0]+t.data.handles.toolCenterMax[0])/2,(t.data.handles.toolCenterMin[1]+t.data.handles.toolCenterMax[1])/2,(t.data.handles.toolCenterMin[2]+t.data.handles.toolCenterMax[2])/2]}}),oX(t.map(({viewportId:e})=>e))}}setToolCenter(e,t){"min"===t?this.toolCenterMin=[...e]:"max"===t&&(this.toolCenterMax=[...e]),oX(this._getViewportsInfo().map(({viewportId:e})=>e))}addNewAnnotation(e){let{element:t}=e.detail,n=(0,ej.Ay)(t),{viewport:i}=n,a=this._getAnnotations(n),o=this.filterInteractableAnnotationsForElement(i.element,a);if(!o||0===o.length||!o[0])return null;let{data:r}=o[0],l=[],s=r.referenceLines||[];for(let e=0;e<s.length;++e){let t=s[e][0];
312this._getReferenceLineControllable(t.id)&&(l.push(t.id),e++)}return r.activeViewportIds=[...l],r.handles.activeOperation=I$.DRAG,e.preventDefault(),o2(t),this._activateModify(t),o[0]}handleSelectedCallback(e,t,n,i){this.toolSelectedCallback(e,t,i)}_unsubscribeToViewportNewVolumeSet(e){e.forEach(({viewportId:e,renderingEngineId:t})=>{let{viewport:n}=(0,ej.b1)(e,t),{element:i}=n;i.removeEventListener(e$.A.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)})}_subscribeToViewportNewVolumeSet(e){e.forEach(({viewportId:e,renderingEngineId:t})=>{let{viewport:n}=(0,ej.b1)(e,t),{element:i}=n;i.addEventListener(e$.A.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)})}_applyDeltaShiftToSelectedViewportCameras(e,t,n){t.forEach(t=>{this._applyDeltaShiftToViewportCamera(e,t,n)})}_applyDeltaShiftToViewportCamera(e,t,n){let{data:i}=t,a=e.getViewport(i.viewportId),o=a.getCamera(),r=o.viewPlaneNormal,l=IT.Ay.dot(n,r),s=[...r];if(IT.Ay.multiplyScalar(s,l),Math.abs(s[0])>.001||Math.abs(s[1])>.001||Math.abs(s[2])>.001){let e=[0,0,0],t=[0,0,0];IT.Ay.add(o.focalPoint,s,e),IT.Ay.add(o.position,s,t),a.setCamera({focalPoint:e,position:t}),a.render()}}_pointNearTool(e,t,n,i){let{data:a}=t,o=a.referenceLines,r=[];if(o)for(let e=0;e<o.length;++e){let t=o[e][0],l=o[e][1],s=o[e][2],d=o[e][3];u8(l,s,[n[0],n[1]])<=i&&(r.push(t.id),a.handles.activeOperation=1,a.handles.activeType=d)}return a.activeViewportIds=[...r],this.editData={annotation:t},1===a.handles.activeOperation}}Iz.toolName="VolumeCroppingControl";let IX=Iz,{transformWorldToIndex:Ij}=i9;class Iq extends sd{static{this.toolName="Probe"}static{this.probeDefaults={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:IK,handleRadius:"6",textCanvasOffset:{x:6,y:-6}}}}constructor(e={},t){super(e,sd.mergeDefaultProps(Iq.probeDefaults,t)),this.addNewAnnotation=e=>{let{currentPoints:t,element:n}=e.detail,i=t.world,{viewport:a}=(0,ej.Ay)(n);this.isDrawing=!0;let o=this.constructor.createAnnotationForViewport(a,{data:{handles:{points:[[...i]]}}});th(o,n);let r=ox(n,this.getToolName());return this.editData={annotation:o,newAnnotation:!0,viewportIdsToRender:r},this._activateModify(n),o2(n),e.preventDefault(),oX(r),o},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a}=this.editData,{viewportId:o,renderingEngine:r}=(0,ej.Ay)(t);this.eventDispatchDetail={viewportId:o,renderingEngineId:r.id},this._deactivateModify(t),o1(t),a&&this.createMemo(t,n,{newAnnotation:a}),this.editData=null,this.isDrawing=!1,this.doneEditMemo(),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),a&&e7(n)},this._dragCallback=e=>{this.isDrawing=!0;let{currentPoints:t,element:n}=e.detail,i=t.world,{annotation:a,viewportIdsToRender:o,newAnnotation:r}=this.editData,{data:l}=a;this.createMemo(n,a,{newAnnotation:r}),l.handles.points[0]=[...i],a.invalidated=!0,oX(o)},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,oX(n),i&&e7(t),this.editData=null,t.annotationUID}},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let a=0;a<o.length;a++){let s=o[a],d=s.annotationUID,h=s.data,c=h.handles.points[0],u=i.worldToCanvas(c),g=this.getTargetId(i,h);l.annotationUID=d;
312let{color:m,lineWidth:p}=this.getAnnotationStyle({annotation:s,styleSpecifier:l});if(h.cachedStats||(h.cachedStats={}),h.cachedStats[g]&&null!==h.cachedStats[g].value){if(s.invalidated&&(this._calculateCachedStats(s,r,e),i instanceof i8.A)){let{referencedImageId:e}=s.metadata;for(let t in h.cachedStats)t.startsWith("imageId")&&r.getStackViewports().find(t=>{let n=lk.A(e),i=t.hasImageURI(n),a=lk.A(t.getCurrentImageId());return i&&a!==n})&&delete h.cachedStats[t]}}else h.cachedStats[g]={Modality:null,index:null,value:null},this._calculateCachedStats(s,r,e,eY.StatsUpdated);if(!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(d))continue;li(t,d,"0",[u],{color:m,lineWidth:p,handleRadius:this.configuration.handleRadius}),n=!0;let f=this.getLinkedTextBoxStyle(l,s);if(!f.visibility)continue;let v=this.configuration.getTextLines(h,g);if(v){let e=[u[0]+this.configuration.textCanvasOffset.x,u[1]+this.configuration.textCanvasOffset.y];lC(t,d,"0",v,[e[0],e[1]],f)}}return n}}isPointNearTool(e,t,n,i){let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,r=o.handles.points[0],l=a.worldToCanvas(r);return aZ.Io(n,l)<i}toolSelectedCallback(){}static{this.hydrate=(e,t,n)=>{let i=(0,ej.yj)(e);if(!i)return;let{FrameOfReferenceUID:a,referencedImageId:o,viewPlaneNormal:r,viewUp:l,instance:s,viewport:d}=this.hydrateBase(Iq,i,t,n),{toolInstance:h,...c}=n||{};th({annotationUID:n?.annotationUID||eX.A(),data:{handles:{points:t}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:s.getToolName(),viewPlaneNormal:r,FrameOfReferenceUID:a,referencedImageId:o,...c}},d.element),oX([d.id])}}getHandleNearImagePoint(e,t,n,i){let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,r=o.handles.points[0],l=a.worldToCanvas(r);if(!0==aZ.Io(n,l)<i)return r}handleSelectedCallback(e,t){let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i},this._activateModify(n),o2(n),oX(i),e.preventDefault()}_calculateCachedStats(e,t,n,i=eY.StatsUpdated){let a=e.data,{renderingEngineId:o,viewport:r}=n,{element:l}=r,s=a.handles.points[0],{cachedStats:d}=a,h=Object.keys(d);for(let t=0;t<h.length;t++){let n=h[t],i={isPreScaled:ly(r,n),isSuvScaled:this.isSuvScaled(r,n,e.metadata.referencedImageId)},a=this.getTargetImageData(n);if(!a)continue;let{dimensions:o,imageData:l,metadata:c,voxelManager:u}
312=a,g=c.Modality,m=Ij(l,s);if(m=iT.LI(m,m),lF.A(m,o)){let t;this.isHandleOutsideImage=!1;let o=u.getAtIJKPoint(m);if(n.startsWith("imageId:")){let e=n.split("imageId:")[1],t=lk.A(e),i=lU.A(t)[0];m[2]=i.getCurrentImageIdIndex()}if("US"===g){let e=aV(a,[m]),n=e.values.every(e=>null!==e);o=n?e.values:o,t=n?e.units:"raw"}else t=dm(g,e.metadata.referencedImageId,i);d[n]={index:m,value:o,Modality:g,modalityUnit:t},e.invalidated=!0}else this.isHandleOutsideImage=!0,d[n]={index:m,Modality:g}}let c=e.invalidated;return e.invalidated=!1,c&&e9(e,l,i),d}}function IK(e,t){let{index:n,value:i,modalityUnit:a}=e.cachedStats[t];if(void 0===i||!n)return;let o=[];if(o.push(`(${n[0]}, ${n[1]}, ${n[2]})`),i instanceof Array&&a instanceof Array)for(let e=0;e<i.length;e++)o.push(`${aD.A(i[e])} ${a[e]}`);else o.push(`${aD.A(i)} ${a}`);return o}let IY=Iq;class IZ extends IY{static{this.toolName="DragProbe"}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:IJ}}){super(e,t),this.postMouseDownCallback=e=>{let{currentPoints:t,element:n}=e.detail,i=t.world,{viewport:a,renderingEngine:o}=(0,ej.Ay)(n);this.isDrawing=!0;let{viewPlaneNormal:r,viewUp:l}=a.getCamera(),s=this.getReferencedImageId(a,i,r,l),d={invalidated:!0,highlighted:!0,isVisible:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...l],FrameOfReferenceUID:a.getFrameOfReferenceUID(),referencedImageId:s},data:{label:"",handles:{points:[[...i]]},cachedStats:{}}},h=ox(n,this.getToolName());return this.editData={annotation:d,newAnnotation:!0,viewportIdsToRender:h},this._activateModify(n),o2(n),e.preventDefault(),oX(h),d},this.postTouchStartCallback=e=>this.postMouseDownCallback(e),this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e;if(!this.editData)return n;let a=this.filterInteractableAnnotationsForElement(i.element,[this.editData.annotation]);if(!a?.length)return n;let o=i.getRenderingEngine(),r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l=this.editData.annotation,s=l.annotationUID,d=l.data,h=d.handles.points[0],c=i.worldToCanvas(h),u=this.getTargetId(i,d);r.annotationUID=s;let{color:g}=this.getAnnotationStyle({annotation:l,styleSpecifier:r});if(d.cachedStats[u]&&null!==d.cachedStats[u].value?l.invalidated&&this._calculateCachedStats(l,o,e):(d.cachedStats[u]={Modality:null,index:null,value:null},this._calculateCachedStats(l,o,e)),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;li(t,s,"0",[c],{color:g}),n=!0;let m=this.configuration.getTextLines(d,u);if(m){let e=[c[0]+6,c[1]-6];lC(t,s,"0",m,[e[0],e[1]],this.getLinkedTextBoxStyle(r,l))}return n}}}function IJ(e,t){let{index:n,value:i,modalityUnit:a}=e.cachedStats[t];if(void 0===i)return;let o=[];return o.push(`(${n[0]}, ${n[1]}, ${n[2]})`),o.push(`${i.toFixed(2)} ${a}`),o}let IQ=IZ;class I0 extends lH{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"]}){super(e,t),this._getImageDynamicRangeFromMiddleSlice=(e,t)=>{let n,i,a=Math.floor(t[2]/2),o=t[0]*t[1];e instanceof Float32Array?(n=4,i=Float32Array):e instanceof Uint8Array?(n=1,i=Uint8Array):e instanceof Uint16Array?(n=2,i=Uint16Array):e instanceof Int16Array&&(n=2,i=Int16Array);let r=new i(e.buffer,a*o*n,o),{max:l,min:s}=this._getMinMax(r,o);return l-s}}touchDragCallback(e){this.mouseDragCallback(e)}mouseDragCallback(e){let t,n,i,a,o,r,{element:l,deltaPoints:s}=e.detail,{viewport:d}=(0,ej.Ay)(l),h=!1,c=d.getProperties();if(d instanceof i8.A){t=d.getVolumeId(),r=lV.A(t),{lower:n,upper:i}=c.voiRange;let e=nV.Ay.getVolume(t);if(!e)throw Error("Volume not found "+t);a=e.metadata.Modality,h=e.scaling&&Object.keys(e.scaling).length>0}else if(c.voiRange){a=d.modality,{lower:n,upper:i}=c.voiRange;let{preScale:e={scaled:!1}}=d.getImageData?.()||{};h=e.scaled&&e.scalingParameters?.suvbw!==void 0}else throw Error("Viewport is not a valid type");if(!((o="PT"===a&&h?this.getPTScaledNewRange({deltaPointsCanvas:s.canvas,lower:n,upper:i,clientHeight:l.clientHeight,isPreScaled:h,viewport:d,volumeId:t}):this.getNewRange({viewport:d,deltaPointsCanvas:s.canvas,volumeId:t,lower:n,upper:i})).lower>=o.upper)&&(d.setProperties({voiRange:o}
312),d.render(),d instanceof i8.A))return void r.forEach(e=>{d!==e&&e.render()})}getPTScaledNewRange({deltaPointsCanvas:e,lower:t,upper:n,clientHeight:i,viewport:a,volumeId:o,isPreScaled:r}){let l=4;l=r?5/i:this._getMultiplierFromDynamicRange(a,o)||4;let s=e[1]*l;return n-=s,{lower:t,upper:n=r?Math.max(n,.1):n}}getNewRange({viewport:e,deltaPointsCanvas:t,volumeId:n,lower:i,upper:a}){let o=this._getMultiplierFromDynamicRange(e,n)||4,r=t[0]*o,l=t[1]*o,{windowWidth:s,windowCenter:d}=fA.toWindowLevel(i,a);s+=r,d+=l,s=Math.max(s,1);let h=e.getProperties().VOILUTFunction;return fA.toLowHighRange(s,d,h)}_getMultiplierFromDynamicRange(e,t){let n;if(t){let i=nV.Ay.getVolume(t),{voxelManager:a}=e.getImageData(),o=a.getMiddleSliceData().reduce((e,t)=>[Math.min(e[0],t),Math.max(e[1],t)],[1/0,-1/0]),r=i?.metadata?.BitsStored,l=r?2**r:1/0,s=o[1]-o[0];n=Number.isFinite(s)?Math.min(s,l):l}else n=this._getImageDynamicRangeFromViewport(e);let i=n/1024;return Number.isFinite(i)?i>1?Math.round(i):i:1024}_getImageDynamicRangeFromViewport(e){let t,n,{imageData:i,voxelManager:a}=e.getImageData();if(a?.getRange){let e=a.getRange();return e[1]-e[0]}let o=i.getDimensions();if(i.getRange){let e=i.getRange();return e[1]-e[0]}if(t=i.getScalarData?i.getScalarData():i.getPointData().getScalars().getData(),1!==o[2])return this._getImageDynamicRangeFromMiddleSlice(t,o);if(t.getRange)n=t.getRange();else{let{min:e,max:i}=this._getMinMax(t,t.length);n=[e,i]}return n[1]-n[0]}_getMinMax(e,t){let n=1/0,i=-1/0;for(let a=0;a<t;a++){let t=e[a];t<n&&(n=t),t>i&&(i=t)}return{max:i,min:n}}}I0.toolName="WindowLevel";let I1=I0;var I2=n(61381);class I5 extends sd{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{minWindowWidth:10}}){super(e,t),this.addNewAnnotation=e=>{let{currentPoints:t,element:n}=e.detail,i=t.world,{viewport:a}=(0,ej.Ay)(n);this.isDrawing=!0;let{viewPlaneNormal:o,viewUp:r}=a.getCamera(),l=this.getReferencedImageId(a,i,o,r),s=a.getFrameOfReferenceUID(),d={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...o],viewUp:[...r],FrameOfReferenceUID:s,referencedImageId:l},data:{handles:{points:[[...i],[...i],[...i],[...i]]},cachedStats:{}}};th(d,n);let h=ox(n,this.getToolName());return this.editData={annotation:d,viewportIdsToRender:h},this._activateDraw(n),o2(n),e.preventDefault(),oX(h),d},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i}=this.editData;this._deactivateDraw(t),o1(t),this.editData=null,this.isDrawing=!1,tu(n.annotationUID),oX(i),e7(n),this.applyWindowLevelRegion(n,t)},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a}=this.editData,{data:o}=i,{currentPoints:r}=t,{worldToCanvas:l,canvasToWorld:s}=(0,ej.Ay)(n).viewport,d=r.world,{points:h}=o.handles;h[3]=[...d];let c=l(h[0]),u=l(h[3]),g=[u[0],c[1]],m=[c[0],u[1]],p=s(g),f=s(m);h[1]=p,h[2]=f,i.invalidated=!0,oX(a)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<o.length;e++){let a=o[e],{annotationUID:l,data:s}=a,{points:d}=s.handles,h=d.map(e=>i.worldToCanvas(e));r.annotationUID=l;let{color:c,lineWidth:u,lineDash:g}=this.getAnnotationStyle({annotation:a,styleSpecifier:r});if(!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}let m=`${l}-rect`;uc(t,l,"0",h[0],h[3],{color:c,lineDash:g,lineWidth:u},m),n=!0}return n},this.applyWindowLevelRegion=(e,t)=>{let{viewport:n}=(0,ej.Ay)(t),i=f$(n),{data:a}=e,{points:o}=a.handles,r=o.map(e=>n.worldToCanvas(e)),l=r[0],s=r[3],d=Math.min(l[0],s[0]),h=Math.min(l[1],s[1]),c=Math.abs(l[0]-s[0]),u=Math.abs(l[1]-s[1]);d=I2.Ay(d,0,i.width),h=I2.Ay(h,0,i.height),c=Math.floor(Math.min(c,Math.abs(i.width-d))),u=Math.floor(Math.min(u,Math.abs(i.height-h)));let g=fB(fG(i,Math.round(d),Math.round(h),c,u),i.minPixelValue,i.maxPixelValue);void 0===this.configuration.minWindowWidth&&(this.configuration.minWindowWidth=10);let m=Math.max(Math.abs(g.max-g.min),this.configuration.minWindowWidth),p=g.mean,f=n.getProperties().VOILUTFunction,v=fA.toLowHighRange(m,p,f);n.setProperties({voiRange:v}),n.render()},this.cancel=()=>null,this.isPointNearTool=()=>null,this.toolSelectedCallback=()=>null,this.handleSelectedCallback=()=>null,this._activateModify=()=>null,this._deactivateModify=()=>null}}I5.toolName="WindowLevelRegion";let I3=I5;class I4 extends lH{constructor(e={}
312,t={supportedInteractionTypes:["Mouse","Touch"],configuration:{zoomToCenter:!1,minZoomScale:.001,maxZoomScale:3e3,pinchToZoom:!0,pan:!0,invert:!1}}){super(e,t),this.preMouseDownCallback=e=>{let{element:t,currentPoints:n}=e.detail,i=n.world,{focalPoint:a}=(0,ej.Ay)(t).viewport.getCamera();this.initialMousePosWorld=i;let o=iT.fA(a[0]-i[0],a[1]-i[1],a[2]-i[2]);return o=iT.S8(iT.vt(),o),this.dirVec=o,!1},this.preTouchStartCallback=e=>{if(!this.configuration.pinchToZoom)return this.preMouseDownCallback(e)},this._dragParallelProjection=(e,t,n,i=!1)=>{let{element:a,deltaPoints:o}=e.detail,r=i?e.detail.deltaDistance.canvas:o.canvas[1],l=[a.clientWidth,a.clientHeight],{parallelScale:s,focalPoint:d,position:h}=n,c=r*(5/l[1])*(this.configuration.invert?-1:1),u=(1-c)*s,g=d,m=h;if(!this.configuration.zoomToCenter){let e=iT.Io(d,this.initialMousePosWorld);m=iT.Ln(iT.vt(),h,this.dirVec,-e*c),g=iT.Ln(iT.vt(),d,this.dirVec,-e*c)}let p=t.getImageData(),f=[1,1,1],v=u,I=!1;if(p){let e;f=p.spacing;let{dimensions:n}=p,i=n[0]*f[0],a=n[1]*f[1],o=l[0]/l[1],r=(0,uP.D0)().rendering?.useLegacyCameraFOV?1.1:1,s=t.options?.displayArea,d=s?.imageArea?.[0]??r,h=s?.imageArea?.[1]??r,c=i*d,g=a*h;e=c/g>o?c/o*.5:.5*g;let{minZoomScale:m,maxZoomScale:C}=this.configuration,_=e/C,E=e/m;u<_?(v=_,I=!0):u>E&&(v=E,I=!0)}t.setCamera({parallelScale:v,focalPoint:I?d:g,position:I?h:m})},this._dragPerspectiveProjection=(e,t,n,i=!1)=>{let{element:a,deltaPoints:o}=e.detail,r=i?e.detail.deltaDistance.canvas:o.canvas[1],l=[a.clientWidth,a.clientHeight],{position:s,focalPoint:d,viewPlaneNormal:h}=n,c=Math.sqrt(IT.Ay.distance2BetweenPoints(s,d))/l[1],u=[-h[0],-h[1],-h[2]],g=this.configuration.invert?r/c:r*c,m=g*u[0];s[0]+=m,d[0]+=m,m=g*u[1],s[1]+=m,d[1]+=m,m=g*u[2],s[2]+=m,d[2]+=m,t.setCamera({position:s,focalPoint:d})},this.initialMousePosWorld=[0,0,0],this.dirVec=[0,0,0],this.configuration.pinchToZoom?this.touchDragCallback=this._pinchCallback.bind(this):this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}mouseWheelCallback(e){this._zoom(e)}_pinchCallback(e){if(e.detail.currentPointsList.length>1){let{element:t,currentPoints:n}=e.detail,{viewport:i}=(0,ej.Ay)(t),a=i.getCamera(),o=n.world,{focalPoint:r}=a;this.initialMousePosWorld=o;let l=iT.fA(r[0]-o[0],r[1]-o[1],r[2]-o[2]);l=iT.S8(iT.vt(),l),this.dirVec=l,a.parallelProjection?this._dragParallelProjection(e,i,a,!0):this._dragPerspectiveProjection(e,i,a,!0),i.render()}this.configuration.pan&&this._panCallback(e)}_dragCallback(e){let{element:t}=e.detail,{viewport:n}=(0,ej.Ay)(t),i=n.getCamera();i.parallelProjection?this._dragParallelProjection(e,n,i):this._dragPerspectiveProjection(e,n,i),n.render()}_zoom(e){let{element:t,points:n}=e.detail,i=(0,ej.Ay)(t),{viewport:a}=i;a.getCamera();let o=e.detail.wheel.direction,r={detail:{element:t,eventName:eK.MOUSE_WHEEL,renderingEngineId:i.renderingEngineId,viewportId:a.id,camera:{},deltaPoints:{page:n.page,client:n.client,world:n.world,canvas:[0,-(5*o)]},startPoints:n,lastPoints:n,currentPoints:n}};a.type===IG.A.STACK&&this.preMouseDownCallback(r),this._dragCallback(r)}_panCallback(e){let{element:t,deltaPoints:n}=e.detail,i=(0,ej.Ay)(t),a=n.world,{focalPoint:o,position:r}=i.viewport.getCamera(),l=[r[0]-a[0],r[1]-a[1],r[2]-a[2]],s=[o[0]-a[0],o[1]-a[1],o[2]-a[2]];i.viewport.setCamera({focalPoint:s,position:l}),i.viewport.render()}}I4.toolName="Zoom";let I8=I4;class I9 extends lH{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{invert:!1,debounceIfNotLoaded:!0,loop:!1}}){super(e,t),this.deltaY=1}mouseWheelCallback(e){this._scroll(e)}mouseDragCallback(e){this._dragCallback(e)}touchDragCallback(e){this._dragCallback(e)}_dragCallback(e){this._scrollDrag(e)}_scrollDrag(e){let t,{deltaPoints:n,viewportId:i,renderingEngineId:a}=e.detail,{viewport:o}=(0,ej.b1)(i,a),{debounceIfNotLoaded:r,invert:l,loop:s}=this.configuration,d=n.canvas[1];o instanceof i8.A&&(t=o.getVolumeId());let h=this._getPixelPerImage(o),c=d+this.deltaY;if(h)if(Math.abs(c)>=h){let e=Math.round(c/h);pL.A(o,{delta:l?-e:e,volumeId:t,debounceLoading:r,loop:s}),this.deltaY=c%h}else this.deltaY=c}_scroll(e){let{wheel:t,element:n}=e.detail,{direction:i}=t,{invert:a}=this.configuration,{viewport:o}=(0,ej.Ay)(n);pL.A(o,{delta:i*(a?-1:1),debounceLoading:this.configuration.debounceIfNotLoaded,loop:this.configuration.loop,volumeId:o instanceof nU.A?o.getVolumeId():void 0,scrollSlabs:this.configuration.scrollSlabs})}_getPixelPerImage(e){let{element:t}=e,n=e.getNumberOfSlices();return Math.max(2,t.offsetHeight/Math.max(n,8))}}I9.toolName="StackScroll";let I7=I9;class I6 extends lH{constructor(e={}
312,t={supportedInteractionTypes:["Mouse","Touch"]}){super(e,t),this.mouseWheelCallback=e=>{let{element:t,wheel:n}=e.detail,{viewport:i}=(0,ej.Ay)(t),{invert:a}=this.configuration,o=10*n.direction*(a?-1:1);this.setAngle(i,o)},this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){let{element:t,currentPoints:n,startPoints:i}=e.detail,a=n.world,o=i.world,{viewport:r}=(0,ej.Ay)(t),l=r.getCamera(),s=t.clientWidth,d=t.clientHeight,h=r.canvasToWorld([.5*s,.5*d]),c=pA([o,h],[h,a]),{viewPlaneNormal:u}=l,g=iT.jb(iT.vt(),h,o),m=iT.jb(iT.vt(),h,a),p=iT.$A(iT.vt(),g,m);iT.Om(u,p)>0&&(c=-c),Number.isNaN(c)||this.setAngle(r,c)}setAngle(e,t){let{viewPlaneNormal:n,viewUp:i}=e.getCamera();if(e instanceof nU.A){let a=(t+360)%360*Math.PI/180,o=c2.identity(new Float32Array(16));c2.rotate(o,o,a,n);let r=iT.Z0(iT.vt(),i,o);e.setCamera({viewUp:r})}else{let{rotation:n}=e.getViewPresentation();e.setViewPresentation({rotation:(n+t+360)%360})}e.render()}}I6.toolName="PlanarRotate";let Ce=I6;class Ct extends lH{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{targetViewportIds:[]}}){super(e,t)}mouseClickCallback(e){let{element:t,currentPoints:n}=e.detail,{viewport:i,renderingEngine:a}=(0,ej.Ay)(t),o=i.getVolumeId();if(!o)throw Error("MIPJumpToClickTool: targetId is not a volumeId, you should only use MIPJumpToClickTool with a volumeId as the targetId");let r=-1/0,l=py(i,n.world,o,(e,t)=>{if(e>r)return r=e,t});if(!l||!l.length)return;let{targetViewportIds:s,toolGroupId:d}=this.configuration;a.getViewports().filter(e=>{if(s?.indexOf(e.id)>=0)return!0;let t=oy(e.id,a.id);return!!d&&d===t?.id}).forEach(e=>{e instanceof i8.A?e.jumpToWorld(l):console.warn("Cannot jump to specified world coordinates for a viewport that is not a VolumeViewport")})}}Ct.toolName="MIPJumpToClickTool";let Cn=Ct;class Ci extends sd{static{this.toolName="Label"}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,getTextCallback:Ca,changeTextCallback:Co,preventHandleOutsideImage:!1}}){super(e,t),this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{annotationUID:o}=t,r=t.data.handles.points[0],l=a.worldToCanvas(r);if(aZ.Io(n,l)<i)return!0;let s=e.querySelector("svg");if(!s)return!1;let d=s.querySelector(`g[data-annotation-uid="${o}"]`);if(!d)return!1;let h=d.getBBox(),c=d.getAttribute("transform"),u=0,g=0;if(c){let e=c.match(/translate\(([-\d.]+)\s+([-\d.]+)\)/);e&&(u=parseFloat(e[1]),g=parseFloat(e[2]))}let m=h.x+u,p=h.y+g;return n[0]>=m&&n[0]<=m+h.width&&n[1]>=p&&n[1]<=p+h.height},this.addNewAnnotation=e=>{let{currentPoints:t,element:n}=e.detail,i=t.world;o2(n),this.isDrawing=!0;let a=this.createAnnotation(e,[[...i],[...i]]);th(a,n);let o=ox(n,this.getToolName());return this.editData={annotation:a,newAnnotation:!0,viewportIdsToRender:o,offset:[0,0,0]},e.preventDefault(),oX(o),this.configuration.getTextCallback(e=>{if(!e){tu(a.annotationUID),oX(o),this.isDrawing=!1;return}o1(n),a.data.label=e,e7(a),oX(o)}),this.createMemo(n,a,{newAnnotation:!0}),a},this.toolSelectedCallback=(e,t)=>{let{element:n,currentPoints:i}=e.detail;t.highlighted=!0;let a=ox(n,this.getToolName()),o=[0,0,0];if(i&&i.world){let e=i.world,n=t.data.handles.points[0];o=[n[0]-e[0],n[1]-e[1],n[2]-e[2]]}this.editData={annotation:t,viewportIdsToRender:a,offset:o},this._activateModify(n),o2(n),oX(a),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a}=this.editData;this._deactivateDraw(t),this._deactivateModify(t),o1(t),a&&this.createMemo(t,n,{newAnnotation:a}),this.editData=null,this.isDrawing=!1,this.doneEditMemo(),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),a&&e7(n)},this._dragCallback=e=>{let{currentPoints:t,element:n}=e.detail,i=t.world,{annotation:a,viewportIdsToRender:o,offset:r}=this.editData;r?a.data.handles.points[0]=[i[0]+r[0],i[1]+r[1],i[2]+r[2]]:a.data.handles.points[0]=[...i],a.invalidated=!0,oX(o),e9(a,n,eY.LabelChange)},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,oX(n),i&&e7(t),this.editData=null,t.annotationUID}},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length)return n;o=this.filterInteractableAnnotationsForElement(a,o);let r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<o.length;e++){let a=o[e],{annotationUID:l,data:s}=a,d=s.handles.points[0];r.annotationUID=l;let h=i.worldToCanvas(d);if(n=!0,!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(l)||!s.label)continue;let c=this.getLinkedTextBoxStyle(r,a);lC(t,l,"1",[s.label],h,{...c,padding:0})}return n}}static{this.hydrate=(e,t,n,i)=>{let a=(0,ej.yj)(e);if(!a)return;let{viewport:o}=a,r=o.getFrameOfReferenceUID(),{viewPlaneNormal:l,viewUp:s}=o.getCamera(),d=new this,h=d.getReferencedImageId(o,t,l,s);th({annotationUID:i?.annotationUID||eX.A(),data:{label:n,handles:{points:[t]}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:d.getToolName(),viewPlaneNormal:l,FrameOfReferenceUID:r,referencedImageId:h,...i}},o.element),oX([o.id])}}handleSelectedCallback(e,t,n,i){}_doneChangingTextCallback(e,t,n){t.data.label=n,oX(ox(e,this.getToolName())),e9(t,e)}_isInsideVolume(e,t,n){return lF.A(e,n)&&lF.A(t,n)}}function Ca(e){return e(prompt("Enter your annotation:"))}function Co(e,t,n){return n(prompt("Enter your annotation:"))}Ci.toolName="Label";let Cr=Ci;class Cl extends sd{static{this.toolName="Length"}constructor(e={}
312,t={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:Cs,actions:{undo:{method:"undo",bindings:[{key:"z"}]},redo:{method:"redo",bindings:[{key:"y"}]}}}}){super(e,t),this.addNewAnnotation=e=>{let{currentPoints:t,element:n}=e.detail,i=t.world;o2(n),this.isDrawing=!0;let a=this.createAnnotation(e,[[...i],[...i]]);th(a,n);let o=ox(n,this.getToolName());return this.editData={annotation:a,viewportIdsToRender:o,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(n),e.preventDefault(),oX(o),a},this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,[r,l]=o.handles.points,s=a.worldToCanvas(r),d=a.worldToCanvas(l),h={start:{x:s[0],y:s[1]},end:{x:d[0],y:d[1]}};return u8([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(n),o2(n),oX(i),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;(!a||o)&&(r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),this.doneEditMemo(),a&&e7(n),this.editData=null,this.isDrawing=!1)},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:o,movingTextBox:r,newAnnotation:l}=this.editData,{data:s}=i;if(this.createMemo(n,i,{newAnnotation:l}),r){let{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else if(void 0===o){let{deltaPoints:e}=t,n=e.world;s.handles.points.forEach(e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]}),i.invalidated=!0}else{let{currentPoints:e}=t,n=e.world;s.handles.points[o]=[...n],i.invalidated=!0}this.editData.hasMoved=!0,oX(a),i.invalidated&&e9(i,n,eY.HandlesUpdated)},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,oX(n),i&&e7(t),this.editData=null,t.annotationUID}},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r=this.getTargetId(i),l=i.getRenderingEngine(),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let a=0;a<o.length;a++){let d,h=o[a],{annotationUID:c,data:u}=h,{points:g,activeHandleIndex:m}=u.handles;s.annotationUID=c;let{color:p,lineWidth:f,lineDash:v,shadow:I}=this.getAnnotationStyle({annotation:h,styleSpecifier:s}),C=g.map(e=>i.worldToCanvas(e));if(u.cachedStats[r]&&null!=u.cachedStats[r].unit?h.invalidated&&this._throttledCalculateCachedStats(h,l,e):(u.cachedStats[r]={length:null,unit:null},this._calculateCachedStats(h,l,e)),!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(c))continue;iN(c)||this.editData||null===m||(d=[C[m]]);let _=!!lz("showHandlesAlways",{});(d||_)&&li(t,c,"0",C,{color:p,lineDash:v,lineWidth:f});let E=`${c}-line`;if(l_(t,c,"1",C[0],C[1],{color:p,width:f,lineDash:v,shadow:I},E),n=!0,!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}let w=this.getLinkedTextBoxStyle(s,h);if(!w.visibility){u.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}let A=this.configuration.getTextLines(u,r);if(!u.handles.textBox.hasMoved){let e=lS(C);u.handles.textBox.worldPosition=i.canvasToWorld(e)}let{x:S,y:y,width:b,height:T}=lA(t,c,"1",A,i.worldToCanvas(u.handles.textBox.worldPosition),C,{},w);u.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([S,y]),topRight:i.canvasToWorld([S+b,y]),bottomLeft:i.canvasToWorld([S,y+T]),bottomRight:i.canvasToWorld([S+b,y+T])}}return n},this._throttledCalculateCachedStats=oA(this._calculateCachedStats,100,{trailing:!0})}
312static{this.hydrate=(e,t,n)=>{let i=(0,ej.yj)(e);if(!i)return;let{FrameOfReferenceUID:a,referencedImageId:o,viewPlaneNormal:r,instance:l,viewport:s}=this.hydrateBase(Cl,i,t,n),{toolInstance:d,...h}=n||{};th({annotationUID:n?.annotationUID||eX.A(),data:{handles:{points:t}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:l.getToolName(),viewPlaneNormal:r,FrameOfReferenceUID:a,referencedImageId:o,...h}},s.element),oX([s.id])}}handleSelectedCallback(e,t,n){let i,{element:a}=e.detail,{data:o}=t;t.highlighted=!0;let r=!1;n.worldPosition?r=!0:i=o.handles.points.findIndex(e=>e===n);let l=ox(a,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:i,movingTextBox:r},this._activateModify(a),o2(a),oX(l),e.preventDefault()}_calculateCachedStats(e,t,n){let i=e.data,{element:a}=n.viewport,{cachedStats:o}=i,r=Object.keys(o);for(let e=0;e<r.length;e++){let t=r[e],n=this.getTargetImageData(t);if(!n)continue;let{imageData:a,dimensions:l}=n,s=i.handles.points.map(e=>a.worldToIndex(e)),d=aU(n,s),{unit:h}=d,c=Cl.calculateLengthInIndex(d,s);this.isHandleOutsideImage=!Cl.isInsideVolume(l,s);let u={name:"length",value:c,unit:h,type:w.Linear};o[t]={length:c,unit:h,statsArray:[u]}}let l=e.invalidated;return e.invalidated=!1,l&&e9(e,a,eY.StatsUpdated),o}}function Cs(e,t){let{length:n,unit:i}=e.cachedStats[t];if(!(null==n||isNaN(n)))return[`${aD.A(n)} ${i}`]}let Cd=Cl,{transformWorldToIndex:Ch}=i9;class Cc extends sd{static{this.toolName="Height"}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:Cu}}){super(e,t),this.addNewAnnotation=e=>{let{currentPoints:t,element:n}=e.detail,i=t.world;o2(n),this.isDrawing=!0;let a=this.createAnnotation(e,[[...i],[...i]]);th(a,n);let o=ox(n,this.getToolName());return this.editData={annotation:a,viewportIdsToRender:o,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(n),e.preventDefault(),oX(o),a},this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,[r,l]=o.handles.points,s=a.worldToCanvas(r),d=a.worldToCanvas(l),h={start:{x:s[0],y:s[1]},end:{x:d[0],y:d[1]}};return u8([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(n),o2(n),(0,ej.Ay)(n),oX(i),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;if(a&&!o)return;r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t);let{renderingEngine:l}=(0,ej.Ay)(t);this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),this.doneEditMemo(),a&&e7(n),this.editData=null,this.isDrawing=!1},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:o,movingTextBox:r,newAnnotation:l}=this.editData,{data:s}=i;if(this.createMemo(n,i,{newAnnotation:l}),r){let{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else if(void 0===o){let{deltaPoints:e}=t,n=e.world;s.handles.points.forEach(e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]}),i.invalidated=!0}else{let{currentPoints:e}=t,n=e.world;s.handles.points[o]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;let{renderingEngine:d}=(0,ej.Ay)(n);oX(a)},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,(0,ej.Ay)(e),oX(n),i&&e7(t),this.editData=null,t.annotationUID}},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r=this.getTargetId(i),l=i.getRenderingEngine(),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let a=0;a<o.length;a++){let d,h=o[a],{annotationUID:c,data:u}=h,{points:g,activeHandleIndex:m}=u.handles;s.annotationUID=c;let{color:p,lineWidth:f,lineDash:v,shadow:I}=this.getAnnotationStyle({annotation:h,styleSpecifier:s}),C=g.map(e=>i.worldToCanvas(e));if(u.cachedStats[r]&&null!=u.cachedStats[r].unit?h.invalidated&&this._throttledCalculateCachedStats(h,l,e):(u.cachedStats[r]={length:null,unit:null},this._calculateCachedStats(h,l,e)),!l6(c))continue;iN(c)||this.editData||null===m||(d=[C[m]]);let _=!!lz("showHandlesAlways",{});if((d||_)&&li(t,c,"0",C,{color:p,lineDash:v,lineWidth:f}),us(t,c,"0",C[0],C[1],{color:p,width:f,lineDash:v}),n=!0,!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}let E=this.getLinkedTextBoxStyle(s,h);if(!E.visibility){u.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}let w=this.configuration.getTextLines(u,r);if(!u.handles.textBox.hasMoved){let e=lS(C);u.handles.textBox.worldPosition=i.canvasToWorld(e)}let{x:A,y:S,width:y,height:b}=lA(t,c,"1",w,i.worldToCanvas(u.handles.textBox.worldPosition),C,{},E);u.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([A,S]),topRight:i.canvasToWorld([A+y,S]),bottomLeft:i.canvasToWorld([A,S+b]),bottomRight:i.canvasToWorld([A+y,S+b])}}return n},this._throttledCalculateCachedStats=oA(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){let i,{element:a}=e.detail,{data:o}=t;t.highlighted=!0;let r=!1;n.worldPosition?r=!0:i=o.handles.points.findIndex(e=>e===n);let l=ox(a,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:i,movingTextBox:r},this._activateModify(a),o2(a);let{renderingEngine:s}=(0,ej.Ay)(a);oX(l),e.preventDefault()}_calculateHeight(e,t){let n=t[0]-e[0],i=t[1]-e[1],a=t[2]-e[2];if(0==n)if(0!=i)return Math.abs(a);else return 0;return 0==i?Math.abs(a):0==a?Math.abs(i):void 0}
312_calculateCachedStats(e,t,n){let i=e.data,{element:a}=n.viewport,o=i.handles.points[0],r=i.handles.points[1],{cachedStats:l}=i,s=Object.keys(l);for(let e=0;e<s.length;e++){let t=s[e],n=this.getTargetImageData(t);if(!n)continue;let{imageData:i,dimensions:a}=n,d=Ch(i,o),h=Ch(i,r),{scale:c,unit:u}=aU(n,[d,h]),g=this._calculateHeight(o,r)/c,m=this._isInsideVolume(d,h,a);this.isHandleOutsideImage=m,l[t]={height:g,unit:u}}let d=e.invalidated;return e.invalidated=!1,d&&e9(e,a,eY.StatsUpdated),l}_isInsideVolume(e,t,n){return lF.A(e,n)&&lF.A(t,n)}}function Cu(e,t){let{height:n,unit:i}=e.cachedStats[t];if(!(null==n||isNaN(n)))return[`${aD.A(n)} ${i}`]}let Cg=Cc;var Cm=n(3152),Cp=n(65682);let{RENDERING_DEFAULTS:Cf}=i$;function Cv(){return"rgb(0, 200, 0)"}function CI(){return!0}function CC(){return!0}function C_(){return!0}let CE={DRAG:1,ROTATE:2,SLAB:3};class Cw extends sd{constructor(e={},t={supportedInteractionTypes:["Mouse"],configuration:{shadow:!0,viewportIndicators:!1,viewportIndicatorsConfig:{radius:5,x:null,y:null},autoPan:{enabled:!1,panSize:10},handleRadius:3,enableHDPIHandles:!1,referenceLinesCenterGapRadius:20,referenceLinesCenterGapRatio:null,filterActorUIDsToSetSlabThickness:[],slabThicknessBlendMode:i7.A.MAXIMUM_INTENSITY_BLEND,centerPoint:{enabled:!1,color:"rgba(255, 255, 0, 0.5)",size:2},mobile:{enabled:!1,opacity:.8,handleRadius:9,referenceLinesCenterGapRatio:.05}}}){super(e,t),this.toolCenter=[0,0,0],this.initializeViewport=({renderingEngineId:e,viewportId:t})=>{let n=(0,ej.b1)(t,e);if(!n)return;let{FrameOfReferenceUID:i,viewport:a}=n,{element:o}=a,{position:r,focalPoint:l,viewPlaneNormal:s}=a.getCamera(),d=this._getAnnotations(n);return d=this.filterInteractableAnnotationsForElement(o,d),d?.length&&tu(d[0].annotationUID),th({highlighted:!1,metadata:{cameraPosition:[...r],cameraFocalPoint:[...l],FrameOfReferenceUID:i,toolName:this.getToolName()},data:{handles:{rotationPoints:[],slabThicknessPoints:[],toolCenter:this.toolCenter},activeOperation:null,activeViewportIds:[],viewportId:t}},o),{normal:s,point:a.canvasToWorld([a.canvas.clientWidth/2,a.canvas.clientHeight/2])}},this._getViewportsInfo=()=>s3(this.toolGroupId).viewportsInfo,this.resetCrosshairs=()=>{let e=this._getViewportsInfo();for(let t of e){let{viewportId:e,renderingEngineId:n}=t,i=(0,ej.b1)(e,n),a=i.viewport;a.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,resetRotation:!0,suppressEvents:!0}),a.resetSlabThickness();let{element:o}=a,r=this._getAnnotations(i);(r=this.filterInteractableAnnotationsForElement(o,r)).length&&tu(r[0].annotationUID),a.render()}this._computeToolCenter(e)},this.computeToolCenter=()=>{let e=this._getViewportsInfo();this._computeToolCenter(e)},this._computeToolCenter=e=>{if(!e.length||1===e.length)return void console.warn("For crosshairs to operate, at least two viewports must be given.");let[t,n,i]=e,{normal:a,point:o}=this.initializeViewport(t),{normal:r,point:l}=this.initializeViewport(n),s=[0,0,0],d=iT.vt();i?{normal:s,point:d}=this.initializeViewport(i):(iT.WQ(d,o,l),iT.hs(d,d,.5),iT.$A(s,a,r));let h=uN.planeEquation(a,o),c=uN.planeEquation(r,l),u=uN.planeEquation(s,d),g=uN.threePlaneIntersection(h,c,u);this.setToolCenter(g)},this.addNewAnnotation=e=>{let t=e.detail,{element:n}=t,{currentPoints:i}=t,a=i.world,o=(0,ej.Ay)(n),{viewport:r}=o;this._jump(o,a);let l=this._getAnnotations(o),s=this.filterInteractableAnnotationsForElement(r.element,l),{data:d}=s[0],{rotationPoints:h}=d.handles,c=[];for(let e=0;e<h.length-1;++e){let t=h[e][1],n=this._getReferenceLineControllable(t.id),i=this._getReferenceLineDraggableRotatable(t.id);n&&i&&(c.push(t.id),e++)}return d.activeViewportIds=[...c],d.handles.activeOperation=CE.DRAG,e.preventDefault(),o2(n),this._activateModify(n),s[0]},this.cancel=()=>{console.log("Not implemented yet")},this.handleSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0,this._activateModify(n),o2(n),e.preventDefault()},this.isPointNearTool=(e,t,n,i)=>!!this._pointNearTool(e,t,n,6),this.toolSelectedCallback=(e,t,n)=>{let{element:i}=e.detail;t.highlighted=!0,this._activateModify(i),o2(i),e.preventDefault()},this.onCameraModified=e=>{let{element:t}=e.detail,n=(0,ej.Ay)(t),{renderingEngine:i}=n,a=n.viewport,o=this._getAnnotations(n),r=this.filterInteractableAnnotationsForElement(t,o)[0];if(!r)return;let l=a.getCamera(),s=r.metadata.cameraPosition,d=[0,0,0];IT.Ay.subtract(l.position,s,d);let h=r.metadata.cameraFocalPoint,c=[0,0,0];IT.Ay.subtract(l.focalPoint,h,c),r.metadata.cameraPosition=[...l.position],r.metadata.cameraFocalPoint=[...l.focalPoint];let u=this._getReferenceLineControllable(a.id),g=this._getReferenceLineDraggableRotatable(a.id);if(!aM.n4(l.position,s,.001)&&u&&g){let e=!1;aM.n4(d,c,.001)||(e=!0);let t=.01>Math.abs(IT.Ay.dot(d,l.viewPlaneNormal));e||t||(this.toolCenter[0]+=d[0],this.toolCenter[1]+=d[1],this.toolCenter[2]+=d[2],(0,eq.A)(ez.A,eK.CROSSHAIR_TOOL_CENTER_CHANGED,{toolGroupId:this.toolGroupId,toolCenter:this.toolCenter}))}this.configuration.autoPan?.enabled&&oy(a.id,i.id).getViewportIds().filter(e=>
312e!==a.id).forEach(e=>{this._autoPanViewportIfNecessary(e,i)}),oX(ox(t,this.getToolName(),!1))},this.onResetCamera=e=>{this.resetCrosshairs()},this.mouseMoveCallback=(e,t)=>{let{element:n,currentPoints:i}=e.detail,a=i.canvas,o=!1;for(let e=0;e<t.length;e++){let i=t[e];if(iN(i.annotationUID))continue;let{data:r,highlighted:l}=i;if(!r.handles)continue;let s=r.handles.activeOperation,d=r.activeViewportIds&&r.activeViewportIds.length>0?[...r.activeViewportIds]:[];r.activeViewportIds=[],r.handles.activeOperation=null;let h=this.getHandleNearImagePoint(n,i,a,6),c=!1,u=(c=!!h||this._pointNearTool(n,i,a,6))&&!l,g=!c&&l;u||g?(i.highlighted=!l,o=!0):r.handles.activeOperation===s&&this._areViewportIdArraysEqual(r.activeViewportIds,d)||(o=!0)}return o},this.filterInteractableAnnotationsForElement=(e,t)=>{if(!t||!t.length)return[];let{viewportId:n}=(0,ej.Ay)(e);return t.filter(e=>e.data.viewportId===n)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i,renderingEngine:a}=e,{element:o}=i,r=this._getAnnotations(e),l=i.getCamera(),s=this.filterInteractableAnnotationsForElement(o,r)[0];if(!r?.length||!s?.data)return n;let d=s.annotationUID,{clientWidth:h,clientHeight:c}=i.canvas,u=Math.sqrt(h*h+c*c),g=Math.min(h,c),m=s.data,p=i.worldToCanvas(this.toolCenter),f=this._filterAnnotationsByUniqueViewportOrientations(e,r),v=[],I=[0,0,h,c];f.forEach(e=>{let{data:t}=e;t.handles.toolCenter=this.toolCenter;let n=a.getViewport(t.viewportId),o=n.getCamera(),r=this._getReferenceLineControllable(n.id),s=this._getReferenceLineDraggableRotatable(n.id),d=this._getReferenceLineSlabThicknessControlsOn(n.id),{clientWidth:h,clientHeight:c}=n.canvas,m=Math.sqrt(h*h+c*c),C=n.canvasToWorld([.5*h,.5*c]),_=[0,0,0];IT.Ay.cross(l.viewPlaneNormal,o.viewPlaneNormal,_),IT.Ay.normalize(_),IT.Ay.multiplyScalar(_,m);let E=[0,0,0];IT.Ay.add(C,_,E);let w=[0,0,0];IT.Ay.subtract(C,_,w);let A=i.worldToCanvas(E),S=i.worldToCanvas(C),y=aZ.vt();aZ.Re(y,A,S),aZ.S8(y,y);let b=aZ.vt();aZ.hs(b,y,100*u);let T=aZ.vt();aZ.hs(T,y,.4*g);let M=aZ.vt();aZ.hs(M,y,.2*g);let D=aZ.vt(),O=this.configuration.mobile,{referenceLinesCenterGapRatio:x}=O?.enabled?O:this.configuration,P=x>0?g*x:this.configuration.referenceLinesCenterGapRadius;aZ.hs(D,y,2===f.length?P:0);let L=aZ.vt(),N=aZ.vt(),R=aZ.vt(),k=aZ.vt(),U=aZ.o8(p);s&&r||(U=aZ.o8(S)),aZ.WQ(L,U,D),aZ.WQ(N,U,b),aZ.Re(R,U,D),aZ.Re(k,U,b),pw(L,N,I),pw(R,k,I);let V=aZ.vt();aZ.Re(V,p,T);let F=aZ.vt();aZ.WQ(F,p,T);let G=aZ.o8(p);!s&&d&&(G=aZ.o8(S));let B=[...this.toolCenter];!s&&d&&(B=[...C]);let H=[0,0,0];IT.Ay.subtract(E,w,H),IT.Ay.normalize(H);let{viewPlaneNormal:W}=l,{matrix:$}=Cm.A.buildFromDegree().rotate(90,W),z=[0,0,0];iT.Z0(z,H,$);let X=n.getSlabThickness(),j=[...z];IT.Ay.multiplyScalar(j,X);let q=[0,0,0];IT.Ay.add(B,j,q);let K=i.worldToCanvas(q),Y=aZ.vt();aZ.Re(Y,G,K);let Z=aZ.vt();aZ.Re(Z,G,b),aZ.WQ(Z,Z,Y);let J=aZ.vt();aZ.WQ(J,G,b),aZ.WQ(J,J,Y),pw(Z,J,I);let Q=aZ.vt();aZ.WQ(Q,G,b),aZ.Re(Q,Q,Y);let ee=aZ.vt();aZ.Re(ee,G,b),aZ.Re(ee,ee,Y),pw(Q,ee,I);let et=aZ.vt(),en=aZ.vt(),ei=aZ.vt(),ea=aZ.vt();aZ.Re(et,G,M),aZ.WQ(et,et,Y),aZ.WQ(en,G,M),aZ.WQ(en,en,Y),aZ.Re(ei,G,M),aZ.Re(ei,ei,Y),aZ.WQ(ea,G,M),aZ.Re(ea,ea,Y),v.push([n,L,N,R,k,Z,J,Q,ee,V,F,et,en,ei,ea])});let C=[],_=[],E=this._getReferenceLineColor(i.id),w=void 0!==E?E:"rgb(200, 200, 200)";if(v.forEach((e,n)=>{let a=e[0],o=this._getReferenceLineColor(a.id),r=this._getReferenceLineControllable(a.id),l=this._getReferenceLineDraggableRotatable(a.id)||this.configuration.mobile?.enabled,s=this._getReferenceLineSlabThicknessControlsOn(a.id)||this.configuration.mobile?.enabled,h=m.activeViewportIds.find(e=>e===a.id),c=void 0!==o?o:"rgb(200, 200, 200)",u=1,g=null!==m.handles.activeOperation&&m.handles.activeOperation===CE.DRAG&&h;g&&(u=2.5);let p=`${n}`;if(r&&l?(l_(t,d,p=`${n}One`,e[1],e[2],{color:c,lineWidth:u}),l_(t,d,p=`${n}Two`,e[3],e[4],{color:c,lineWidth:u})):l_(t,d,p,e[2],e[4],{color:c,lineWidth:u}),r){c=void 0!==o?o:"rgb(200, 200, 200)";let r=m.handles.activeOperation===CE.ROTATE,u=[e[9],e[10]],f=[i.canvasToWorld(e[9]),a,e[1],e[2]],v=[i.canvasToWorld(e[10]),a,e[3],e[4]];C.push(f,v);let I=m.handles.activeOperation===CE.SLAB,E=[e[11],e[12],e[13],e[14]],w=[i.canvasToWorld(e[11]),a,e[5],e[6]],A=[i.canvasToWorld(e[12]),a,e[5],e[6]],S=[i.canvasToWorld(e[13]),a,e[7],e[8]],y=[i.canvasToWorld(e[14]),a,e[7],e[8]];_.push(w,A,S,y);let b=this.configuration.handleRadius*(this.configuration.enableHDPIHandles?window.devicePixelRatio:1),T=1;if(this.configuration.mobile?.enabled&&(b=this.configuration.mobile.handleRadius,T=this.configuration.mobile.opacity),(g||this.configuration.mobile?.enabled)&&!r&&!I&&l&&s){let e=`${n}One`;li(t,d,e,u,{color:c,handleRadius:b,opacity:T,type:"circle"}),li(t,d,e=`${n}Two`,E,{color:c,handleRadius:b,opacity:T,type:"rect"})}else g&&!r&&!I&&l?li(t,d,`${n}`,u,{color:c,handleRadius:b,opacity:T,type:"circle"}):h&&!r&&!I&&s?li(t,d,`${n}`,E,{color:c,handleRadius:b,opacity:T,type:"rect"}):r&&l?li(t,d,`${n}`,u,{color:c,handleRadius:this.configuration.handleRadius*(this.configuration.enableHDPIHandles?window.devicePixelRatio:1),fill:c,type:"circle"}):I&&h&&s&&li(t,d,p,E,{color:c,handleRadius:this.configuration.handleRadius*(this.configuration.enableHDPIHandles?window.devicePixelRatio:1),fill:c,type:"rect"});a.getSlabThickness()>.5&&s&&(l_(t,d,p=`${n}STOne`,e[5],e[6],{color:c,width:1,lineDash:[2,3]}),l_(t,d,p=`${n}STTwo`,e[7],e[8],{color:c,width:e,lineDash:[2,3]}))}}),n=!0,m.handles.rotationPoints=C,m.handles.slabThicknessPoints=_,this.configuration.viewportIndicators){let{viewportIndicatorsConfig:e}=this.configuration,n=e?.xOffset||.95,i=e?.yOffset||.05;uo(t,d,"0",[h*n,c*i],e?.circleRadius||.01*u,{color:w,fill:w})}if(this.configuration.centerPoint?.enabled){let e=this.configuration.centerPoint.color||"rgba(255, 255, 0, 0.5)";uo(t,d,"centerPoint",p,Math.min(this.configuration.centerPoint.size||2,5),{color:e,fill:e})}return n},this._getAnnotations=e=>{let{viewport:t}=e,n=ti(this.getToolName(),t.element)||[],i=this._getViewportsInfo().map(({viewportId:e})=>e);return n.filter(e=>{let{data:t}=e;return i.includes(t.viewportId)})},this._onNewVolume=()=>{let e=this._getViewportsInfo();this._computeToolCenter(e)},this._areViewportIdArraysEqual=(e,t)=>
312e.length===t.length&&(e.forEach(e=>{let n=!1;for(let i=0;i<t.length;++i)if(e===t[i]){n=!0;break}if(!1===n)return!1}),!0),this._getAnnotationsForViewportsWithDifferentCameras=(e,t)=>{let{viewportId:n,renderingEngine:i,viewport:a}=e,o=t.filter(e=>e.data.viewportId!==n);if(!o||!o.length)return[];let{viewPlaneNormal:r,position:l}=a.getCamera();return o.filter(e=>{let{viewportId:t}=e.data,n=i.getViewport(t).getCamera();return!(aM.n4(n.viewPlaneNormal,r,.01)&&aM.n4(n.position,l,1))})},this._filterViewportWithSameOrientation=(e,t,n)=>{let{renderingEngine:i}=e,{data:a}=t,o=i.getViewport(a.viewportId),r=n.filter(e=>{let{data:t}=e,n=i.getViewport(t.viewportId);return!0===this._getReferenceLineControllable(n.id)});if(!r||!r.length)return[];let l=o.getCamera(),s=l.viewPlaneNormal;return IT.Ay.normalize(s),r.filter(e=>{let{viewportId:t}=e.data,n=i.getViewport(t).getCamera(),a=n.viewPlaneNormal;return IT.Ay.normalize(a),aM.n4(s,a,.01)&&aM.n4(l.viewUp,n.viewUp,.01)})},this._filterAnnotationsByUniqueViewportOrientations=(e,t)=>{let{renderingEngine:n,viewport:i}=e,a=i.getCamera().viewPlaneNormal;IT.Ay.normalize(a);let o=t.filter(e=>{let{data:t}=e,a=n.getViewport(t.viewportId),o=this._getReferenceLineControllable(a.id);return i!==a&&!0===o}),r=[];for(let e=0;e<o.length;++e){let t=o[e],{viewportId:i}=t.data,l=n.getViewport(i).getCamera(),s=l.viewPlaneNormal;if(IT.Ay.normalize(s),aM.n4(a,s,.01)||Cp.A(a,s,.01))continue;let d=!1;for(let e=0;e<r.length;++e){let{viewportId:t}=r[e].data,i=n.getViewport(t).getCamera();aM.n4(i.viewPlaneNormal,l.viewPlaneNormal,.01)&&aM.n4(i.position,l.position,1)&&(d=!0)}d||r.push(t)}let l=t.filter(e=>{let{data:t}=e,a=n.getViewport(t.viewportId),o=this._getReferenceLineControllable(a.id);return i!==a&&!0!==o});for(let e=0;e<l.length;++e){let t=l[e],{viewportId:i}=t.data,o=n.getViewport(i).getCamera(),s=o.viewPlaneNormal;if(IT.Ay.normalize(s),aM.n4(a,s,.01)||Cp.A(a,s,.01))continue;let d=!1;for(let e=0;e<r.length;++e){let{viewportId:t}=r[e].data,i=n.getViewport(t).getCamera();aM.n4(i.viewPlaneNormal,o.viewPlaneNormal,.01)&&aM.n4(i.position,o.position,1)&&(d=!0)}d||r.push(t)}let s=this._getAnnotationsForViewportsWithDifferentCameras(e,t);for(let e=0;e<s.length;++e){let t=s[e];if(r.some(e=>e===t))continue;let{viewportId:i}=t.data,o=n.getViewport(i).getCamera(),l=o.viewPlaneNormal;if(IT.Ay.normalize(l),aM.n4(a,l,.01)||Cp.A(a,l,.01))continue;let d=!1;for(let e=0;e<r.length;++e){let{viewportId:t}=r[e].data,i=n.getViewport(t).getCamera();aM.n4(i.viewPlaneNormal,o.viewPlaneNormal,.01)&&aM.n4(i.position,o.position,1)&&(d=!0)}d||r.push(t)}return r},this._checkIfViewportsRenderingSameScene=(e,t)=>{let n=e.getAllVolumeIds(),i=t.getAllVolumeIds();return n.length===i.length&&n.every(e=>i.includes(e))},this._jump=(e,t)=>{e0.isInteractingWithTool=!0;let{viewport:n,renderingEngine:i}=e,a=this._getAnnotations(e),o=[0,0,0];IT.Ay.subtract(t,this.toolCenter,o);let r=this._getAnnotationsForViewportsWithDifferentCameras(e,a).filter(e=>{let{data:t}=e,a=i.getViewport(t.viewportId),o=this._checkIfViewportsRenderingSameScene(n,a);return this._getReferenceLineControllable(a.id)&&this._getReferenceLineDraggableRotatable(a.id)&&o});return 0===r.length?(e0.isInteractingWithTool=!1,!1):(this._applyDeltaShiftToSelectedViewportCameras(i,r,o),e0.isInteractingWithTool=!1,!0)},this._activateModify=e=>{e0.isInteractingWithTool=!this.configuration.mobile?.enabled,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this._endCallback=e=>{let{element:t}=e.detail;this.editData.annotation.data.handles.activeOperation=null,this.editData.annotation.data.activeViewportIds=[],this._deactivateModify(t),o1(t),this.editData=null,oX(ox(t,this.getToolName(),!1))},this._dragCallback=e=>{let t=e.detail,n=t.deltaPoints.world;if(.001>Math.abs(n[0])&&.001>Math.abs(n[1])&&.001>Math.abs(n[2]))return;let{element:i}=t,a=(0,ej.Ay)(i),{renderingEngine:o,viewport:r}=a,l=this._getAnnotations(a),s=this.filterInteractableAnnotationsForElement(i,l)[0];if(!s)return;let{handles:d}=s.data,{currentPoints:h}=e.detail,c=h.canvas;if(d.activeOperation===CE.DRAG){let e=this._getAnnotationsForViewportsWithDifferentCameras(a,l).filter(e=>{let{data:t}=e,n=o.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),a=this._getReferenceLineDraggableRotatable(n.id);return!0===i&&!0===a&&s.data.activeViewportIds.find(e=>e===n.id)});this._applyDeltaShiftToSelectedViewportCameras(o,e,n)}else if(d.activeOperation===CE.ROTATE){let e=this._getAnnotationsForViewportsWithDifferentCameras(a,l).filter(e=>{let{data:t}=e,n=o.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),a=this._getReferenceLineDraggableRotatable(n.id);return!0===i&&!0===a}),n=aZ.vt(),i=aZ.vt(),s=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]],d=r.worldToCanvas(s),h=t.currentPoints.canvas,c=aZ.vt();aZ.jb(c,h,t.deltaPoints.canvas),aZ.jb(n,c,d),aZ.jb(i,h,d);let u=aZ.g7(n,i);
312this._isClockWise(d,c,h)&&(u*=-1),u=Math.round(100*u)/100;let g=r.getCamera().viewPlaneNormal,{matrix:m}=Cm.A.buildFromRadian().translate(s[0],s[1],s[2]).rotate(u,g).translate(-s[0],-s[1],-s[2]),p=[];e.forEach(e=>{let{data:t}=e;t.handles.toolCenter=s;let n=o.getViewport(t.viewportId),{viewUp:i,position:a,focalPoint:r}=n.getCamera();i[0]+=a[0],i[1]+=a[1],i[2]+=a[2],iT.Z0(r,r,m),iT.Z0(a,a,m),iT.Z0(i,i,m),i[0]-=a[0],i[1]-=a[1],i[2]-=a[2],n.setCamera({position:a,viewUp:i,focalPoint:r}),p.push(n.id)}),o.renderViewports(p)}else if(d.activeOperation===CE.SLAB){let e=this._getAnnotationsForViewportsWithDifferentCameras(a,l).filter(e=>{let{data:t}=e,n=o.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),a=this._getReferenceLineSlabThicknessControlsOn(n.id);return!0===i&&!0===a&&s.data.activeViewportIds.find(e=>e===n.id)});if(0===e.length)return;let i=this._filterViewportWithSameOrientation(a,e[0],l),d=[];d.push(r.id),i.forEach(e=>{let{data:i}=e,a=o.getViewport(i.viewportId),l=a.getCamera().viewPlaneNormal,h=IT.Ay.dot(n,l),u=[...l];if(IT.Ay.multiplyScalar(u,h),Math.abs(u[0])>.001||Math.abs(u[1])>.001||Math.abs(u[2])>.001){let e=Math.sqrt(u[0]*u[0]+u[1]*u[1]+u[2]*u[2]),n=t.lastPoints.world,i=[0,0,0],h=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]];if(!this._getReferenceLineDraggableRotatable(a.id)){let{rotationPoints:e}=this.editData.annotation.data.handles,t=e.filter(e=>e[1].uid===a.id);if(2===t.length){let e=r.canvasToWorld(t[0][3]),n=r.canvasToWorld(t[1][3]);IT.Ay.add(e,n,h),IT.Ay.multiplyScalar(h,.5)}}IT.Ay.subtract(n,h,i);let g=IT.Ay.dot(i,l),m=[...l];IT.Ay.multiplyScalar(m,g);let p=[m[0],m[1],m[2]];iT.S8(p,p);let f=[u[0],u[1],u[2]];iT.S8(f,f);let v=a.getSlabThickness();Cp.A(p,f,.001)?v-=e:v+=e,v=Math.abs(v),v=Math.max(Cf.MINIMUM_SLAB_THICKNESS,v),this._pointNearReferenceLine(s,c,6,a)&&(v=Cf.MINIMUM_SLAB_THICKNESS),oy(a.id,o.id).getToolInstance(this.getToolName()).setSlabThickness(a,v),d.push(a.id)}}),o.renderViewports(d)}},this._pointNearReferenceLine=(e,t,n,i)=>{let{data:a}=e,{rotationPoints:o}=a.handles;for(let e=0;e<o.length-1;++e){let a=o[e][1];if(a.id!==i.id||!this._getReferenceLineControllable(a.id))continue;let r={start:{x:o[e][2][0],y:o[e][2][1]},end:{x:o[e][3][0],y:o[e][3][1]}},l=u8([r.start.x,r.start.y],[r.end.x,r.end.y],[t[0],t[1]]),s={start:{x:o[e+1][2][0],y:o[e+1][2][1]},end:{x:o[e+1][3][0],y:o[e+1][3][1]}},d=u8([s.start.x,s.start.y],[s.end.x,s.end.y],[t[0],t[1]]);if(l<=n||d<=n)return!0;e++}return!1},this._getReferenceLineColor=e.configuration?.getReferenceLineColor||Cv,this._getReferenceLineControllable=e.configuration?.getReferenceLineControllable||CI,this._getReferenceLineDraggableRotatable=e.configuration?.getReferenceLineDraggableRotatable||CC,this._getReferenceLineSlabThicknessControlsOn=e.configuration?.getReferenceLineSlabThicknessControlsOn||C_}onSetToolActive(){let e=this._getViewportsInfo();this._unsubscribeToViewportNewVolumeSet(e),this._subscribeToViewportNewVolumeSet(e),this._computeToolCenter(e)}onSetToolPassive(){let e=this._getViewportsInfo();this._computeToolCenter(e)}onSetToolEnabled(){let e=this._getViewportsInfo();this._computeToolCenter(e)}onSetToolDisabled(){let e=this._getViewportsInfo();this._unsubscribeToViewportNewVolumeSet(e),e.forEach(({renderingEngineId:e,viewportId:t})=>{let n=(0,ej.b1)(t,e);if(!n)return;let i=this._getAnnotations(n);i?.length&&i.forEach(e=>{tu(e.annotationUID)})})}setToolCenter(e,t=!1){this._getViewportsInfo().map(({renderingEngineId:t,viewportId:n})=>{let i=(0,nG.lD)(t).getViewport(n),{focalPoint:a,position:o,viewPlaneNormal:r}=i.getCamera(),l=[e[0]-a[0],e[1]-a[1],e[2]-a[2]],s=l[0]*r[0]+l[1]*r[1]+l[2]*r[2],d=[s*r[0],s*r[1],s*r[2]],h=[a[0]+d[0],a[1]+d[1],a[2]+d[2]],c=[o[0]+d[0],o[1]+d[1],o[2]+d[2]];i.setCamera({focalPoint:h,position:c}),i.render()}),this.toolCenter=e,t||(0,eq.A)(ez.A,eK.CROSSHAIR_TOOL_CENTER_CHANGED,{toolGroupId:this.toolGroupId,toolCenter:this.toolCenter})}getHandleNearImagePoint(e,t,n,i){let{viewport:a}=(0,ej.Ay)(e),o=this._getRotationHandleNearImagePoint(a,t,n,i);if(null!==o||null!==(o=this._getSlabThicknessHandleNearImagePoint(a,t,n,i)))return o}_unsubscribeToViewportNewVolumeSet(e){e.forEach(({viewportId:e,renderingEngineId:t})=>{let{viewport:n}=(0,ej.b1)(e,t),{element:i}=n;i.removeEventListener(e$.A.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)})}_subscribeToViewportNewVolumeSet(e){e.forEach(({viewportId:e,renderingEngineId:t})=>{let{viewport:n}=(0,ej.b1)(e,t),{element:i}=n;i.addEventListener(e$.A.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)})}_autoPanViewportIfNecessary(e,t){let n=t.getViewport(e),{clientWidth:i,clientHeight:a}=n.canvas,o=n.worldToCanvas(this.toolCenter),r=this.configuration.autoPan.panSize,l=[o[0],o[1]];if(o[0]<0?l[0]=r:o[0]>i&&(l[0]=i-r),o[1]<0?l[1]=r:o[1]>a&&(l[1]=a-r),l[0]===o[0]&&l[1]===o[1])return;let s=n.canvasToWorld(l),d=[s[0]-this.toolCenter[0],s[1]-this.toolCenter[1],s[2]-this.toolCenter[2]],{focalPoint:h,position:c}=n.getCamera(),u=[c[0]-d[0],c[1]-d[1],c[2]-d[2]],g=[h[0]-d[0],h[1]-d[1],h[2]-d[2]];n.setCamera({focalPoint:g,position:u}),n.render()}setSlabThickness(e,t){let n,{filterActorUIDsToSetSlabThickness:i}=this.configuration;i&&i.length>0&&(n=i);let a=this.configuration.slabThicknessBlendMode;t===Cf.MINIMUM_SLAB_THICKNESS&&(a=i7.A.COMPOSITE),e.setBlendMode(a,n,!1),e.setSlabThickness(t,n)}_isClockWise(e,t,n){return(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0])>0}_applyDeltaShiftToSelectedViewportCameras(e,t,n){t.forEach(t=>{this._applyDeltaShiftToViewportCamera(e,t,n)})}_applyDeltaShiftToViewportCamera(e,t,n){let{data:i}=t,a=e.getViewport(i.viewportId),o=a.getCamera(),r=o.viewPlaneNormal,l=IT.Ay.dot(n,r),s=[...r];
312if(IT.Ay.multiplyScalar(s,l),Math.abs(s[0])>.001||Math.abs(s[1])>.001||Math.abs(s[2])>.001){let e=[0,0,0],t=[0,0,0];IT.Ay.add(o.focalPoint,s,e),IT.Ay.add(o.position,s,t),a.setCamera({focalPoint:e,position:t}),a.render()}}_getRotationHandleNearImagePoint(e,t,n,i){let{data:a}=t,{rotationPoints:o}=a.handles;for(let r=0;r<o.length;r++){let l=o[r][0],s=o[r][1];if(!this._getReferenceLineControllable(s.id)||!this._getReferenceLineDraggableRotatable(s.id))continue;let d=e.worldToCanvas(l);if(aZ.Io(n,d)<i)return a.handles.activeOperation=CE.ROTATE,this.editData={annotation:t},l}return null}_getSlabThicknessHandleNearImagePoint(e,t,n,i){let{data:a}=t,{slabThicknessPoints:o}=a.handles;for(let r=0;r<o.length;r++){let l=o[r][0],s=o[r][1];if(!this._getReferenceLineControllable(s.id)||!this._getReferenceLineSlabThicknessControlsOn(s.id))continue;let d=e.worldToCanvas(l);if(aZ.Io(n,d)<i)return a.handles.activeOperation=CE.SLAB,a.activeViewportIds=[s.id],this.editData={annotation:t},l}return null}_pointNearTool(e,t,n,i){let{viewport:a}=(0,ej.Ay)(e),{clientWidth:o,clientHeight:r}=a.canvas,l=Math.sqrt(o*o+r*r),{data:s}=t,{rotationPoints:d}=s.handles,{slabThicknessPoints:h}=s.handles,c=[];for(let e=0;e<d.length-1;++e){let t=d[e][1],a=this._getReferenceLineControllable(t.id),o=this._getReferenceLineDraggableRotatable(t.id);if(!a||!o)continue;let r={start:{x:d[e][2][0],y:d[e][2][1]},end:{x:d[e][3][0],y:d[e][3][1]}},l=u8([r.start.x,r.start.y],[r.end.x,r.end.y],[n[0],n[1]]),h={start:{x:d[e+1][2][0],y:d[e+1][2][1]},end:{x:d[e+1][3][0],y:d[e+1][3][1]}},u=u8([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]]);(l<=i||u<=i)&&(c.push(t.id),s.handles.activeOperation=CE.DRAG),e++}for(let e=0;e<h.length-1;++e){let t=h[e][1];if(c.find(e=>e===t.id))continue;let a=this._getReferenceLineControllable(t.id),o=this._getReferenceLineSlabThicknessControlsOn(t.id);if(!a||!o)continue;let r=h[e][2],d=h[e][3],u=aZ.vt();aZ.WQ(u,r,d),aZ.hs(u,u,.5);let g=aZ.vt();aZ.Re(g,r,u),aZ.S8(g,g);let m=aZ.vt();aZ.hs(m,g,.05*l);let p=aZ.vt(),f=aZ.vt();aZ.WQ(p,u,m),aZ.Re(f,u,m);let v={start:{x:p[0],y:p[1]},end:{x:r[0],y:r[1]}},I=u8([v.start.x,v.start.y],[v.end.x,v.end.y],[n[0],n[1]]),C={start:{x:f[0],y:f[1]},end:{x:d[0],y:d[1]}},_=u8([C.start.x,C.start.y],[C.end.x,C.end.y],[n[0],n[1]]);(I<=i||_<=i)&&(c.push(t.id),s.handles.activeOperation=null),e++}return s.activeViewportIds=[...c],this.editData={annotation:t},s.handles.activeOperation===CE.DRAG}}Cw.toolName="Crosshairs";let CA=Cw;var CS=n(17875),Cy=n(56215),Cb=n(49465);let{EPSILON:CT}=i$;class CM extends l4{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceViewportId:"",enforceSameFrameOfReference:!0,showFullDimension:!1}}){super(e,t),this.editData=null,this._init=()=>{let e=(0,nG.qO)()[0];if(!e)return;let t=e.getViewports();t=oD(t,this.getToolName());let n=e.getViewport(this.configuration.sourceViewportId);if(!n?.getImageData())return;let{element:i}=n,{viewUp:a,viewPlaneNormal:o}=n.getCamera(),r=CS.A(n),l=this.editData?.annotation,s=n.getFrameOfReferenceUID();if(l)this.editData.annotation.data.handles.points=r;else{let e={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...o],viewUp:[...a],FrameOfReferenceUID:s,referencedImageId:null},data:{handles:{points:r}}};th(e,i),l=e}this.editData={sourceViewportId:n.id,renderingEngine:e,annotation:l},oX(t.filter(e=>e.id!==n.id).map(e=>e.id))},this.onSetToolEnabled=()=>{this._init()},this.onSetToolConfiguration=()=>{this._init()},this.onCameraModified=e=>{this._init()},this.renderAnnotation=(e,t)=>{let{viewport:n}=e;if(!this.editData)return!1;let{annotation:i,sourceViewportId:a}=this.editData,o=!1,{viewport:r}=(0,ej.yj)(a)||{};if(!r||r.id===n.id||!i||!i?.data?.handles?.points||this.configuration.enforceSameFrameOfReference&&r.getFrameOfReferenceUID()!==n.getFrameOfReferenceUID())return o;let l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},s=i.data.handles.points[0],d=i.data.handles.points[1],h=i.data.handles.points[2],c=i.data.handles.points[3],{focalPoint:u,viewPlaneNormal:g,viewUp:m}=n.getCamera(),{viewPlaneNormal:p}=r.getCamera();if(this.isParallel(g,p))return o;let f=uN.planeEquation(g,u),v=[s,h,d,c],I=v,C=iT.Re(iT.vt(),v[0],v[1]);C=iT.S8(iT.vt(),C);let _=iT.Re(iT.vt(),v[2],v[0]);
312_=iT.S8(iT.vt(),_);let E=iT.$A(iT.vt(),C,_);if(this.isParallel(E,g))return o;this.isPerpendicular(C,g)&&(I=[s,d,h,c]);let w=uN.linePlaneIntersection(I[0],I[1],f),A=uN.linePlaneIntersection(I[2],I[3],f),{annotationUID:S}=i;l.annotationUID=S;let y=this.getStyle("lineWidth",l,i),b=this.getStyle("lineDash",l,i),T=this.getStyle("color",l,i),M=this.getStyle("shadow",l,i),D=[w,A].map(e=>n.worldToCanvas(e));if(this.configuration.showFullDimension&&(D=this.handleFullDimension(n,w,g,m,A,D)),D.length<2)return o;let O=`${S}-line`;return l_(t,S,"1",D[0],D[1],{color:T,width:y,lineDash:b,shadow:M},O),o=!0},this.isPerpendicular=(e,t)=>Math.abs(iT.Om(e,t))<CT}handleFullDimension(e,t,n,i,a,o){e.getRenderingEngine();let r=this.getTargetId(e),l=this.getTargetImageData(r),s=this.getReferencedImageId(e,t,n,i);if(s&&l)try{let{imageData:n,dimensions:i}=l,[r,d,h,c]=[n.indexToWorld([0,0,0]),n.indexToWorld([i[0]-1,0,0]),n.indexToWorld([i[0]-1,i[1]-1,0]),n.indexToWorld([0,i[1]-1,0])].map(e=>Cy.A(s,e)),[u,g]=[t,a].map(e=>Cy.A(s,e));o=[[r,d],[d,h],[c,h],[r,c]].map(([e,t])=>this.intersectInfiniteLines(e,t,u,g)).filter(e=>e&&this.isInBound(e,i)).map(t=>{let n=Cb.A(s,t);return e.worldToCanvas(n)})}catch(e){console.log(e)}return o}intersectInfiniteLines(e,t,n,i){let[a,o]=e,[r,l]=t,[s,d]=n,[h,c]=i,u=l-o,g=a-r,m=r*o-a*l,p=c-d,f=s-h,v=h*d-s*c;if(!(Math.abs(u*f-p*g)<CT))return[(g*v-f*m)/(u*f-p*g),(p*m-u*v)/(u*f-p*g)]}isParallel(e,t){return Math.abs(iT.Om(e,t))>1-CT}isInBound(e,t){return e[0]>=0&&e[0]<=t[0]&&e[1]>=0&&e[1]<=t[1]}}CM.toolName="ReferenceLines";let CD=CM,{EPSILON:CO}=i$;class Cx extends l4{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceImageIds:[]}}){super(e,t),this.onSetToolEnabled=()=>{this._init()},this.onSetToolActive=()=>{this._init()},this._init=()=>{let e=this.configuration.sourceImageIds;if(!e?.length)return void console.warn("OverlayGridTool: No sourceImageIds provided in configuration");let t=ib.get("imagePlaneModule",e[0]);if(!t)return void console.warn("OverlayGridTool: No imagePlaneModule found for sourceImageIds");let{frameOfReferenceUID:n}=t,i=s3(this.toolGroupId).viewportsInfo;if(!i?.length)return void console.warn("OverlayGridTool: No viewports found");let a=ti(this.getToolName(),n);if(!a?.length){let t=e.map(e=>this.calculateImageIdPointSets(e));th({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:n,referencedImageId:null},data:{viewportData:new Map,pointSets:t}},n)}oX(i.map(({viewportId:e})=>e))},this.calculateImageIdPointSets=e=>{let{imagePositionPatient:t,rows:n,columns:i,rowCosines:a,columnCosines:o,rowPixelSpacing:r,columnPixelSpacing:l}=ib.get("imagePlaneModule",e),s=[...t],d=[...t],h=[...t],c=[...t];return iT.Ln(d,t,o,i*l),iT.Ln(h,t,a,n*r),iT.Ln(c,h,o,i*l),{pointSet1:[s,h,d,c],pointSet2:[s,d,h,c]}},this.renderAnnotation=(e,t)=>{let n=this.configuration.sourceImageIds,i=!1;if(!n?.length)return i;let{viewport:a,FrameOfReferenceUID:o}=e;if(a.getImageIds().length<2)return i;let r=ti(this.getToolName(),o);if(!r?.length)return i;let l=r[0],{annotationUID:s}=l,{focalPoint:d,viewPlaneNormal:h}=a.getCamera(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},u=this.getImageIdNormal(n[0]);if(this.isParallel(h,u))return i;let g=uN.planeEquation(h,d),m=l.data.pointSets,p=l.data.viewportData;for(let e=0;e<n.length;e++){let{pointSet1:n,pointSet2:i}=m[e],o=p.get(a.id)||this.initializeViewportData(p,a.id);if(!o.pointSetsToUse[e]){let t=n,a=iT.Re(iT.vt(),n[0],n[1]);a=iT.S8(iT.vt(),a),this.isPerpendicular(a,h)&&(t=i),o.pointSetsToUse[e]=t,o.lineStartsWorld[e]=uN.linePlaneIntersection(t[0],t[1],g),o.lineEndsWorld[e]=uN.linePlaneIntersection(t[2],t[3],g)}let r=o.lineStartsWorld[e],d=o.lineEndsWorld[e];c.annotationUID=s;let u=this.getStyle("lineWidth",c,l),f=this.getStyle("lineDash",c,l),v=this.getStyle("color",c,l),I=this.getStyle("shadow",c,l),C=[r,d].map(e=>a.worldToCanvas(e)),_=`${s}-line`;l_(t,s,`${e}`,C[0],C[1],{color:v,width:u,lineDash:f,shadow:I},_)}return!0},this.initializeViewportData=(e,t)=>(e.set(t,{pointSetsToUse:[],lineStartsWorld:[],lineEndsWorld:[]}),e.get(t)),this.isPerpendicular=(e,t)=>
312Math.abs(iT.Om(e,t))<CO}isParallel(e,t){return Math.abs(iT.Om(e,t))>1-CO}getImageIdNormal(e){let{imageOrientationPatient:t}=ib.get("imagePlaneModule",e),n=iT.fA(t[0],t[1],t[2]),i=iT.fA(t[3],t[4],t[5]);return iT.$A(iT.vt(),n,i)}}Cx.toolName="OverlayGrid";let CP=Cx;class CL extends l4{constructor(e={},t={configuration:{opacity:.5}}){super(e,t),this._init=()=>{let e=s3(this.toolGroupId).viewportsInfo;if(!e?.length)return void console.warn(this.getToolName()+"Tool: No viewports found");let t=(0,nG.lD)(e[0].renderingEngineId)?.getViewport(e[0].viewportId);if(!t)return;let n=t.getFrameOfReferenceUID(),i=ti(this.getToolName(),n);if(!i?.length){var a;let t=new Map;a=t,e.forEach(({viewportId:e,renderingEngineId:t})=>{CN(a,(0,nG.lD)(t)?.getViewport(e))}),th({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:n,referencedImageId:null},data:{actorsWorldPointsMap:t}},n)}oX(e.map(({viewportId:e})=>e))},this.onSetToolEnabled=()=>{this._init()},this.onCameraModified=e=>{this._init()},this.renderAnnotation=(e,t)=>{let{viewport:n,FrameOfReferenceUID:i}=e,a=!1,o=ti(this.getToolName(),i);if(!o?.length)return a;let r=o[0],{annotationUID:l}=r,s=r.data.actorsWorldPointsMap;CN(s,n);let d=n.getActors(),h=CR(n);return d.forEach(e=>{if(!e?.clippingFilter)return;let i=s.get(e.uid);if(!i||!i.get(h))return;let a=1,{worldPointsSet:o,color:r}=i.get(h);for(let i=0;i<o.length;i++){let s=o[i].map(e=>n.worldToCanvas(e)),d={color:r,fillColor:r,fillOpacity:this.configuration.opacity,closePath:!0,lineWidth:2};le(t,l,e.uid+"#"+a,s,d),a++}}),a=!0}}}function CN(e,t){let n=t.getActors(),i=CR(t);n.forEach(t=>{if(!t?.clippingFilter)return;let n=e.get(t.uid);if(n||(n=new Map,e.set(t.uid,n)),!n.get(i)){let e=fw(t.clippingFilter.getOutputData());if(!e)return;let a=function(e){function t(e){let t=Math.floor(255*e).toString(16);return 1===t.length&&(t="0"+t),t}return"#"+t(e[0])+t(e[1])+t(e[2])}(t.actor.getProperty().getColor());n.set(i,{worldPointsSet:e,color:a})}})}function CR(e){let{viewPlaneNormal:t}=e.getCamera(),n=e.getCurrentImageIdIndex();return`${e.id}-${uA(t)}-${n}`}CL.toolName="SegmentationIntersection";let Ck=CL;var CU=n(56440);let{transformWorldToIndex:CV}=i9;class CF extends sd{static{this.toolName="EllipticalROI"}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,storePointData:!1,centerPointRadius:0,calculateStats:!0,getTextLines:CG,statsCalculator:lP}}){super(e,t),this.isHandleOutsideImage=!1,this.addNewAnnotation=e=>{let{currentPoints:t,element:n}=e.detail,i=t.world;this.isDrawing=!0;let a=this.createAnnotation(e,[[...i],[...i],[...i],[...i]]);th(a,n);let o=ox(n,this.getToolName());return this.editData={annotation:a,viewportIdsToRender:o,centerWorld:i,newAnnotation:!0,hasMoved:!1},this._activateDraw(n),o2(n),e.preventDefault(),oX(o),a},this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,{points:r}=o.handles,[l,s,d,h]=r.map(e=>a.worldToCanvas(e)),c=Math.hypot(d[0]-h[0],d[1]-h[1]),u=Math.hypot(s[0]-l[0],s[1]-l[1]),g=Math.atan2(d[1]-h[1],d[0]-h[0]),m=[(d[0]+h[0])/2,(s[1]+l[1])/2],p=this._pointInEllipseCanvas({center:m,xRadius:(c-i)/2,yRadius:(u-i)/2,angle:g},n);return!!this._pointInEllipseCanvas({center:m,xRadius:(c+i)/2,yRadius:(u+i)/2,angle:g},n)&&!p},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},o2(n),this._activateModify(n);let{renderingEngine:a}=(0,ej.Ay)(n);oX(i),e.preventDefault()},this.handleSelectedCallback=(e,t,n)=>{let i,a,o,r,l,{element:s}=e.detail,{data:d}=t;t.highlighted=!0;let h=!1;if(n.worldPosition)h=!0;else{let{points:e}=d.handles,{viewport:t}=(0,ej.Ay)(s),{worldToCanvas:h,canvasToWorld:c}=t;i=e.findIndex(e=>e===n);let u=e.map(h);l=u[i],o=Math.abs(u[2][0]-u[3][0]),r=Math.abs(u[0][1]-u[1][1]),a=c([(u[2][0]+u[3][0])/2,(u[0][1]+u[1][1])/2])}let c=ox(s,this.getToolName());this.editData={annotation:t,viewportIdsToRender:c,handleIndex:i,canvasWidth:o,canvasHeight:r,centerWorld:a,originalHandleCanvas:l,movingTextBox:h},this._activateModify(s),o2(s),oX(c),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;(!a||o)&&(this.doneEditMemo(),n.highlighted=!1,r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),a&&e7(n))},this._dragDrawCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{currentPoints:i}=t,a=i.canvas,{viewport:o}=(0,ej.Ay)(n),{canvasToWorld:r}=o,{annotation:l,viewportIdsToRender:s,centerWorld:d,newAnnotation:h}=this.editData;this.createMemo(n,l,{newAnnotation:h});let c=o.worldToCanvas(d),{data:u}
312=l,g=Math.abs(a[0]-c[0]),m=Math.abs(a[1]-c[1]),p=[c[0],c[1]-m],f=[c[0],c[1]+m],v=[c[0]-g,c[1]],I=[c[0]+g,c[1]];u.handles.points=[r(p),r(f),r(v),r(I)],l.invalidated=!0,this.editData.hasMoved=!0,oX(s),e9(l,n,eY.HandlesUpdated)},this._dragModifyCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:o,movingTextBox:r,newAnnotation:l}=this.editData;this.createMemo(n,i,{newAnnotation:l});let{data:s}=i;if(r){let{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else if(void 0===o){let{deltaPoints:e}=t,n=e.world;s.handles.points.forEach(e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]}),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;let{renderingEngine:d}=(0,ej.Ay)(n);oX(a),i.invalidated&&e9(i,n,eY.HandlesUpdated)},this._dragHandle=e=>{let t=e.detail,{element:n}=t,{viewport:i}=(0,ej.Ay)(n),{canvasToWorld:a,worldToCanvas:o}=i,{annotation:r,canvasWidth:l,canvasHeight:s,handleIndex:d,centerWorld:h,originalHandleCanvas:c}=this.editData,u=i.worldToCanvas(h),{data:g}=r,{points:m}=g.handles,{currentPoints:p}=t,f=p.canvas;if(0===d||1===d){let e=Math.abs(f[1]-u[1]),t=[u[0],u[1]-e],n=[u[0],u[1]+e];m[0]=a(t),m[1]=a(n);let i=l/2+(f[0]-c[0]),o=[u[0]-i,u[1]],r=[u[0]+i,u[1]];m[2]=a(o),m[3]=a(r)}else{let e=Math.abs(f[0]-u[0]),t=[u[0]-e,u[1]],n=[u[0]+e,u[1]];m[2]=a(t),m[3]=a(n);let i=s/2+(f[1]-c[1]),o=[u[0],u[1]-i],r=[u[0],u[1]+i];m[0]=a(o),m[1]=a(r)}},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,oX(n),i&&e7(t),this.editData=null,t.annotationUID}},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let a=0;a<o.length;a++){let s,d,h=o[a],{annotationUID:c,data:u}=h,{handles:g}=u,{points:m,activeHandleIndex:p}=g,f=this.getTargetId(i,u);l.annotationUID=c;let{color:v,lineWidth:I,lineDash:C}=this.getAnnotationStyle({annotation:h,styleSpecifier:l}),_=m.map(e=>i.worldToCanvas(e)),E=pC(_),{centerPointRadius:w}=this.configuration;if(u.cachedStats[f]&&null!=u.cachedStats[f].areaUnit){if(h.invalidated&&(this._throttledCalculateCachedStats(h,i,r,e),i instanceof i8.A)){let{referencedImageId:e}=h.metadata;for(let t in u.cachedStats)t.startsWith("imageId")&&r.getStackViewports().find(t=>{let n=lk.A(e),i=t.hasImageURI(n),a=lk.A(t.getCurrentImageId());return i&&a!==n})&&delete u.cachedStats[t]}}else u.cachedStats[f]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(h,i,r);if(!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(c))continue;iN(c)||this.editData||null===p||(s=[_[p]]);let A=!!lz("showHandlesAlways",{});(s||A)&&li(t,c,"0",A?_:s,{color:v});let S=`${c}-ellipse`;ur(t,c,"0",_,{color:v,lineDash:C,lineWidth:I},S),w>0&&Math.min(Math.abs(E[0][0]-E[1][0])/2,Math.abs(E[0][1]-E[1][1])/2)>3*w&&uo(t,c,"0-center",this._getCanvasEllipseCenter(_),w,{color:v,lineDash:C,lineWidth:I}),n=!0;let y=this.getLinkedTextBoxStyle(l,h);if(!y.visibility){u.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}let b=this.configuration.getTextLines(u,f);if(!b||0===b.length)continue;
312u.handles.textBox.hasMoved||(d=lS(E),u.handles.textBox.worldPosition=i.canvasToWorld(d));let{x:T,y:M,width:D,height:O}=lA(t,c,"1",b,i.worldToCanvas(u.handles.textBox.worldPosition),_,{},y);u.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([T,M]),topRight:i.canvasToWorld([T+D,M]),bottomLeft:i.canvasToWorld([T,M+O]),bottomRight:i.canvasToWorld([T+D,M+O])}}return n},this._calculateCachedStats=(e,t,n)=>{if(!this.configuration.calculateStats)return;let i=e.data,{element:a}=t,{points:o}=i.handles,r=o.map(e=>t.worldToCanvas(e)),{viewPlaneNormal:l,viewUp:s}=t.getCamera(),[d,h]=pC(r),c=t.canvasToWorld(d),u=t.canvasToWorld(h),{cachedStats:g}=i,m=Object.keys(g);for(let n=0;n<m.length;n++){let i=m[n],a=this.getTargetImageData(i);if(!a)continue;let{dimensions:o,imageData:r,metadata:d,voxelManager:h}=a,p=CV(r,c);p[0]=Math.floor(p[0]),p[1]=Math.floor(p[1]),p[2]=Math.floor(p[2]);let f=CV(r,u);if(f[0]=Math.floor(f[0]),f[1]=Math.floor(f[1]),f[2]=Math.floor(f[2]),this._isInsideVolume(p,f,o)){let n,o=Math.min(p[0],f[0]),m=Math.max(p[0],f[0]),v=Math.min(p[1],f[1]),I=Math.max(p[1],f[1]),C=[[o,m],[v,I],[Math.min(p[2],f[2]),Math.max(p[2],f[2])]],_=[(c[0]+u[0])/2,(c[1]+u[1])/2,(c[2]+u[2])/2],E=Math.abs(c[0]-u[0])/2,w=Math.abs(c[1]-u[1])/2,A=Math.abs(c[2]-u[2])/2,S={center:_,xRadius:E<CU.p8/2?0:E,yRadius:w<CU.p8/2?0:w,zRadius:A<CU.p8/2?0:A},{worldWidth:y,worldHeight:b}=pS(l,s,c,u),T=0===y&&0===b,{scale:M,areaUnit:D}=aU(a,[p,f]),O=Math.abs(y/M/2*Math.PI*(b/aF(a)/M/2)),x={isPreScaled:ly(t,i),isSuvScaled:this.isSuvScaled(t,i,e.metadata.referencedImageId)},P=dm(d.Modality,e.metadata.referencedImageId,x);h&&(n=h.forEach(this.configuration.statsCalculator.statsCallback,{isInObject:e=>pv(S,e,{fast:!0}),boundsIJK:C,imageData:r,returnPoints:this.configuration.storePointData}));let L=this.configuration.statsCalculator.getStatistics();g[i]={Modality:d.Modality,area:O,mean:L.mean?.value,max:L.max?.value,min:L.min?.value,stdDev:L.stdDev?.value,statsArray:L.array,pointsInShape:n,isEmptyArea:T,areaUnit:D,modalityUnit:P}}else this.isHandleOutsideImage=!0,g[i]={Modality:d.Modality}}let p=e.invalidated;return e.invalidated=!1,p&&e9(e,a,eY.StatsUpdated),g},this._isInsideVolume=(e,t,n)=>lF.A(e,n)&&lF.A(t,n),this._throttledCalculateCachedStats=oA(this._calculateCachedStats,100,{trailing:!0})}static{this.hydrate=(e,t,n)=>{let i=(0,ej.yj)(e);if(!i)return;let{FrameOfReferenceUID:a,referencedImageId:o,viewPlaneNormal:r,instance:l,viewport:s}=this.hydrateBase(CF,i,t,n),{toolInstance:d,...h}=n||{};th({annotationUID:n?.annotationUID||eX.A(),data:{handles:{points:t,activeHandleIndex:null},label:"",cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:l.getToolName(),viewPlaneNormal:r,FrameOfReferenceUID:a,referencedImageId:o,...h}},s.element),oX([s.id])}}_pointInEllipseCanvas(e,t){let{xRadius:n,yRadius:i,center:a,angle:o}=e,r=aZ.e$(aZ.vt(),t,a,-o);if(n<=0||i<=0)return!1;let l=[r[0]-a[0],r[1]-a[1]];return l[0]*l[0]/(n*n)+l[1]*l[1]/(i*i)<=1}_getCanvasEllipseCenter(e){let[t,n,i,a]=e,o=[i[0],n[1]],r=[a[0],t[1]];return[(o[0]+r[0])/2,(o[1]+r[1])/2]}}function CG(e,t){let{area:n,mean:i,stdDev:a,max:o,isEmptyArea:r,areaUnit:l,modalityUnit:s,min:d}=e.cachedStats[t],h=[];if(aM.Et(n)){let e=r?"Area: Oblique not supported":`Area: ${aD.A(n)} ${l}`;h.push(e)}return aM.Et(i)&&h.push(`Mean: ${aD.A(i)} ${s}`),aM.Et(o)&&h.push(`Max: ${aD.A(o)} ${s}`),aM.Et(d)&&h.push(`Min: ${aD.A(d)} ${s}`),aM.Et(a)&&h.push(`Std Dev: ${aD.A(a)} ${s}`),h}let CB=CF,{transformWorldToIndex:CH}=i9;class CW extends sd{static{this.toolName="CircleROI"}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,storePointData:!1,centerPointRadius:0,calculateStats:!0,getTextLines:C$,statsCalculator:lP,simplified:!0}}){super(e,t),this.isHandleOutsideImage=!1,this.addNewAnnotation=e=>{let t,{currentPoints:n,element:i}=e.detail,a=n.world;this.isDrawing=!0,t=this.configuration.simplified?[[...a],[...a]]:[[...a],[...a],[...a],[...a],[...a]];let o=this.createAnnotation(e,t);th(o,i);let r=ox(i,this.getToolName());return this.editData={annotation:o,viewportIdsToRender:r,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),o2(i),e.preventDefault(),oX(r),o},this.isPointNearTool=(e,t,n,i)=>
312{let{viewport:a}=(0,ej.Ay)(e),{points:o}=t.data.handles,r=o.map(e=>a.worldToCanvas(e)),l=r[0],s=pp([l,r[1]]);return Math.abs(pp([l,n])-s)<i/2},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},o2(n),this._activateModify(n),oX(i),e.preventDefault()},this.handleSelectedCallback=(e,t,n)=>{let i,{element:a}=e.detail,{data:o}=t;t.highlighted=!0;let r=!1;if(n.worldPosition)r=!0;else{let{points:e}=o.handles;i=e.findIndex(e=>e===n)}let l=ox(a,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:i,movingTextBox:r},this._activateModify(a),o2(a),oX(l),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;(!a||o)&&(this.doneEditMemo(),n.highlighted=!1,r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),a&&e7(n))},this._dragDrawCallback=e=>{this.isDrawing=!0;let{element:t,currentPoints:n}=e.detail,{world:i,canvas:a}=n,{viewport:o}=(0,ej.Ay)(t),{canvasToWorld:r}=o,{annotation:l,viewportIdsToRender:s,newAnnotation:d}=this.editData;this.createMemo(t,l,{newAnnotation:d});let{data:h}=l,c=h.handles.points[0],u=o.worldToCanvas(c);if(this.configuration.simplified)h.handles.points[1]=i;else{let e=aZ.Io(u,a);h.handles.points[0]=[...c],h.handles.points[1]=r([u[0],u[1]-e]),h.handles.points[2]=r([u[0],u[1]+e]),h.handles.points[3]=r([u[0]-e,u[1]]),h.handles.points[4]=r([u[0]+e,u[1]])}l.invalidated=!0,this.editData.hasMoved=!0,oX(s),e9(l,t,eY.HandlesUpdated)},this._dragModifyCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:o,movingTextBox:r,newAnnotation:l}=this.editData;this.createMemo(n,i,{newAnnotation:l});let{data:s}=i;if(r){let{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else if(void 0===o){let{deltaPoints:e}=t,n=e.world;s.handles.points.forEach(e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]}),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;oX(a),i.invalidated&&e9(i,n,eY.HandlesUpdated)},this._dragHandle=e=>{let t=e.detail,{element:n}=t,{canvasToWorld:i,worldToCanvas:a}=(0,ej.Ay)(n).viewport,{annotation:o,handleIndex:r}=this.editData,{data:l}=o,{points:s}=l.handles,{currentPoints:d,deltaPoints:h}=t;if(0===r){let e=h.world;s.forEach(t=>{iT.WQ(t,t,e)})}else{let e=a(s[0]),t=d.canvas,n=aZ.Io(e,t);s[1]=i([e[0],e[1]-n]),s[2]=i([e[0],e[1]+n]),s[3]=i([e[0]-n,e[1]]),s[4]=i([e[0]+n,e[1]])}o.invalidated=!0},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData;return t.highlighted=!1,t.data.handles.activeHandleIndex=null,oX(n),i&&e7(t),this.editData=null,t.annotationUID}},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let a=0;a<o.length;a++){let s,d=o[a],{annotationUID:h,data:c}=d,{handles:u}=c,{points:g,activeHandleIndex:m}=u,p=this.getTargetId(i,c);l.annotationUID=h;let{color:f,lineWidth:v,lineDash:I}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),C=g.map(e=>i.worldToCanvas(e)),_=C[0],E=pp([_,C[1]]),w=pf([_,C[1]]),{centerPointRadius:A}=this.configuration;if(c.cachedStats[p]&&null!=c.cachedStats[p].areaUnit){if(d.invalidated&&(this._throttledCalculateCachedStats(d,i,r,e),i instanceof i8.A)){let{referencedImageId:e}=d.metadata;for(let t in c.cachedStats)t.startsWith("imageId")&&r.getStackViewports().find(t=>{let n=lk.A(e),i=t.hasImageURI(n),a=lk.A(t.getCurrentImageId());return i&&a!==n})&&delete c.cachedStats[t]}}else c.cachedStats[p]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null,radius:null,radiusUnit:null,perimeter:null},this._calculateCachedStats(d,i,r,e);if(!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(h))continue;iN(h)||this.editData||null===m||(s=this.configuration.simplified?[C[m]]:C);let S=!!lz("showHandlesAlways",{});(s||S)&&li(t,h,"0",S?C:s,{color:f});let y=`${h}-circle`;if(uo(t,h,"0",_,E,{color:f,lineDash:I,lineWidth:v},y),A>0&&E>3*A&&uo(t,h,"0-center",_,A,{color:f,lineDash:I,lineWidth:v}),n=!0,this.configuration.calculateStats){let e,n=this.getLinkedTextBoxStyle(l,d);if(!n.visibility){c.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}let a=this.configuration.getTextLines(c,p);if(!a||0===a.length)continue;c.handles.textBox.hasMoved||(e=lS(w),c.handles.textBox.worldPosition=i.canvasToWorld(e));let{x:o,y:r,width:s,height:u}=lA(t,h,"1",a,i.worldToCanvas(c.handles.textBox.worldPosition),[_,C[1]],{},n);c.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([o,r]),topRight:i.canvasToWorld([o+s,r]),bottomLeft:i.canvasToWorld([o,r+u]),bottomRight:i.canvasToWorld([o+s,r+u])}}}return n},this._calculateCachedStats=(e,t,n,i)=>{if(!this.configuration.calculateStats)return;let{data:a}=e,{element:o}=t,r=e.invalidated,{points:l}=a.handles,s=l.map(e=>t.worldToCanvas(e)),[d,h]=pf([s[0],s[1]]),c=t.canvasToWorld(d),u=t.canvasToWorld(h),{cachedStats:g}=a,m=Object.keys(g);for(let n=0;n<m.length;n++){let i=m[n],a=this.getTargetImageData(i);if(!a){console.warn("image not found for stats:",i),delete g[i];continue}let{dimensions:o,imageData:r,metadata:s,voxelManager:d}=a,h=l.map(e=>r.worldToIndex(e)),p=aU(a,h),f=CW.calculateLengthInIndex(p,h.slice(0,2)),v=Math.PI*f*f,I=2*Math.PI*f,C=0===f,{unit:_,areaUnit:E}=p,A={name:"area",value:v,unit:E,type:w.Area},S={name:"circumference",value:I,unit:_,type:w.Linear},y=[A,{name:"radius",value:f,unit:_,type:w.Linear},S];g[i]={Modality:s.Modality,area:v,isEmptyArea:C,areaUnit:E,radius:f,radiusUnit:_,perimeter:I,statsArray:y};let b=CH(r,c),T=CH(r,u);if(this.isHandleOutsideImage=!lH.isInsideVolume(o,[b,T]),!this.isHandleOutsideImage){let n,a=Math.min(b[0],T[0]),o=Math.max(b[0],T[0]),h=Math.min(b[1],T[1]),m=Math.max(b[1],T[1]),p=[[a,o],[h,m],[Math.min(b[2],T[2]),Math.max(b[2],T[2])]],f=l[0],v=Math.abs(c[0]-u[0])/2,I=Math.abs(c[1]-u[1])/2,C=Math.abs(c[2]-u[2])/2,_={center:f,xRadius:v<CU.p8/2?0:v,yRadius:I<CU.p8/2?0:I,zRadius:C<CU.p8/2?0:C},E={isPreScaled:ly(t,i),isSuvScaled:this.isSuvScaled(t,i,e.metadata.referencedImageId)},w=dm(s.Modality,e.metadata.referencedImageId,E);
312d&&(n=d.forEach(this.configuration.statsCalculator.statsCallback,{isInObject:e=>pv(_,e,{fast:!0}),boundsIJK:p,imageData:r,returnPoints:this.configuration.storePointData}));let A=this.configuration.statsCalculator.getStatistics();g[i]={...g[i],Modality:s.Modality,mean:A.mean?.value,max:A.max?.value,min:A.min?.value,pointsInShape:n,stdDev:A.stdDev?.value,modalityUnit:w,statsArray:[...y,...A.array]}}}return e.invalidated=!1,r&&e9(e,o,eY.StatsUpdated),g},this._throttledCalculateCachedStats=oA(this._calculateCachedStats,100,{trailing:!0})}static{this.hydrate=(e,t,n)=>{let i=(0,ej.yj)(e);if(!i)return;let{FrameOfReferenceUID:a,referencedImageId:o,viewPlaneNormal:r,instance:l,viewport:s}=this.hydrateBase(CW,i,t,n),{toolInstance:d,...h}=n||{};th({annotationUID:n?.annotationUID||eX.A(),data:{handles:{points:t,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:l.getToolName(),viewPlaneNormal:r,FrameOfReferenceUID:a,referencedImageId:o,...h}},s.element),oX([s.id])}}}function C$(e,t){let{radius:n,radiusUnit:i,area:a,mean:o,stdDev:r,max:l,min:s,isEmptyArea:d,areaUnit:h,modalityUnit:c}=e.cachedStats[t],u=[];if(aM.Et(n)){let e=d?"Radius: Oblique not supported":`Radius: ${aD.A(n)} ${i}`;u.push(e)}if(aM.Et(a)){let e=d?"Area: Oblique not supported":`Area: ${aD.A(a)} ${h}`;u.push(e)}return aM.Et(o)&&u.push(`Mean: ${aD.A(o)} ${c}`),aM.Et(l)&&u.push(`Max: ${aD.A(l)} ${c}`),aM.Et(s)&&u.push(`Min: ${aD.A(s)} ${c}`),aM.Et(r)&&u.push(`Std Dev: ${aD.A(r)} ${c}`),u}let Cz=CW;class CX extends sd{static{this.toolName="ETDRSGrid"}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,degrees:[45,135,225,315],diameters:[10,30,60]}}){super(e,t),this.isHandleOutsideImage=!1,this.addNewAnnotation=e=>{let{currentPoints:t,element:n}=e.detail,i=t.world,{viewport:a,renderingEngine:o}=(0,ej.Ay)(n);this.isDrawing=!0;let{viewPlaneNormal:r,viewUp:l}=a.getCamera(),s=this.getReferencedImageId(a,i,r,l),d=a.getFrameOfReferenceUID(),h={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...l],FrameOfReferenceUID:d,referencedImageId:s,...a.getViewReference({points:[i]})},data:{label:"",handles:{points:[[...i]]}}};th(h,n);let c=ox(n,this.getToolName());return this.editData={annotation:h,viewportIdsToRender:c,newAnnotation:!0},this._activateDraw(n),o2(n),e.preventDefault(),oX(c),h},this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,{points:r}=o.handles;return Math.abs(pp([a.worldToCanvas(r[0]),n]))<i},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i},o2(n),this._activateModify(n);let{renderingEngine:a}=(0,ej.Ay)(n);oX(i),e.preventDefault()},this.handleSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i},this._activateModify(n),o2(n);let{renderingEngine:a}=(0,ej.Ay)(n);oX(i),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;if(a&&!o)return;n.highlighted=!1,r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t);let{renderingEngine:l}=(0,ej.Ay)(t);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),a&&e7(n)},this._dragDrawCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{currentPoints:i}=t,a=i.canvas,{renderingEngine:o,viewport:r}=(0,ej.Ay)(n),{canvasToWorld:l}=r,{annotation:s,viewportIdsToRender:d}=this.editData,{data:h}=s;h.handles.points=[l(a),l(a)],s.invalidated=!0,this.editData.hasMoved=!0,oX(d)},this._dragModifyCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a}=this.editData,{data:o}=i,{deltaPoints:r}=t,l=r.world;
312o.handles.points.forEach(e=>{e[0]+=l[0],e[1]+=l[1],e[2]+=l[2]}),i.invalidated=!0;let{renderingEngine:s}=(0,ej.Ay)(n);oX(a)},this._dragHandle=e=>{let t=e.detail,{element:n}=t,{canvasToWorld:i,worldToCanvas:a}=(0,ej.Ay)(n).viewport,{annotation:o}=this.editData,{data:r}=o,{points:l}=r.handles,s=l.map(e=>a(e)),{currentPoints:d}=t,h=d.canvas,c=h[0]-s[0][0],u=h[1]-s[0][1],g=[s[1][0]+c,s[1][1]+u];l[0]=i(h),l[1]=i(g)},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;t.highlighted=!1,a.handles.activeHandleIndex=null;let{renderingEngine:o}=(0,ej.Ay)(e);return oX(n),i&&e7(t),this.editData=null,t.annotationUID}},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<o.length;e++){let a=o[e],{annotationUID:l,data:s}=a,{handles:d}=s,{points:h}=d;r.annotationUID=l;let{color:c,lineWidth:u,lineDash:g}=this.getAnnotationStyle({annotation:a,styleSpecifier:r}),m=h.map(e=>i.worldToCanvas(e))[0];if(!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(l))continue;let p=`${l}-crosshair-vertical`,f=[m[0],m[1]+5],v=[m[0],m[1]-5];l_(t,l,p,f,v,{color:c,lineDash:g,lineWidth:u}),p=`${l}-crosshair-horizontal`,l_(t,l,p,f=[m[0]+5,m[1]],v=[m[0]-5,m[1]],{color:c,lineDash:g,lineWidth:u});let I=this.configuration.diameters.map(e=>this.worldMeasureToCanvas(e,i));for(let e=0;e<I.length;e++){let n=`${l}-circle-${e}`,i=`${l}-circle-${e}`;uo(t,l,i,m,I[e]/2,{color:c,lineDash:g,lineWidth:u},n)}let C=e=>e*Math.PI/180,_=this.configuration.degrees.map(e=>C(e));for(let e=0;e<_.length;e++){let n=`${l}-line-${e}`;l_(t,l,n,[Math.cos(_[e])*I[0]/2+m[0],Math.sin(_[e])*I[0]/2+m[1]],[Math.cos(_[e])*I[2]/2+m[0],Math.sin(_[e])*I[2]/2+m[1]],{color:c,lineDash:g,lineWidth:u})}n=!0}return n}}worldMeasureToCanvas(e,t){let n=t.canvasToWorld([t.canvas.width/2,t.canvas.height/2]),{viewUp:i}=t.getCamera(),a=iT.Ln(iT.vt(),n,i,e),o=t.worldToCanvas(n),r=t.worldToCanvas(a);return Math.sqrt(Math.pow(r[0]-o[0],2)+Math.pow(r[1]-o[1],2))}}let Cj=CX,Cq={resolution:20,controlPointAdditionDistance:6,controlPointDeletionDistance:6,showControlPointsConnectors:!1,controlPointAdditionEnabled:!0,controlPointDeletionEnabled:!0};
312!function(e){e.Cardinal="CARDINAL",e.Linear="LINEAR",e.CatmullRom="CATMULLROM",e.BSpline="BSPLINE"}(D||(D={})),function(e){e.AddControlPoint="addControlPoint",e.DeleteControlPoint="deleteControlPoint"}(O||(O={}));let CK=["CatmullRomSplineROI","LinearSplineROI","BSplineROI","CardinalSplineROI"];class CY extends du{static{this.toolName="SplineROI"}static{this.SplineTypes=D}static{this.Actions=O}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,calculateStats:!0,simplifiedSpline:!1,getTextLines:CZ,contourHoleAdditionModifierKey:C.Shift,decimate:{enabled:!1,epsilon:.1},spline:{configuration:{[D.Cardinal]:{Class:If,scale:.5},[D.CatmullRom]:{Class:Iv},[D.Linear]:{Class:II},[D.BSpline]:{Class:Ip,controlPointAdditionEnabled:!1,controlPointDeletionEnabled:!1,showControlPointsConnectors:!0}},type:D.CatmullRom,drawPreviewEnabled:!0,enableTwoPointPreview:!1,lastControlPointDeletionKeys:["Backspace","Delete"]},actions:{[O.AddControlPoint]:{method:"addControlPointCallback",bindings:[{mouseButton:I.Primary,modifierKey:C.Shift}]},[O.DeleteControlPoint]:{method:"deleteControlPointCallback",bindings:[{mouseButton:I.Primary,modifierKey:C.Ctrl}]}}}}){super(e,t),this.splineToolNames=["CatmullRomSplineROI","LinearSplineROI","BSplineROI","CardinalSplineROI"],this.isHandleOutsideImage=!1,this.fireChangeOnUpdate=null,this.isPointNearTool=(e,t,n,i)=>{let{instance:a}=t.data.spline;return a.isPointNearCurve(n,i)},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(n),oX(i),e.preventDefault()},this.handleSelectedCallback=(e,t,n)=>{let i,{element:a}=e.detail,{data:o}=t;t.highlighted=!0;let r=!1;if(n.worldPosition)r=!0;else{let{points:e}=o.handles;i=e.findIndex(e=>e===n)}let l=ox(a,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:i,movingTextBox:r},this._activateModify(a),oX(l),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,contourHoleProcessingEnabled:o}=this.editData,{data:r}=n;n.autoGenerated=!1,r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t);let l=(0,ej.Ay)(t),{imageData:s,dimensions:d}=this.getTargetImageData(this.getTargetId(l.viewport));this.isHandleOutsideImage=r.handles.points.map(e=>iW.A(s,e)).some(e=>!lF.A(e,d)),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID);let h=a?eY.Completed:eY.HandlesUpdated;this.fireChangeOnUpdate?(this.fireChangeOnUpdate.annotationUID=n.annotationUID,this.fireChangeOnUpdate.changeType=h):this.fireChangeOnUpdate={annotationUID:n.annotationUID,changeType:h,contourHoleProcessingEnabled:o},oX(i),this.doneEditMemo(),this.editData=null,this.isDrawing=!1},this._keyDownCallback=e=>{let t=e.detail,{element:n}=t,i=t.key??"",{lastControlPointDeletionKeys:a}=this.configuration.spline;if(!a.includes(i))return;let{annotation:o}=this.editData,{data:r}=o;if(3===r.handles.points.length)return void this.cancel(n);{let e=r.handles.points.length-1;this._deleteControlPointByIndex(n,o,e)}e.preventDefault()},this._mouseMoveCallback=e=>{let{drawPreviewEnabled:t}=this.configuration.spline;if(!t)return;let{element:n}=e.detail,{renderingEngine:i}=(0,ej.Ay)(n),a=ox(n,this.getToolName());this.editData.lastCanvasPoint=e.detail.currentPoints.canvas,oX(a),e.preventDefault()},this._mouseDownCallback=e=>{let t=e.type===eK.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:i}=this.editData,{data:a}=n;if(a.contour.closed)return;this.doneEditMemo();let{currentPoints:o,element:r}=e.detail,{canvas:l,world:s}=o,d=a.handles.points.length>=2&&t,h=!0;if(a.handles.points.length&&this.createMemo(r,n,{newAnnotation:1===a.handles.points.length}),a.handles.points.length>=3){this.createMemo(r,n);let{instance:e}=a.spline,t=e.getClosestControlPointWithinDistance(l,10);t?.index===0&&(h=!1,d=!0)}h&&a.handles.points.push(s),a.contour.closed=a.contour.closed||d,n.invalidated=!0,oX(i),a.contour.closed&&this._endCallback(e),e.preventDefault()},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:o,movingTextBox:r,newAnnotation:l}=this.editData,{data:s}=i;
312if(this.createMemo(n,i,{newAnnotation:l}),r){let{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else if(void 0===o){let{deltaPoints:e}=t,n=e.world;this.moveAnnotation(i,n)}else{let{currentPoints:e}=t,n=e.world;s.handles.points[o]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;let{renderingEngine:d}=(0,ej.Ay)(n);oX(a)},this.triggerAnnotationCompleted=(e,t)=>{let n=eK.ANNOTATION_COMPLETED,i={annotation:e,changeType:eY.Completed,contourHoleProcessingEnabled:t};(0,eq.A)(ez.A,n,i)},this.triggerAnnotationModified=(e,t,n=eY.StatsUpdated)=>{let{viewportId:i,renderingEngineId:a}=t,o=eK.ANNOTATION_MODIFIED;(0,eq.A)(ez.A,o,{annotation:e,viewportId:i,renderingEngineId:a,changeType:n})},this.triggerChangeEvent=(e,t,n=eY.StatsUpdated,i)=>{n===eY.Completed?this.triggerAnnotationCompleted(e,i):this.triggerAnnotationModified(e,t,n)},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.KEY_DOWN,this._keyDownCallback),e.addEventListener(eK.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(eK.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(eK.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(eK.TOUCH_TAP,this._mouseDownCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.KEY_DOWN,this._keyDownCallback),e.removeEventListener(eK.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(eK.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(eK.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(eK.TOUCH_TAP,this._mouseDownCallback)},this._renderStats=(e,t,n,i)=>{let a=e.data,o=this.getTargetId(t);if(!a.spline.instance.closed||!i.visibility)return;let r=this.configuration.getTextLines(a,o);if(!r||0===r.length)return;let l=a.handles.points.map(e=>t.worldToCanvas(e));if(!a.handles.textBox.hasMoved){let e=lS(l);a.handles.textBox.worldPosition=t.canvasToWorld(e)}let s=t.worldToCanvas(a.handles.textBox.worldPosition),{x:d,y:h,width:c,height:u}=lA(n,e.annotationUID??"","textBox",r,s,l,{},i);a.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([d,h]),topRight:t.canvasToWorld([d+c,h]),bottomLeft:t.canvasToWorld([d,h+u]),bottomRight:t.canvasToWorld([d+c,h+u])}},this.addControlPointCallback=(e,t)=>{let{data:n}=t,i=n.spline.type,a=this._getSplineConfig(i),o=a.controlPointAdditionDistance;if(!1===a.controlPointAdditionEnabled)return;let{element:r}=e.detail,{renderingEngine:l,viewport:s}=(0,ej.Ay)(r),{canvasToWorld:d}=s,{instance:h}=n.spline,c=e.detail.currentPoints.canvas,u=h.getClosestPoint(c);if(u.distance>o)return;let{index:g,point:m}=h.addControlPointAtU(u.uValue);n.handles.points.splice(g,0,d(m)),t.invalidated=!0,oX(ox(r,this.getToolName()))},this.deleteControlPointCallback=(e,t)=>{let n=t.data.spline.type,i=this._getSplineConfig(n),a=i.controlPointDeletionDistance;if(!1===i.controlPointDeletionEnabled)return;let{element:o,currentPoints:r}=e.detail,{canvas:l}=r,{instance:s}=t.data.spline,d=s.getClosestControlPointWithinDistance(l,a);d&&this._deleteControlPointByIndex(o,t,d.index)},this._calculateCachedStats=(e,t)=>{if(!this.configuration.calculateStats)return;let n=e.data;if(!n.contour.closed)return;let i=(0,ej.Ay)(t);if(!i)return;let{viewport:a}=i,{cachedStats:o}=n,{polyline:r}=n.contour,l=Object.keys(o);for(let e=0;e<l.length;e++){let t=l[e],n=this.getTargetImageData(t);
312if(!n)continue;let{metadata:i}=n,s=r.map(e=>a.worldToCanvas(e)),d=s[0],h=a.canvasToWorld(d),c=a.canvasToWorld([d[0]+1,d[1]]),u=a.canvasToWorld([d[0],d[1]+1]),g=iT.Io(h,c),m=iT.Io(h,u),{imageData:p}=n,{scale:f,areaUnit:v}=aU(n,()=>{let{maxX:e,maxY:t,minX:n,minY:i}=aG(s),o=a.canvasToWorld([n,i]),r=iW.A(p,o),l=a.canvasToWorld([e,t]);return[r,iW.A(p,l)]}),I=aX(s)/f/f;I*=g*m,o[t]={Modality:i.Modality,area:I,areaUnit:v}}let s=e.invalidated;return e.invalidated=!1,s&&this.triggerAnnotationModified(e,i,eY.StatsUpdated),o},this._throttledCalculateCachedStats=oA(this._calculateCachedStats,100,{trailing:!0}),this.annotationCompletedBinded=this.annotationCompleted.bind(this)}annotationCompleted(e){let{sourceAnnotation:t}=e.detail;this.splineToolNames.includes(t?.metadata?.toolName)&&this.configuration.simplifiedSpline&&this.isContourSegmentationTool()&&fz(t)}initializeListeners(){ez.A.addEventListener(eK.ANNOTATION_COMPLETED,this.annotationCompletedBinded)}removeListeners(){ez.A.removeEventListener(eK.ANNOTATION_COMPLETED,this.annotationCompletedBinded)}onSetToolEnabled(){this.initializeListeners()}onSetToolActive(){this.initializeListeners()}onSetToolDisabled(){this.removeListeners()}addNewAnnotation(e){let{currentPoints:t,element:n}=e.detail,{canvas:i}=t,a=ra(e.detail.event)===this.configuration.contourHoleAdditionModifierKey,o=this.createAnnotation(e);this.isDrawing=!0,this.addAnnotation(o,n);let r=ox(n,this.getToolName());return this.editData={annotation:o,viewportIdsToRender:r,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,lastCanvasPoint:i,contourHoleProcessingEnabled:a},this._activateDraw(n),e.preventDefault(),oX(r),o}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData;i&&tu(t.annotationUID),super.cancelAnnotation(t);let{renderingEngine:a}=(0,ej.Ay)(e);return oX(n),this.editData=null,t.annotationUID}isContourSegmentationTool(){return!1}renderAnnotationInstance(e){let t,{enabledElement:n,targetId:i,svgDrawingHelper:a,annotationStyle:o}=e,{viewport:r}=n,{worldToCanvas:l}=r,{element:s}=r,d=e.annotation,{annotationUID:h,data:c,highlighted:u}=d,{handles:g}=c,{points:m,activeHandleIndex:p}=g,f=this.editData?.newAnnotation,{lineWidth:v,lineDash:I,color:C,locked:E}=o,w=m.map(e=>l(e)),{drawPreviewEnabled:A}=this.configuration.spline,S=d.data.spline.type,y=this._getSplineConfig(S),b=d.data.spline.instance,T=td(d);if(-1!==T.findIndex(e=>!e))throw Error(`Can't find annotation for child ${d.childAnnotationUIDs.join()}`);if([d,...T].filter(e=>this._isSplineROIAnnotation(e)).forEach(e=>{let t=this._updateSplineInstance(s,e).getPolylinePoints();this.updateContourPolyline(e,{points:t,closed:c.contour.closed,targetWindingDirection:_.Clockwise},r,{updateWindingDirection:c.contour.closed})}),super.renderAnnotationInstance(e),c.cachedStats[i]&&null!=c.cachedStats[i].areaUnit?d.invalidated&&this._throttledCalculateCachedStats(d,s):(c.cachedStats[i]={Modality:null,area:null,areaUnit:null},this._calculateCachedStats(d,s)),E||this.editData||null===p||(t=[w[p]]),(t||f||u)&&li(a,h,"0",w,{color:C,lineWidth:v,handleRadius:"3"}),A&&b.numControlPoints>=1&&this.editData?.lastCanvasPoint&&!b.closed){let{lastCanvasPoint:e}=this.editData,{enableTwoPointPreview:t}=this.configuration.spline;1===b.numControlPoints&&t?lt(a,h,"previewSplineChange",[w[0],e],{color:"#9EA0CA",lineDash:I,lineWidth:1}):b.numControlPoints>1&&lt(a,h,"previewSplineChange",b.getPreviewPolylinePoints(e,10),{color:"#9EA0CA",lineDash:I,lineWidth:1})}if(y.showControlPointsConnectors){let e=[...w];b.closed&&e.push(w[0]),lt(a,h,"controlPointsConnectors",e,{color:"rgba(255, 255, 255, 0.5)",lineWidth:1})}return this._renderStats(d,r,a,o.textbox),this.fireChangeOnUpdate?.annotationUID===h&&(this.triggerChangeEvent(d,n,this.fireChangeOnUpdate.changeType,this.fireChangeOnUpdate.contourHoleProcessingEnabled),this.fireChangeOnUpdate=null),d.invalidated=!1,!0}createInterpolatedSplineControl(e){if(e.data.handles.points?.length)return;let{polyline:t}=e.data.contour;if(!t||!t.length)return;e.data.handles.points=[];let{points:n}=e.data.handles,i=Math.max(10,Math.floor(t.length/20));for(let e=0;e<t.length-i;e+=i)n.push(t[e]);n.push(t[t.length-1])}isSplineAnnotation(e){return CK.includes(e?.metadata?.toolName)}createSplineObjectFromType(e,t){let n=this._getSplineConfig(t),i=new n.Class;e.data.spline={type:n.type,instance:i,resolution:n.resolution}}createAnnotation(e){let t,n=super.createAnnotation(e),{world:i}=e.detail.currentPoints,{type:a}=this.configuration.spline,o=this._getSplineConfig(a),r=new o.Class,l=()=>({type:o.type,instance:r,resolution:o.resolution});return this.configuration.interpolation?.enabled&&(t=e=>{e.data.spline||=l(),this.createInterpolatedSplineControl(e)}),ab.A(n,{data:{handles:{points:[[...i]]},spline:l(),cachedStats:{}},onInterpolationComplete:t})}_deleteControlPointByIndex(e,t,n){let i=(0,ej.Ay)(e),{points:a}=t.data.handles;3===a.length?tu(t.annotationUID):a.splice(n,1);let{renderingEngine:o}=i,r=ox(e,this.getToolName());t.invalidated=!0,oX(r)}_isSplineROIAnnotation(e){return!!e.data?.spline}
312_getSplineConfig(e){let{configuration:t}=this;return Object.assign({type:e},Cq,t.spline.configuration[e])}_updateSplineInstance(e,t){let{viewport:n}=(0,ej.Ay)(e),{worldToCanvas:i}=n,{data:a}=t,{type:o,instance:r}=t.data.spline,l=this._getSplineConfig(o),s=a.handles.points.map(i),d=void 0!==l.resolution?parseInt(l.resolution):void 0,h=void 0!==l.scale?parseFloat(l.scale):void 0;return r.setControlPoints(s),r.closed=!!a.contour.closed,r.fixedResolution||void 0===d||r.resolution===d||(r.resolution=d,t.invalidated=!0),r instanceof If&&!r.fixedScale&&void 0!==h&&r.scale!==h&&(r.scale=h,t.invalidated=!0),r}static{this.hydrate=(e,t,n)=>{let i=(0,ej.yj)(e);if(!i)return;if(t.length<3)return void console.warn("Spline requires at least 3 control points");let{FrameOfReferenceUID:a,referencedImageId:o,viewPlaneNormal:r,viewUp:l,instance:s,viewport:d}=this.hydrateBase(CY,i,t,n),h=n?.splineType||D.CatmullRom,c=new(s._getSplineConfig(h)).Class,{toolInstance:u,...g}=n||{},m={annotationUID:n?.annotationUID||eX.A(),data:{handles:{points:t},label:"",cachedStats:{},spline:{type:h,instance:c},contour:{closed:!0}},highlighted:!1,autoGenerated:!1,invalidated:!0,isLocked:!1,isVisible:!0,metadata:{toolName:s.getToolName(),viewPlaneNormal:r,FrameOfReferenceUID:a,referencedImageId:o,...g}};th(m,d.element),oX([d.id])}}}function CZ(e,t){let{area:n,isEmptyArea:i,areaUnit:a}=e.cachedStats[t],o=[];if(n){let e=i?"Area: Oblique not supported":`Area: ${aD.A(n)} ${a}`;o.push(e)}return o}let CJ=CY;class CQ extends CJ{static{this.toolName="SplineContourSegmentationTool"}constructor(e){super(ab.A({configuration:{calculateStats:!1}},e)),this.annotationCutMergeCompletedBinded=this.annotationCutMergeCompleted.bind(this)}isContourSegmentationTool(){return!0}initializeListeners(){ez.A.addEventListener(eK.ANNOTATION_CUT_MERGE_PROCESS_COMPLETED,this.annotationCutMergeCompletedBinded)}removeListeners(){ez.A.removeEventListener(eK.ANNOTATION_CUT_MERGE_PROCESS_COMPLETED,this.annotationCutMergeCompletedBinded)}annotationCutMergeCompleted(e){let{sourceAnnotation:t}=e.detail;this.toolName===t?.metadata?.toolName&&this.splineToolNames.includes(t?.metadata?.toolName)&&this.configuration.simplifiedSpline&&fz(t)}}let C0=CQ;var C1=n(98046),C2=n(4350);class C5{constructor({numBits:e,getPriority:t,areEqual:n}){this._bucketCount=1<<e,this._mask=this._bucketCount-1,this._size=0,this._currentBucketIndex=0,this._buckets=this._buildArray(this._bucketCount),this._getPriority=void 0!==t?t:e=>e,this._areEqual="function"==typeof n?n:(e,t)=>e===t}push(e){let t=this._getBucketIndex(e),n=this._buckets[t];this._buckets[t]={value:e,next:n},this._size++}pop(){if(0===this._size)throw Error("Cannot pop because the queue is empty.");for(;null===this._buckets[this._currentBucketIndex];)this._currentBucketIndex=(this._currentBucketIndex+1)%this._bucketCount;let e=this._buckets[this._currentBucketIndex];return this._buckets[this._currentBucketIndex]=e.next,this._size--,e.value}remove(e){let t;if(!e)return!1;let n=this._getBucketIndex(e),i=this._buckets[n],a=i;for(;null!==a&&!this._areEqual(e,a.value);)t=a,a=a.next;return null!==a&&(a===i?this._buckets[n]=a.next:t.next=a.next,this._size--,!0)}isEmpty(){return 0===this._size}_getBucketIndex(e){return this._getPriority(e)&this._mask}_buildArray(e){let t=Array(e);return t.fill(null),t}}let{isEqual:C3}=i9,C4=2/(3*Math.PI);class C8{constructor(e,t,n){this._getPointIndex=(e,t)=>{let{width:n}=this;return e*n+t},this._getPointCoordinate=e=>[e%this.width,Math.floor(e/this.width)],this._getPointCost=e=>Math.round(this.searchGranularity*this.costs[e]);let i=e.length;this.searchGranularityBits=8,this.searchGranularity=1<<this.searchGranularityBits,this.width=t,this.height=n,this.grayscalePixelData=e,this.laplace=null,this.gradXNew=null,this.gradYNew=null,this.laplace=this._computeLaplace(),this.gradMagnitude=this._computeGradient(),this.gradXNew=this._computeGradientX(),this.gradYNew=this._computeGradientY(),this.visited=Array(i),this.parents=new Uint32Array(i),this.costs=new Float32Array(i)}startSearch(e){let t=this._getPointIndex(e[1],e[0]);this.startPoint=null,this.visited.fill(!1),this.parents.fill(0xffffffff),this.costs.fill(1/0),this.priorityQueueNew=new C5({numBits:this.searchGranularityBits,getPriority:this._getPointCost}),this.startPoint=e,this.costs[t]=0,this.priorityQueueNew.push(t)}findMinNearby(e,t=2){let[n,i]=e,{costs:a}=this,o=[Math.max(0,n-t),Math.min(n+t+1,this.width)],r=[Math.max(0,i-t),Math.min(i+t+1,this.height)],l=.8*a[this._getPointIndex(i,n)],s=e;for(let n=o[0];n<o[1];n++)for(let i=r[0];i<r[1];i++){let o=1-(Math.abs(n-e[0])+Math.abs(i-e[1]))/t/2,r=.8*a[this._getPointIndex(i,n)]+.2*o;r<l&&(s=[n,i],l=r)}return s}findPathToPoint(e){if(!this.startPoint)throw Error("There is no search in progress");let{startPoint:t,_getPointIndex:n,_getPointCoordinate:i}=this,a=n(t[1],t[0]),o=n(e[1],e[0]),{visited:r,parents:l,costs:s,priorityQueueNew:d}=this;if(o===a)return[];for(;!d.isEmpty()&&0xffffffff===l[o];){let e=d.pop();if(r[e])continue;let t=i(e),a=this._getNeighborPoints(t);r[e]=!0;for(let i=0,o=a.length;i<o;i++){let o=a[i],r=n(o[1],o[0]),h=this._getWeightedDistance(t,o),c=s[e]+h;c<s[r]&&(s[r]!==1/0&&d.remove(r),s[r]=c,l[r]=e,d.push(r))}}let h=[],c=o;for(;0xffffffff!==c;)h.push(i(c)),c=l[c];return h.reverse()}_getDeltaX(e,t){let{grayscalePixelData:n,width:i}=this,a=this._getPointIndex(t,e);return e+1===i&&a--,n[a+1]-n[a]}_getDeltaY(e,t){let{grayscalePixelData:n,width:i,height:a}=this,o=this._getPointIndex(t,e);return t+1===a&&(o-=i),n[o]-n[o+i]}_getGradientMagnitude(e,t){let n=this._getDeltaX(e,t),i=this._getDeltaY(e,t);return Math.sqrt(n*n+i*i)}_getLaplace(e,t){let{grayscalePixelData:n,_getPointIndex:i}=this,a=n[i(t-2,e)],o=n[i(t-1,e-1)],r=n[i(t-1,e)],l=n[i(t-1,e+1)],s=n[i(t,e-2)],d=n[i(t,e-1)],h=n[i(t,e)],c=n[i(t,e+1)],u=n[i(t,e+2)],g=n[i(t+1,e-1)],m=n[i(t+1,e)],p=n[i(t+1,e+1)],f=n[i(t+2,e)],v=a;return v+=o+2*r+l,v+=s+2*d-16*h+2*c+u,v+=g+2*m+p,v+=f}_computeGradient(){let{width:e,height:t}=this,n=new Float32Array(e*t),i=0,a=0,o=0,r=0;for(r=0;r<t-1;r++){for(o=0;o<e-1;o++)n[i]=this._getGradientMagnitude(o,r),a=Math.max(n[i],a),i++;n[i]=n[i-1],i++}for(let t=n.length;i<t;i++)n[i]=n[i-e];for(let e=0,t=n.length;e<t;e++)n[e]=1-n[e]/a;return n}_computeLaplace(){let{width:e,height:t,_getPointIndex:n}=this,i=new Float32Array(e*t);i.fill(1,0,n(2,0));for(let a=2;a<t-2;a++){i[n(a,0)]=1,i[n(a,1)]=1;for(let t=2;t<e-2;t++)i[n(a,t)]=this._getLaplace(t,a)>.33?0:1;i[n(a,e-2)]=1,i[n(a,e-1)]=1}return i.fill(1,n(t-2,0)),i}_computeGradientX(){let{width:e,height:t}=this,n=new Float32Array(e*t),i=0;for(let a=0;a<t;a++)for(let t=0;t<e;t++)n[i++]=this._getDeltaX(t,a);return n}_computeGradientY(){let{width:e,height:t}=this,n=new Float32Array(e*t),i=0;for(let a=0;a<t;a++)for(let t=0;t<e;t++)n[i++]=this._getDeltaY(t,a);return n}_getGradientUnitVector(e,t){let{gradXNew:n,gradYNew:i,_getPointIndex:a}=this,o=n[a(t,e)],r=i[a(t,e)],l=Math.sqrt(o*o+r*r);
312return[o/(l=Math.max(l,1e-100)),r/l]}_getGradientDirection(e,t,n,i){let a=this._getGradientUnitVector(e,t),o=this._getGradientUnitVector(n,i),r=a[1]*(n-e)-a[0]*(i-t),l=o[1]*(n-e)-o[0]*(i-t);r<0&&(r=-r,l=-l),e!==n&&t!==i&&(r*=Math.SQRT1_2,l*=Math.SQRT1_2);let s=C4*(Math.acos(Math.min(r,1))+Math.acos(l=Math.min(Math.max(l,-1),1)));return isNaN(s)||!isFinite(s)?(console.warn("Found non-direction:",e,t,n,i,r,l,s),1):s}getCost(e,t){return this._getWeightedDistance(e,t)}_getWeightedDistance(e,t){let{_getPointIndex:n,width:i,height:a}=this,[o,r]=e,[l,s]=t;if(l<0||l>=i||s<0||s>=a)return 1;if(o<0||r<0||o>=i||r>=a)return 0;let d=n(s,l),h=this.gradMagnitude[d];return(o===l||r===s)&&(h*=Math.SQRT1_2),.43*h+.43*this.laplace[d]+.11*this._getGradientDirection(o,r,l,s)}_getNeighborPoints(e){let{width:t,height:n}=this,i=[],a=Math.max(e[0]-1,0),o=Math.max(e[1]-1,0),r=Math.min(e[0]+1,t-1),l=Math.min(e[1]+1,n-1);for(let t=o;t<=l;t++)for(let n=a;n<=r;n++)(n!==e[0]||t!==e[1])&&i.push([n,t]);return i}static createInstanceFromRawPixelData(e,t,n,i){let a=new Float32Array(e.length),{lower:o,upper:r}=i,l=r-o;for(let t=0,n=e.length;t<n;t++)a[t]=Math.max(0,Math.min(1,(e[t]-o)/l));return new C8(a,t,n)}}class C9{constructor(e,t){this.pointArray=e?e.slice():[],this._controlPointIndexes=t?t.slice():[]}getPoint(e){return this.pointArray[e]}getLastPoint(){return this.pointArray[this.pointArray.length-1]}isControlPoint(e){let t=this.pointArray.indexOf(e);if(-1!==t)return -1!==this._controlPointIndexes.indexOf(t);throw Error("Error: isControlPoint called with not in list point.")}addPoint(e){this.pointArray.push(e)}addControlPoint(e){let t=this.pointArray.indexOf(e);if(-1!==t)this._controlPointIndexes.push(t);else throw Error("Cannot mark a non registered point as control point.")}getControlPoints(){return this._controlPointIndexes.map(e=>this.pointArray[e])}getNumControlPoints(){return this._controlPointIndexes.length}removeLastControlPoint(){this._controlPointIndexes.length&&this._controlPointIndexes.pop()}getLastControlPoint(){if(this._controlPointIndexes.length)return this.pointArray[this._controlPointIndexes[this._controlPointIndexes.length-1]]}removeLastPoints(e){this.pointArray.splice(this.pointArray.length-e,e)}addPoints(e){this.pointArray=this.pointArray.concat(e)}prependPath(e){let t=e.pointArray.length,n=[];this.pointArray=e.pointArray.concat(this.pointArray);for(let e=0;e<this._controlPointIndexes.length;++e)n[e]=this._controlPointIndexes[e]+t;this._controlPointIndexes=e._controlPointIndexes.concat(n)}appendPath(e){this.addPoints(e.pointArray),e._controlPointIndexes.forEach(e=>this._controlPointIndexes.push(e))}}class C7 extends du{static{this.toolName="LivewireContour"}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{getTextLines:_e,calculateStats:!0,preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:C.Shift,snapHandleNearby:2,interpolation:{enabled:!1,nearestEdge:2,showInterpolationPolyline:!1},decimate:{enabled:!1,epsilon:.1},actions:{cancelInProgress:{method:"cancelInProgress",bindings:[{key:"Escape"}]}}}}){super(e,t),this.isHandleOutsideImage=!1,this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),o=i*i,r=t.data.contour.polyline.map(e=>a.worldToCanvas(e)),l=r[r.length-1];for(let e=0;e<r.length;e++){let t=r[e];if(oo(l,t,n)<=o)return!0;l=t}return!1},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(n),oX(i),e.preventDefault()},this.handleSelectedCallback=(e,t,n)=>{let i,{element:a}=e.detail,{data:o}=t;t.highlighted=!0;let r=!1;if(n.worldPosition)r=!0;else{let{points:e}=o.handles;i=e.findIndex(e=>e===n)}let l=ox(a,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:i,movingTextBox:r},this._activateModify(a),oX(l),e.preventDefault()},this._endCallback=(e,t=!1)=>{let{element:n}=e.detail,{annotation:i,viewportIdsToRender:a,newAnnotation:o,contourHoleProcessingEnabled:r}=this.editData,{data:l}=i;this.doneEditMemo(),l.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n);let s=(0,ej.Ay)(n);if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage||t){tu(i.annotationUID),this.clearEditData(),oX(a);return}oX(a);let d=o?eY.Completed:eY.HandlesUpdated;this.triggerChangeEvent(i,s,d,r),this.clearEditData()},this.triggerChangeEvent=(e,t,n=eY.StatsUpdated,i=!1)=>
312{n===eY.Completed?e6(e,i):e9(e,t.viewport.element,n)},this._mouseDownCallback=e=>{let t=e.type===eK.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:i,worldToSlice:a,sliceToWorld:o,newAnnotation:r}=this.editData;if(this.editData.closed)return;let l=e.detail,{element:s}=l,{currentPoints:d}=l,{canvas:h,world:c}=d,u=c,{viewport:g}=(0,ej.Ay)(s),m=this.editData.currentPath.getControlPoints(),p=m.length>=2&&t;if(this.doneEditMemo(),this.createMemo(s,n,{newAnnotation:r&&1===m.length}),m.length>=2){let e={index:-1,distSquared:1/0};for(let t=0,n=m.length;t<n;t++){let n=o(m[t]),i=aH(h,g.worldToCanvas(n));i<=100&&i<e.distSquared&&(e.distSquared=i,e.index=t)}0===e.index&&(p=!0)}let{snapHandleNearby:f}=this.configuration;if(f&&!this.editData.closed){let e=new C9,t=this.scissors.findMinNearby(a(c),1),n=this.scissors.findPathToPoint(t);e.addPoints(n),e.prependPath(this.editData.confirmedPath),u=o(t),this.editData.currentPath=e}this.editData.closed=this.editData.closed||p,this.editData.confirmedPath=this.editData.currentPath;let v=this.editData.currentPath.getLastPoint();this.editData.confirmedPath.addControlPoint(v),n.data.handles.points.push(o(v)),this.scissors.startSearch(a(u)),n.invalidated=!0,oX(i),this.editData.closed&&(p&&(n.data.isOpenUShapeContour="lineSegment"),this.updateAnnotation(this.editData.confirmedPath),this._endCallback(e)),e.preventDefault()},this._mouseMoveCallback=e=>{let{element:t,currentPoints:n}=e.detail,{world:i,canvas:a}=n,o=ox(t,this.getToolName());this.editData.lastCanvasPoint=a;let{width:r,height:l}=this.scissors,{worldToSlice:s}=this.editData,d=s(i);if(d[0]<0||d[1]<0||d[0]>=r||d[1]>=l)return;let h=this.scissors.findPathToPoint(d),c=new C9;c.addPoints(h),c.prependPath(this.editData.confirmedPath),this.editData.currentPath=c,oX(o),e.preventDefault()},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,movingTextBox:o,handleIndex:r,newAnnotation:l}=this.editData;this.createMemo(n,i,{newAnnotation:l});let{data:s}=i;if(o){let{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else if(void 0===r)console.warn("Drag annotation not implemented");else{let{currentPoints:e}=t,a=e.world;this.editHandle(a,n,i,r)}this.editData.hasMoved=!0,oX(a)},this.cancel=e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData;return i&&tu(t.annotationUID),oX(n),this.doneEditMemo(),this.scissors=null,t.annotationUID},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(eK.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(eK.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(eK.TOUCH_TAP,this._mouseDownCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(eK.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(eK.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(eK.TOUCH_TAP,this._mouseDownCallback)},this._calculateCachedStats=(e,t)=>{if(!this.configuration.calculateStats)return;let n=e.data;if(!n.contour.closed)return;let i=(0,ej.Ay)(t),{viewport:a}=i,{cachedStats:o}=n,{polyline:r}=n.contour,l=Object.keys(o);for(let e=0;e<l.length;e++){let t=l[e],n=this.getTargetImageData(t);
312if(!n)continue;let{metadata:i}=n,s=r.map(e=>a.worldToCanvas(e)),d=s[0],h=a.canvasToWorld(d),c=a.canvasToWorld([d[0]+1,d[1]]),u=a.canvasToWorld([d[0],d[1]+1]),g=iT.Io(h,c),m=iT.Io(h,u),{imageData:p}=n,{scale:f,areaUnit:v}=aU(n,()=>{let{maxX:e,maxY:t,minX:n,minY:i}=aG(s),o=a.canvasToWorld([n,i]),r=iW.A(p,o),l=a.canvasToWorld([e,t]);return[r,iW.A(p,l)]}),I=aX(s)/f/f;I*=g*m,o[t]={Modality:i.Modality,area:I,areaUnit:v}}let s=e.invalidated;return e.invalidated=!1,s&&this.triggerAnnotationModified(e,i,eY.StatsUpdated),o},this._renderStats=(e,t,n,i)=>{let a=e.data,o=this.getTargetId(t);if(!a.contour.closed||!i.visibility)return;let r=this.configuration.getTextLines(a,o);if(!r||0===r.length)return;let l=a.handles.points.map(e=>t.worldToCanvas(e));if(!a.handles.textBox.hasMoved){let e=lS(l);a.handles.textBox.worldPosition=t.canvasToWorld(e)}let s=t.worldToCanvas(a.handles.textBox.worldPosition),{x:d,y:h,width:c,height:u}=lA(n,e.annotationUID??"","textBox",r,s,l,{},i);a.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([d,h]),topRight:t.canvasToWorld([d+c,h]),bottomLeft:t.canvasToWorld([d,h+u]),bottomRight:t.canvasToWorld([d+c,h+u])}},this.triggerAnnotationModified=(e,t,n=eY.StatsUpdated)=>{let{viewportId:i,renderingEngineId:a}=t,o=eK.ANNOTATION_MODIFIED;(0,eq.A)(ez.A,o,{annotation:e,viewportId:i,renderingEngineId:a,changeType:n})},this._throttledCalculateCachedStats=oA(this._calculateCachedStats,100,{trailing:!0})}setupBaseEditData(e,t,n,i,a){let o,r,l,s,d,{viewport:h}=(0,ej.Ay)(t);this.isDrawing=!0;let c=h.getImageData(),{imageData:u}=c;if(h instanceof i8.A)if(h instanceof i8.A){let e=fH.A(h),{sliceToIndexMatrix:t,indexToSliceMatrix:n}=e;o=e=>{let t=iW.A(u,e),i=iT.Z0([0,0,0],t,n);return[i[0],i[1]]},r=e=>{let n=iT.Z0([0,0,0],[e[0],e[1],0],t);return C1.A(u,n)},d=e.scalarData,l=e.width,s=e.height}else throw Error("Viewport not supported");else l=c.dimensions[0],s=c.dimensions[1],o=e=>{let t=iW.A(u,e);return[t[0],t[1]]},r=e=>C1.A(u,[e[0],e[1],0]),d=c.scalarData;d=C2.A(d,l,s);let{voiRange:g}=h.getProperties(),m=o(e);this.scissors=C8.createInstanceFromRawPixelData(d,l,s,g),i&&(this.scissorsNext=C8.createInstanceFromRawPixelData(d,l,s,g),this.scissorsNext.startSearch(o(i))),this.scissors.startSearch(m);let p=!i,f=new C9,v=new C9,I=p?void 0:new C9;f.addPoint(m),f.addControlPoint(m);let C=ox(t,this.getToolName()),_=h.worldToCanvas(e);this.editData={annotation:n,viewportIdsToRender:C,newAnnotation:p,hasMoved:!1,lastCanvasPoint:_,confirmedPath:f,currentPath:v,confirmedPathNext:I,closed:!1,handleIndex:this.editData?.handleIndex??n.handles?.activeHandleIndex,worldToSlice:o,sliceToWorld:r,contourHoleProcessingEnabled:a}}addNewAnnotation(e){let{currentPoints:t,element:n}=e.detail,{world:i}=t,a=this.createAnnotation(e),o=ra(e.detail.event)===this.configuration.contourHoleAdditionModifierKey;return this.setupBaseEditData(i,n,a,void 0,o),this.addAnnotation(a,n),this._activateDraw(n),e.preventDefault(),oX(this.editData.viewportIdsToRender),a}clearEditData(){this.editData=null,this.scissors=null,this.scissorsNext=null,this.isDrawing=!1}editHandle(e,t,n,i){let{data:a}=n,{points:o}=a.handles,{length:r}=o,l=o[(i-1+r)%r],s=o[(i+1)%r];if(!this.editData?.confirmedPathNext){this.setupBaseEditData(l,t,n,s);let{polyline:e}=a.contour,o=new C9,r=new C9,{worldToSlice:d}=this.editData,h=u1(n,i-1),c=u1(n,i+1);if(-1===c||-1===h)throw Error(`Can't find handle index ${-1===c&&s} ${-1===h&&l}`);0===i?r.addPoints(e.slice(c+1,h).map(d)):(o.addPoints(e.slice(0,h+1).map(d)),r.addPoints(e.slice(c,e.length).map(d))),this.editData.confirmedPath=o,this.editData.confirmedPathNext=r}let{editData:d,scissors:h}=this,{worldToSlice:c,sliceToWorld:u}=d,{activeHandleIndex:g}=a.handles;if(null==g)a.handles.activeHandleIndex=i;else if(g!==i)throw Error(`Trying to edit a different handle than the one currently being edited ${i}!==${a.handles.activeHandleIndex}`);let m=c(e);if(m[0]<0||m[0]>=h.width||m[1]<0||m[1]>=h.height)return;o[i]=u(m);let p=h.findPathToPoint(m),f=this.scissorsNext.findPathToPoint(m),v=new C9;v.prependPath(d.confirmedPath),0!==i&&v.addPoints(p),v.addPoints(f.reverse()),v.appendPath(d.c
312onfirmedPathNext),0===i&&v.addPoints(p),d.currentPath=v,n.invalidated=!0,d.hasMoved=!0,d.closed=!0}renderAnnotation(e,t){return this.updateAnnotation(this.editData?.currentPath),super.renderAnnotation(e,t)}isContourSegmentationTool(){return!1}createAnnotation(e){let t=super.createAnnotation(e),{world:n}=e.detail.currentPoints;return ab.A(t,{data:{handles:{points:[[...n]]}}})}cancelInProgress(e,t,n){if(!this.editData)return void this.undo();this._endCallback(n,!0)}renderAnnotationInstance(e){let{annotation:t,enabledElement:n,svgDrawingHelper:i,annotationStyle:a,targetId:o}=e,{viewport:r}=n,{element:l}=r,{worldToCanvas:s}=r,{annotationUID:d,data:h,highlighted:c}=t,{handles:u}=h,g=this.editData?.newAnnotation,{lineWidth:m,lineDash:p,color:f}=a;return(c||g&&t.annotationUID===this.editData?.annotation?.annotationUID)&&li(i,d,"0",u.points.map(s),{color:f,lineDash:p,lineWidth:m}),super.renderAnnotationInstance(e),h.cachedStats[o]&&h.cachedStats[o]?.areaUnit!==null?t.invalidated&&this._throttledCalculateCachedStats(t,l):(h.cachedStats[o]={Modality:null,area:null,areaUnit:null},this._calculateCachedStats(t,l)),this._renderStats(t,r,i,a.textbox),!0}updateAnnotation(e){if(!this.editData||!e)return;let{annotation:t,sliceToWorld:n,worldToSlice:i,closed:a,newAnnotation:o}=this.editData,{pointArray:r}=e;r.length>1&&(r=[...r,r[0]]);let l=o&&a?_.Clockwise:void 0;this.updateContourPolyline(t,{points:r,closed:a,targetWindingDirection:l},{canvasToWorld:n,worldToCanvas:i})}}let C6=C7;function _e(e,t){let{area:n,areaUnit:i}=e.cachedStats[t],a=[];if(n){let e=`Area: ${aD.A(n)} ${i}`;a.push(e)}return a}class _t extends C6{static{this.toolName="LivewireContourSegmentationTool"}
312updateInterpolatedAnnotation(e,t){!this.editData&&e.invalidated&&e.data.handles.interpolationSources&&(e.data.contour.originalPolyline=e.data.contour.polyline,queueMicrotask(()=>{if(!e.data.handles.interpolationSources)return;let{points:n}=e.data.handles,{element:i}=t.viewport;this.setupBaseEditData(n[0],i,e);let{length:a}=n,{scissors:o}=this,{nearestEdge:r,repeatInterpolation:l}=this.configuration.interpolation;e.data.handles.originalPoints=n;let{worldToSlice:s,sliceToWorld:d}=this.editData,h=[];if(r){let e=s(n[n.length-1]);n.forEach((t,i)=>{let a=s(t);e=a,h.push(a),o.startSearch(e),o.findPathToPoint(a),o.findPathToPoint(s(n[(i+3)%n.length]));let l=o.findMinNearby(a,r);aM.n4(a,l)||(h[i]=l,e=l,n[i]=d(l))})}let c=new C9;for(let e=0;e<a-1;e++){o.startSearch(s(n[e]));let t=o.findPathToPoint(s(n[(e+1)%a]));c.addPoints(t)}this.updateAnnotation(c),this.scissors=null,this.scissorsNext=null,this.editData=null,e.data.handles.interpolationSources=null,l&&e9(e,t.viewport.element,eY.InterpolationUpdated)}))}renderAnnotationInstance(e){let{enabledElement:t,svgDrawingHelper:n}=e,i=e.annotation,{annotationUID:a}=i,{viewport:o}=t,{worldToCanvas:r}=o,{showInterpolationPolyline:l}=this.configuration.interpolation||{};this.updateInterpolatedAnnotation?.(i,t);let{originalPolyline:s}=i.data.contour,d=super.renderAnnotationInstance(e);if(l&&s&&i.autoGenerated){let e=s.map(r);e.push(e[0]),lt(n,a,"interpolationContour-0",e,{color:"#70ffff",lineWidth:1,fillOpacity:0})}return d}isContourSegmentationTool(){return!0}static{dA.register(this)}}let _n=_t;class _i extends sd{static{this.toolName="ArrowAnnotate"}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,getTextCallback:_a,changeTextCallback:_o,preventHandleOutsideImage:!1,arrowFirst:!0,arrowHeadStyle:"legacy"}}){super(e,t),this.addNewAnnotation=e=>{this.startGroupRecording();let{currentPoints:t,element:n}=e.detail,i=t.world;o2(n),this.isDrawing=!0;let{arrowFirst:a}=this.configuration,o=this.createAnnotation(e,[[...i],[...i]],{data:{handles:{arrowFirst:a}}});th(o,n);let r=ox(n,this.getToolName());return this.editData={annotation:o,viewportIdsToRender:r,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(n),e.preventDefault(),oX(r),o},this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,[r,l]=o.handles.points,s=a.worldToCanvas(r),d=a.worldToCanvas(l),h={start:{x:s[0],y:s[1]},end:{x:d[0],y:d[1]}};return u8([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(n),o2(n);let{renderingEngine:a}=(0,ej.Ay)(n);oX(i),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o,movingTextBox:r}=this.editData,{data:l}=n;(!a||o)&&(l.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),a?this.configuration.getTextCallback(e=>{if(!e){tu(n.annotationUID),oX(i),this.editData=null,this.isDrawing=!1;return}n.data.label=e,e9(n,t,eY.HandlesUpdated),e7(n),this.createMemo(t,n,{newAnnotation:!!this.memo}),vm(n,t,e),this.endGroupRecording(),this.doneEditMemo(),oX(i)}):r||e9(n,t,eY.HandlesUpdated),this.doneEditMemo(),this.editData=null,this.isDrawing=!1)},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:o,movingTextBox:r,newAnnotation:l}=this.editData;this.createMemo(n,i,{newAnnotation:l});let{data:s}=i;if(r){let{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else if(void 0===o){let{deltaPoints:e}=t,n=e.world;s.handles.points.forEach(e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]}),i.invalidated=!0}else{let{currentPoints:e}=t,n=e.world;s.handles.points[o]=[...n],i.invalidated=!0}this.editData.hasMoved=!0,oX(a),i.invalidated&&e9(i,n,eY.HandlesUpdated)},this.touchTapCallback=e=>{2==e.detail.taps&&this.doubleClickCallback(e)},this.doubleClickCallback=e=>{let t=e.detail,{element:n}=t,i=ti(this.getToolName(),n);if(i=this.filterInteractableAnnotationsForElement(n,i),!i?.length)return;let a=i.find(e=>this.isPointNearTool(n,e,t.currentPoints.canvas,6));a&&(this.configuration.changeTextCallback(a,e.detail,this._doneChangingTextCallback.bind(this,n,a)),this.editData=null,this.isDrawing=!1,e.stopImmediatePropagation(),e.preventDefault())},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,oX(n),i&&e7(t),this.editData=null,t.annotationUID}},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<o.length;e++){let a,l=o[e],{annotationUID:s,data:d}=l,{handles:h,label:c}=d,{points:u,activeHandleIndex:g}=h;r.annotationUID=s;let{color:m,lineWidth:p,lineDash:f,markerSize:v}=this.getAnnotationStyle({annotation:l,styleSpecifier:r}),I=u.map(e=>i.worldToCanvas(e));if(iN(s)||this.editData||null===g||(a=[I[g]]),!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(s))continue;let C=!!lz("showHandlesAlways",{});if((a||C)&&li(t,s,"0",I,{color:m,lineWidth:p}),this.configuration.arrowFirst?ug(t,s,"1",I[1],I[0],{color:m,width:p,lineDash:f,viaMarker:"legacy"!==this.configuration.arrowHeadStyle,markerSize:v}):ug(t,s,"1",I[0],I[1],{color:m,width:p,lineDash:f,viaMarker:"legacy"!==this.configuration.arrowHeadStyle,markerSize:v}),n=!0,!c)continue;let _=this.getLinkedTextBoxStyle(r,l);if(!_.visibility){d.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}if(!d.handles.textBox.hasMoved){let e=I[1];d.handles.textBox.worldPosition=i.canvasToWorld(e)}let{x:E,y:w,width:A,height:S}=lA(t,s,"1",[c],i.worldToCanvas(d.handles.textBox.worldPosition),I,{},_);d.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([E,w]),topRight:i.canvasToWorld([E+A,w]),bottomLeft:i.canvasToWorld([E,w+S]),bottomRight:i.canvasToWorld([E+A,w+S])}}return n}}static{this.hydrate=(e,t,n,i)=>{let a=(0,ej.yj)(e);if(!a)return;let{FrameOfReferenceUID:o,referencedImageId:r,viewPlaneNormal:l,instance:s,viewport:d}=this.hydrateBase(_i,a,t,i),{toolInstance:h,...c}=i||{};th(this.createAnnotation({annotationUID:i?.annotationUID||eX.A(),data:{label:n||"",handles:{points:t}},autoGenerated:!1,metadata:{toolName:s.getToolName(),viewPlaneNormal:l,FrameOfReferenceUID:o,referencedImageId:r,...c}}),d.element),oX([d.id])}}handleSelectedCallback(e,t,n){let i,{element:a}=e.detail,{data:o}=t;t.highlighted=!0;let r=!1;n.worldPosition?r=!0:i=o.handles.points.findIndex(e=>e===n);let l=ox(a,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:i,movingTextBox:r},this._activateModify(a),o2(a);let{renderingEngine:s}=(0,ej.Ay)(a);oX(l),e.preventDefault()}_doneChangingTextCallback(e,t,n){t.data.label=n,oX(ox(e,this.getToolName())),e9(t,e)}_isInsideVolume(e,t,n){return lF.A(e,n)&&lF.A(t,n)}}function _a(e){return e(prompt("Enter your annotation:"))}function _o(e,t,n){return n(prompt("Enter your annotation:"))}let _r=_i;class _l extends sd{static{this.toolName="Angle"}constructor(e={}
312,t={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,showAngleArc:!1,arcOffset:5,preventHandleOutsideImage:!1,getTextLines:_s}}){super(e,t),this.addNewAnnotation=e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;let{currentPoints:t,element:n}=e.detail,i=t.world;o2(n),this.isDrawing=!0;let a=this.createAnnotation(e,[[...i],[...i]]);th(a,n);let o=ox(n,this.getToolName());return this.editData={annotation:a,viewportIdsToRender:o,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(n),e.preventDefault(),oX(o),a},this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,[r,l,s]=o.handles.points,d=a.worldToCanvas(r),h=a.worldToCanvas(l),c={start:{x:d[0],y:d[1]},end:{x:h[0],y:h[1]}};if(u8([c.start.x,c.start.y],[c.end.x,c.end.y],[n[0],n[1]])<=i)return!0;if(!s)return!1;let u=a.worldToCanvas(s),g={start:{x:h[0],y:h[1]},end:{x:u[0],y:u[1]}};return u8([g.start.x,g.start.y],[g.end.x,g.end.y],[n[0],n[1]])<=i},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(n),o2(n);let{renderingEngine:a}=(0,ej.Ay)(n);oX(i),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;if(a&&!o)return;if(this.angleStartedNotYetCompleted&&2===r.handles.points.length){this.editData.handleIndex=2;return}this.angleStartedNotYetCompleted=!1,r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t);let{renderingEngine:l}=(0,ej.Ay)(t);this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),this.doneEditMemo(),a&&e7(n),this.editData=null,this.isDrawing=!1},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:o,movingTextBox:r,newAnnotation:l}=this.editData,{data:s}=i;if(this.createMemo(n,i,{newAnnotation:l}),r){let{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else if(void 0===o){let{deltaPoints:e}=t,n=e.world;s.handles.points.forEach(e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]}),i.invalidated=!0}else{let{currentPoints:e}=t,n=e.world;s.handles.points[o]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;let{renderingEngine:d}=(0,ej.Ay)(n);oX(a),i.invalidated&&e9(i,n,eY.HandlesUpdated)},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,oX(n),i&&e7(t),this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID}},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r=this.getTargetId(i),l=i.getRenderingEngine(),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let a=0;a<o.length;a++){let d,h=o[a],{annotationUID:c,data:u}=h,{points:g,activeHandleIndex:m}=u.handles;s.annotationUID=c;let{color:p,lineWidth:f,lineDash:v,angleArcLineDash:I}=this.getAnnotationStyle({annotation:h,styleSpecifier:s}),C=g.map(e=>i.worldToCanvas(e));if(u.cachedStats[r]&&null!=u.cachedStats[r].angle?h.invalidated&&this._throttledCalculateCachedStats(h,l,e):(u.cachedStats[r]={angle:null},this._calculateCachedStats(h,l,e)),iN(h.annotationUID)||this.editData||null===m||(d=[C[m]]),!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(c))continue;let _=!!lz("showHandlesAlways",{});(d||_)&&li(t,c,"0",C,{color:p,lineDash:v,lineWidth:f});let E="1";if(l_(t,c,E,C[0],C[1],{color:p,width:f,lineDash:v}),n=!0,3!==C.length)break;if(l_(t,c,E="2",C[1],C[2],{color:p,width:f,lineDash:v}),this.configuration.showAngleArc){let e=C[1],n=this.configuration.arcOffset,i=Math.min(u8([e[0],e[1]],[C[0][0],C[
3120][1]],[C[2][0],C[2][1]]),u8([e[0],e[1]],[C[2][0],C[2][1]],[C[0][0],C[0][1]]))/n,a=[],o=Math.atan2(C[0][1]-e[1],C[0][0]-e[0]),r=Math.atan2(C[2][1]-e[1],C[2][0]-e[0]);if(r<o&&(r+=2*Math.PI),r-o>Math.PI){let e=o;o=r,r=e+2*Math.PI}for(let t=0;t<=32;t++){let n=o+t/32*(r-o);a.push([e[0]+i*Math.cos(n),e[1]+i*Math.sin(n)])}le(t,c,"3",a,{color:p,width:f,lineDash:I})}if(!u.cachedStats[r]?.angle)continue;let w=this.getLinkedTextBoxStyle(s,h);if(!w.visibility){u.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}let A=this.configuration.getTextLines(u,r);if(!u.handles.textBox.hasMoved){let e=C[1];u.handles.textBox.worldPosition=i.canvasToWorld(e)}let{x:S,y:y,width:b,height:T}=lA(t,c,"1",A,i.worldToCanvas(u.handles.textBox.worldPosition),C,{},w);u.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([S,y]),topRight:i.canvasToWorld([S+b,y]),bottomLeft:i.canvasToWorld([S,y+T]),bottomRight:i.canvasToWorld([S+b,y+T])}}return n},this._throttledCalculateCachedStats=oA(this._calculateCachedStats,100,{trailing:!0})}static{this.hydrate=(e,t,n)=>{let i=(0,ej.yj)(e);if(!i)return;let{FrameOfReferenceUID:a,referencedImageId:o,viewPlaneNormal:r,instance:l,viewport:s}=this.hydrateBase(_l,i,t,n),{toolInstance:d,...h}=n||{};th({annotationUID:n?.annotationUID||eX.A(),data:{handles:{points:t}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:l.getToolName(),viewPlaneNormal:r,FrameOfReferenceUID:a,referencedImageId:o,...h}},s.element),oX([s.id])}}handleSelectedCallback(e,t,n){let i,{element:a}=e.detail,{data:o}=t;t.highlighted=!0;let r=!1;n.worldPosition?r=!0:i=o.handles.points.findIndex(e=>e===n);let l=ox(a,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:i,movingTextBox:r},this._activateModify(a),o2(a);let{renderingEngine:s}=(0,ej.Ay)(a);oX(l),e.preventDefault()}_calculateCachedStats(e,t,n){let i=e.data,{element:a}=n.viewport;if(3!==i.handles.points.length)return;let o=i.handles.points[0],r=i.handles.points[1],l=i.handles.points[2],{cachedStats:s}=i,d=Object.keys(s);for(let e=0;e<d.length;e++){let t=d[e],n=pA([o,r],[r,l]),{dimensions:i,imageData:a}=this.getTargetImageData(t);this.isHandleOutsideImage=[o,r,l].map(e=>iW.A(a,e)).some(e=>!lF.A(e,i)),s[t]={angle:isNaN(n)?"Incomplete Angle":n}}let h=e.invalidated;return e.invalidated=!1,h&&e9(e,a,eY.StatsUpdated),s}}function _s(e,t){let{angle:n}=e.cachedStats[t];return void 0===n?void 0:isNaN(n)?[`${n}`]:[`${aD.A(n)} ${String.fromCharCode(176)}`]}let _d=_l,_h=(...e)=>{let t=2===e[0].length?[0,0]:[0,0,0],n=e.length;for(let i of e)t[0]+=i[0]/n,t[1]+=i[1]/n,3===t.length&&(t[2]+=i[2]/n);return t};class _c extends sd{static{this.toolName="CobbAngle"}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:_u,showArcLines:!1}}){super(e,t),this.addNewAnnotation=e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;let{currentPoints:t,element:n}=e.detail,i=t.world;o2(n),this.isDrawing=!0;let a=this.createAnnotation(e,[[...i],[...i]]);th(a,n);let o=ox(n,this.getToolName());return this.editData={annotation:a,viewportIdsToRender:o,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(n),e.preventDefault(),oX(o),a},this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,{distanceToPoint:r,distanceToPoint2:l}=this.distanceToLines({viewport:a,points:o.handles.points,canvasCoords:n,proximity:i});return!!(r<=i)||!!(l<=i)},this.toolSelectedCallback=(e,t,n,i,a=6)=>{let{element:o}=e.detail;t.highlighted=!0;let r=ox(o,this.getToolName()),{renderingEngine:l,viewport:s}=(0,ej.Ay)(o),{isNearFirstLine:d,isNearSecondLine:h}=this.distanceToLines({viewport:s,points:t.data.handles.points,canvasCoords:i,proximity:a});this.editData={annotation:t,viewportIdsToRender:r,movingTextBox:!1,isNearFirstLine:d,isNearSecondLine:h},this._activateModify(o),o2(o),oX(r),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;if(a&&!o)return;if(this.doneEditMemo(),this.angleStartedNotYetCompleted&&r.handles.points.length<4){o1(t),this.editData.handleIndex=r.handles.points.length;return}this.angleStartedNotYetCompleted=!1,r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t);let{renderingEngine:l}=(0,ej.Ay)(t);this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),a&&e7(n),this.editData=null,this.isDrawing=!1},this._mouseDownCallback=e=>{let{annotation:t,handleIndex:n}
312=this.editData,{element:i,currentPoints:a}=e.detail,o=a.world,{data:r}=t;if(1===n){r.handles.points[1]=o,this.editData.hasMoved=r.handles.points[1][0]!==r.handles.points[0][0]||r.handles.points[1][1]!==r.handles.points[0][0];return}if(3===n){r.handles.points[3]=o,this.editData.hasMoved=r.handles.points[3][0]!==r.handles.points[2][0]||r.handles.points[3][1]!==r.handles.points[2][0],this.angleStartedNotYetCompleted=!1;return}this.editData.hasMoved=!1,o2(i),r.handles.points[2]=r.handles.points[3]=o,this.editData.handleIndex=r.handles.points.length-1},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:o,movingTextBox:r,isNearFirstLine:l,isNearSecondLine:s,newAnnotation:d}=this.editData;this.createMemo(n,i,{newAnnotation:d});let{data:h}=i;if(r){let{deltaPoints:e}=t,n=e.world,{textBox:i}=h.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else if(void 0===o&&(l||s)){let{deltaPoints:e}=t,n=e.world,a=h.handles.points;l?[a[0],a[1]].forEach(e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]}):s&&[a[2],a[3]].forEach(e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]}),i.invalidated=!0}else{let{currentPoints:e}=t,n=e.world;h.handles.points[o]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;let{renderingEngine:c}=(0,ej.Ay)(n);oX(a),i.invalidated&&e9(i,n,eY.HandlesUpdated)},this.cancel=e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;a.handles.points.length<4&&tu(t.annotationUID),t.highlighted=!1,a.handles.activeHandleIndex=null;let{renderingEngine:o}=(0,ej.Ay)(e);return oX(n),i&&e7(t),this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_START,this._mouseDownCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_START,this._mouseDownCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_START,this._mouseDownCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_START,this._mouseDownCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let a=0;a<o.length;a++){let s,d=o[a],{annotationUID:h,data:c}=d,{points:u,activeHandleIndex:g}=c.handles,m=this.getTargetId(i,c);l.annotationUID=h;let{color:p,lineWidth:f,lineDash:v}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),I=u.map(e=>i.worldToCanvas(e));if(c.cachedStats[m]&&null!=c.cachedStats[m].angle?d.invalidated&&this._throttledCalculateCachedStats(d,r,e):(c.cachedStats[m]={angle:null,arc1Angle:null,arc2Angle:null,points:{world:{arc1Start:null,arc1End:null,arc2Start:null,arc2End:null,arc1Angle:null,arc2Angle:null},canvas:{arc1Start:null,arc1End:null,arc2Start:null,arc2End:null,arc1Angle:null,arc2Angle:null}}},this._calculateCachedStats(d,r,e)),iN(h)||this.editData||null===g||(s=[I[g]]),!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(h))continue;let C=!!lz("showHandlesAlways",{});
312(s||C)&&li(t,h,"0",I,{color:p,lineDash:v,lineWidth:f});let _=[I[0],I[1]],E=[I[2],I[3]],w="line1";if(l_(t,h,w,_[0],_[1],{color:p,width:f,lineDash:v}),n=!0,I.length<4)break;l_(t,h,w="line2",E[0],E[1],{color:p,width:f,lineDash:v}),l_(t,h,w="linkLine",_h(_[0],_[1]),_h(E[0],E[1]),{color:p,lineWidth:"1",lineDash:"1,4"});let{arc1Start:A,arc1End:S,arc2End:y,arc2Start:b}=c.cachedStats[m].points.canvas,{arc1Angle:T,arc2Angle:M}=c.cachedStats[m];if(this.configuration.showArcLines&&(l_(t,h,w="arc1",A,S,{color:p,lineWidth:"1"}),l_(t,h,w="arc2",b,y,{color:p,lineWidth:"1"})),!c.cachedStats[m]?.angle)continue;let D=this.getLinkedTextBoxStyle(l,d);if(!D.visibility){c.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}let O=this.configuration.getTextLines(c,m);if(!c.handles.textBox.hasMoved){let e=lS(I);c.handles.textBox.worldPosition=i.canvasToWorld(e)}let{x:x,y:P,width:L,height:N}=lA(t,h,"cobbAngleText",O,i.worldToCanvas(c.handles.textBox.worldPosition),I,{},D);c.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([x,P]),topRight:i.canvasToWorld([x+L,P]),bottomLeft:i.canvasToWorld([x,P+N]),bottomRight:i.canvasToWorld([x+L,P+N])},this.configuration.showArcLines&&(lC(t,h,"arcAngle1",[`${T.toFixed(2)} ${String.fromCharCode(176)}`],_h(A,S),{...D,padding:3}),lC(t,h,"arcAngle2",[`${M.toFixed(2)} ${String.fromCharCode(176)}`],_h(b,y),{...D,padding:3}))}return n},this.distanceToLines=({viewport:e,points:t,canvasCoords:n,proximity:i})=>{let[a,o,r,l]=t,s=e.worldToCanvas(a),d=e.worldToCanvas(o),h=e.worldToCanvas(r),c=e.worldToCanvas(l),u={start:{x:s[0],y:s[1]},end:{x:d[0],y:d[1]}},g={start:{x:h[0],y:h[1]},end:{x:c[0],y:c[1]}},m=u8([u.start.x,u.start.y],[u.end.x,u.end.y],[n[0],n[1]]),p=u8([g.start.x,g.start.y],[g.end.x,g.end.y],[n[0],n[1]]),f=!1,v=!1;return m<=i?f=!0:p<=i&&(v=!0),{distanceToPoint:m,distanceToPoint2:p,isNearFirstLine:f,isNearSecondLine:v}},this.getArcsStartEndPoints=({firstLine:e,secondLine:t,mid1:n,mid2:i})=>{let a=[n,i],o=pA(e,a),r=pA(t,a),l=+(o>90),s=r>90?0:1,d=_h(a[0],a[1]),h=Math.sqrt((a[1][0]-a[0][0])**2+(a[1][1]-a[0][1])**2),c=_h(e[0],e[1]),u=_h(t[0],t[1]),g=[e[l][0]-c[0],e[l][1]-c[1]],m=Math.sqrt(g[0]**2+g[1]**2),p=[g[0]/m,g[1]/m],f=[c[0]+p[0]*h*.1,c[1]+p[1]*h*.1],v=[d[0]-n[0],d[1]-n[1]],I=Math.sqrt(v[0]**2+v[1]**2),C=[v[0]/I,v[1]/I],_=[n[0]+C[0]*h*.1,n[1]+C[1]*h*.1],E=[t[s][0]-u[0],t[s][1]-u[1]],w=Math.sqrt(E[0]**2+E[1]**2),A=[E[0]/w,E[1]/w],S=[u[0]+A[0]*h*.1,u[1]+A[1]*h*.1],y=[d[0]-i[0],d[1]-i[1]],b=Math.sqrt(y[0]**2+y[1]**2),T=[y[0]/b,y[1]/b];return{arc1Start:f,arc1End:_,arc2Start:S,arc2End:[i[0]+T[0]*h*.1,i[1]+T[1]*h*.1],arc1Angle:o>90?180-o:o,arc2Angle:r>90?180-r:r}},this._throttledCalculateCachedStats=oA(this._calculateCachedStats,25,{trailing:!0})}handleSelectedCallback(e,t,n,i="mouse"){let a,{element:o}=e.detail,{data:r}=t;t.highlighted=!0;let l=!1;n.worldPosition?l=!0:a=r.handles.points.findIndex(e=>e===n);let s=ox(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:s,handleIndex:a,movingTextBox:l},this._activateModify(o),o2(o),oX(s),e.preventDefault()}_calculateCachedStats(e,t,n){let i=e.data;if(4!==i.handles.points.length)return;let a=[null,null],o=[null,null],r=Number.MAX_VALUE;for(let e=0;e<2;e+=1)for(let t=2;t<4;t+=1){let n=iT.Io(i.handles.points[e],i.handles.points[t]);n<r&&(r=n,a[1]=i.handles.points[e],a[0]=i.handles.points[(e+1)%2],o[0]=i.handles.points[t],o[1]=i.handles.points[2+(t-1)%2])}let{viewport:l}=n,{element:s}=l,d=i.handles.points.map(e=>l.worldToCanvas(e)),h=[d[0],d[1]],c=[d[2],d[3]],u=_h(h[0],h[1]),g=_h(c[0],c[1]),{arc1Start:m,arc1End:p,arc2End:f,arc2Start:v,arc1Angle:I,arc2Angle:C}=this.getArcsStartEndPoints({firstLine:h,secondLine:c,mid1:u,mid2:g}),{cachedStats:_}=i,E=Object.keys(_);for(let e=0;e<E.length;e++)_[E[e]]={angle:pA(a,o),arc1Angle:I,arc2Angle:C,points:{canvas:{arc1Start:m,arc1End:p,arc2End:f,arc2Start:v},world:{arc1Start:l.canvasToWorld(m),arc1End:l.canvasToWorld(p),arc2End:l.canvasToWorld(f),arc2Start:l.canvasToWorld(v)}}};let w=e.invalidated;return e.invalidated=!1,w&&e9(e,s,eY.StatsUpdated),_}}function _u(e,t){let{angle:n}=e.cachedStats[t];if(void 0!==n)return[`${n.toFixed(2)} ${String.fromCharCode(176)}`]}let _g=_c,{transformWorldToIndex:_m}=i9;class _p extends sd{static{this.toolName="UltrasoundDirectionalTool"}constructor(e={}
312,t={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:_f,displayBothAxesDistances:!1}}){super(e,t),this.addNewAnnotation=e=>{if(this.startedDrawing)return;this.startedDrawing=!0;let{currentPoints:t,element:n}=e.detail,i=t.world,{viewport:a}=(0,ej.Ay)(n);if(!(a instanceof iA.A))throw Error("UltrasoundDirectionalTool can only be used on a StackViewport");o2(n),this.isDrawing=!0;let o=this.createAnnotation(e,[[...i],[...i]]);th(o,n);let r=ox(n,this.getToolName());return this.editData={annotation:o,viewportIdsToRender:r,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(n),e.preventDefault(),oX(r),o},this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,[r,l]=o.handles.points,s=a.worldToCanvas(r),d=a.worldToCanvas(l),h={start:{x:s[0],y:s[1]},end:{x:d[0],y:d[1]}};return u8([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;if(a&&!o)return;if(this.startedDrawing&&1===r.handles.points.length){this.editData.handleIndex=1;return}this.startedDrawing=!1,r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t);let{renderingEngine:l}=(0,ej.Ay)(t);this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),a&&e7(n),this.editData=null,this.isDrawing=!1},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:o,movingTextBox:r}=this.editData,{data:l}=i;if(r){let{deltaPoints:e}=t,n=e.world,{textBox:i}=l.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else if(void 0===o){let{deltaPoints:e}=t,n=e.world;l.handles.points.forEach(e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]}),i.invalidated=!0}else{let{currentPoints:e}=t,n=e.world;l.handles.points[o]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;let{renderingEngine:s}=(0,ej.Ay)(n);oX(a)},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,oX(n),i&&e7(t),this.editData=null,this.startedDrawing=!1,t.annotationUID}},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r=this.getTargetId(i),l=i.getRenderingEngine(),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let a=0;a<o.length;a++){let d=o[a],{annotationUID:h,data:c}=d,{points:u}=c.handles;s.annotationUID=h;let g=this.getStyle("color",s,d),m=u.map(e=>i.worldToCanvas(e));if(c.cachedStats[r]&&null!=c.cachedStats[r].xValues?d.invalidated&&this._throttledCalculateCachedStats(d,l,e):(c.cachedStats[r]={xValues:[0,0],yValues:[0,0],isHorizontal:!1,units:[""],isUnitless:!1},this._calculateCachedStats(d,l,e)),!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}let p="0";if(ln(t,h,p,m[0],{color:g},0),n=!0,2!==m.length)break;if(ln(t,h,p="1",m[1],{color:g},1),c.cachedStats[r].isUnitless){let e=`${h}-line-1`;l_(t,h,"1",m[0],m[1],{color:g,width:1,shadow:this.configuration.shadow},e)}else{let e=m[0],n=m[1],i=n[1]-e[1],a=n[0]-e[0],o=c.cachedStats[r].isHorizontal,l=[0,0];l=o?[e[0]+a,e[1]]:[e[0],e[1]+i];let s=`${h}
312-line-1`,d="1";l_(t,h,d,m[0],l,{color:g,width:1,shadow:this.configuration.shadow},s),s=`${h}-line-2`,l_(t,h,d="2",m[1],l,{color:g,width:1,lineDash:[1,1],shadow:this.configuration.shadow},s)}let f=this.getLinkedTextBoxStyle(s,d);if(!f.visibility){c.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}let v=this.configuration.getTextLines(c,r,this.configuration);if(!c.handles.textBox.hasMoved){let e=m[1];c.handles.textBox.worldPosition=i.canvasToWorld(e)}let{x:I,y:C,width:_,height:E}=lA(t,h,"1",v,i.worldToCanvas(c.handles.textBox.worldPosition),m,{},f);c.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([I,C]),topRight:i.canvasToWorld([I+_,C]),bottomLeft:i.canvasToWorld([I,C+E]),bottomRight:i.canvasToWorld([I+_,C+E])}}return n},this._throttledCalculateCachedStats=oA(this._calculateCachedStats,100,{trailing:!0})}toolSelectedCallback(e,t,n,i){}handleSelectedCallback(e,t,n){let i,{element:a}=e.detail,{data:o}=t;t.highlighted=!0;let r=ox(a,this.getToolName());n.worldPosition||(i=o.handles.points.findIndex(e=>e===n)),this.editData={handleIndex:i,annotation:t,viewportIdsToRender:r},this._activateModify(a),o2(a);let{renderingEngine:l}=(0,ej.Ay)(a);oX(r),e.preventDefault()}_calculateCachedStats(e,t,n){let i=e.data,{element:a}=n.viewport;if(2!==i.handles.points.length)return;let{cachedStats:o}=i,r=Object.keys(o);for(let e=0;e<r.length;e++){let t,a,l,s,d=r[e],h=this.getTargetImageData(d);if(!h)continue;let{imageData:c}=h,u=i.handles.points[0],g=i.handles.points[1],m=_m(c,u),p=_m(c,g),{values:f,units:v}=aV(h,[m]),{values:I,units:C}=aV(h,[p]),_=!1;if(v[0]!==C[0]||v[1]!==C[1]||"raw"===v[0]&&"raw"===C[0]){let e=o3(u,g);t=[e,0],a=[e,0],l=["px"],_=!0}else{let e=n.viewport.worldToCanvas(u),i=n.viewport.worldToCanvas(g),o=i[1]-e[1];s=Math.abs(i[0]-e[0])>Math.abs(o),t=[f[0],I[0]],a=[f[1],I[1]],l=[v[0],v[1]]}o[d]={xValues:t,yValues:a,isHorizontal:s,units:l,isUnitless:_}}let l=e.invalidated;return e.invalidated=!1,l&&e9(e,a,eY.StatsUpdated),o}}function _f(e,t,n){let{xValues:i,yValues:a,units:o,isUnitless:r,isHorizontal:l}=e.cachedStats[t];if(r)return[`${aD.A(i[0])} px`];if(n.displayBothAxesDistances){let e=Math.abs(i[1]-i[0]),t=Math.abs(a[1]-a[0]);return[`${aD.A(e)} ${o[0]}`,`${aD.A(t)} ${o[1]}`]}if(l){let e=Math.abs(i[1]-i[0]);return[`${aD.A(e)} ${o[0]}`]}{let e=Math.abs(a[1]-a[0]);return[`${aD.A(e)} ${o[1]}`]}}let _v=_p;function _I(e,t){let n=t[0]-e[0];return(180/Math.PI*Math.atan2(t[1]-e[1],n)%360+360)%360}function _C(e,t){let n=_I(e,t[0]),i=_I(e,t[1]);return n<i?[n,i]:[i,n]}function __(e){if(!e.length)return[];e.sort((e,t)=>e[0]-t[0]);let t=[e[0].slice()];for(let n=1;n<e.length;n++){let i=t[t.length-1],a=e[n];a[0]<=i[1]?i[1]=Math.max(i[1],a[1]):t.push(a.slice())}return t}function _E(e,t){let[n,i]=t;if(i<=n)return[];let a=e.map(([e,t])=>[Math.max(e,n),Math.min(t,i)]).filter(([e,t])=>t>e);if(0===a.length)return[[n,i]];a.sort((e,t)=>e[0]-t[0]);let o=[],[r,l]=a[0];for(let e=1;e<a.length;e++){let[t,n]=a[e];t<=l?l=Math.max(l,n):(o.push([r,l]),[r,l]=[t,n])}o.push([r,l]);let s=[],d=n;for(let[e,t]of o)e>d&&s.push([d,e]),d=Math.max(d,t);return d<i&&s.push([d,i]),s}function _w(e,t){let n=[];for(let i of t){let t=Math.max(e[0],i[0]),a=Math.min(e[1],i[1]);t<a&&n.push([t,a])}return n}let{transformIndexToWorld:_A}=i9;class _S extends sd{static{this.toolName="UltrasoundPleuraBLineTool"}static{this.USPleuraBLineAnnotationType={BLINE:"bLine",PLEURA:"pleura"}}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:_y,center:null,innerRadius:null,outerRadius:null,startAngle:null,endAngle:null,bLineColor:"rgb(60, 255, 60)",pleuraColor:"rgb(0, 4, 255)",drawDepthGuide:!0,depth_ratio:.5,depthGuideColor:"rgb(0, 255, 255)",depthGuideThickness:4,depthGuideDashLength:20,depthGuideDashGap:16,depthGuideOpacity:.2,fanOpacity:.1,showFanAnnotations:!0,updatePercentageCallback:null,actions:{undo:{method:"undo",bindings:[{key:"z"}]},redo:{method:"redo",bindings:[{key:"y"}]}}}}){super(e,t),this.pleuraAnnotations=[],this.bLineAnnotations=[],this.addNewAnnotation=e=>{let{currentPoints:t,element:n}
312=e.detail,i=t.world,{viewport:a}=(0,ej.Ay)(n);o2(n),this.isDrawing=!0;let{viewPlaneNormal:o,viewUp:r,position:l}=a.getCamera(),s=this.getReferencedImageId(a,i,o,r),d={highlighted:!0,invalidated:!0,metadata:{...a.getViewReference({points:[i]}),toolName:this.getToolName(),referencedImageId:s,viewUp:r,cameraPosition:l},data:{handles:{points:[[...i],[...i]],activeHandleIndex:null},annotationType:this.getActiveAnnotationType(),label:""}};th(d,n);let h=ox(n,this.getToolName());return this.editData={annotation:d,viewportIdsToRender:h,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(n),e.preventDefault(),oX(h),d},this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,[r,l]=o.handles.points,s=a.worldToCanvas(r),d=a.worldToCanvas(l),h={start:{x:s[0],y:s[1]},end:{x:d[0],y:d[1]}};return u8([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(n),o2(n),oX(i),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;(!a||o)&&(r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),this.doneEditMemo(),a&&e7(n),this.editData=null,this.isDrawing=!1)},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{viewport:i}=(0,ej.Ay)(n)||{};if(!i)return;let{annotation:a,viewportIdsToRender:o,handleIndex:r,movingTextBox:l,newAnnotation:s}=this.editData,{data:d}=a;if(this.createMemo(n,a,{newAnnotation:s}),l){let{deltaPoints:e}=t,n=e.world,{textBox:i}=d.handles,{worldPosition:a}=i;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],i.hasMoved=!0}else if(void 0===r){let{deltaPoints:e}=t,n=e.world,o=d.handles.points;o.every(e=>{let t=[e[0]+n[0],e[1]+n[1],e[2]+n[2]];return this.isInsideFanShape(i,t)})&&(o.forEach(e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]}),a.invalidated=!0)}else{let{currentPoints:e}=t,n=e.world;this.isInsideFanShape(i,n)&&(d.handles.points[r]=[...n],a.invalidated=!0)}this.editData.hasMoved=!0,oX(o),a.invalidated&&e9(a,n,eY.HandlesUpdated)},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,oX(n),i&&e7(t),this.editData=null,t.annotationUID}},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i;if(!this.getFanShapeGeometryParameters(i))return;let{imageData:o}=i.getImageData()||{};if(!o)return n;this.configuration.drawDepthGuide&&this.drawDepthGuide(t,i);let r=ti(this.getToolName(),a);if(!r?.length||(r=this.filterInteractableAnnotationsForElement(a,r),!r?.length))return n;this.getTargetId(i),i.getRenderingEngine();let l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},s=i.worldToCanvas(_A(o,this.configuration.center)),d=this.getIndexToCanvasRatio(i),h=this.configuration.innerRadius*d,c=this.configuration.outerRadius*d,u=i.getCurrentImageId(),g=__(r.filter(e=>e.data.annotationType===_S.USPleuraBLineAnnotationType.PLEURA&&e.metadata.referencedImageId===u).map(e=>_C(s,e.data.handles.points.map(e=>i.worldToCanvas(e))))),m=[],p=[],f=e=>{let a,{annotationUID:o,data:r}=e,{points:d,activeHandleIndex:u}=r.handles;l.annotationUID=o;
312let{color:f,lineWidth:v,lineDash:I,shadow:C}=this.getAnnotationStyle({annotation:e,styleSpecifier:l}),_=d.map(e=>i.worldToCanvas(e));if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!l6(o))return;iN(o)||this.editData||null===u||(a=[_[u]]),a&&li(t,o,"0",_,{color:this.getColorForLineType(e),fill:this.getColorForLineType(e),lineDash:I,lineWidth:v});let E=`${o}-line`;if(l_(t,o,"1",_[0],_[1],{color:this.getColorForLineType(e),width:v,lineDash:I,shadow:C},E),this.configuration.showFanAnnotations){let n=_C(s,_),i=0;e.data.annotationType===_S.USPleuraBLineAnnotationType.BLINE?_E(p,n).forEach(n=>{_w(n,g).forEach(n=>{let a=++i,r=`${o}-fan-${a}`;ud(t,o,`2-${a}`,s,h,c,n[0],n[1],{color:"transparent",fill:this.getColorForLineType(e),fillOpacity:this.configuration.fanOpacity,width:v,lineDash:I,shadow:C},r,10),p.push(n)})}):e.data.annotationType===_S.USPleuraBLineAnnotationType.PLEURA&&_E(m,n).forEach((n,a)=>{let r=++i,l=`${o}-fan-${r}`;ud(t,o,`2-${r}`,s,h,c,n[0],n[1],{color:"transparent",fill:this.getColorForLineType(e),fillOpacity:this.configuration.fanOpacity,width:v,lineDash:I,shadow:C},l,5),m.push(n)})}};return r.filter(e=>e.data.annotationType===_S.USPleuraBLineAnnotationType.PLEURA&&e.metadata.referencedImageId===u).forEach(e=>{if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;f(e)}),r.filter(e=>e.data.annotationType===_S.USPleuraBLineAnnotationType.BLINE&&e.metadata.referencedImageId===u).forEach(e=>{if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;f(e)}),n=!0,this.configuration.updatePercentageCallback&&i&&this.configuration.updatePercentageCallback(this.calculateBLinePleuraPercentage(i)),n},this.activeAnnotationType=_S.USPleuraBLineAnnotationType.BLINE}static filterAnnotations(e,t=()=>!0){let n=ti(_S.toolName,e);return n?.length?n.filter(e=>t(e.metadata.referencedImageId)):[]}static countAnnotations(e,t=()=>!0){let n=ti(_S.toolName,e),{viewport:i}=(0,ej.Ay)(e),a=i.getImageIds(),o=e=>{let t=a.findIndex(t=>t===e);return -1===t?0:t};if(!n?.length)return;let r=new Map;return n.forEach(e=>{let n,i=e.metadata.referencedImageId;if(!t(i))return;let{annotationType:a}=e.data;n=r.has(i)?r.get(i):{frame:o(i),bLine:0,pleura:0},a===_S.USPleuraBLineAnnotationType.PLEURA?n.pleura++:a===_S.USPleuraBLineAnnotationType.BLINE&&n.bLine++,r.set(i,n)}),r}static deleteAnnotations(e,t=()=>!1){let n=ti(_S.toolName,e);n?.length&&n.forEach(e=>{t(e.metadata.referencedImageId)&&tu(e.annotationUID)})}setActiveAnnotationType(e){this.activeAnnotationType=e}getActiveAnnotationType(){return this.activeAnnotationType}deleteLastAnnotationType(e,t){let n,i=ti(_S.toolName,e);t===_S.USPleuraBLineAnnotationType.PLEURA?n=i.filter(e=>e.data.annotationType===_S.USPleuraBLineAnnotationType.PLEURA):t===_S.USPleuraBLineAnnotationType.BLINE&&(n=i.filter(e=>e.data.annotationType===_S.USPleuraBLineAnnotationType.BLINE)),n?.length>0&&tu(n.pop().annotationUID)}static{this.hydrate=(e,t,n)=>{let i=(0,ej.yj)(e);if(!i)return;let{FrameOfReferenceUID:a,referencedImageId:o,viewPlaneNormal:r,instance:l,viewport:s}=this.hydrateBase(_S,i,t,n),{toolInstance:d,...h}=n||{};th({annotationUID:n?.annotationUID||eX.A(),data:{handles:{points:t}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:l.getToolName(),viewPlaneNormal:r,FrameOfReferenceUID:a,referencedImageId:o,...h}},s.element),oX([s.id])}}handleSelectedCallback(e,t,n){let i,{element:a}=e.detail,{data:o}=t;t.highlighted=!0;let r=!1;n.worldPosition?r=!0:i=o.handles.points.findIndex(e=>e===n);let l=ox(a,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:i,movingTextBox:r},this._activateModify(a),o2(a),oX(l),e.preventDefault()}isInsideFanShape(e,t){if(!this.getFanShapeGeometryParameters(e))return!1;let{imageData:n}=e.getImageData()||{};if(n){let i=_I(e.worldToCanvas(n.indexToWorld(this.configuration.center)),e.worldToCanvas(t));return i>=this.configuration.startAngle&&i<=this.configuration.endAngle}}updateFanGeometryConfiguration(e){e&&(this.isFanShapeGeometryParametersValid(e)&&(this.configuration.center=[e.center[0],e.center[1],0]),this.configuration.innerRadius=e.innerRadius,this.configuration.outerRadius=e.outerRadius,this.configuration.startAngle=e.startAngle,this.configuration.endAngle=e.endAngle)}deriveFanGeometryFromViewport(e){let{fanGeometry:t}=vE(e.getCurrentImageId())||{};t&&this.updateFanGeometryConfiguration(t)}isFanShapeGeometryParametersValid(e){return e||(e=this.configuration),e?.center&&e?.innerRadius>0&&e?.outerRadius&&e?.startAngle>0&&e?.startAngle<360&&e?.endAngle>0&&e?.endAngle<360}getFanShapeGeometryParameters(e){if(this.isFanShapeGeometryParametersValid())return!0;
312if(!this.isFanShapeGeometryParametersValid()){let t=e.getCurrentImageId(),n=ib.get("ultrasoundFanShapeGeometry",t);this.updateFanGeometryConfiguration(n)}return this.isFanShapeGeometryParametersValid()||this.deriveFanGeometryFromViewport(e),this.isFanShapeGeometryParametersValid()}calculateBLinePleuraPercentage(e){if(!this.getFanShapeGeometryParameters(e))return;let{imageData:t}=e.getImageData()||{};if(!t)return;let{element:n}=e,i=e.worldToCanvas(t.indexToWorld(this.configuration.center)),a=e.getCurrentImageId(),o=ti(this.getToolName(),n)||[];return function(e,t,n){let i=__(t.map(t=>_C(e,t))),a=i.reduce((e,[t,n])=>e+(n-t),0);if(0===a)return 0;let o=[];for(let t of n){let n=_w(_C(e,t),i);o.push(...n)}return Math.min(100,Math.max(0,__(o).reduce((e,[t,n])=>e+(n-t),0)/a*100))}(i,o.filter(e=>e.data.annotationType===_S.USPleuraBLineAnnotationType.PLEURA&&e.metadata.referencedImageId===a).map(t=>t.data.handles.points.map(t=>e.worldToCanvas(t))),o.filter(e=>e.data.annotationType===_S.USPleuraBLineAnnotationType.BLINE&&e.metadata.referencedImageId===a).map(t=>t.data.handles.points.map(t=>e.worldToCanvas(t))))}getColorForLineType(e){let{annotationType:t}=e.data,{bLineColor:n,pleuraColor:i}=this.configuration;return t===_S.USPleuraBLineAnnotationType.BLINE?n:t===_S.USPleuraBLineAnnotationType.PLEURA?i:n}getIndexToCanvasRatio(e){let{imageData:t}=e.getImageData()||{},n=e.worldToCanvas(t.indexToWorld([1,0,0])),i=e.worldToCanvas(t.indexToWorld([2,0,0])),a=[i[0]-n[0],i[1]-n[1]];return Math.sqrt(a[0]*a[0]+a[1]*a[1])}drawDepthGuide(e,t){if(!this.getFanShapeGeometryParameters(t))return;let{imageData:n}=t.getImageData()||{};if(!n)return;let i=e=>180*e/Math.PI,a=e=>e*Math.PI/180,o=e=>t.worldToCanvas(_A(n,e)),r=this.configuration.innerRadius+this.configuration.depth_ratio*(this.configuration.outerRadius-this.configuration.innerRadius),l=this.configuration.startAngle,s=this.configuration.endAngle-l,d=Math.round(a(s)*r/(this.configuration.depthGuideDashLength+this.configuration.depthGuideDashGap));d<=0&&(d=Math.max(15,Math.round(s/5)));let h=s/d;for(let n=0;n<d;n++){let s=a(l+n*h),d=a(l+n*h+i(this.configuration.depthGuideDashLength)/r),c=[this.configuration.center[0]+r*Math.cos(s),this.configuration.center[1]+r*Math.sin(s),0],u=[this.configuration.center[0]+r*Math.cos(d),this.configuration.center[1]+r*Math.sin(d),0];l_(e,t.id,`depthGuide-${n}`,o(c),o(u),{color:this.configuration.depthGuideColor,lineWidth:this.configuration.depthGuideThickness,strokeOpacity:this.configuration.depthGuideOpacity})}}_isInsideVolume(e,t,n){return lF.A(e,n)&&lF.A(t,n)}}function _y(e,t){return[""]}let _b=_S;class _T extends sd{static{this.toolName="KeyImage"}static{this.dataSeries={data:{seriesLevel:!0}}}static{this.dataPoint={data:{isPoint:!0}}}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{getTextCallback:_M,changeTextCallback:_D,canvasPosition:[10,10],canvasSize:10,handleRadius:"6",seriesLevel:!1,isPoint:!1}}){super(e,t),this.addNewAnnotation=e=>{let{element:t,currentPoints:n}=e.detail,{viewport:i}=(0,ej.Ay)(t),a=n.world,o=this.constructor.createAnnotationForViewport(i,{data:{handles:{points:[[...a]]},seriesLevel:this.configuration.seriesLevel,isPoint:this.configuration.isPoint}});th(o,t);let r=ox(t,this.getToolName());return e.preventDefault(),oX(r),this.configuration.getTextCallback(e=>{if(!e){tu(o.annotationUID),oX(r),this.isDrawing=!1;return}o.data.label=e,e7(o),oX(r)}),this.createMemo(t,o,{newAnnotation:!0}),o},this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t;if(!o?.isPoint)return!1;let{canvasPosition:r,canvasSize:l}=this.configuration;return!!r?.length&&!!(Math.abs(n[0]-r[0]+l/2)<=l/2&&Math.abs(n[1]-r[1]+l/2)<=l/2)},this.toolSelectedCallback=(e,t)=>{t.highlighted=!0,e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a}=this.editData,{viewportId:o,renderingEngine:r}=(0,ej.Ay)(t);this.eventDispatchDetail={viewportId:o,renderingEngineId:r.id},this._deactivateModify(t),o1(t),a&&this.createMemo(t,n,{newAnnotation:a}),this.editData=null,this.isDrawing=!1,this.doneEditMemo(),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i),a&&e7(n)},this.doubleClickCallback=e=>{let t=e.detail,{element:n}=t,i=ti(this.getToolName(),n);if(i=this.filterInteractableAnnotationsForElement(n,i),!i?.length)return;let a=i.find(e=>this.isPointNearTool(n,e,t.currentPoints.canvas,6));a&&(this.createMemo(n,a),this.configuration.changeTextCallback(a,e.detail,this._doneChangingTextCallback.bind(this,n,a)),this.isDrawing=!1,this.doneEditMemo(),e.stopImmediatePropagation(),e.preventDefault())},this._dragCallback=e=>{this.isDrawing=!0;let{currentPoints:t,element:n}=e.detail,i=t.world,{annotation:a,viewportIdsToRender:o,newAnnotation:r}=this.editData,{data:l}=a;this.createMemo(n,a,{newAnnotation:r}),l.handles.points[0]=[...i],a.invalidated=!0,oX(o)},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length||(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length))return n;let r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<o.length;e++){let a=o[e],{annotationUID:l,data:s}=a;r.annotationUID=l;let{color:d,lineWidth:h}=this.getAnnotationStyle({annotation:a,styleSpecifier:r}),{canvasPosition:c,canvasSize:u}=this.configuration;if(s?.isPoint){let e=s.handles.points[0];li(t,l,"1",[i.worldToCanvas(e)],{color:d,lineWidth:h,handleRadius:this.configuration.handleRadius})}else c?.length&&ug(t,l,"1",c.map(e=>e+u),c,{color:d,width:1});if(n=!0,!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}}return n}}handleSelectedCallback(e,t){let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i},this._activateModify(n),o2(n),oX(i),e.preventDefault()}static setPoint(e,t=!e.data.isPoint,n){e.data.isPoint=t,e9(e,n)}_doneChangingTextCallback(e,t,n){t.data.label=n,oX(ox(e,this.getToolName())),e9(t,e)}cancel(e){if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,oX(n),i&&e7(t),this.editData=null,t.annotationUID}}_isInsideVolume(e,t,n){return lF.A(e,n)&&lF.A(t,n)}}function _M(e){return e(prompt("Enter your annotation:"))}function _D(e,t,n){return n(prompt("Enter your annotation:"))}let _O=_T,_x="magnify-viewport";class _P extends lH{constructor(e={}
312,t={supportedInteractionTypes:["Mouse","Touch"],configuration:{magnifySize:10,magnifyWidth:250,magnifyHeight:250}}){super(e,t),this._hasBeenRemoved=!1,this.preMouseDownCallback=e=>{let{element:t,currentPoints:n}=e.detail,i=(0,ej.Ay)(t),{viewport:a,renderingEngine:o}=i;if(!(a instanceof iA.A))throw Error("MagnifyTool only works on StackViewports");let r=this._getReferencedImageId(a);if(!r)throw Error("MagnifyTool: No referenced image id found, reconstructed planes not supported yet");let l=ox(t,this.getToolName());return this.editData={referencedImageId:r,viewportIdsToRender:l,enabledElement:i,renderingEngine:o,currentPoints:n},this._createMagnificationViewport(),this._activateDraw(t),o2(t),e.preventDefault(),oX(l),!0},this.preTouchStartCallback=e=>{this.preMouseDownCallback(e)},this._createMagnificationViewport=()=>{let e,{enabledElement:t,referencedImageId:n,viewportIdsToRender:i,renderingEngine:a,currentPoints:o}=this.editData,{viewport:r}=t,{element:l}=r,s=r.getProperties(),{rotation:d}=r.getViewPresentation(),{canvas:h,world:c}=o;if(null===(e=l.querySelector(".magnifyTool"))){let t=document.createElement("div");t.classList.add("magnifyTool"),t.style.display="block",t.style.width=`${this.configuration.magnifyWidth}px`,t.style.height=`${this.configuration.magnifyHeight}px`,t.style.position="absolute",e=t,l.querySelector(".viewport-element").appendChild(t);let n={viewportId:_x,type:IG.A.STACK,element:e};a.enableElement(n)}e.style.top=`${h[1]-this.configuration.magnifyHeight/2}px`,e.style.left=`${h[0]-this.configuration.magnifyWidth/2}px`;let u=a.getViewport(_x);u.setStack([n]).then(()=>{if(this._hasBeenRemoved)return;u.setProperties(s),u.setViewPresentation({rotation:d});let{parallelScale:e}=r.getCamera(),{focalPoint:t,position:n,viewPlaneNormal:i}=u.getCamera(),a=Math.sqrt(Math.pow(t[0]-n[0],2)+Math.pow(t[1]-n[1],2)+Math.pow(t[2]-n[2],2)),o=[c[0],c[1],c[2]],l=[o[0]+a*i[0],o[1]+a*i[1],o[2]+a*i[2]];u.setCamera({parallelScale:e*(1/this.configuration.magnifySize),focalPoint:o,position:l}),u.render()}),e.style.display="block",oX(i)},this._cancelCallback=e=>{e.preventDefault(),e.stopPropagation(),this._dragEndCallback(e)},this._dragCallback=e=>{let{deltaPoints:t,element:n,currentPoints:i}=e.detail,a=t.world,o=i.canvas,{renderingEngine:r}=(0,ej.Ay)(n),l=r.getViewport(_x),s=n.querySelector(".magnifyTool");if(!s)return;s.style.top=`${o[1]-this.configuration.magnifyHeight/2}px`,s.style.left=`${o[0]-this.configuration.magnifyWidth/2}px`;let{focalPoint:d,position:h}=l.getCamera(),c=[h[0]+a[0],h[1]+a[1],h[2]+a[2]],u=[d[0]+a[0],d[1]+a[1],d[2]+a[2]];l.setCamera({focalPoint:u,position:c}),l.render()},this._dragEndCallback=e=>{let{element:t}=e.detail;if(void 0===t){let{enabledElement:e}=this.editData,{viewport:n}=e;t=n.element}let{renderingEngine:n}=(0,ej.Ay)(t);n.disableElement(_x);let i=t.querySelector(".viewport-element"),a=i.querySelector(".magnifyTool");i.removeChild(a),this._deactivateDraw(t),o1(t),this._hasBeenRemoved=!0},this._activateDraw=e=>{e0.isInteractingWithTool=!0,this._hasBeenRemoved=!1,e.addEventListener(eK.MOUSE_UP,this._dragEndCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._dragEndCallback),e.addEventListener("contextmenu",this._cancelCallback),e.addEventListener(eK.TOUCH_END,this._dragEndCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._dragEndCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._dragEndCallback),e.removeEventListener("contextmenu",this._cancelCallback),e.removeEventListener(eK.TOUCH_END,this._dragEndCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback)}}_getReferencedImageId(e){let t,n=this.getTargetId(e);return e instanceof iA.A&&(t=n.split("imageId:")[1]),t}}_P.toolName="Magnify";let _L=_P;var _N=n(4110);let{Events:_R}=aO,_k=e=>!!e.representationUID;(x||(x={})).ShowZoomFactorsList="showZoomFactorsList";let _U=1-_N.A;class _V extends sd{static{this.Actions=x}constructor(e={}
312,t={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,magnifyingGlass:{radius:125,zoomFactor:3,zoomFactorList:[1.5,2,2.5,3,3.5,4,4.5,5],autoPan:{enabled:!0,padding:10}},actions:{showZoomFactorsList:{method:"showZoomFactorsList",bindings:[{mouseButton:I.Secondary,modifierKey:C.Shift}]}}}}){super(e,t),this.addNewAnnotation=e=>{let{currentPoints:t,element:n}=e.detail,i=(0,ej.Ay)(n),{viewport:a,renderingEngine:o}=i,r=t.world,l=t.canvas,{magnifyingGlass:s}=this.configuration,{radius:d,zoomFactor:h,autoPan:c}=s,u=this._getWorldHandlePoints(a,l,d),{viewPlaneNormal:g,viewUp:m}=a.getCamera(),p=this.getReferencedImageId(a,r,g,m),f=eX.A(),v=eX.A(),I=a.getFrameOfReferenceUID(),C={annotationUID:f,highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...g],viewUp:[...m],FrameOfReferenceUID:I,referencedImageId:p},data:{sourceViewportId:a.id,magnifyViewportId:v,zoomFactor:h,isCanvasAnnotation:!1,handles:{points:u,activeHandleIndex:null}}};this.magnifyViewportManager.createViewport(C,{magnifyViewportId:v,sourceEnabledElement:i,position:l,radius:d,zoomFactor:h,autoPan:{enabled:c.enabled,padding:c.padding,callback:e=>{let t=C.data.handles.points,{world:n}=e.delta;for(let e=0,i=t.length;e<i;e++){let i=t[e];i[0]+=n[0],i[1]+=n[1],i[2]+=n[2]}C.invalidated=!0}}}),th(C,n);let _=ox(n,this.getToolName());return e.preventDefault(),oX(_),C},this.onSetToolDisabled=()=>{this.magnifyViewportManager.dispose(),to().forEach(e=>{e.metadata.toolName===this.getToolName()&&tu(e.annotationUID)})},this.isPointNearTool=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{points:o}=t.data.handles,{radius:r,center:l}=this._getCanvasCircleData(a,o);return Math.abs(pp([l,n])-r)<2*i},this.toolSelectedCallback=(e,t)=>{let{element:n}=e.detail;t.highlighted=!0;let i=ox(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i},o2(n),this._activateModify(n),oX(i),e.preventDefault()},this.handleSelectedCallback=(e,t,n)=>{let{element:i}=e.detail,{data:a}=t;t.highlighted=!0;let{points:o}=a.handles,r=o.findIndex(e=>e===n),l=ox(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r},this._activateModify(i),o2(i),oX(l),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a}=this.editData,{data:o}=n;o.handles.activeHandleIndex=null,this._deactivateModify(t),o1(t),this.editData=null,this.isDrawing=!1,oX(i),a&&e7(n)},this._dragDrawCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{viewport:i}=(0,ej.Ay)(n),{deltaPoints:a}=t,o=a?.canvas??[0,0,0],{annotation:r,viewportIdsToRender:l}=this.editData,{points:s}=r.data.handles,d=this._getWorldDeltaFromCanvasDelta(i,s,o);this._applyWorldDelta(s,d),r.invalidated=!0,this.editData.hasMoved=!0,oX(l)},this._dragModifyCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:o}=this.editData,{data:r}=i;if(void 0===o){let{deltaPoints:e}=t,a=e.canvas??[0,0,0],o=r.handles.points,l=this._getWorldDeltaFromCanvasDelta((0,ej.Ay)(n).viewport,o,a);this._applyWorldDelta(o,l),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;oX(a)},this._dragHandle=e=>{let t=e.detail,{element:n}=t,{viewport:i}=(0,ej.Ay)(n),{annotation:a}=this.editData,{data:o}=a,{points:r}=o.handles,{center:l}=this._getCanvasCircleData(i,r),{currentPoints:s}=t,d=pp([l,s.canvas]),h=this._getCanvasHandlePoints(l,d).map(e=>i.canvasToWorld(e));r[0]=h[0],r[1]=h[1],r[2]=h[2],r[3]=h[3]},this.cancel=e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateModify(e),o1(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,oX(n),i&&e7(t),this.editData=null,t.annotationUID},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,o=ti(this.getToolName(),a);if(!o?.length)return n;o=o?.filter(e=>e.data.sourceViewportId===i.id);let r=this.filterInteractableAnnotationsForElement(a,o);if(!r?.length)return n;let l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<r.length;e++){let a,o=r[e],{annotationUID:s,data:d}=o,{magnifyViewportId:h,zoomFactor:c,handles:u}=d,{points:g,activeHandleIndex:m}=u,{center:p,radius:f,canvasPoints:v}=this._getCanvasCircleData(i,g);
312l.annotationUID=s,this.getStyle("lineWidth",l,o),this.getStyle("lineDash",l,o);let I=this.getStyle("color",l,o);if(!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(s))continue;if(!iN(s)&&!this.editData&&null!==m){let e=v[m];a=[[e[0],e[1],0]]}a&&li(t,s,"0",a,{color:I});let C=`${s}-advancedMagnify`;uo(t,s,"0",p,f,{color:I,lineWidth:5},C);let _=this.magnifyViewportManager.getViewport(h);_.position=p,_.radius=f,_.zoomFactor=c,_.update(),n=!0}return n},this._getWorldHandlePoints=(e,t,n)=>this._getCanvasHandlePoints(t,n).map(t=>e.canvasToWorld(t)),this._getCanvasCircleData=(e,t)=>{let n=t.map(t=>e.worldToCanvas(t)),i=n[0],a=n[2],o=n[3],r=.5*Math.abs(a[1]-i[1]);return{canvasPoints:n,center:[o[0]+r,i[1]+r],radius:r}},this._getCanvasHandlePoints=(e,t)=>[[e[0],e[1]-t,0],[e[0]+t,e[1],0],[e[0],e[1]+t,0],[e[0]-t,e[1],0]],this.magnifyViewportManager=_F.getInstance()}showZoomFactorsList(e,t){let{element:n,currentPoints:i}=e.detail,{viewport:a}=(0,ej.Ay)(n),{canvas:o}=i,r=n.querySelector(":scope .viewport-element"),l=t.data.zoomFactor,s=()=>d.parentElement.removeChild(d),d=this._getZoomFactorsListDropdown(l,e=>{void 0!==e&&(t.data.zoomFactor=Number.parseFloat(e),t.invalidated=!0),s(),a.render()});Object.assign(d.style,{left:`${o[0]}px`,top:`${o[1]}px`}),r.appendChild(d),d.focus()}_getZoomFactorsListDropdown(e,t){let{zoomFactorList:n}=this.configuration.magnifyingGlass,i=document.createElement("select");return i.size=5,Object.assign(i.style,{width:"50px",position:"absolute"}),["mousedown","mouseup","mousemove","click"].forEach(e=>{i.addEventListener(e,e=>e.stopPropagation())}),i.addEventListener("change",e=>{e.stopPropagation(),t(i.value)}),i.addEventListener("keydown",e=>{((e.keyCode??27===e.which)||e.key?.toLowerCase()==="escape")&&(e.stopPropagation(),t())}),n.forEach(t=>{let n=document.createElement("option");n.label=t,n.title=`Zoom factor ${t.toFixed(1)}`,n.value=t,n.defaultSelected=t===e,i.add(n)}),i}_getWorldDeltaFromCanvasDelta(e,t,n){if(!n)return[0,0,0];let i=t[0],a=e.worldToCanvas(i),o=e.canvasToWorld([a[0]+n[0],a[1]+n[1]]);return[o[0]-i[0],o[1]-i[1],o[2]-i[2]]}_applyWorldDelta(e,t){if(t)for(let n=0,i=e.length;n<i;n++){let i=e[n];i[0]+=t[0],i[1]+=t[1],i[2]+=t[2]}}}class _F{constructor(){this.createViewport=(e,t)=>{let{magnifyViewportId:n,sourceEnabledElement:i,position:a,radius:o,zoomFactor:r,autoPan:l}=t,{viewport:s}=i,{element:d}=s,h=new _G({magnifyViewportId:n,sourceEnabledElement:i,radius:o,position:a,zoomFactor:r,autoPan:l});return this._addSourceElementEventListener(d),this._magnifyViewportsMap.set(h.viewportId,{annotation:e,magnifyViewport:h,magnifyViewportInfo:t}),h},this._annotationRemovedCallback=e=>{let{annotation:t}=e.detail;"AdvancedMagnify"===t.metadata.toolName&&this.destroyViewport(t.data.magnifyViewportId)},this._newStackImageCallback=e=>{let{viewportId:t,imageId:n}=e.detail,i=this._getMagnifyViewportsMapEntriesBySourceViewportId(t),{viewport:a}=(0,ej.yj)(t);a.stackActorReInitialized&&this._reset(t),i.forEach(({annotation:e})=>{e.metadata.referencedImageId=n,e.invalidated=!0})},this._newVolumeImageCallback=e=>{let{renderingEngineId:t,viewportId:n}=e.detail,i=(0,nG.lD)(t).getViewport(n),{viewPlaneNormal:a}=i.getCamera();this._getMagnifyViewportsMapEntriesBySourceViewportId(n).forEach(({annotation:e})=>{let{viewPlaneNormal:t}=e.metadata;if(!(Math.abs(iT.Om(t,a))>_U))return;let{handles:n}=e.data,o=i.canvasToWorld([0,0]),r=iT.jb(iT.vt(),o,n.points[0]),l=iT.Om(r,a),s=iT.hs(iT.vt(),a,l);for(let e=0,t=n.points.length;e<t;e++){let t=n.points[e];t[0]+=s[0],t[1]+=s[1],t[2]+=s[2]}e.invalidated=!0})},this._magnifyViewportsMap=new Map,this._initialize()}static getInstance(){return _F._singleton=_F._singleton??new _F,_F._singleton}getViewport(e){return this._magnifyViewportsMap.get(e)?.magnifyViewport}dispose(){this._removeEventListeners(),this._destroyViewports()}destroyViewport(e){let t=this._magnifyViewportsMap.get(e);if(t){let{magnifyViewport:n}=t,{viewport:i}=n.sourceEnabledElement,{element:a}=i;this._removeSourceElementEventListener(a),n.dispose(),this._magnifyViewportsMap.delete(e)}}_destroyViewports(){Array.from(this._magnifyViewportsMap.keys()).forEac
312h(e=>this.destroyViewport(e))}_getMagnifyViewportsMapEntriesBySourceViewportId(e){return Array.from(this._magnifyViewportsMap.values()).filter(({magnifyViewport:t})=>{let{viewport:n}=t.sourceEnabledElement;return n.id===e})}_reset(e){this._getMagnifyViewportsMapEntriesBySourceViewportId(e).forEach(({magnifyViewport:t,annotation:n,magnifyViewportInfo:i})=>{this.destroyViewport(t.viewportId);let a=(0,ej.yj)(e);this.createViewport(n,{...i,sourceEnabledElement:{...a}})})}_addEventListeners(){ez.A.addEventListener(eK.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_removeEventListeners(){ez.A.removeEventListener(eK.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_addSourceElementEventListener(e){e.addEventListener(_R.STACK_NEW_IMAGE,this._newStackImageCallback);let t=e=>{let{viewportId:t}=e.detail;this._reset(t)};e.addEventListener(_R.VIEWPORT_NEW_IMAGE_SET,t);let n=e=>{let{viewportId:t}=e.detail;this._reset(t)};e.addEventListener(_R.VOLUME_VIEWPORT_NEW_VOLUME,n),e.addEventListener(_R.VOLUME_NEW_IMAGE,this._newVolumeImageCallback),e.newStackHandler=t,e.newVolumeHandler=n}_removeSourceElementEventListener(e){e.removeEventListener(_R.STACK_NEW_IMAGE,this._newStackImageCallback),e.removeEventListener(_R.VOLUME_NEW_IMAGE,this._newVolumeImageCallback),e.removeEventListener(_R.VIEWPORT_NEW_IMAGE_SET,e.newStackHandler),e.removeEventListener(_R.VOLUME_VIEWPORT_NEW_VOLUME,e.newVolumeHandler),delete e.newStackHandler,delete e.newVolumeHandler}_initialize(){this._addEventListeners()}}class _G{constructor({magnifyViewportId:e,sourceEnabledElement:t,radius:n=125,position:i=[0,0],zoomFactor:a,autoPan:o}){this._enabledElement=null,this._sourceToolGroup=null,this._magnifyToolGroup=null,this._isViewportReady=!1,this._radius=0,this._resized=!1,this._canAutoPan=!1,this._viewportId=e??eX.A(),this._sourceEnabledElement=t,this._autoPan=o,this.radius=n,this.position=i,this.zoomFactor=a,this.visible=!0,this._browserMouseDownCallback=this._browserMouseDownCallback.bind(this),this._browserMouseUpCallback=this._browserMouseUpCallback.bind(this),this._handleToolModeChanged=this._handleToolModeChanged.bind(this),this._mouseDragCallback=this._mouseDragCallback.bind(this),this._resizeViewportAsync=ow(this._resizeViewport.bind(this),1),this._initialize()}get sourceEnabledElement(){return this._sourceEnabledElement}get viewportId(){return this._viewportId}get radius(){return this._radius}set radius(e){Math.abs(this._radius-e)>1e-5&&(this._radius=e,this._resized=!0)}update(){let{radius:e,position:t,visible:n}=this,{viewport:i}=this._enabledElement,{element:a}=i,o=2*e,[r,l]=t;this._resized&&(this._resizeViewportAsync(),this._resized=!1),Object.assign(a.style,{display:n?"block":"hidden",width:`${o}px`,height:`${o}px`,left:`${-e}px`,top:`${-e}px`,transform:`translate(${r}px, ${l}px)`}),this._isViewportReady&&(this._syncViewports(),i.render())}dispose(){let{viewport:e}=this._enabledElement,{element:t}=e,n=e.getRenderingEngine();this._removeEventListeners(t),n.disableElement(e.id),t.parentNode&&t.parentNode.removeChild(t)}_handleToolModeChanged(e){let{_magnifyToolGroup:t}=this,{toolGroupId:n,toolName:i,mode:a,toolBindingsOptions:o}=e.detail;if(this._sourceToolGroup?.id===n)switch(a){case e1.Active:t.setToolActive(i,o);break;case e1.Passive:t.setToolPassive(i);break;case e1.Enabled:t.setToolEnabled(i);break;case e1.Disabled:t.setToolDisabled(i);break;default:throw Error(`Unknow tool mode (${a})`)}}_inheritBorderRadius(e){let t=e.querySelector(".viewport-element"),n=e.querySelector(".cornerstone-canvas");t.style.borderRadius="inherit",n.style.borderRadius="inherit"}_createViewportNode(){let e=document.createElement("div"),{radius:t}=this,n=2*t;return e.classList.add("advancedMagnifyTool"),Object.assign(e.style,{display:"block",width:`${n}px`,height:`${n}px`,position:"absolute",overflow:"hidden",borderRadius:"50%",boxSizing:"border-box",left:`${-t}px`,top:`${-t}px`,transform:"translate(-1000px, -1000px)"}),e}_convertZoomFactorToParallelScale(e,t,n){let{parallelScale:i}=e.getCamera();return 1/n*i*(t.canvas.offsetWidth/e.canvas.offsetWidth)}_isStackViewport(e){return"setStack"in e}_isVolumeViewport(e){return"addVolumes"in e}_cloneToolGroups(e,t){let n=e.getActors(),i=`${t.id}-toolGroup`,a=oy(e.id,e.renderingEngineId),o=a.clone(i,e=>{let t=a.getToolInstance(e);return t instanceof sd&&!(t instanceof _V)});return o.addViewport(t.id,t.renderingEngineId),n.filter(_k).forEac
312h(e=>{m7(this.viewportId,[{segmentationId:e.referencedId,type:nB.Labelmap}])}),{sourceToolGroup:a,magnifyToolGroup:o}}_cloneStack(e,t){let n=e.getImageIds();t.setStack(n).then(()=>{this._isViewportReady=!0,this.update()})}_cloneVolumes(e,t){let n=e.getActors().filter(e=>!_k(e)).map(e=>({volumeId:e.referencedId}));return t.setVolumes(n).then(()=>{this._isViewportReady=!0,this.update()}),t}_cloneViewport(e,t){let{viewportId:n}=this,i=e.getRenderingEngine(),{options:a}=e,o={element:t,viewportId:n,type:e.type,defaultOptions:{...a}};i.enableElement(o);let r=i.getViewport(n);this._isStackViewport(e)?this._cloneStack(e,r):this._isVolumeViewport(e)&&this._cloneVolumes(e,r),this._inheritBorderRadius(t);let l=this._cloneToolGroups(e,r);this._sourceToolGroup=l.sourceToolGroup,this._magnifyToolGroup=l.magnifyToolGroup}_cancelMouseEventCallback(e){e.stopPropagation(),e.preventDefault()}_browserMouseUpCallback(e){let{element:t}=this._enabledElement.viewport;document.removeEventListener("mouseup",this._browserMouseUpCallback),t.addEventListener("mouseup",this._cancelMouseEventCallback),t.addEventListener("mousemove",this._cancelMouseEventCallback)}_browserMouseDownCallback(e){let{element:t}=this._enabledElement.viewport;this._canAutoPan=!!e.target?.closest(".advancedMagnifyTool"),document.addEventListener("mouseup",this._browserMouseUpCallback),t.removeEventListener("mouseup",this._cancelMouseEventCallback),t.removeEventListener("mousemove",this._cancelMouseEventCallback)}_mouseDragCallback(e){if(!e0.isInteractingWithTool)return;let{_autoPan:t}=this;if(!t.enabled||!this._canAutoPan)return;let{currentPoints:n}=e.detail,{viewport:i}=this._enabledElement,{canvasToWorld:a}=i,{canvas:o}=n,{radius:r}=this,l=[r,r],s=o3(l,o),d=r-t.padding;if(s<=d)return;let h=aZ.jb(aZ.vt(),o,l);
312aZ.S8(h,h),aZ.hs(h,h,s-d);let c=aZ.WQ(aZ.vt(),this.position,h),u=a(this.position),g=a(c),m=iT.jb(iT.vt(),g,u),p={points:{currentPosition:{canvas:this.position,world:u},newPosition:{canvas:c,world:g}},delta:{canvas:h,world:m}};t.callback(p)}_addBrowserEventListeners(e){document.addEventListener("mousedown",this._browserMouseDownCallback,!0),e.addEventListener("mousedown",this._cancelMouseEventCallback),e.addEventListener("mouseup",this._cancelMouseEventCallback),e.addEventListener("mousemove",this._cancelMouseEventCallback),e.addEventListener("dblclick",this._cancelMouseEventCallback)}_removeBrowserEventListeners(e){document.removeEventListener("mousedown",this._browserMouseDownCallback,!0),document.removeEventListener("mouseup",this._browserMouseUpCallback),e.removeEventListener("mousedown",this._cancelMouseEventCallback),e.removeEventListener("mouseup",this._cancelMouseEventCallback),e.removeEventListener("mousemove",this._cancelMouseEventCallback),e.removeEventListener("dblclick",this._cancelMouseEventCallback)}_addEventListeners(e){ez.A.addEventListener(eK.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(eK.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(eK.MOUSE_DRAG,this._mouseDragCallback),this._addBrowserEventListeners(e)}_removeEventListeners(e){ez.A.removeEventListener(eK.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(eK.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(eK.MOUSE_DRAG,this._mouseDragCallback),this._removeBrowserEventListeners(e)}_initialize(){let{_sourceEnabledElement:e}=this,{viewport:t}=e,{canvas:n}=t,i=this._createViewportNode();n.parentNode.appendChild(i),this._addEventListeners(i),this._cloneViewport(t,i),this._enabledElement=(0,ej.Ay)(i)}_syncViewportsCameras(e,t){let n=e.canvasToWorld(this.position),i=this._convertZoomFactorToParallelScale(e,t,this.zoomFactor),{focalPoint:a,position:o,viewPlaneNormal:r}=t.getCamera(),l=Math.sqrt(Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2)),s=[n[0],n[1],n[2]],d=[s[0]+l*r[0],s[1]+l*r[1],s[2]+l*r[2]];t.setCamera({parallelScale:i,focalPoint:s,position:d})}_syncStackViewports(e,t){t.setImageIdIndex(e.getCurrentImageIdIndex())}_syncViewports(){let{viewport:e}=this._sourceEnabledElement,{viewport:t}=this._enabledElement,n=e.getProperties();t.getImageData()&&(t.setProperties(n),this._syncViewportsCameras(e,t),this._isStackViewport(e)&&this._syncStackViewports(e,t),this._syncViewportsCameras(e,t),t.render())}_resizeViewport(){let{viewport:e}=this._enabledElement;e.getRenderingEngine().resize()}}_V.toolName="AdvancedMagnify";class _B extends l4{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,displayThreshold:5,positionSync:!0,disableCursor:!1}}){super(e,t),this.isDrawing=!1,this.isHandleOutsideImage=!1,this._elementWithCursor=null,this._currentCursorWorldPosition=null,this._currentCanvasPosition=null,this._disableCursorEnabled=!1,this.mouseMoveCallback=e=>{let{detail:t}=e,{element:n,currentPoints:i}=t;this._currentCursorWorldPosition=i.world,this._currentCanvasPosition=i.canvas,this._elementWithCursor=n;let a=this.getActiveAnnotation(n);return null===a?this.createInitialAnnotation(i.world,n):this.updateAnnotationPosition(n,a),!1},this.createInitialAnnotation=(e,t)=>{let n=(0,ej.Ay)(t);if(!n)throw Error("No enabled element found");let{viewport:i,renderingEngine:a}=n;this.isDrawing=!0;let{viewPlaneNormal:o,viewUp:r}=i.getCamera();if(!o||!r)throw Error("Camera not found");let l=this.getReferencedImageId(i,e,o,r),s=i.getFrameOfReferenceUID(),d={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...o],viewUp:[...r],FrameOfReferenceUID:s,referencedImageId:l},data:{label:"",handles:{points:[[...e]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}}}};if(ti(this.getToolName(),t).length>0)return null;null!==th(d,t)&&oX(ox(t,this.getToolName(),!1))},this.onCameraModified=e=>{let{element:t,previousCamera:n,camera:i}=e.detail,a=(0,ej.Ay)(t).viewport;if(t!==this._elementWithCursor)return;
312let o=n.focalPoint,r=i.viewPlaneNormal,l=i.focalPoint,s=[0,0,0];if(IT.Ay.subtract(l,o,s),0===s.reduce((e,t)=>e+t,0)||.01>Math.abs(IT.Ay.dot(s,r))||!this._currentCanvasPosition)return;let d=a.canvasToWorld(this._currentCanvasPosition);this._currentCursorWorldPosition=d,this.updateAnnotationPosition(t,this.getActiveAnnotation(t))},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i,FrameOfReferenceUID:a}=e,o=this._elementWithCursor===i.element;this.configuration.positionSync&&!o&&this.updateViewportImage(i);let{element:r}=i,l=ti(this.getToolName(),r);if(!l?.length||(l=this.filterInteractableAnnotationsForElement(r,l),!l?.length))return n;let s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<l.length;e++){let a=l[e],{annotationUID:r,data:d}=a,{handles:h}=d,{points:c}=h;if(!r)break;s.annotationUID=r;let u=parseFloat(this.getStyle("lineWidth",s,a)),g=u,m=this.getStyle("lineDash",s,a),p=this.getStyle("color",s,a);if(c[0].some(e=>isNaN(e)))break;let f=c.map(e=>i.worldToCanvas(e));if(!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(r))continue;let v={upper:"upper",right:"right",lower:"lower",left:"left"},[I,C]=f[0],_=o?20:7,E=o?5:7;l_(t,r,v.upper,[I,C-(_/2+E)],[I,C-_/2],{color:p,lineDash:m,lineWidth:g}),l_(t,r,v.lower,[I,C+(_/2+E)],[I,C+_/2],{color:p,lineDash:m,lineWidth:g}),l_(t,r,v.right,[I+(_/2+E),C],[I+_/2,C],{color:p,lineDash:m,lineWidth:g}),l_(t,r,v.left,[I-(_/2+E),C],[I-_/2,C],{color:p,lineDash:m,lineWidth:g}),n=!0}return n},this._disableCursorEnabled=this.configuration.disableCursor}onSetToolActive(){if(this._disableCursorEnabled=this.configuration.disableCursor,!this._disableCursorEnabled)return;let e=s3(this.toolGroupId).viewportsInfo;e&&e.map(e=>(0,ej.b1)(e.viewportId,e.renderingEngineId)).forEach(e=>{e&&o2(e.viewport.element)})}onSetToolDisabled(){if(!this._disableCursorEnabled)return;let e=s3(this.toolGroupId).viewportsInfo;e&&e.map(e=>(0,ej.b1)(e.viewportId,e.renderingEngineId)).forEach(e=>{e&&o1(e.viewport.element)})}getActiveAnnotation(e){let t=ti(this.getToolName(),e);return t.length?t[0]:null}updateAnnotationPosition(e,t){let n=this._currentCursorWorldPosition;if(!n||!t.data?.handles?.points)return;t.data.handles.points=[[...n]],t.invalidated=!0;let i=ox(e,this.getToolName(),!1);(0,ej.Ay)(e)&&oX(i)}filterInteractableAnnotationsForElement(e,t){if(!(t instanceof Array)||0===t.length)return[];let n=t[0],i=(0,ej.Ay)(e)?.viewport;if(!i)return[];let{viewPlaneNormal:a,focalPoint:o}=i.getCamera();if(!a||!o)return[];let r=n.data?.handles?.points;if(!(r instanceof Array)||1!==r.length)return[];let l=r[0],s=uN.planeEquation(a,o);return uN.planeDistanceToPoint(s,l)<this.configuration.displayThreshold?[n]:[]}updateViewportImage(e){let t=this._currentCursorWorldPosition;if(!(!t||t.some(e=>isNaN(e)))){if(e instanceof iA.A){let n=lR.A(t,e);if(null===n)return;n!==e.getCurrentImageIdIndex()&&e.setImageIdIndex(n)}else if(e instanceof i8.A){let{focalPoint:n,viewPlaneNormal:i}=e.getCamera();if(!n||!i)return;let a=uN.planeEquation(i,n),o=uN.planeDistanceToPoint(a,t,!0);if(.5>Math.abs(o))return;let r=iT.S8(iT.vt(),iT.fA(...i)),l=iT.hs(iT.vt(),r,o),s=iT.WQ(iT.vt(),iT.fA(...n),l);{e.setCamera({focalPoint:s});let t=e.getRenderingEngine();t&&t.renderViewport(e.id)}}}}}_B.toolName="ReferenceCursors";let _H=_B,_W=[];class _$ extends l4{constructor(e={},t={configuration:{viewportId:"",scaleLocation:"bottom"}}){super(e,t),this.editData=null,this._init=()=>{let e=(0,nG.qO)()[0];if(!e)return;let t=s3(this.toolGroupId).viewportsInfo;if(!t)return;let n=t.map(e=>(0,ej.b1)(e.viewportId,e.renderingEngineId)),{viewport:i}=n[0],{FrameOfReferenceUID:a}=n[0];if(this.configuration.viewportId&&n.forEach(e=>{e.viewport.id==this.configuration.viewportId&&(i=e.viewport)}),!i)return;let{viewUp:o,viewPlaneNormal:r}=i.getCamera(),l=CS.A(i),s=this.editData?.annotation,d=ti(this.getToolName(),i.element);d.length&&(s=d.filter(e=>e.data?.viewportId==i.id)[0]),n.forEach(e=>{let{viewport:t}=e;if(!_W.includes(t.id)){let e={metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...o],FrameOfReferenceUID:a,referencedImageId:null},data:{handles:{points:CS.A(t)},viewportId:t.id}};_W.push(t.id),th(e,t.element),s=e}}),this.editData?.annotation&&this.editData.annotation.data.viewportId==i.id&&(this.editData.annotation.data.handles.points=l,this.editData.annotation.data.viewportId=i.id),this.editData={viewport:i,renderingEngine:e,annotation:s}},this.onSetToolEnabled=()=>{this._init()},this.onCameraModified=e=>{this.configuration.viewportId=e.detail.viewportId,this._init()}
312,this.computeScaleSize=(e,t,n)=>{let i,a=[16e3,8e3,4e3,2e3,1e3,500,250,100,50,25,10,5,2];return("top"==n||"bottom"==n?a.filter(t=>t<.6*e&&t>.2*e):a.filter(e=>e<.6*t&&e>.2*t))[0]},this.computeEndScaleTicks=(e,t)=>{let n={bottom:[[0,-10],[0,-10]],top:[[0,10],[0,10]],left:[[0,0],[10,0]],right:[[0,0],[-10,0]]};return{endTick1:[[e[1][0]+n[t][0][0],e[1][1]+n[t][0][0]],[e[1][0]+n[t][1][0],e[1][1]+n[t][1][1]]],endTick2:[[e[0][0]+n[t][0][0],e[0][1]+n[t][0][0]],[e[0][0]+n[t][1][0],e[0][1]+n[t][1][1]]]}},this.computeInnerScaleTicks=(e,t,n,i,a)=>{let o;"bottom"==t||"top"==t?o=a[0][0]-i[0][0]:("left"==t||"right"==t)&&(o=a[0][1]-i[0][1]);let r=[],l=[],s=[],d=e;e>=50&&(d=e/10);let h=o/d;for(let e=0;e<d-1;e++){let a={bottom:[[h*(e+1),0],[h*(e+1),5]],top:[[h*(e+1),0],[h*(e+1),-5]],left:[[0,h*(e+1)],[-5,h*(e+1)]],right:[[0,h*(e+1)],[5,h*(e+1)]]};r.push(`${n}-tick${e}`),l.push(`tick${e}`),(e+1)%5==0?s.push([[i[0][0]+a[t][0][0],i[0][1]+a[t][0][1]],[i[1][0]+a[t][0][0],i[1][1]+a[t][0][1]]]):s.push([[i[0][0]+a[t][0][0],i[0][1]+a[t][0][1]],[i[1][0]+a[t][1][0],i[1][1]+a[t][1][1]]])}return{tickIds:r,tickUIDs:l,tickCoordinates:s}},this.computeWorldScaleCoordinates=(e,t,n)=>{let i,a=iT.Re(iT.vt(),n[0],n[1]);a=iT.S8(iT.vt(),a);let o=iT.Re(iT.vt(),n[2],n[0]);o=iT.S8(iT.vt(),o);let r={bottom:[n[1],n[2]],top:[n[0],n[3]],right:[n[2],n[3]],left:[n[0],n[1]]},l=iT.WQ(iT.vt(),r[t][0],r[t][0]).map(e=>e/2),s=e/2/Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)+Math.pow(a[2],2));return"top"==t||"bottom"==t?i=[iT.Re(iT.vt(),l,o.map(e=>e*s)),iT.WQ(iT.vt(),l,o.map(e=>e*s))]:("left"==t||"right"==t)&&(i=[iT.WQ(iT.vt(),l,a.map(e=>e*s)),iT.Re(iT.vt(),l,a.map(e=>e*s))]),i},this.computeCanvasScaleCoordinates=(e,t,n,i,a)=>{let o;if("top"==a||"bottom"==a){let i=t[0][0]-t[1][0];o=[[e.width/2-i/2,n.height],[e.width/2+i/2,n.height]]}else if("left"==a||"right"==a){let n=t[0][1]-t[1][1];o=[[i.width,e.height/2-n/2],[i.width,e.height/2+n/2]]}return o},this.computeScaleBounds=(e,t,n,i)=>{let a=t*Math.min(1e3,e.width),o=n*Math.min(1e3,e.height),r={bottom:[-o,-a],top:[o,a],left:[o,a],right:[-o,-a]},l={bottom:[e.height,e.width],top:[0,e.width],left:[e.height,0],right:[e.height,e.width]};return{height:l[i][0]+r[i][0],width:l[i][1]+r[i][1]}}}renderAnnotation(e,t){if(!this.editData||!this.editData.viewport)return;let n=this.configuration.scaleLocation,{viewport:i}=e,a=ti(this.getToolName(),i.element).filter(e=>e.data?.viewportId==i.id)[0],o=e.viewport.canvas;if(!i||!a)return!1;let r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l={width:o.width/window.devicePixelRatio||1,height:o.height/window.devicePixelRatio||1},s=a.data.handles.points[0],d=a.data.handles.points[1],h=a.data.handles.points[2],c=a.data.handles.points[3],u=[s,h,d,c],g=iT.Io(h,c),m=iT.Io(s,h),p=this.computeScaleBounds(l,.05,.05,n),f=this.computeScaleBounds(l,.05,.05,n),v=this.computeScaleSize(g,m,n),I=this.computeWorldScaleCoordinates(v,n,u).map(e=>i.worldToCanvas(e)),C=this.computeCanvasScaleCoordinates(l,I,f,p,n),_=this.computeEndScaleTicks(C,n),{annotationUID:E}=a;r.annotationUID=E;let w=this.getStyle("lineWidth",r,a),A=this.getStyle("lineDash",r,a),S=this.getStyle("color",r,a),y=this.getStyle("shadow",r,a),b=`${E}-scaleline`;l_(t,E,"1",C[0],C[1],{color:S,width:w,lineDash:A,shadow:y},b);let T=`${E}-left`;l_(t,E,"2",_.endTick1[0],_.endTick1[1],{color:S,width:w,lineDash:A,shadow:y},T);let M=`${E}-right`;l_(t,E,"3",_.endTick2[0],_.endTick2[1],{color:S,width:w,lineDash:A,shadow:y},M);let D={bottom:[-10,-42],top:[-12,-35],left:[-40,-20],right:[-50,-20]},O=[C[0][0]+D[n][0],C[0][1]+D[n][1]],x=this._getTextLines(v),{tickIds:P,tickUIDs:L,tickCoordinates:N}=this.computeInnerScaleTicks(v,n,E,_.endTick1,_.endTick2);for(let e=0;e<L.length;e++)l_(t,E,L[e],N[e][0],N[e][1],{color:S,width:w,lineDash:A,shadow:y},P[e]);return lC(t,E,"text0",x,[O[0],O[1]],{fontFamily:"Helvetica Neue, Helvetica, Arial, sans-serif",fontSize:"14px",lineDash:"2,3",lineWidth:"1",shadow:!0,color:S}),!1}_getTextLines(e){let t,n;return e>=50?(t=e/10,n=" cm"):(t=e,n=" mm"),[t.toString().concat(n)]}}_$.toolName="ScaleOverlay";let _z=_$,_X=(e,t,n)=>{if(!t?.data?.contour?.polyline?.length)return;let{polyline:i}=t.data.contour,{length:a}=i,o=1/0;for(let t=0;t<a;t++)o=Math.min(o,o3(e.worldToCanvas(i[t]),n));if(!(o===1/0||isNaN(o)))return o};class _j{constructor(){this.toolInfo={toolSize:null,radius:null,maxToolSize:null}}static{this.shapeName="Circle"}
312renderShape(e,t,n){uo(e,"SculptorTool","0",t,this.toolInfo.toolSize,n)}configureToolSize(e){let t=this.toolInfo;if(t.toolSize&&t.maxToolSize)return;let n=e.detail.element,i=Math.min(n.clientWidth,n.clientHeight)/24;t.toolSize=i,t.radius=null,t.maxToolSize=i}updateToolSize(e,t,n){let i=this.toolInfo,a=_X(t,n,e);a>0&&(i.toolSize=Math.min(i.maxToolSize,a),this.computeWorldRadius(t,!0))}getMaxSpacing(e){return Math.max(this.toolInfo.toolSize/4,e)}computeWorldRadius(e,t=!1){if(!this.toolInfo.radius||t){let t=e.canvasToWorld([0,0]),n=e.canvasToWorld([this.toolInfo.toolSize,0]);this.toolInfo.radius=iT.Bw(iT.jb(iT.vt(),t,n))}return this.toolInfo.radius}getEdge(e,t,n,i){let a=iT.WQ(iT.vt(),t,n||t);iT.hs(a,a,.5);let o=e.worldToCanvas(a),r=aZ.jb(aZ.vt(),o,i),l=Math.atan2(r[1],r[0]),s=this.interpolatePoint(e,l,i),d=e.worldToCanvas(s);return{point:s,angle:l,canvasPoint:d}}interpolatePoint(e,t,n){let[i,a]=n,o=this.toolInfo.toolSize,r=Math.cos(t)*o,l=Math.sin(t)*o;return e.canvasToWorld([i+r,a+l])}isInCursor(e,t){return iT.Io(e,t)<this.toolInfo.radius}}let{isEqual:_q}=i9;class _K extends lH{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{minSpacing:1,referencedToolNames:["PlanarFreehandROI","PlanarFreehandContourSegmentationTool"],toolShape:"circle",referencedToolName:"PlanarFreehandROI",updateCursorSize:"dynamic"}}){super(e,t),this.registeredShapes=new Map,this.isActive=!1,this.commonData={activeAnnotationUID:null,viewportIdsToRender:[],isEditingOpenContour:!1,canvasLocation:void 0,external:!0,closed:!1},this.preMouseDownCallback=e=>{let t=e.detail,{element:n}=t;if(this.configureToolSize(e),this.selectFreehandTool(t),null!==this.commonData.activeAnnotationUID)return this.isActive=!0,o2(n),this.activateModify(n),!0},this.mouseMoveCallback=e=>{this.mode===e1.Active?(this.configureToolSize(e),this.updateCursor(e)):this.commonData.canvasLocation=void 0},this.endCallback=e=>{let{element:t}=e.detail;this.isActive=!1,this.deactivateModify(t),o1(t);let n=this.getToolInstance(t);n.doneEditMemo?.();let i=this.filterSculptableAnnotationsForElement(t).find(e=>e.annotationUID===this.commonData.activeAnnotationUID);n.configuration.calculateStats&&(i.invalidated=!0),e9(i,t,eY.HandlesUpdated)},this.dragCallback=e=>{let t=e.detail,n=t.element;this.updateCursor(e);let i=this.filterSculptableAnnotationsForElement(n),a=i.find(e=>e.annotationUID===this.commonData.activeAnnotationUID);if(!i?.length||!this.isActive)return;let o=a.data.contour.polyline;this.sculpt(t,o)},this.registerShapes(_j.shapeName,_j),this.setToolShape(this.configuration.toolShape)}registerShapes(e,t){let n=new t;this.registeredShapes.set(e,n)}sculpt(e,t){let n=this.configuration,i=e.element,{viewport:a}=(0,ej.Ay)(i),o=this.registeredShapes.get(this.selectedShape);this.sculptData={mousePoint:e.currentPoints.world,mouseCanvasPoint:e.currentPoints.canvas,points:t,maxSpacing:o.getMaxSpacing(n.minSpacing),element:i,contours:[{annotationUID:this.commonData.activeAnnotationUID,points:t}]};let r=this.intersect(a,o);if(!r.length)return;let l=this.getContourSelections(r,t.length),{closed:s}=this.commonData;for(let e of l){let n,i=[],o=e[e.length-1],r=s?o.relIndex:0;for(let o of e)o.isEnter?(_Y(i,t,r,o.index),n=o):this.interpolatePoints(a,n,o,t,i),r=o.index;if(l.length>1&&0>aj(i.map(a.worldToCanvas))){console.warn("Skipping internal area");continue}!s&&r<t.length-1&&_Y(i,t,r),t.splice(0,t.length),_Y(t,i);return}}intersect(e,t){let{contours:n,mousePoint:i,mouseCanvasPoint:a}=this.sculptData,{closed:o}=this.commonData;t.computeWorldRadius(e);let r=[];for(let l of n){let{annotationUID:n,points:s}=l,d=!1,h=!1,c=!1,{length:u}=s;for(let l=0;l<=u;l++){let g=l%u,m=s[g],p=t.isInCursor(m,i);if(h||=p,c||=!p,0===l){if(d=p,!o&&p){let i=t.getEdge(e,m,null,a);r.push({annotationUID:n,isEnter:p,index:l,point:i.point,angle:i.angle})}continue}if(0===g&&!o){if(d){let i=t.getEdge(e,s[u-1],null,a);r.push({annotationUID:n,isEnter:!1,index:u-1,point:i.point,angle:i.angle})}continue}if(d===p)continue;d=p;let f=t.getEdge(e,m,s[l-1],a);r.push({annotationUID:n,isEnter:p,index:l,point:f.point,angle:f.angle})}}return r}interpolatePoints(e,t,n,i,a){let{external:o,closed:r}=this.commonData,l=i[t.index%i.length],s=i[n.index%i.length],d=iT.jb(iT.vt(),s,l);if(_q(iT.Bw(d),0))return;let h=this.registeredShapes.get(this.selectedShape),c=(t.angle+2*Math.PI)%(2*Math.PI),u=(n.angle+2*Math.PI)%(2*Math.PI),g=u<c?u+2*Math.PI:u,m=u>c?u-2*Math.PI:u;(o&&!r&&Math.abs(m-c)<Math.abs(g-c)||o&&r)&&(g=m);let p=Math.ceil(Math.abs(c-g)/.25);for(let t=0;t<=p;t++){let n=(c*(p-t)+t*g)/p;a.push(h.interpolatePoint(e,n,this.sculptData.mouseCanvasPoint))}}getContourSelections(e,t){let n=[],i=e.length/2;if(!i||e.length%2)return n;let a=Number.NEGATIVE_INFINITY;for(let o=0;o<i;o++){let i=this.findNext(e,a);if(!i){console.error("Couldnt' find an entry");continue}let o=this.findNext(e,i.angle,!1);if(!o){console.error("Couldn't find an exit for",i);continue}o.relIndex||=o.index<i.index?o.index+t:o.index,n.push([i,o])}n.sort((e,t)=>
312e[0].index-t[0].index);for(let e=0;e<n.length-1;){let t=n[e],i=this.findMergeable(n,t,e);i?t.push(...i):e++}return n.length>1&&console.warn("************* More than 1 result",n),n}findMergeable(e,t,n){let i=t[t.length-1];for(let t=n+1;t<e.length;t++){let[n]=e[t];if(n.index>=i.relIndex){let n=e[t];return e.splice(t,1),n}}}findNext(e,t,n=!0){let i,a;if(1===e.length){let[t]=e;return e.splice(0,1),t}for(let o=0;o<e.length;o++){let r=e[o];if(r.isEnter==n){let e=(r.angle-t+2*Math.PI)%(2*Math.PI);(!i||e<a)&&(i={i:o,intersection:r},a=e)}}if(!i)return void console.warn("Couldn't find an exit point for entry",JSON.stringify(e));e.splice(i.i,1);let{intersection:o}=i;return o}interpolatePointsWithinMaxSpacing(e,t,n,i){let{element:a}=this.sculptData,{viewport:o}=(0,ej.Ay)(a),r=_Z(e+1,t.length);o3(o.worldToCanvas(t[e]),o.worldToCanvas(t[r]))>i&&n.push(e)}updateCursor(e){let t=e.detail,n=t.element,{viewport:i}=(0,ej.Ay)(n);this.commonData.viewportIdsToRender=[i.id];let a=this.filterSculptableAnnotationsForElement(n);if(!a?.length)return;let o=a.find(e=>e.annotationUID===this.commonData.activeAnnotationUID);if(this.commonData.canvasLocation=t.currentPoints.canvas,this.isActive)o.highlighted=!0;else{let e=this.registeredShapes.get(this.selectedShape),n=t.currentPoints.canvas;"dynamic"===this.configuration.updateCursorSize&&e.updateToolSize(n,i,o)}oz(this.commonData.viewportIdsToRender)}getToolInstance(e){let{renderingEngineId:t,viewportId:n}=(0,ej.Ay)(e);return oy(n,t).getToolInstance(this.configuration.referencedToolName)}filterSculptableAnnotationsForElement(e){let{configuration:t}=this,n=[],i=this.getToolInstance(e);return t.referencedToolNames.forEach(t=>{let i=ti(t,e);i&&n.push(...i)}),i.filterInteractableAnnotationsForElement(e,n)}configureToolSize(e){this.registeredShapes.get(this.selectedShape).configureToolSize(e)}selectFreehandTool(e){let t=this.getClosestFreehandToolOnElement(e);if(void 0===t)return;let n=ta(t);if(this.commonData.activeAnnotationUID=t,this.commonData.closed=n.data.contour.closed,this.commonData.external=!0,this.commonData.closed){let{element:t}=e,{viewport:i}=(0,ej.Ay)(t),a=n.data.contour.polyline.map(e=>i.worldToCanvas(e)),o=e.currentPoints.canvas;this.commonData.external=!a$(a,o,{closed:!0})}}getClosestFreehandToolOnElement(e){let{element:t}=e,{viewport:n}=(0,ej.Ay)(t),i=this.configuration,a=this.filterSculptableAnnotationsForElement(t);if(!a?.length)return;let o=e.currentPoints.canvas,r={distance:1/0,toolIndex:void 0,annotationUID:void 0};for(let e=0;e<a?.length;e++){if(a[e].isLocked||!a[e].isVisible)continue;let t=_X(n,a[e],o);-1!==t&&t<r.distance&&(r.distance=t,r.toolIndex=e,r.annotationUID=a[e].annotationUID)}return this.commonData.isEditingOpenContour=!a[r.toolIndex].data.contour.closed,i.referencedToolName=a[r.toolIndex].metadata.toolName,r.annotationUID}activateModify(e){let t=ta(this.commonData.activeAnnotationUID),n=this.getToolInstance(e);n.createMemo?.(e,t),e.addEventListener(eK.MOUSE_UP,this.endCallback),e.addEventListener(eK.MOUSE_CLICK,this.endCallback),e.addEventListener(eK.MOUSE_DRAG,this.dragCallback),e.addEventListener(eK.TOUCH_TAP,this.endCallback),e.addEventListener(eK.TOUCH_END,this.endCallback),e.addEventListener(eK.TOUCH_DRAG,this.dragCallback)}deactivateModify(e){e.removeEventListener(eK.MOUSE_UP,this.endCallback),e.removeEventListener(eK.MOUSE_CLICK,this.endCallback),e.removeEventListener(eK.MOUSE_DRAG,this.dragCallback),e.removeEventListener(eK.TOUCH_TAP,this.endCallback),e.removeEventListener(eK.TOUCH_END,this.endCallback),e.removeEventListener(eK.TOUCH_DRAG,this.dragCallback)}setToolShape(e){this.selectedShape=this.registeredShapes.get(e)??_j.shapeName}renderAnnotation(e,t){let{viewport:n}=e,{element:i}=n,a=this.commonData.viewportIdsToRender;if(!this.commonData.canvasLocation||this.mode!==e1.Active||!a.includes(n.id))return;let o=this.filterSculptableAnnotationsForElement(i);if(!o?.length)return;let r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l=lz("color",r,l2.Default,this.mode);this.isActive&&(l=lz("color",r,l2.Highlighted,this.mode)),this.registeredShapes.get(this.selectedShape).renderShape(t,this.commonData.canvasLocation,{color:l})}}function _Y(e,t,n=0,i=t.length){i<n&&(i+=t.length);for(let a=n;a<i;
312a++)e.push(t[a%t.length])}let _Z=(e,t)=>(e+t)%t;_K.toolName="SculptorTool";let _J=_K;class _Q extends lH{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"]}){super(e,t),this.preMouseDownCallback=e=>this._deleteNearbyAnnotations(e,"mouse"),this.preTouchStartCallback=e=>this._deleteNearbyAnnotations(e,"touch")}_deleteNearbyAnnotations(e,t){let{renderingEngineId:n,viewportId:i,element:a,currentPoints:o}=e.detail,r=oy(i,n);if(!r)return!1;let l=r._toolInstances,s=[];for(let e in l){let n=l[e];if("function"!=typeof n.isPointNearTool||"function"!=typeof n.filterInteractableAnnotationsForElement)continue;let i=ti(e,a),r=n.filterInteractableAnnotationsForElement(a,i);if(r)for(let e of r)n.isPointNearTool(a,e,o.canvas,10,t)&&s.push(e.annotationUID)}for(let e of s){lj(e);let t=ta(e);sd.createAnnotationMemo(a,t,{deleting:!0}),tu(e)}return e.preventDefault(),!0}}_Q.toolName="Eraser";let _0=_Q;function _1(e,t){!function(e,t,n=!0){Is(e,Object.assign({},t,{segmentIndex:0}))}(e,t,!0)}class _2 extends mm{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:Is,ERASE_INSIDE:_1},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}){super(e,t),this.preMouseDownCallback=e=>{if(!0===this.isDrawing)return;let{currentPoints:t,element:n}=e.detail,i=t.world,{viewport:a}=(0,ej.Ay)(n);this.isDrawing=!0;let{viewPlaneNormal:o,viewUp:r}=a.getCamera(),l=ag(a.id);if(!l)throw Error("No active segmentation detected, create one before using scissors tool");let{segmentationId:s}=l,d=af(s),h=dt(s),c=ds(a.id,s,d),{representationData:u}=n9(s),g=u[nB.Labelmap],m={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...o],viewUp:[...r],FrameOfReferenceUID:a.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:c},data:{handles:{points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null}}},p=ox(n,this.getToolName());if(this.editData={annotation:m,segmentIndex:d,segmentationId:s,segmentsLocked:h,segmentColor:c,viewportIdsToRender:p,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,volumeId:null,referencedVolumeId:null,imageId:null},a instanceof nU.A){let{volumeId:e}=g,t=nV.Ay.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else{let e=at(a.id,s);this.editData={...this.editData,imageId:e}}return this._activateDraw(n),o2(n),e.preventDefault(),oX(p),!0},this._dragCallback=e=>{let t,n,i,a,o,r,l,s;this.isDrawing=!0;let d=e.detail,{element:h}=d,{annotation:c,viewportIdsToRender:u,handleIndex:g}=this.editData,{data:m}=c,{currentPoints:p}=d,{worldToCanvas:f,canvasToWorld:v}
312=(0,ej.Ay)(h).viewport,I=p.world,{points:C}=m.handles;switch(C[g]=[...I],g){case 0:case 3:t=f(C[0]),n=[(a=f(C[3]))[0],t[1]],i=[t[0],a[1]],r=v(n),l=v(i),C[1]=r,C[2]=l;break;case 1:case 2:n=f(C[1]),t=[(i=f(C[2]))[0],n[1]],a=[n[0],i[1]],o=v(t),s=v(a),C[0]=o,C[3]=s}c.invalidated=!0,this.editData.hasMoved=!0,oX(u)},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,newAnnotation:i,hasMoved:a}=this.editData,{data:o}=n;if(i&&!a)return;o.handles.activeHandleIndex=null,this._deactivateDraw(t),o1(t);let r=(0,ej.Ay)(t),l={...this.editData,points:o.handles.points,createMemo:this.createMemo.bind(this)};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(r,l),this.doneEditMemo()},this._activateDraw=e=>{e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback)},this._deactivateDraw=e=>{e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(e,t)=>{let n=!1;if(!this.editData)return n;let{viewport:i}=e,{annotation:a}=this.editData,o=a.metadata,r=a.annotationUID,{points:l}=a.data.handles,s=l.map(e=>i.worldToCanvas(e)),d=`rgb(${o.segmentColor.slice(0,3)})`;return i.getRenderingEngine()?(uc(t,r,"0",s[0],s[3],{color:d}),n=!0):(console.warn("Rendering Engine has been destroyed"),n)}}}_2.toolName="RectangleScissor";let _5=_2;class _3 extends mm{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:g4,ERASE_INSI
312DE:ml},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}){super(e,t),this.preMouseDownCallback=e=>{if(!0===this.isDrawing)return;let{currentPoints:t,element:n}=e.detail,i=t.world,a=t.canvas,{viewport:o}=(0,ej.Ay)(n);this.isDrawing=!0;let{viewPlaneNormal:r,viewUp:l}=o.getCamera(),s=ag(o.id);if(!s)throw Error("No active segmentation detected, create one before using scissors tool");let{segmentationId:d}=s,h=af(d),c=dt(d),u=ds(o.id,d,h),{representationData:g}=n9(d),m=g.Labelmap;if(!m)throw Error("No labelmap data found for the active segmentation, create one before using scissors tool");let p={invalidated:!0,highlighted:!0,metadata:{viewPlaneNormal:[...r],viewUp:[...l],FrameOfReferenceUID:o.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:u},data:{handles:{points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},isDrawing:!0,cachedStats:{}}},f=[o.id];if(this.editData={annotation:p,centerCanvas:a,segmentIndex:h,segmentationId:d,segmentsLocked:c,segmentColor:u,viewportIdsToRender:f,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,volumeId:null,referencedVolumeId:null,imageId:null},o instanceof nU.A){let{volumeId:e}=m,t=nV.Ay.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else{let e=at(o.id,d);this.editData={...this.editData,imageId:e}}return this._activateDraw(n),o2(n),e.preventDefault(),oX(f),!0},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{currentPoints:i}=t,a=i.canvas,{renderingEngine:o,viewport:r}=(0,ej.Ay)(n),{canvasToWorld:l}=r,{annotation:s,viewportIdsToRender:d,centerCanvas:h}=this.editData,{data:c}=s,u=Math.abs(a[0]-h[0]),g=Math.abs(a[1]-h[1]),m=Math.sqrt(u*u+g*g),p=[h[0],h[1]+m],f=[h[0],h[1]-m],v=[h[0]-m,h[1]],I=[h[0]+m,h[1]];c.handles.points=[l(p),l(f),l(v),l(I)],s.invalidated=!0,this.editData.hasMoved=!0,oX(d)},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,newAnnotation:i,hasMoved:a}=this.editData,{data:o}=n,{viewPlaneNormal:r,viewUp:l}=n.metadata;if(i&&!a)return;o.handles.activeHandleIndex=null,this._deactivateDraw(t),o1(t);let s=(0,ej.Ay)(t),d={...this.editData,points:o.handles.points,viewPlaneNormal:r,viewUp:l,createMemo:this.createMemo.bind(this)};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(s,d),this.doneEditMemo()},this._activateDraw=e=>{e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback),e.addEventListener(eK.TOUCH_END,this._endCallback)},this._deactivateDraw=e=>{e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1;if(!this.editData)return n;let{viewport:i}=e,{viewportIdsToRender:a}=this.editData;if(!a.includes(i.id))return n;let{annotation:o}=this.editData,r=o.metadata,l=o.annotationUID,{points:s}=o.data.handles,d=s.map(e=>i.worldToCanvas(e)),h=d[0],c=d[1],u=[Math.floor((h[0]+c[0])/2),Math.floor((h[1]+c[1])/2)],g=Math.abs(h[1]-Math.floor((h[1]+c[1])/2)),m=`rgb(${r.segmentColor.slice(0,3)})`;return i.getRenderingEngine()?(uo(t,l,"0",u,g,{color:m}),n=!0):(console.warn("Rendering Engine has been destroyed"),n)}}}_3.toolName="CircleScissor";let _4=_3;class _8 extends mm{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:mt,ERASE_INSI
312DE:mr},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}){super(e,t),this.preMouseDownCallback=e=>{if(!0===this.isDrawing)return;this.doneEditMemo();let{currentPoints:t,element:n}=e.detail,i=t.world,a=t.canvas,{viewport:o}=(0,ej.Ay)(n);this.isDrawing=!0;let{viewPlaneNormal:r,viewUp:l}=o.getCamera(),s=ag(o.id);if(!s)throw Error("No active segmentation detected, create one before using scissors tool");let{segmentationId:d}=s,h=af(d),c=dt(d),u=ds(o.id,d,h);this.isDrawing=!0;let g={metadata:{viewPlaneNormal:[...r],viewUp:[...l],FrameOfReferenceUID:o.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:u},data:{invalidated:!0,handles:{points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},cachedStats:{},highlighted:!0}},m=[o.id];this.editData={annotation:g,centerCanvas:a,segmentIndex:h,segmentationId:d,segmentsLocked:c,segmentColor:u,toolGroupId:this.toolGroupId,viewportIdsToRender:m,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,volumeId:null,referencedVolumeId:null,imageId:null};let{representationData:p}=n9(d),f=this.getEditData({viewport:o,representationData:p,segmentsLocked:c,segmentationId:d});return this.editData={...this.editData,...f},this._activateDraw(n),o2(n),e.preventDefault(),oX(m),!0},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{currentPoints:i}=t,a=i.canvas,{renderingEngine:o,viewport:r}=(0,ej.Ay)(n),{canvasToWorld:l}=r,{annotation:s,viewportIdsToRender:d,centerCanvas:h}=this.editData,{data:c}=s,u=Math.abs(a[0]-h[0]),g=Math.abs(a[1]-h[1]),m=Math.sqrt(u*u+g*g),p=[h[0],h[1]+m],f=[h[0],h[1]-m],v=[h[0]-m,h[1]],I=[h[0]+m,h[1]];c.handles.points=[l(p),l(f),l(v),l(I)],s.invalidated=!0,this.editData.hasMoved=!0,oX(d)},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,newAnnotation:i,hasMoved:a,segmentIndex:o,segmentsLocked:r}=this.editData,{data:l}=n,{viewPlaneNormal:s,viewUp:d}=n.metadata;if(i&&!a)return;n.highlighted=!1,l.handles.activeHandleIndex=null,this._deactivateDraw(t),o1(t);let h=(0,ej.Ay)(t),c={...this.editData,points:l.handles.points,segmentIndex:o,segmentsLocked:r,viewPlaneNormal:s,viewUp:d,createMemo:this.createMemo.bind(this)};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(h,c),this.doneEditMemo()},this._activateDraw=e=>{e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_TAP,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=e=>{e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback),e.removeEventListener(eK.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!1;if(!this.editData)return n;let{viewport:i}=e,{viewportIdsToRender:a}=this.editData;if(!a.includes(i.id))return n;let{annotation:o}=this.editData,r=o.metadata,l=o.annotationUID,{points:s}=o.data.handles,d=s.map(e=>i.worldToCanvas(e)),h=d[0],c=d[1],u=[Math.floor((h[0]+c[0])/2),Math.floor((h[1]+c[1])/2)],g=Math.abs(h[1]-Math.floor((h[1]+c[1])/2)),m=`rgb(${r.segmentColor.slice(0,3)})`;return i.getRenderingEngine()?(uo(t,l,"0",u,g,{color:m}),n=!0):(console.warn("Rendering Engine has been destroyed"),n)}}}_8.toolName="SphereScissor";let _9=_8,{transformWorldToIndex:_7}=i9;class _6 extends Cz{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{simplified:!0,storePointData:!1,numSlicesToPropagate:10,calculatePointsInsideVolume:!0,getTextLines:Ee,statsCalculator:lP,showTextBox:!1,throttleTimeout:100}}){super(e,t),this.isHandleOutsideImage=!1,this.addNewAnnotation=e=>{let t,n,i,a,{currentPoints:o,element:r}=e.detail,l=o.world,s=(0,ej.Ay)(r),{viewport:d,renderingEngine:h}=s;this.isDrawing=!0;let{viewPlaneNormal:c,viewUp:u}=d.getCamera();if(d instanceof iA.A)throw Error("Stack Viewport Not implemented");{let e=this.getTargetId(d);i=iS.A(e),n=nV.Ay.getVolume(i),t=iy.A(n,l,c)}let g=u3.A(n,c),m=this._getStartCoordinate(l,g,c),p=this._getEndCoordinate(l,g,c),f=d.getFrameOfReferenceUID();a=this.configuration.simplified?[[...l],[...l]]:[[...l],[...l],[...l],[...l],[...l]];let v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...u],FrameOfReferenceUID:f,referencedImageId:t,volumeId:i,spacingInNormal:g,enabledElement:s},data:{label:"",startCoordinate:m,endCoordinate:p,handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:a,activeHandleIndex:null},cachedStats:{pointsInVolume:[],projectionPoints:[],statistics:[]},labelmapUID:null}};this._computeProjectionPoints(v,n),th(v,r);
312let I=ox(r,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:I,newAnnotation:!0,hasMoved:!1},this._activateDraw(r),o2(r),e.preventDefault(),oX(I),v},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;if(a&&!o)return;n.highlighted=!1,r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t);let{metadata:l}=n,{enabledElement:s}=l;this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID);let d=this.getTargetId(s.viewport),h=nV.Ay.getVolume(d.split(/volumeId:|\?/)[1]);this._computePointsInsideVolume(n,h,d,s),oX(i),a?e7(n):e9(n,t)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,a=ti(this.getToolName(),i.element);if(!a?.length)return n;a=ga(a,i.getCamera());let o={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<a.length;e++){let r,l=a[e],{annotationUID:s,data:d,metadata:h}=l,{startCoordinate:c,endCoordinate:u}=d,{points:g,activeHandleIndex:m}=d.handles,{enabledElement:p}=h;o.annotationUID=s;let f=this.getStyle("lineWidth",o,l),v=this.getStyle("lineDash",o,l),I=this.getStyle("color",o,l),C=g.map(e=>i.worldToCanvas(e)),_=C[0],E=pp([C[0],C[1]]),{centerPointRadius:w}=this.configuration,A=pf([C[0],C[1]]),S=i.getCamera().focalPoint,y=i.getCamera().viewPlaneNormal,b=c,T=u;Array.isArray(c)&&(d.startCoordinate=b=this._getCoordinateForViewplaneNormal(b,y)),Array.isArray(u)&&(d.endCoordinate=T=this._getCoordinateForViewplaneNormal(T,y));let M=aD.C(d.startCoordinate),D=aD.C(d.endCoordinate),O=this._getCoordinateForViewplaneNormal(S,y),x=aD.C(O);if(x<Math.min(M,D)||x>Math.max(M,D))continue;let P=aD.C((d.startCoordinate+d.endCoordinate)/2),L=!1;for(let e of(x===P&&(L=!0),d.handles.points[0][this._getIndexOfCoordinatesForViewplaneNormal(y)]=P,p.viewport?.volumeIds.values()))l.invalidated&&l.metadata.volumeId===e&&this._throttledCalculateCachedStats(l,p);if(!i.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");break}if(!l6(s))continue;iN(s)||this.editData||null===m||!L||(r=this.configuration.simplified?[C[m]]:C),r&&li(t,s,"0",r,{color:I});let N=f,R=v;if(L?(N=f,R=[]):R=[5,5],uo(t,s,"0",_,E,{color:I,lineDash:R,lineWidth:N}),w>0&&E>3*w&&uo(t,s,"0-center",_,w,{color:I,lineDash:v,lineWidth:f}),n=!0,this.configuration.showTextBox){let e,n=this.getLinkedTextBoxStyle(o,l);if(!n.visibility){d.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}let a=this.configuration.getTextLines(d,{metadata:h});if(!a||0===a.length)continue;d.handles.textBox.hasMoved||(e=lS(A),d.handles.textBox.worldPosition=i.canvasToWorld(e));let{x:r,y:c,width:u,height:g}=lA(t,s,"1",a,i.worldToCanvas(d.handles.textBox.worldPosition),[C[0],C[1]],{},n);d.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([r,c]),topRight:i.canvasToWorld([r+u,c]),bottomLeft:i.canvasToWorld([r,c+g]),bottomRight:i.canvasToWorld([r+u,c+g])}}}return n},this.configuration.calculatePointsInsideVolume?this._throttledCalculateCachedStats=oA(this._calculateCachedStatsTool,this.configuration.throttleTimeout,{trailing:!0}):this._throttledCalculateCachedStats=ow(this._calculateCachedStatsTool,this.configuration.throttleTimeout)}_computeProjectionPoints(e,t){let{data:n,metadata:i}=e,{viewPlaneNormal:a,spacingInNormal:o}=i,{startCoordinate:r,endCoordinate:l}=n,{points:s}=n.handles,d=this._getIndexOfCoordinatesForViewplaneNormal(a),h=iT.o8(s[0]);h[d]=r;let c=iT.o8(s[0]);c[d]=l;let u=iT.vt();iT.Re(u,c,h);let g=iT.Bw(u);if(0===g){let e=s.map(e=>{let t=iT.o8(e);return t[d]=r,Array.from(t)});n.cachedStats.projectionPoints=[e];return}iT.S8(u,u);let m=nH.G(s);m[0][d]=r,m[1][d]=r;let p=[];for(let e=0;e<=g+1e-6;e+=o)p.push(m.map(t=>{let n=iT.vt();return iT.Ln(n,t,u,e),Array.from(n)}));n.cachedStats.projectionPoints=p}_computePointsInsideVolume(e,t,n,i){let{data:a,metadata:o}=e,{viewPlaneNormal:r,viewUp:l}=o,{viewport:s}=i,d=a.cachedStats.projectionPoints,h=[[]],c=this.getTargetImageData(n),u=a.handles.points.map(e=>s.worldToCanvas(e)),g=pf([u[0],u[1]])[0],m=pf([u[0],u[1]])[1],{worldWidth:p,worldHeight:f}=pS(r,l,s.canvasToWorld(g),s.canvasToWorld(m)),v=aU(c,a.handles.points),I=aF(c),C=Math.abs(Math.PI*(p/v.scale/2)*(f/I/v.scale/2)),_={isPreScaled:ly(s,n),isSuvScaled:this.isSuvScaled(s,n,e.metadata.referencedImageId)},E=dm(o.Modality,e.metadata.referencedImageId,_);for(let e=0;e<d.length;e++){if(!t)continue;let n=d[e][0],i=d[e].map(e=>s.worldToCanvas(e)),[a,o]=pf([i[0],i[1]]),l=s.canvasToWorld(a),c=s.canvasToWorld(o),{dimensions:u,imageData:g,voxelManager:m}=t,p=_7(g,l),f=_7(g,n),v=this._getIndexOfCoordinatesForViewplaneNormal(r);p[0]=Math.floor(p[0]),p[1]=Math.floor(p[1]),p[2]=Math.floor(p[2]),p[v]=f[v];let I=_7(g,c);if(I[0]=Math.floor(I[0]),I[1]=Math.floor(I[1]),I[2]=Math.floor(I[2]),I[v]=f[v],Cz.isInsideVolume(u,[p,I])){let e=Math.min(p[0],I[0]),t=Math.max(p[0],I[0]),i=Math.min(p[
3121],I[1]),a=Math.max(p[1],I[1]),o=[[e,t],[i,a],[Math.min(p[2],I[2]),Math.max(p[2],I[2])]],r={center:n,xRadius:Math.abs(l[0]-c[0])/2,yRadius:Math.abs(l[1]-c[1])/2,zRadius:Math.abs(l[2]-c[2])/2},s=m.forEach(this.configuration.statsCalculator.statsCallback,{isInObject:e=>pv(r,e),boundsIJK:o,imageData:g,returnPoints:this.configuration.storePointData});h.push(s)}}let w=this.configuration.statsCalculator.getStatistics();a.cachedStats.pointsInVolume=h,a.cachedStats.statistics={Modality:o.Modality,area:C,mean:w.mean?.value,stdDev:w.stdDev?.value,max:w.max?.value,statsArray:w.array,areaUnit:v.areaUnit,modalityUnit:E}}_calculateCachedStatsTool(e,t){let n=e.data,{viewport:i}=t,{cachedStats:a}=n,o=this.getTargetId(i),r=nV.Ay.getVolume(o.split(/volumeId:|\?/)[1]);return this._computeProjectionPoints(e,r),this._computePointsInsideVolume(e,r,o,t),e.invalidated=!1,e9(e,i.element),a}_getStartCoordinate(e,t,n){let i=Math.round(this.configuration.numSlicesToPropagate/2),a=iT.vt();return iT.Ln(a,e,n,-(i*t)),this._getCoordinateForViewplaneNormal(a,n)}_getEndCoordinate(e,t,n){let i=this.configuration.numSlicesToPropagate,a=i-Math.round(i/2),o=iT.vt();return iT.Ln(o,e,n,a*t),this._getCoordinateForViewplaneNormal(o,n)}_getIndexOfCoordinatesForViewplaneNormal(e){let t=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])];return t.indexOf(Math.max(...t))}_getCoordinateForViewplaneNormal(e,t){return e[this._getIndexOfCoordinatesForViewplaneNormal(t)]}}function Ee(e,t={}){let{area:n,mean:i,max:a,stdDev:o,areaUnit:r,modalityUnit:l}=e.cachedStats.statistics;if(void 0===i)return;let s=[];return s.push(`Area: ${aD.A(n)} ${r}`),s.push(`Mean: ${aD.A(i)} ${l}`),s.push(`Max: ${aD.A(a)} ${l}`),s.push(`Std Dev: ${aD.A(o)} ${l}`),s}_6.toolName="CircleROIStartEndThreshold";let Et=_6;var En=n(30203),Ei={Corners:{TOP_LEFT:"TOP_LEFT",TOP_RIGHT:"TOP_RIGHT",BOTTOM_LEFT:"BOTTOM_LEFT",BOTTOM_RIGHT:"BOTTOM_RIGHT"}};let{vtkErrorMacro:Ea}=Ix.m,{Corners:Eo}=Ei,Er={viewportCorner:Ei.Corners.BOTTOM_LEFT,viewportSize:.2,minPixelSize:50,maxPixelSize:200,parentRenderer:null,interactiveRenderer:!1};function El(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Er,n),Ix.m.obj(e,t),Ix.m.get(e,t,["enabled","viewportCorner","viewportSize","interactiveRenderer"]),Ix.m.setGet(e,t,["_interactor","minPixelSize","maxPixelSize","parentRenderer"]),Ix.m.get(e,t,["actor"]),Ix.m.moveToProtected(e,t,["interactor"]),function(e,t){t.classHierarchy.push("vtkOrientationMarkerWidget");let n={...e},i=[],a=En.Ay.newInstance(),o=new ResizeObserver(t=>{e.updateViewport()}),r=null,l=null,s=null,d=null,h=null;function c(){t._interactor.isAnimating()||e.updateMarkerOrientation()}t._onParentRendererChanged=()=>e.updateViewport(),e.computeViewport=()=>{let e=t.parentRenderer||t._interactor.getCurrentRenderer(),[n,i,a,o]=e.getViewport(),r=t._interactor.getView(),l=r.getSize(),[s,d]=r.getViewportSize(e),h=Math.min(s,d),c=t.viewportSize*h,u=(c=Math.max(Math.min(t.minPixelSize,h),Math.min(t.maxPixelSize,c)))/l[0],g=c/l[1];switch(t.viewportCorner){case Eo.TOP_LEFT:return[n,o-g,n+u,o];case Eo.TOP_RIGHT:return[a-u,o-g,a,o];case Eo.BOTTOM_LEFT:return[n,i,n+u,i+g];case Eo.BOTTOM_RIGHT:return[a-u,i,a,i+g];default:return Ea("Invalid widget corner"),null}},e.updateViewport=()=>{t.enabled&&(a.setViewport(...e.computeViewport()),t._interactor.render())},e.updateMarkerOrientation=()=>{let e=(t.parentRenderer||t._interactor.getCurrentRenderer()).getActiveCamera();if(!e)return;let n=e.getReferenceByName("position"),o=e.getReferenceByName("focalPoint"),r=e.getReferenceByName("viewUp");if(i[0]!==n[0]||i[1]!==n[1]||i[2]!==n[2]||i[3]!==o[0]||i[4]!==o[1]||i[5]!==o[2]||i[6]!==r[0]||i[7]!==r[1]||i[8]!==r[2]){i[0]=n[0],i[1]=n[1],i[2]=n[2],i[3]=o[0],i[4]=o[1],i[5]=o[2],i[6]=r[0],i[7]=r[1],i[8]=r[2];let e=a.getActiveCamera();e.setPosition(n[0],n[1],n[2]),e.setFocalPoint(o[0],o[1],o[2]),e.setViewUp(r[0],r[1],r[2]),a.resetCamera()}},e.setEnabled=n=>{if(n){if(t.enabled)return;if(!t.actor)return void Ea("Must set actor before enabling orientation marker.");if(!t._interactor)return void Ea("Must set interactor before enabling orientation marker.");let n=t.parentRenderer||t._interactor.getCurrentRenderer(),i=n.getRenderWindow();i.addRenderer(a),2>i.getNumberOfLayers()&&i.setNumberOfLayers(2),a.setLayer(i.getNumberOfLayers()-1),a.setInteractive(t.interactiveRenderer),a.addViewProp(t.actor),t.actor.setVisibility(!0),r=n.onEvent(e=>{"ActiveCameraEvent"===e.type&&(l&&l.unsubscribe(),l=e.camera.onModified(c))}),l=n.getActiveCamera().onModified(c),s=t._interactor.onAnimation(e.updateMarkerOrientation),d=t._interactor.onEndAnimation(e.updateMarkerOrientation),o.observe(t._interactor.getView().getCanvas()),e.updateViewport(),e.updateMarkerOrientation(),t.enabled=!0}else{if(!t.enabled)return;t.enabled=!1,o.disconnect(),r.unsubscribe(),r=null,l.unsubscribe(),l=null,s.unsubscribe(),s=null,d.unsubscribe(),d=null,t.actor.setVisibility(!1),a.removeViewProp(t.actor);let e=t._interactor?.findPokedRenderer()?.getRenderWindow();e&&e.removeRenderer(a)}e.modified()},e.setViewportCorner=n=>{n!==t.viewportCorner&&(t.viewportCorner=n,e.updateViewport())},e.setViewportSize=n=>{let i=Math.min(1,Math.max(0,n));i!==t.viewportSize&&(t.viewportSize=i,e.updateViewport())},e.setActor=n=>{let i=t.enabled;e.setEnabled(!1),t.actor=n,e.setEnabled(i)},e.getRenderer=()=>a,e.delete=()=>{n.delete(),h&&(h.unsubscribe(),h=null),r&&(r.unsubscribe(),r=null),l&&(l.unsubscribe(),l=null),s&&(s.unsubscribe(),s=null),d&&(d.unsubscribe(),d=null),o.disconnect()},h=e.onModified(e.updateViewport)}(e,t)}var Es={newInstance:Ix.m.newInstance(El,"vtkOrientationMarkerWidget"),extend:El,...Ei},Ed=n(6016),Eh=n(74797),Ec={canvasToImageData:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0,0],[n,i,a,o]=t,r=e.getContext("2d").getImageData(n,i,a||e.width,o||e.height),l=nk.Ay.newInstance({type:"vtkImageData"});l.setOrigin(0,0,0),l.setSpacing(1,1,1),l.setExtent(0,(a||e.width)-1,0,(o||e.height)-1,0,0);let s=nR.Ay.newInstance({numberOfComponents:4,values:new Uint8Array(r.data.buffer)});return s.setName("scalars"),l.getPointData().setScalars(s),l}};let Eu={xPlus:0,xMinus:1,yPlus:2,yMinus:3,zPlus:4,zMinus:5},Eg={defaultStyle:{text:"",faceColor:"white",faceRotation:0,fontFamily:"Arial",fontColor:"black",fontStyle:"normal",fontSizeScale:e=>e/1.8,edgeThickness:.1,edgeColor:"black",resolution:200}};var Em={newInstance:Ix.m.newInstance(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Eg,n),ia.Ay.extend(e,t,n),Ix.m.get(e,t,["defaultStyle","xPlusFaceProperty","xMinusFaceProperty","yPlusFaceProperty","yMinusFaceProperty","zPlusFaceProperty","zMinusFaceProperty"]),function(e,t){t.classHierarchy.push("vtkAnnotatedCubeActor"),t.xPlusFaceProperty={...t.xPlusFaceProperty},t.xMinusFaceProperty={...t.xMinusFaceProperty},t.yPlusFaceProperty={...t.yPlusFaceProperty},t.yMinusFaceProperty={...t.yMinusFaceProperty},t.zPlusFaceProperty={...t.zPlusFaceProperty},t.zMinusFaceProperty={...t.zMinusFaceProperty};let n=null,i=document.createElement("canvas"),a=ii.Ay.newInstance(),o=Ed.Ay.newInstance();function r(n){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;a&&Object.assign(t[`${n}FaceProperty`],a);let r={...t.defaultStyle,...t[`${n}FaceProperty`]};i.width=r.resolution,i.height=r.resolution;let l=i.getContext("2d");l.fillStyle=r.faceColor,l.fillRect(0,0,i.width,i.height),r.edgeThickness>0&&(l.strokeStyle=r.edgeColor,l.lineWidth=r.edgeThickness*i.width,l.strokeRect(0,0,i.width,i.height)),l.save(),l.translate(0,i.height),l.scale(1,-1),l.translate(i.width/2,i.height/2),l.rotate(-Math.PI*(r.faceRotation/180));let s=r.fontSizeScale(r.resolution);l.fillStyle=r.fontColor,l.textAlign="center",l.textBaseline="middle",l.font=`${r.fontStyle} ${s}px "${r.fontFamily}
312"`,l.fillText(r.text,0,0),l.restore();let d=Ec.canvasToImageData(i);o.setInputData(d,Eu[n]),e.modified()}function l(){n=Eh.Ay.newInstance({generate3DTextureCoordinates:!0}),a.setInputConnection(n.getOutputPort()),r("xPlus"),r("xMinus"),r("yPlus"),r("yMinus"),r("zPlus"),r("zMinus")}o.setInterpolate(!0),e.setDefaultStyle=e=>{t.defaultStyle={...t.defaultStyle,...e},l()},e.setXPlusFaceProperty=e=>r("xPlus",e),e.setXMinusFaceProperty=e=>r("xMinus",e),e.setYPlusFaceProperty=e=>r("yPlus",e),e.setYMinusFaceProperty=e=>r("yMinus",e),e.setZPlusFaceProperty=e=>r("zPlus",e),e.setZMinusFaceProperty=e=>r("zMinus",e),l(),a.setInputConnection(n.getOutputPort()),e.setMapper(a),e.addTexture(o)}(e,t)},"vtkAnnotatedCubeActor")},Ep=n(8554),Ef=n(96467);let{vtkErrorMacro:Ev}=Ix.m;function EI(e,t,n,i){let a;e.set((a=0,t.map((e,t)=>t===a?(a+=e+1,e):e+n)),i)}let EC={outputPointsPrecision:Ep.kP.DEFAULT};var E_={newInstance:Ix.m.newInstance(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,EC,n),Ix.m.setGet(e,t,["outputPointsPrecision"]),Ix.m.obj(e,t),Ix.m.algo(e,t,1,1),t.classHierarchy.push("vtkAppendPolyData"),e.requestData=(n,i)=>{let a=e.getNumberOfInputPorts();if(!a)return void Ev("No input specified.");if(1===a){i[0]=n[0];return}let o=i[0]&&n[0]!==i[0]?i[0].initialize():io.Ay.newInstance(),r=0,l=0,s=1,d=1,h=0,c=0,u=0,g=0,m=!0,p=!0,f=!0;for(let e=0;e<a;e++){let t=n[e];if(!t)continue;let i=t.getPoints().getNumberOfPoints();r+=i,h+=t.getVerts().getNumberOfValues(),c+=t.getLines().getNumberOfValues(),u+=t.getStrips().getNumberOfValues(),g+=t.getPolys().getNumberOfValues(),i&&(d&&(d=0,l=t.getPoints().getDataType()),l=l>(s=t.getPoints().getDataType())?l:s);let a=t.getPointData();a?(m=m&&null!==a.getNormals(),p=p&&null!==a.getTCoords(),f=f&&null!==a.getScalars()):(m=!1,p=!1,f=!1)}t.outputPointsPrecision===Ep.kP.SINGLE?l=Ef.JA.FLOAT:t.outputPointsPrecision===Ep.kP.DOUBLE&&(l=Ef.JA.DOUBLE);let v=iH.Ay.newInstance({dataType:l});v.setNumberOfPoints(r);let I=v.getData(),C=new Uint32Array(h),_=new Uint32Array(c),E=new Uint32Array(u),w=new Uint32Array(g),A=null,S=null,y=null,b=n[a-1];if(m){let e=b.getPointData().getNormals();A=nR.Ay.newInstance({numberOfComponents:3,numberOfTuples:r,size:3*r,dataType:e.getDataType(),name:e.getName()})}if(p){let e=b.getPointData().getTCoords();S=nR.Ay.newInstance({numberOfComponents:2,numberOfTuples:r,size:2*r,dataType:e.getDataType(),name:e.getName()})}if(f){let e=b.getPointData().getScalars();y=nR.Ay.newInstance({numberOfComponents:e.getNumberOfComponents(),numberOfTuples:r,size:r*e.getNumberOfComponents(),dataType:e.getDataType(),name:e.getName()})}r=0,h=0,c=0,u=0,g=0;for(let e=0;e<a;e++){let t=n[e];I.set(t.getPoints().getData(),3*r),EI(C,t.getVerts().getData(),r,h),h+=t.getVerts().getNumberOfValues(),EI(_,t.getLines().getData(),r,c),c+=t.getLines().getNumberOfValues(),EI(E,t.getStrips().getData(),r,u),u+=t.getStrips().getNumberOfValues(),EI(w,t.getPolys().getData(),r,g),g+=t.getPolys().getNumberOfValues();let i=t.getPointData();if(m){let e=i.getNormals();A.getData().set(e.getData(),3*r)}if(p){let e=i.getTCoords();S.getData().set(e.getData(),2*r)}if(f){let e=i.getScalars();y.getData().set(e.getData(),r*y.getNumberOfComponents())}r+=t.getPoints().getNumberOfPoints()}o.setPoints(v),o.getVerts().setData(C),o.getLines().setData(_),o.getStrips().setData(E),o.getPolys().setData(w),A&&o.getPointData().setNormals(A),S&&o.getPointData().setTCoords(S),y&&o.getPointData().setScalars(y),i[0]=o}},"vtkAppendPolyData")};let EE={height:1,radius:.5,resolution:6,center:[0,0,0],direction:[1,0,0],capping:!0,pointType:"Float64Array"};var Ew={newInstance:Ix.m.newInstance(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,EE,n),Ix.m.obj(e,t),Ix.m.setGet(e,t,["height","radius","resolution","capping"]),Ix.m.setGetArray(e,t,["center","direction"],3),Ix.m.algo(e,t,0,1),t.classHierarchy.push("vtkConeSource"),e.requestData=(e,n)=>{let i=2*Math.PI/t.resolution,a=-t.height/2,o=t.resolution+1,r=4*t.resolution+1+t.resolution,l=0,s=Ix.m.newTypedArray(t.pointType,3*o),d=0,h=new Uint32Array(r);s[0]=t.height/2,s[1]=0,s[2]=0,t.capping&&(h[d++]=t.resolution);for(let e=0;e<t.resolution;e++)s[3*++l+0]=a,s[3*l+1]=t.radius*Math.cos(e*i),s[3*l+2]=t.radius*Math.sin(e*i),t.capping&&(h[t.resolution-d+++1]=l);for(let e=0;e<t.resolution;e++)h[d++]=3,h[d++]=0,h[d++]=e+1,h[d++]=e+2>t.resolution?1:e+2;Cm.A.buildFromRadian().translate(...t.center).rotateFromDirections([1,0,0],t.direction).apply(s);let c=n[0]?.initialize()||io.Ay.newInstance();c.getPoints().setData(s,3),c.getPolys().setData(h,1),n[0]=c}},"vtkConeSource")};let EA={height:1,initAngle:0,radius:1,resolution:6,center:[0,0,0],direction:[0,1,0],capping:!0,pointType:"Float64Array"};var ES={newInstance:Ix.m.newInstance(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,EA,n),Ix.m.obj(e,t),Ix.m.setGet(e,t,["height","initAngle","otherRadius","radius","resolution","capping"]),Ix.m.setGetArray(e,t,["center","direction"],3),Ix.m.algo(e,t,0,1),t.classHierarchy.push("vtkCylinderSource"),e.requestData=(e,n)=>{let i=2*Math.PI/t.resolution,a=2*t.resolution,o=5*t.resolution;t.capping&&(a=4*t.resolution,o=7*t.resolution+2);let r=Ix.m.newTypedArray(t.pointType,3*a),l=0,s=new Uint32Array(o),d=new Float32Array(3*a),h=nR.Ay.newInstance({numberOfComponents:3,values:d,name:"Normals"}),c=new Float32Array(2*a),u=nR.Ay.newInstance({numberOfComponents:2,values:c,name:"TCoords"}),g=[0,0,0],m=[0,0,0],p=[0,0,0],f=[0,0,0],v=[0,0],I=[0,0],C=null==t.otherRadius?t.radius:t.otherRadius;for(let e=0;e<t.resolution;e++){g[0]=Math.cos(e*i+t.initAngle),m[0]=g[0],p[0]=t.radius*g[0]+t.center[0],f[0]=p[0],v[0]=Math.abs(2*e/t.resolution-1),I[0]=v[0],p[1]=.5*t.height+t.center[1],f[1]=-.5*t.height+t.center[1],v[1]=0,I[1]=1,g[2]=-Math.sin(e*i+t.initAngle),m[2]=g[2],p[2]=C*g[2]+t.center[2],f[2]=p[2];let n=2*e;for(let e=0;e<3;
312e++)d[3*n+e]=g[e],d[(n+1)*3+e]=m[e],r[3*n+e]=p[e],r[(n+1)*3+e]=f[e],e<2&&(c[2*n+e]=v[e],c[(n+1)*2+e]=I[e])}for(let e=0;e<t.resolution;e++){s[l++]=4,s[l++]=2*e,s[l++]=2*e+1;let n=(2*e+3)%(2*t.resolution);s[l++]=n,s[l++]=n-1}if(t.capping){for(let e=0;e<t.resolution;e++){p[0]=t.radius*Math.cos(e*i+t.initAngle),f[0]=p[0],v[0]=p[0],I[0]=p[0],p[0]+=t.center[0],f[0]+=t.center[0],g[1]=1,m[1]=-1,p[1]=.5*t.height+t.center[1],f[1]=-.5*t.height+t.center[1],p[2]=-C*Math.sin(e*i+t.initAngle),f[2]=p[2],v[1]=p[2],I[1]=p[2],p[2]+=t.center[2],f[2]+=t.center[2];let n=2*t.resolution+e,a=3*t.resolution+t.resolution-e-1;for(let e=0;e<3;e++)d[3*n+e]=g[e],d[3*a+e]=m[e],r[3*n+e]=p[e],r[3*a+e]=f[e],e<2&&(c[2*n+e]=v[e],c[2*a+e]=I[e])}s[l++]=t.resolution;for(let e=0;e<t.resolution;e++)s[l++]=2*t.resolution+e;s[l++]=t.resolution;for(let e=0;e<t.resolution;e++)s[l++]=3*t.resolution+e}Cm.A.buildFromRadian().translate(...t.center).rotateFromDirections([0,1,0],t.direction).translate(...t.center.map(e=>-1*e)).apply(r);let _=n[0]?.initialize()||io.Ay.newInstance();_.getPoints().setData(r,3),_.getPolys().setData(s,1),_.getPointData().setNormals(h),_.getPointData().setTCoords(u),n[0]=_}},"vtkCylinderSource")};let Ey={tipResolution:6,tipRadius:.1,tipLength:.35,shaftResolution:6,shaftRadius:.03,invert:!1,direction:[1,0,0],pointType:"Float64Array"};var Eb={newInstance:Ix.m.newInstance(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ey,n),Ix.m.obj(e,t),Ix.m.setGet(e,t,["tipResolution","tipRadius","tipLength","shaftResolution","shaftRadius","invert"]),Ix.m.setGetArray(e,t,["direction"],3),Ix.m.algo(e,t,0,1),t.classHierarchy.push("vtkArrowSource"),e.requestData=(e,n)=>{let i=ES.newInstance({capping:!0});i.setResolution(t.shaftResolution),i.setRadius(t.shaftRadius),i.setHeight(1-t.tipLength),i.setCenter(0,(1-t.tipLength)*.5,0);let a=i.getOutputData(),o=a.getPoints().getData(),r=a.getPointData().getNormals().getData();Cm.A.buildFromDegree().rotateZ(-90).apply(o).apply(r);let l=Ew.newInstance();l.setResolution(t.tipResolution),l.setHeight(t.tipLength),l.setRadius(t.tipRadius);let s=l.getOutputData(),d=s.getPoints().getData();Cm.A.buildFromRadian().translate(1-.5*t.tipLength,0,0).apply(d);let h=E_.newInstance();h.setInputData(a),h.addInputData(s);let c=h.getOutputData(),u=c.getPoints().getData();Cm.A.buildFromRadian().translate(-.5+.5*t.tipLength,0,0).apply(u),t.invert?(Cm.A.buildFromRadian().rotateFromDirections([1,0,0],t.direction).scale(-1,-1,-1).apply(u),n[0]=c):(Cm.A.buildFromRadian().rotateFromDirections([1,0,0],t.direction).scale(1,1,1).apply(u),n[0]=h.getOutputData())}},"vtkArrowSource")};function ET(e){let t=e.getPoints().getBounds(),n=[-(.5*(t[0]+t[1])),-(.5*(t[2]+t[3])),-(.5*(t[4]+t[5]))];Cm.A.buildFromDegree().translate(...n).apply(e.getPoints().getData())}function EM(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=e.getPoints().getBounds(),a=[0,0,0];n?a[t]=-i[2*t+1]:a[t]=-i[2*t],Cm.A.buildFromDegree().translate(...a).apply(e.getPoints().getData())}function ED(e,t,n,i){let a=e.getPoints().getData().length,o=new Uint8ClampedArray(a),r=0;for(;r<a;)o[r++]=t,o[r++]=n,o[r++]=i;e.getPointData().setScalars(nR.Ay.newInstance({name:"color",numberOfComponents:3,values:o}))}var EO={newInstance:Ix.m.newInstance(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};ia.Ay.extend(e,t,{config:{recenter:!0,tipResolution:60,tipRadius:.1,tipLength:.2,shaftResolution:60,shaftRadius:.03,invert:!1,...n?.config},xConfig:{color:[255,0,0],invert:!1,...n?.xConfig},yConfig:{color:[255,255,0],invert:!1,...n?.yConfig},zConfig:{color:[0,128,0],invert:!1,...n?.zConfig}}),Ix.m.setGet(e,t,["config","xConfig","yConfig","zConfig"]),t.classHierarchy.push("vtkAxesActor");let i=ii.Ay.newInstance();e.setMapper(i),e.update=()=>{let e={...t.config,...t.xConfig},n=Eb.newInstance({direction:[1,0,0],...e}).getOutputData();t.config.recenter?ET(n):EM(n,0,e.invert),ED(n,...e.color),e={...t.config,...t.yConfig};let a=Eb.newInstance({direction:[0,1,0],...e}).getOutputData();t.config.recenter?ET(a):EM(a,1,e.invert),ED(a,...e.color),e={...t.config,...t.zConfig};let o=Eb.newInstance({direction:[0,0,1],...e}).getOutputData();t.config.recenter?ET(o):EM(o,2,e.invert),ED(o,...e.color);let r=E_.newInstance();r.setInputData(n),r.addInputData(a),r.addInputData(o),i.setInputConnection(r.getOutputPort())}
312,e.update();let a=Ix.m.debounce(e.update,0);e.setXAxisColor=t=>e.setXConfig({...e.getXConfig(),color:t}),e.setYAxisColor=t=>e.setYConfig({...e.getYConfig(),color:t}),e.setZAxisColor=t=>e.setZConfig({...e.getZConfig(),color:t}),e.getXAxisColor=()=>t.getXConfig().color,e.getYAxisColor=()=>t.getYConfig().color,e.getZAxisColor=()=>t.getZConfig().color,t._onConfigChanged=a,t._onXConfigChanged=a,t._onYConfigChanged=a,t._onZConfigChanged=a},"vtkAxesActor")},Ex=n(16291);!function(e){e[e.ANNOTATED_CUBE=1]="ANNOTATED_CUBE",e[e.AXES=2]="AXES",e[e.CUSTOM=3]="CUSTOM"}(P||(P={}));class EP extends lH{static{this.CUBE=1}static{this.AXIS=2}static{this.VTPFILE=3}static{this.OVERLAY_MARKER_TYPES=P}constructor(e={},t={configuration:{orientationWidget:{enabled:!0,viewportCorner:Es.Corners.BOTTOM_RIGHT,viewportSize:.15,minPixelSize:100,maxPixelSize:300},overlayMarkerType:EP.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE,overlayConfiguration:{[EP.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE]:{faceProperties:{xPlus:{text:"L",faceColor:"#ffff00",faceRotation:90},xMinus:{text:"R",faceColor:"#ffff00",faceRotation:270},yPlus:{text:"P",faceColor:"#00ffff",fontColor:"white",faceRotation:180},yMinus:{text:"A",faceColor:"#00ffff",fontColor:"white"},zPlus:{text:"S"},zMinus:{text:"I"}},defaultStyle:{fontStyle:"bold",fontFamily:"Arial",fontColor:"black",fontSizeScale:e=>e/2,faceColor:"#0000ff",edgeThickness:.1,edgeColor:"black",resolution:400}},[EP.OVERLAY_MARKER_TYPES.AXES]:{},[EP.OVERLAY_MARKER_TYPES.CUSTOM]:{polyDataURL:"https://raw.githubusercontent.com/Slicer/Slicer/80ad0a04dacf134754459557bf2638c63f3d1d1b/Base/Logic/Resources/OrientationMarkers/Human.vtp"}}}}){super(e,t),this._resizeObservers=new Map,this.onSetToolEnabled=()=>{this.initViewports(),this._subscribeToViewportEvents()},this.onSetToolActive=()=>{this.initViewports(),this._subscribeToViewportEvents()},this.onSetToolDisabled=()=>{this.cleanUpData(),this._unsubscribeToViewportNewVolumeSet()},this._getViewportsInfo=()=>s3(this.toolGroupId).viewportsInfo,this.resize=e=>{let t=this.orientationMarkers[e];if(!t)return;let{orientationWidget:n}=t;n.updateViewport()},this.orientationMarkers={},this.updatingOrientationMarker={}}_unsubscribeToViewportNewVolumeSet(){let e=()=>{this._getViewportsInfo().forEach(({viewportId:e,renderingEngineId:t})=>{let{viewport:n}=(0,ej.b1)(e,t),{element:i}=n;i.removeEventListener(e$.A.VOLUME_VIEWPORT_NEW_VOLUME,this.initViewports.bind(this)),this._resizeObservers.get(e).unobserve(i)})};ez.A.removeEventListener(eK.TOOLGROUP_VIEWPORT_ADDED,t=>{t.detail.toolGroupId===this.toolGroupId&&(e(),this.initViewports())})}_subscribeToViewportEvents(){let e=()=>{this._getViewportsInfo().forEach(({viewportId:e,renderingEngineId:t})=>{let{viewport:n}=(0,ej.b1)(e,t),{element:i}=n;this.initViewports(),i.addEventListener(e$.A.VOLUME_VIEWPORT_NEW_VOLUME,this.initViewports.bind(this));let a=new ResizeObserver(()=>{setTimeout(()=>{let n=(0,ej.b1)(e,t);if(!n)return;let{viewport:i}=n;this.resize(e),i.render()},100)});a.observe(i),this._resizeObservers.set(e,a)})};e(),ez.A.addEventListener(eK.TOOLGROUP_VIEWPORT_ADDED,t=>{t.detail.toolGroupId===this.toolGroupId&&(e(),this.initViewports())})}cleanUpData(){(0,nG.qO)()[0].getViewports().forEach(e=>{let t=this.orientationMarkers[e.id];if(!t)return;let{actor:n,orientationWidget:i}=t;i?.setEnabled(!1),i?.delete(),n?.delete(),e.getRenderingEngine().getOffscreenMultiRenderWindow(e.id).getRenderWindow().render(),e.getRenderingEngine().render(),delete this.orientationMarkers[e.id]})}initViewports(){let e=(0,nG.qO)()[0];if(!e)return;let t=e.getViewports();(t=oD(t,this.getToolName())).forEach(e=>{let t=e.getWidget(this.getToolName());(!t||t.isDeleted())&&this.addAxisActorInViewport(e)})}async addAxisActorInViewport(e){let t=e.id;if(!this.updatingOrientationMarker[t]){let n;this.updatingOrientationMarker[t]=!0;let i=this.configuration.overlayMarkerType,a=this.configuration.overlayConfiguration[i];if(this.orientationMarkers[t]){let{actor:n,orientationWidget:i}=this.orientationMarkers[t];e.getRenderer().removeActor(n),i.setEnabled(!1)}1===i?n=this.createAnnotationCube(a):2===i?n=EO.newInstance():3===i&&(n=await this.createCustomActor());let o=e.getRenderer(),r=e.getRenderingEngine().getOffscreenMultiRenderWindow(t).getRenderWindow(),{enabled:l,viewportCorner:s,viewportSize:d,minPixelSize:h,maxPixelSize:c}=this.configuration.orientationWidget,u=Es.newInstance({actor:n,interactor:r.getInteractor(),parentRenderer:o});u.setEnabled(l),u.setViewportCorner(s),u.setViewportSize(d),u.setMinPixelSize(h),u.setMaxPixelSize(c),u.updateMarkerOrientation(),this.orientationMarkers[t]={orientationWidget:u,actor:n},e.addWidget(this.getToolName(),u),r.render(),e.getRenderingEngine().render(),this.updatingOrientationMarker[t]=!1}}async createCustomActor(){let e=this.configuration.overlayConfiguration[P.CUSTOM].pol
312yDataURL,t=await fetch(e),n=await t.arrayBuffer(),i=Ex.Ay.newInstance();i.parseAsArrayBuffer(n),i.update();let a=io.Ay.newInstance();a.shallowCopy(i.getOutputData()),a.getPointData().setActiveScalars("Color");let o=ii.Ay.newInstance();o.setInputData(a),o.setColorModeToDirectScalars();let r=ia.Ay.newInstance();return r.setMapper(o),r.rotateZ(180),r}createAnnotationCube(e){let t=Em.newInstance();return t.setDefaultStyle({...e.defaultStyle}),t.setXPlusFaceProperty({...e.faceProperties.xPlus}),t.setXMinusFaceProperty({...e.faceProperties.xMinus}),t.setYPlusFaceProperty({...e.faceProperties.yPlus}),t.setYMinusFaceProperty({...e.faceProperties.yMinus}),t.setZPlusFaceProperty({...e.faceProperties.zPlus}),t.setZMinusFaceProperty({...e.faceProperties.zMinus}),t}async createAnnotatedCubeActor(){let e=Em.newInstance(),{faceProperties:t,defaultStyle:n}=this.configuration.annotatedCube;return e.setDefaultStyle(n),Object.keys(t).forEach(n=>{e[`set${n.charAt(0).toUpperCase()+n.slice(1)}FaceProperty`](t[n])}),e}}EP.toolName="OrientationMarker";let EL=EP;class EN extends lH{static{this.SelectMode={Inside:"Inside",Border:"Border"}}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{hoverTimeout:100,mode:EN.SelectMode.Border,searchRadius:6}}){super(e,t),this.mouseMoveCallback=e=>{if(this.mode===e1.Active)return this.hoverTimer&&clearTimeout(this.hoverTimer),this.hoverTimer=setTimeout(()=>{this._setActiveSegment(e),this.hoverTimer=null},this.configuration.hoverTimeout),!0},this.onSetToolEnabled=()=>{this.onSetToolActive()},this.onSetToolActive=()=>{this.hoverTimer=null},this.onSetToolDisabled=()=>{this.hoverTimer=null},this.hoverTimer=null}_setActiveSegment(e={}){if(e0.isInteractingWithTool)return;let{element:t,currentPoints:n}=e.detail,i=n.world,a=(0,ej.Ay)(t);if(!a)return;let{viewport:o}=a,r=ag(o.id);r&&this._setActiveSegmentForType(r,i,o)}_setActiveSegmentForType(e,t,n){let i;if(!n.getImageData())return;let{segmentationId:a,representationData:o}=e;if(this.configuration.mode===EN.SelectMode.Inside?i=mU(a,t,{viewport:n}):o.Labelmap?i=mV(a,t,{viewport:n,searchRadius:this.configuration.searchRadius}):o.Contour?i=mG(a):o.Surface,!i||0===i)return;m9(a,i);let r=n.getRenderingEngine().getViewports().map(e=>e.id);nX(a),oX(r)}}EN.toolName="SegmentSelectTool";let ER=EN;class Ek extends lH{constructor(e={data:{handles:{textBox:{worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}}}},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{hoverTimeout:100,searchRadius:6,color:null,background:null}}){super(e,t),this.mouseMoveCallback=e=>(this.hoverTimer&&clearTimeout(this.hoverTimer),this.hoverTimer=setTimeout(()=>{this._setHoveredSegment(e),this.hoverTimer=null},this.configuration.hoverTimeout),!0),this.onSetToolEnabled=()=>{this.onSetToolActive()},this.onSetToolActive=()=>{this.hoverTimer=null},this.onSetToolDisabled=()=>{this.hoverTimer=null},this.data=e.data??{handles:{textBox:{worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}}},this.hoverTimer=null}_setHoveredSegment(e={}){if(e0.isInteractingWithTool)return;let{element:t,currentPoints:n}=e.detail,i=n.world,a=(0,ej.Ay)(t);if(!a)return;let{viewport:o}=a,r=ag(o.id);r&&this._setHoveredSegmentForType(r,i,o)}_setHoveredSegmentForType(e,t,n){if(!n.getImageData())return;let{segmentationId:i}=e,a=mU(i,t,{viewport:n}),o=e.segments[a],r=this.configuration.color??ds(n.id,i,a),l=o?.label,s=n.worldToCanvas(t);if(this._editData={hoveredSegmentIndex:a,hoveredSegmentLabel:l,canvasCoordinates:s,color:r},!a||0===a)return;let d=n.getRenderingEngine().getViewports().map(e=>e.id);nX(i),oX(d)}renderAnnotation(e,t){if(!this._editData)return;let{viewport:n}=e,{hoveredSegmentIndex:i,hoveredSegmentLabel:a,canvasCoordinates:o,color:r}=this._editData;if(!i)return;let l=lC(t,"segmentSelectLabelAnnotation","segmentSelectLabelTextBox",[a??"(unnamed segment)"],[o[0]+-15,o[1]+-15],{color:`rgba(${r[0]}, ${r[1]}, ${r[2]}, ${r[3]})`,background:this.configuration.background??void 0}),s=o[0],d=o[1],{width:h,height:c}=l;this.data.handles.textBox.worldBoundingBox={topLeft:n.canvasToWorld([s,d]),topRight:n.canvasToWorld([s+h,d]),bottomLeft:n.canvasToWorld([s,d+c]),bottomRight:n.canvasToWorld([s+h,d+c])}}}Ek.toolName="SegmentLabelTool";let EU=Ek,{transformWorldToIndex:EV,isEqual:EF}=i9;class EG extends lH{constructor(e={}
312,t={supportedInteractionTypes:["Mouse","Touch"]}){super(e,t),this.preMouseDownCallback=e=>{let t,n,i,a,{currentPoints:o,element:r}=e.detail,l=o.world,{viewport:s}=(0,ej.Ay)(r),{viewPlaneNormal:d}=s.getCamera(),h=ag(s.id);if(!h)throw Error("No active segmentation detected, create one before using scissors tool");let{segmentationId:c}=h,u=af(c),g=dt(c),{representationData:m}=n9(c);if(this.doneEditMemo(),s instanceof nU.A){let{volumeId:e}=m[nB.Labelmap],o=nV.Ay.getVolume(e);({dimensions:t,direction:n}=o),a=o.voxelManager,i=EV(o.imageData,l)}else{let e=at(s.id,c);if(!e)throw Error("No active segmentation imageId detected, create one before using scissors tool");let{imageData:o}=s.getImageData();t=o.getDimensions(),n=o.getDirection(),a=nV.Ay.getImage(e).voxelManager,i=EV(o,l)}let p=this.getFixedDimension(d,n);if(void 0===p)return void console.warn("Oblique paint fill not yet supported");let{floodFillGetter:f,getLabelValue:v,getScalarDataPositionFromPlane:I,inPlaneSeedPoint:C,fixedDimensionValue:_}=this.generateHelpers(a,t,i,p);if(i[0]<0||i[0]>=t[0]||i[1]<0||i[1]>=t[1]||i[2]<0||i[2]>=t[2])return;let E=v(i[0],i[1],i[2]);if(g.includes(E))return;let w=gf(f,C),{flooded:A}=w;return A.forEach(e=>{let t=I(e[0],e[1]);a.setAtIndex(t,u)}),aa(c,this.getFramesModified(p,_,w)),!0},this.getFramesModified=(e,t,n)=>{let{flooded:i}=n;if(2===e)return[t];let a=1/0,o=-1/0;for(let e=0;e<i.length;e++){let t=i[e][1];t<a&&(a=t),t>o&&(o=t)}let r=[];for(let e=a;e<=o;e++)r.push(e);return r},this.generateHelpers=(e,t,n,i=2)=>{let a,o;switch(i){case 0:a=n[0],o=[n[1],n[2]];break;case 1:a=n[1],o=[n[0],n[2]];break;case 2:a=n[2],o=[n[0],n[1]];break;default:throw Error(`Invalid fixedDimension: ${i}`)}let r=(t,n,i)=>e.getAtIJK(t,n,i),l=this.generateFloodFillGetter(t,i,a,r);return{getScalarDataPositionFromPlane:this.generateGetScalarDataPositionFromPlane((t,n,i)=>e.toIndex([t,n,i]),i,a),getLabelValue:r,floodFillGetter:l,inPlaneSeedPoint:o,fixedDimensionValue:a}},this.generateFloodFillGetter=(e,t,n,i)=>{let a;switch(t){case 0:a=(t,a)=>{if(!(t>=e[1])&&!(t<0)&&!(a>=e[2])&&!(a<0))return i(n,t,a)};break;case 1:a=(t,a)=>{if(!(t>=e[0])&&!(t<0)&&!(a>=e[2])&&!(a<0))return i(t,n,a)};break;case 2:a=(t,a)=>{if(!(t>=e[0])&&!(t<0)&&!(a>=e[1])&&!(a<0))return i(t,a,n)};break;default:throw Error(`Invalid fixedDimension: ${t}`)}return a},this.generateGetScalarDataPositionFromPlane=(e,t,n)=>{let i;switch(t){case 0:i=(t,i)=>e(n,t,i);break;case 1:i=(t,i)=>e(t,n,i);break;case 2:i=(t,i)=>e(t,i,n);break;default:throw Error(`Invalid fixedDimension: ${t}`)}return i}}getFixedDimension(e,t){let n=t.slice(0,3),i=t.slice(3,6),a=t.slice(6,9),o=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])];return EF(o,[Math.abs(n[0]),Math.abs(n[1]),Math.abs(n[2])])?0:EF(o,[Math.abs(i[0]),Math.abs(i[1]),Math.abs(i[2])])?1:EF(o,[Math.abs(a[0]),Math.abs(a[1]),Math.abs(a[2])])?2:void 0}}EG.toolName="PaintFill";let EB=EG,EH={Z:[0,0,1]};class EW extends lH{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{direction:EH.Z,rotateIncrementDegrees:30}}){super(e,t)}mouseWheelCallback(e){let{element:t,wheel:n}=e.detail,{viewport:i}=(0,ej.Ay)(t),{direction:a,rotateIncrementDegrees:o}=this.configuration,{viewUp:r,position:l,focalPoint:s}=i.getCamera(),{direction:d}=n,[h,c,u]=s,[g,m,p]=a,f=o*Math.PI*d/180,v=[0,0,0],I=[0,0,0],C=[0,0,0],_=c2.identity(new Float32Array(16));c2.translate(_,_,[h,c,u]),c2.rotate(_,_,f,[g,m,p]),c2.translate(_,_,[-h,-c,-u]),iT.Z0(v,l,_),iT.Z0(I,s,_),c2.identity(_),c2.rotate(_,_,f,[g,m,p]),iT.Z0(C,r,_),i.setCamera({position:v,viewUp:C,focalPoint:I}),i.render()}}EW.toolName="VolumeRotateMouseWheel";let E$=EW;var Ez=n(67033),EX=n(56041);let{transformWorldToIndex:Ej,transformIndexToWorld:Eq}=i9;class EK extends lH{static{this.lastGrowCutCommand=null}constructor(e,t){super(e,ab.A({configuration:{positiveStdDevMultiplier:1.8,shrinkExpandIncrement:.1,islandRemoval:{enabled:!1}}},t))}async preMouseDownCallback(e){let{element:t,currentPoints:n}=e.detail,{world:i}=n,{viewport:a,renderingEngine:o}=(0,ej.Ay)(t),{viewUp:r}=a.getCamera(),{segmentationId:l,segmentIndex:s,labelmapVolumeId:d,referencedVolumeId:h}=await this.getLabelmapSegmentationData(a);if(!this._isOrthogonalView(a,h))throw Error("Oblique view is not supported yet");return this.growCutData={metadata:{...a.getViewReference({points:[i]}),viewUp:r},segmentation:{segmentationId:l,segmentIndex:s,labelmapVolumeId:d,referencedVolumeId:h},viewportId:a.id,renderingEngineId:o.id},e.preventDefault(),!0}shrink(){this._runLastCommand({shrinkExpandAmount:-this.configuration.shrinkExpandIncrement})}expand(){this._runLastCommand({shrinkExpandAmount:this.configuration.shrinkExpandIncrement})}refresh(){this._runLastCommand()}async getGrowCutLabelmap(e){throw Error("Not implemented")}async runGrowCut(){let{growCutData:e,configuration:t}=this,{segmentation:{segmentationId:n,segmentIndex:i,labelmapVolumeId:a}}=e,o=nV.Ay.getVolume(a),r=0,l=async({shrinkExpandAmount:a=0}={})=>{0!==a&&(this.seeds=null),r+=a;let l=Math.max(.1,t.positiveStdDevMultiplier+r),s=a<0?Math.max(1,30-3*Math.abs(r)):30+3*r,d={...e,options:{...e.options||{},positiveSeedValue:i,negativeSeedValue:255,positiveStdDevMultiplier:l,negativeSeedMargin:s}},h=await this.getGrowCutLabelmap(d),{isPartialVolume:c}=t;(c?this.applyPartialGrowCutLabelmap:this.applyGrowCutLabelmap)(n,i,o,h),this._removeIslands(d)};await l(),EK.lastGrowCutCommand=l,this.growCutData=null}applyPartialGrowCutLabelmap(e,t,n,i){let a=i.voxelManager.getCompleteScalarDataArray(),o=n.voxelManager,[r,l,s]=i.dimensions,[d,h]=n.dimensions,c=r*l,u=d*h;for(let e=0;e<s;e++)for(let s=0;s<l;s++){let l=[0,s,e],h=Eq(i.imageData,l),[g,m,p]=Ej(n.imageData,h),f=s*r+e*c,v=g+m*d+p*u;for(let e=0;e<r;e++){let n=a[f+e]===t?t:0;o.setAtIndex(v+e,n)}}aa(e)}applyGrowCutLabelmap(e,t,n,i){let a=n.voxelManager;i.voxelManager.forEach(({value:e,index:n})=>{e===t&&a.setAtIndex(n,e)}),aa(e)}_runLastCommand({shrinkExpandAmount:e=0}={}){let t=EK.lastGrowCutCommand;t&&t({shrinkExpandAmount:e})}async getLabelmapSegmentationData(e){let t=ag(e.id);if(!t)throw Error("No active segmentation found");let{segmentationId:n}=t,i=af(n),{representationData:a}=n9(n),o=a[nB.Labelmap],{volumeId:r,referencedVolumeId:l}=o;if(!r){let t=e.getImageIds();if(uV.p(t))r=uH(n).volumeId;else{let t=e.getCurrentImageId(),i=nV.Ay.getImage(t),a=p5.createAndCacheDerivedImage(t);l=this._createFakeVolume([i.imageId,a.imageId]).volumeId;
312let o=at(e.id,n),s=p5.createAndCacheDerivedImage(o);r=this._createFakeVolume([o,s.imageId]).volumeId}}if(!l){let{imageIds:e}=o,t=e.map(e=>nV.Ay.getImage(e).referencedImageId),n=nV.Ay.generateVolumeId(t),i=nV.Ay.getVolume(n);l=i?i.volumeId:(await nW.createAndCacheVolumeFromImagesSync(n,t)).volumeId}return{segmentationId:n,segmentIndex:i,labelmapVolumeId:r,referencedVolumeId:l}}_createFakeVolume(e){let t=nV.Ay.generateVolumeId(e),n=nV.Ay.getVolume(t);if(n)return n;let i=Ez.D(e,t),a=i.spacing;0===a[2]&&(a[2]=1);let o=new EX.A({volumeId:t,dataType:i.dataType,metadata:structuredClone(i.metadata),dimensions:i.dimensions,spacing:i.spacing,origin:i.origin,direction:i.direction,referencedVolumeId:i.referencedVolumeId,imageIds:i.imageIds,referencedImageIds:i.referencedImageIds});return nV.Ay.putVolumeSync(t,o),o}_isOrthogonalView(e,t){let n=nV.Ay.getVolume(t).imageData,i=e.getCamera(),{ijkVecColDir:a,ijkVecSliceDir:o}=mz.A(n,i);return[a,o].every(e=>aM.n4(Math.abs(e[0]),1)||aM.n4(Math.abs(e[1]),1)||aM.n4(Math.abs(e[2]),1))}getRemoveIslandData(e){}_removeIslands(e){let{islandRemoval:t}=this.configuration;if(!t.enabled)return;let{segmentation:{segmentIndex:n,labelmapVolumeId:i},renderingEngineId:a,viewportId:o}=e,r=nV.Ay.getVolume(i),l=this.getRemoveIslandData(e);if(!l)return;let[s,d]=r.dimensions,h=s*d,{worldIslandPoints:c=[],islandPointIndexes:u=[]}=l,g=[...l?.ijkIslandPoints??[]],m=(0,nG.lD)(a).getViewport(o),{voxelManager:p}=r,f=new gT;g=(g=g.concat(c.map(e=>Ej(r.imageData,e)))).concat(u.map(e=>{let t=Math.floor(e/s)%d,n=Math.floor(e/h);return[e%s,t,n]})),f.initialize(m,p,{points:g,previewSegmentIndex:n,segmentIndex:n}),f.floodFillSegmentIsland(),f.removeExternalIslands(),f.removeInternalIslands()}getSegmentStyle({segmentationId:e,viewportId:t,segmentIndex:n}){return dc({segmentationId:e,segmentIndex:n,viewportId:t})}}EK.toolName="GrowCutBaseTool";let EY=EK;class EZ extends EY{static{this.toolName="RegionSegmentPlus"}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{isPartialVolume:!1,positiveSeedVariance:.4,negativeSeedVariance:.9,subVolumePaddingPercentage:.1,islandRemoval:{enabled:!1}}}){super(e,t),this.mouseTimer=null,this.allowedToProceed=!1}mouseMoveCallback(e){if(this.mode!==e1.Active)return;let{currentPoints:t,element:n}=e.detail,{world:i}=t;n.style.cursor="default",null!==this.mouseTimer&&(window.clearTimeout(this.mouseTimer),this.mouseTimer=null),this.mouseTimer=window.setTimeout(()=>{this.onMouseStable(e,i,n)},this.configuration.mouseStabilityDelay||500)}async onMouseStable(e,t,n){let i;await super.preMouseDownCallback(e);let a=m2(nV.Ay.getVolume(this.growCutData.segmentation.referencedVolumeId),t,{})||{positiveSeedIndices:new Set,negativeSeedIndices:new Set},{positiveSeedIndices:o,negativeSeedIndices:r}=a;o.size/r.size>20||r.size<30?(i="not-allowed",this.allowedToProceed=!1):(i="copy",this.allowedToProceed=!0);let l=(0,ej.Ay)(n);n&&(n.style.cursor=i,requestAnimationFrame(()=>{n.style.cursor!==i&&(n.style.cursor=i)})),this.allowedToProceed&&(this.seeds=a),l&&l.viewport&&l.viewport.render()}async preMouseDownCallback(e){if(!this.allowedToProceed)return!1;let{currentPoints:t,element:n}=e.detail;(0,ej.Ay)(n)&&(n.style.cursor="wait",requestAnimationFrame(()=>{"wait"!==n.style.cursor&&(n.style.cursor="wait")}));let{world:i}=t;return await super.preMouseDownCallback(e),this.growCutData=ab.A(this.growCutData,{worldPoint:i,islandRemoval:{worldIslandPoints:[i]}}),this.growCutData.worldPoint=i,this.growCutData.islandRemoval={worldIslandPoints:[i]},await this.runGrowCut(),n&&(n.style.cursor="default"),!0}getRemoveIslandData(e){let{worldPoint:t}=e;return{worldIslandPoints:[t]}}async getGrowCutLabelmap(e){let{segmentation:{referencedVolumeId:t},worldPoint:n,options:i}=e,{subVolumePaddingPercentage:a}=this.configuration;return m5({referencedVolumeId:t,worldPosition:n,options:{...i,subVolumePaddingPercentage:a,seeds:this.seeds}})}}let EJ=EZ;class EQ extends EY{static{this.toolName="RegionSegment"}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{isPartialVolume:!0,positiveSeedVariance:.5,negativeSeedVariance:.9}}){super(e,t),this._dragCallback=e=>{let{element:t,currentPoints:n}=e.detail,{world:i}
312=n,{viewport:a}=(0,ej.Ay)(t);this.growCutData.circleBorderPoint=i,oX([a.id])},this._endCallback=async e=>{let{element:t}=e.detail,{viewport:n}=(0,ej.Ay)(t);this.runGrowCut(),this._deactivateDraw(t),this.growCutData=null,o1(t),oX([n.id])},this._deactivateDraw=e=>{e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback)}}async preMouseDownCallback(e){let{element:t,currentPoints:n}=e.detail,{world:i}=n,{viewport:a,renderingEngine:o}=(0,ej.Ay)(t);return await super.preMouseDownCallback(e),Object.assign(this.growCutData,{circleCenterPoint:i,circleBorderPoint:i}),this._activateDraw(t),o2(t),oX([a.id]),!0}async getGrowCutLabelmap(e){let{segmentation:{referencedVolumeId:t},renderingEngineId:n,viewportId:i,circleCenterPoint:a,circleBorderPoint:o,options:r}=e,{positiveSeedVariance:l,negativeSeedVariance:s,positiveStdDevMultiplier:d}=this.configuration,h=d??1,c=(r?.positiveStdDevMultiplier?Math.max(r.positiveStdDevMultiplier,.01):h)/h,u={...r,positiveSeedVariance:Math.max(.01,(l??1)*c),negativeSeedVariance:Math.max(.01,(s??1)*c)},g=(0,nG.lD)(n).getViewport(i),m=iT.Il(iT.jb(iT.vt(),a,o));return mK(t,{center:a,radius:m},g,u)}_activateDraw(e){e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback)}renderAnnotation(e,t){if(!this.growCutData)return;let{viewport:n}=e,{segmentation:i,circleCenterPoint:a,circleBorderPoint:o}=this.growCutData,r=n.worldToCanvas(a),l=n.worldToCanvas(o),s=aZ.jb(aZ.vt(),l,r),d=aZ.Il(s);if(aM.n4(d,0))return;let{color:h}=this.getSegmentStyle({segmentationId:i.segmentationId,segmentIndex:i.segmentIndex,viewportId:n.id});uo(t,"growcut","0",r,d,{color:h})}}let E0=EQ,E1=[-1/0,-995],E2=[0,1900],E5=[1e3,1900],{transformWorldToIndex:E3,transformIndexToWorld:E4}=i9;class E8 extends EY{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{isPartialVolume:!0,positivePixelRange:E2,negativePixelRange:E1,islandRemoval:{enabled:!0,islandPixelRange:E5}}}){super(e,t),this._dragCallback=e=>{let{element:t,currentPoints:n}=e.detail,{world:i}=n,a=(0,ej.Ay)(t),{viewport:o}=a,r=this._getHorizontalLineWorldPoints(a,i);this.growCutData.horizontalLines[1]=r,oX([o.id])},this._endCallback=async e=>{let{element:t}=e.detail,{viewport:n}=(0,ej.Ay)(t);await this.runGrowCut(),this._deactivateDraw(t),this.growCutData=null,o1(t),oX([n.id])},this._deactivateDraw=e=>{e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback)}}async preMouseDownCallback(e){let{element:t,currentPoints:n}=e.detail,{world:i}=n,a=(0,ej.Ay)(t),{viewport:o,renderingEngine:r}=a,l=this._getHorizontalLineWorldPoints(a,i);return await super.preMouseDownCallback(e),this.growCutData.horizontalLines=[l,l],this._activateDraw(t),o2(t),oX([o.id]),!0}renderAnnotation(e,t){if(!this.growCutData)return;let{segmentation:n,horizontalLines:i}=this.growCutData;if(2!==i.length)return;let{viewport:a}=e,{segmentationId:o,segmentIndex:r}=n,[l,s]=i,[d,h]=l,[c,u]=s,g=[d,h,u,c].map(e=>a.worldToCanvas(e)),{color:m,fillColor:p,lineWidth:f,fillOpacity:v,lineDash:I}=this.getSegmentStyle({segmentationId:o,segmentIndex:r,viewportId:a.id});lt(t,"growCutRect","0",g,{color:m,fillColor:p,fillOpacity:v,lineWidth:f,lineDash:I,closePath:!0})}async getGrowCutLabelmap(e){let{segmentation:{segmentIndex:t,referencedVolumeId:n},renderingEngineId:i,viewportId:a,horizontalLines:o}=e,r=(0,nG.lD)(i).getViewport(a),[l,s]=o,d=[l[0],l[1],s[1],s[0]],h=nV.Ay.getVolume(n),{topLeft:c,bottomRight:u}=this._getWorldBoundingBoxFromProjectedSquare(r,d),g=E3(h.imageData,c),m=E3(h.imageData,u),p=this.configuration;return mQ(n,{boundingBox:{ijkTopLeft:g,ijkBottomRight:m}},{positiveSeedValue:t,negativeSeedValue:255,negativePixelRange:p.negativePixelRange,positivePixelRange:p.positivePixelRange})}getRemoveIslandData(){let{segmentation:{segmentIndex:e,referencedVolumeId:t,labelmapVolumeId:n}}=this.growCutData,i=nV.Ay.getVolume(t),a=nV.Ay.getVolume(n),o=i.voxelManager.getCompleteScalarDataArray(),r=a.voxelManager.getCompleteScalarDataArray(),{islandPixelRange:l}=this.configuration.islandRemoval,s=[];for(let t=0,n=r.length;t<n;t++){if(r[t]!==e)continue;let n=o[t];n>=l[0]&&n<=l[1]&&s.push(t)}return{islandPointIndexes:s}}_activateDraw(e){e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback)}_projectWorldPointAcrossSlices(e,t,n){let i=this._getViewportVolume(e),{dimensions:a}=i,o=E3(i.imageData,t),r=n.findIndex(e=>aM.n4(Math.abs(e),1));if(-1===r)throw Error("Non-orthogonal direction vector");let l=[...o],s=[...o];return l[r]=0,s[r]=a[r]-1,[l,s]}_getCuboidIJKEdgePointsFromProjectedWorldPoint(e,t){let{viewPlaneNormal:n}=e.getCamera();return this._projectWorldPointAcrossSlices(e,t,n)}_getWorldCuboidCornerPoints(e,t){let n=[],i=this._getViewportVolume(e);return t.forEach(t=>{let a=this._getCuboidIJKEdgePointsFromProjectedWorldPoint(e,t).map(e=>E4(i.imageData,e));n.push(...a)}),n}_getWorldBoundingBoxFromProjectedSquare(e,t){let n=this._getWorldCuboidCornerPoints(e,t),i=[...n[0]],a=[...n[0]];
312return n.forEach(e=>{iT.jk(i,i,e),iT.T9(a,a,e)}),{topLeft:i,bottomRight:a}}_getViewportVolume(e){if(!(e instanceof nU.A))throw Error("Viewport is not a BaseVolumeViewport");let t=e.getAllVolumeIds()[0];return nV.Ay.getVolume(t)}_getHorizontalLineIJKPoints(e,t){let{viewport:n}=e,i=this._getViewportVolume(n),{dimensions:a}=i,o=E3(i.imageData,t),{viewUp:r,viewPlaneNormal:l}=n.getCamera(),s=iT.$A(iT.vt(),r,l).findIndex(e=>aM.n4(Math.abs(e),1)),d=[...o],h=[...o];return d[s]=0,h[s]=a[s]-1,[d,h]}_getHorizontalLineWorldPoints(e,t){let{viewport:n}=e,i=this._getViewportVolume(n),[a,o]=this._getHorizontalLineIJKPoints(e,t);return[E4(i.imageData,a),E4(i.imageData,o)]}}E8.toolName="WholeBodySegment";let E9=E8;class E7 extends dy{static{this.toolName="LabelMapEditWithContour"}static{this.annotationsToViewportMap=new Map}static{this.viewportIdsChecked=[]}constructor(e={}){super(ab.A({configuration:{calculateStats:!1,allowOpenContours:!1}},e)),this.onViewportAddedToToolGroupBinded=this.onViewportAddedToToolGroup.bind(this),this.onSegmentationModifiedBinded=this.onSegmentationModified.bind(this)}initializeListeners(){E7.annotationsToViewportMap.clear(),E7.viewportIdsChecked=[],ez.A.addEventListener(eK.ANNOTATION_MODIFIED,this.annotationModified),ez.A.addEventListener(eK.ANNOTATION_COMPLETED,this.annotationCompleted),ez.A.addEventListener(eK.TOOLGROUP_VIEWPORT_ADDED,this.onViewportAddedToToolGroupBinded),ez.A.addEventListener(eK.SEGMENTATION_MODIFIED,this.onSegmentationModifiedBinded),ez.A.addEventListener(eK.SEGMENTATION_REPRESENTATION_MODIFIED,this.onSegmentationModifiedBinded)}cleanUpListeners(){E7.annotationsToViewportMap.clear(),E7.viewportIdsChecked=[],ez.A.removeEventListener(eK.ANNOTATION_MODIFIED,this.annotationModified),ez.A.removeEventListener(eK.ANNOTATION_COMPLETED,this.annotationCompleted),ez.A.removeEventListener(eK.TOOLGROUP_VIEWPORT_ADDED,this.onViewportAddedToToolGroup.bind(this)),ez.A.removeEventListener(eK.SEGMENTATION_MODIFIED,this.onSegmentationModified.bind(this)),ez.A.removeEventListener(eK.SEGMENTATION_REPRESENTATION_MODIFIED,this.onSegmentationModified.bind(this))}async checkContourSegmentation(e){if(E7.viewportIdsChecked.includes(e))return;let t=ag(e);if(!t)return console.log("No active segmentation detected"),!1;let n=t.segmentationId;return t.representationData.Contour?E7.viewportIdsChecked.push(e):(E7.viewportIdsChecked.push(e),await m6(e,[{segmentationId:n,type:nB.Contour}]),iv({segmentationId:n,type:nB.Contour,data:{}})),!0}onViewportAddedToToolGroup(e){let{toolGroupId:t,viewportId:n}=e.detail;t===this.toolGroupId&&this.checkContourSegmentation(n)}onSegmentationModified(e){let{segmentationId:t}=e.detail||{};if(!t)return;let n=ie(t);n&&n.forEach(async({viewportId:e})=>await this.checkContourSegmentation(e))}onSetToolEnabled(){this.initializeListeners()}onSetToolActive(){this.initializeListeners()}onSetToolDisabled(){this.cleanUpListeners()}annotationModified(e){let{annotation:t,renderingEngineId:n,viewportId:i}=e.detail,a=(0,nG.lD)(n)?.getViewport(i);a&&E7.annotationsToViewportMap.set(t.annotationUID,a)}annotationCompleted(e){let{annotation:t}=e.detail,{polyline:n}=t.data?.contour||{};if(t?.metadata?.toolName===E7.toolName&&n&&E7.annotationsToViewportMap.has(t.annotationUID)){let e=E7.annotationsToViewportMap.get(t.annotationUID);n.length>3&&mf.viewportContoursToLabelmap(e)}}}let E6=E7;class we extends sd{static{this.toolName="VideoRedaction"}constructor(e={}){super(e,{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}),this.addNewAnnotation=e=>{let{currentPoints:t,element:n}=e.detail,i=t.world,{viewport:a}=(0,ej.Ay)(n);this.isDrawing=!0;let o=this.constructor.createAnnotationForViewport(a,{data:{handles:{points:[[...i],[...i],[...i],[...i]]}}});th(o,n);let r=ox(n,this.getToolName(),!1);return this.editData={annotation:o,viewportUIDsToRender:r,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(n),o2(n),e.preventDefault(),oX(r),o},this.getHandleNearImagePoint=(e,t,n,i)=>{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,{points:r}=o.handles;for(let e=0;e<r.length;e++){let t=r[e],l=a.worldToCanvas(t);if(!0==aZ.Io(n,l)<i)return o.handles.activeHandleIndex=e,t}o.handles.activeHandleIndex=null},this.isPointNearTool=(e,t,n,i)=>
312{let{viewport:a}=(0,ej.Ay)(e),{data:o}=t,{points:r}=o.handles,l=a.worldToCanvas(r[0]),s=a.worldToCanvas(r[3]),d=this._getRectangleImageCoordinates([l,s]),h=[n[0],n[1]],{left:c,top:u,width:g,height:m}=d;if(u9([c,u,g,m],h)<=i)return!0},this.toolSelectedCallback=(e,t,n="mouse")=>{let{element:i}=e.detail,{data:a}=t;a.active=!0;let o=ox(i,this.getToolName(),!1);this.editData={annotation:t,viewportUIDsToRender:o},this._activateModify(i),o2(i),oX(o),e.preventDefault()},this.handleSelectedCallback=(e,t,n,i="mouse")=>{let a,{element:o}=e.detail,{data:r}=t;r.active=!0,n.worldPosition||(a=r.handles.points.findIndex(e=>e===n));let l=ox(o,this.getToolName(),!1);this.editData={annotation:t,viewportUIDsToRender:l,handleIndex:a},this._activateModify(o),o2(o),oX(l),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportUIDsToRender:i,newAnnotation:a,hasMoved:o}=this.editData,{data:r}=n;(!a||o)&&(this.doneEditMemo(),r.active=!1,r.handles.activeHandleIndex=null,this._deactivateModify(t),this._deactivateDraw(t),o1(t),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tu(n.annotationUID),oX(i))},this._dragCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportUIDsToRender:a,handleIndex:o,newAnnotation:r}=this.editData;this.createMemo(n,i,{newAnnotation:r});let{data:l}=i;if(void 0===o){let{deltaPoints:e}=t,n=e.world,{points:i}=l.handles;i.forEach(e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]}),l.invalidated=!0}else{let e,i,a,r,s,d,h,c,{currentPoints:u}=t,{worldToCanvas:g,canvasToWorld:m}=(0,ej.Ay)(n).viewport,p=u.world,{points:f}=l.handles;switch(f[o]=[...p],o){case 0:case 3:e=g(f[0]),i=[(r=g(f[3]))[0],e[1]],a=[e[0],r[1]],d=m(i),h=m(a),f[1]=d,f[2]=h;break;case 1:case 2:i=g(f[1]),e=[(a=g(f[2]))[0],i[1]],r=[i[0],a[1]],s=m(e),c=m(r),f[0]=s,f[3]=c}l.invalidated=!0}this.editData.hasMoved=!0,(0,ej.Ay)(n),oX(a)},this._activateDraw=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_MOVE,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_MOVE,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._activateModify=e=>{e0.isInteractingWithTool=!0,e.addEventListener(eK.MOUSE_UP,this._endCallback),e.addEventListener(eK.MOUSE_DRAG,this._dragCallback),e.addEventListener(eK.MOUSE_CLICK,this._endCallback),e.addEventListener(eK.TOUCH_END,this._endCallback),e.addEventListener(eK.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=e=>{e0.isInteractingWithTool=!1,e.removeEventListener(eK.MOUSE_UP,this._endCallback),e.removeEventListener(eK.MOUSE_DRAG,this._dragCallback),e.removeEventListener(eK.MOUSE_CLICK,this._endCallback),e.removeEventListener(eK.TOUCH_END,this._endCallback),e.removeEventListener(eK.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(e,t)=>{let{viewport:n}=e,{element:i}=n,a=ti(this.getToolName(),i);if(!a?.length||(a=this.filterInteractableAnnotationsForElement(i,a),!a?.length))return!1;let o={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<a.length;e++){let i,r=a[e],{annotationUID:l}=r,{points:s,activeHandleIndex:d}=r.data.handles,h=s.map(e=>n.worldToCanvas(e)),c=this.getStyle("lineWidth",o,r),u=this.getStyle("lineDash",o,r),g=this.getStyle("color",o,r);if(!n.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");this.editData||null===d||(i=[h[d]]),i&&li(t,l,"0",i,{color:g}),um(t,l,"0",h[0],h[3],{color:"black",lineDash:u,lineWidth:c})}},this._getRectangleImageCoordinates=e=>{let[t,n]=e;return{left:Math.min(t[0],n[0]),top:Math.min(t[1],n[1]),width:Math.abs(t[0]-n[0]),height:Math.abs(t[1]-n[1])}},this._calculateCachedStats=(e,t,n,i,a)=>{let{data:o}=e,{viewportUID:r,renderingEngineUID:l,sceneUID:s}=a,d=o.handles.points[0],h=o.handles.points[3],{cachedStats:c}=o,u=Object.keys(c);for(let e=0;e<u.length;e++){let a=u[e],{imageVolume:o}=this._getImageVolumeFromTargetUID(a,i),{dimensions:r,scalarData:l,vtkImageData:s,metadata:g}=o,m=iT.fA(0,0,0),p=iT.fA(0,0,0);if(s.worldToIndexVec3(d,m),m[0]=Math.floor(m[0]),m[1]=Math.floor(m[1]),m[2]=Math.floor(m[2]),s.worldToIndexVec3(h,p),p[0]=Math.floor(p[0]),p[1]=Math.floor(p[1]),p[2]=Math.floor(p[2]),this._isInsideVolume(m,p,r)){this.isHandleOutsideImage=!1;let e=Math.min(m[0],p[0]),i=Math.max(m[0],p[0]),o=Math.min(m[1],p[1]),s=Math.max(m[1],p[1]),u=Math.min(m[2],p[2]),f=Math.max(m[2],p[2]),{worldWidth:v,worldHeight:I}=pS(t,n,d,h),C=v*I,_=0,E=0,w=0,A=r[0],S=r[0]*r[1];for(let t=u;t<=f;t++)for(let n=o;n<=s;n++)for(let a=e;a<=i;a++){let e=l[t*S+n*A+a];_++,E+=e}E/=_;for(let t=u;t<=f;t++)for(let n=o;n<=s;n++)for(let a=e;a<=i;a++){let e=l[t*S+n*A+a]-E;w+=e*e}w/=_,w=Math.sqrt(w),c[a]={Modality:g.Modality,area:C,mean:E,stdDev:w}}else this.isHandleOutsideImage=!0,c[a]={Modality:g.Modality}}let g=e.invalidated;if(e.invalidated=!1,g){let t=eK.ANNOTATION_MODIFIED,n={annotation:e,viewportUID:r,renderingEngineUID:l,sceneUID:s,changeType:eY.StatsUpdated};(0,eq.A)(ez.A,t,n)}return c}
312,this._isInsideVolume=(e,t,n)=>lF.A(e,n)&&lF.A(t,n),this._getTargetVolumeUID=e=>{if(this.configuration.volumeUID)return this.configuration.volumeUID;let t=e.getVolumeActors();if(t||t.length)return t[0].uid},this._throttledCalculateCachedStats=oA(this._calculateCachedStats,100,{trailing:!0})}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),o1(e);let{annotation:t,viewportUIDsToRender:n}=this.editData,{data:i}=t;return i.active=!1,i.handles.activeHandleIndex=null,oX(n),this.editData=null,t.annotationUID}_getImageVolumeFromTargetUID(e,t){let n,i;if(e.startsWith("stackTarget")){let i=e.indexOf(":"),a=e.substring(i+1);n=t.getViewport(a).getImageData()}else n=nV.Ay.getVolume(e);return{imageVolume:n,viewport:i}}_getTargetStackUID(e){return`stackTarget:${e.uid}`}}let wt=we}}]);
313//# sourceMappingURL=91154.5ce3dc91a0bf78a7.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.