UNPKG

dicomweb-pacs

Version:

A self contained easy to use PACS with DICOMWEB and DIMSE service support

2 lines 82.9 kB
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2914],{97181:(t,e,n)=>{n.d(e,{A:()=>o});const o=function(t,e,n){return`${t}::${e}::${n}`}},76910:(t,e,n)=>{n.d(e,{A:()=>a});var o=n(99737);const a=t=>t.shiftKey?t.ctrlKey?o.KeyboardBindings.ShiftCtrl:t.altKey?o.KeyboardBindings.ShiftAlt:t.metaKey?o.KeyboardBindings.ShiftMeta:o.KeyboardBindings.Shift:t.ctrlKey?t.altKey?o.KeyboardBindings.CtrlAlt:t.metaKey?o.KeyboardBindings.CtrlMeta:o.KeyboardBindings.Ctrl:t.altKey?t.metaKey&&o.KeyboardBindings.AltMeta||o.KeyboardBindings.Alt:t.metaKey?o.KeyboardBindings.Meta:void 0},97:(t,e,n)=>{n.d(e,{c:()=>l});var o=n(2076),a=n(29601),i=n(67013),s=n(82056);const r=i.H;function l(){(0,s.setAnnotationManager)(r)}r.setPreprocessingFn((t=>{const e=(t=(t=>(t.data||(t.data={}),t.data.cachedStats||(t.data.cachedStats={}),t))(t=(t=>(t.data||(t.data={}),t.data.handles||(t.data.handles={}),t.data.handles.textBox||(t.data.handles.textBox={}),t))(t))).annotationUID,n=(0,o.checkAndSetAnnotationLocked)(e);t.isLocked=n;const i=(0,a.checkAndSetAnnotationVisibility)(e);return t.isVisible=i,t})),(0,s.setAnnotationManager)(r)},75419:(t,e,n)=>{n.d(e,{R:()=>i});var o=n(15327),a=n(99737);function i(t){const e={segmentationId:t};(0,o.triggerEvent)(o.eventTarget,a.Events.SEGMENTATION_ADDED,e)}},9726:(t,e,n)=>{n.d(e,{G:()=>i});var o=n(15327),a=n(99737);function i(t){const e={segmentationId:t};(0,o.triggerEvent)(o.eventTarget,a.Events.SEGMENTATION_MODIFIED,e)}},1485:(t,e,n)=>{n.d(e,{B:()=>i});var o=n(15327),a=n(99737);function i(t){const e={segmentationId:t};(0,o.triggerEvent)(o.eventTarget,a.Events.SEGMENTATION_REMOVED,e)}},44951:(t,e,n)=>{n.d(e,{r:()=>i});var o=n(15327),a=n(99737);function i(t,e,n){const i={segmentationId:e,type:n,viewportId:t};(0,o.triggerEvent)(o.eventTarget,a.Events.SEGMENTATION_REPRESENTATION_MODIFIED,i)}},65290:(t,e,n)=>{n.d(e,{O:()=>i});var o=n(15327),a=n(99737);function i(t,e,n){const i={viewportId:t,segmentationId:e,type:n};(0,o.triggerEvent)(o.eventTarget,a.Events.SEGMENTATION_REPRESENTATION_REMOVED,i)}},47098:(t,e,n)=>{n.d(e,{s:()=>a});var o=n(93210);function a(t,e){const n=(0,o.Ut)(t,e);if(!n)return new Set;return Object.entries(n.segments).reduce(((t,[e,n])=>(n.visible||t.add(Number(e)),t)),new Set)}},9711:(t,e,n)=>{n(99737),n(21345)},88029:(t,e,n)=>{n.d(e,{A:()=>s});var o=n(85204),a=n(99737);const i=[a.ToolModes.Active,a.ToolModes.Passive,a.ToolModes.Enabled];const s=function(t){return o.wk.toolGroups.filter((({toolOptions:e})=>{const n=Object.keys(e);for(let o=0;o<n.length;o++)if(t===n[o]&&e[t]&&i.includes(e[t].mode))return!0;return!1}))}},57999:(t,e,n)=>{n.d(e,{A:()=>S});var o=n(3823),a=n(15327),i=n(85204),s=n(99737),r=n(7001),l=n(95527),d=n(93126),c=n(42797),u=n(58640),g=n(72967),m=n(44049);const{getSubPixelSpacingAndXYDirections:h,addCanvasPointsToArray:p,getArea:f}=l.polyline;function v(t,e,n){this.isEditingClosed=!0;const o=t.detail,{currentPoints:l,element:d}=o,c=l.canvas,u=(0,a.getEnabledElement)(d);if(!u)return;const{viewport:g}=u,m=e.data.contour.polyline.map(g.worldToCanvas),{spacing:p,xDir:f,yDir:v}=h(g,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:m,editCanvasPoints:[c],startCrossingIndex:void 0,editIndex:0,annotation:e},this.commonData={annotation:e,viewportIdsToRender:n,spacing:p,xDir:f,yDir:v,movingTextBox:!1},i.wk.isInteractingWithTool=!0,d.addEventListener(s.Events.MOUSE_UP,this.mouseUpClosedContourEditCallback),d.addEventListener(s.Events.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),d.addEventListener(s.Events.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),d.addEventListener(s.Events.TOUCH_END,this.mouseUpClosedContourEditCallback),d.addEventListener(s.Events.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),d.addEventListener(s.Events.TOUCH_TAP,this.mouseUpClosedContourEditCallback),(0,r.hideElementCursor)(d)}function I(t){i.wk.isInteractingWithTool=!1,t.removeEventListener(s.Events.MOUSE_UP,this.mouseUpClosedContourEditCallback),t.removeEventListener(s.Events.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),t.removeEventListener(s.Events.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),t.removeEventListener(s.Events.TOUCH_END,this.mouseUpClosedContourEditCallback),t.removeEventListener(s.Events.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),t.removeEventListener(s.Events.TOUCH_TAP,this.mouseUpClosedContourEditCallback),(0,r.resetElementCursor)(t)}function C(t){const e=t.detail,{currentPoints:n,element:i}=e,s=n.world,r=n.canvas,l=(0,a.getEnabledElement)(i),{viewport:d}=l,{viewportIdsToRender:c,xDir:g,yDir:m,spacing:h}=this.commonData,{editIndex:f,editCanvasPoints:v,startCrossingIndex:I,annotation:C}=this.editData;this.createMemo(i,C);const E=v[v.length-1],D=d.canvasToWorld(E),A=o.eR.create();o.eR.subtract(A,s,D);const w=Math.abs(o.eR.dot(A,g)),x=Math.abs(o.eR.dot(A,m));if(w<=h[0]&&x<=h[1])return;void 0!==I&&this.checkAndRemoveCrossesOnEditLine(t);const S=f+p(i,v,r,this.commonData);this.editData.editIndex=S,void 0===I&&v.length>1&&this.checkForFirstCrossing(t,!0),this.editData.snapIndex=this.findSnapIndex(),-1!==this.editData.snapIndex?(this.editData.fusedCanvasPoints=this.fuseEditPointsWithClosedContour(t),void 0!==I&&this.checkForSecondCrossing(t,!0)&&(this.removePointsAfterSecondCrossing(!0),this.finishEditAndStartNewEdit(t)),(0,u.A)(c)):this.finishEditAndStartNewEdit(t)}function E(t){const e=t.detail,{element:n}=e,o=(0,a.getEnabledElement)(n),{viewport:i,renderingEngine:s}=o,{annotation:r,viewportIdsToRender:l}=this.commonData,{fusedCanvasPoints:c,editCanvasPoints:h}=this.editData;(0,g.A)(r,{points:c,closed:!0,targetWindingDirection:d.W.Clockwise},i),r.autoGenerated&&(r.autoGenerated=!1),(0,m.triggerAnnotationModified)(r,n);const p=h.pop();this.editData={prevCanvasPoints:c,editCanvasPoints:[p],startCrossingIndex:void 0,editIndex:0,snapIndex:void 0,annotation:r},(0,u.A)(l)}function D(t){const{prevCanvasPoints:e,editCanvasPoints:n,startCrossingIndex:a,snapIndex:i}=this.editData;if(void 0===a||void 0===i)return;const s=t.detail,{element:r}=s,l=[...n];let d,c;p(r,l,e[i],this.commonData),l.length>n.length&&l.pop(),a>i?(d=i,c=a):(d=a,c=i);const u=o.Zc.distance(e[d],l[0]),g=o.Zc.distance(e[d],l[l.length-1]),m=o.Zc.distance(e[c],l[0]),h=o.Zc.distance(e[c],l[l.length-1]),v=[];for(let t=0;t<d;t++){const n=e[t];v.push([n[0],n[1]])}let I=u+h,C=g+m;if(I<C)for(let t=0;t<l.length;t++){const e=l[t];v.push([e[0],e[1]])}else for(let t=l.length-1;t>=0;t--){const e=l[t];v.push([e[0],e[1]])}for(let t=c;t<e.length;t++){const n=e[t];v.push([n[0],n[1]])}const E=[];for(let t=d;t<c;t++){const n=e[t];E.push([n[0],n[1]])}if(I=m+g,C=h+u,I<C)for(let t=0;t<l.length;t++){const e=l[t];E.push([e[0],e[1]])}else for(let t=l.length-1;t>=0;t--){const e=l[t];E.push([e[0],e[1]])}return f(v)>f(E)?v:E}function A(t){const e=t.detail,{element:n}=e;this.completeClosedContourEdit(n)}function w(t){const e=(0,a.getEnabledElement)(t),{viewport:n}=e,{annotation:o,viewportIdsToRender:i}=this.commonData;this.doneEditMemo();const{fusedCanvasPoints:s,prevCanvasPoints:r}=this.editData;if(s){const e=(0,c.Q)(this.configuration,o)?(0,c.p)(this.configuration,s,r):s,a=this.configuration?.decimate||{};(0,g.A)(o,{points:e,closed:!0,targetWindingDirection:d.W.Clockwise},n,{decimate:{enabled:!!a.enabled,epsilon:a.epsilon}}),o.autoGenerated&&(o.autoGenerated=!1),(0,m.triggerAnnotationModified)(o,t)}this.isEditingClosed=!1,this.editData=void 0,this.commonData=void 0,(0,u.A)(i),this.deactivateClosedContourEdit(t)}function x(t){this.completeClosedContourEdit(t)}const S=function(t){t.activateClosedContourEdit=v.bind(t),t.deactivateClosedContourEdit=I.bind(t),t.mouseDragClosedContourEditCallback=C.bind(t),t.mouseUpClosedContourEditCallback=A.bind(t),t.finishEditAndStartNewEdit=E.bind(t),t.fuseEditPointsWithClosedContour=D.bind(t),t.cancelClosedContourEdit=x.bind(t),t.completeClosedContourEdit=w.bind(t)}},55927:(t,e,n)=>{n.d(e,{A:()=>T});var o=n(15327),a=n(7001),i=n(99737),s=n(85204),r=n(3823),l=n(42797),d=n(76910),c=n(58640),u=n(44049),g=n(5403),m=n(95527),h=n(82056),p=n(93126);const{addCanvasPointsToArray:f,pointsAreWithinCloseContourProximity:v,getFirstLineSegmentIntersectionIndexes:I,getSubPixelSpacingAndXYDirections:C}=m.polyline;function E(t,e,n){this.isDrawing=!0;const r=t.detail,{currentPoints:l,element:c}=r,u=l.canvas,g=(0,o.getEnabledElement)(c),{viewport:m}=g,h=(0,d.A)(t.detail.event)===this.configuration.contourHoleAdditionModifierKey,{spacing:p,xDir:f,yDir:v}=C(m,this.configuration.subPixelResolution)||{};p&&f&&v&&(this.drawData={canvasPoints:[u],polylineIndex:0,contourHoleProcessingEnabled:h,newAnnotation:!0},this.commonData={annotation:e,viewportIdsToRender:n,spacing:p,xDir:f,yDir:v,movingTextBox:!1},s.wk.isInteractingWithTool=!0,c.addEventListener(i.Events.MOUSE_UP,this.mouseUpDrawCallback),c.addEventListener(i.Events.MOUSE_DRAG,this.mouseDragDrawCallback),c.addEventListener(i.Events.MOUSE_CLICK,this.mouseUpDrawCallback),c.addEventListener(i.Events.TOUCH_END,this.mouseUpDrawCallback),c.addEventListener(i.Events.TOUCH_DRAG,this.mouseDragDrawCallback),c.addEventListener(i.Events.TOUCH_TAP,this.mouseUpDrawCallback),(0,a.hideElementCursor)(c))}function D(t){s.wk.isInteractingWithTool=!1,t.removeEventListener(i.Events.MOUSE_UP,this.mouseUpDrawCallback),t.removeEventListener(i.Events.MOUSE_DRAG,this.mouseDragDrawCallback),t.removeEventListener(i.Events.MOUSE_CLICK,this.mouseUpDrawCallback),t.removeEventListener(i.Events.TOUCH_END,this.mouseUpDrawCallback),t.removeEventListener(i.Events.TOUCH_DRAG,this.mouseDragDrawCallback),t.removeEventListener(i.Events.TOUCH_TAP,this.mouseUpDrawCallback),(0,a.resetElementCursor)(t)}function A(t){const e=t.detail,{currentPoints:n,element:a}=e,s=n.world,l=n.canvas,d=(0,o.getEnabledElement)(a),{viewport:g}=d,{annotation:m,viewportIdsToRender:h,xDir:p,yDir:v,spacing:I,movingTextBox:C}=this.commonData,{polylineIndex:E,canvasPoints:D,newAnnotation:A}=this.drawData;this.createMemo(a,m,{newAnnotation:A});const w=D[D.length-1],x=g.canvasToWorld(w),S=r.eR.create();r.eR.subtract(S,s,x);const b=Math.abs(r.eR.dot(S,p)),y=Math.abs(r.eR.dot(S,v));if(!(b<=I[0]&&y<=I[1])){if(C){this.isDrawing=!1;const{deltaPoints:t}=e,n=t.world,{textBox:o}=m.data.handles,{worldPosition:a}=o;a[0]+=n[0],a[1]+=n[1],a[2]+=n[2],o.hasMoved=!0}else{const e=this.findCrossingIndexDuringCreate(t);if(void 0!==e)this.applyCreateOnCross(t,e);else{const t=f(a,D,l,this.commonData);this.drawData.polylineIndex=E+t}m.invalidated=!0}(0,c.A)(h),m.invalidated&&(0,u.triggerAnnotationModified)(m,a,i.ChangeTypes.HandlesUpdated)}}function w(t){const{allowOpenContours:e}=this.configuration,{canvasPoints:n,contourHoleProcessingEnabled:o}=this.drawData,a=n[0],i=n[n.length-1],s=t.detail,{element:r}=s;this.doneEditMemo(),this.drawData.newAnnotation=!1,e&&!v(a,i,this.configuration.closeContourProximity)?this.completeDrawOpenContour(r,{contourHoleProcessingEnabled:o}):this.completeDrawClosedContour(r,{contourHoleProcessingEnabled:o})}function x(t,e){this.removeCrossedLinesOnCompleteDraw();const{canvasPoints:n}=this.drawData,{contourHoleProcessingEnabled:a,minPointsToSave:i}=e??{};if(i&&n.length<i)return!1;if(this.haltDrawing(t,n))return!1;const{annotation:s,viewportIdsToRender:r}=this.commonData,d=(0,o.getEnabledElement)(t),{viewport:g,renderingEngine:m}=d;f(t,n,n[0],this.commonData),n.pop();const h=(0,l.Q)(this.configuration,s)?(0,l.p)(this.configuration,n):n;this.updateContourPolyline(s,{points:h,closed:!0,targetWindingDirection:p.W.Clockwise},g);const{textBox:v}=s.data.handles;return v?.hasMoved||(0,u.triggerContourAnnotationCompleted)(s,a),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,(0,c.A)(r),this.deactivateDraw(t),!0}function S(){const{canvasPoints:t}=this.drawData,e=t.length,n=[t[0],t[e-1]],o=t.slice(0,-1).slice(1),a=I(o,n[0],n[1],!1);if(a){const e=a[1];this.drawData.canvasPoints=1===e?t.splice(1):t.splice(0,e)}}function b(t,e){const{canvasPoints:n}=this.drawData,{contourHoleProcessingEnabled:a}=e??{};if(this.haltDrawing(t,n))return!1;const{annotation:i,viewportIdsToRender:s}=this.commonData,r=(0,o.getEnabledElement)(t),{viewport:d,renderingEngine:m}=r,h=(0,l.Q)(this.configuration,i)?(0,l.p)(this.configuration,n):n;this.updateContourPolyline(i,{points:h,closed:!1},d);const{textBox:p}=i.data.handles,f=i.data.contour.polyline;return i.data.handles.points=[f[0],f[f.length-1]],i.data.isOpenUShapeContour&&(i.data.openUShapeContourVectorToPeak=(0,g.A)(n,d)),p.hasMoved||(0,u.triggerContourAnnotationCompleted)(i,a),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,(0,c.A)(s),this.deactivateDraw(t),!0}function y(t){const e=t.detail,{currentPoints:n,lastPoints:o}=e,a=n.canvas,i=o.canvas,{canvasPoints:s}=this.drawData,r=s.slice(0,-1),l=I(r,a,i,!1);if(void 0===l)return;return l[0]}function P(t,e){const n=t.detail,{element:a}=n,{canvasPoints:i,contourHoleProcessingEnabled:s}=this.drawData,{annotation:r,viewportIdsToRender:l}=this.commonData;f(a,i,i[e],this.commonData),i.pop();const d=i.slice(e),c=m.polyline.getArea(d);if(o.utilities.isEqual(c,0))return void i.splice(e+1);i.splice(0,e);const u={contourHoleProcessingEnabled:s,minPointsToSave:3};this.completeDrawClosedContour(a,u)&&this.activateClosedContourEdit(t,r,l)}function M(t){const{allowOpenContours:e}=this.configuration,{canvasPoints:n,contourHoleProcessingEnabled:o}=this.drawData,a=n[0],i=n[n.length-1];e&&!v(a,i,this.configuration.closeContourProximity)?this.completeDrawOpenContour(t,{contourHoleProcessingEnabled:o}):this.completeDrawClosedContour(t,{contourHoleProcessingEnabled:o})}function O(t,e){const{subPixelResolution:n}=this.configuration;if(function(t,e){const n=Math.max(3*e,3);return t.length<n}(e,n)){const{annotation:e,viewportIdsToRender:n}=this.commonData,a=(0,o.getEnabledElement)(t),{renderingEngine:i}=a;return(0,h.removeAnnotation)(e.annotationUID),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,(0,c.A)(n),this.deactivateDraw(t),!0}return!1}const T=function(t){t.activateDraw=E.bind(t),t.deactivateDraw=D.bind(t),t.applyCreateOnCross=P.bind(t),t.findCrossingIndexDuringCreate=y.bind(t),t.completeDrawOpenContour=b.bind(t),t.removeCrossedLinesOnCompleteDraw=S.bind(t),t.mouseDragDrawCallback=A.bind(t),t.mouseUpDrawCallback=w.bind(t),t.completeDrawClosedContour=x.bind(t),t.cancelDrawing=M.bind(t),t.haltDrawing=O.bind(t)}},92400:(t,e,n)=>{n.d(e,{A:()=>m});var o=n(3823),a=n(95527);const{addCanvasPointsToArray:i,getFirstLineSegmentIntersectionIndexes:s}=a.polyline;function r(t,e){const n=t.detail,{element:a,currentPoints:r,lastPoints:l}=n,d=r.canvas,c=l.canvas,{editCanvasPoints:u,prevCanvasPoints:g}=this.editData,m=s(g,d,c,e);if(m)this.editData.startCrossingIndex=m[0],this.removePointsUpUntilFirstCrossing(e);else if(g.length>=2)if(u.length>this.configuration.checkCanvasEditFallbackProximity){const t=u[0],e=[];for(let n=0;n<g.length;n++){const a=g[n],i=o.Zc.distance(a,t);e.push({distance:i,index:n})}e.sort(((t,e)=>t.distance-e.distance));const n=[e[0],e[1]],a=Math.min(n[0].index,n[1].index);this.editData.startCrossingIndex=a}else{const t=o.Zc.create();o.Zc.subtract(t,u[1],u[0]),o.Zc.normalize(t,t);const n=6,r=[u[0][0]-t[0]*n,u[0][1]-t[1]*n],l=s(g,r,u[0],e);if(l){const t=[r];i(a,t,u[0],this.commonData),u.unshift(...t),this.removePointsUpUntilFirstCrossing(e),this.editData.editIndex=u.length-1,this.editData.startCrossingIndex=l[0]}}}function l(t){const{editCanvasPoints:e,prevCanvasPoints:n}=this.editData;let o=0;for(let a=0;a<e.length-1;a++){const i=[e[a],e[a+1]];if(o++,!!s(n,i[0],i[1],t))break}e.splice(0,o),this.editData.editIndex=e.length-1}function d(t,e){const n=t.detail,{currentPoints:o,lastPoints:a}=n,i=o.canvas,r=a.canvas,{prevCanvasPoints:l}=this.editData;return!!s(l,i,r,e)}function c(t){const{prevCanvasPoints:e,editCanvasPoints:n}=this.editData;for(let o=n.length-1;o>0;o--){const a=[n[o],n[o-1]],i=!!s(e,a[0],a[1],t);if(n.pop(),i)break}}function u(){const{editCanvasPoints:t,prevCanvasPoints:e,startCrossingIndex:n}=this.editData;if(void 0===n)return;const a=t[t.length-1],i=[];for(let t=0;t<e.length;t++){const n=e[t],s=o.Zc.distance(n,a);i.push({distance:s,index:t})}i.sort(((t,e)=>t.distance-e.distance));const r=t.slice(0,-1);for(let n=0;n<i.length;n++){const{index:o}=i[n],a=e[o],l=t[t.length-1];if(!s(r,a,l,!1))return o}return-1}function g(t){const e=t.detail,{currentPoints:n,lastPoints:o}=e,a=n.canvas,i=o.canvas,{editCanvasPoints:r}=this.editData,l=r.slice(0,-2),d=s(l,a,i,!1);if(!d)return;const c=d[0],u=r.length-c;for(let t=0;t<u;t++)r.pop()}const m=function(t){t.checkForFirstCrossing=r.bind(t),t.removePointsUpUntilFirstCrossing=l.bind(t),t.checkForSecondCrossing=d.bind(t),t.findSnapIndex=u.bind(t),t.removePointsAfterSecondCrossing=c.bind(t),t.checkAndRemoveCrossesOnEditLine=g.bind(t)}},5403:(t,e,n)=>{n.d(e,{A:()=>a,h:()=>i});var o=n(3823);function a(t,e){const n=t[0],a=t[t.length-1],i=o.Zc.create();o.Zc.set(i,a[0]-n[0],a[1]-n[1]),o.Zc.normalize(i,i);const s=o.Zc.create(),r=o.Zc.create();o.Zc.set(s,-i[1],i[0]),o.Zc.set(r,i[1],-i[0]);const l=[(n[0]+a[0])/2,(n[1]+a[1])/2],d={dist:0,index:null};for(let e=0;e<t.length;e++){const n=t[e],a=o.Zc.dist(n,l);a>d.dist&&(d.dist=a,d.index=e)}return[t[d.index],l].map(e.canvasToWorld)}function i(t,e){const{viewport:n}=t;return a(e.data.contour.polyline.map(n.worldToCanvas),n)}},69855:(t,e,n)=>{n.d(e,{A:()=>y});var o=n(3823),a=n(15327),i=n(85204),s=n(99737),r=n(7001),l=n(95527),d=n(42797),c=n(58640),u=n(72967),g=n(5403),m=n(44049);const{addCanvasPointsToArray:h,getSubPixelSpacingAndXYDirections:p}=l.polyline;function f(t,e,n){this.isEditingOpen=!0;const o=t.detail,{currentPoints:l,element:d}=o,c=l.canvas,u=(0,a.getEnabledElement)(d),{viewport:g}=u;this.doneEditMemo();const m=e.data.contour.polyline.map(g.worldToCanvas),{spacing:h,xDir:f,yDir:v}=p(g,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:m,editCanvasPoints:[c],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:e,viewportIdsToRender:n,spacing:h,xDir:f,yDir:v,movingTextBox:!1},i.wk.isInteractingWithTool=!0,d.addEventListener(s.Events.MOUSE_UP,this.mouseUpOpenContourEditCallback),d.addEventListener(s.Events.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),d.addEventListener(s.Events.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),d.addEventListener(s.Events.TOUCH_END,this.mouseUpOpenContourEditCallback),d.addEventListener(s.Events.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),d.addEventListener(s.Events.TOUCH_TAP,this.mouseUpOpenContourEditCallback),(0,r.hideElementCursor)(d)}function v(t){i.wk.isInteractingWithTool=!1,t.removeEventListener(s.Events.MOUSE_UP,this.mouseUpOpenContourEditCallback),t.removeEventListener(s.Events.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),t.removeEventListener(s.Events.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),t.removeEventListener(s.Events.TOUCH_END,this.mouseUpOpenContourEditCallback),t.removeEventListener(s.Events.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),t.removeEventListener(s.Events.TOUCH_TAP,this.mouseUpOpenContourEditCallback),(0,r.resetElementCursor)(t)}function I(t){const e=t.detail,{currentPoints:n,element:i}=e,s=n.world,r=n.canvas,l=(0,a.getEnabledElement)(i),{viewport:d}=l,{viewportIdsToRender:u,xDir:g,yDir:m,spacing:p}=this.commonData,{editIndex:f,editCanvasPoints:v,startCrossingIndex:I}=this.editData,C=v[v.length-1],E=d.canvasToWorld(C),D=o.eR.create();this.createMemo(i,this.commonData.annotation),o.eR.subtract(D,s,E);const A=Math.abs(o.eR.dot(D,g)),w=Math.abs(o.eR.dot(D,m));if(A<=p[0]&&w<=p[1])return;void 0!==I&&this.checkAndRemoveCrossesOnEditLine(t);const x=f+h(i,v,r,this.commonData);this.editData.editIndex=x,void 0===I&&v.length>1&&this.checkForFirstCrossing(t,!1),this.editData.snapIndex=this.findSnapIndex(),this.editData.fusedCanvasPoints=this.fuseEditPointsWithOpenContour(t),void 0!==I&&this.checkForSecondCrossing(t,!1)?(this.removePointsAfterSecondCrossing(!1),this.finishEditOpenOnSecondCrossing(t)):this.checkIfShouldOverwriteAnEnd(t)&&this.openContourEditOverwriteEnd(t),(0,c.A)(u)}function C(t){const e=t.detail,{element:n}=e,o=(0,a.getEnabledElement)(n),{viewport:i}=o,{annotation:s,viewportIdsToRender:r}=this.commonData,l=this.fuseEditPointsForOpenContourEndEdit();(0,u.A)(s,{points:l,closed:!1},i);const d=s.data.contour.polyline;s.data.handles.points=[d[0],d[d.length-1]],s.data.handles.activeHandleIndex=1,(0,m.triggerAnnotationModified)(s,n),this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,this.doneEditMemo(),this.deactivateOpenContourEdit(n),this.activateOpenContourEndEdit(t,s,r,null)}function E(t){const e=t.detail,{currentPoints:n,lastPoints:a}=e,i=n.canvas,s=a.canvas,{snapIndex:r,prevCanvasPoints:l,startCrossingIndex:d}=this.editData;if(void 0===d||void 0===r)return!1;if(-1===r)return!0;if(0!==r&&r!==l.length-1)return!1;const c=i,u=s,g=l[r],m=o.Zc.create(),h=o.Zc.create();o.Zc.set(m,c[0]-u[0],c[1]-u[1]),o.Zc.set(h,c[0]-g[0],c[1]-g[1]);const p=o.Zc.dot(m,h),f=Math.sqrt(m[0]*m[0]+m[1]*m[1]),v=Math.sqrt(h[0]*h[0]+h[1]*h[1]);return Math.acos(p/(f*v))<Math.PI/2}function D(){const{snapIndex:t,prevCanvasPoints:e,editCanvasPoints:n,startCrossingIndex:a}=this.editData,i=[];if(0===t)for(let t=e.length-1;t>=a;t--){const n=e[t];i.push([n[0],n[1]])}else for(let t=0;t<a;t++){const n=e[t];i.push([n[0],n[1]])}if(o.Zc.distance(e[a],n[0])<o.Zc.distance(e[a],n[n.length-1]))for(let t=0;t<n.length;t++){const e=n[t];i.push([e[0],e[1]])}else for(let t=n.length-1;t>=0;t--){const e=n[t];i.push([e[0],e[1]])}return i}function A(t){const{prevCanvasPoints:e,editCanvasPoints:n,startCrossingIndex:a,snapIndex:i}=this.editData;if(void 0===a||void 0===i)return;const s=t.detail,{element:r}=s,l=[...n];let d,c;h(r,l,e[i],this.commonData),l.length>n.length&&l.pop(),a>i?(d=i,c=a):(d=a,c=i);const u=o.Zc.distance(e[d],l[0]),g=o.Zc.distance(e[d],l[l.length-1]),m=o.Zc.distance(e[c],l[0]),p=o.Zc.distance(e[c],l[l.length-1]),f=[];for(let t=0;t<d;t++){const n=e[t];f.push([n[0],n[1]])}if(u+p<g+m)for(let t=0;t<l.length;t++){const e=l[t];f.push([e[0],e[1]])}else for(let t=l.length-1;t>=0;t--){const e=l[t];f.push([e[0],e[1]])}for(let t=c;t<e.length;t++){const n=e[t];f.push([n[0],n[1]])}return f}function w(t){const e=t.detail,{element:n}=e,o=(0,a.getEnabledElement)(n),{viewport:i,renderingEngine:s}=o,{annotation:r,viewportIdsToRender:l}=this.commonData,{fusedCanvasPoints:d,editCanvasPoints:g}=this.editData;(0,u.A)(r,{points:d,closed:!1},i);const h=r.data.contour.polyline;r.data.handles.points=[h[0],h[h.length-1]],(0,m.triggerAnnotationModified)(r,n);const p=g.pop();this.editData={prevCanvasPoints:d,editCanvasPoints:[p],startCrossingIndex:void 0,editIndex:0},(0,c.A)(l)}function x(t){const e=t.detail,{element:n}=e;this.completeOpenContourEdit(n)}function S(t){const e=(0,a.getEnabledElement)(t),{viewport:n}=e,{annotation:o,viewportIdsToRender:i}=this.commonData;this.doneEditMemo();const{fusedCanvasPoints:s,prevCanvasPoints:r}=this.editData;if(s){const e=(0,d.Q)(this.configuration)?(0,d.p)(this.configuration,s,r):s,a=this.configuration?.decimate||{};(0,u.A)(o,{points:e,closed:!1},n,{decimate:{enabled:!!a.enabled,epsilon:a.epsilon}});const i=o.data.contour.polyline;o.data.handles.points=[i[0],i[i.length-1]],o.data.isOpenUShapeContour&&(o.data.openUShapeContourVectorToPeak=(0,g.A)(s,n)),(0,m.triggerAnnotationModified)(o,t)}this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,(0,c.A)(i),this.deactivateOpenContourEdit(t)}function b(t){this.completeOpenContourEdit(t)}const y=function(t){t.activateOpenContourEdit=f.bind(t),t.deactivateOpenContourEdit=v.bind(t),t.mouseDragOpenContourEditCallback=I.bind(t),t.mouseUpOpenContourEditCallback=x.bind(t),t.fuseEditPointsWithOpenContour=A.bind(t),t.finishEditOpenOnSecondCrossing=w.bind(t),t.checkIfShouldOverwriteAnEnd=E.bind(t),t.fuseEditPointsForOpenContourEndEdit=D.bind(t),t.openContourEditOverwriteEnd=C.bind(t),t.cancelOpenContourEdit=b.bind(t),t.completeOpenContourEdit=S.bind(t)}},70734:(t,e,n)=>{n.d(e,{A:()=>c});var o=n(15327),a=n(85204),i=n(99737),s=n(7001),r=n(95527);const{getSubPixelSpacingAndXYDirections:l}=r.polyline;function d(t,e,n,r){this.isDrawing=!0;const d=t.detail,{element:c}=d,u=(0,o.getEnabledElement)(c),{viewport:g}=u,{spacing:m,xDir:h,yDir:p}=l(g,this.configuration.subPixelResolution),f=e.data.contour.polyline.map(g.worldToCanvas);0===e.data.handles.activeHandleIndex&&f.reverse();let v=!1;r?.worldPosition&&(v=!0),this.drawData={canvasPoints:f,polylineIndex:f.length-1},this.commonData={annotation:e,viewportIdsToRender:n,spacing:m,xDir:h,yDir:p,movingTextBox:v},a.wk.isInteractingWithTool=!0,c.addEventListener(i.Events.MOUSE_UP,this.mouseUpDrawCallback),c.addEventListener(i.Events.MOUSE_DRAG,this.mouseDragDrawCallback),c.addEventListener(i.Events.MOUSE_CLICK,this.mouseUpDrawCallback),c.addEventListener(i.Events.TOUCH_END,this.mouseUpDrawCallback),c.addEventListener(i.Events.TOUCH_DRAG,this.mouseDragDrawCallback),c.addEventListener(i.Events.TOUCH_TAP,this.mouseUpDrawCallback),(0,s.hideElementCursor)(c)}const c=function(t){t.activateOpenContourEndEdit=d.bind(t)}},58161:(t,e,n)=>{n.d(e,{A:()=>v});var o=n(17328),a=n(95527),i=n(5403),s=n(15451);const{pointsAreWithinCloseContourProximity:r}=a.polyline;function l(t,e){const n={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:t.viewport.id,annotationUID:e.annotationUID},{lineWidth:o,lineDash:a,color:i,fillColor:s,fillOpacity:r}=this.getAnnotationStyle({annotation:e,styleSpecifier:n}),{closed:l}=e.data.contour;return{color:i,width:o,lineDash:a,fillColor:s,fillOpacity:r,closePath:l}}function d(t,e,n){t?.viewport?.getImageData()&&(n.data.contour.closed?this.renderClosedContour(t,e,n):n.data.isOpenUShapeContour?(!function(t,e){e.data.openUShapeContourVectorToPeak||(e.data.openUShapeContourVectorToPeak=(0,i.h)(t,e))}(t,n),this.renderOpenUShapedContour(t,e,n)):this.renderOpenContour(t,e,n))}function c(t,e,n){if(n.parentAnnotationUID)return;const{viewport:a}=t,i=this._getRenderingOptions(t,n),r=[n.data.contour.polyline.map((t=>a.worldToCanvas(t))),...(0,s.A)(n,a)];(0,o.drawPath)(e,n.annotationUID,"1",r,i)}function u(t,e,n){const{viewport:a}=t,i=this._getRenderingOptions(t,n),s=n.data.contour.polyline.map((t=>a.worldToCanvas(t)));(0,o.drawPolyline)(e,n.annotationUID,"1",s,i);const r=n.data.handles.activeHandleIndex;if(!0===this.configuration.alwaysRenderOpenContourHandles?.enabled){const t=this.configuration.alwaysRenderOpenContourHandles.radius,a="0",l=[s[0],s[s.length-1]];0===r?l.shift():1===r&&l.pop(),(0,o.drawHandles)(e,n.annotationUID,a,l,{color:i.color,handleRadius:t})}if(null!==r){const t="1",a=s[0===r?0:s.length-1];(0,o.drawHandles)(e,n.annotationUID,t,[a],{color:i.color})}}function g(t,e,n){const{viewport:a}=t,{openUShapeContourVectorToPeak:i}=n.data,{polyline:s}=n.data.contour;if(this.renderOpenContour(t,e,n),!i)return;const r=a.worldToCanvas(s[0]),l=a.worldToCanvas(s[s.length-1]),d=[a.worldToCanvas(i[0]),a.worldToCanvas(i[1])],c=this._getRenderingOptions(t,n);(0,o.drawPolyline)(e,n.annotationUID,"first-to-last",[r,l],{color:c.color,width:c.width,closePath:!1,lineDash:"2,2"}),(0,o.drawPolyline)(e,n.annotationUID,"midpoint-to-open-contour",[d[0],d[1]],{color:c.color,width:c.width,closePath:!1,lineDash:"2,2"})}function m(t,e,n){const a=this._getRenderingOptions(t,n),{allowOpenContours:i}=this.configuration,{canvasPoints:s}=this.drawData;if(a.closePath=!1,(0,o.drawPolyline)(e,n.annotationUID,"1",s,a),i){const t=s[0],i=s[s.length-1];if(r(t,i,this.configuration.closeContourProximity))(0,o.drawPolyline)(e,n.annotationUID,"2",[i,t],a);else{const i="0";(0,o.drawHandles)(e,n.annotationUID,i,[t],{color:a.color,handleRadius:2})}}}function h(t,e,n){const{viewport:a}=t,{fusedCanvasPoints:i}=this.editData;if(void 0===i)return void this.renderClosedContour(t,e,n);const r=[i,...(0,s.A)(n,a)],l=this._getRenderingOptions(t,n);n.parentAnnotationUID&&l.fillOpacity&&(l.fillOpacity=0),(0,o.drawPath)(e,n.annotationUID,"preview-1",r,l)}function p(t,e,n){const{fusedCanvasPoints:a}=this.editData;if(void 0===a)return void this.renderOpenContour(t,e,n);const i=this._getRenderingOptions(t,n);(0,o.drawPolyline)(e,n.annotationUID,"preview-1",a,i)}function f(t,e,n){if(n.parentAnnotationUID)return;const{viewport:a}=t,i=this._getRenderingOptions(t,n),r=n.data.contour.polyline.map((t=>a.worldToCanvas(t))),l=(0,s.A)(n,a),d=r[0],c=[];for(let t=0;t<100;t++){const e=t/100*2*Math.PI,n=d[0]+6*Math.cos(e),o=d[1]+6*Math.sin(e);c.push([n,o])}const u=[[d[0]-12,d[1]],[d[0]+12,d[1]],[d[0],d[1]-12],[d[0],d[1]+12]];(0,o.drawPath)(e,n.annotationUID,"1-crosshair_v",[u[0],u[1]],i),(0,o.drawPath)(e,n.annotationUID,"1-crosshair_h",[u[2],u[3]],i);const g=[c,...l];(0,o.drawPath)(e,n.annotationUID,"1",g,i)}const v=function(t){t.renderContour=d.bind(t),t.renderClosedContour=c.bind(t),t.renderOpenContour=u.bind(t),t.renderPointContourWithMarker=f.bind(t),t.renderOpenUShapedContour=g.bind(t),t.renderContourBeingDrawn=m.bind(t),t.renderClosedContourBeingEdited=h.bind(t),t.renderOpenContourBeingEdited=p.bind(t),t._getRenderingOptions=l.bind(t)}},91350:(t,e,n)=>{n.d(e,{A:()=>f});var o=n(15327),a=n(3823),i=n(6030),s=n(2076),r=n(29601),l=n(82056),d=n(44049),c=n(75183),u=n(17343),g=n(64843);const{DefaultHistoryMemo:m}=o.utilities.HistoryMemo,{PointsManager:h}=o.utilities;class p extends i.A{static createAnnotation(...t){let e={annotationUID:null,highlighted:!0,invalidated:!0,metadata:{toolName:this.toolName},data:{text:"",handles:{points:new Array,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:""}};for(const n of t)e=o.utilities.deepMerge(e,n);return e}static createAnnotationForViewport(t,...e){return this.createAnnotation({metadata:t.getViewReference()},...e)}static createAndAddAnnotation(t,...e){const n=this.createAnnotationForViewport(t,...e);(0,l.addAnnotation)(n,t.element),(0,d.triggerAnnotationModified)(n,t.element)}constructor(t,e){super(t,e),this.mouseMoveCallback=(t,e)=>{if(!e)return!1;const{element:n,currentPoints:o}=t.detail,a=o.canvas;let i=!1;for(const t of e){if((0,s.isAnnotationLocked)(t.annotationUID)||!(0,r.isAnnotationVisible)(t.annotationUID))continue;const{data:e}=t,o=e.handles?e.handles.activeHandleIndex:void 0,l=this._imagePointNearToolOrHandle(n,t,a,6),d=l&&!t.highlighted,c=!l&&t.highlighted;d||c?(t.highlighted=!t.highlighted,i=!0):e.handles&&e.handles.activeHandleIndex!==o&&(i=!0)}return i},this.isSuvScaled=p.isSuvScaled,t.configuration?.getTextLines&&(this.configuration.getTextLines=t.configuration.getTextLines),t.configuration?.statsCalculator&&(this.configuration.statsCalculator=t.configuration.statsCalculator)}getHandleNearImagePoint(t,e,n,i){const s=(0,o.getEnabledElement)(t),{viewport:r}=s,{data:l}=e,{isCanvasAnnotation:d}=l,{points:c,textBox:u}=l.handles;if(u){const{worldBoundingBox:t}=u;if(t){const e={topLeft:r.worldToCanvas(t.topLeft),topRight:r.worldToCanvas(t.topRight),bottomLeft:r.worldToCanvas(t.bottomLeft),bottomRight:r.worldToCanvas(t.bottomRight)};if(n[0]>=e.topLeft[0]&&n[0]<=e.bottomRight[0]&&n[1]>=e.topLeft[1]&&n[1]<=e.bottomRight[1])return l.handles.activeHandleIndex=null,u}}for(let t=0;t<c?.length;t++){const e=c[t],o=d?e.slice(0,2):r.worldToCanvas(e);if(!0===a.Zc.distance(n,o)<i)return l.handles.activeHandleIndex=t,e}l.handles.activeHandleIndex=null}getLinkedTextBoxStyle(t,e){return{visibility:this.getStyle("textBoxVisibility",t,e),fontFamily:this.getStyle("textBoxFontFamily",t,e),fontSize:this.getStyle("textBoxFontSize",t,e),color:this.getStyle("textBoxColor",t,e),shadow:this.getStyle("textBoxShadow",t,e),background:this.getStyle("textBoxBackground",t,e),lineWidth:this.getStyle("textBoxLinkLineWidth",t,e),lineDash:this.getStyle("textBoxLinkLineDash",t,e)}}static isSuvScaled(t,e,n){if(t instanceof o.BaseVolumeViewport){const t=o.utilities.getVolumeId(e),n=o.cache.getVolume(t);return void 0!==n?.scaling?.PT}const a=n&&o.metaData.get("scalingModule",n);return"number"==typeof a?.suvbw}getAnnotationStyle(t){const{annotation:e,styleSpecifier:n}=t,o=t=>this.getStyle(t,n,e),{annotationUID:a}=e,i=(0,r.isAnnotationVisible)(a),l=(0,s.isAnnotationLocked)(a),d=o("lineWidth"),c=o("lineDash"),u=o("color"),g=o("markerSize");return{visibility:i,locked:l,color:u,lineWidth:d,lineDash:c,lineOpacity:1,fillColor:u,fillOpacity:0,shadow:o("shadow"),textbox:this.getLinkedTextBoxStyle(n,e),markerSize:g}}_imagePointNearToolOrHandle(t,e,n,o){if(this.getHandleNearImagePoint(t,e,n,o))return!0;return!!this.isPointNearTool(t,e,n,o,"mouse")||void 0}static createAnnotationState(t,e){const{data:n,annotationUID:o}=t,a={...n,cachedStats:{}};delete a.contour,delete a.spline;const i={annotationUID:o,data:structuredClone(a),deleting:e},s=n.contour;return s&&(i.data.contour={...s,polyline:null,pointsManager:h.create3(s.polyline.length,s.polyline)}),i}static createAnnotationMemo(t,e,n){if(!e)return;const{newAnnotation:a,deleting:i=!a&&void 0}=n||{},{annotationUID:s}=e,r=p.createAnnotationState(e,i),h={restoreMemo:()=>{const n=p.createAnnotationState(e,i),{viewport:a}=(0,o.getEnabledElement)(t)||{};if(a?.setViewReference(e.metadata),!0===r.deleting){if(r.deleting=!1,Object.assign(e.data,r.data),e.data.contour){const t=e.data;t.contour.polyline=r.data.contour.pointsManager.points,delete r.data.contour.pointsManager,t.segmentation&&(0,g.addContourSegmentationAnnotation)(e)}return r.data=n.data,(0,l.addAnnotation)(e,t),(0,u.setAnnotationSelected)(e.annotationUID,!0),void a?.render()}if(!1===r.deleting)return r.deleting=!0,r.data=n.data,(0,u.setAnnotationSelected)(e.annotationUID),(0,l.removeAnnotation)(e.annotationUID),void a?.render();const m=(0,l.getAnnotation)(s);m?(Object.assign(m.data,r.data),m.data.contour&&(m.data.contour.polyline=r.data.contour.pointsManager.points),r.data=n.data,m.invalidated=!0,(0,d.triggerAnnotationModified)(m,t,c.A.History)):console.warn("No current annotation")},id:s,operationType:"annotation"};return m.push(h),h}createMemo(t,e,n){this.memo||=p.createAnnotationMemo(t,e,n)}static hydrateBase(t,e,n,a={}){if(!e)return null;const{viewport:i}=e,s=i.getFrameOfReferenceUID(),r=i.getCamera(),l=a.viewplaneNormal??r.viewPlaneNormal,d=a.viewUp??r.viewUp,c=a.toolInstance||new t;let u,g=l,m=d;if(a.referencedImageId)u=a.referencedImageId,g=void 0,m=void 0;else if(i instanceof o.StackViewport){const t=o.utilities.getClosestStackImageIndexForPoint(n[0],i);void 0!==t&&(u=i.getImageIds()[t])}else{if(!(i instanceof o.BaseVolumeViewport))throw new Error("Unsupported viewport type");u=c.getReferencedImageId(i,n[0],l,d)}return{FrameOfReferenceUID:s,referencedImageId:u,viewPlaneNormal:g,viewUp:m,instance:c,viewport:i}}}p.toolName="AnnotationTool";const f=p},36320:(t,e,n)=>{n.d(e,{A:()=>A});var o=n(15327),a=n(99737),i=n(82056),s=n(17328),r=n(91350),l=n(72967),d=n(15451);class c extends r.A{constructor(t,e){super(t,e)}renderAnnotation(t,e){let n=!1;const{viewport:o}=t,{element:a}=o;if(!o.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let s=(0,i.getAnnotations)(this.getToolName(),a);if(!s?.length)return n;if(s=this.filterInteractableAnnotationsForElement(a,s),!s?.length)return n;const r=this.getTargetId(o),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:t.viewport.id};for(let o=0;o<s.length;o++){const a=s[o];l.annotationUID=a.annotationUID;const i=this.getAnnotationStyle({annotation:a,styleSpecifier:l});if(!i.visibility)continue;const d=this.renderAnnotationInstance({enabledElement:t,targetId:r,annotation:a,annotationStyle:i,svgDrawingHelper:e});n||=d,a.invalidated=!1}return n}createAnnotation(t){const e=super.createAnnotation(t);return Object.assign(e.data,{contour:{polyline:[],closed:!1}}),Object.assign(e,{interpolationUID:"",autoGenerated:!1}),e}addAnnotation(t,e){return(0,i.addAnnotation)(t,e)}cancelAnnotation(t){}moveAnnotation(t,e){const{points:n}=t.data.handles;for(let t=0,o=n.length;t<o;t++){const o=n[t];o[0]+=e[0],o[1]+=e[1],o[2]+=e[2]}t.invalidated=!0,(0,i.getChildAnnotations)(t).forEach((t=>this.moveAnnotation(t,e)))}updateContourPolyline(t,e,n,o){const a=this.configuration?.decimate||{};(0,l.A)(t,e,n,{decimate:{enabled:!!a.enabled,epsilon:a.epsilon},updateWindingDirection:o?.updateWindingDirection})}getPolylinePoints(t){return t.data.contour?.polyline??t.data.polyline}renderAnnotationInstance(t){const{enabledElement:e,annotationStyle:n,svgDrawingHelper:o}=t,a=t.annotation;if(a.parentAnnotationUID)return;const{annotationUID:i}=a,{viewport:r}=e,{worldToCanvas:l}=r,c=this.getPolylinePoints(a).map((t=>l(t))),{lineWidth:u,lineDash:g,color:m,fillColor:h,fillOpacity:p}=n,f=[c,...(0,d.A)(a,r)];return(0,s.drawPath)(o,i,"contourPolyline",f,{color:m,lineDash:g,lineWidth:Math.max(.1,u),fillColor:h,fillOpacity:p}),!0}}var u=n(49906),g=n(27740),m=n(64843),h=n(94779),p=n(77609),f=n(93210),v=n(67165),I=n(58859),C=n(60740),E=n(26795),D=n(86644);class A extends c{static{this.PreviewSegmentIndex=255}constructor(t,e){super(t,e),this.configuration.interpolation?.enabled&&g.A.addTool(this.getToolName())}isContourSegmentationTool(){return!0}createAnnotation(t){const e=t.detail,{element:n}=e,a=(0,o.getEnabledElement)(n);if(!a)return;const{viewport:i}=a,s=super.createAnnotation(t);if(!this.isContourSegmentationTool())return s;const r=(0,v.T)(i.id);if(!r)throw new Error("No active segmentation detected, create one before using scissors tool");if(!r.representationData.Contour)throw new Error("A contour segmentation must be active");const{segmentationId:l}=r,d=(0,C.Q)(l);return o.utilities.deepMerge(s,{data:{segmentation:{segmentationId:l,segmentIndex:d}}})}addAnnotation(t,e){const n=super.addAnnotation(t,e);if(this.isContourSegmentationTool()){const e=t;(0,m.addContourSegmentationAnnotation)(e)}return n}cancelAnnotation(t){this.isContourSegmentationTool()&&(0,m.removeContourSegmentationAnnotation)(t),super.cancelAnnotation(t)}getAnnotationStyle(t){const e=super.getAnnotationStyle(t);if(!this.isContourSegmentationTool())return e;const n=this._getContourSegmentationStyle(t);return o.utilities.deepMerge(e,n)}renderAnnotationInstance(t){const{annotation:e}=t,{invalidated:n}=e,o=super.renderAnnotationInstance(t);if(n&&this.isContourSegmentationTool()){const{segmentationId:t}=e.data.segmentation;(0,u.triggerSegmentationDataModified)(t);const n=(0,I.P)(t).map((t=>(0,p.getToolGroupForViewport)(t).id));(0,h._)(n)}return o}_getContourSegmentationStyle(t){const e=t.annotation,{segmentationId:n,segmentIndex:o}=e.data.segmentation,{viewportId:i}=t.styleSpecifier,s=(0,f.r$)(i,{segmentationId:n});if(!s?.length)return{};let r;r=s.length>1?s.find((t=>t.segmentationId===n&&t.type===a.SegmentationRepresentations.Contour)):s[0];const{autoGenerated:l}=e,d=(0,E.getLockedSegmentIndices)(n).includes(o),{color:c,fillColor:u,lineWidth:g,fillOpacity:m,lineDash:h,visibility:p}=(0,D.u)({segmentationId:n,segmentIndex:o,viewportId:i,autoGenerated:l});return{color:c,fillColor:u,lineWidth:g,fillOpacity:m,lineDash:h,textbox:{color:c},visibility:p,locked:d}}}},67772:(t,e,n)=>{n.d(e,{A:()=>a});const o={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};const a=function(){return o}},22384:(t,e,n)=>{n.d(e,{d:()=>d});var o=n(82056),a=n(15327),i=n(64485),s=n(64843);n(35056),n(74966),n(87275);var r=n(99737),l=n(92686);function d(t,e,n,d){n.size?t.render():function(t,e,n){const{segmentationId:d}=n,c=new Map;e.forEach((e=>{const n=a.cache.getGeometry(e);if(!n)return void console.warn(`No geometry found for geometryId ${e}. Skipping render.`);const u=n.data.segmentIndex;!function(t){if(!t)throw new Error(`No contours found for geometryId ${t.id}`);const e=t.id;if(t.type!==a.Enums.GeometryType.CONTOUR)throw new Error(`Geometry type ${t.type} not supported for rendering.`);t.data||console.warn(`No contours found for geometryId ${e}. Skipping render.`)}(n);const g=l.Y.getStyle({viewportId:t.id,segmentationId:d,type:r.SegmentationRepresentations.Contour,segmentIndex:u}),m=n.data,h=t.getCamera().viewPlaneNormal;m.contours.forEach((e=>{const{points:n,color:r,id:l}=e,c=(0,i.x)(t,n[0],h),g={annotationUID:a.utilities.uuidv4(),data:{contour:{closed:!0,polyline:n},segmentation:{segmentationId:d,segmentIndex:u,color:r,id:l},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!0,isVisible:!0,metadata:{referencedImageId:c,toolName:"PlanarFreehandContourSegmentationTool",FrameOfReferenceUID:t.getFrameOfReferenceUID(),viewPlaneNormal:t.getCamera().viewPlaneNormal}},m=t.element;(0,o.addAnnotation)(g,m),(0,s.addContourSegmentationAnnotation)(g)})),g&&c.set(u,g)})),t.resetCamera(),t.render()}(t,e,d)}},87420:(t,e,n)=>{n.d(e,{A:()=>i});var o=n(33283),a=n(6802);const i=function(t,e,n=!1){const i=(0,o.T)(e),{annotationUIDsMap:s}=i.representationData.Contour;s.forEach((t=>{t.forEach((t=>{(0,a.O8)(t)}))}))}},63597:(t,e,n)=>{n.d(e,{A:()=>u});var o=n(15327),a=n(97577),i=n(33283),s=n(49906),r=n(99737);const l=new Map,d=({cfun:t,ofun:e,actor:n})=>{n.getProperty().setRGBTransferFunction(1,t),n.getProperty().setScalarOpacity(1,e)};const{uuidv4:c}=o.utilities;const u=async function(t,e,n,u){const g=(0,o.getEnabledElement)(t),{renderingEngine:m,viewport:h}=g,{id:p}=h;if(h instanceof o.BaseVolumeViewport){const t=function(t,e){let{volumeId:n}=t;if(!n){n=c();const o=(0,i.T)(e);o.representationData.Labelmap={...o.representationData.Labelmap,volumeId:n},t.volumeId=n,(0,s.triggerSegmentationModified)(e)}return n}(e,n);o.cache.getVolume(t)||await async function(t){const e=t;if(!(e.imageIds.length>0))throw new Error("cannot create labelmap, no imageIds found for the volume labelmap");const n=await o.volumeLoader.createAndCacheVolumeFromImages(t.volumeId||c(),e.imageIds);return n}(e);let a=u?.blendMode??o.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND,g=a===o.Enums.BlendModes.LABELMAP_EDGE_PROJECTION_BLEND;if(g){const e=h.getVolumeId(),n=o.cache.getVolume(e),i=o.cache.getVolume(t).dimensions,s=n.dimensions;i[0]===s[0]&&i[1]===s[1]&&i[2]===s[2]||(g=!1,a=o.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND,console.debug("Dimensions mismatch - falling back to regular volume addition"))}const f=[{volumeId:t,visibility:true,representationUID:`${n}-${r.SegmentationRepresentations.Labelmap}`,useIndependentComponents:g,blendMode:a}];if(f[0].useIndependentComponents){const t=await async function({viewport:t,volumeInputs:e,segmentationId:n}){const a=t.getDefaultActor(),{actor:s}=a,{uid:c,callback:u}=a,g=t.getVolumeId();if(l.get(c)?.added)return{uid:c,actor:s};const m=e,h=o.cache.getVolume(m[0].volumeId);if(!h)throw new Error(`imageVolume with id: ${h.volumeId} does not exist`);const{volumeId:p}=m[0],f=await o.volumeLoader.loadVolume(p);if(!f)throw new Error(`segImageVolume with id: ${f.volumeId} does not exist`);const v=f.voxelManager.getCompleteScalarDataArray(),{imageData:I}=f,C=o.cache.getVolume(g),E=C.voxelManager.getCompleteScalarDataArray(),D=new Float32Array(2*C.voxelManager.getScalarDataLength()),A=I.getDimensions();for(let t=0;t<A[2];++t)for(let e=0;e<A[1];++e)for(let n=0;n<A[0];++n){const o=n+A[0]*(e+A[1]*t);D[2*o+0]=E[o],D[2*o+1]=v[o]}t.removeActors([c]);const w=s.getMapper(),x=(0,o.convertMapperToNotSharedMapper)(w);s.setMapper(x),x.setBlendMode(o.Enums.BlendModes.LABELMAP_EDGE_PROJECTION_BLEND);const S=x.getInputData().getPointData().getArray(0);function b(e){const{segmentationId:n}=e.detail,{representationData:a}=(0,i.T)(n),{volumeId:s}=a.Labelmap;if(s!==f.volumeId)return;const r=o.cache.getVolume(s).voxelManager,l=x.getInputData(),d=l.getPointData().getArray(0),c=d.getData(),u=I.getDimensions(),g=Array.from({length:u[2]},((t,e)=>e));for(const t of g)for(let e=0;e<u[1];++e)for(let n=0;n<u[0];++n){const o=n+u[0]*(e+u[1]*t);c[2*o+1]=r.getAtIndex(o)}d.setData(c),l.modified(),t.render()}return S.setData(D),S.setNumberOfComponents(2),s.getProperty().setColorMixPreset(1),s.getProperty().setForceNearestInterpolation(1,!0),s.getProperty().setIndependentComponents(!0),t.addActor({actor:s,uid:c,callback:u,referencedId:g,representationUID:`${n}-${r.SegmentationRepresentations.Labelmap}`}),l.set(c,{added:!0,segmentationRepresentationUID:`${n}`,originalBlendMode:t.getBlendMode()}),s.set({preLoad:d}),o.eventTarget.addEventListenerDebounced(r.Events.SEGMENTATION_DATA_MODIFIED,b,200),o.eventTarget.addEventListener(r.Events.SEGMENTATION_REPRESENTATION_REMOVED,(async e=>{o.eventTarget.removeEventListener(r.Events.SEGMENTATION_DATA_MODIFIED,b);const n=t.getActor(c),{element:a,id:i}=t;t.removeActors([c]);const s=await(0,o.createVolumeActor)({volumeId:c,blendMode:o.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND,callback:({volumeActor:t})=>{n.callback&&n.callback({volumeActor:t,volumeId:p})}},a,i);t.addActor({actor:s,uid:c}),t.render()})),{uid:c,actor:s}}({viewport:h,volumeInputs:f,segmentationId:n});return t}await(0,o.addVolumesToViewports)(m,f,[p],false,true)}else{const t=(0,a.aF)(h.id,n).map((t=>({imageId:t,representationUID:`${n}-${r.SegmentationRepresentations.Labelmap}-${t}`})));(0,o.addImageSlicesToViewports)(m,t,[p])}(0,s.triggerSegmentationDataModified)(n)}},53486:(t,e,n)=>{n.d(e,{A:()=>a});const o={renderOutline:!0,renderOutlineInactive:!0,outlineWidth:3,outlineWidthInactive:2,activeSegmentOutlineWidthDelta:0,renderFill:!0,renderFillInactive:!0,fillAlpha:.5,fillAlphaInactive:.4,outlineOpacity:1,outlineOpacityInactive:.85};const a=function(){return o}},88234:(t,e,n)=>{n.d(e,{A:()=>i});var o=n(15327),a=n(59452);const i=function(t,e){const n=(0,o.getEnabledElement)(t),{viewport:i}=n;i.removeActors([(0,a.Qe)(i.id,e)])}},18796:(t,e,n)=>{n.d(e,{A:()=>d});var o=n(15327),a=n(82409),i=n(7019),s=n(87275),r=n(35056),l=n(59452);const d=function(t,e,n){const d=(0,o.getEnabledElement)(t),{viewport:c}=d,u=(0,l.Th)(c.id,n,e.segmentIndex),g=u?.actor,m=e.visible;if(g){if(g.setVisibility(m),!m)return;const t=g.getMapper(),n=t.getInputData(),o=e.points,a=e.polys,i=n.getPoints().getData(),l=n.getPolys().getData();if(o.length===i.length&&a.length===l.length)return;const d=s.Ay.newInstance();d.getPoints().setData(o,3);const u=r.Ay.newInstance({values:Float32Array.from(a)});return d.setPolys(u),t.setInputData(d),t.modified(),void c.getRenderer().resetCameraClippingRange()}const h=e.points,p=e.polys,f=e.color,v=s.Ay.newInstance();v.getPoints().setData(h,3);const I=r.Ay.newInstance({values:Float32Array.from(p)});v.setPolys(I);const C=a.Ay.newInstance({});C.setInputData(v);const E=i.Ay.newInstance();E.setMapper(C),E.getProperty().setColor(f[0]/255,f[1]/255,f[2]/255),E.getProperty().setLineWidth(2);const D=(0,l.DU)(n,e.segmentIndex);c.addActor({uid:o.utilities.uuidv4(),actor:E,clippingFilter:undefined,representationUID:D}),c.resetCamera(),c.getRenderer().resetCameraClippingRange(),c.render()}},20552:(t,e,n)=>{n.d(e,{A:()=>a});var o=n(15327);const a=function(t,e){const n=(0,o.getEnabledElement)(t),{viewport:a}=n,i=a.getActors().filter((t=>t.representationUID&&"string"==typeof t.representationUID&&t.representationUID.startsWith(e)));a.removeActors(i.map((t=>t.uid)))}},55887:(t,e,n)=>{n.d(e,{A:()=>r});n(15327);var o=n(49906),a=n(11990),i=n(40905),s=n(99737);class r{static{this.COMPOSITIONS=a.A}static{this.childFunctions={[s.StrategyCallbacks.OnInteractionStart]:l(s.StrategyCallbacks.OnInteractionStart,s.StrategyCallbacks.Initialize),[s.StrategyCallbacks.OnInteractionEnd]:l(s.StrategyCallbacks.OnInteractionEnd,s.StrategyCallbacks.Initialize),[s.StrategyCallbacks.Fill]:l(s.StrategyCallbacks.Fill),[s.StrategyCallbacks.Initialize]:l(s.StrategyCallbacks.Initialize),[s.StrategyCallbacks.CreateIsInThreshold]:d(s.StrategyCallbacks.CreateIsInThreshold),[s.StrategyCallbacks.Interpolate]:l(s.StrategyCallbacks.Interpolate,s.StrategyCallbacks.Initialize),[s.StrategyCallbacks.AcceptPreview]:l(s.StrategyCallbacks.AcceptPreview,s.StrategyCallbacks.Initialize),[s.StrategyCallbacks.RejectPreview]:l(s.StrategyCallbacks.RejectPreview,s.StrategyCallbacks.Initialize),[s.StrategyCallbacks.INTERNAL_setValue]:d(s.StrategyCallbacks.INTERNAL_setValue),[s.StrategyCallbacks.Preview]:d(s.StrategyCallbacks.Preview,!1),[s.StrategyCallbacks.ComputeInnerCircleRadius]:l(s.StrategyCallbacks.ComputeInnerCircleRadius),[s.StrategyCallbacks.EnsureSegmentationVolumeFor3DManipulation]:l(s.StrategyCallbacks.EnsureSegmentationVolumeFor3DManipulation),[s.StrategyCallbacks.EnsureImageVolumeFor3DManipulation]:l(s.StrategyCallbacks.EnsureImageVolumeFor3DManipulation),[s.StrategyCallbacks.AddPreview]:l(s.StrategyCallbacks.AddPreview),[s.StrategyCallbacks.GetStatistics]:d(s.StrategyCallbacks.GetStatistics),compositions:null}}constructor(t,...e){this._initialize=[],this._fill=[],this._onInteractionStart=[],this.fill=(t,e)=>{const n=this.initialize(t,e,s.StrategyCallbacks.Fill);if(!n)return;this._fill.forEach((t=>t(n)));const{segmentationVoxelManager:a,segmentIndex:i}=n;return(0,o.triggerSegmentationDataModified)(n.segmentationId,a.getArrayOfModifiedSlices(),i),n},this.onInteractionStart=(t,e)=>{const n=this.initialize(t,e);n&&this._onInteractionStart.forEach((t=>t.call(this,n)))},this.addPreview=(t,e)=>{const n=this.initialize(t,e,s.StrategyCallbacks.AddPreview);if(n)return n},this.configurationName=t,this.compositions=e,e.forEach((t=>{const e="function"==typeof t?t():t;if(e)for(const t in e){if(!r.childFunctions[t])throw new Error(`Didn't find ${t} as a brush strategy`);r.childFunctions[t](this,e[t])}})),this.strategyFunction=(t,e)=>this.fill(t,e);for(const t of Object.keys(r.childFunctions))this.strategyFunction[t]=this[t]}initialize(t,e,n){const{viewport:o}=t,a=(0,i.S)({operationData:e,viewport:o,strategy:this});if(!a)return null;const{imageVoxelManager:s,segmentationVoxelManager:r,segmentationImageData:l}=a,d=e.createMemo(e.segmentationId,r),c={operationName:n,...e,segmentIndex:e.segmentIndex,enabledElement:t,imageVoxelManager:s,segmentationVoxelManager:r,segmentationImageData:l,viewport:o,centerWorld:null,isInObject:null,isInObjectBoundsIJK:null,brushStrategy:this,memo:d};return this._initialize.forEach((t=>t(c))),c}}function l(t,e){const n=`_${t}`;return(o,a)=>{o[n]||=[],o[n].push(a),o[t]||=e?(a,i,...s)=>{const r=o[e](a,i,t);let l;return o[n].forEach((t=>{const e=t.call(o,r,...s);l||=e})),l}:(t,...e)=>{o[n].forEach((n=>n.call(o,t,...e)))}}}function d(t,e=!0){return(n,o)=>{if(n[t])throw new Error(`The singleton method ${t} already exists`);n[t]=e?o:(t,e,...a)=>(e.enabledElement=t,o.call(n,e,...a))}}},11990:(t,e,n)=>{n.d(e,{A:()=>w});var o=n(84093);const a={[o.A.OnInteractionStart]:t=>{const{segmentIndex:e,previewSegmentIndex:n,segmentationVoxelManager:o,centerIJK:a,viewPlaneNormal:i,segmentationImageData:s,configuration:r}=t;if(!r?.useCenterSegmentIndex)return;let l=!1,d=!1;const c=[...o.getBoundsIJK()];Math.abs(i[0])>.8?c[0]=[a[0],a[0]]:Math.abs(i[1])>.8?c[1]=[a[1],a[1]]:Math.abs(i[2])>.8&&(c[2]=[a[2],a[2]]);if(o.forEach((({value:t})=>{l||=t===e,d||=t===n}),{imageData:s,isInObject:t.isInObject,boundsIJK:c}),!l&&!d)return void(t.centerSegmentIndexInfo.segmentIndex=null);const u=o.getAtIJKPoint(a);t.centerSegmentIndexInfo.segmentIndex=u,t.centerSegmentIndexInfo.hasSegmentIndex=l,t.centerSegmentIndexInfo.hasPreviewIndex=d}};var i=n(3823);const s={[o.A.Initialize]:t=>{const{operationName:e,centerIJK:n,segmentationVoxelManager:a,imageVoxelManager:s,configuration:r,segmentIndex:l,viewport:d}=t;if(!r?.threshold?.isDynamic||!n||!l)return;if(e===o.A.RejectPreview||e===o.A.OnInteractionEnd)return;const c=a.getBoundsIJK(),{range:u,dynamicRadius:g=0}=r.threshold,m=u?0:g,{viewPlaneNormal:h}=d.getCamera(),p=c.map(((t,e)=>{const[o,a]=t;return[Math.max(o,n[e]-m),Math.min(a,n[e]+m)]}));Math.abs(h[0])>.8?p[0]=[n[0],n[0]]:Math.abs(h[1])>.8?p[1]=[n[1],n[1]]:Math.abs(h[2])>.8&&(p[2]=[n[2],n[2]]);const f=u||[1/0,-1/0],v=m*m;s.forEach((({value:t,pointIJK:e})=>{if(i.eR.sqrDist(n,e)>v)return;const o=Array.isArray(t)?i.eR.len(t):t;f[0]=Math.min(o,f[0]),f[1]=Math.max(o,f[1])}),{boundsIJK:p}),r.threshold.range=f},[o.A.OnInteractionStart]:t=>{const{configuration:e}=t;e?.threshold?.isDynamic&&(e.threshold.range=null)},[o.A.ComputeInnerCircleRadius]:t=>{const{configuration:e,viewport:n}=t,{dynamicRadius:o=0,isDynamic:a}=e.threshold;if(!a)return void(e.threshold.dynamicRadiusInCanvas=0);if(0===o)return;const i=n.getImageData();if(!i)return;const{spacing:s}=i,r=[n.element.clientWidth/2,n.element.clientHeight/2],l=o*s[0],d=n.canvasToWorld(r).map((t=>t+l)),c=n.worldToCanvas(d),u=Math.abs(r[0]-c[0]);e.threshold.dynamicRadiusInCanvas||(e.threshold.dynamicRadiusInCanvas=0),e.threshold.dynamicRadiusInCanvas=3+u}},r={[o.A.Initialize]:t=>{t.segmentIndex=0}};var l=n(49906),d=n(67912);const c={[o.A.OnInteractionEnd]:t=>{const{previewSegmentIndex:e,segmentIndex:n,viewport:o,segmentationVoxelManager:a,activeStrategy:i,memo:s}=t;if("THRESHOLD_INSIDE_SPHERE_WITH_ISLAND_REMOVAL"!==i||null===n)return;const r=new d.A,c=s?.voxelManager||a;if(!r.initialize(o,c,{previewSegmentIndex:e,segmentIndex:n}))return;r.floodFillSegmentIsland(),r.removeExternalIslands(),r.removeInternalIslands();const u=c.getArrayOfModifiedSlices();u&&(0,l.triggerSegmentationDataModified)(t.segmentationId,u,e)}};var u=n(15327),g=n(98798),m=n(93733),h=n(58859);const p={[o.A.Preview]:function(t){const{previewSegmentIndex:e,configuration:n,enabledElement:o}=t;if(!e||!n)return;this.onInteractionStart?.(o,t);const a=this.fill(o,t);return a&&this.onInteractionEnd?.(o,t),a},[o.A.Initialize]:t=>{const{segmentIndex:e,previewColor:n,previewSegmentIndex:o}=t;if(null==o||null==e)return;const a=(0,h.P)(t.segmentationId);a?.forEach((e=>{(0,m.setSegmentIndexColor)(e,t.segmentationId,o,n)}))},[o.A.AcceptPreview]:t=>{const{previewSegmentIndex:e,segmentationVoxelManager:n,memo:o,segmentIndex:a,centerSegmentIndexInfo:i}=t||{},{changedIndices:s}=i||{},r=o;n.forEach((({index:t})=>{const o=n.getAtIndex(t);s?.length>0?s.includes(t)&&r.voxelManager.setAtIndex(t,0):o===e&&r.voxelManager.setAtIndex(t,a)})),(0,g.Q)(t.segmentationId,n.getArrayOfModifiedSlices(),a),t.centerSegmentIndexInfo.changedIndices=[]},[o.A.RejectPreview]:t=>{t&&u.utilities.HistoryMemo.DefaultHistoryMemo.undoIf((e=>{const n=e;if(!n?.voxelManager)return!1;const{segmentationVoxelManager:o}=n;let a=!1;return o.forEach((({value:e})=>{e===t.previewSegmentIndex&&(a=!0)})),a}))}},f={[o.A.Fill]:t=>{const{segmentsLocked:e,segmentationImageData:n,segmentationVoxelManager:o,brushStrategy:a,centerIJK:i}=t,s=a.createIsInThreshold?.(t),{setValue:r}=a,l=s?n=>{const{value:o,index:a}=n;!e.includes(o)&&s(a)&&r(t,n)}:e=>r(t,e);o.forEach(l,{imageData:n,isInObject:t.isInObject,boundsIJK:t.isInObjectBoundsIJK}),o.addPoint(i)}};const v={[o.A.INTERNAL_setValue]:(t,{value:e,index:n})=>{const{segmentsLocked:o,previewSegmentIndex:a,memo:i,segmentationVoxelManager:s,centerSegmentIndexInfo:r,segmentIndex:l}=t,d=s.getAtIndex(n);if(!o.includes(e)&&(r||d!==l)&&(0===r?.segmentIndex||d!==l))if(null!==r?.segmentIndex){if(!a){let t=l;return r&&(t=r.segmentIndex),void i.voxelManager.setAtIndex(n,t)}!function({operationData:t,existingValue:e,index:n}){const{previewSegmentIndex:o,memo:a,centerSegmentIndexInfo:i,previewOnHover:s,segmentIndex:r}=t,{hasPreviewIndex:l,hasSegmentIndex:d,segmentIndex:c}=i;if(0===c&&d&&l){if(e===r)return;if(s)return;return e===o?void a.voxelManager.setAtIndex(n,0):void 0}if(0===c&&d&&!l){if(0===e||e!==r)return;return a.voxelManager.setAtIndex(n,o),void i.changedIndices.push(n)}if(0===c&&!d&&l){if(e===r)return;if(s)return;return e===o?void a.voxelManager.setAtIndex(n,0):void 0}if(0===c&&!d&&!l){if(e===r)return;return e===o?void a.voxelManager.setAtIndex(n,o):void 0}if(c===o&&d&&l){if(e===r)return;a.voxelManager.setAtIndex(n,o)}else if(c!==o||d||!l)if(c===r&&d&&l){if(e===r)return;a.voxelManager.setAtIndex(n,o)}else if(c!==r||!d||l);else{if(e===r)return;a.voxelManager.setAtIndex(n,o)}else{if(e===r)return;a.voxelManager.setAtIndex(n,o)}}({operationData:t,existingValue:d,index:n})}else i.voxelManager.setAtIndex(n,a??l)}},I={[o.A.CreateIsInThreshold]:t=>{const{imageVoxelManager:e,segmentIndex:n,configuration:o}=t;if(o&&n)return t=>{const n=e.getAtIndex(t),a=Array.isArray(n)?i.eR.length(n):n,{threshold:s}=o||{};return!s?.range?.length||s.range[0]<=a&&a<=s.range[1]}}};var C=n(38440);const E={[o.A.GetStatistics]:function(t,e,n){const{indices:o}=n,{segmentationId:a,viewport:i}=e;(0,C.A)({segmentationId:a,segmentIndices:o})}};var D=n(38732),A=n(62753);const w={determineSegmentIndex:a,dynamicThreshold:s,erase:r,islandRemoval:c,preview:p,regionFill:f,setValue:v,threshold:I,labelmapStatistics:E,ensureSegmentationVolumeFor3DManipulation:D.A,ensureImageVolumeFor3DManipulation:A.A}},33852:(t,e,n)=>{n.d(e,{r:()=>s});var o=n(55887),a=n(56789),i=n(11990);const s=new o.A("EraseCircle",i.A.erase,...a.pB.compositions).strategyFunction},1989:(t,e,n)=>{n.d(e,{_:()=>s});var o=n(55887),a=n(17492),i=n(11990);const s=new o.A("EraseSphere",i.A.erase,...a.u8.compositions).strategyFunction},17492:(t,e,n)=>{n.d(e,{Jq:()=>m,Sw:()=>v,rd:()=>f,u8:()=>g});var o=n(15327),a=n(3823),i=n(55887),s=n(11990),r=n(84093),l=n(56789),d=n(4296);const{transformWorldToIndex:c}=o.utilities,u={[r.A.Initialize]:t=>{const{points:e,viewport:n,segmentationImageData:o}=t;if(!e)return;const i=a.eR.fromValues(0,0,0);e.forEach((t=>{a.eR.add(i,i,t)})),a.eR.scale(i,i,1/e.length),t.centerWorld=i,t.centerIJK=c(o,i);const{boundsIJK:s,topLeftWorld:r,bottomRightWorld:u}=(0,d.l)(e.slice(0,2),o,n);t.isInObjectBoundsIJK=s,t.isInObject=(0,l.mu)({topLeftWorld:r,bottomRightWorld:u,center:i})}},g=new i.A("Sphere",s.A.regionFill,s.A.setValue,u,s.A.determineSegmentIndex,s.A.preview,s.A.labelmapStatistics,s.A.ensureSegmentationVolumeFor3DManipulation),m=g.strategyFunction,h=new i.A("SphereThreshold",...g.compositions,s.A.dynamicThreshold,s.A.threshold,s.A.ensureSegmentationVolumeFor3DManipulation,s.A.ensureImageVolumeFor3DManipulation),p=new i.A("SphereThreshold",...g.compositions,s.A.dynamicThreshold,s.A.threshold,s.A.islandRemoval,s.A.ensureSegmentationVolumeFor3DManipulation,s.A.ensureImageVolumeFor3DManipulation),f=h.strategyFunction,v=p.strategyFunction},40905:(t,e,n)=>{n.d(e,{S:()=>r});var o=n(15327),a=n(98870),i=n(91963),s=n(12853);function r({operationData:t,viewport:e,strategy:n}){return t?"volumeId"in t&&null!=t.volumeId||"referencedVolumeId"in t&&null!=t.referencedVolumeId?function({operationData:t}){const{volumeId:e}=t;if(!e){const t=new CustomEvent(o.Enums.Events.ERROR_EVENT,{detail:{type:"Segmentation",message:"No volume id found for the segmentation"},cancelable:!0});return o.eventTarget.dispatchEvent(t),null}const n=o.cache.getVolume(e),a=(0,s.b)(e);if(!n||!a)return null;const{imageData:i}=n,{voxelManager:r}=n,{voxelManager:l,imageData:d}=a;return{segmentationImageData:i,segmentationVoxelManager:r,segmentationScalarData:null,imageScalarData:null,imageVoxelManager:l,imageData:d}}({operationData:t}):function({operationData:t,viewport:e,strategy:n}){const{segmentationId:s}=t;let r,l,d,c,u,g;if(n.ensureSegmentationVolumeFor3DManipulation)n.ensureSegmentationVolumeFor3DManipulation({operationData:t,viewport:e}),l=t.segmentationVoxelManager,r=t.segmentationImageData,d=null;else{const n=(0,a.getCurrentLabelmapImageIdForViewport)(e.id,s);if(!n)return null;const c=(0,i.wV)(e.id,s);if(!c)return null;const u=o.cache.getImage(n);r=c.actor.getMapper().getInputData(),l=u.voxelManager;const g=t.imageId,m=o.cache.getImage(g);if(!m)return null;d=m.getPixelData?.()}if(n.ensureImageVolumeFor3DManipulation)n.ensureImageVolumeFor3DManipulation({operationData:t,viewport:e}),u=t.imageVoxelManager,c=t.imageScalarData,g=t.imageData;else{const t=e.getCurrentImageId();if(!t)return null;const n=o.cache.getImage(t);g=n?null:e.getImageData(),c=n?.getPixelData()||g.getScalarData(),u=n?.voxelManager}return{segmentationImageData:r,segmentationScalarData:d,imageScalarData:c,segmentationVoxelManager:l,imageVoxelManager:u,imageData:g}}({operationData:t,viewport:e,strategy:n}):null}},109:(t,e,n)=>{n.d(e,{A:()=>a});class o{constructor(){}static getContourSequence(t,e){const{data:n}=t,{projectionPoints:o,projectionPointsImageIds:a}=n.cachedStats;return o.map(((t,n)=>{const o=function(t){const e=[...t[0],...t[1],...t[3],...t[2]],n=e.flat().map((t=>t.toFixed(2)));return n}(t),i=function(t,e){const n=e.get("sopCommonModule",t);return{ReferencedSOPClassUID:n.sopClassUID,ReferencedSOPInstanceUID:n.sopInstanceUID}}(a[n],e);return{NumberOfContourPoints:o.length/3,ContourImageSequence:i,ContourGeometricType:"CLOSED_PLANAR",ContourData:o}}))}}o.toolName="RectangleROIStartEndThreshold";const a=o},55421:(t,e,n)=>{n.d(e,{A:()=>i});var o=n(82056);const a="PlanarFreehandContourSegmentationTool";function i(t,e=[]){const{viewport:n,sliceData:i,annotation:s}=t,r=new Map,{toolName:l,originalToolName:d}=s.metadata,c=d||l,u=((0,o.getAnnotations)(c,n.element)||[]).filter((t=>!t.metadata.originalToolName||t.metadata.originalToolName===c));if(c!==a){const t=(0,o.getAnnotations)(a,n.element);t?.length&&t.forEach((t=>{const{metadata:e}=t;e.originalToolName===c&&e.originalToolName!==e.toolName&&u.push(t)}))}if(!u?.length)return r;for(let t=0;t<i.numberOfSlices;t++){const n=u.filter((e=>e.metadata.sliceIndex===t));if(!n?.length)continue;const o=n.filter((t=>e.every((e=>{const n=e.parentKey?e.parentKey(t):t,o=n?.[e.key];return Array.isArray(o)?o.every(((t,n)=>t===e.value[n])):o===e.value}))));o.length&&r.set(t,o)}return r}},51893:(t,e,n)=>{n.d(e,{A:()=>a});var o=n(55421);function a(t,e){const n=(0,o.A)(t,e),a=[];if(!n?.size)return a;for(const t of n.values())t.forEach((t=>{a.push(t)}));return a}},73816:(t,e,n)=>{n.d(e,{A:()=>O});var o=n(15327),a=n(3823);function i(t,e,n){const a=o.utilities.deepMerge({data:{},metadata:{}},n);return Object.assign(a,{highlighted:!1,invalidated:!0,autoGenerated:!0,annotationUID:void 0,cachedStats:{},childAnnotationUIDs:[],parentAnnotationUID:void 0}),Object.assign(a.data,{handles:{points:e.points||e||[],interpolationSources:e.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:t}}),a}var s=n(55421);function r(t,e){const n=t.get(e);return!n?.length||1===n.length&&n[0].autoGenerated}function l(t,e,n){const[o]=t;e[o]||={pair:t,list:[]},e[o].list.push(n)}function d(t,e,n){const o=[];let a=!0;for(let i=t-1;i>=e[0];i--){const t=n.get(i);if(t?.length){if(t[0].autoGenerated)continue;t.length>1&&(a=!1),o.push(i);break}}if(a&&o.length){for(let i=t+1;i<=e[1];i++){const t=n.get(i);if(t?.length){if(t[0].autoGenerated)continue;t.length>1&&(a=!1),o.push(i);break}}if(a&&!(o.length<2))return o}}const c=function(t,e){const n=(0,s.A)(e,[{key:"interpolationUID",value:e.interpolationUID}]),o=function(t){let e=1/0,n=-1/0,o=!1;for(const[a,i]of t.entries())i.length&&(e=Math.min(a,e),n=Math.max(a,n),o=!0);if(!o)return;return[e,n]}(n);if(!o)return void console.warn("No annotations found to interpolate",n);const a=function(t,e){for(const[n,o]of t)for(let t=0;t<o.length;t++)if(o[t].annotationUID===e)return n;return}(n,t.annotationUID),i=[];for(let t=o[0]+1;t<o[1];t++)if(r(n,t)){const e=d(t,o,n);e?.[0]!==a&&e?.[1]!==a||l(e,i,t)}return{interpolationData:n,interpolationList:i}};var u=n(94021),g=n(47807);const{PointsManager:m}=o.utilities;function h(t,e=12){const n=m.create3(e);n.sources=[];const{sources:o}=n,{length:i,sources:s=[]}=t;if(i<15)return t.subselect(e);const r=Math.floor(Math.max(2*i/e,10));s.forEach((()=>o.push(m.create3(e))));const l=function(t,e=6){const{length:n}=t,o=a.eR.create(),i=a.eR.create(),s=new Float32Array(n);for(let r=0;r<n;r++){const l=t.getPoint(r),d=t.getPoint(r-e),c=t.getPoint((r+e)%n);a.eR.sub(o,l,d),a.eR.sub(i,c,l);const u=a.eR.dot(o,i)/(a.eR.len(o)*a.eR.len(i));s[r]=u}return s}(t,5),d=function(t,e){const{max:n,deviation:o}=function(t){const{length:e}=t;let n=0,o=1/0,a=-1/0,i=0;for(let i=0;i<e;i++){const e=t[i];n+=e,o=Math.min(o,e),a=Math.max(a,e)}const s=n/e;for(let n=0;n<e;n++){const e=t[n]-s;i+=e*e}return{mean:s,max:a,min:o,sumSq:i,deviation:Math.sqrt(i/e)}}(t),{length:a}=t;if(o<.01||a<3*e)return[];const i=[];let s,r=null,l=0;for(let e=0;e<a;e++){const a=t[e];a<n-o?r?(r[2]=e,a<s&&(s=a,l=e),r[1]=l):(s=a,l=e,r=[e,e,e]):r&&(i.push(r),r=null)}r&&(0===i[0][0]?i[0][0]=r[0]:(r[1]=l,r[2]=a-1,i.push(r)));return i}(l,e),c=[];if(d?.length>2){let t=-1;const e=r/3;d.forEach((n=>{const[o,,a]=n,s=Math.ceil((o+a)/2);a-t<e||(s-o>2*e?(p(c,t,o,r,i),t=p(c,o,s,r,i)):t=p(c,t,s,r,i),a-t>e&&(t=p(c,t,a,r,i)))}));const n=c[0];f(n+i-t,i)>2*e&&p(c,t,n-e,r,i)}else{const t=Math.floor(i/e);p(c,-1,i-t,t,i)}return c.forEach((e=>{const a=t.getPointArray(e);n.push(a),s.forEach(((t,n)=>o[n].push(t.getPoint(e))))})),n}function p(t,e,n,o,a){n<e&&(n+=a);const i=n-e,s=Math.ceil(i/o);if(s<=0)return t[t.length-1]!==n&&t.push(f(n,a)),n;for(let n=1;n<=s;n++){const o=f(e+n*i/s,a);t.push(o)}return t[t.length-1]}function f(t,e){return(Math.round(t)+e)%e}var v=n(50986);const{PointsManager:I}=o.utilities,C=.2;function E(t,e,n,o){const s=n.get(e[0])[0],r=n.get(e[1])[0],l=M(s.data.contour.polyline),d=M(r.data.contour.polyline),{c1Interp:c,c2Interp:u}=function(t,e){const n=P(t),o=P(e),a=Math.max(Math.ceil(n[n.length-1]/C),Math.ceil(o[o.length-1]/C)),i=y(n),s=y(o),r=a+e.x.length,l=a+t.x.length,d=b(r,i),c=b(l,s),u=S(r-2,t.x.length),g=S(l-2,e.x.length),m=x(d,u),h=x(c,g),p=w(t,m),f=w(e,h);return function(t,e){const n=t.x.length,o={startingNode:0,totalSquaredXYLengths:1/0};for(let a=0;a<n;a++){let i=a,s=0;for(let o=0;o<n;o++)s+=(t.x[i]-e.x[o])**2+(t.y[i]-e.y[o])**2+(t.z[i]-e.z[o])**2,i++,i===n&&(i=0);s<o.totalSquaredXYLengths&&(o.totalSquaredXYLengths=s,o.startingNode=a)}const a=o.startingNode;A(t.x,a),A(t.y,a),A(t.z,a),A(t.I,a)}(p,f),function(t,e){const n={x:[],y:[],z:[],I:[]},o={x:[],y:[],z:[],I:[]};for(let a=0;a<t.x.length;a++)(t.I[a]||e.I[a])&&(n.x.push(t.x[a]),n.y.push(t.y[a]),n.z.push(t.z[a]),n.I.push(t.I[a]),o.x.push(e.x[a]),o.y.push(e.y[a]),o.z.push(e.z[a]),o.I.push(e.I[a]));return{c1Interp:n,c2Interp:o}}(p,f)}(l,d);c.kIndex=e[0],u.kIndex=e[1],t.forEach((function(t){!function(t,e,n,o,s,r,l){const[d,c]=o,u=(n-d)/(c-d),m=s.get(d)[0],p=s.get(c)[0],f=function(t,e,n,o){const i=o?t.I:e.I,s=I.fromXYZ(t),r=I.fromXYZ(e),{length:l}=s,d=I.create3(l),c=a.eR.create(),u=a.eR.create(),g=I.create3(l);g.kIndex=t.kIndex;const m=I.create3(l);m.kIndex=e.kIndex;for(let e=0;e<t.x.length;e++)if(i[e]){const t=s.getPoint(e),o=r.getPoint(e);g.push(t),m.push(o),a.eR.sub(c,o,t),d.push(a.eR.scaleAndAdd(u,t,c,n))}return d.sources=[g,m],d}(t,e,u,r),C=u>.5?p:m,E=h(f);s.has(n)?function(t,e,n,o,a){const s=D(o,n,a),r=t.points,l=i(r,e,s);Object.assign(s,{metadata:l.metadata,data:l.data})}(f,E,n,C,l):function(t,e,n,o,a){const s=t.points,{viewport:r}=a,l=i(s,e,o),d=r.getViewReference({sliceIndex:n});if(!d)throw new Error(`Can't find slice ${n}`);Object.assign(l.metadata,d),g.state.addAnnotation(l,r.element),o.onInterpolationComplete?.(l,o);const{parentAnnotationUID:c}=o;if(c){const t=D(g.state.getAnnotation(c),n,a);(0,v.r)(r,t,l)}}(f,E,n,C,l)}(c,u,t,e,n,l.x.length>d.x.length,o)}))}function D(t,e,n){const{viewport:o}=n,a=g.state.getAnnotations(t.metadata.toolName,o.element);for(let n=0;n<a.length;n++){const o=a[n];if(o.interpolationUID===t.interpolationUID&&o.metadata.sliceIndex===e)return o}}function A(t,e){e-=t.length*Math.floor(e/t.length);const n=t.splice(0,e);return t.push(...n),t}function w(t,e){const n={x:[],y:[],z:[],I:[]};for(let o=0;o<t.x.length-1;o++){n.x.push(t.x[o]),n.y.push(t.y[o]),n.z.push(t.z[o]),n.I.push(!0);const a=(t.x[o+1]-t.x[o])/(e[o]+1),i=(t.y[o+1]-t.y[o])/(e[o]+1),s=(t.z[o+1]-t.z[o])/(e[o]+1);for(let t=0;t<e[o]-1;t++)n.x.push(n.x[n.x.length-1]+a),n.y.push(n.y[n.y.length-1]+i),n.z.push(n.z[n.z.length-1]+s),n.I.push(!1)}return n}function x(t,e){const n=[];for(let e=0;e<t.length;++e)n[e]=e;n.sort((function(e,n){return t[e]<t[n]?-1:1}));const o=[];for(let t=0;t<e.length;t++)o.push(e[n[t]]);const a=o.reduce((function(t,e,n){return e&&t.push(n),t}),[]),i=[];for(let t=0;t<a.length-1;t++)i.push(a[t+1]-a[t]);return i}function S(t,e){const n=new Array(t+e);return n.fill(!1,0,t),n.fill(!0,t,t+e),n}function b(t,e){const n=1/(t-1),o=[n];for(let e=1;e<t-2;e++)o.push(o[o.length-1]+n);return o.concat(e)}function y(t){const e=[];for(let n=0;n<t.length;n++)e.push(t[n]/t[t.length-1]);return e}function P(t){const e=[0];for(let n=1;n<t.x.length;n++){const o=Math.sqrt((t.x[n]-t.x[n-1])**2+(t.y[n]-t.y[n-1])**2+(t.z[n]-t.z[n-1])**2);e.push(e[n-1]+o)}return e}function M(t){const e={x:[],y:[],z:[]};for(let n=0;n<t.length;n++)e.x[n]=t[n][0],e.y[n]=t[n][1],e.z[n]=t[n][2];return e.x.push(e.x[0]),e.y.push(e.y[0]),e.z.push(e.z[0]),e}const O=function(t){if(!t.annotation)return;const{isInterpolationUpdate:e,annotation:n}=t;queueMicrotask((()=>{try{e&&(n.isInterpolationUpdate=!0,n.autoGenerated=!1),function(t){const{annotation:e}=t;!function(t){const{parentAnnotationUID:e,annotationUID:n}=t;if(!e)return t.interpolationUID;const o=g.state.getAnnotation(e),{interpolationUID:a}=o,i=o.childAnnotationUIDs.indexOf(n);t.interpolationUID=`${a}-${i}`,t.interpolationUID}(e);const{interpolationData:n,interpolationList:a}=c(e,t)||{};if(!n||!a)return;const i={toolName:e.metadata.toolName,toolType:e.metadata.toolName,viewport:t.viewport};for(let t=0;t<a.length;t++)a[t]&&E(a[t].list,a[t].pair,n,i);const{id:s,renderingEngineId:r,element:l}=t.viewport,d={annotation:e,element:l,viewportId:s,renderingEngineId:r};a.length&&(0,o.triggerEvent)(t.viewport.element,u.A.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED,d)}(t)}finally{e&&(n.autoGenerated=!0)}}))}},69013:(t,e,n)=>{n.d(e,{B:()=>c,O:()=>d});var o=n(15327),a=n(28364);const{PointsManager:i}=o.utilities;function s(t){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:t?i.create3(1024):null,sumLPS:[0,0,0]}}function r(t,e,n=null,o=null){Array.isArray(e)&&e.length>1&&1===t.max.length&&(t.max.push(t.max[0],t.max[0]),t.min.push(t.min[0],t.min[0]),t.sum.push(t.sum[0],t.sum[0]),t.runMean.push(0,0),t.m2.push(t.m2[0],t.m2[0]),t.m3.push(t.m3[0],t.m3[0]),t.m4.push(t.m4[0],t.m4[0]),t.allValues.push([],[])),t?.pointsInShape&&n&&t.pointsInShape.push(n);const a=Array.isArray(e)?e:[e];t.count+=1,n&&(t.sumLPS[0]+=n[0],t.sumLPS[1]+=n[1],t.sumLPS[2]+=n[2]),t.max.forEach(((e,i)=>{const s=a[i];t.allValues[i].push(s);const r=t.count,l=s-t.runMean[i],d=l/r,c=l*d*(r-1);t.sum[i]+=s,t.runMean[i]+=d,t.m4[i]+=c*d*d*(r*r-3*r+3)+6*d*d*t.m2[i]-4*d*t.m3[i],t.m3[i]+=c*d*(r-2)-3*d*t.m2[i],t.m2[i]+=c,s<t.min[i]&&(t.min[i]=s,0===i&&(t.minIJK=o?[...o]:null,t.minLPS=n?[...n]:null)),s>t.max[i]&&(t.max[i]=s,0===i&&(t.maxIJK=o?[...o]:null,t.maxLPS=n?[...n]:null))}))}function l(t,e){const n=t.sum.map((e=>e/t.count)),o=t.m2.map((e=>Math.sqrt(e/t.count))),a=t.sumLPS.map((e=>e/t.count)),i=t.m3.map(((e,n)=>{const o=t.m2[n]/t.count;return 0===o?0:e/(t.count*Math.pow(o,1.5))})),r=t.m4.map(((e,n)=>{const o=t.m2[n]/t.count;return 0===o?0:e/(t.count*o*o)-3})),l=t.allValues.map((t=>function(t){if(0===t.length)return 0;const e=[...t].sort(((t,e)=>t-e)),n=Math.floor(e.length/2);return e.length%2==0?(e[n-1]+e[n])/2:e[n]}(t))),d={max:{name:"max",label:"Max Pixel",value:1===t.max.length?t.max[0]:t.max,unit:e,pointIJK:t.maxIJK?[...t.maxIJK]:null,pointLPS:t.maxLPS?[...t.maxLPS]:null},min:{name:"min",label:"Min Pixel",value:1===t.min.length?t.min[0]:t.min,unit:e,pointIJK:t.minIJK?[...t.minIJK]:null,pointLPS:t.minLPS?[...t.minLPS]:null},mean:{name:"mean",label:"Mean Pixel",value:1===n.length?n[0]:n,unit:e},stdDev:{name:"stdDev",label:"Standard Deviation",value:1===o.length?o[0]:o,unit:e},count:{name:"count",label:"Voxel Count",value:t.count,unit:null},median:{name:"median",label:"Median",value:1===l.length?l[0]:l,unit:e},skewness:{name:"skewness",label:"Skewness",value:1===i.length?i[0]:i,unit:null},kurtosis:{name:"kurtosis",label:"Kurtosis",value:1===r.length?r[0]:r,unit:null},maxLPS:{name:"maxLPS",label:"Max LPS",value:t.maxLPS?Array.from(t.maxLPS):null,unit:null},minLPS:{name:"minLPS",label:"Min LPS",value:t.minLPS?Array.from(t.minLPS):null,unit:null},pointsInShape:t.pointsInShape,center:{name:"center",label:"Center",value:a?[...a]:null,unit:null},array:[]};d.array.push(d.min,d.max,d.mean,d.stdDev,d.median,d.skewness,d.kurtosis,d.count,d.maxLPS,d.minLPS),d.center.value&&d.array.push(d.center);const c=s(null!==t.pointsInShape);return t.max=c.max,t.min=c.min,t.sum=c.sum,t.count=c.count,t.maxIJK=c.maxIJK,t.maxLPS=c.maxLPS,t.minIJK=c.minIJK,t.minLPS=c.minLPS,t.runMean=c.runMean,t.m2=c.m2,t.m3=c.m3,t.m4=c.m4,t.allValues=c.allValues,t.pointsInShape=c.pointsInShape,t.sumLPS=c.sumLPS,d}class d extends a.t{static{this.state=s(!0)}static statsInit(t){t.storePointData||(this.state.pointsInShape=null),this.state=s(t.storePointData)}static{this.statsCallback=({value:t,pointLPS:e=null,pointIJK:n=null})=>{r(this.state,t,e,n)}}static{this.getStatistics=t=>l(this.state,t?.unit)}}class c extends a.I{constructor(t){super(t),this.state=s(t.storePointData)}statsInit(t){this.state=s(t.storePointData)}statsCallback(t){r(this.state,t.value,t.pointLPS,t.pointIJK)}getStatistics(t){return l(this.state,t?.unit)}}},2222:(t,e,n)=>{function o(t){const[e,n,o,a]=t;return[[o[0],n[1]],[a[0],e[1]]]}n.d(e,{A:()=>o})},86978:(t,e,n)=>{n.d(e,{A:()=>a});var o=n(18989);function a(t,e,n){if(2!==t.length||2!==e.length||2!==n.length)throw Error("lineStart, lineEnd, and point should have 2 elements of [x, y]");return Math.sqrt((0,o.A)(t,e,n))}},81205:(t,e,n)=>{function o(t){return"number"==typeof t?t?t<0?-1:1:t==t?0:NaN:NaN}function a(t,e,n,a){const[i,s]=t,[r,l]=e,[d,c]=n,[u,g]=a,m=l-s,h=i-r,p=r*s-i*l,f=m*d+h*c+p,v=m*u+h*g+p;if(0!==f&&0!==v&&o(f)===o(v))return;const I=g-c,C=d-u,E=u*c-d*g,D=I*i+C*s+E,A=I*r+C*l+E;if(0!==D&&0!==A&&o(D)===o(A))return;const w=m*C-I*h;let x;x=h*E-C*p;const S=x/w;x=I*p-m*E;return[S,x/w]}n.d(e,{A:()=>a})},87105:(t,e,n)=>{n.d(e,{A:()=>a});var o=n(15305);function a(t,e){if(4!==t.length||2!==e.length)throw Error("rectangle:[left, top, width, height] or point: [x,y] not defined correctly");const[n,a,i,s]=t;let r=655535;const l=function(t,e,n,o){return{top:[[t,e],[t+n,e]],right:[[t+n,e],[t+n,e+o]],bottom:[[t+n,e+o],[t,e+o]],left:[[t,e+o],[t,e]]}}(n,a,i,s);return Object.keys(l).forEach((t=>{const[n,a]=l[t],i=o.distanceToPoint(n,a,e);i<r&&(r=i)})),r}},27062:(t,e,n)=>{n.d(e,{A:()=>i});var o=n(56399),a=n(20071);function i(t,e,n,i){const s=n-e+1,r=Math.floor(i/100*s)??1,l=Math.floor(s/r)??1;if(isNaN(s)||!s||!l)return t;if(s/l<2)return t;const d=Math.max(0,e),c=Math.min(t.length-1,n),u=t.slice(0,d),g=t.slice(c+1,t.length),m=function(t,e){if(!e||0===e.length||e.length===t.length)return t;const n=e[e.length-1]-e[0]+1,i=(0,o.Qm)(e.map((e=>t[e][0]))),s=(0,o.Qm)(e.map((e=>t[e][1])));if(r=t,3===r[0]?.length){const r=(0,o.Qm)(e.map((e=>t[e][2])));return(0,a.yU)((0,o.yd)(i,n),(0,o.yd)(s,n),(0,o.yd)(r,n))}return(0,a.yU)((0,o.yd)(i,n),(0,o.yd)(s,n));var r}(t,function(t,e){const n=[],[o,a]=e,i=a-o+1,s=Math.floor(i/t);let r=0,l=Math.round((i-1)/(s-1)*r)+o;for(;l<=a;)n.push(l),r++,l=Math.round((i-1)/(s-1)*r)+o;return n}(l,[d,c]));return[...u,...m,...g]}},42797:(t,e,n)=>{n.d(e,{Q:()=>i,p:()=>d});var o=n(95527),a=n(27062);function i(t,e){if(e?.autoGenerated)return!1;return!0===t?.smoothing?.smoothOnAdd||!0===t?.smoothing?.smoothOnEdit}function s(t,e,n){return(t+e+n)%e}function r(t,e,n,o){const[,a,i]=t,[,r,l]=e,d=i.length,c=l.length;let u=t[0],g=e[0];if(!(i[u]&&l[g]&&i[a]&&l[r]))return[void 0,void 0];for(;u!==a&&g!==r;){if(n(l[g],i[u]))return[u,g];u=s(u,d,o),g=s(g,c,o)}return[void 0,void 0]}function l(t,e){const[n,a]=function(t,e){for(let i=0;i<t.length;i++)for(let s=0;s<e.length;s++)if(n=t[i],a=e[s],0===o.point.distanceToPoint(n,a))return[i,s];var n,a}(t,e)||[],i=(t,e)=>!1===function(t,e){return o.point.distanceToPoint(t,e)<.001}(t,e),[l,d]=r([s(n,t.length,1),n,t],[s(a,e.length,1),a,e],i,1),[c]=r([s(l,t.length,-1),l,t],[s(d,e.length,-1),d,e],i,-1);return[l,c]}function d(t,e,n){const{interpolation:o,smoothing:i}=t,s=e;if(o){const{knotsRatioPercentageOnAdd:t,knotsRatioPercentageOnEdit:o,smoothOnAdd:s=!1,smoothOnEdit:r=!1}=i,d=n?o:t;if(n?r:s){const[t,o]=n?l(e,n):[0,e.length-1];return e[t]&&e[o]?(0,a.A)(e,t,o,d):e}}return s}},94418:(t,e,n)=>{n.d(e,{A:()=>i});var o=n(15327),a=n(36374);function i(t,e,n={}){if(t instanceof o.VolumeViewport){const n=t.getCamera(),{spacingInNormalDirection:i}=o.utilities.getTargetVolumeAndSpacingInNormalDir(t,n);return(0,a.A)(e,n,i)}if(t instanceof o.StackViewport){const e=t.getCurrentImageId();if(!e)return[];const o=e.indexOf(":");n.imageURI=e.substring(o+1)}return e.filter((e=>!!e.isVisible&&(!!e.data.isCanvasAnnotation||t.isReferenceViewable(e.metadata,n))))}},40770:(t,e,n)=>{n.d(e,{W:()=>r});var o=n(3823),a=n(15327);const{EPSILON:i}=a.CONSTANTS,s=1-i;function r(t,e){const{viewPlaneNormal:n}=e,i=t.filter((t=>{let e=t.metadata.viewPlaneNormal;if(!e){const{referencedImageId:n}=t.metadata,{imageOrientationPatient:i}=a.metaData.get("imagePlaneModule",n),s=o.eR.fromValues(i[0],i[1],i[2]),r=o.eR.fromValues(i[3],i[4],i[5]);e=o.eR.create(),o.eR.cross(e,s,r),t.metadata.viewPlaneNormal=e}const i=Math.abs(o.eR.dot(n,e))>s;return e&&i}));return i.length?i:[]}},36374:(t,e,n)=>{n.d(e,{A:()=>r});var o=n(3823),a=n(15327);const{EPSILON:i}=a.CONSTANTS,s=1-i;function r(t,e,n){const{viewPlaneNormal:i}=e,r=t.filter((t=>{let e=t.metadata.viewPlaneNormal;if(!e){const{referencedImageId:n}=t.metadata,{imageOrientationPatient:i}=a.metaData.get("imagePlaneModule",n),s=o.eR.fromValues(i[0],i[1],i[2]),r=o.eR.fromValues(i[3],i[4],i[5]);e=o.eR.create(),o.eR.cross(e,s,r),t.metadata.viewPlaneNormal=e}const n=Math.abs(o.eR.dot(i,e))>s;return e&&n}));if(!r.length)return[];const l=n/2,{focalPoint:d}=e,c=[];for(const t of r){const e=t.data,n=e.handles.points[0]||e.contour?.polyline[0];if(!t.isVisible)continue;const a=o.eR.create();if(!n){c.push(t);continue}o.eR.sub(a,d,n);const s=o.eR.dot(a,i);Math.abs(s)<l&&c.push(t)}return c}},57063:(t,e,n)=>{n.d(e,{R:()=>a,p:()=>i});var o=n(15327);function a(t,e,n,o,a=.25){const s=i(t,e,{targetVolumeId:n,stepSize:a});let r;for(const e of s){const n=o(t.getIntensityFromWorld(e),e);n&&(r=n)}return r}function i(t,e,{targetVolumeId:n,stepSize:a}){const i=t.getCamera(),{viewPlaneNormal:r}=i,{spacingInNormalDirection:l}=o.utilities.getTargetVolumeAndSpacingInNormalDir(t,i,n),d=l*a||1,c=t.getBounds(),u=[];let g=[...e];for(;s(g,c);)u.push([...g]),g[0]+=r[0]*d,g[1]+=r[1]*d,g[2]+=r[2]*d;for(g=[...e];s(g,c);)u.push([...g]),g[0]-=r[0]*d,g[1]-=r[1]*d,g[2]-=r[2]*d;return u}const s=function(t,e){const[n,o,a,i,s,r]=e,l=10;return t[0]>n+l&&t[0]<o-l&&t[1]>a+l&&t[1]<i-l&&t[2]>s+l&&t[2]<r-l}},35489:(t,e,n)=>{n.d(e,{A:()=>a});var o=n(3823);function a(t,e,n,a){const i=o.eR.create();o.eR.cross(i,e,t);const s=o.eR.fromValues(...n),r=o.eR.fromValues(...a),l=o.eR.create();o.eR.subtract(l,s,r);const d=o.eR.length(l);if(d<1e-4)return{worldWidth:0,worldHeight:0};const c=o.eR.dot(l,i)/(d*o.eR.length(i));return{worldWidth:Math.sqrt(1-c*c)*d,worldHeight:c*d}}},62514:(t,e,n)=>{n.d(e,{A:()=>a});var o=n(3823);function a(t,e,n,a){const i=o.eR.create();o.eR.cross(i,e,t);const s=o.eR.fromValues(...n),r=o.eR.fromValues(...a),l=o.eR.create();o.eR.subtract(l,s,r);const d=o.eR.length(l);if(d<1e-4)return{worldWidth:0,worldHeight:0};const c=o.eR.dot(l,i)/(d*o.eR.length(i));return{worldWidth:Math.sqrt(1-c*c)*d,worldHeight:c*d}}},30698:(t,e,n)=>{n.d(e,{Y:()=>a});var o=n(3823);const a=(t,e,n,a,i,s,r,l)=>{const d=[o.eR.fromValues(n,a,i),o.eR.fromValues(s,a,i),o.eR.fromValues(n,r,i),o.eR.fromValues(s,r,i),o.eR.fromValues(n,a,l),o.eR.fromValues(s,a,l),o.eR.fromValues(n,r,l),o.eR.fromValues(s,r,l)],c=o.eR.fromValues(e[0],e[1],e[2]),u=o.eR.fromValues(t[0],t[1],t[2]),g=-o.eR.dot(c,u);let m=null;for(const t of d){const e=o.eR.dot(c,t)+g;if(null===m)m=Math.sign(e);else if(Math.sign(e)!==m)return!0}return!1}},56229:(t,e,n)=>{n.d(e,{A:()=>l});var o=n(15327),a=n(47807),i=n(73816),s=n(55421),r=n(94021);function l(t){const{annotation:e}=t,n=(0,s.A)(t,[{key:"interpolationUID",value:t.interpolationUID}]),l=e.metadata.sliceIndex;let d=-1,c=t.sliceData.numberOfSlices;for(const[t,e]of n.entries()){if(t===l)continue;const n=e.find((t=>!t.autoGenerated));n&&(t<l?d=Math.max(t,d):c=Math.min(t,c))}const u=[];for(const[t,e]of n.entries())t<=d||t>=c||t===l||e.forEach((t=>{t.autoGenerated&&(a.state.removeAnnotation(t.annotationUID),u.push(t))}));if(u.length){const e={annotations:u,element:t.viewport.element,viewportId:t.viewport.id,renderingEngineId:t.viewport.getRenderingEngine().id};(0,o.triggerEvent)(t.viewport.element,r.A.INTERPOLATED_ANNOTATIONS_REMOVED,e)}if(d>=0&&c<t.sliceData.numberOfSlices){const e=n.get(c)[0],o={viewport:t.viewport,sliceData:{numberOfSlices:t.sliceData.numberOfSlices,imageIndex:e.metadata.sliceIndex},annotation:e,interpolationUID:e.interpolationUID};(0,i.A)(o)}}},27479:(t,e,n)=>{n.d(e,{d:()=>d});var o=n(15327),a=n(99737),i=n(44188),s=n(49906),r=n(52905);const l=new Map;async function d(t,e,n,r,d){const u=await n();(0,i.A)({segmentationId:t,type:e,data:u}),d?.(),l.has(t)||l.set(t,[]);const g=l.get(t);return g.includes(e)||g.push(e),function(t){const e=e=>{c(e,t)};t._debouncedUpdateFunction=e,o.eventTarget.removeEventListener(a.Events.SEGMENTATION_DATA_MODIFIED,t._debouncedUpdateFunction),o.eventTarget.addEventListener(a.Events.SEGMENTATION_DATA_MODIFIED,t._debouncedUpdateFunction)}(r),(0,s.triggerSegmentationModified)(t),u}const c=(0,r.A)(((t,e)=>{const n=t.detail.segmentationId,o=l.get(n);o&&o.length&&(e(n),o.length&&(0,s.triggerSegmentationModified)(n))}),300)},86644:(t,e,n)=>{n.d(e,{u:()=>c});var o=n(99737),a=n(93733),i=n(67165),s=n(60740),r=n(33658),l=n(47098),d=n(92686);function c({segmentationId:t,segmentIndex:e,viewportId:n,autoGenerated:c=!1}){const u=(0,a.getSegmentIndexColor)(n,t,e),g=(0,r.I)(n,{segmentationId:t,type:o.SegmentationRepresentations.Contour}),m=(0,i.T)(n),h=m?.segmentationId===t,p=d.Y.getStyle({viewportId:n,segmentationId:t,type:o.SegmentationRepresentations.Contour,segmentIndex:e});let f,v=1,I=1,C=0;c?(v=p.outlineWidthAutoGenerated??v,f=p.outlineDashAutoGenerated??f,I=p.outlineOpacity??I,C=p.fillAlphaAutoGenerated??C):h?(v=p.outlineWidth??v,f=p.outlineDash??f,I=p.outlineOpacity??I,C=p.fillAlpha??C):(v=p.outlineWidthInactive??v,f=p.outlineDashInactive??f,I=p.outlineOpacityInactive??I,C=p.fillAlphaInactive??C),(0,s.Q)(t)===e&&(v+=p.activeSegmentOutlineWidthDelta),v=p.renderOutline?v:0,C=p.renderFill?C:0;const E=`rgba(${u[0]}, ${u[1]}, ${u[2]}, ${I})`,D=`rgb(${u[0]}, ${u[1]}, ${u[2]})`,A=!(0,l.s)(n,{segmentationId:t,type:o.SegmentationRepresentations.Contour}).has(e);return{color:E,fillColor:D,lineWidth:v,fillOpacity:C,lineDash:f,textbox:{color:E},visibility:g&&A}}},14543:(t,e,n)=>{n.d(e,{A:()=>r});var o=n(15327),a=n(3198),i=n(9356),s=n(67514);function r(t,e,n=!0){const r=(0,o.getEnabledElement)(t),{renderingEngine:l,FrameOfReferenceUID:d}=r;let c=l.getViewports();c=(0,a.A)(c,d),c=(0,i.A)(c,e);const u=l.getViewport(r.viewportId);n&&(c=(0,s.A)(c,u.getCamera()));return c.map((t=>t.id))}}}]);
//# sourceMappingURL=2914.bundle.f45de6cadc6ab3746501.js.map