UNPKG

dicomweb-proxy

Version:

A proxy to translate between dicomweb and dimse

1 lines 156 kB
"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.get