dicomweb-pacs
Version:
A self contained easy to use PACS with DICOMWEB and DIMSE service support
2 lines • 156 kB
JavaScript
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2860],{5057:(e,t,n)=>{n.d(t,{A:()=>s});var i=n(53586),a=n(48080),o=n(92885),r=n(71209);function s(e,t){const n=e.image;if(!e.canvas||!e.image)return;const s=(0,i.A)();if(n.stats={lastGetPixelDataTime:-1,lastStoredPixelDataToCanvasImageDataTime:-1,lastPutImageDataTime:-1,lastRenderTime:-1,lastLutGenerateTime:-1},n){let i=n.render;i||(i=e.viewport.colormap?r.l:n.color?a.f:o.j),i(e,t)}const l=(0,i.A)()-s;n.stats.lastRenderTime=l,e.invalid=!1,e.needsRedraw=!1}},7808:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(45354);function a(e,t){const n=new i.d;if(!e.viewport.displayedArea)return n;n.translate(e.canvas.width/2,e.canvas.height/2);const a=e.viewport.rotation;0!==a&&n.rotate(a*Math.PI/180);let o=e.viewport.scale,r=e.viewport.scale;const s=e.viewport.displayedArea.brhc.x-(e.viewport.displayedArea.tlhc.x-1),l=e.viewport.displayedArea.brhc.y-(e.viewport.displayedArea.tlhc.y-1);if("NONE"===e.viewport.displayedArea.presentationSizeMode)e.image.rowPixelSpacing<e.image.columnPixelSpacing?o*=e.image.columnPixelSpacing/e.image.rowPixelSpacing:e.image.columnPixelSpacing<e.image.rowPixelSpacing&&(r*=e.image.rowPixelSpacing/e.image.columnPixelSpacing);else if(o=e.viewport.displayedArea.columnPixelSpacing,r=e.viewport.displayedArea.rowPixelSpacing,"SCALE TO FIT"===e.viewport.displayedArea.presentationSizeMode){const t=e.canvas.height/(l*r),n=e.canvas.width/(s*o);o=r=Math.min(n,t),e.viewport.displayedArea.rowPixelSpacing<e.viewport.displayedArea.columnPixelSpacing?o*=e.viewport.displayedArea.columnPixelSpacing/e.viewport.displayedArea.rowPixelSpacing:e.viewport.displayedArea.columnPixelSpacing<e.viewport.displayedArea.rowPixelSpacing&&(r*=e.viewport.displayedArea.rowPixelSpacing/e.viewport.displayedArea.columnPixelSpacing)}return n.scale(o,r),0!==a&&n.rotate(-a*Math.PI/180),n.translate(e.viewport.translation.x,e.viewport.translation.y),0!==a&&n.rotate(a*Math.PI/180),void 0!==t&&n.scale(t,t),e.viewport.hflip&&n.scale(-1,1),e.viewport.vflip&&n.scale(1,-1),n.translate(-s/2,-l/2),n}},36931:(e,t,n)=>{n.d(t,{A:()=>o});var i=n(12132),a=n(57162);function o(e,t,n,o){if(void 0===e)throw new Error("getDefaultViewport: parameter canvas must not be undefined");if(void 0===t)return(0,i.A)();const r=(0,a.A)(e,t,0).scaleFactor;let s;return"PT"===n&&t.isPreScaled?s={windowWidth:5,windowCenter:2.5}:void 0!==t.windowWidth&&void 0!==t.windowCenter&&(s={windowWidth:Array.isArray(t.windowWidth)?t.windowWidth[0]:t.windowWidth,windowCenter:Array.isArray(t.windowCenter)?t.windowCenter[0]:t.windowCenter}),{scale:r,translation:{x:0,y:0},voi:s,invert:t.invert,pixelReplication:!1,rotation:0,hflip:!1,vflip:!1,modalityLUT:t.modalityLUT,modality:n,voiLUT:t.voiLUT,colormap:void 0!==o?o:t.colormap,displayedArea:{tlhc:{x:1,y:1},brhc:{x:t.columns,y:t.rows},rowPixelSpacing:void 0===t.rowPixelSpacing?1:t.rowPixelSpacing,columnPixelSpacing:void 0===t.columnPixelSpacing?1:t.columnPixelSpacing,presentationSizeMode:"NONE"}}}},50584:(e,t,n)=>{n(49038),n(86252),n(90808),n(29625),n(50180),n(1271)},71851:(e,t,n)=>{n.d(t,{BlendModes:()=>l.A,CalibrationTypes:()=>m.A,Events:()=>a.A,GeometryType:()=>d.A,ImageQualityStatus:()=>p.A,InterpolationType:()=>s.A,MeshType:()=>u.A,MetadataModules:()=>v.A,OrientationAxis:()=>c.A,RequestType:()=>o.A,VOILUTFunctionType:()=>g.A,VideoEnums:()=>f,ViewportStatus:()=>h.A,ViewportType:()=>r.A});var i,a=n(32643),o=n(43213),r=n(41864),s=n(29310),l=n(63591),c=n(18735),d=n(91346),u=(n(86066),n(32731)),g=n(82501),m=(n(91369),n(38059)),h=n(1814),p=n(77474),f=n(13545),v=n(69850);!function(e){e.SUM="SUM",e.SUBTRACT="SUBTRACT",e.AVERAGE="AVERAGE"}(i||(i={}));n(6796)},15327:(e,t,n)=>{n.d(t,{BaseVolumeViewport:()=>l.A,CONSTANTS:()=>a,Enums:()=>i,StackViewport:()=>c.A,VolumeViewport:()=>s.A,addImageSlicesToViewports:()=>P.ge,addVolumesToViewports:()=>P.x,cache:()=>g.Ay,convertMapperToNotSharedMapper:()=>r.h,createVolumeActor:()=>o.A,eventTarget:()=>d.A,getEnabledElement:()=>m.Ay,getEnabledElementByIds:()=>m.b1,getEnabledElementByViewportId:()=>m.yj,getEnabledElements:()=>m.zb,getRenderingEngine:()=>u.lD,getRenderingEngines:()=>u.qO,getWebWorkerManager:()=>p.G_,metaData:()=>h,triggerEvent:()=>M.A,utilities:()=>R,volumeLoader:()=>x});var i=n(71851),a=n(19325),o=(n(56706),n(61640)),r=n(92099),s=(n(30135),n(94155)),l=(n(40893),n(46347)),c=n(58165),d=(n(32501),n(81466),n(10056),n(10364)),u=n(39536),g=(n(50584),n(49038)),m=(n(91073),n(51159),n(86846)),h=n(74876),p=n(26896);const f=Symbol("DefaultSettings"),v=Symbol("RuntimeSettings"),w=Symbol("ObjectSettingsMap"),I=Symbol("Dictionary");class A{constructor(e){const t=Object.create(e instanceof A&&I in e?e[I]:null);Object.seal(Object.defineProperty(this,I,{value:t}))}set(e,t){return y(this[I],e,t,null)}get(e){return function(e,t){return e[t]}(this[I],e)}unset(e){return function(e,t){if(t.endsWith(".")){let n=0;const i=t,a=i.slice(0,-1),o=0===a.length;for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(o||t.startsWith(i)||t===a)&&(delete e[t],++n);return n>0}return delete e[t]}(this[I],e+"")}forEach(e){S(this[I],e)}extend(){return new A(this)}import(e){b(e)&&Object.keys(e).forEach((t=>{y(this[I],t,e[t],null)}))}dump(){const e={};return S(this[I],((t,n)=>{void 0!==n&&E(e,t,n)})),e}static assert(e){return e instanceof A?e:A.getRuntimeSettings()}static getDefaultSettings(e=null){let t=A[f];if(t instanceof A||(t=new A,A[f]=t),e){const n={};return t.forEach((i=>{if(i.startsWith(e)){const a=i.split(`${e}.`)[1];n[a]=t.get(i)}})),n}return t}static getRuntimeSettings(){let e=A[v];return e instanceof A||(e=new A(A.getDefaultSettings()),A[v]=e),e}static getObjectSettings(e,t){let n=null;if(e instanceof A)n=e;else if("object"==typeof e&&null!==e){let i=A[w];i instanceof WeakMap||(i=new WeakMap,A[w]=i),n=i.get(e),n instanceof A||(n=new A(A.assert(A.getObjectSettings(t))),i.set(e,n))}return n}static extendRuntimeSettings(){return A.getRuntimeSettings().extend()}}function S(e,t){for(const n in e)t(n,e[n])}function y(e,t,n,i){return!!function(e){let t,n,i;if("string"!=typeof e||(t=e.length-1)<0)return!1;i=-1;for(;(n=e.indexOf(".",i+1))>=0;){if(n-i<2||n===t)return!1;i=n}return!0}(t)&&(b(n)?function(e,t,n,i){let a;if(i.has(n))return y(e,t,null,i);i.add(n),a=0;for(const o in n)Object.prototype.hasOwnProperty.call(n,o)&&(y(e,0===o.length?t:`${t}.${o}`,n[o],i)||++a);return i.delete(n),0===a}(e,t,n,i instanceof WeakSet?i:new WeakSet):(e[t]=n,!0))}function b(e){if("object"==typeof e&&null!==e){const t=Object.getPrototypeOf(e);if(t===Object.prototype||null===t)return!0}return!1}function E(e,t,n){const i=t.indexOf(".");if(i>=0){const a=t.slice(0,i);let o=e[a];if("object"!=typeof o||null===o){const t=o;o={},void 0!==t&&(o[""]=t),e[a]=o}E(o,t.slice(i+1,t.length),n)}else e[t]=n}A.getDefaultSettings().set("useCursors",!0);var x=n(87142),R=(n(80068),n(89926),n(36822),n(10297)),M=n(69372),P=(n(55500),n(55509),n(56074),n(40661))},80068:(e,t,n)=>{n.d(t,{createAndCacheDerivedImages:()=>A,createAndCacheLocalImage:()=>S,loadAndCacheImage:()=>w,loadImage:()=>v});var i=n(49038),a=n(32643),o=n(10364),r=n(27119),s=n(99576),l=n(69372),c=n(80221),d=n(24623),u=(n(51159),n(74876)),g=n(6796);const m={};let h;function p(e,t){const n=i.Ay.getImageLoadObject(e);if(n)return f(n.promise,e),n;const a=e.split(":")[0],o=m[a]||h;if(!o)throw new Error(`loadImageFromImageLoader: No image loader found for scheme '${a}'`);const r=o(e,t);return f(r.promise,e),r}function f(e,t){Promise.resolve(e).then((e=>{!function(e){if(!e.voxelManager){const{width:t,height:n,numberOfComponents:i}=e,a=d.A.createImageVoxelManager({scalarData:e.getPixelData(),width:t,height:n,numberOfComponents:i});e.voxelManager=a,e.getPixelData=()=>a.getScalarData(),delete e.imageFrame.pixelData}}(e),(0,l.A)(o.A,a.A.IMAGE_LOADED,{image:e})})).catch((e=>{const n={imageId:t,error:e};(0,l.A)(o.A,a.A.IMAGE_LOAD_FAILED,n)}))}function v(e,t={priority:0,requestType:"prefetch"}){if(void 0===e)throw new Error("loadImage: parameter imageId must not be undefined");return p(e,t).promise}function w(e,t={priority:0,requestType:"prefetch"}){if(void 0===e)throw new Error("loadAndCacheImage: parameter imageId must not be undefined");const n=p(e,t);return i.Ay.getImageLoadObject(e)||i.Ay.putImageLoadObject(e,n),n.promise}function I(e,t={}){if(void 0===e)throw new Error("createAndCacheDerivedImage: parameter imageId must not be undefined");void 0===t.imageId&&(t.imageId=`derived:${(0,c.A)()}`);const{imageId:n,skipCreateBuffer:a,onCacheAdd:o,voxelRepresentation:l}=t,d=u.get("imagePlaneModule",e),g=d.rows*d.columns,{TypedArrayConstructor:m}=(0,s.h)(t.targetBuffer?.type,g),h=new m(a?1:g),p=n,f=u.get("imagePlaneModule",e);r.A.add(p,{type:"imagePlaneModule",metadata:f});const v=u.get("generalSeriesModule",e);r.A.add(p,{type:"generalSeriesModule",metadata:v}),r.A.add(p,{type:"generalImageModule",metadata:{instanceNumber:t.instanceNumber}});const w=u.get("imagePixelModule",e);r.A.add(p,{type:"imagePixelModule",metadata:{...w,bitsAllocated:8,bitsStored:8,highBit:7,samplesPerPixel:1,pixelRepresentation:0}});const I=S(n,{scalarData:h,onCacheAdd:o,skipCreateBuffer:a,targetBuffer:{type:h.constructor.name},voxelRepresentation:l,dimensions:[d.columns,d.rows],spacing:[d.columnPixelSpacing,d.rowPixelSpacing],origin:d.imagePositionPatient,direction:d.imageOrientationPatient,frameOfReferenceUID:d.frameOfReferenceUID,referencedImageId:e});return I.referencedImageId=e,i.Ay.getImageLoadObject(n)||i.Ay.putImageSync(n,I),I}function A(e,t={}){if(0===e.length)throw new Error("createAndCacheDerivedImages: parameter imageIds must be list of image Ids");const n=[];return e.map(((e,i)=>{const a={imageId:t?.getDerivedImageId?.(e)||`derived:${(0,c.A)()}`,...t};return n.push(a.imageId),I(e,{...a,instanceNumber:i+1})}))}function S(e,t){const{scalarData:n,origin:a,direction:o,targetBuffer:l,skipCreateBuffer:c,onCacheAdd:u,frameOfReferenceUID:m,voxelRepresentation:h,referencedImageId:p}=t,f=t.dimensions,v=t.spacing;if(!f||!v)throw new Error("createAndCacheLocalImage: dimensions and spacing are required");const w=f[0],I=f[1],A=v[0],S=v[1],y={frameOfReferenceUID:m,rows:I,columns:w,imageOrientationPatient:o??[1,0,0,0,1,0],rowCosines:o?o.slice(0,3):[1,0,0],columnCosines:o?o.slice(3,6):[0,1,0],imagePositionPatient:a??[0,0,0],pixelSpacing:[S,A],rowPixelSpacing:S,columnPixelSpacing:A},b=w*I,E=n.length/b;let x,R,M,P;if(n){if(!(n instanceof Uint8Array||n instanceof Float32Array||n instanceof Uint16Array||n instanceof Int16Array))throw new Error("createAndCacheLocalImage: scalarData must be of type Uint8Array, Uint16Array, Int16Array or Float32Array");x=n}else if(!c){const{TypedArrayConstructor:e}=(0,s.h)(l?.type,b);x=new e(b)}if(x instanceof Uint8Array)R=8,M=8,P=7;else if(x instanceof Uint16Array)R=16,M=16,P=15;else if(x instanceof Int16Array)R=16,M=16,P=15;else{if(!(x instanceof Float32Array))throw new Error("Unsupported scalarData type");R=32,M=32,P=31}const D={samplesPerPixel:1,photometricInterpretation:x.length>f[0]*f[1]?"RGB":"MONOCHROME2",rows:I,columns:w,bitsAllocated:R,bitsStored:M,highBit:P},T={imagePlaneModule:y,imagePixelModule:D};["imagePlaneModule","imagePixelModule"].forEach((t=>{r.A.add(e,{type:t,metadata:T[t]||{}})}));const C=e,L=h===g.A.RLE&&d.A.createRLEImageVoxelManager({dimensions:f,id:C})||d.A.createImageVoxelManager({height:I,width:w,numberOfComponents:E,scalarData:x,id:C});let _=x[0],O=x[0];for(let e=1;e<x.length;e++)x[e]<_&&(_=x[e]),x[e]>O&&(O=x[e]);const V={imageId:e,intercept:0,windowCenter:0,windowWidth:0,color:"RGB"===D.photometricInterpretation,numberOfComponents:D.samplesPerPixel,dataType:l?.type,slope:1,minPixelValue:_,maxPixelValue:O,rows:D.rows,columns:D.columns,getCanvas:void 0,height:D.rows,width:D.columns,rgba:void 0,columnPixelSpacing:y.columnPixelSpacing,rowPixelSpacing:y.rowPixelSpacing,FrameOfReferenceUID:y.frameOfReferenceUID,invert:!1,getPixelData:()=>L.getScalarData(),voxelManager:L,sizeInBytes:n.byteLength,referencedImageId:p};return u?.(V),i.Ay.putImageSync(V.imageId,V),V}},56750:(e,t,n)=>{n.d(t,{A:()=>i});class i{static{this.frameRangeExtractor=/(\/frames\/|[&?]frameNumber=)([^/&?]*)/i}static imageIdToFrames(e){const t=e.match(this.frameRangeExtractor);if(!t||!t[2])return null;const n=t[2].split("-").map((e=>Number(e)));return 1===n.length?n[0]:n}static imageIdToFrameEnd(e){const t=this.imageIdToFrames(e);return Array.isArray(t)?t[1]:t}static imageIdToFrameStart(e){const t=this.imageIdToFrames(e);return Array.isArray(t)?t[0]:t}static framesToString(e){return Array.isArray(e)?`${e[0]}-${e[1]}`:String(e)}static framesToImageId(e,t){const n=e.match(this.frameRangeExtractor);if(!n||!n[2])return null;const i=this.framesToString(t);return e.replace(this.frameRangeExtractor,`${n[1]}${i}`)}}},13876:(e,t,n)=>{n.d(t,{A:()=>i});class i{constructor(e={}){this._dimensions=3,this._length=0,this._byteSize=4,this.growSize=128;const{initialSize:t=1024,dimensions:n=3,growSize:i=128}=e,a=t*n;this.growSize=i,this.array=new ArrayBuffer(a*this._byteSize),this.data=new Float32Array(this.array),this._dimensions=n}forEach(e){for(let t=0;t<this._length;t++)e(this.getPoint(t),t)}get length(){return this._length}get dimensions(){return this._dimensions}get dimensionLength(){return this._length*this._dimensions}getPoint(e){if(e<0&&(e+=this._length),e<0||e>=this._length)return;const t=this._dimensions*e;return this.data.subarray(t,t+this._dimensions)}getPointArray(e){const t=[];if(e<0&&(e+=this._length),e<0||e>=this._length)return;const n=this._dimensions*e;for(let e=0;e<this._dimensions;e++)t.push(this.data[e+n]);return t}grow(e=1,t=this.growSize){if(this.dimensionLength+e*this._dimensions<=this.data.length)return;const n=this.data.length+t,i=new ArrayBuffer(n*this._dimensions*this._byteSize),a=new Float32Array(i);a.set(this.data),this.data=a,this.array=i}reverse(){const e=Math.floor(this._length/2);for(let t=0;t<e;t++){const e=t*this._dimensions,n=(this._length-1-t)*this._dimensions;for(let t=0;t<this._dimensions;t++){const i=this.data[e+t];this.data[e+t]=this.data[n+t],this.data[n+t]=i}}}getTypedArray(){return this.data}push(e){this.grow(1);const t=this.length*this._dimensions;for(let n=0;n<this._dimensions;n++)this.data[n+t]=e[n];this._length++}map(e){const t=[];for(let n=0;n<this._length;n++)t.push(e(this.getPoint(n),n));return t}get points(){return this.map((e=>e))}toXYZ(){const e={x:[],y:[]};this._dimensions>=3&&(e.z=[]);const{x:t,y:n,z:i}=e;return this.forEach((e=>{t.push(e[0]),n.push(e[1]),i&&i.push(e[2])})),e}static fromXYZ({x:e,y:t,z:n}){const a=i.create3(e.length);let o=0;for(let i=0;i<e.length;i++)a.data[o++]=e[i],a.data[o++]=t[i],a.data[o++]=n?n[i]:0;return a._length=e.length,a}subselect(e=10,t=0){const n=new i({initialSize:e,dimensions:this._dimensions});for(let i=0;i<e;i++){const a=(t+Math.floor(this.length*i/e))%this.length;n.push(this.getPoint(a))}return n}static create3(e=128,t){e=Math.max(e,t?.length||0);const n=new i({initialSize:e,dimensions:3});return t&&t.forEach((e=>n.push(e))),n}static create2(e=128){return new i({initialSize:e,dimensions:2})}}},22191:(e,t,n)=>{n.d(t,{A:()=>i});class i{constructor(e){this.name=e||"unknown"}static as(e){if(e.iterator)return e.iterator;const t=new i("as iterator");return e.then((e=>{try{t.add(e,!0)}catch(e){t.reject(e)}}),(e=>{t.reject(e)})),t}add(e,t=!1){this.nextValue=e,this.done||=t,this.waiting&&(this.waiting.resolve(e),this.waiting=void 0)}resolve(){this.done=!0,this.waiting&&(this.waiting.resolve(this.nextValue),this.waiting=void 0)}reject(e){this.rejectReason=e,this.waiting?.reject(e)}getRecent(){if(this.rejectReason)throw this.rejectReason;return this.nextValue}async*[Symbol.asyncIterator](){for(;!this.done;){if(this.rejectReason)throw this.rejectReason;if(void 0!==this.nextValue&&(yield this.nextValue,this.done))break;this.waiting||(this.waiting={},this.waiting.promise=new Promise(((e,t)=>{this.waiting.resolve=e,this.waiting.reject=t}))),await this.waiting.promise}yield this.nextValue}async forEach(e,t){let n=0;try{for await(const i of this){const{done:a}=this;try{await e(i,a,n),n++}catch(e){if(!a){console.warn("Caught exception in intermediate value",e);continue}if(!t)throw e;t(e,a)}}}catch(e){if(!t)throw e;t(e,!0)}}generate(e,t){return e(this,this.reject.bind(this)).then((()=>{this.done||this.resolve()}),(e=>{this.reject(e),t?t(e):console.warn("Couldn't process because",e)}))}async nextPromise(){for await(const e of this)if(e)return e;return this.nextValue}async donePromise(){for await(const e of this);return this.nextValue}getNextPromise(){const e=this.nextPromise();return e.iterator=this,e}getDonePromise(){const e=this.donePromise();return e.iterator=this,e}}},67645:(e,t,n)=>{n.d(t,{A:()=>s});const i=[[0,-1,0],[0,1,0],[0,0,-1],[0,0,1]],a=[[0,-1,0],[0,1,0]],o=[[0,-1,0],[0,1,0],[0,0,-1]],r=[[0,-1,0],[0,1,0],[0,0,1]];class s{static copyMap(e,t){for(const[n,i]of t.rows)e.rows.set(n,structuredClone(i))}constructor(e,t,n=1){this.rows=new Map,this.height=1,this.width=1,this.depth=1,this.jMultiple=1,this.kMultiple=1,this.numComps=1,this.pixelDataConstructor=Uint8Array,this.updateScalarData=function(e){e.fill(0);this.forEach(((t,n,i)=>{const{start:a,end:o,value:r}=n;for(let n=a;n<o;n++)e[t+n]=r}))},this.get=e=>{const t=e%this.jMultiple,n=(e-t)/this.jMultiple,i=this.getRLE(t,n);return i?.value??this.defaultValue},this.getRun=(e,t)=>{const n=e+t*this.height;return this.rows.get(n)},this.set=(e,t)=>{if(void 0===t)return;const n=e%this.width,i=(e-n)/this.width,a=this.rows.get(i);if(!a)return void this.rows.set(i,[{start:n,end:n+1,value:t}]);const o=this.findIndex(a,n),r=a[o],s=a[o-1];if(!r)return s&&s.value===t&&s.end===n?void s.end++:void(a[o]={start:n,end:n+1,value:t});const{start:l,end:c,value:d}=r;if(t===d&&n>=l)return;const u={start:n,end:n+1,value:t},g=n>l,m=g?o+1:o,h=g?r:s;let p=g?a[o+1]:r;if(h?.value===t&&h?.end===n)return h.end++,void(p?.value===t&&p.start===n+1?(h.end=p.end,a.splice(o,1)):p?.start===n&&(p.start++,p.start===p.end&&(a.splice(o,1),p=a[o],p?.start===n+1&&p.value===t&&(h.end=p.end,a.splice(o,1)))));if(p?.value===t&&p.start===n+1)return p.start--,void(h?.end>n&&(h.end=n,h.end===h.start&&a.splice(o,1)));if(p?.start!==n||p.end!==n+1)n===p?.start&&p.start++,g&&c>n+1?a.splice(m,0,u,{start:n+1,end:h.end,value:h.value}):a.splice(m,0,u),h?.end>n&&(h.end=n);else{p.value=t;const e=a[o+1];e?.start==n+1&&e.value===t&&(a.splice(o+1,1),p.end=e.end)}},this.width=e,this.height=t,this.depth=n,this.jMultiple=e,this.kMultiple=this.jMultiple*t}static{this.getScalarData=function(e=Uint8ClampedArray){const t=new e(this.frameSize);return this.map.updateScalarData(t),t}}toIJK(e){const t=e%this.jMultiple;return[t,(e-t)/this.jMultiple%this.height,Math.floor(e/this.kMultiple)]}toIndex([e,t,n]){return e+n*this.kMultiple+t*this.jMultiple}getRLE(e,t,n=0){const i=this.rows.get(t+n*this.height);if(!i)return;const a=i[this.findIndex(i,e)];return e>=a?.start?a:void 0}has(e){const t=e%this.jMultiple,n=(e-t)/this.jMultiple,i=this.getRLE(t,n);return void 0!==i?.value}delete(e){const t=e%this.width,n=(e-t)/this.width,i=this.rows.get(n);if(!i)return;const a=this.findIndex(i,t),o=i[a];if(!o||o.start>t)return;if(o.end===t+1)return o.end--,void(o.start>=o.end&&(i.splice(a,1),i.length||this.rows.delete(n)));if(o.start===t)return void o.start++;const r={value:o.value,start:t+1,end:o.end};o.end=t,i.splice(a+1,0,r)}findIndex(e,t){for(let n=0;n<e.length;n++){const{end:i}=e[n];if(t<i)return n}return e.length}forEach(e,t){const n=t?.rowModified;for(const[t,i]of this.rows){const a=n?[...i]:i;for(const n of a)e(t*this.width,n,i)}}forEachRow(e){for(const[t,n]of this.rows)e(t*this.width,n)}clear(){this.rows.clear()}keys(){return[...this.rows.keys()]}getPixelData(e=0,t){t?t.fill(0):t=new this.pixelDataConstructor(this.width*this.height*this.numComps);const{width:n,height:i,numComps:a}=this;for(let o=0;o<i;o++){const i=this.getRun(o,e);if(i)if(1===a)for(const e of i){const i=o*n,{start:a,end:r,value:s}=e;for(let e=a;e<r;e++)t[i+e]=s}else for(const e of i){const i=o*n*a,{start:r,end:s,value:l}=e;for(let e=r;e<s;e+=a)for(let n=0;n<a;n++)t[i+e+n]=l[n]}}return t}floodFill(e,t,n,i,a){const o=this.getRLE(e,t,n);if(!o)throw new Error(`Initial point ${e},${t},${n} isn't in the RLE`);const r=[[o,t,n]],s=o.value;if(s===i)throw new Error(`source (${s}) and destination (${i}) are identical`);return this.flood(r,s,i,a)}flood(e,t,n,i){let a=0;const{planar:o=!0,diagonals:r=!0,singlePlane:s=!1}=i||{},l={planar:o,diagonals:r,singlePlane:s};for(;e.length;){const i=e.pop(),[o]=i;if(o.value!==t)continue;o.value=n,a+=o.end-o.start;const r=this.findAdjacents(i,l).filter((e=>e&&e[0].value===t));e.push(...r)}return a}fillFrom(e,t){for(let n=t[2][0];n<=t[2][1];n++)for(let i=t[1][0];i<=t[1][1];i++){let a,o;for(let r=t[0][0];r<=t[0][1];r++){const t=e(r,i,n);void 0!==t?(o||(o=[],this.rows.set(i+n*this.height,o)),a&&a.value!==t&&(a=void 0),a||(a={start:r,end:r,value:t},o.push(a)),a.end++):a=void 0}}}findAdjacents(e,{diagonals:t=!0,planar:n=!0,singlePlane:s=!1}){const[l,c,d,u]=e,{start:g,end:m}=l,h=g>0&&this.getRLE(g-1,c,d),p=m<this.width&&this.getRLE(m,c,d),f=t?[g>0?g-1:g,m<this.width?m+1:m]:[g,m],v=[];h&&v.push([h,c,d]),p&&v.push([p,c,d]);for(const e of u||(s?a:i)){const[,t,l]=e,g=t+c,m=l+d;if(g<0||g>=this.height)continue;if(m<0||m>=this.depth)continue;const h=this.getRun(g,m);if(h)for(const e of h){const t=u||s&&a||n&&l>0&&r||n&&l<0&&o||i;e.end<=f[0]||e.start>=f[1]||v.push([e,g,m,t])}}return v}}},98039:(e,t,n)=>{function i(e){return a(e,"vtkVolume")||a(e,"vtkImageSlice")}function a(e,t){const n="isA"in e?e:e.actor;return!!n&&!!n.isA(t)}n.d(t,{N:()=>a,e:()=>i})},96833:(e,t,n)=>{n.d(t,{A:()=>o});var i=n(33739),a=n(99341);function o(e,t){const n=t.colorTransfer.split(" ").splice(1).map(parseFloat),{shiftRange:o}=function(e){let t=1/0,n=-1/0;for(let i=0;i<e.length;i+=4)t=Math.min(t,e[i]),n=Math.max(n,e[i]);const i=(n-t)/2;return{shiftRange:[-i,i],min:t,max:n}}(n),r=o[0],s=o[1]-o[0],l=i.Ay.newInstance(),c=[];for(let e=0;e<n.length;e+=4){let t=n[e];const i=n[e+1],a=n[e+2],o=n[e+3];t=(t-r)/s,c.push([t,i,a,o])}!function(e,t,n){const i=t[1]-t[0],a=e.map((([e,n,a,o])=>[e*i+t[0],n,a,o]));n.removeAllPoints(),a.forEach((([e,t,i,a])=>n.addRGBPoint(e,t,i,a)))}(c,o,l),e.getProperty().setRGBTransferFunction(0,l);const d=t.scalarOpacity.split(" ").splice(1).map(parseFloat),u=a.Ay.newInstance(),g=[];for(let e=0;e<d.length;e+=2){let t=d[e];const n=d[e+1];t=(t-r)/s,g.push([t,n])}!function(e,t,n){const i=t[1]-t[0],a=e.map((([e,n])=>[e*i+t[0],n]));n.removeAllPoints(),a.forEach((([e,t])=>n.addPoint(e,t)))}(g,o,u);const m=e.getProperty();m.setScalarOpacity(0,u);const[h,p,f,v]=t.gradientOpacity.split(" ").splice(1).map(parseFloat);m.setUseGradientOpacity(0,!0),m.setGradientOpacityMinimumValue(0,h),m.setGradientOpacityMinimumOpacity(0,p),m.setGradientOpacityMaximumValue(0,f),m.setGradientOpacityMaximumOpacity(0,v),"1"===t.interpolation&&m.setInterpolationTypeToFastLinear(),m.setShade("1"===t.shade);const w=parseFloat(t.ambient),I=parseFloat(t.diffuse),A=parseFloat(t.specular),S=parseFloat(t.specularPower);m.setAmbient(w),m.setDiffuse(I),m.setSpecular(A),m.setSpecularPower(S)}},91979:(e,t,n)=>{n.d(t,{A:()=>o});var i=n(39536),a=n(24724);const o=e=>{const t=function(e){const t=(0,i.qO)(),n=[];return t.forEach((t=>{const i=(0,a.A)(e);i.length&&n.push({renderingEngine:t,viewportIds:i.map((e=>e.id))})})),n}(e);t?.length&&t.forEach((({renderingEngine:e,viewportIds:t})=>{e.hasBeenDestroyed||e.renderViewports(t)}))}},89131:(e,t,n)=>{n.d(t,{KP:()=>r,SJ:()=>o});var i=n(74876),a=n(71851);function o(e){const t={...i.get(a.MetadataModules.IMAGE_PLANE,e)};return t.columnPixelSpacing||(t.columnPixelSpacing=1),t.rowPixelSpacing||(t.rowPixelSpacing=1),t.columnCosines||(t.columnCosines=[0,1,0]),t.rowCosines||(t.rowCosines=[1,0,0]),t.imagePositionPatient||(t.imagePositionPatient=[0,0,0]),t.imageOrientationPatient||(t.imageOrientationPatient=new Float32Array([1,0,0,0,1,0])),t}function r(e){const t=e.imageId,{pixelRepresentation:n,bitsAllocated:r,bitsStored:s,highBit:l,photometricInterpretation:c,samplesPerPixel:d}=i.get("imagePixelModule",t),{windowWidth:u,windowCenter:g,voiLUTFunction:m}=e,{modality:h}=i.get("generalSeriesModule",t),p=i.get("scalingModule",t),f=i.get(a.MetadataModules.CALIBRATION,t),v=function(e){return Object.values(a.VOILUTFunctionType).includes(e)?e:a.VOILUTFunctionType.LINEAR}(m);return{calibration:f,scalingFactor:p,voiLUTFunction:v,modality:h,imagePlaneModule:o(t),imagePixelModule:{bitsAllocated:r,bitsStored:s,samplesPerPixel:d,highBit:l,photometricInterpretation:c,pixelRepresentation:n,windowWidth:u,windowCenter:g,modality:h,voiLUTFunction:v}}}},42384:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(3823),a=n(74876),o=n(26896);function r(e){const{imagePositionPatient:t,imageOrientationPatient:n}=a.get("imagePlaneModule",e[0]),r=i.eR.fromValues(n[0],n[1],n[2]),s=i.eR.fromValues(n[3],n[4],n[5]),l=i.eR.create();i.eR.cross(l,r,s);const c=i.eR.fromValues(t[0],t[1],t[2]);let d;function u(e){const{imagePositionPatient:t}=a.get("imagePlaneModule",e),n=i.eR.create(),o=i.eR.fromValues(t[0],t[1],t[2]);return i.eR.sub(n,c,o),i.eR.dot(n,l)}if("wadouri"===e[0].split(":")[0]){const t=[e[0],e[Math.floor(e.length/2)]],n=(u(t[0]),u(t[1]),a.get("imagePlaneModule",t[1]));if(!n)throw new Error("Incomplete metadata required for volume construction.");const o=i.eR.create(),r=i.eR.fromValues(n.imagePositionPatient[0],n.imagePositionPatient[1],n.imagePositionPatient[2]);i.eR.sub(o,c,r);const s=i.eR.dot(o,l);d=Math.abs(s)/Math.floor(e.length/2)}else{const t=e.map((e=>({distance:u(e),imageId:e})));t.sort(((e,t)=>t.distance-e.distance));const n=t.length;d=Math.abs(t[n-1].distance-t[0].distance)/(n-1)}const{sliceThickness:g,spacingBetweenSlices:m}=a.get("imagePlaneModule",e[0]),{strictZSpacingForVolumeViewport:h}=(0,o.D0)().rendering;return 0!==d&&!isNaN(d)||h||(m?(console.debug("Could not calculate spacing. Using spacingBetweenSlices"),d=m):g?(console.debug("Could not calculate spacing and no spacingBetweenSlices. Using sliceThickness"),d=g):(console.debug("Could not calculate spacing. The VolumeViewport visualization is compromised. Setting spacing to 1 to render"),d=1)),d}},84061:(e,t,n)=>{function i(e,t,n){return Math.max(t,Math.min(n,e))}n.d(t,{A:()=>i,q:()=>i})},13859:(e,t,n)=>{n.r(t),n.d(t,{findMatchingColormap:()=>d,getColormap:()=>l,getColormapNames:()=>c,registerColormap:()=>s});var i=n(660),a=n(74638),o=n(98039);const r=new Map;function s(e){e.name=e.name||e.Name,r.set(e.name,e)}function l(e){return r.get(e)}function c(){return Array.from(r.keys())}function d(e,t){const n=i.A.rgbPresetNames.map((e=>i.A.getPresetByName(e))),r=c().map((e=>l(e))),s=n.concat(r).find((t=>{const{RGBPoints:n}=t;if(n.length!==e.length)return!1;for(let t=0;t<n.length;t+=4)if(!(0,a.Ay)(n.slice(t+1,t+4),e.slice(t+1,t+4)))return!1;return!0}));if(!s)return null;const d=[];if((0,o.N)(t,"vtkVolume")){const e=t.getProperty().getScalarOpacity(0).getDataPointer();if(!e)return{name:s.Name};for(let t=0;t<e.length;t+=2)d.push({value:e[t],opacity:e[t+1]})}return{name:s.Name,opacity:d}}},74657:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(33739);function a(e){const t=i.Ay.newInstance();let n=0,a=1024;return void 0!==e.lower&&void 0!==e.upper&&(n=e.lower,a=e.upper),t.addRGBPoint(n,0,0,0),t.addRGBPoint(a,1,1,1),t}},40256:(e,t,n)=>{n.d(t,{A:()=>s});var i=n(33739),a=n(42008),o=n(68136),r=n(58977);function s(e,t=1024){const{windowWidth:n,windowCenter:s}=o.toWindowLevel(e.lower,e.upper),l=Array.from({length:t},((e,n)=>(n+1)/(t+2))).flatMap((e=>[(0,r.i)(e,s,n),e,e,e,.5,0])),c=i.Ay.newInstance();return c.buildFunctionFromArray(a.Ay.newInstance({values:l,numberOfComponents:6})),c}},63470:(e,t,n)=>{function i(e,t,n=0){const i=[];for(let a=n;a<e.length;a+=t)i.push(a);return i}n.d(t,{A:()=>i})},99949:(e,t,n)=>{function i(e){if(null===e||"object"!=typeof e)return e;if("function"==typeof e)return e;if("function"==typeof structuredClone)return e;if(Array.isArray(e))return e.map(i);{const t={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=i(e[n]));return t}}n.d(t,{G:()=>i})},20286:(e,t,n)=>{function i(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24);return(t>>>0).toString(36)}n.d(t,{A:()=>i})},88619:(e,t,n)=>{n.d(t,{A:()=>s});var i=n(3823),a=n(74876),o=n(85008),r=n(19325);function s(e,t,n,s){const{direction:l,spacing:c,imageIds:d}=e,{ignoreSpacing:u=!1}=s||{};if(!d?.length)return;const g=l.slice(6,9),m=i.eR.dot(g,n);if(Math.abs(m)<1-r.EPSILON)return void console.debug("View plane normal is not parallel to the image scan axis. Unable to find closest imageId.");let h,p;if(!u){h=(0,o.A)({direction:l,spacing:c},n)/2}let f=1/0;for(let e=0;e<d.length;e++){const o=d[e],r=a.get("imagePlaneModule",o);if(!r?.imagePositionPatient){console.warn(`Missing imagePositionPatient for imageId: ${o}`);continue}const{imagePositionPatient:s}=r,l=i.eR.create();i.eR.sub(l,t,s);const c=Math.abs(i.eR.dot(l,n));u?c<f&&(f=c,p=o):c<h&&c<f&&(f=c,p=o)}return void 0===p&&console.debug("No imageId found within the specified criteria (half spacing or absolute closest)."),p}},53932:(e,t,n)=>{n.d(t,{T:()=>r});var i=n(3823),a=n(19325),o=n(89131);function r(e){const{imagePlaneModule:t,imagePixelModule:n,voiLUTFunction:r,modality:s,scalingFactor:l,calibration:c}=(0,o.KP)(e);let{rowCosines:d,columnCosines:u}=t;null!=d&&null!=u||(d=[1,0,0],u=[0,1,0]);const g=i.eR.fromValues(d[0],d[1],d[2]),m=i.eR.fromValues(u[0],u[1],u[2]),h=i.eR.create();i.eR.cross(h,g,m);let p=t.imagePositionPatient;null==p&&(p=[0,0,0]);const f=t.columnPixelSpacing||e.columnPixelSpacing,v=t.rowPixelSpacing||e.rowPixelSpacing,w=e.columns,I=e.rows,A=a.EPSILON;return{numberOfComponents:e.numberOfComponents||function(e){let t=1;("RGB"===e||e.includes("YBR")||"PALETTE COLOR"===e)&&(t=3);return t}(n.photometricInterpretation),origin:p,direction:[...g,...m,...h],dimensions:[w,I,1],spacing:[f,v,A],numVoxels:w*I*1,imagePlaneModule:t,imagePixelModule:n,bitsAllocated:n.bitsAllocated,voiLUTFunction:r,modality:s,scalingFactor:l,calibration:c,scanAxisNormal:h}}},47476:(e,t,n)=>{n.d(t,{A:()=>o});var i=n(20537),a=n(65292);const o=function(e){const t=e.getCamera(),{spacingInNormalDirection:n,imageVolume:o}=(0,a.A)(e,t);if(!o)return;const{viewPlaneNormal:r,focalPoint:s}=t,l=e.getActors().find((e=>e.referencedId===o.volumeId||e.uid===o.volumeId));l||console.warn("No actor found for with actorUID of",o.volumeId);const c=l.actor,d=(0,i.A)(c,r,s),{min:u,max:g,current:m}=d,h=Math.round((g-u)/n)+1;let p=(m-u)/(g-u)*h;return p=Math.floor(p),p>h-1?p=h-1:p<0&&(p=0),{numberOfSlices:h,imageIndex:p}}},32173:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74876);function a(e){const t=i.get("modalityLutModule",e)||{},n=i.get("generalSeriesModule",e)||{},{modality:a}=n,o={rescaleSlope:t.rescaleSlope||1,rescaleIntercept:t.rescaleIntercept??0,modality:a},r=i.get("scalingModule",e)||{};return{...o,..."PT"===a&&{suvbw:r.suvbw,suvbsa:r.suvbsa,suvlbm:r.suvlbm}}}},20537:(e,t,n)=>{n.d(t,{A:()=>d});var i=n(89265),a=n(15105),o=n(19325);const r=o.EPSILON*o.EPSILON,s=e=>Math.abs(Math.abs(e)-1)<r,l=(e,t)=>s(e[t])||s(e[t+1])||s(e[t+2]),c=e=>l(e,0)&&l(e,3)&&l(e,6);function d(e,t,n){const o=e.getMapper().getInputData();let r;const s=o.getDirection();if(c(s))r=(0,a.A)(e);else{const[e,t,n]=o.getDimensions();r=[[0,0,0],[e-1,0,0],[0,t-1,0],[e-1,t-1,0],[0,0,n-1],[e-1,0,n-1],[0,t-1,n-1],[e-1,t-1,n-1]].map((e=>o.indexToWorld(e)))}const l=i.A.buildFromDegree().identity().rotateFromDirections(t,[1,0,0]);r.forEach((e=>l.apply(e)));const d=[...n];l.apply(d);const u=d[0];let g=1/0,m=-1/0;for(let e=0;e<8;e++){const t=r[e][0];t>m&&(m=t),t<g&&(g=t)}return{min:g,max:m,current:u,actor:e,viewPlaneNormal:t,focalPoint:n}}},85008:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(3823);function a(e,t){const{direction:n,spacing:a}=e,o=n.slice(0,3),r=n.slice(3,6),s=n.slice(6,9),l=[i.eR.dot(o,t),i.eR.dot(r,t),i.eR.dot(s,t)],c=i.eR.create();i.eR.set(c,l[0]*a[0],l[1]*a[1],l[2]*a[2]);return i.eR.length(c)}},65292:(e,t,n)=>{n.d(t,{A:()=>d});var i=n(49038),a=n(19325),o=n(85008),r=n(87142),s=n(12437);const l=1+a.EPSILON,c=e=>!!(0,r.getVolumeLoaderSchemes)().find((t=>{return n=e.volumeId,(i=t)===n.substring(0,Math.min(n.length,i.length));var n,i}));function d(e,t,n,a=!1){const{viewPlaneNormal:o}=t,r=e.getActors();if(!r.length)return{spacingInNormalDirection:null,imageVolume:null,actorUID:null};const d=r.map((e=>{const t=e.referencedId??e.uid;return i.Ay.getVolume(t)})).filter((e=>!!e));if(n){const t=(0,s.A)(n),i=d.findIndex((e=>t.includes(e.volumeId))),l=d[i],{uid:c}=r[i];return{imageVolume:l,spacingInNormalDirection:u(l,o,e,a),actorUID:c}}if(!d.length)return{spacingInNormalDirection:null,imageVolume:null,actorUID:null};const g={spacingInNormalDirection:1/0,imageVolume:null,actorUID:null},m=d.find(c);for(let t=0;t<d.length;t++){const n=d[t];if(m&&!c(n))continue;const i=u(n,o,e);i*l<g.spacingInNormalDirection&&(g.spacingInNormalDirection=i,g.imageVolume=n,g.actorUID=r[t].uid)}return g}function u(e,t,n,i=!1){const{slabThickness:a}=n.getProperties();let r=a;return a&&i||(r=(0,o.A)(e,t)),r}},24724:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(39536);const a=function(e){const t=(0,i.qO)(),n=[];return t.forEach((t=>{const i=t.getVolumeViewports().filter((t=>t.hasVolumeId(e)));n.push(...i)})),n}},70210:(e,t,n)=>{function i(e){let t=[];const[n,i]=e.getRange();e.getTable(n,i,1024,t),t=t.filter(((e,t)=>t%3==0));const a=[...Array(1024).keys()].map(((e,t)=>n+(i-n)/1023*t)),o=t[256],r=Math.log((1-o)/o),s=a[256],l=t[768],c=Math.log((1-l)/l),d=a[768],u=Math.round(4*(d-s)/(r-c)),g=Math.round(s+u*r/4);return[Math.round(g-u/2),Math.round(g+u/2)]}n.d(t,{A:()=>i})},15105:(e,t,n)=>{function i(e){const t=e.getMapper().getInputData(),n=t.extentToBounds(t.getExtent());return[[n[0],n[2],n[4]],[n[0],n[2],n[5]],[n[0],n[3],n[4]],[n[0],n[3],n[5]],[n[1],n[2],n[4]],[n[1],n[2],n[5]],[n[1],n[3],n[4]],[n[1],n[3],n[5]]]}n.d(t,{A:()=>i})},12437:(e,t,n)=>{n.d(t,{A:()=>i});const i=e=>{const t="volumeId:",n=e.includes(t)?e.substring(9):e,i=n.indexOf("sliceIndex=");return-1===i?n:n.substring(0,i-1)}},4031:(e,t,n)=>{n.d(t,{A:()=>o});var i=n(20537),a=n(65292);const o=function(e,t,n=!1){const o=e.getCamera(),{focalPoint:r,viewPlaneNormal:s}=o,{spacingInNormalDirection:l,actorUID:c}=(0,a.A)(e,o,t,n);if(!c)throw new Error(`Could not find image volume with id ${t} in the viewport`);const d=e.getActor(c);if(!d)return console.warn("No actor found for with actorUID of",c),null;const u=d.actor;return{sliceRange:(0,i.A)(u,s,r),spacingInNormalDirection:l,camera:o}}},61375:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(4031);const a=function(e,t,n=!1){const{sliceRange:a,spacingInNormalDirection:o,camera:r}=(0,i.A)(e,t,n),{min:s,max:l,current:c}=a,d=Math.round((l-s)/o),u=(c-s)/(l-s)*d;return{numScrollSteps:d,currentStepIndex:Math.round(u),sliceRangeInfo:{sliceRange:a,spacingInNormalDirection:o,camera:r}}}},30169:(e,t,n)=>{n.d(t,{a:()=>i});const i=e=>Object.values(e).some((e=>"number"==typeof e&&!Number.isInteger(e)))},38883:(e,t,n)=>{function i(e){return Array.isArray(e)?e.some((e=>Number.isNaN(e))):Number.isNaN(e)}n.d(t,{A:()=>i})},39537:(e,t,n)=>{function i(e){const t=e.indexOf(":");return e.substring(t+1)}n.d(t,{A:()=>i})},17791:(e,t,n)=>{n.d(t,{A:()=>s});var i=n(74876);const a=new Map,o="imageRetrieveConfiguration",r={IMAGE_RETRIEVE_CONFIGURATION:o,clear:()=>{a.clear()},add:(e,t)=>{a.set(e,t)},clone:()=>new Map(a),restore:e=>{a.clear(),e.forEach(((e,t)=>{a.set(t,e)}))},get:(e,...t)=>{if(e===o)return t.map((e=>a.get(e))).find((e=>void 0!==e))}};(0,i.addProvider)(r.get.bind(r));const s=r},10297:(e,t,n)=>{n.r(t),n.d(t,{FrameRange:()=>mt.A,HistoryMemo:()=>a,PointsManager:()=>xe.A,ProgressiveIterator:()=>Ne.A,RLEVoxelMap:()=>Ze.A,VoxelManager:()=>Ke.A,actorIsA:()=>ue.N,applyPreset:()=>Ee.A,autoLoad:()=>Mt.A,buildMetadata:()=>ft.KP,calculateNeighborhoodStats:()=>kt,calculateSpacingBetweenImageIds:()=>Nt.A,calculateViewportsSpatialRegistration:()=>Ae,calibratedPixelSpacingMetadataProvider:()=>E,clamp:()=>x.A,clip:()=>Ct,color:()=>r,colormap:()=>st,convertStackToVolumeViewport:()=>He,convertToGrayscale:()=>Qe,convertVolumeToStackViewport:()=>ze,createLinearRGBTransferFunction:()=>g.A,createSigmoidRGBTransferFunction:()=>d.A,createSubVolume:()=>Ot,decimate:()=>Ue.A,deepClone:()=>Dt.G,deepEqual:()=>gt,deepMerge:()=>Re.A,eventListener:()=>i,fnv1aHash:()=>ht.A,generateVolumePropsFromImageIds:()=>je.D,genericMetadataProvider:()=>_e.A,getBufferConfiguration:()=>We.h,getClosestImageId:()=>P.A,getClosestStackImageIndexForPoint:()=>he,getCurrentVolumeViewportSlice:()=>fe,getDynamicVolumeInfo:()=>Rt,getImageDataMetadata:()=>pt.T,getImageLegacy:()=>Te,getImageSliceDataForVolumeViewport:()=>de.A,getMinMax:()=>f,getPixelSpacingInformation:()=>Bt,getRandomSampleFromArray:()=>tt,getRuntimeId:()=>S,getScalingParameters:()=>Me.A,getSliceRange:()=>le.A,getSpacingInNormalDirection:()=>D.A,getTargetVolumeAndSpacingInNormalDir:()=>T.A,getViewportImageCornersInWorld:()=>Se,getViewportImageIds:()=>et,getViewportModality:()=>Wt,getViewportsWithImageURI:()=>ge,getViewportsWithVolumeId:()=>V.A,getVoiFromSigmoidRGBTransferFunction:()=>u.A,getVolumeActorCorners:()=>C.A,getVolumeDirectionVectors:()=>Vt,getVolumeId:()=>it.A,getVolumeSliceRangeInfo:()=>re.A,getVolumeViewportScrollInfo:()=>se.A,getVolumeViewportsContainingSameVolumes:()=>O,hasFloatScalingParameters:()=>at.a,hasNaNValues:()=>be.A,imageIdToURI:()=>y.A,imageRetrieveMetadataProvider:()=>ke.A,imageToWorldCoords:()=>oe,indexWithinDimensions:()=>L,invertRgbTransferFunction:()=>c.A,isEqual:()=>R.n4,isEqualAbs:()=>R.Ph,isEqualNegative:()=>R.WC,isImageActor:()=>ue.e,isOpposite:()=>M,isPTPrescaledWithSUV:()=>H,isValidVolume:()=>Oe,isVideoTransferSyntax:()=>Be,jumpToSlice:()=>_t,loadImageToCanvas:()=>X,logger:()=>Ut,makeVolumeMetadata:()=>Le.A,planar:()=>me,pointInShapeCallback:()=>ot.ii,renderToCanvasCPU:()=>Y,renderToCanvasGPU:()=>$,roundNumber:()=>Xe,roundToPrecision:()=>Je,scaleArray:()=>Pt,scaleRgbTransferFunction:()=>m,scroll:()=>Lt,snapFocalPointToSlice:()=>ce.A,sortImageIdsAndGetSpacing:()=>Ce.A,spatialRegistrationMetadataProvider:()=>Ie,splitImageIdsBy4DTags:()=>xt,transferFunctionUtils:()=>lt,transformIndexToWorld:()=>U.A,transformWorldToIndex:()=>N.A,transformWorldToIndexContinuous:()=>N.p,triggerEvent:()=>h.A,updateVTKImageDataWithCornerstoneImage:()=>Ve.J,uuidv4:()=>p.A,windowLevel:()=>rt,worldToImageCoords:()=>ae});var i={};n.r(i),n.d(i,{MultiTargetEventListenerManager:()=>l,TargetEventListeners:()=>s});var a={};n.r(a),n.d(a,{DefaultHistoryMemo:()=>ie,HistoryMemo:()=>ne});var o,r={};n.r(r),n.d(r,{hexToRgb:()=>ut,rgbToHex:()=>dt}),function(e){e[e.None=0]="None",e[e.Capture=1]="Capture",e[e.Bubble=2]="Bubble"}(o||(o={}));class s{constructor(e){this._eventListeners=new Map,this._children=new Map,this._target=e}get isEmpty(){return 0===this._eventListeners.size&&0===this._children.size}addEventListener(e,t,n){const i=e.indexOf(".");if(-1!==i){const a=e.substring(0,i);let o=this._children.get(a);o||(o=new s(this._target),this._children.set(a,o)),e=e.substring(i+1),o.addEventListener(e,t,n)}else this._addEventListener(e,t,n)}removeEventListener(e,t,n){const i=e.indexOf(".");if(-1!==i){const a=e.substring(0,i),o=this._children.get(a);if(!o)return;e=e.substring(i+1),o.removeEventListener(e,t,n),o.isEmpty&&this._children.delete(a)}else this._removeEventListener(e,t,n)}reset(){Array.from(this._children.entries()).forEach((([e,t])=>{if(t.reset(),!t.isEmpty)throw new Error("Child is not empty and cannot be removed");this._children.delete(e)})),this._unregisterAllEvents()}_addEventListener(e,t,n){let i=this._eventListeners.get(e);i||(i=new Map,this._eventListeners.set(e,i));const a=n?.capture??!1?o.Capture:o.Bubble,r=i.get(t)??o.None;r&a?console.warn("A listener is already registered for this phase"):(i.set(t,r|a),this._target.addEventListener(e,t,n))}_removeEventListener(e,t,n){const i=n?.capture??!1?o.Capture:o.Bubble,a=this._eventListeners.get(e);if(!a)return;(t?[t]:Array.from(a.keys())).forEach((t=>{const r=a.get(t)??o.None;if(!!!(r&i))return;this._target.removeEventListener(e,t,n);const s=r^i;s===o.None?a.delete(t):a.set(t,s)})),a.size||this._eventListeners.delete(e)}_unregisterAllListeners(e,t){Array.from(t.entries()).forEach((([t,n])=>{for(let i=o.Capture;n;i<<=1){if(!(n&i))continue;const a=i===o.Capture;this.removeEventListener(e,t,{capture:a}),n^=i}}))}_unregisterAllEvents(){Array.from(this._eventListeners.entries()).forEach((([e,t])=>{this._unregisterAllListeners(e,t)}))}}class l{constructor(){this._targetsEventListeners=new Map}addEventListener(e,t,n,i){let a=this._targetsEventListeners.get(e);a||(a=new s(e),this._targetsEventListeners.set(e,a)),a.addEventListener(t,n,i)}removeEventListener(e,t,n,i){const a=this._targetsEventListeners.get(e);a&&(a.removeEventListener(t,n,i),a.isEmpty&&this._targetsEventListeners.delete(e))}reset(){Array.from(this._targetsEventListeners.entries()).forEach((([e,t])=>{t.reset(),this._targetsEventListeners.delete(e)}))}}var c=n(50134),d=n(40256),u=n(70210),g=n(74657);function m(e,t){const n=e.getSize();for(let i=0;i<n;i++){const n=[];e.getNodeValue(i,n),n[1]=n[1]*t,n[2]=n[2]*t,n[3]=n[3]*t,e.setNodeValue(i,n)}}var h=n(69372),p=n(80221);function f(e){let t,n=e[0],i=e[0];const a=e.length;for(let o=1;o<a;o++)t=e[o],n=Math.min(n,t),i=Math.max(i,t);return{min:n,max:i}}const v=Symbol("LastRuntimeId"),w={},I=4294967295,A="-";function S(e,t,n){return function(e,t,n){let i=e[t];i instanceof Array||(i=[0],Object.defineProperty(e,t,{value:i}));for(let e=!0,t=0;e&&t<i.length;++t){let a=0|i[t];a<n?(e=!1,a+=1):(a=0,t+1===i.length&&i.push(0)),i[t]=a}return i}(null!==e&&"object"==typeof e?e:w,v,("number"==typeof n&&n>0?n:I)>>>0).join("string"==typeof t?t:A)}var y=n(39537);const b={},E={add:(e,t)=>{const n=(0,y.A)(e);b[n]=t},get:(e,t)=>{if("calibratedPixelSpacing"===e){const e=(0,y.A)(t);return b[e]}}};var x=n(84061),R=n(74638);function M(e,t,n=1e-5){return Math.abs(e[0]+t[0])<n&&Math.abs(e[1]+t[1])<n&&Math.abs(e[2]+t[2])<n}var P=n(88619),D=n(85008),T=n(65292),C=n(15105);function L(e,t){return!(e[0]<0||e[0]>=t[0]||e[1]<0||e[1]>=t[1]||e[2]<0||e[2]>=t[2])}var _=n(39536);const O=function(e,t){let n;n=t?[(0,_.lD)(t)]:(0,_.qO)();const i=[];return n.forEach((t=>{const n=e.getActors(),a=t.getVolumeViewports();for(const e of a){const t=e.getActors();if(t.length!==n.length)continue;n.every((({uid:e})=>t.find((t=>e===t.uid))))&&i.push(e)}})),i};var V=n(24724),N=n(38669),U=n(94741),k=n(80068),F=n(74876),B=n(71851),W=n(51159),j=n(3823),q=n(30135),G=n(56706);const H=e=>e.preScale.scaled&&e.preScale.scalingParameters.suvbw;function $(e,t,n=void 0,i="_thumbnails",a={displayArea:{imageArea:[1,1]}}){if(!(e&&e instanceof HTMLCanvasElement))throw new Error("canvas element is required");const o=!t.imageId,r=!o&&t,s=o&&t,l=`renderGPUViewport-${r.imageId||s.volumeId}`,c=document.createElement("div"),d=window.devicePixelRatio||1;a.displayArea||(a.displayArea={imageArea:[1,1]});const u=e.width,g=e.height;c.style.width=`${u/d+q.p8}px`,c.style.height=`${g/d+q.p8}px`,c.style.visibility="hidden",c.style.position="absolute",document.body.appendChild(c);const m=l.split(":").join("-");c.setAttribute("viewport-id-for-remove",m);const h=(0,q.Ay)(c),p=(0,_.lD)(i)||new G.Ay(i);let f=p.getViewport(l);if(!f){const e={viewportId:l,type:o?B.ViewportType.ORTHOGRAPHIC:B.ViewportType.STACK,element:c,defaultOptions:{...a,suppressEvents:!0}};p.enableElement(e),f=p.getViewport(l)}return new Promise((i=>{let u=!1,{viewReference:g}=a;const v=t=>{if(u)return;if(g){const e=g;return g=null,f.setViewReference(e),void f.render()}e.getContext("2d").drawImage(h,0,0,h.width,h.height,0,0,e.width,e.height);const n=f.canvasToWorld([0,0]),a=f.canvasToWorld([h.width/d,0]),o=f.canvasToWorld([0,h.height/d]),r=j.eR.sub([0,0,0],f.canvasToWorld([1/d,0]),n),s=j.eR.sub([0,0,0],f.canvasToWorld([0,1/d]),n);u=!0,c.removeEventListener(B.Events.IMAGE_RENDERED,v),setTimeout((()=>{p.disableElement(l);document.querySelectorAll(`[viewport-id-for-remove="${m}"]`).forEach((e=>{e.remove()}))}),0),i({origin:n,bottomLeft:o,topRight:a,thicknessMm:1,rightVector:r,downVector:s})};c.addEventListener(B.Events.IMAGE_RENDERED,v),o?f.setVolumes([s],!1,!0):f.renderImageObject(t),f.resetCamera(),"PT"!==n||H(r)||f.setProperties({voiRange:{lower:r.minPixelValue,upper:r.maxPixelValue}}),f.render()}))}var z=n(36931),K=n(7808),Z=n(5057);function Y(e,t,n,i,a){if(t.volumeId)throw new Error("Unsupported volume rendering for CPU");const o=t,r={canvas:e,viewport:(0,z.A)(e,o,n),image:o,renderingTools:{}};r.transform=(0,K.A)(r);return new Promise(((e,t)=>{(0,Z.A)(r,true),e(null)}))}var J=n(49038);function X(e){const{canvas:t,imageId:n,viewReference:i,requestType:a=B.RequestType.Thumbnail,priority:o=-5,renderingEngineId:r="_thumbnails",useCPURendering:s=!1,thumbnail:l=!1,imageAspect:c=!1,viewportOptions:d}=e,u=i?.volumeId,g=u&&!n,m=i&&d?{...d,viewReference:i}:d,h=s?Y:$;return new Promise(((e,i)=>{function d(n,a){const{modality:o}=F.get("generalSeriesModule",a)||{},d=!g&&n,u=g&&n;d&&(d.isPreScaled=d.isPreScaled||d.preScale?.scaled),l&&(t.height=256,t.width=256),c&&d&&(t.width=d&&t.height*d.width/d.height),t.style.width=t.width/devicePixelRatio+"px",t.style.height=t.height/devicePixelRatio+"px",u&&s&&i(new Error("CPU rendering of volume not supported")),h(t,n,o,r,m).then(e)}function p(e,t){console.error(e,t),i(e)}const f={useRGBA:!!s,requestType:a};if(u){const e=J.Ay.getVolume(u);e||i(new Error(`Volume id ${u} not found in cache`));d(e,e.imageIds[0])}else W.A.addRequest(function(e,t,n){return(0,k.loadAndCacheImage)(e,n).then((t=>{d.call(this,t,e)}),(t=>{p.call(this,t,e)}))}.bind(null,n,null,f),a,{imageId:n},o)}))}var Q=n(10364);const ee="CORNERSTONE_TOOLS_HISTORY_UNDO",te="CORNERSTONE_TOOLS_HISTORY_REDO";class ne{constructor(e="Tools",t=50){this.position=-1,this.redoAvailable=0,this.undoAvailable=0,this.ring=new Array,this.label=e,this._size=t}get size(){return this._size}set size(e){this.ring=new Array(e),this._size=e,this.position=-1,this.redoAvailable=0,this.undoAvailable=0}undo(e=1){for(;e>0&&this.undoAvailable>0;){const t=this.ring[this.position];t.restoreMemo(!0),t.id&&Q.A.dispatchEvent(new CustomEvent(ee,{detail:{isUndo:!0,id:t.id,operationType:t.operationType||"annotation",memo:t}})),e--,this.redoAvailable++,this.undoAvailable--,this.position=(this.position-1+this.size)%this.size}}undoIf(e){return!!(this.undoAvailable>0&&e(this.ring[this.position]))&&(this.undo(),!0)}redo(e=1){for(;e>0&&this.redoAvailable>0;){const t=(this.position+1)%this.size,n=this.ring[t];n.restoreMemo(!1),n.id&&Q.A.dispatchEvent(new CustomEvent(te,{detail:{isUndo:!1,id:n.id,operationType:n.operationType||"annotation",memo:n}})),e--,this.position=t,this.undoAvailable++,this.redoAvailable--}}push(e){if(!e)return;const t=e.restoreMemo?e:e.createMemo?.();return t?(this.redoAvailable=0,this.undoAvailable<this._size&&this.undoAvailable++,this.position=(this.position+1)%this._size,this.ring[this.position]=t,t):void 0}}const ie=new ne;const ae=function(e,t){const n=(0,F.get)("imagePlaneModule",e);if(!n)throw new Error(`No imagePlaneModule found for imageId: ${e}`);const{columnCosines:i,rowCosines:a,imagePositionPatient:o}=n;let{columnPixelSpacing:r,rowPixelSpacing:s}=n;r||=1,s||=1;const l=j.eR.create();j.eR.scaleAndAdd(l,o,i,-r/2),j.eR.scaleAndAdd(l,l,a,-s/2);const c=j.eR.create();return j.eR.sub(c,t,l),[j.eR.dot(c,a)/s,j.eR.dot(c,i)/r]};function oe(e,t){const n=(0,F.get)("imagePlaneModule",e);if(!n)throw new Error(`No imagePlaneModule found for imageId: ${e}`);const{columnCosines:i,rowCosines:a,imagePositionPatient:o}=n;let{columnPixelSpacing:r,rowPixelSpacing:s}=n;r||=1,s||=1;const l=j.eR.create();return j.eR.scaleAndAdd(l,o,a,s*(t[0]-.5)),j.eR.scaleAndAdd(l,l,i,r*(t[1]-.5)),Array.from(l)}var re=n(4031),se=n(61375),le=n(20537),ce=n(80500),de=n(47476),ue=n(98039);function ge(e){const t=(0,_.qO)(),n=[];return t.forEach((t=>{t.getViewports().forEach((t=>{t.hasImageURI(e)&&n.push(t)}))})),n}var me=n(52268);function he(e,t){const n=function(e,t){const n=t.getImageIds(),i=t.getCurrentImageIdIndex();if(0===n.length)return null;const a=t=>{const n=function(e){const t=F.get("imagePlaneModule",e);if(!(t&&t.rowCosines instanceof Array&&3===t.rowCosines.length&&t.columnCosines instanceof Array&&3===t.columnCosines.length&&t.imagePositionPatient instanceof Array&&3===t.imagePositionPatient.length))return null;const{rowCosines:n,columnCosines:i,imagePositionPatient:a}=t,o=j.eR.set(j.eR.create(),...n),r=j.eR.set(j.eR.create(),...i),s=j.eR.cross(j.eR.create(),o,r);return{rowCosines:n,columnCosines:i,imagePositionPatient:a,planeNormal:s}}(t);if(!n)return null;const i=me.planeEquation(n.planeNormal,n.imagePositionPatient);return me.planeDistanceToPoint(i,e)},o={distance:a(n[i])??1/0,index:i},r=n.slice(i+1);for(let e=0;e<r.length;e++){const t=a(r[e]);if(null!==t){if(!(t<=o.distance))break;o.distance=t,o.index=e+i+1}}const s=n.slice(0,i);for(let e=s.length-1;e>=0;e--){const t=a(s[e]);if(null!==t&&t!==o.distance){if(!(t<o.distance))break;o.distance=t,o.index=e}}return o.distance===1/0?null:o}(e,t);return n?n.index:null}var pe=n(51919);function fe(e){const{width:t,height:n}=e.getCanvas(),{sliceToIndexMatrix:i,indexToSliceMatrix:a}=e.getSliceViewInfo(),o=(0,pe.e)(e,[0,0]),r=(0,pe.e)(e,[t-1,0]),s=(0,pe.e)(e,[0,n-1]),l=j.eR.sub(j.eR.create(),r,o),c=j.eR.sub(j.eR.create(),s,o),d=j.eR.cross(j.eR.create(),l,c);j.eR.normalize(l,l),j.eR.normalize(c,c),j.eR.normalize(d,d);const u=Math.max(Math.abs(l[0]),Math.abs(l[1]),Math.abs(l[2])),g=Math.max(Math.abs(c[0]),Math.abs(c[1]),Math.abs(c[2]));if(!j.Fd.equals(1,u)||!j.Fd.equals(1,g))throw new Error("Livewire is not available for rotate/oblique viewports");const{voxelManager:m}=e.getImageData(),h=e.getSliceViewInfo(),p=m.getSliceData(h);return{width:h.width,height:h.height,scalarData:p,sliceToIndexMatrix:i,indexToSliceMatrix:a}}const ve={},we={add:(e,t)=>{const[n,i]=e,a=`${n}_${i}`;ve[a]||(ve[a]={}),ve[a]=t},get:(e,t,n)=>{if("spatialRegistrationModule"!==e)return;const i=`${t}_${n}`;if(ve[i])return ve[i];const a=`${n}_${t}`;return ve[a]?j.pB.invert(j.pB.create(),ve[a]):void 0}};(0,F.addProvider)(we.get.bind(we));const Ie=we;const Ae=function(e,t){const n=e.getSliceIndex(),i=t.getSliceIndex(),a=(0,F.get)("imagePlaneModule",n.toString()),o=(0,F.get)("imagePlaneModule",i.toString());if(!a||!o)return void console.log("Viewport spatial registration requires image plane module");const{imageOrientationPatient:r}=o;if(!a.imageOrientationPatient.every(((e,t)=>Math.abs(e-r[t])<.05)))return void console.log("Viewport spatial registration only supported for same orientation (hence translation only) for now",a?.imageOrientationPatient,o?.imageOrientationPatient);const s=a.imagePositionPatient,l=o.imagePositionPatient,c=j.eR.subtract(j.eR.create(),s,l),d=j.pB.fromTranslation(j.pB.create(),c);Ie.add([e.id,t.id],d)};function Se(e){const{imageData:t,dimensions:n}=e.getImageData()||{};if(!t||!n)return[];const{canvas:i}=e,a=window.devicePixelRatio,o=[i.width/a,0],r=[i.width/a,i.height/a],s=[0,i.height/a],l=e.canvasToWorld([0,0]),c=e.canvasToWorld(o),d=e.canvasToWorld(r),u=e.canvasToWorld(s),g=t.worldToIndex(l),m=t.worldToIndex(c),h=t.worldToIndex(d),p=t.worldToIndex(u);return function({dimensions:e,imageData:t,topLeftImage:n,topRightImage:i,bottomRightImage:a,bottomLeftImage:o,topLeftWorld:r,topRightWorld:s,bottomRightWorld:l,bottomLeftWorld:c}){const d=ye(n,e)?r:t.indexToWorld([0,0,0]),u=ye(i,e)?s:t.indexToWorld([e[0]-1,0,0]),g=ye(a,e)?l:t.indexToWorld([e[0]-1,e[1]-1,0]),m=ye(o,e)?c:t.indexToWorld([0,e[1]-1,0]);return[d,u,m,g]}({dimensions:n,imageData:t,topLeftImage:g,topRightImage:m,bottomRightImage:h,bottomLeftImage:p,topLeftWorld:l,topRightWorld:c,bottomRightWorld:d,bottomLeftWorld:u})}function ye(e,t){return e[0]>0||e[0]<t[0]-1||e[1]>0||e[1]<t[1]-1||e[2]>0||e[2]<t[2]-1}var be=n(38883),Ee=n(96833),xe=n(13876),Re=n(74268),Me=n(32173),Pe=n(58165),De=n(86846);const Te=function(e){const t=(0,De.Ay)(e);if(!t)return;const{viewport:n}=t;if(!(n instanceof Pe.A))throw new Error(`An image can only be fetched for a stack viewport and not for a viewport of type: ${n.type}`);return n.getCornerstoneImage()};var Ce=n(90537),Le=n(1865),_e=n(27119);function Oe(e){if(e.length<=1)return!1;const t=e[0],{modality:n,seriesInstanceUID:i}=F.get("generalSeriesModule",t),{imageOrientationPatient:a,pixelSpacing:o,frameOfReferenceUID:r,columns:s,rows:l,usingDefaultValues:c}=F.get("imagePlaneModule",t);if(c)return!1;const d={modality:n,imageOrientationPatient:a,pixelSpacing:o,frameOfReferenceUID:r,columns:s,rows:l,seriesInstanceUID:i};let u=!0;for(let t=0;t<e.length;t++){const n=e[t],{modality:i,seriesInstanceUID:a}=F.get("generalSeriesModule",n),{imageOrientationPatient:o,pixelSpacing:r,columns:s,rows:l}=F.get("imagePlaneModule",n);if(a!==d.seriesInstanceUID){u=!1;break}if(i!==d.modality){u=!1;break}if(s!==d.columns){u=!1;break}if(l!==d.rows){u=!1;break}if(!(0,R.Ay)(o,d.imageOrientationPatient)){u=!1;break}if(!(0,R.Ay)(r,d.pixelSpacing)){u=!1;break}}return u}var Ve=n(45278),Ne=n(22191),Ue=n(63470),ke=n(17791);const Fe=new Set(["1.2.840.10008.1.2.4.100","1.2.840.10008.1.2.4.100.1","1.2.840.10008.1.2.4.101","1.2.840.10008.1.2.4.101.1","1.2.840.10008.1.2.4.102","1.2.840.10008.1.2.4.102.1","1.2.840.10008.1.2.4.103","1.2.840.10008.1.2.4.103.1","1.2.840.10008.1.2.4.104","1.2.840.10008.1.2.4.104.1","1.2.840.10008.1.2.4.105","1.2.840.10008.1.2.4.105.1","1.2.840.10008.1.2.4.106","1.2.840.10008.1.2.4.106.1","1.2.840.10008.1.2.4.107","1.2.840.10008.1.2.4.108"]);function Be(e){if(!e)return!1;return(Array.isArray(e)?e:[e]).find((e=>Fe.has(e)))}var We=n(99576),je=n(9734),qe=n(40661),Ge=n(87142);async function He({viewport:e,options:t={}}){const n=e.getRenderingEngine();let i=t.volumeId||`${(0,p.A)()}`;if(0===i.split(":").length){i=`${(0,Ge.getUnknownVolumeLoaderSchema)()}:${i}`}const{id:a,element:o}=e,r=t.viewportId||a,s=e.getImageIds(),l=e.getViewPresentation(),c=e.getViewReference();n.enableElement({viewportId:r,type:B.ViewportType.ORTHOGRAPHIC,element:o,defaultOptions:{background:t.background,orientation:t.orientation}});(await(0,Ge.createAndCacheVolume)(i,{imageIds:s})).load();const d=n.getViewport(r);await(0,qe.A7)(n,[{volumeId:i}],[r]);const u=()=>{d.render(),o.removeEventListener(B.Events.VOLUME_VIEWPORT_NEW_VOLUME,u)};return o.addEventListener(B.Events.VOLUME_VIEWPORT_NEW_VOLUME,u),d.setViewPresentation(l),d.setViewReference(c),d.render(),d}var $e=n(86252);async function ze({viewport:e,options:t}){const n=e,{id:i,element:a}=n,o=e.getRenderingEngine(),{background:r}=t,s=t.viewportId||i,l=J.Ay.getVolume(n.getVolumeId());if(!(l instanceof $e.Q))throw new Error("Currently, you cannot decache a volume that is not an ImageVolume. So, unfortunately, volumes such as nifti (which are basic Volume, without imageIds) cannot be decached.");const c={viewportId:s,type:B.ViewportType.STACK,element:a,defaultOptions:{background:r}},d=n.getViewReference();o.enableElement(c);const u=o.getViewport(s);return await u.setStack(l.imageIds),u.setViewReference(d),u.render(),u}var Ke=n(24623),Ze=n(67645),Ye=n(19325);function Je(e){return Math.round(e/Ye.EPSILON)*Ye.EPSILON}const Xe=function e(t,n=2){if(Array.isArray(t))return t.map((t=>e(t,n))).join(", ");if(null==t||""===t)return"NaN";t=Number(t);const i=Math.abs(t);if(i<1e-4)return`${t}`;const a=i>=100?n-2:i>=10?n-1:i>=1?n:i>=.1?n+1:i>=.01?n+2:i>=.001?n+3:n+4;return t.toFixed(a)};function Qe(e,t,n){const i=e.length===t*n*4,a=e.length===t*n*3;if(i||a){const a=new Float32Array(t*n);let o=0,r=0;const s=i?4:3;for(let i=0;i<t;i++)for(let t=0;t<n;t++){const t=e[o],n=e[o+1],i=e[o+2];a[r]=(t+n+i)/3,o+=s,r++}return a}return e}const et=function(e){if(e instanceof G.PX){return J.Ay.getVolume(e.getVolumeId()).imageIds}if(e.getImageIds)return e.getImageIds()};function tt(e,t){const n=[...e];return t>=n.length?(nt(n),n):(nt(n),n.slice(0,t))}function nt(e){for(let t=e.length-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}}var it=n(12437),at=n(30169),ot=n(56577),rt=n(68136),st=n(13859),lt=n(85745);function ct(e){const t=e.toString(16);return 1==t.length?"0"+t:t}function dt(e,t,n){return"#"+ct(e)+ct(t)+ct(n)}function ut(e){const t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}function gt(e,t){if(e===t)return!0;if(null==e||null==t)return!1;try{return JSON.stringify(e)===JSON.stringify(t)}catch(n){return console.debug("Error in JSON.stringify during deep comparison:",n),e===t}}var mt=n(56750),ht=n(20286),pt=n(53932),ft=n(89131);const vt=(e,t)=>e.reduce(((e,n)=>((e[n[t]]=e[n[t]]||[]).push(n),e)),{});function wt(e,t){const n={};let i=[];const a=Object.keys(e);for(let o=0;o<a.length;o++){const r=new Set,s=e[a[o]];for(let e=0;e<s.length;e++){const i=t(s[e].imageId)||0;if(n[i]=n[i]||[],n[i].push({imageId:s[e].imageId}),r.add(i),r.size-1<e)return}if(0==o)i=Array.from(r);else if(!bt(i,r))return}return n}function It(e,t){const n=F.get(t,e);try{return parseFloat(n)}catch{return}}function At(e){const t=F.get("20011003",e);try{const{InlineBinary:e}=t;if(e){const t=atob(e),n=new ArrayBuffer(t.length),i=new DataView(n);for(let e=0;e<t.length;e++)i.setUint8(e,t.charCodeAt(e));return new Float32Array(n)[0]}return parseFloat(t)}catch{return}}function St(e){let t=F.get("0019100c",e)||F.get("0019100C",e);try{const{InlineBinary:e}=t;return e&&(t=atob(e)),parseFloat(t)}catch{return}}function yt(e){let t=F.get("00431039",e);try{const{InlineBinary:e}=t;return e&&(t=atob(e).split("//")),parseFloat(t[0])%1e5}catch{return}}function bt(e,t){if(e.length!=t.size)return!1;for(let n=0;n<e.length;n++)if(!t.has(e[n]))return!1;return!0}function Et(e){const t=F.get("petImageModule",e);return t?t.frameReferenceTime:0}const xt=function(e){const t=function(e){const t=e.map((e=>{const{imagePositionPatient:t}=F.get("imagePlaneModule",e)||{};return{imageId:e,imagePositionPatient:t}}));if(!t.every((e=>e.imagePositionPatient)))return null;const n=vt(t,"imagePositionPatient"),i=Object.keys(n),a=n[i[0]].length;return 1===a?null:i.every((e=>n[e].length===a))?n:null}(e);if(!t)return{imageIdGroups:[e],splittingTag:null};const n=["TemporalPositionIdentifier","DiffusionBValue","TriggerTime","EchoTime","EchoNumber","PhilipsPrivateBValue","SiemensPrivateBValue","GEPrivateBValue","PetFrameReferenceTime"],i=[e=>It(e,n[0]),e=>It(e,n[1]),e=>It(e,n[2]),e=>It(e,n[3]),e=>It(e,n[4]),At,St,yt,Et];for(let e=0;e<i.length;e++){const a=wt(t,i[e]);if(a){return{imageIdGroups:Object.keys(a).map(Number.parseFloat).sort(((e,t)=>e-t)).map((e=>a[e].map((e=>e.imageId)))),splittingTag:n[e]}}}return{imageIdGroups:[e],splittingTag:null}};const Rt=function(e){const{imageIdGroups:t,splittingTag:n}=xt(e);return{isDynamicVolume:t.length>1,timePoints:t,splittingTag:n}};var Mt=n(91979);function Pt(e,t){const n=e.length,{rescaleSlope:i,rescaleIntercept:a,suvbw:o}=t;if("PT"===t.modality&&"number"==typeof o)for(let t=0;t<n;t++)e[t]=o*(e[t]*i+a);else for(let t=0;t<n;t++)e[t]=e[t]*i+a;return e}var Dt=n(99949);function Tt(e,t,n){return Math.min(Math.max(t,e),n)}const Ct=Tt;function Lt(e,t){if(!(0,De.Ay)(e.element))throw new Error("Scroll::Viewport is not enabled (it might be disabled)");if(e instanceof G.hS&&0===e.getImageIds().length)throw new Error("Scroll::Stack Viewport has no images");const{volumeId:n,delta:i,scrollSlabs:a}=t;if(e instanceof G.PX)!function(e,t,n,i=!1){const a=i,{numScrollSteps:o,currentStepIndex:r,sliceRangeInfo:s}=(0,se.A)(e,t,a);if(!s)return;const{sliceRange:l,spacingInNormalDirection:c,camera:d}=s,{focalPoint:u,viewPlaneNormal:g,position:m}=d,{newFocalPoint:p,newPosition:f}=(0,ce.A)(u,m,l,g,c,n);e.setCamera({focalPoint:p,position:f}),e.render();const v=r+n,w={volumeId:t,viewport:e,delta:n,desiredStepIndex:v,currentStepIndex:r,numScrollSteps:o,currentImageId:e.getCurrentImageId()};(v>o||v<0)&&e.getCurrentImageId()?(0,h.A)(Q.A,B.Events.VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS,w):(0,h.A)(Q.A,B.Events.VOLUME_VIEWPORT_SCROLL,w)}(e,n,i,a);else{const n=e.getCurrentImageIdIndex();if(n+i>e.getImageIds().length-1||n+i<0){const e={imageIdIndex:n,direction:i};(0,h.A)(Q.A,B.Events.STACK_SCROLL_OUT_OF_BOUNDS,e)}e.scroll(i,t.debounceLoading,t.loop)}}async function _t(e,t={}){const{imageIndex:n,debounceLoading:i,volumeId:a}=t,o=(0,De.Ay)(e);if(!o)throw new Error("Element has been disabled");const{viewport:r}=o,{imageIndex:s,numberOfSlices:l}=function(e,t){if(e instanceof Pe.A)return{numberOfSlices:e.getImageIds().length,imageIndex:t?e.getTargetImageIdIndex():e.getCurrentImageIdIndex()};return{numberOfSlices:e.getNumberOfSlices(),imageIndex:e.getSliceIndex()}}(r,i),c=function(e,t){const n=e-1;return Ct(t,0,n)}(l,n);Lt(r,{delta:c-s,debounceLoading:i,volumeId:a})}function Ot(e,t,n={}){const i=J.Ay.getVolume(e);if(!i)throw new Error(`Referenced volume with id ${e} does not exist.`);const{metadata:a,spacing:o,direction:r,dimensions:s}=i,{minX:l,maxX:c,minY:d,maxY:u,minZ:g,maxZ:m}=t,h=[Math.min(l,c),Math.min(d,u),Math.min(g,m)],f=(0,U.A)(i.imageData,h),v=[Math.abs(c-l)+1,Math.abs(u-d)+1,Math.abs(m-g)+1],{targetBuffer:w}=n,I={metadata:a,dimensions:v,spacing:o,origin:f,direction:r,targetBuffer:w,scalarData:"Float32Array"===w?.type?new Float32Array(v[0]*v[1]*v[2]):void 0},A=(0,Ge.createLocalVolume)((0,p.A)(),I),S=A.voxelManager.getCompleteScalarDataArray(),y=v[0]*v[1],b=s[0]*s[1],E=i.voxelManager.getCompleteScalarDataArray();for(let e=0;e<v[2];e++)for(let t=0;t<v[1];t++){const n=(0,U.A)(A.imageData,[0,t,e]),a=(0,N.A)(i.imageData,n),o=a[2]*b+a[1]*s[0]+a[0],r=E.slice(o,o+v[0]),l=e*y+t*v[0];S.set(r,l)}return A.voxelManager.setCompleteScalarDataArray(S),A}function Vt(e,t){const{viewUp:n,viewPlaneNormal:i}=t,a=(0,N.p)(e,[0,0,0]),o=j.eR.negate(j.eR.create(),n),r=j.eR.negate(j.eR.create(),i),s=j.eR.cross(j.eR.create(),o,r),l=j.eR.sub(j.eR.create(),(0,N.p)(e,o),a),c=j.eR.sub(j.eR.create(),(0,N.p)(e,r),a);j.eR.normalize(l,l),j.eR.normalize(c,c);return{worldVecRowDir:s,worldVecColDir:o,worldVecSliceDir:r,ijkVecRowDir:j.eR.cross(j.eR.create(),l,c),ijkVecColDir:l,ijkVecSliceDir:c}}var Nt=n(42384),Ut=n(7608);function kt(e,t,n,i){const[a,o,r]=t,s=a*o;let l=0,c=0,d=0;const[u,g,m]=n.map(Math.round);for(let t=m-i;t<=m+i;t++)if(!(t<0||t>=r))for(let n=g-i;n<=g+i;n++)if(!(n<0||n>=o))for(let o=u-i;o<=u+i;o++){if(o<0||o>=a)continue;const i=e[t*s+n*a+o];l+=i,c+=i*i,d++}if(0===d){const t=m*s+g*a+u;if(t>=0&&t<e.length){return{mean:e[t],stdDev:0,count:1}}return{mean:0,stdDev:0,count:0}}const h=l/d,p=c/d-h*h;return{mean:h,stdDev:Math.sqrt(Math.max(0,p)),count:d}}const Ft=new Set(["1.2.840.10008.5.1.4.1.1.1","1.2.840.10008.5.1.4.1.1.1.1","1.2.840.10008.5.1.4.1.1.1.1.1","1.2.840.10008.5.1.4.1.1.1.2","1.2.840.10008.5.1.4.1.1.1.2.1","1.2.840.10008.5.1.4.1.1.1.3","1.2.840.10008.5.1.4.1.1.1.3.1","1.2.840.10008.5.1.4.1.1.12.1","1.2.840.10008.5.1.4.1.1.12.1.1","1.2.840.10008.5.1.4.1.1.12.2","1.2.840.10008.5.1.4.1.1.12.2.1","1.2.840.10008.5.1.4.1.1.12.3"]);function Bt(e){const{PixelSpacing:t,SOPClassUID:n,SequenceOfUltrasoundRegions:i}=e;if(i)return function(e){const{SequenceOfUltrasoundRegions:t}=e,n=Array.isArray(t);if(n&&t.length>1)return void console.warn("Sequence of Ultrasound Regions > one entry. This is not yet implemented, all measurements will be shown in pixels.");const{PhysicalDeltaX:i,PhysicalDeltaY:a}=n?t[0]:t;return{PixelSpacing:[10*i,10*a]}}(e);return Ft.has(n)?function(e){const{PixelSpacing:t,ImagerPixelSpacing:n,EstimatedRadiographicMagnificationFactor:i,PixelSpacingCalibrationType:a,PixelSpacingCalibrationDescription:o}=e,r=!0;if(!n)return{PixelSpacing:t,type:B.CalibrationTypes.UNKNOWN,isProjection:r};if(!t)return i?{PixelSpacing:n.map((e=>e/i)),type:B.CalibrationTypes.ERMF,isProjection:r}:(console.warn("EstimatedRadiographicMagnificationFactor was not present. Unable to correct ImagerPixelSpacing."),{PixelSpacing:n,type:B.CalibrationTypes.PROJECTION,isProjection:r});return(0,R.n4)(t,n)?{PixelSpacing:t,type:B.CalibrationTypes.PROJECTION,isProjection:r}:a||o?{PixelSpacing:t,type:B.CalibrationTypes.CALIBRATED,isProjection:r,PixelSpacingCalibrationType:a,PixelSpacingCalibrationDescription:o}:{PixelSpacing:t,type:B.CalibrationTypes.UNKNOWN,isProjection:r}}(e):{PixelSpacing:t,type:B.CalibrationTypes.NOT_APPLICABLE,isProjection:!1}}const Wt=(e,t)=>function(e,t,n){if(!n)throw new Error("getVolume is required, use the utilities export instead ");if(e.modality)return e.modality;if(e.setVolumes){if(!(t=t??e.getVolumeId())||!n)return;return n(t).metadata.Modality}throw new Error("Invalid viewport type")}(e,t,J.Ay.getVolume)},50134:(e,t,n)=>{function i(e){if(!e)return;const t=e.getSize();for(let n=0;n<t;n++){const t=[];e.getNodeValue(n,t),t[1]=1-t[1],t[2]=1-t[2],t[3]=1-t[3],e.setNodeValue(n,t)}}n.d(t,{A:()=>i})},74638:(e,t,n)=>{function i(e,t,n){return Math.abs(e-t)<=n}function a(e){return"number"==typeof e}function o(e){return e&&"object"==typeof e&&"length"in e&&"number"==typeof e.length&&e.length>0&&"number"==typeof e[0]}function r(e,t,n=1e-5){return typeof e==typeof t&&null!==e&&null!==t&&(a(e)&&a(t)?i(e,t,n):!(!o(e)||!o(t))&&function(e,t,n=1e-5){if(e.length!==t.length)return!1;for(let a=0;a<e.length;a++)if(!i(e[a],t[a],n))return!1;return!0}(e,t,n))}n.d(t,{Ay:()=>r,Ph:()=>d,WC:()=>c,n4:()=>r});const s=e=>"number"==typeof e?-e:e?.map?e.map(s):!e,l=e=>"number"==typeof e?Math.abs(e):e?.map?e.map(l):e,c=(e,t,n=void 0)=>r(e,s(t),n),d=(e,t,n=void 0)=>r(l(e),l(t),n)},7608:(e,t,n)=>{n.r(t),n.d(t,{aiLog:()=>u,coreLog:()=>l,cs3dLog:()=>s,dicomConsistencyLog:()=>m,examplesLog:()=>g,getLogger:()=>r,getRootLogger:()=>o,imageConsistencyLog:()=>h,loaderLog:()=>d,toolsLog:()=>c});var i=n(4367);const a=n.n(i)().noConflict();function o(e){const t=a.getLogger(e[0]);return t.getLogger=(...t)=>o(`${e}.${t.join(".")}`),t}function r(...e){return o(e.join("."))}"undefined"!=typeof window&&(window.log=a);const s=o("cs3d"),l=s.getLogger("core"),c=s.getLogger("tools"),d=s.getLogger("dicomImageLoader"),u=s.getLogger("ai"),g=s.getLogger("examples"),m=r("consistency","dicom"),h=r("consistency","image")},1865:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74876);function a(e){const t=e[0],{pixelRepresentation:n,bitsAllocated:a,bitsStored:o,highBit:r,photometricInterpretation:s,samplesPerPixel:l}=(0,i.get)("imagePixelModule",t),c=[],d=(0,i.get)("voiLutModule",t);let u;if(d){const{windowWidth:e,windowCenter:t}=d;if(u=d?.voiLUTFunction,Array.isArray(e))for(let n=0;n<e.length;n++)c.push({windowWidth:e[n],windowCenter:t[n]});else c.push({windowWidth:e,windowCenter:t})}else c.push({windowWidth:void 0,windowCenter:void 0});const{modality:g,seriesInstanceUID:m}=(0,i.get)("generalSeriesModule",t),{imageOrientationPatient:h,pixelSpacing:p,frameOfReferenceUID:f,columns:v,rows:w}=(0,i.get)("imagePlaneModule",t);return{BitsAllocated:a,BitsStored:o,SamplesPerPixel:l,HighBit:r,PhotometricInterpretation:s,PixelRepresentation:n,Modality:g,ImageOrientationPatient:h,PixelSpacing:p,FrameOfReferenceUID:f,Columns:v,Rows:w,voiLut:c,VOILUTFunction:u,SeriesInstanceUID:m}}},52268:(e,t,n)=>{n.r(t),n.d(t,{isPointOnPlane:()=>c,linePlaneIntersection:()=>o,planeDistanceToPoint:()=>l,planeEquation:()=>r,threePlaneIntersection:()=>s});var i=n(3823),a=n(19325);function o(e,t,n){const[i,a,o]=e,[r,s,l]=t,[c,d,u,g]=n,m=r-i,h=s-a,p=l-o,f=-1*(c*i+d*a+u*o-g)/(c*m+d*h+u*p);return[m*f+i,h*f+a,p*f+o]}function r(e,t,n=!1){const[i,a,o]=e,r=i*t[0]+a*t[1]+o*t[2];if(n){const e=Math.sqrt(i*i+a*a+o*o);return[i/e,a/e,o/e,r/e]}return[i,a,o,r]}function s(e,t,n){const[a,o,r,s]=e,[l,c,d,u]=t,[g,m,h,p]=n,f=i.w0.fromValues(a,l,g,o,c,m,r,d,h),v=i.w0.fromValues(s,u,p,o,c,m,r,d,h),w=i.w0.fromValues(a,l,g,s,u,p,r,d,h),I=i.w0.fromValues(a,l,g,o,c,m,s,u,p);return[i.w0.determinant(v)/i.w0.determinant(f),i.w0.determinant(w)/i.w0.determinant(f),i.w0.determinant(I)/i.w0.determinant(f)]}function l(e,t,n=!1){const[i,a,o,r]=e,[s,l,c]=t,d=i*s+a*l+o*c-r,u=Math.abs(d)/Math.sqrt(i*i+a*a+o*o);return(n?Math.sign(d):1)*u}function c(e,t,n=a.EPSILON){return l(t,e)<n}},56577:(e,t,n)=>{n.d(t,{X6:()=>o,ii:()=>a});var i=n(87784);function a(e,t){const{pointInShapeFn:n,callback:a,boundsIJK:o,returnPoints:r=!1}=t;let s;if(e.getScalarData)s=e.getScalarData();else{const t=e.getPointData().getScalars();if(t)s=t.getData();else{const{voxelManager:t}=e.get("voxelManager")||{};t&&(s=t.getCompleteScalarDataArray())}}const l=e.getDimensions(),c=[[0,l[0]],[0,l[1]],[0,l[2]]],d=function({imageData:e,bounds:t,scalarData:n,pointInShapeFn:a,callback:o}){const[[r,s],[l,c],[d,u]]=t,{numComps:g}=e,m=e.getDimensions(),h=(0,i.P)(e),p=[0,0,0],f=g||n.length/m[2]/m[1]/m[0],v=m[0]*f,w=m[1]*v,I=[];for(let e=d;e<=u;e++){p[2]=e;const t=e*w;for(let e=l;e<=c;e++){p[1]=e;const i=t+e*v;for(let e=r;e<=s;e++){p[0]=e;const t=h(p);if(a(t,p)){const a=i+e*f;let r;r=f>2?[n[a],n[a+1],n[a+2]]:n[a],I.push({value:r,index:a,pointIJK:p,pointLPS:t.slice()}),o({value:r,index:a,pointIJK:p,pointLPS:t})}}}}return I}({imageData:e,bounds:o||c,scalarData:s,pointInShapeFn:n,callback:a});return r?d:void 0}function o({voxelManager:e,bounds:t,imageData:n,pointInShapeFn:a,callback:o,returnPoints:r}){const[[s,l],[c,d],[u,g]]=t,m=(0,i.P)(n),h=[0,0,0],p=[];for(let t=u;t<=g;t++){h[2]=t;for(let t=c;t<=d;t++){h[1]=t;for(let t=s;t<=l;t++){h[0]=t;const n=m(h);if(a(n,h)){const t=e.toIndex(h),i=e.getAtIndex(t);r&&p.push({value:i,index:t,pointIJK:[...h],pointLPS:n.slice()}),o?.({value:i,index:t,pointIJK:h,pointLPS:n})}}}}return p}},80500:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(3823);function a(e,t,n,a,o,r){const{min:s,max:l,current:c}=n,d=i.eR.create();i.eR.sub(d,t,e);const u=Math.round((l-s)/o),g=(c-s)/(l-s)*u;let m=Math.round(g),h=[e[0]-a[0]*g*o,e[1]-a[1]*g*o,e[2]-a[2]*g*o];m+=r,m>u?m=u:m<0&&(m=0);const p=m*o;h=[h[0]+a[0]*p,h[1]+a[1]*p,h[2]+a[2]*p];return{newFocalPoint:h,newPosition:[h[0]+d[0],h[1]+d[1],h[2]+d[2]]}}},90537:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(3823),a=n(74876),o=n(42384);function r(e,t){const{imagePositionPatient:n,imageOrientationPatient:r}=a.get("imagePlaneModule",e[0]);if(!t){const e=i.eR.fromValues(r[0],r[1],r[2]),n=i.eR.fromValues(r[3],r[4],r[5]);t=i.eR.create(),i.eR.cross(t,e,n)}const s="wadouri"===e[0].split(":")[0],l=(0,o.A)(e);let c;function d(e){const{imagePositionPatient:o}=a.get("imagePlaneModule",e),r=i.eR.create();return i.eR.sub(r,n,o),i.eR.dot(r,t)}if(s){const t=[e[0],e[Math.floor(e.length/2)]];c=e;d(t[0])-d(t[1])<0&&c.reverse()}else{const t=e.map((e=>({distance:d(e),imageId:e})));t.sort(((e,t)=>t.distance-e.distance)),c=t.map((e=>e.imageId))}const{imagePositionPatient:u}=a.get("imagePlaneModule",c[0]);return{zSpacing:l,origin:u,sortedImageIds:c}}},85745:(e,t,n)=>{function i(e){const t=e.getSize(),n=[];for(let i=0;i<t;i++){const t=[];e.getNodeValue(i,t),n.push(t)}return n}function a(e,t){t?.length&&(e.removeAllPoints(),t.forEach((t=>{e.addRGBPoint(...t)})))}n.r(t),n.d(t,{getTransferFunctionNodes:()=>i,setTransferFunctionNodes:()=>a})},51919:(e,t,n)=>{n.d(t,{e:()=>a});var i=n(38669);function a(e,t){const{imageData:n}=e.getImageData(),a=e.canvasToWorld(t);return(0,i.A)(n,a)}},94741:(e,t,n)=>{function i(e,t){return e.indexToWorld(t)}n.d(t,{A:()=>i})},38669:(e,t,n)=>{function i(e,t){return e.worldToIndex(t).map(Math.round)}function a(e,t){return e.worldToIndex(t)}n.d(t,{A:()=>i,p:()=>a})},45278:(e,t,n)=>{function i(e,t){const n=t.voxelManager.getScalarData();if(!e.getPointData)return;const i=e.getPointData().getScalars().getData();if(t.color&&t.rgba){const e=new Uint8Array(t.columns*t.rows*3);for(let i=0;i<t.columns*t.rows;i++)e[3*i]=n[4*i],e[3*i+1]=n[4*i+1],e[3*i+2]=n[4*i+2];t.rgba=!1,t.getPixelData=()=>e,i.set(e)}else i.set(n);e.modified()}n.d(t,{J:()=>i})},68136:(e,t,n)=>{n.r(t),n.d(t,{toLowHighRange:()=>r,toWindowLevel:()=>o});var i=n(82501),a=n(58977);function o(e,t){return{windowWidth:Math.abs(t-e)+1,windowCenter:(e+t+1)/2}}function r(e,t,n=i.A.LINEAR){if(n===i.A.LINEAR)return{lower:t-.5-(e-1)/2,upper:t-.5+(e-1)/2};if(n===i.A.LINEAR_EXACT)return{lower:t-e/2,upper:t+e/2};if(n===i.A.SAMPLED_SIGMOID){return{lower:(0,a.i)(.01,t,e),upper:(0,a.i)(.99,t,e)}}throw new Error("Invalid VOI LUT function")}},93952:()=>{},95074:(e,t,n)=>{n(97181),n(85899),n(56442)},17328:(e,t,n)=>{n.d(t,{draw:()=>i.A,drawCircle:()=>a.A,drawHandles:()=>o.A,drawLine:()=>r.A,drawLinkedTextBox:()=>c.A,drawPath:()=>l.A,drawPolyline:()=>s.A,drawRect:()=>d.A,drawRectByCoordinates:()=>u.A});var i=n(18262),a=n(12004),o=(n(85856),n(95074),n(56745)),r=(n(94042),n(92118));var s=n(98812),l=n(17311),c=n(1595),d=n(97530),u=n(75076);n(26290);n(97181),n(85899),n(56442)},75183:(e,t,n)=>{var i;n.d(t,{A:()=>a}),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"}(i||(i={}));const a=i},10401:(e,t,n)=>{var i;!function(e){e.UP="UP",e.DOWN="DOWN",e.LEFT="LEFT",e.RIGHT="RIGHT"}(i||(i={}))},50986:(e,t,n)=>{n.d(t,{r:()=>d});n(15327),n(15295),n(95527);var i=n(58640),a=n(60810),o=n(82056),r=(n(93126),n(44049),n(72967)),s=n(64843);n(77609),n(68040);const l="PlanarFreehandContourSegmentationTool";function c(e,t){const n=e.length,i=new Array(n);for(let a=0;a<n;a++)i[a]=t.worldToCanvas(e[a]);return i}function d(e,t,n){const{windingDirection:d}=t.data.contour,{windingDirection:u}=n.data.contour;(0,o.addChildAnnotation)(t,n),(0,s.removeContourSegmentationAnnotation)(n);const{contour:g}=n.data,m=c(g.polyline,e);(0,r.A)(n,{points:m,closed:g.closed},e);const{element:h}=e,p=new Set([l,t.metadata.toolName,n.metadata.toolName]);for(const e of p.values()){const t=(0,a.getViewportIdsWithToolToRender)(h,e);(0,i.A)(t)}}},6802:(e,t,n)=>{n.d(t,{O8:()=>i.removeAnnotation,Rh:()=>i.getAnnotations,lC:()=>i.addAnnotation});n(67013),n(2076),n(17343);var i=n(82056);n(97)},59475:(e,t,n)=>{n.d(t,{_6:()=>g});var i=n(15327),a=n(99737),o=n(33739),r=n(99341),s=n(49906),l=n(92686),c=n(75419);const d={colorLUT:[],segmentations:[],viewportSegRepresentations:{}};function u(e){const t=o.Ay.newInstance(),n=r.Ay.newInstance();return n.addPoint(0,0),e===a.SegmentationRepresentations.Labelmap?{cfun:t,ofun:n}:{}}const g=new class{constructor(e){this._stackLabelmapImageIdReferenceMap=new Map,this._labelmapImageIdReferenceMap=new Map,e||=i.utilities.uuidv4(),this.state=Object.freeze(i.utilities.deepClone(d)),this.uid=e}getState(){return this.state}updateState(e){const t=i.utilities.deepClone(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(i.utilities.deepClone(d))}getSegmentation(e){return this.state.segmentations.find((t=>t.segmentationId===e))}updateSegmentation(e,t){this.updateState((n=>{const i=n.segmentations.find((t=>t.segmentationId===e));i?Object.assign(i,t):console.warn(`Segmentation with id ${e} not found. Update aborted.`)})),(0,s.triggerSegmentationModified)(e)}addSegmentation(e){if(this.getSegmentation(e.segmentationId))throw new Error(`Segmentation with id ${e.segmentationId} already exists`);this.updateState((t=>{const n=i.utilities.deepClone(e);if(n.representationData.Labelmap&&"volumeId"in n.representationData.Labelmap&&!("imageIds"in n.representationData.Labelmap)){const e=this.getLabelmapImageIds(n.representationData);n.representationData.Labelmap.imageIds=e}t.segmentations.push(n)})),(0,c.R)(e.segmentationId)}removeSegmentation(e){this.updateState((t=>{const n=t.segmentations.filter((t=>t.segmentationId!==e));t.segmentations.splice(0,t.segmentations.length,...n)})),(0,s.triggerSegmentationRemoved)(e)}addSegmentationRepresentation(e,t,n,o){if(!(0,i.getEnabledElementByViewportId)(e))return;this.getSegmentationRepresentations(e,{type:n,segmentationId:t}).length>0?console.debug("A segmentation representation of type",n,"already exists in viewport",e,"for segmentation",t):(this.updateState((i=>{i.viewportSegRepresentations[e]||(i.viewportSegRepresentations[e]=[],l.Y.setRenderInactiveSegmentations(e,!0)),n!==a.SegmentationRepresentations.Labelmap?this.addDefaultSegmentationRepresentation(i,e,t,n,o):this.addLabelmapRepresentation(i,e,t,o)})),(0,s.triggerSegmentationRepresentationModified)(e,t,n))}addDefaultSegmentationRepresentation(e,t,n,i,a){const o=e.segmentations.find((e=>e.segmentationId===n));if(!o)return;const 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:{...u(i),...a}}),this._setActiveSegmentation(e,t,n)}addLabelmapRepresentation(e,t,n,o=u(a.SegmentationRepresentations.Labelmap)){if(!(0,i.getEnabledElementByViewportId)(t))return;const r=this.getSegmentation(n);if(!r)return;const{representationData:s}=r;if(!s.Labelmap)return this.addDefaultSegmentationRepresentation(e,t,n,a.SegmentationRepresentations.Labelmap,o);this.processLabelmapRepresentationAddition(t,n),this.addDefaultSegmentationRepresentation(e,t,n,a.SegmentationRepresentations.Labelmap,o)}async processLabelmapRepresentationAddition(e,t){const n=(0,i.getEnabledElementByViewportId)(e);if(!n)return;const a=this.getSegmentation(t);if(!a)return;const o=n.viewport instanceof i.BaseVolumeViewport,{representationData:r}=a,s="volumeId"in r.Labelmap;n.viewport;o||s||this.updateLabelmapSegmentationImageReferences(e,a.segmentationId)}_updateLabelmapSegmentationReferences(e,t,n,i){const a=t.getCurrentImageId();let o=!1;for(const 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){const n=this.getSegmentation(t);if(!n)return;this._stackLabelmapImageIdReferenceMap.has(t)||this._stackLabelmapImageIdReferenceMap.set(t,new Map);const{representationData:a}=n;if(!a.Labelmap)return;const o=this.getLabelmapImageIds(a),r=(0,i.getEnabledElementByViewportId)(e).viewport;return this._updateLabelmapSegmentationReferences(t,r,o,null)}_updateAllLabelmapSegmentationImageReferences(e,t){const n=this.getSegmentation(t);if(!n)return;this._stackLabelmapImageIdReferenceMap.has(t)||this._stackLabelmapImageIdReferenceMap.set(t,new Map);const{representationData:a}=n;if(!a.Labelmap)return;const o=this.getLabelmapImageIds(a),r=(0,i.getEnabledElementByViewportId)(e).viewport;this._updateLabelmapSegmentationReferences(t,r,o,((e,t,n)=>{e.getImageIds().forEach(((i,a)=>{for(const 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){const t=e.Labelmap;let n;if(t.imageIds)n=t.imageIds;else if(!n&&t.volumeId){const e=t.volumeId;n=i.cache.getVolume(e).imageIds}return n}getLabelmapImageIdsForImageId(e,t){const n=this._generateMapKey({segmentationId:t,referenceImageId:e});return this._labelmapImageIdReferenceMap.get(n)}getCurrentLabelmapImageIdsForViewport(e,t){const n=(0,i.getEnabledElementByViewportId)(e);if(!n)return;const a=n.viewport.getCurrentImageId();return this.getLabelmapImageIdsForImageId(a,t)}getCurrentLabelmapImageIdForViewport(e,t){const n=(0,i.getEnabledElementByViewportId)(e);if(!n)return;if(!this._stackLabelmapImageIdReferenceMap.has(t))return;const a=n.viewport.getCurrentImageId();return this._stackLabelmapImageIdReferenceMap.get(t).get(a)}getStackSegmentationImageIdsForViewport(e,t){if(!this.getSegmentation(t))return[];this._updateAllLabelmapSegmentationImageReferences(e,t);const{viewport:n}=(0,i.getEnabledElementByViewportId)(e),a=n.getImageIds(),o=this._stackLabelmapImageIdReferenceMap.get(t);return a.map((e=>o.get(e)))}removeSegmentationRepresentationsInternal(e,t){const n=[];return this.updateState((i=>{if(!i.viewportSegRepresentations[e])return;const a=i.viewportSegRepresentations[e];let o=!1;if(!t||Object.values(t).every((e=>void 0===e)))n.push(...a),delete i.viewportSegRepresentations[e];else{const{segmentationId:r,type:s}=t;i.viewportSegRepresentations[e]=a.filter((e=>{const t=r&&s&&e.segmentationId===r&&e.type===s||r&&!s&&e.segmentationId===r||!r&&s&&e.type===s;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){const n=this.removeSegmentationRepresentationsInternal(e,t);n.forEach((t=>{(0,s.triggerSegmentationRepresentationRemoved)(e,t.segmentationId,t.type)}));const i=this.getSegmentationRepresentations(e);return i.length>0&&i[0].active&&(0,s.triggerSegmentationRepresentationModified)(e,i[0].segmentationId,i[0].type),n}removeSegmentationRepresentation(e,t,n){const i=this.removeSegmentationRepresentationsInternal(e,t);return n||i.forEach((({segmentationId:t,type:n})=>{(0,s.triggerSegmentationRepresentationRemoved)(e,t,n)})),i}_updateLabelmapImageIdReferenceMap({segmentationId:e,referenceImageId:t,labelmapImageId:n}){const i=this._generateMapKey({segmentationId:e,referenceImageId:t});if(!this._labelmapImageIdReferenceMap.has(i))return void this._labelmapImageIdReferenceMap.set(i,[n]);const a=this._labelmapImageIdReferenceMap.get(i),o=Array.from(new Set([...a,n]));this._labelmapImageIdReferenceMap.set(i,o)}_setActiveSegmentation(e,t,n){const i=e.viewportSegRepresentations[t];i&&i.forEach((e=>{e.active=e.segmentationId===n}))}setActiveSegmentation(e,t){this.updateState((n=>{const i=n.viewportSegRepresentations[e];i&&i.forEach((e=>{e.active=e.segmentationId===t}))})),(0,s.triggerSegmentationRepresentationModified)(e,t)}getActiveSegmentation(e){if(!this.state.viewportSegRepresentations[e])return;const t=this.state.viewportSegRepresentations[e].find((e=>e.active));return t?this.getSegmentation(t.segmentationId):void 0}getSegmentationRepresentations(e,t={}){const n=this.state.viewportSegRepresentations[e];return n?t.type||t.segmentationId?n.filter((e=>{const 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){const n=this.getSegmentationRepresentation(e,t);return n?.visible}setSegmentationRepresentationVisibility(e,t,n){this.updateState((i=>{const a=this.getSegmentationRepresentations(e,t);a&&a.forEach((e=>{e.visible=n,Object.entries(e.segments).forEach((([e,t])=>{t.visible=n}))}))})),(0,s.triggerSegmentationRepresentationModified)(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]=i.utilities.deepClone(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){const t=[];return Object.entries(this.state.viewportSegRepresentations).forEach((([n,i])=>{const 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}`}}("DEFAULT")},26228:(e,t,n)=>{n.d(t,{getActiveSegmentation:()=>a});var i=n(67165);n(59475);function a(e){return(0,i.T)(e)}},4714:(e,t,n)=>{n(15327),n(59475),n(70906),n(93952)},30935:(e,t,n)=>{n(59475),n(49906),n(99737),n(15327)},93733:(e,t,n)=>{n.d(t,{getSegmentIndexColor:()=>r,setSegmentIndexColor:()=>s});n(4714);var i=n(50409),a=n(93210),o=n(49906);function r(e,t,n){const o=(0,a.r$)(e,{segmentationId:t});if(!o||0===o.length)return null;const r=o[0],{colorLUTIndex:s}=r,l=(0,i.B)(s);let c=l[n];if(!c){if("number"!=typeof n)return console.warn(`Can't create colour for LUT index ${n}`),null;c=l[n]=[0,0,0,0]}return c}function s(e,t,n,i){const a=r(e,t,n);for(let e=0;e<i.length;e++)a[e]=i[e];(0,o.triggerSegmentationRepresentationModified)(e,t)}},70906:(e,t,n)=>{n(59475)},93210:(e,t,n)=>{n.d(t,{Ut:()=>o,r$:()=>a});var i=n(59475);function a(e,t={}){return i._6.getSegmentationRepresentations(e,t)}function o(e,t){const n=i._6;if(!t.segmentationId||!t.type)throw new Error("getSegmentationRepresentation: No segmentationId or type provided, you need to provide at least one of them");const a=n.getSegmentationRepresentations(e,t);return a?.[0]}},70758:(e,t,n)=>{n(59475)},42568:(e,t,n)=>{n(33283),n(59475)},63427:(e,t,n)=>{n(59475),n(49906),n(53662)},53662:(e,t,n)=>{n(18682),n(684),n(25894),n(93210),n(15327),n(59475),n(67014)},26795:(e,t,n)=>{n.d(t,{getLockedSegmentIndices:()=>a});var i=n(33283);n(49906);function a(e){const t=(0,i.T)(e);if(!t)throw new Error(`No segmentation state found for ${e}`);const{segments:n}=t;return Object.keys(n).filter((e=>n[e].locked)).map((e=>parseInt(e)))}},98870:(e,t,n)=>{n.d(t,{getCurrentLabelmapImageIdForViewport:()=>i.vl});n(33283),n(70758),n(30935),n(63427),n(53662),n(4714),n(50409),n(70906),n(59475);n(42568),n(58859);var i=n(97577);n(78231);n(93210)},78231:(e,t,n)=>{n(59475)},48145:(e,t,n)=>{n.d(t,{A:()=>a});let i={};const a=i},25072:(e,t,n)=>{var i=n(3823),a=n(15327),o=n(4096),r=n(85817),s=n(27730),l=n(82056),c=n(2076),d=n(29601),u=n(44049),g=n(17328),m=n(85204),h=n(99737),p=n(60810),f=n(15305),v=n(473),w=n(7001),I=n(58640);const{transformWorldToIndex:A}=a.utilities;class S extends r.EC{static{this.toolName="Bidirectional"}constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:y}}){super(e,t),this.isPointNearTool=(e,t,n,i)=>{const o=(0,a.getEnabledElement)(e),{viewport:r}=o,{data:s}=t,{points:l}=s.handles;let c=r.worldToCanvas(l[0]),d=r.worldToCanvas(l[1]),u={start:{x:c[0],y:c[1]},end:{x:d[0],y:d[1]}},g=f.distanceToPoint([u.start.x,u.start.y],[u.end.x,u.end.y],[n[0],n[1]]);return g<=i||(c=r.worldToCanvas(l[2]),d=r.worldToCanvas(l[3]),u={start:{x:c[0],y:c[1]},end:{x:d[0],y:d[1]}},g=f.distanceToPoint([u.start.x,u.start.y],[u.end.x,u.end.y],[n[0],n[1]]),g<=i)},this.toolSelectedCallback=(e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=(0,p.getViewportIdsWithToolToRender)(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i);const r=(0,a.getEnabledElement)(i),{renderingEngine:s}=r;(0,I.A)(o),(0,w.hideElementCursor)(i),e.preventDefault()},this.handleSelectedCallback=(e,t,n)=>{const i=e.detail,{element:o}=i,r=t.data;t.highlighted=!0;let s,l=!1;n.worldPosition?l=!0:s=r.handles.points.findIndex((e=>e===n));const c=(0,p.getViewportIdsWithToolToRender)(o,this.getToolName());(0,w.hideElementCursor)(o),this.editData={annotation:t,viewportIdsToRender:c,handleIndex:s,movingTextBox:l},this._activateModify(o);const d=(0,a.getEnabledElement)(o),{renderingEngine:u}=d;(0,I.A)(c),e.preventDefault()},this._endCallback=e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:r,newAnnotation:s,hasMoved:c}=this.editData,{data:d}=o;if(s&&!c)return;this.doneEditMemo(),d.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),(0,w.resetElementCursor)(n);const{renderingEngine:g}=(0,a.getEnabledElement)(n);if(void 0!==this.editData.handleIndex){const{points:e}=d.handles,t=i.eR.distance(e[0],e[1]);if(i.eR.distance(e[2],e[3])>t){const t=[[...e[2]],[...e[3]]],n=[...e[0]],a=[...e[1]],o=i.Zc.create();i.Zc.set(o,t[1][0]-t[0][0],t[1][1]-t[1][0]);const r=i.Zc.create();i.Zc.set(r,-o[1],o[0]);const s=i.Zc.create();let l;i.Zc.set(s,a[0]-n[0],a[1]-n[0]),l=i.Zc.dot(s,r)>0?[n,a]:[a,n],d.handles.points=[t[0],t[1],l[0],l[1]]}}this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&(0,l.removeAnnotation)(o.annotationUID),(0,I.A)(r),s&&(0,u.triggerAnnotationCompleted)(o),this.editData=null,this.isDrawing=!1},this._dragDrawCallback=e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:o}=t,r=(0,a.getEnabledElement)(o),{viewport:s}=r,{worldToCanvas:l}=s,{annotation:c,viewportIdsToRender:d,handleIndex:g,newAnnotation:m}=this.editData;this.createMemo(o,c,{newAnnotation:m});const{data:p}=c,f=n.world;p.handles.points[g]=[...f];const v=p.handles.points.map(l),w={start:{x:v[0][0],y:v[0][1]},end:{x:v[1][0],y:v[1][1]}},A=(v[2][0],v[2][1],v[3][0],v[3][1],i.Zc.distance(v[0],v[1])/3),S=w.start.x-w.end.x,y=w.start.y-w.end.y,b=Math.sqrt(S*S+y*y),E=S/b,x=y/b,R=(w.start.x+w.end.x)/2,M=(w.start.y+w.end.y)/2,P=R+A*x,D=M-A*E,T=R-A*x,C=M+A*E;p.handles.points[2]=s.canvasToWorld([P,D]),p.handles.points[3]=s.canvasToWorld([T,C]),c.invalidated=!0,(0,I.A)(d),(0,u.triggerAnnotationModified)(c,o,h.ChangeTypes.HandlesUpdated),this.editData.hasMoved=!0},this._dragModifyCallback=e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:o,movingTextBox:r,newAnnotation:s}=this.editData;this.createMemo(n,i,{newAnnotation:s});const{data:l}=i;if(r){const{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){const{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 this._dragModifyHandle(e),i.invalidated=!0;(0,I.A)(a),i.invalidated&&(0,u.triggerAnnotationModified)(i,n,h.ChangeTypes.HandlesUpdated)},this._dragModifyHandle=e=>{const t=e.detail,{currentPoints:n,element:o}=t,r=(0,a.getEnabledElement)(o),{viewport:s}=r,{annotation:l,handleIndex:c}=this.editData,{data:d}=l,u=n.world,g=[s.worldToCanvas(d.handles.points[0]),s.worldToCanvas(d.handles.points[1]),s.worldToCanvas(d.handles.points[2]),s.worldToCanvas(d.handles.points[3])],m={start:{x:g[0][0],y:g[0][1]},end:{x:g[1][0],y:g[1][1]}},h={start:{x:g[2][0],y:g[2][1]},end:{x:g[3][0],y:g[3][1]}},p=[...u],v=s.worldToCanvas(p);if(0===c||1===c){const e=g[0===c?1:0],t=i.Zc.set(i.Zc.create(),v[0]-e[0],v[1]-e[1]),n=i.Zc.set(i.Zc.create(),g[c][0]-e[0],g[c][1]-e[1]);i.Zc.normalize(t,t),i.Zc.normalize(n,n);const a={start:{x:e[0],y:e[1]},end:{x:v[0],y:v[1]}};if(this._movingLongAxisWouldPutItThroughShortAxis(a,h))return;const o=e,r=this._getSignedAngle(n,t);let l=g[2][0],u=g[2][1],m=g[3][0],f=g[3][1];l-=o[0],u-=o[1],m-=o[0],f-=o[1];const w=l*Math.cos(r)-u*Math.sin(r),I=l*Math.sin(r)+u*Math.cos(r),A=m*Math.cos(r)-f*Math.sin(r),S=m*Math.sin(r)+f*Math.cos(r);l=w+o[0],u=I+o[1],m=A+o[0],f=S+o[1];const y=s.canvasToWorld([l,u]),b=s.canvasToWorld([m,f]);d.handles.points[c]=p,d.handles.points[2]=y,d.handles.points[3]=b}else{const e=2===c?3:2,t={longLineSegment:{start:m.start,end:m.end},shortLineSegment:{start:h.start,end:h.end}},n=i.Zc.subtract(i.Zc.create(),[t.longLineSegment.end.x,t.longLineSegment.end.y],[t.longLineSegment.start.x,t.longLineSegment.start.y]),a=i.Zc.normalize(i.Zc.create(),n),o=i.Zc.subtract(i.Zc.create(),[v[0],v[1]],[g[c][0],g[c][1]]),r=i.Zc.length(o),l=this._getSignedAngle(a,o),u=Math.cos(l)*r,w=i.Zc.scaleAndAdd(i.Zc.create(),[g[e][0],g[e][1]],a,u);if(this._movingLongAxisWouldPutItThroughShortAxis({start:{x:v[0],y:v[1]},end:{x:w[0],y:w[1]}},{start:{x:t.longLineSegment.start.x,y:t.longLineSegment.start.y},end:{x:t.longLineSegment.end.x,y:t.longLineSegment.end.y}}))return;if(!f.intersectLine([v[0],v[1]],[w[0],w[1]],[m.start.x,m.start.y],[m.end.x,m.end.y]))return;d.handles.points[e]=s.canvasToWorld(w),d.handles.points[c]=p}},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),(0,w.resetElementCursor)(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,(0,I.A)(n),i&&(0,u.triggerAnnotationCompleted)(t),this.editData=null,t.annotationUID}},this._activateDraw=e=>{m.wk.isInteractingWithTool=!0,e.addEventListener(h.Events.MOUSE_UP,this._endCallback),e.addEventListener(h.Events.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(h.Events.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(h.Events.MOUSE_CLICK,this._endCallback),e.addEventListener(h.Events.TOUCH_TAP,this._endCallback),e.addEventListener(h.Events.TOUCH_END,this._endCallback),e.addEventListener(h.Events.TOUCH_DRAG,this._dragDrawCallback)},this._deactivateDraw=e=>{m.wk.isInteractingWithTool=!1,e.removeEventListener(h.Events.MOUSE_UP,this._endCallback),e.removeEventListener(h.Events.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(h.Events.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(h.Events.MOUSE_CLICK,this._endCallback),e.removeEventListener(h.Events.TOUCH_TAP,this._endCallback),e.removeEventListener(h.Events.TOUCH_END,this._endCallback),e.removeEventListener(h.Events.TOUCH_DRAG,this._dragDrawCallback)},this._activateModify=e=>{m.wk.isInteractingWithTool=!0,e.addEventListener(h.Events.MOUSE_UP,this._endCallback),e.addEventListener(h.Events.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(h.Events.MOUSE_CLICK,this._endCallback),e.addEventListener(h.Events.TOUCH_END,this._endCallback),e.addEventListener(h.Events.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(h.Events.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{m.wk.isInteractingWithTool=!1,e.removeEventListener(h.Events.MOUSE_UP,this._endCallback),e.removeEventListener(h.Events.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(h.Events.MOUSE_CLICK,this._endCallback),e.removeEventListener(h.Events.TOUCH_END,this._endCallback),e.removeEventListener(h.Events.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(h.Events.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!0;const{viewport:i}=e,{element:a}=i;let o=(0,l.getAnnotations)(this.getToolName(),a);if(!o?.length)return n;if(o=this.filterInteractableAnnotationsForElement(a,o),!o?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let a=0;a<o.length;a++){const l=o[a],{annotationUID:m,data:h}=l,{points:p,activeHandleIndex:f}=h.handles,w=p.map((e=>i.worldToCanvas(e)));u.annotationUID=m;const{color:I,lineWidth:A,lineDash:S,shadow:y}=this.getAnnotationStyle({annotation:l,styleSpecifier:u});if(h.cachedStats[r]&&null!=h.cachedStats[r].unit?l.invalidated&&this._throttledCalculateCachedStats(l,s,e):(h.cachedStats[r]={length:null,width:null,unit:null},this._calculateCachedStats(l,s,e)),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let b;if(!(0,d.isAnnotationVisible)(m))continue;if((0,c.isAnnotationLocked)(m)||this.editData||null===f||(b=[w[f]]),b){const e="0";(0,g.drawHandles)(t,m,e,b,{color:I})}const E=`${m}-line-1`,x=`${m}-line-2`,R="0";(0,g.drawLine)(t,m,R,w[0],w[1],{color:I,lineDash:S,lineWidth:A,shadow:y},E);const M="1";(0,g.drawLine)(t,m,M,w[2],w[3],{color:I,lineDash:S,lineWidth:A,shadow:y},x),n=!0;const P=this.getLinkedTextBoxStyle(u,l);if(!P.visibility){h.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}const D=this.configuration.getTextLines(h,r);if(!D||0===D.length)continue;let T;h.handles.textBox.hasMoved||(T=(0,v.getTextBoxCoordsCanvas)(w),h.handles.textBox.worldPosition=i.canvasToWorld(T));const C=i.worldToCanvas(h.handles.textBox.worldPosition),L="1",_=(0,g.drawLinkedTextBox)(t,m,L,D,C,w,{},P),{x:O,y:V,width:N,height:U}=_;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([O,V]),topRight:i.canvasToWorld([O+N,V]),bottomLeft:i.canvasToWorld([O,V+U]),bottomRight:i.canvasToWorld([O+N,V+U])}}return n},this._movingLongAxisWouldPutItThroughShortAxis=(e,t)=>{const n=i.Zc.create();i.Zc.set(n,t.end.x-t.start.x,t.end.y-t.start.y),i.Zc.normalize(n,n);const a={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!f.intersectLine([a.start.x,a.start.y],[a.end.x,a.end.y],[e.start.x,e.start.y],[e.end.x,e.end.y])},this._calculateCachedStats=(e,t,n)=>{const{data:i}=e,{element:a}=n.viewport,r=i.handles.points[0],s=i.handles.points[1],l=i.handles.points[2],c=i.handles.points[3],{cachedStats:d}=i,g=Object.keys(d);for(let e=0;e<g.length;e++){const t=g[e],n=this.getTargetImageData(t);if(!n)continue;const{imageData:i,dimensions:a}=n,u=A(i,r),m=A(i,s),h=A(i,l),p=A(i,c),f=[u,m],v=[h,p],{scale:w,unit:I}=(0,o.Op)(n,f),{scale:S,unit:y}=(0,o.Op)(n,v),b=this._calculateLength(r,s)/w,E=this._calculateLength(l,c)/S,x=b>E?b:E,R=b>E?E:b,M=b>E?I:y,P=b>E?y:I;this._isInsideVolume(u,m,h,p,a)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,d[t]={length:x,width:R,unit:M,widthUnit:P}}const m=e.invalidated;return e.invalidated=!1,m&&(0,u.triggerAnnotationModified)(e,a,h.ChangeTypes.StatsUpdated),d},this._isInsideVolume=(e,t,n,i,o)=>a.utilities.indexWithinDimensions(e,o)&&a.utilities.indexWithinDimensions(t,o)&&a.utilities.indexWithinDimensions(n,o)&&a.utilities.indexWithinDimensions(i,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=(0,s.A)(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,r=(0,a.getEnabledElement)(i),{viewport:s,renderingEngine:c}=r;this.isDrawing=!0;const d=s.getCamera(),{viewPlaneNormal:u,viewUp:g}=d,m=this.getReferencedImageId(s,o,u,g),h=s.getFrameOfReferenceUID(),f={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...u],viewUp:[...g],FrameOfReferenceUID:h,referencedImageId:m,...s.getViewReference({points:[o]})},data:{handles:{points:[[...o],[...o],[...o],[...o]],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:{}}};(0,l.addAnnotation)(f,i);const v=(0,p.getViewportIdsWithToolToRender)(i,this.getToolName());return this.editData={annotation:f,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),(0,w.hideElementCursor)(i),e.preventDefault(),(0,I.A)(v),f}static{this.hydrate=(e,t,n)=>{const i=(0,a.getEnabledElementByViewportId)(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:r,viewPlaneNormal:s,instance:c,viewport:d}=this.hydrateBase(S,i,[],n),[u,g]=t,[m,h]=u,[p,f]=g,v=[m,h,p,f],w={annotationUID:n?.annotationUID||a.utilities.uuidv4(),data:{handles:{points:v,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:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:r,...n}};return(0,l.addAnnotation)(w,d.element),(0,I.A)([d.id]),w}}_calculateLength(e,t){const n=e[0]-t[0],i=e[1]-t[1],a=e[2]-t[2];return Math.sqrt(n*n+i*i+a*a)}}function y(e,t){const{cachedStats:n,label:i}=e,{length:o,width:r,unit:s}=n[t],l=[];return i&&l.push(i),void 0===o||l.push(`L: ${a.utilities.roundNumber(o)} ${s||s}`,`W: ${a.utilities.roundNumber(r)} ${s}`),l}},85817:(e,t,n)=>{n.d(t,{EC:()=>a.A,oS:()=>i.A});var i=n(37234),a=n(91350);n(6030)},48736:(e,t,n)=>{var i=n(15327),a=n(3823),o=n(99737),r=n(17492),s=n(1989),l=n(56789),c=n(33852),d=n(17328),u=n(7001),g=n(58640),m=n(23631),h=n(40905);class p extends m.A{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE_CIRCLE:l.kr,ERASE_INSIDE_CIRCLE:c.r,FILL_INSIDE_SPHERE:r.Jq,ERASE_INSIDE_SPHERE:s._,THRESHOLD_INSIDE_CIRCLE:l.q,THRESHOLD_INSIDE_SPHERE:r.rd,THRESHOLD_INSIDE_SPHERE_WITH_ISLAND_REMOVAL:r.Sw},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:{[o.StrategyCallbacks.AcceptPreview]:{method:o.StrategyCallbacks.AcceptPreview,bindings:[{key:"Enter"}]},[o.StrategyCallbacks.RejectPreview]:{method:o.StrategyCallbacks.RejectPreview,bindings:[{key:"Escape"}]},[o.StrategyCallbacks.Interpolate]:{method:o.StrategyCallbacks.Interpolate,bindings:[{key:"i"}],configuration:{useBallStructuringElement:!0,noUseDistanceTransform:!0,noUseExtrapolation:!0}},interpolateExtrapolation:{method:o.StrategyCallbacks.Interpolate,bindings:[{key:"e"}],configuration:{}}}}}){super(e,t),this.onSetToolPassive=e=>{this.disableCursor()},this.onSetToolEnabled=()=>{this.disableCursor()},this.onSetToolDisabled=e=>{this.disableCursor()},this.preMouseDownCallback=e=>{const t=e.detail,{element:n}=t,a=(0,i.getEnabledElement)(n);this._editData=this.createEditData(n),this._activateDraw(n),(0,u.hideElementCursor)(n),e.preventDefault(),this._previewData.isDrag=!1,this._previewData.timerStart=Date.now();const r=this._hoverData||this.createHoverData(n);(0,g.A)(r.viewportIdsToRender);const s=this.getOperationData(n);return this.applyActiveStrategyCallback(a,s,o.StrategyCallbacks.OnInteractionStart),!0},this.mouseMoveCallback=e=>{if(this.mode===o.ToolModes.Active){if(this.updateCursor(e),!this.configuration.preview.enabled)return;const{previewTimeMs:t,previewMoveDistance:n,dragMoveDistance:i}=this.configuration.preview,{currentPoints:o,element:r}=e.detail,{canvas:s}=o,{startPoint:l,timer:c,timerStart:d,isDrag:u}=this._previewData;if(u)return;const g=a.Zc.distance(s,l),m=Date.now()-d;if((g>n||m>t&&g>i)&&(c&&(window.clearTimeout(c),this._previewData.timer=null),u||this.rejectPreview(r)),!this._previewData.timer){const e=window.setTimeout(this.previewCallback,250);Object.assign(this._previewData,{timerStart:Date.now(),timer:e,startPoint:s,element:r})}}},this.previewCallback=()=>{if(this._previewData.isDrag)return void(this._previewData.timer=null);this._previewData.timer=null;const e=this.getOperationData(this._previewData.element),t=(0,i.getEnabledElement)(this._previewData.element);if(!t)return;const{viewport:n}=t,a=this.configuration.activeStrategy,r=(0,h.S)({operationData:e,viewport:n,strategy:a});if(!e)return;const s=this.createMemo(e.segmentationId,r.segmentationVoxelManager);this._previewData.preview=this.applyActiveStrategyCallback((0,i.getEnabledElement)(this._previewData.element),{...e,...r,memo:s},o.StrategyCallbacks.Preview)},this._dragCallback=e=>{const t=e.detail,{element:n,currentPoints:o}=t,r=(0,i.getEnabledElement)(n);this.updateCursor(e);const{viewportIdsToRender:s}=this._hoverData;(0,g.A)(s);const l=a.Zc.distance(o.canvas,this._previewData.startPoint),{dragTimeMs:c,dragMoveDistance:d}=this.configuration.preview;!this._previewData.isDrag&&Date.now()-this._previewData.timerStart<c&&l<d||(this._previewData.timer&&(window.clearTimeout(this._previewData.timer),this._previewData.timer=null),this._previewData.preview=this.applyActiveStrategy(r,this.getOperationData(n)),this._previewData.element=n,this._previewData.timerStart=Date.now()+c,this._previewData.isDrag=!0,this._previewData.startPoint=o.canvas)},this._endCallback=e=>{const t=e.detail,{element:n}=t,a=(0,i.getEnabledElement)(n),r=this.getOperationData(n);this._previewData.preview||this._previewData.isDrag||this.applyActiveStrategy(a,r),this.doneEditMemo(),this._deactivateDraw(n),(0,u.resetElementCursor)(n),this.updateCursor(e),this._editData=null,this.applyActiveStrategyCallback(a,r,o.StrategyCallbacks.OnInteractionEnd),this._previewData.isDrag||this.acceptPreview(n)},this._activateDraw=e=>{e.addEventListener(o.Events.MOUSE_UP,this._endCallback),e.addEventListener(o.Events.MOUSE_DRAG,this._dragCallback),e.addEventListener(o.Events.MOUSE_CLICK,this._endCallback)},this._deactivateDraw=e=>{e.removeEventListener(o.Events.MOUSE_UP,this._endCallback),e.removeEventListener(o.Events.MOUSE_DRAG,this._dragCallback),e.removeEventListener(o.Events.MOUSE_CLICK,this._endCallback)}}disableCursor(){this._hoverData=void 0,this.rejectPreview()}updateCursor(e){const t=e.detail,{element:n}=t,{currentPoints:i}=t,a=i.canvas;this._hoverData=this.createHoverData(n,a),this._calculateCursor(n,a),this._hoverData&&(0,g.A)(this._hoverData.viewportIdsToRender)}_calculateCursor(e,t){const n=(0,i.getEnabledElement)(e),{viewport:o}=n,{canvasToWorld:r}=o,s=o.getCamera(),{brushSize:l}=this.configuration,c=a.eR.fromValues(s.viewUp[0],s.viewUp[1],s.viewUp[2]),d=a.eR.fromValues(s.viewPlaneNormal[0],s.viewPlaneNormal[1],s.viewPlaneNormal[2]),u=a.eR.create();a.eR.cross(u,c,d);const g=r([t[0],t[1]]),m=a.eR.create(),h=a.eR.create(),p=a.eR.create(),f=a.eR.create();for(let e=0;e<=2;e++)m[e]=g[e]-c[e]*l,h[e]=g[e]+c[e]*l,p[e]=g[e]-u[e]*l,f[e]=g[e]+u[e]*l;if(!this._hoverData)return;const{brushCursor:v}=this._hoverData,{data:w}=v;void 0===w.handles&&(w.handles={}),w.handles.points=[m,h,p,f];const I=this.configuration.activeStrategy,A=this.configuration.strategies[I];"function"==typeof A?.computeInnerCircleRadius&&A.computeInnerCircleRadius({configuration:this.configuration,viewport:o}),w.invalidated=!1}getStatistics(e,t){if(!e)return;const n=(0,i.getEnabledElement)(e);return this.applyActiveStrategyCallback(n,this.getOperationData(e),o.StrategyCallbacks.GetStatistics,t)}rejectPreview(e=this._previewData.element){if(!e)return;this.doneEditMemo();const t=(0,i.getEnabledElement)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),o.StrategyCallbacks.RejectPreview),this._previewData.preview=null,this._previewData.isDrag=!1}acceptPreview(e=this._previewData.element){e&&super.acceptPreview(e)}interpolate(e,t){if(!e)return;const n=(0,i.getEnabledElement)(e);this._previewData.preview=this.applyActiveStrategyCallback(n,this.getOperationData(e),o.StrategyCallbacks.Interpolate,t.configuration),this._previewData.isDrag=!0}invalidateBrushCursor(){if(void 0===this._hoverData)return;const{data:e}=this._hoverData.brushCursor,{viewport:t}=this._hoverData;e.invalidated=!0;const{segmentColor:n}=this.getActiveSegmentationData(t)||{};this._hoverData.brushCursor.metadata.segmentColor=n}renderAnnotation(e,t){if(!this._hoverData)return;const{viewport:n}=e;if(!this._hoverData.viewportIdsToRender.includes(n.id))return;const i=this._hoverData.brushCursor;if(!0===i.data.invalidated){const{centerCanvas:e}=this._hoverData,{element:t}=n;this._calculateCursor(t,e)}const a=i.metadata;if(!a)return;const o=a.brushCursorUID,r=i.data,{points:s}=r.handles,l=s.map((e=>n.worldToCanvas(e))),c=l[0],u=l[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)),h=`rgb(${a.segmentColor?.slice(0,3)||[0,0,0]})`;if(!n.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");(0,d.drawCircle)(t,o,"0",g,m,{color:h,lineDash:0===this.centerSegmentIndexInfo.segmentIndex?[1,2]:null});const{dynamicRadiusInCanvas:p}=this.configuration?.threshold||{dynamicRadiusInCanvas:0};if(p){const e="1";(0,d.drawCircle)(t,o,e,g,p,{color:h})}}}p.toolName="Brush"},56789:(e,t,n)=>{n.d(t,{kr:()=>v,mu:()=>h,pB:()=>p,q:()=>w});var i=n(3823),a=n(15327),o=n(11683),r=n(72282),s=n(55887),l=n(99737),c=n(11990),d=n(62783);const{transformWorldToIndex:u,isEqual:g}=a.utilities,m={[l.StrategyCallbacks.Initialize]:e=>{const{points:t,viewport:n,segmentationImageData:a}=e;if(!t)return;const s=i.eR.fromValues(0,0,0);t.forEach((e=>{i.eR.add(s,s,e)})),i.eR.scale(s,s,1/t.length),e.centerWorld=s,e.centerIJK=u(a,s);const l=t.map((e=>n.worldToCanvas(e))),[c,d]=(0,o.getCanvasEllipseCorners)(l),g=n.canvasToWorld(c),m=n.canvasToWorld(d),p=t.map((e=>u(a,e))),f=(0,r.getBoundingBoxAroundShapeIJK)(p,a.getDimensions());e.isInObject=h({topLeftWorld:g,bottomRightWorld:m,center:s}),e.isInObjectBoundsIJK=f}};function h(e){const{topLeftWorld:t,bottomRightWorld:n,center:i}=e,a=Math.abs(t[0]-n[0])/2,r=Math.abs(t[1]-n[1])/2,s=Math.abs(t[2]-n[2])/2,l=Math.max(a,r,s);if(g(a,l)&&g(r,l)&&g(s,l)){const e={center:i,radius:l,radius2:l*l};return t=>(0,d.d)(e,t)}const c={center:i,xRadius:a,yRadius:r,zRadius:s},{precalculated:u}=(0,o.precalculatePointInEllipse)(c,{});return u}const p=new s.A("Circle",c.A.regionFill,c.A.setValue,m,c.A.determineSegmentIndex,c.A.preview,c.A.labelmapStatistics),f=new s.A("CircleThreshold",c.A.regionFill,c.A.setValue,m,c.A.determineSegmentIndex,c.A.dynamicThreshold,c.A.threshold,c.A.preview,c.A.islandRemoval,c.A.labelmapStatistics),v=p.strategyFunction,w=f.strategyFunction},10088:(e,t,n)=>{var i=n(3823),a=n(15327),o=n(72282),r=(n(49906),n(40905),n(26384)),s=n(55887),l=n(99737),c=n(11990);const{transformWorldToIndex:d}=a.utilities,u={[l.StrategyCallbacks.Initialize]:e=>{const{points:t,imageVoxelManager:n,viewport:s,segmentationImageData:l,segmentationVoxelManager:c}=e;if(!t)return;const u=i.eR.fromValues(0,0,0);t.forEach((e=>{i.eR.add(u,u,e)})),i.eR.scale(u,u,1/t.length),e.centerWorld=u,e.centerIJK=d(l,u);const{boundsIJK:g,pointInShapeFn:m}=function(e,t,n){let i=t.map((e=>d(n,e)));i=i.map((e=>e.map((e=>Math.round(e)))));const s=(0,o.getBoundingBoxAroundShapeIJK)(i,n.getDimensions()),l=e instanceof a.StackViewport,c=l||(0,r.l)(i),u=n.getDirection(),g=n.getSpacing(),{viewPlaneNormal:m}=e.getCamera(),h=a.utilities.getSpacingInNormalDirection({direction:u,spacing:g},m),p=(0,o.getBoundingBoxAroundShapeWorld)(t);let[[f,v],[w,I],[A,S]]=p;f-=h,v+=h,w-=h,I+=h,A-=h,S+=h;const y=c?()=>!0:e=>{const[t,n,i]=e;return t>=f&&t<=v&&(n>=w&&n<=I)&&(i>=A&&i<=S)};return{boundsIJK:s,pointInShapeFn:y}}(s,t,l);e.isInObject=m,e.isInObjectBoundsIJK=g}};const g=new s.A("Rectangle",c.A.regionFill,c.A.setValue,u,c.A.determineSegmentIndex,c.A.preview,c.A.labelmapStatistics),m=new s.A("RectangleThreshold",c.A.regionFill,c.A.setValue,u,c.A.determineSegmentIndex,c.A.dynamicThreshold,c.A.threshold,c.A.preview,c.A.islandRemoval,c.A.labelmapStatistics);g.strategyFunction,m.strategyFunction},99522:(e,t,n)=>{n.d(t,{fillInsideCircle:()=>i.kr});n(10088);var i=n(56789)},64485:(e,t,n)=>{n.d(t,{x:()=>o});var i=n(15327),a=(n(82056),n(3823));function o(e,t,n){const o=e.getImageIds();if(!o||!o.length)return;const r=o.map((e=>{const{imagePositionPatient:o}=i.metaData.get("imagePlaneModule",e),r=function(e,t,n){const i=a.eR.create();a.eR.sub(i,e,t);const o=a.eR.dot(i,n);return Math.abs(o)}(t,o,n);return{imageId:e,distance:r}}));return r.sort(((e,t)=>e.distance-t.distance)),r[0].imageId}},76802:()=>{},72282:(e,t,n)=>{n.d(t,{getBoundingBoxAroundShapeIJK:()=>i.g,getBoundingBoxAroundShapeWorld:()=>i.C});n(76802);var i=n(87063)},64843:(e,t,n)=>{n.d(t,{addContourSegmentationAnnotation:()=>i.V,removeContourSegmentationAnnotation:()=>a.M});n(62854),n(78130);var i=n(85263),a=n(37354)},46228:(e,t,n)=>{function i(e,t,n){let a=-1;if(t.forEach(((t,n)=>{a>=0||t.a==e.b&&(a=n)})),a>=0){const e=t[a];return t.splice(a,1),n.push(e.b),n[0]==e.b?{remainingLines:t,contourPoints:n,type:"CLOSED_PLANAR"}:i(e,t,n)}return{remainingLines:t,contourPoints:n,type:"OPEN_PLANAR"}}function a(e){if(0==e.length)return[];const t=[],n=e.shift();t.push(n.a),t.push(n.b);const o=i(n,e,t);if(0==o.remainingLines.length)return[{type:o.type,contourPoints:o.contourPoints}];{const e=a(o.remainingLines);return e.push({type:o.type,contourPoints:o.contourPoints}),e}}function o(e){return a(e)}n.d(t,{d1:()=>o})},98013:(e,t,n)=>{var i=n(15327);n(3823);const{isEqual:a}=i.utilities},37546:(e,t,n)=>{function i(e,t=!1){const n=e.getPoints(),i=e.getLines(),a=new Array(n.getNumberOfPoints()).fill(0).map(((e,t)=>n.getPoint(t).slice())),o=new Array(i.getNumberOfCells()).fill(0).map(((e,t)=>{const n=i.getCell(3*t).slice();return{a:n[0],b:n[1]}}));if(t)return{points:a,lines:o};const r=[];for(const[e,t]of a.entries()){const 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{const 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))}}n.d(t,{v:()=>i})},473:(e,t,n)=>{n.d(t,{getTextBoxCoordsCanvas:()=>i.A});var i=n(1239)},4096:(e,t,n)=>{n.d(t,{Op:()=>u});var i=n(15327);const{CalibrationTypes:a}=i.Enums,o="px",r="voxels",s=[1,2,3,4],l=["3,3","4,7"],c={0:"px",1:"percent",2:"dB",3:"cm",4:"seconds",5:"hertz",6:"dB/seconds",7:"cm/sec",8:"cm²",9:"cm²/s",12:"degrees"},d="²",u=(e,t)=>{const{calibration:n,hasPixelSpacing:u}=e;let g=u?"mm":o;const m=u?"mm³":r;let h=g+d,p=1,f="";if(!n||!n.type&&!n.sequenceOfUltrasoundRegions)return{unit:g,areaUnit:h,scale:p,volumeUnit:m};if(n.type===a.UNCALIBRATED)return{unit:o,areaUnit:o+d,scale:p,volumeUnit:r};if(n.sequenceOfUltrasoundRegions){let e,a;if(Array.isArray(t)&&2===t.length)[e,a]=t;else if("function"==typeof t){const n=t();e=n[0],a=n[1]}let u=n.sequenceOfUltrasoundRegions.filter((t=>e[0]>=t.regionLocationMinX0&&e[0]<=t.regionLocationMaxX1&&e[1]>=t.regionLocationMinY0&&e[1]<=t.regionLocationMaxY1&&a[0]>=t.regionLocationMinX0&&a[0]<=t.regionLocationMaxX1&&a[1]>=t.regionLocationMinY0&&a[1]<=t.regionLocationMaxY1));if(!u?.length)return{unit:g,areaUnit:h,scale:p,volumeUnit:m};if(u=u.filter((e=>s.includes(e.regionDataType)&&l.includes(`${e.physicalUnitsXDirection},${e.physicalUnitsYDirection}`))),!u.length)return{unit:o,areaUnit:o+d,scale:p,volumeUnit:r};const v=u[0],w=Math.abs(v.physicalDeltaX),I=Math.abs(v.physicalDeltaY);if(!i.utilities.isEqual(w,I,.001))return{unit:o,areaUnit:o+d,scale:p,volumeUnit:r};p=1/w,f="US Region",g=c[v.physicalUnitsXDirection]||"unknown",h=g+d}else n.scale&&(p=n.scale);return[a.ERMF,a.USER,a.ERROR,a.PROJECTION,a.CALIBRATED,a.UNKNOWN].includes(n?.type)&&(f=n.type),{unit:g+(f?` ${f}`:""),areaUnit:h+(f?` ${f}`:""),scale:p,volumeUnit:m+(f?` ${f}`:"")}}},4296:(e,t,n)=>{n.d(t,{l:()=>l});var i=n(15327),a=n(3823),o=n(72282);const{transformWorldToIndex:r}=i.utilities;function s(e,t,n){const[i,s]=e,l=a.eR.fromValues((i[0]+s[0])/2,(i[1]+s[1])/2,(i[2]+s[2])/2),c=a.eR.distance(i,s)/2,{boundsIJK:d,topLeftWorld:u,bottomRightWorld:g}=function(e,t,n,i,s){const l=e.getDimensions(),{row:c,column:d,normal:u}=t,g=a.eR.create(),m=a.eR.create();a.eR.scaleAndAdd(g,i,u,s),a.eR.scaleAndAdd(m,i,u,-s),a.eR.scaleAndAdd(g,g,d,-s),a.eR.scaleAndAdd(m,m,d,s),a.eR.scaleAndAdd(g,g,c,-s),a.eR.scaleAndAdd(m,m,c,s);const h=r(e,g),p=r(e,m),f=n.map((t=>r(e,t))),v=(0,o.getBoundingBoxAroundShapeIJK)([h,p,...f],l);return{boundsIJK:v,topLeftWorld:g,bottomRightWorld:m}}(t,n,e,l,c);return{boundsIJK:d,centerWorld:l,radiusWorld:c,topLeftWorld:u,bottomRightWorld:g}}function l(e,t,n){if(!n)throw new Error("viewport is required in order to calculate the sphere bounds");const i=n.getCamera(),o=a.eR.fromValues(i.viewUp[0],i.viewUp[1],i.viewUp[2]),r=a.eR.fromValues(i.viewPlaneNormal[0],i.viewPlaneNormal[1],i.viewPlaneNormal[2]),l=a.eR.create();a.eR.cross(l,o,r);return s(e,t,{row:l,normal:r,column:a.eR.negate(a.eR.create(),o)})}},39848:(e,t,n)=>{n.d(t,{A:()=>o});var i=n(15327),a=n(77609);function o(e,t){const n=(0,i.getEnabledElement)(e),{renderingEngineId:o,viewportId:r}=n,s=(0,a.getToolGroupForViewport)(r,o);if(!s)return[];const l=[],c=Object.keys(s.toolOptions);for(let e=0;e<c.length;e++){const n=c[e],i=s.toolOptions[n];if(i&&t.includes(i.mode)){const e=s.getToolInstance(n);l.push(e)}}return l}},88638:()=>{},25963:(e,t,n)=>{n(3823)},83923:(e,t,n)=>{n(25963)},28364:(e,t,n)=>{n.d(t,{I:()=>a,t:()=>i});class i{}class a{constructor(e){this.storePointData=e.storePointData}getStatistics(){console.debug("InstanceCalculator getStatistics called")}}},73262:(e,t,n)=>{n.d(t,{BasicStatsCalculator:()=>i.O});var i=n(69013);n(28364)},77081:(e,t,n)=>{n(82216)},11683:(e,t,n)=>{n.d(t,{getCanvasEllipseCorners:()=>a.A,precalculatePointInEllipse:()=>i});const i=(e,t={})=>{const{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);const{invXRadiusSq:o,invYRadiusSq:r,invZRadiusSq:s}=t,{center:l}=e,[c,d,u]=l;return t.precalculated=e=>{const t=e[0]-c;let n=t*t*o;if(n>1)return!1;const i=e[1]-d;if(n+=i*i*r,n>1)return!1;const a=e[2]-u;return n+=a*a*s,n<=1},t};var a=n(2222)},95527:(e,t,n)=>{n.d(t,{point:()=>i,polyline:()=>a});n(88638),n(73262),n(77081),n(11683),n(15305);var i=n(82216),a=n(92984);n(33657),n(23324),n(83923)},18989:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(73149);function a(e,t,n){return(0,i.A)(e,t,n).distanceSquared}},73149:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(82216);function a(e,t,n){let a;const o=(0,i.distanceToPointSquared)(e,t);if(e[0]===t[0]&&e[1]===t[1]&&(a=e),!a){const i=((n[0]-e[0])*(t[0]-e[0])+(n[1]-e[1])*(t[1]-e[1]))/o;a=i<0?e:i>1?t:[e[0]+i*(t[0]-e[0]),e[1]+i*(t[1]-e[1])]}return{point:[...a],distanceSquared:(0,i.distanceToPointSquared)(n,a)}}},15305:(e,t,n)=>{n.d(t,{distanceToPoint:()=>i.A,distanceToPointSquared:()=>a.A,intersectLine:()=>o.A,isPointOnLineSegment:()=>s});var i=n(86978),a=n(18989),o=(n(73149),n(81205));const r=.01;function s(e,t,n){const 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],s=e[1]>=t[1]?e[1]:t[1];if(!(n[0]>=i-r&&n[0]<=a+r&&n[1]>=o-r&&n[1]<=s+r))return!1;const l=(t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]);return(l>=0?l:-l)<=r}},82216:(e,t,n)=>{function i(e,t){if(e.length!==t.length)throw Error("Both points should have the same dimensionality");const[n,i,a=0]=e,[o,r,s=0]=t,l=o-n,c=r-i,d=s-a;return l*l+c*c+d*d}function a(e,t){return Math.sqrt(i(e,t))}function o(e,t){const[n,i]=e,[a,o]=t;return[2*a-n,2*o-i]}n.r(t),n.d(t,{distanceToPoint:()=>a,distanceToPointSquared:()=>i,mirror:()=>o})},97792:(e,t,n)=>{n.d(t,{A:()=>o});var i=n(15327),a=n(3823);const o=(e,t,n,o)=>{const{xDir:r,yDir:s,spacing:l}=o,c=(0,i.getEnabledElement)(e),{viewport:d}=c;if(!t.length)return t.push(n),console.log(">>>>> !canvasPoints. :: RETURN"),1;const u=d.canvasToWorld(t[t.length-1]),g=d.canvasToWorld(n),m=a.eR.create();a.eR.subtract(m,g,u);const h=Math.abs(a.eR.dot(m,r)),p=Math.abs(a.eR.dot(m,s)),f=Math.max(Math.floor(h/l[0]),Math.floor(p/l[0]));if(f>1){const e=t[t.length-1],i=a.Zc.dist(e,n),o=a.Zc.create();a.Zc.subtract(o,n,e),a.Zc.set(o,o[0]/i,o[1]/i);const r=i/f;for(let n=1;n<=f;n++)t.push([e[0]+r*o[0]*n,e[1]+r*o[1]*n])}else t.push(n);return f}},56777:(e,t,n)=>{function i(e,t,n,i){let r=!1;const s=e[0]<t[0]?e[0]:t[0],l=e[1]<t[1]?e[1]:t[1],c=e[0]>t[0]?e[0]:t[0],d=e[1]>t[1]?e[1]:t[1],u=n[0]<i[0]?n[0]:i[0],g=n[1]<i[1]?n[1]:i[1],m=n[0]>i[0]?n[0]:i[0],h=n[1]>i[1]?n[1]:i[1];if(s>m||c<u||l>h||d<g)return!1;const p=[a(e,t,n),a(e,t,i),a(n,i,e),a(n,i,t)];return p[0]!==p[1]&&p[2]!==p[3]||((0===p[0]&&o(e,n,t)||0===p[1]&&o(e,i,t)||0===p[2]&&o(n,e,i)||0===p[3]&&o(n,t,i))&&(r=!0),r)}function a(e,t,n){const 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 o(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])}n.d(t,{A:()=>i})},68385:(e,t,n)=>{n.d(t,{S:()=>p,Y:()=>f});var i,a,o,r=n(82216),s=n(37135),l=n(46513),c=n(11377),d=n(3823),u=n(10812);function g(e){for(let t=0,n=e.length;t<n;t++){const i=e[t];i.next||(i.next=e[t===n-1?0:t+1])}}function m(e,t){const n=[],c=[],d=new Map;let m=(0,l.A)(t,e[0])?o.Exiting:o.Entering;for(let c=0,g=e.length;c<g;c++){const h=e[c],p=(0,l.A)(t,h),f={type:i.Vertex,coordinates:h,position:p?a.Inside:a.Outside,visited:!1,next:null};n.push(f);const v=e[c===g-1?0:c+1],w=(0,s.A)(t,h,v).map((e=>{const n=e[0],i=t[e[0]],a=t[e[1]],o=(0,u.A)(h,v,i,a);return{sourceLineSegmentId:n,coordinate:o,targetStartPointDistSquared:r.distanceToPointSquared(h,o)}}));w.sort(((e,t)=>e.targetStartPointDistSquared-t.targetStartPointDistSquared)),w.forEach((e=>{const{sourceLineSegmentId:t,coordinate:r}=e,s={type:i.Intersection,coordinates:r,position:a.Edge,direction:m,visited:!1,next:null},l={...s,direction:o.Unknown,cloned:!0};m===o.Entering?s.next=l:l.next=s;let c=d.get(t);c||(c=[],d.set(t,c)),n.push(s),c.push(l),m*=-1}))}for(let e=0,n=t.length;e<n;e++){const n=e,a=t[e],o={type:i.Vertex,coordinates:a,visited:!1,next:null};c.push(o);const s=d.get(n);s?.length&&s.map((e=>({intersectionPoint:e,lineSegStartDistSquared:r.distanceToPointSquared(a,e.coordinates)}))).sort(((e,t)=>e.lineSegStartDistSquared-t.lineSegStartDistSquared)).map((({intersectionPoint:e})=>e)).forEach((e=>c.push(e)))}return g(n),g(c),{targetPolylinePoints:n,sourcePolylinePoints:c}}function h(e){for(let t=0,n=e.length;t<n;t++){const n=e[t];if(!n.visited&&n.position===a.Outside)return n}}function p(e,t){const n=(0,c.A)(e),a=(0,c.A)(t),o=d.eR.dot(a,n);d.Fd.equals(1,o)||(t=t.slice().reverse());const{targetPolylinePoints:r}=m(e,t),s=h(r);if(!s)return e.slice();const l=[s.coordinates];let u=s.next;for(;u!==s;)u.type===i.Intersection&&u.cloned||l.push(u.coordinates),u=u.next;return l}function f(e,t){const n=(0,c.A)(e),a=(0,c.A)(t),o=d.eR.dot(a,n);d.Fd.equals(-1,o)||(t=t.slice().reverse());const{targetPolylinePoints:r}=m(e,t);let s=null;const l=[];for(;s=h(r);){const e=[s.coordinates];let t=s.next;for(s.visited=!0;t!==s;)t.visited=!0,t.type===i.Intersection&&t.cloned||e.push(t.coordinates),t=t.next;l.push(e)}return l}!function(e){e[e.Vertex=0]="Vertex",e[e.Intersection=1]="Intersection"}(i||(i={})),function(e){e[e.Outside=-1]="Outside",e[e.Edge=0]="Edge",e[e.Inside=1]="Inside"}(a||(a={})),function(e){e[e.Exiting=-1]="Exiting",e[e.Unknown=0]="Unknown",e[e.Entering=1]="Entering"}(o||(o={}))},46513:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(19246);function a(e,t,n={closed:void 0}){if(e.length<3)return!1;const o=e.length;let r=0;const{closed:s,holes:l}=n;if(l?.length)for(const e of l)if(a(e,t))return!1;const c=!(void 0===s?(0,i.A)(e):s),d=e.length-(c?1:2);for(let n=0;n<=d;n++){const i=e[n],a=e[n===o-1?0:n+1],s=i[0]>=a[0]?i[0]:a[0],l=i[1]>=a[1]?i[1]:a[1],c=i[1]<=a[1]?i[1]:a[1];if(t[0]<=s&&t[1]>=c&&t[1]<l){let e=i[0]===a[0];if(!e){const n=(t[1]-i[1])*(a[0]-i[0])/(a[1]-i[1])+i[0];e=t[0]<=n}r+=e?1:0}}return!!(r%2)}},42436:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(46513);function a(e,t){for(let n=0,a=t.length;n<a;n++)if(!(0,i.A)(e,t[n]))return!1;return!0}},99944:(e,t,n)=>{n.d(t,{A:()=>o});var i=n(15305);const a=.1;function o(e,t=a){const n=e.length;if(n<3)return e;const o=t*t,r=[[0,n-1]],s=new Array(n).fill(!1);let l=2;for(s[0]=!0,s[n-1]=!0;r.length;){const[t,n]=r.pop();if(n-t==1)continue;const a=e[t],c=e[n];let d=-1/0,u=-1;for(let o=t+1;o<n;o++){const t=e[o],n=i.distanceToPointSquared(a,c,t);n>d&&(d=n,u=o)}d<o||(s[u]=!0,l++,r.push([u,n]),r.push([t,u]))}const c=new Array(l);for(let t=0,i=0;t<n;t++)s[t]&&(c[i++]=e[t]);return c}},98122:(e,t,n)=>{function i(e,t){let n=e;const i=t?.numDimensions||2,a=3===i;if(!Array.isArray(e[0])){const t=e,o=t.length/i;n=new Array(t.length/i);for(let e=0,r=o;e<r;e++)n[e]=[t[e*i],t[e*i+1]],a&&n[e].push(t[e*i+2])}let o=1/0,r=1/0,s=-1/0,l=-1/0,c=1/0,d=-1/0;for(let e=0,t=n.length;e<t;e++){const[t,i,u]=n[e];o=o<t?o:t,r=r<i?r:i,s=s>t?s:t,l=l>i?l:i,a&&(c=c<u?c:u,d=d>u?d:u)}return a?{minX:o,maxX:s,minY:r,maxY:l,minZ:c,maxZ:d}:{minX:o,maxX:s,minY:r,maxY:l}}n.d(t,{A:()=>i})},86909:(e,t,n)=>{function i(e){const t=e.length;let 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)}n.d(t,{A:()=>i})},32979:(e,t,n)=>{n.d(t,{A:()=>o});var i=n(3823),a=n(56777);function o(e,t,n,o=!0){let r,s;o?(s=e.length-1,r=0):(s=0,r=1);const l=[];for(let i=r;i<e.length;i++){const o=e[s],r=e[i];(0,a.A)(t,n,o,r)&&l.push([s,i]),s=i}if(0===l.length)return;const c=[];l.forEach((n=>{const a=[e[n[0]],e[n[1]]],o=[(a[0][0]+a[1][0])/2,(a[0][1]+a[1][1])/2];c.push(i.Zc.distance(o,t))}));const d=Math.min(...c);return{segment:l[c.indexOf(d)],distance:d}}},4338:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(56777);function a(e,t,n,a=!0){let o,r;a?(r=e.length-1,o=0):(r=0,o=1);for(let a=o;a<e.length;a++){const o=e[r],s=e[a];if((0,i.A)(t,n,o,s))return[r,a];r=a}}},50932:(e,t,n)=>{n.d(t,{A:()=>o});var i=n(37135),a=n(10812);function o(e,t,n,o=!0){const r=[],s=(0,i.A)(e,t,n,o);for(let i=0;i<s.length;i++){const o=e[s[i][0]],l=e[s[i][1]],c=(0,a.A)(t,n,o,l);r.push(c)}return r}},37135:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(56777);function a(e,t,n,a=!0){const o=[],r=e.length,s=r-(a?1:2);for(let a=0;a<=s;a++){const s=e[a],l=a===r-1?0:a+1,c=e[l];(0,i.A)(t,n,s,c)&&o.push([a,l])}return o}},10812:(e,t,n)=>{n.d(t,{A:()=>o});var i=n(15305);const a=.01;function o(e,t,n,o){const r=[t[0]-e[0],t[1]-e[1]],s=[o[0]-n[0],o[1]-n[1]],l=s[1]*r[0]-s[0]*r[1];if((l>=0?l:-l)<a){const 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]],r=[n[0]<o[0]?n[0]:o[0],n[0]>o[0]?n[0]:o[0],n[1]<o[1]?n[1]:o[1],n[1]>o[1]?n[1]:o[1]];if(!(a[0]<=r[1]&&a[1]>=r[0]&&a[2]<=r[3]&&a[3]>=r[2]))return;if(!(i.isPointOnLineSegment(e,t,n)||i.isPointOnLineSegment(e,t,o)||i.isPointOnLineSegment(n,o,e)))return;return[.5*((a[0]>r[0]?a[0]:r[0])+(a[1]<r[1]?a[1]:r[1])),.5*((a[2]>r[2]?a[2]:r[2])+(a[3]<r[3]?a[3]:r[3]))]}let c=e[1]-n[1],d=e[0]-n[0];const u=r[0]*c-r[1]*d;c=(s[0]*c-s[1]*d)/l,d=u/l;return[e[0]+c*r[0],e[1]+c*r[1]]}},11377:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(63113);function a(e){const t=(0,i.A)(e);return[0,0,t/Math.abs(t)]}},43490:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(3823);function a(e){const t=function(e){const t=i.eR.create(),n=e[0];for(let i=0,a=e.length;i<a;i++){const o=e[i],r=e[i===a-1?0:i+1],s=o[0]-n[0],l=o[1]-n[1],c=o[2]-n[2],d=r[0]-n[0],u=r[1]-n[1],g=r[2]-n[2];t[0]+=l*g-c*u,t[1]+=c*d-s*g,t[2]+=s*u-l*d}return i.eR.scale(t,t,.5),t}(e);return i.eR.normalize(t,t)}},63113:(e,t,n)=>{function i(e){if(e.length<3)return 0;const t=e[0];let n=0;for(let i=0,a=e.length;i<a;i++){const o=e[i],r=e[i===a-1?0:i+1],s=o[0]-t[0],l=o[1]-t[1],c=r[0]-t[0];n+=s*(r[1]-t[1])-l*c}return n*=.5,n}n.d(t,{A:()=>i})},61785:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(15327),a=n(3823);const o=.001,r=(e,t)=>{let n,r,s;if(e instanceof i.StackViewport){const t=e.getImageData();if(!t)return;r=t.direction.slice(0,3),s=t.direction.slice(3,6),n=t.spacing}else{const t=e.getImageData(),{direction:i,spacing:l}=t,{viewPlaneNormal:c,viewUp:d}=e.getCamera(),u=i.slice(0,3),g=i.slice(3,6),m=i.slice(6,9),h=a.eR.create();a.eR.cross(h,d,c);const p=Math.abs(a.eR.dot(h,u)),f=Math.abs(a.eR.dot(h,g)),v=Math.abs(a.eR.dot(h,m));let w;if(Math.abs(1-p)<o)w=l[0],r=u;else if(Math.abs(1-f)<o)w=l[1],r=g;else{if(!(Math.abs(1-v)<o))throw new Error("No support yet for oblique plane planar contours");w=l[2],r=m}const I=Math.abs(a.eR.dot(d,u)),A=Math.abs(a.eR.dot(d,g)),S=Math.abs(a.eR.dot(d,m));let y;if(Math.abs(1-I)<o)y=l[0],s=u;else if(Math.abs(1-A)<o)y=l[1],s=g;else{if(!(Math.abs(1-S)<o))throw new Error("No support yet for oblique plane planar contours");y=l[2],s=m}n=[w,y]}return{spacing:[n[0]/t,n[1]/t],xDir:r,yDir:s}}},4239:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(63113);function a(e){return(0,i.A)(e)>=0?1:-1}},405:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(4338);function a(e,t){for(let n=0,a=e.length;n<a;n++){const o=e[n],r=e[n===a-1?0:n+1],s=(0,i.A)(t,o,r);if(2===s?.length)return!0}return!1}},19246:(e,t,n)=>{n.d(t,{A:()=>o});var i=n(3823),a=n(82216);function o(e){if(e.length<3)return!1;const t=e.length,n=e[0],o=e[t-1],r=(0,a.distanceToPointSquared)(n,o);return i.Fd.equals(0,r)}},8361:(e,t,n)=>{n.d(t,{i:()=>o});var i=n(46513),a=n(28502);function o(e,t,n={}){const{sharedDimensionIndex:o,projectedPolyline:r}=(0,a.p)(t),{holes:s}=n,l=[];if(s)for(let e=0;e<s.length;e++){const t=s[e],n=[];for(let e=0;e<t.length;e++)n.push([t[e][(o+1)%3],t[e][(o+2)%3]]);l.push(n)}const c=[e[(o+1)%3],e[(o+2)%3]];return(0,i.A)(r,c,{holes:l})}},80514:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(3823);const a=(e,t,n,a)=>{const o=[e[0]-t[0],e[1]-t[1]],r=[n[0]-t[0],n[1]-t[1]],s=o[0]*r[0]+o[1]*r[1];if(s<0)return!1;const l=Math.sqrt(r[0]*r[0]+r[1]*r[1]);if(0===l)return!1;const c=s/l,d=[r[0]/l,r[1]/l],u=[d[0]*c,d[1]*c],g=[t[0]+u[0],t[1]+u[1]];return!(i.Zc.distance(e,g)>a)&&!(i.Zc.distance(t,g)>i.Zc.distance(t,n))}},82265:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(3823);const a=(e,t,n)=>i.Zc.dist(e,t)<n},28502:(e,t,n)=>{n.d(t,{p:()=>o});var i=n(15327);const a=1e-6;function o(e){let t;const n=i.utilities.getRandomSampleFromArray(e,50);for(let e=0;e<3;e++)if(n.every(((t,n,i)=>Math.abs(t[e]-i[0][e])<a))){t=e;break}if(void 0===t)throw new Error("Cannot find a shared dimension index for polyline, probably oblique plane");const o=[],r=(t+1)%3,s=(t+2)%3;for(let t=0;t<e.length;t++)o.push([e[t][r],e[t][s]]);return{sharedDimensionIndex:t,projectedPolyline:o}}},33657:(e,t,n)=>{n.d(t,{distanceToPoint:()=>i.A});var i=n(87105)},23324:(e,t,n)=>{n(90554),n(35381)},35381:(e,t,n)=>{},13165:(e,t,n)=>{n.d(t,{filterAnnotationsForDisplay:()=>o.A,filterAnnotationsWithinSamePlane:()=>c.W});var i=n(36374),a=n(35489),o=n(94418),r=n(62514),s=n(57063),l=n(30698),c=n(40770);i.A,a.A,r.A,o.A,s.R,l.Y,c.W,s.p},60199:(e,t,n)=>{n.d(t,{H:()=>r});var i=n(3823),a=n(82594);const o=.01;function r(e,t,n={maxMajor:0,maxMinor:0}){const{points:r}=e.polyData,{maxMinor:s,maxMajor:l}=n;let c,d=l*l,u=s*s;for(let e=0;e<r.length;e++)for(let n=e+1;n<r.length;n++){const s=r[e],l=r[n],g=i.eR.sqrDist(s,l);g<d||(g-o<d+o&&c||t.testCenter(s,l)&&(0,a.pW)(s,l,t)&&(d=g-o,c=[e,n],u=0))}if(!c)return;d=Math.sqrt(d+o);const g=r[c[0]],m=r[c[1]],h=i.eR.sub(i.eR.create(),g,m);let p;i.eR.scale(h,h,1/d);for(let e=0;e<r.length;e++)for(let n=e+1;n<r.length;n++){const s=r[e],l=r[n],c=i.eR.sqrDist(s,l);if(c<=u)continue;const d=i.eR.sub(i.eR.create(),s,l);Math.abs(i.eR.dot(d,h))/Math.sqrt(c)>o||t.testCenter(s,l)&&(0,a.pW)(s,l,t)&&(u=c,p=[e,n])}if(!p)return;u=Math.sqrt(u);return{majorAxis:[g,m],minorAxis:[r[p[0]],r[p[1]]],maxMajor:d,maxMinor:u,...e}}},14957:(e,t,n)=>{n(77609),n(48736)},82594:(e,t,n)=>{n.d(t,{On:()=>o,pW:()=>a});n(15327);var i=n(3823);function a(e,t,n){const a=n.toIJK(e),o=n.toIJK(t),r=i.eR.create(),{testIJK:s}=n,l=i.eR.sub(i.eR.create(),a,o),c=Math.round(Math.max(...l.map(Math.abs)));if(c<2)return!0;const d=i.eR.scale(i.eR.create(),l,1/c);for(let e=1;e<c;e++)if(i.eR.scaleAndAdd(r,o,d,e),!s(r))return!1;return!0}function o({dimensions:e,imageData:t,voxelManager:n,segmentIndex:a,containedSegmentIndices:o}){const r=e[0],s=r*e[1];return{testCenter:(e,l)=>{const c=i.eR.add(i.eR.create(),e,l).map((e=>e/2)),d=t.worldToIndex(c).map(Math.round),[u,g,m]=d,h=u+g*r+m*s,p=n.getAtIndex(h);return p===a||o?.has(p)},toIJK:e=>t.worldToIndex(e),testIJK:e=>{const[t,i,l]=e,c=Math.round(t)+Math.round(i)*r+Math.round(l)*s,d=n.getAtIndex(c);return d===a||o?.has(d)}}}},94779:(e,t,n)=>{n.d(t,{_:()=>r});var i=n(15327),a=n(56069),o=n(77609);function r(e){e.forEach((e=>{const t=(0,o.getToolGroup)(e);if(!t)return void console.warn(`ToolGroup not available for ${e}`);t.getViewportsInfo().forEach((e=>{const{renderingEngineId:t,viewportId:n}=e,o=(0,i.getRenderingEngine)(t);if(!o)return void console.warn(`RenderingEngine not available for ${t}`);const r=o.getViewport(n);(0,a.A)(r.element)}))}))}},58640:(e,t,n)=>{n.d(t,{A:()=>o});var i=n(15327),a=n(56069);const o=function(e){e.length&&e.forEach((e=>{const t=(0,i.getEnabledElementByViewportId)(e);if(!t)return void console.warn(`Viewport not available for ${e}`);const{viewport:n}=t;if(!n)return void console.warn(`Viewport not available for ${e}`);const o=n.element;(0,a.A)(o)}))}},60810:(e,t,n)=>{n.d(t,{getViewportIdsWithToolToRender:()=>i.A});n(3198),n(9356);var i=n(14543);n(67514)},26605:(e,t,n)=>{var i=n(99178),a=n(15327),o=n(68915);class r{static{this.calculators=new Map}static{this.indices=[]}static{this.mode="collective"}static statsInit(e){const{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 o.C3({storePointData:t}))})):this.calculators.set(n,new o.C3({storePointData:t}))}static statsCallback(e){const{segmentIndex:t,...n}=e;if(!t)throw new Error("Segment index is required for stats calculation");const i="individual"===this.mode?this.calculators.get(t):this.calculators.get(this.indices);if(!i)throw new Error(`No calculator found for segment ${t}`);i.statsCallback(n)}static getStatistics(e){if("individual"===this.mode){const t={};return this.calculators.forEach(((n,i)=>{t[i]=n.getStatistics(e)})),t}return this.calculators.get(this.indices).getStatistics(e)}}n(8582),n(52323),n(4334),n(97492);var s=n(99737),l=n(18682),c=n(93210),d=n(67014),u=n(25894),g=n(684),m=n(68040),h=n(85204),p=n(37590),f=n(77609);const v={[l.A.Labelmap]:g.Ay,[l.A.Contour]:u.A,[l.A.Surface]:d.Ay},w=p.A.toolName;new class{constructor(){this._needsRender=new Set,this._animationFrameSet=!1,this._animationFrameHandle=null,this._getAllViewports=()=>(0,a.getRenderingEngines)().flatMap((e=>e.getViewports())),this._renderFlaggedSegmentations=()=>{this._throwIfDestroyed();Array.from(this._needsRender).forEach((e=>{this._triggerRender(e)})),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null}}renderSegmentationsForViewport(e){const t=e?[e]:this._getViewportIdsForSegmentation();this._setViewportsToBeRenderedNextFrame(t)}renderSegmentation(e){const t=this._getViewportIdsForSegmentation(e);this._setViewportsToBeRenderedNextFrame(t)}_getViewportIdsForSegmentation(e){const t=this._getAllViewports(),n=[];for(const i of t){const t=i.id;if(e){const i=(0,c.r$)(t,{segmentationId:e});i?.length>0&&n.push(t)}else{const e=(0,c.r$)(t);e?.length>0&&n.push(t)}}return n}_throwIfDestroyed(){if(this.hasBeenDestroyed)throw new Error("this.destroy() has been manually called to free up memory, can not longer use this instance. Instead make a new one.")}_setViewportsToBeRenderedNextFrame(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)}_triggerRender(e){const t=(0,c.r$)(e);if(!t?.length)return;const{viewport:n}=(0,a.getEnabledElementByViewportId)(e)||{};if(!n)return;const i=[],o=t.map((e=>{e.type===s.SegmentationRepresentations.Contour&&this._addPlanarFreeHandToolIfAbsent(n);const t=v[e.type];try{const a=t.render(n,e);i.push(a)}catch(e){console.error(e)}return Promise.resolve({segmentationId:e.segmentationId,type:e.type})}));Promise.allSettled(o).then((e=>{const t=e.filter((e=>"fulfilled"===e.status)).map((e=>e.value));n.element.addEventListener(a.Enums.Events.IMAGE_RENDERED,(function e(n){const{element:i,viewportId:o}=n.detail;i.removeEventListener(a.Enums.Events.IMAGE_RENDERED,e),t.forEach((e=>{const t={viewportId:o,segmentationId:e.segmentationId,type:e.type};(0,a.triggerEvent)(a.eventTarget,s.Events.SEGMENTATION_RENDERED,{...t})}))})),n.render()}))}_addPlanarFreeHandToolIfAbsent(e){w in h.wk.tools||(0,m.Gx)(p.A);const t=(0,f.getToolGroupForViewport)(e.id);t.hasTool(w)||(t.addTool(w),t.setToolPassive(w))}};n(17014),n(49492),n(73706),n(13276),n(14514),n(22592),n(58640),n(14957);n(25758),n(98870),n(6802),n(92984),n(59452);n(91963);n(3823),n(4296);const{transformWorldToIndex:I}=a.utilities;const{transformWorldToIndex:A}=a.utilities;n(2397),n(67912),n(30722),n(83075),n(38440),n(21345),n(33283),n(49906),n(93952),n(4714),n(59475);n(12853),n(78773),n(88274);var S=n(28906),y=n(87275);class b{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.oriented=e,this.edgeMap=new Map}initialize(){this.edgeMap.clear()}computeEdgeKey(e,t){return this.oriented||e<t?e*t*.5*(e*t+1)+t:t*e*.5*(t*e+1)+e}insertUniqueEdge(e,t,n){const i=this.computeEdgeKey(e,t);let a=this.edgeMap.get(i);return a||(a={key:i,edgeId:this.edgeMap.size,value:n},this.edgeMap.set(i,a)),a}insertEdge(e,t,n){const i=this.computeEdgeKey(e,t),a={key:i,edgeId:this.edgeMap.size,value:n};return this.edgeMap.set(i,a),a}isInsertedEdge(e,t){const n=this.computeEdgeKey(e,t);return this.edgeMap.get(n)}static getEdgePointIds(e){const t=.5*(-1+Math.sqrt(8*e.key+1)),n=e.key-.5*(t+1)*t;return[n,t-n]}}var E={newInstance:function(){return new b((arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).oriented)}};const x=[[-1,-1,-1,-1,-1],[0,3,-1,-1,-1],[1,0,-1,-1,-1],[1,3,-1,-1,-1],[2,1,-1,-1,-1],[0,3,2,1,-1],[2,0,-1,-1,-1],[2,3,-1,-1,-1],[3,2,-1,-1,-1],[0,2,-1,-1,-1],[1,0,3,2,-1],[1,2,-1,-1,-1],[3,1,-1,-1,-1],[0,1,-1,-1,-1],[3,0,-1,-1,-1],[-1,-1,-1,-1,-1]],R=[[0,1],[1,3],[2,3],[0,2]];var M={getCase:function(e){return x[e]},getEdge:function(e){return R[e]}};const{vtkErrorMacro:P,vtkDebugMacro:D}=S.m;function T(e,t){t.classHierarchy.push("vtkImageMarchingSquares"),e.getContourValues=()=>t.contourValues,e.setContourValues=n=>{t.contourValues=n,e.modified()};const n=[],i=[],a=[],o=E.newInstance();e.getPixelScalars=(e,t,a,o,r,s)=>{const[l,c,d]=e;n[0]=d*t[1]*t[0]+c*t[0]+l,n[1]=n[0]+o[r],n[2]=n[0]+o[s],n[3]=n[2]+o[r];for(let e=0;e<4;++e)i[e]=a[n[e]]},e.getPixelPoints=(e,t,n,i,o)=>{const r=e[i],s=e[o];a[0]=t[i]+r*n[i],a[1]=t[o]+s*n[o],a[2]=a[0]+n[i],a[3]=a[1],a[4]=a[0],a[5]=a[1]+n[o],a[6]=a[2],a[7]=a[5]},e.produceLines=(r,s,l,c,d,u,g,m,h,p,f)=>{const v=s[t.slicingMode],w=[1,2,8,4],I=[];let A;e.getPixelScalars(s,l,u,h,p,f);let S=0;for(let e=0;e<4;e++)i[e]>=r&&(S|=w[e]);const y=M.getCase(S);if(y[0]<0)return;e.getPixelPoints(s,c,d,p,f);const b=c[t.slicingMode]+v*d[t.slicingMode];for(let e=0;y[e]>=0;e+=2){m.push(2);for(let s=0;s<2;s++){const l=M.getEdge(y[e+s]);if(A=void 0,t.mergePoints&&(A=o.isInsertedEdge(n[l[0]],n[l[1]])?.value),void 0===A){const e=(r-i[l[0]])/(i[l[1]]-i[l[0]]),s=a.slice(2*l[0],2*(l[0]+1)),c=a.slice(2*l[1],2*(l[1]+1));I[p]=s[0]+e*(c[0]-s[0]),I[f]=s[1]+e*(c[1]-s[1]),I[t.slicingMode]=b,A=g.length/3,g.push(I[0],I[1],I[2]),t.mergePoints&&o.insertEdge(n[l[0]],n[l[1]],A)}m.push(A)}}},e.requestData=(n,i)=>{const a=n[0];if(!a)return void P("Invalid or missing input");if(null==t.slicingMode||t.slicingMode<0||t.slicingMode>2)return void P("Invalid or missing slicing mode");console.time("msquares");const r=a.getOrigin(),s=a.getSpacing(),l=a.getDimensions(),c=a.getExtent(),d=a.computeIncrements(c),u=a.getPointData().getScalars().getData(),[g,m]=function(){let e=0,n=1;return 1===t.slicingMode?(e=0,n=2):0===t.slicingMode&&(e=1,n=2),[e,n]}(),h=[],p=[];let f=Math.round(t.slice);f>=l[t.slicingMode]&&(f=0);const v=[0,0,0];v[t.slicingMode]=f;for(let n=0;n<t.contourValues.length;++n){for(let i=0;i<l[m]-1;++i){v[m]=i;for(let i=0;i<l[g]-1;++i)v[g]=i,e.produceLines(t.contourValues[n],v,l,r,s,u,h,p,d,g,m)}o.initialize()}const w=y.Ay.newInstance();w.getPoints().setData(new Float32Array(h),3),w.getLines().setData(new Uint32Array(p)),i[0]=w,D("Produced output"),console.timeEnd("msquares")}}const C={contourValues:[],slicingMode:2,slice:0,mergePoints:!1};function L(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,C,n),S.m.obj(e,t),S.m.algo(e,t,1,1),S.m.setGet(e,t,["slicingMode","slice","mergePoints"]),S.m.algo(e,t,1,1),T(e,t)}var _={newInstance:S.m.newInstance(L,"vtkImageMarchingSquares"),extend:L},O=n(42008),V=n(58498),N=n(37546),U=n(46228),k=n(60199),F=n(82594);const{VoxelManager:B}=a.utilities,W={createVoxelManager:(e,t)=>B.createScalarVolumeVoxelManager({dimensions:e,scalarData:t}),createDataStructure:e=>{const{scalarData:t,dimensions:n,spacing:i,origin:a,direction:o}=e;return{voxelManager:W.createVoxelManager(n,t),dimensions:n,spacing:i,origin:a,direction:o,scalarData:t}},createVTKImageData:(e,t,n,i,a)=>{const o=V.Ay.newInstance();if(o.setDimensions(e),o.setOrigin(t),o.setDirection(n),o.setSpacing(i),!a)return o;const r=O.Ay.newInstance({name:"Scalars",numberOfComponents:1,values:a});return o.getPointData().setScalars(r),o},processSegmentStatistics:({segVoxelManager:e,imageVoxelManager:t,indices:n,bounds:i,imageData:a})=>{e.forEach((({value:e,pointIJK:i,pointLPS:a,index:o})=>{if(-1===n.indexOf(e))return;const s=t.getAtIndex(o);r.statsCallback({segmentIndex:e,value:s,pointIJK:i,pointLPS:a})}),{boundsIJK:i||t.getDefaultBounds(),imageData:a})},performMarchingSquares:(e,t=null,n=null)=>{const i={};null!==t&&(i.slice=t),null!==n&&(i.slicingMode=n);const a=_.newInstance(i);return a.setInputData(e),a.setContourValues([1]),a.setMergePoints(!1),a.getOutputData()},createContoursFromPolyData:(e,t=null)=>{const n=(0,N.v)(e);if(n.points?.length){return{contours:(0,U.d1)(n.lines),polyData:n}}return null},createSegmentsFromIndices:e=>[null,...e.map((e=>({segmentIndex:e})))],getArgsFromInfo:e=>{const{segmentationInfo:t,imageInfo:n}=e;return{segmentation:t&&W.createDataStructure(t),image:n&&W.createDataStructure(n)}},calculateSegmentsStatisticsVolume:e=>{const{mode:t,indices:n}=e,{segmentation:i,image:a}=W.getArgsFromInfo(e),{voxelManager:o,spacing:s}=i,{voxelManager:l}=a,c=W.createVTKImageData(i.dimensions,i.origin,i.direction,i.spacing);r.statsInit({storePointData:!1,indices:n,mode:t}),W.processSegmentStatistics({segVoxelManager:o,imageVoxelManager:l,indices:n,imageData:c});return r.getStatistics({spacing:s,unit:"mm",mode:t})},computeMetabolicStats({segmentationInfo:e,imageInfo:t}){const{scalarData:n,dimensions:i,spacing:a,origin:o,direction:r}=e,{spacing:s,dimensions:l,direction:c,origin:d,scalarData:u}=t,g=W.createVoxelManager(e.dimensions,e.scalarData),m=W.createVoxelManager(l,u);let h=0,p=0;const f=g.getScalarDataLength();for(let e=0;e<f;e++)0!==g.getAtIndex(e)&&(h+=m.getAtIndex(e),p++);return{tmtv:.001*p*a[0]*a[1]*a[2],tlg:(p>0?h/p:0)*p*s[0]*s[1]*s[2]*.001}},calculateSegmentsStatisticsStack:e=>{const{segmentationInfo:t,imageInfo:n,indices:i,mode:a}=e;r.statsInit({storePointData:!0,indices:i,mode:a});for(let e=0;e<t.length;e++){const a=t[e],o=n[e],r=[a.dimensions[0],a.dimensions[1],1],s=W.createVoxelManager(r,a.scalarData),l=W.createVoxelManager(r,o.scalarData),c=W.createVTKImageData(r,a.origin,a.direction,a.spacing);W.processSegmentStatistics({segVoxelManager:s,imageVoxelManager:l,indices:i,imageData:c})}const o=t[0].spacing;return r.getStatistics({spacing:o,mode:a})},getSegmentLargestBidirectionalInternal:e=>{const{segmentationInfo:t,imageInfo:n,indices:i,mode:a,isStack:o}=e;let r;return({segmentation:r}=o?W.getArgsFromInfo({segmentationInfo:t[0]}):W.getArgsFromInfo(e)),o?W.calculateBidirectionalStack({segmentationInfo:t,indices:i,mode:a}):W.calculateVolumetricBidirectional({segmentation:r,indices:i,mode:a})},findLargestBidirectionalFromContours:(e,t,n)=>{let i;for(const n of e){const e=(0,k.H)(n,t,i);e&&(i=e)}return i?{segmentIndex:n,majorAxis:i.majorAxis,minorAxis:i.minorAxis,maxMajor:i.maxMajor,maxMinor:i.maxMinor}:null},calculateBidirectionalStack:({segmentationInfo:e,indices:t,mode:n})=>{const i=W.createSegmentsFromIndices(t);let a=[];for(let t=0;t<e.length;t++){const n=e[t],o=n.dimensions,r=n.scalarData,{spacing:s,direction:l,origin:c}=n,d=W.createVoxelManager(o,r),u=o[0]*o[1];for(let e=1;e<i.length;e++){const t=i[e];if(!t)continue;const n=t.segmentIndex;if(W.isSliceEmptyForSegmentVolume(0,r,u,n))continue;const g=[],m=new Uint8Array(r.length);for(let e=0;e<r.length;e++)m[e]=r[e]===n?1:0;const h=O.Ay.newInstance({name:"Pixels",numberOfComponents:1,values:m}),p=W.createVTKImageData(o,c,l,[s[0],s[1],1]);p.getPointData().setScalars(h);try{const e=W.performMarchingSquares(p,null,2),t=W.createContoursFromPolyData(e);t&&g.push(t)}catch(e){console.warn(e)}const f=(0,F.On)({dimensions:o,imageData:p,voxelManager:d,segmentIndex:n}),v=W.findLargestBidirectionalFromContours(g,f,n);v&&a.push(v)}}return a},calculateVolumetricBidirectional:({segmentation:e,indices:t,mode:n})=>{const{voxelManager:i,dimensions:a,origin:o,direction:r,spacing:s}=e,l=W.createVTKImageData(a,o,r,s),c=W.generateContourSetsFromLabelmapVolume({segmentation:e,indices:t,imageData:l,mode:n}),d=[];for(let e=0;e<c.length;e++){const t=c[e],{segmentIndex:n}=t.segment,o=t.sliceContours,r=(0,F.On)({dimensions:a,imageData:l,voxelManager:i,segmentIndex:n}),s=W.findLargestBidirectionalFromContours(o,r,n);s&&d.push(s)}return d},generateContourSetsFromLabelmapVolume:e=>{const{segmentation:t,indices:n}=e,{dimensions:i,scalarData:a,origin:o,direction:r,spacing:s}=t;let l=e.imageData;l||(l=W.createVTKImageData(i,o,r,s));const c=i[2],d=i[0]*i[1],u=W.createSegmentsFromIndices(n);for(let e=0;e<c;e++)for(let t=0;t<i[1];t++){const n=t*i[0]+e*d;a[n]=0,a[n+i[0]-1]=0}const g=[],m=u.length;for(let e=0;e<m;e++){const t=u[e];if(!t)continue;const n=t.segmentIndex,i=[],o=O.Ay.newInstance({name:"Scalars",numberOfComponents:1,size:d*c,dataType:"Uint8Array"});for(let e=0;e<c;e++){if(W.isSliceEmptyForSegmentVolume(e,a,d,n))continue;const t=e*d;try{for(let e=0;e<d;e++){a[e+t]===n?o.setValue(e+t,1):o.setValue(e,0)}const r=V.Ay.newInstance();r.shallowCopy(l),r.getPointData().setScalars(o);const s=W.performMarchingSquares(r,e),c=W.createContoursFromPolyData(s,e);c&&i.push(c)}catch(t){console.warn(e),console.warn(t)}}const r={sliceContours:i,segment:t};g.push(r)}return g},isSliceEmptyForSegmentVolume:(e,t,n,i)=>{const a=e*n,o=a+n;for(let e=a;e<o;e++)if(t[e]===i)return!1;return!0}};(0,i.p)(W)},62612:(e,t,n)=>{n.d(t,{Ay:()=>i});var i={AttributeCopyOperations:{COPYTUPLE:0,INTERPOLATE:1,PASSDATA:2,ALLCOPY:3},AttributeLimitTypes:{MAX:0,EXACT:1,NOLIMIT:2},AttributeTypes:{SCALARS:0,VECTORS:1,NORMALS:2,TCOORDS:3,TENSORS:4,GLOBALIDS:5,PEDIGREEIDS:6,EDGEFLAG:7,NUM_ATTRIBUTES:8},CellGhostTypes:{DUPLICATECELL:1,HIGHCONNECTIVITYCELL:2,LOWCONNECTIVITYCELL:4,REFINEDCELL:8,EXTERIORCELL:16,HIDDENCELL:32},DesiredOutputPrecision:{DEFAULT:0,SINGLE:1,DOUBLE:2},PointGhostTypes:{DUPLICATEPOINT:1,HIDDENPOINT:2},ghostArrayName:"vtkGhostType"}},58498:(e,t,n)=>{n.d(t,{Ay:()=>m});var i=n(28906),a=n(16632),o=n(21734),r=n(69147),s=n(24964),l=n(85278),c=n(3823);const{vtkErrorMacro:d}=i.m;const u={direction:null,indexToWorld:null,worldToIndex:null,spacing:[1,1,1],origin:[0,0,0],extent:[0,-1,0,-1,0,-1],dataDescription:l.e.EMPTY};function g(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,u,n),r.Ay.extend(e,t,n),t.direction?Array.isArray(t.direction)&&(t.direction=new Float64Array(t.direction.slice(0,9))):t.direction=c.w0.identity(new Float64Array(9)),t.indexToWorld=new Float64Array(16),t.worldToIndex=new Float64Array(16),i.m.get(e,t,["indexToWorld","worldToIndex"]),i.m.setGetArray(e,t,["origin","spacing"],3),i.m.setGetArray(e,t,["direction"],9),i.m.getArray(e,t,["extent"],6),function(e,t){t.classHierarchy.push("vtkImageData"),e.setExtent=function(){if(t.deleted)return d("instance deleted - cannot call any method"),!1;for(var n=arguments.length,i=new Array(n),a=0;a<n;a++)i[a]=arguments[a];const o=1===i.length?i[0]:i;if(6!==o.length)return!1;const r=t.extent.some(((e,t)=>e!==o[t]));return r&&(t.extent=o.slice(),t.dataDescription=s.A.getDataDescriptionFromExtent(t.extent),e.modified()),r},e.setDimensions=function(){let n,i,a;if(t.deleted)d("instance deleted - cannot call any method");else{if(1===arguments.length){const e=arguments.length<=0?void 0:arguments[0];n=e[0],i=e[1],a=e[2]}else{if(3!==arguments.length)return void d("Bad dimension specification");n=arguments.length<=0?void 0:arguments[0],i=arguments.length<=1?void 0:arguments[1],a=arguments.length<=2?void 0:arguments[2]}e.setExtent(0,n-1,0,i-1,0,a-1)}},e.getDimensions=()=>[t.extent[1]-t.extent[0]+1,t.extent[3]-t.extent[2]+1,t.extent[5]-t.extent[4]+1],e.getNumberOfCells=()=>{const t=e.getDimensions();let n=1;for(let e=0;e<3;e++){if(0===t[e])return 0;t[e]>1&&(n*=t[e]-1)}return n},e.getNumberOfPoints=()=>{const t=e.getDimensions();return t[0]*t[1]*t[2]},e.getPoint=n=>{const i=e.getDimensions();if(0===i[0]||0===i[1]||0===i[2])return d("Requesting a point from an empty image."),null;const a=new Float64Array(3);switch(t.dataDescription){case l.e.EMPTY:return null;case l.e.SINGLE_POINT:break;case l.e.X_LINE:a[0]=n;break;case l.e.Y_LINE:a[1]=n;break;case l.e.Z_LINE:a[2]=n;break;case l.e.XY_PLANE:a[0]=n%i[0],a[1]=n/i[0];break;case l.e.YZ_PLANE:a[1]=n%i[1],a[2]=n/i[1];break;case l.e.XZ_PLANE:a[0]=n%i[0],a[2]=n/i[0];break;case l.e.XYZ_GRID:a[0]=n%i[0],a[1]=n/i[0]%i[1],a[2]=n/(i[0]*i[1]);break;default:d("Invalid dataDescription")}const o=[0,0,0];return e.indexToWorld(a,o),o},e.getBounds=()=>e.extentToBounds(e.getSpatialExtent()),e.extentToBounds=e=>o.Ay.transformBounds(e,t.indexToWorld),e.getSpatialExtent=()=>o.Ay.inflate([...t.extent],.5),e.computeTransforms=()=>{c.pB.fromTranslation(t.indexToWorld,t.origin),t.indexToWorld[0]=t.direction[0],t.indexToWorld[1]=t.direction[1],t.indexToWorld[2]=t.direction[2],t.indexToWorld[4]=t.direction[3],t.indexToWorld[5]=t.direction[4],t.indexToWorld[6]=t.direction[5],t.indexToWorld[8]=t.direction[6],t.indexToWorld[9]=t.direction[7],t.indexToWorld[10]=t.direction[8],c.pB.scale(t.indexToWorld,t.indexToWorld,t.spacing),c.pB.invert(t.worldToIndex,t.indexToWorld)},e.indexToWorld=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return c.eR.transformMat4(n,e,t.indexToWorld),n},e.indexToWorldVec3=e.indexToWorld,e.worldToIndex=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return c.eR.transformMat4(n,e,t.worldToIndex),n},e.worldToIndexVec3=e.worldToIndex,e.indexToWorldBounds=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return o.Ay.transformBounds(e,t.indexToWorld,n)},e.worldToIndexBounds=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return o.Ay.transformBounds(e,t.worldToIndex,n)},e.onModified(e.computeTransforms),e.computeTransforms(),e.getCenter=()=>o.Ay.getCenter(e.getBounds()),e.computeHistogram=function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const i=[0,0,0,0,0,0];e.worldToIndexBounds(t,i);const r=[0,0,0],s=[0,0,0];o.Ay.computeCornerPoints(i,r,s),(0,a.b)(r,r),(0,a.b)(s,s);const l=e.getDimensions();(0,a.c)(r,[0,0,0],[l[0]-1,l[1]-1,l[2]-1],r),(0,a.c)(s,[0,0,0],[l[0]-1,l[1]-1,l[2]-1],s);const c=l[0],d=l[0]*l[1],u=e.getPointData().getScalars().getData();let g=-1/0,m=1/0,h=0,p=0,f=0;for(let e=r[2];e<=s[2];e++)for(let t=r[1];t<=s[1];t++){let a=r[0]+t*c+e*d;for(let o=r[0];o<=s[0];o++){if(!n||n([o,t,e],i)){const e=u[a];e>g&&(g=e),e<m&&(m=e),h+=e*e,p+=e,f+=1}++a}}const v=f>0?p/f:0,w=f?Math.abs(h/f-v*v):0;return{minimum:m,maximum:g,average:v,variance:w,sigma:Math.sqrt(w),count:f}},e.computeIncrements=function(e){const t=[];let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;for(let i=0;i<3;++i)t[i]=n,n*=e[2*i+1]-e[2*i]+1;return t},e.computeOffsetIndex=t=>{let[n,i,a]=t;const o=e.getExtent(),r=e.getPointData().getScalars().getNumberOfComponents(),s=e.computeIncrements(o,r);return Math.floor((Math.round(n)-o[0])*s[0]+(Math.round(i)-o[2])*s[1]+(Math.round(a)-o[4])*s[2])},e.getOffsetIndexFromWorld=t=>{const n=e.getExtent(),i=e.worldToIndex(t);for(let e=0;e<3;++e)if(i[e]<n[2*e]||i[e]>n[2*e+1])return d(`GetScalarPointer: Pixel ${i} is not in memory. Current extent = ${n}`),NaN;return e.computeOffsetIndex(i)},e.getScalarValueFromWorld=function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const i=e.getPointData().getScalars().getNumberOfComponents();if(n<0||n>=i)return d(`GetScalarPointer: Scalar Component ${n} is not within bounds. Current Scalar numberOfComponents: ${i}`),NaN;const a=e.getOffsetIndexFromWorld(t);return Number.isNaN(a)?a:e.getPointData().getScalars().getComponent(a,n)}}(e,t)}var m={newInstance:i.m.newInstance(g,"vtkImageData"),extend:g}},9175:(e,t,n)=>{n.r(t),n.d(t,{add:()=>d,angle:()=>F,bezier:()=>C,ceil:()=>h,clone:()=>o,copy:()=>l,create:()=>a,cross:()=>P,dist:()=>K,distance:()=>S,div:()=>z,divide:()=>m,dot:()=>M,equals:()=>q,exactEquals:()=>j,floor:()=>p,forEach:()=>X,fromValues:()=>s,hermite:()=>T,inverse:()=>x,len:()=>Y,length:()=>r,lerp:()=>D,max:()=>v,min:()=>f,mul:()=>$,multiply:()=>g,negate:()=>E,normalize:()=>R,random:()=>L,rotateX:()=>N,rotateY:()=>U,rotateZ:()=>k,round:()=>w,scale:()=>I,scaleAndAdd:()=>A,set:()=>c,sqrDist:()=>Z,sqrLen:()=>J,squaredDistance:()=>y,squaredLength:()=>b,str:()=>W,sub:()=>H,subtract:()=>u,transformMat3:()=>O,transformMat4:()=>_,transformQuat:()=>V,zero:()=>B});var i=n(24457);function a(){var e=new i.ARRAY_TYPE(3);return i.ARRAY_TYPE!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function o(e){var t=new i.ARRAY_TYPE(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function r(e){var t=e[0],n=e[1],i=e[2];return Math.hypot(t,n,i)}function s(e,t,n){var a=new i.ARRAY_TYPE(3);return a[0]=e,a[1]=t,a[2]=n,a}function l(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function c(e,t,n,i){return e[0]=t,e[1]=n,e[2]=i,e}function d(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e}function u(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}function g(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e}function m(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e}function h(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function p(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function f(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e}function v(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e}function w(e,t){return e[0]=Math.round(t[0]),e[1]=Math.round(t[1]),e[2]=Math.round(t[2]),e}function I(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e}function A(e,t,n,i){return e[0]=t[0]+n[0]*i,e[1]=t[1]+n[1]*i,e[2]=t[2]+n[2]*i,e}function S(e,t){var n=t[0]-e[0],i=t[1]-e[1],a=t[2]-e[2];return Math.hypot(n,i,a)}function y(e,t){var n=t[0]-e[0],i=t[1]-e[1],a=t[2]-e[2];return n*n+i*i+a*a}function b(e){var t=e[0],n=e[1],i=e[2];return t*t+n*n+i*i}function E(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function x(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function R(e,t){var n=t[0],i=t[1],a=t[2],o=n*n+i*i+a*a;return o>0&&(o=1/Math.sqrt(o)),e[0]=t[0]*o,e[1]=t[1]*o,e[2]=t[2]*o,e}function M(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function P(e,t,n){var i=t[0],a=t[1],o=t[2],r=n[0],s=n[1],l=n[2];return e[0]=a*l-o*s,e[1]=o*r-i*l,e[2]=i*s-a*r,e}function D(e,t,n,i){var a=t[0],o=t[1],r=t[2];return e[0]=a+i*(n[0]-a),e[1]=o+i*(n[1]-o),e[2]=r+i*(n[2]-r),e}function T(e,t,n,i,a,o){var r=o*o,s=r*(2*o-3)+1,l=r*(o-2)+o,c=r*(o-1),d=r*(3-2*o);return e[0]=t[0]*s+n[0]*l+i[0]*c+a[0]*d,e[1]=t[1]*s+n[1]*l+i[1]*c+a[1]*d,e[2]=t[2]*s+n[2]*l+i[2]*c+a[2]*d,e}function C(e,t,n,i,a,o){var r=1-o,s=r*r,l=o*o,c=s*r,d=3*o*s,u=3*l*r,g=l*o;return e[0]=t[0]*c+n[0]*d+i[0]*u+a[0]*g,e[1]=t[1]*c+n[1]*d+i[1]*u+a[1]*g,e[2]=t[2]*c+n[2]*d+i[2]*u+a[2]*g,e}function L(e,t){t=t||1;var n=2*i.RANDOM()*Math.PI,a=2*i.RANDOM()-1,o=Math.sqrt(1-a*a)*t;return e[0]=Math.cos(n)*o,e[1]=Math.sin(n)*o,e[2]=a*t,e}function _(e,t,n){var i=t[0],a=t[1],o=t[2],r=n[3]*i+n[7]*a+n[11]*o+n[15];return r=r||1,e[0]=(n[0]*i+n[4]*a+n[8]*o+n[12])/r,e[1]=(n[1]*i+n[5]*a+n[9]*o+n[13])/r,e[2]=(n[2]*i+n[6]*a+n[10]*o+n[14])/r,e}function O(e,t,n){var i=t[0],a=t[1],o=t[2];return e[0]=i*n[0]+a*n[3]+o*n[6],e[1]=i*n[1]+a*n[4]+o*n[7],e[2]=i*n[2]+a*n[5]+o*n[8],e}function V(e,t,n){var i=n[0],a=n[1],o=n[2],r=n[3],s=t[0],l=t[1],c=t[2],d=a*c-o*l,u=o*s-i*c,g=i*l-a*s,m=a*g-o*u,h=o*d-i*g,p=i*u-a*d,f=2*r;return d*=f,u*=f,g*=f,m*=2,h*=2,p*=2,e[0]=s+d+m,e[1]=l+u+h,e[2]=c+g+p,e}function N(e,t,n,i){var a=[],o=[];return a[0]=t[0]-n[0],a[1]=t[1]-n[1],a[2]=t[2]-n[2],o[0]=a[0],o[1]=a[1]*Math.cos(i)-a[2]*Math.sin(i),o[2]=a[1]*Math.sin(i)+a[2]*Math.cos(i),e[0]=o[0]+n[0],e[1]=o[1]+n[1],e[2]=o[2]+n[2],e}function U(e,t,n,i){var a=[],o=[];return a[0]=t[0]-n[0],a[1]=t[1]-n[1],a[2]=t[2]-n[2],o[0]=a[2]*Math.sin(i)+a[0]*Math.cos(i),o[1]=a[1],o[2]=a[2]*Math.cos(i)-a[0]*Math.sin(i),e[0]=o[0]+n[0],e[1]=o[1]+n[1],e[2]=o[2]+n[2],e}function k(e,t,n,i){var a=[],o=[];return a[0]=t[0]-n[0],a[1]=t[1]-n[1],a[2]=t[2]-n[2],o[0]=a[0]*Math.cos(i)-a[1]*Math.sin(i),o[1]=a[0]*Math.sin(i)+a[1]*Math.cos(i),o[2]=a[2],e[0]=o[0]+n[0],e[1]=o[1]+n[1],e[2]=o[2]+n[2],e}function F(e,t){var n=e[0],i=e[1],a=e[2],o=t[0],r=t[1],s=t[2],l=Math.sqrt(n*n+i*i+a*a)*Math.sqrt(o*o+r*r+s*s),c=l&&M(e,t)/l;return Math.acos(Math.min(Math.max(c,-1),1))}function B(e){return e[0]=0,e[1]=0,e[2]=0,e}function W(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function j(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function q(e,t){var n=e[0],a=e[1],o=e[2],r=t[0],s=t[1],l=t[2];return Math.abs(n-r)<=i.EPSILON*Math.max(1,Math.abs(n),Math.abs(r))&&Math.abs(a-s)<=i.EPSILON*Math.max(1,Math.abs(a),Math.abs(s))&&Math.abs(o-l)<=i.EPSILON*Math.max(1,Math.abs(o),Math.abs(l))}var G,H=u,$=g,z=m,K=S,Z=y,Y=r,J=b,X=(G=a(),function(e,t,n,i,a,o){var r,s;for(t||(t=3),n||(n=0),s=i?Math.min(i*t+n,e.length):e.length,r=n;r<s;r+=t)G[0]=e[r],G[1]=e[r+1],G[2]=e[r+2],a(G,G,o),e[r]=G[0],e[r+1]=G[1],e[r+2]=G[2];return e})},44779:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(43183);function a(){return(0,i.A)(arguments)}},20919:(e,t,n)=>{function i(e,t){for(var n=new Array(t),i=0;i<t;++i)n[i]=e(i/(t-1));return n}n.d(t,{A:()=>i})}}]);
//# sourceMappingURL=2860.bundle.a616715da249a07ed1ef.js.map