modified-dicom-pacs
Version:
A modified version of DICOM PACS implementation
2 lines • 146 kB
JavaScript
/*! For license information please see 164.bundle.ab28621e569cd0e68db4.js.LICENSE.txt */
"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([[164,473],{25271:(e,t,n)=>{n.d(t,{A:()=>o});const o=async function(e,t,n,o=!1,r=!1){for(const t of n){const n=e.getViewport(t);if(!n)throw new Error(`Viewport with Id ${t} does not exist`);if(!n.addImages)return void console.warn(`Viewport with Id ${t} does not have addImages. Cannot add image segmentation to this viewport.`)}const i=n.map((async n=>e.getViewport(n).addImages(t,o,r)));await Promise.all(i)}},74260:(e,t,n)=>{n.d(t,{A:()=>r});var o=n(6203);const r=async function(e,t,n,r=!1,i=!1){for(const t of n){const n=e.getViewport(t);if(!n)throw new Error(`Viewport with Id ${t} does not exist`);if(!(n instanceof o.A))return void console.warn(`Viewport with Id ${t} is not a BaseVolumeViewport. Cannot add volume to this viewport.`)}const a=n.map((async n=>{const o=e.getViewport(n);await o.addVolumes(t,r,i)}));await Promise.all(a)}},78988:(e,t,n)=>{n.d(t,{A:()=>s});const o=Symbol("DefaultSettings"),r=Symbol("RuntimeSettings"),i=Symbol("ObjectSettingsMap"),a=Symbol("Dictionary");class s{constructor(e){const t=Object.create(e instanceof s&&a in e?e[a]:null);Object.seal(Object.defineProperty(this,a,{value:t}))}set(e,t){return c(this[a],e,t,null)}get(e){return function(e,t){return e[t]}(this[a],e)}unset(e){return function(e,t){if(t.endsWith(".")){let n=0;const o=t,r=o.slice(0,-1),i=0===r.length;for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(i||t.startsWith(o)||t===r)&&(delete e[t],++n);return n>0}return delete e[t]}(this[a],e+"")}forEach(e){l(this[a],e)}extend(){return new s(this)}import(e){u(e)&&Object.keys(e).forEach((t=>{c(this[a],t,e[t],null)}))}dump(){const e={};return l(this[a],((t,n)=>{void 0!==n&&d(e,t,n)})),e}static assert(e){return e instanceof s?e:s.getRuntimeSettings()}static getDefaultSettings(e=null){let t=s[o];if(t instanceof s||(t=new s,s[o]=t),e){const n={};return t.forEach((o=>{if(o.startsWith(e)){const r=o.split(`${e}.`)[1];n[r]=t.get(o)}})),n}return t}static getRuntimeSettings(){let e=s[r];return e instanceof s||(e=new s(s.getDefaultSettings()),s[r]=e),e}static getObjectSettings(e,t){let n=null;if(e instanceof s)n=e;else if("object"==typeof e&&null!==e){let o=s[i];o instanceof WeakMap||(o=new WeakMap,s[i]=o),n=o.get(e),n instanceof s||(n=new s(s.assert(s.getObjectSettings(t))),o.set(e,n))}return n}static extendRuntimeSettings(){return s.getRuntimeSettings().extend()}}function l(e,t){for(const n in e)t(n,e[n])}function c(e,t,n,o){return!!function(e){let t,n,o;if("string"!=typeof e||(t=e.length-1)<0)return!1;o=-1;for(;(n=e.indexOf(".",o+1))>=0;){if(n-o<2||n===t)return!1;o=n}return!0}(t)&&(u(n)?function(e,t,n,o){let r;if(o.has(n))return c(e,t,null,o);o.add(n),r=0;for(const i in n)Object.prototype.hasOwnProperty.call(n,i)&&(c(e,0===i.length?t:`${t}.${i}`,n[i],o)||++r);return o.delete(n),0===r}(e,t,n,o instanceof WeakSet?o:new WeakSet):(e[t]=n,!0))}function u(e){if("object"==typeof e&&null!==e){const t=Object.getPrototypeOf(e);if(t===Object.prototype||null===t)return!0}return!1}function d(e,t,n){const o=t.indexOf(".");if(o>=0){const r=t.slice(0,o);let i=e[r];if("object"!=typeof i||null===i){const t=i;i={},void 0!==t&&(i[""]=t),e[r]=i}d(i,t.slice(o+1,t.length),n)}else e[t]=n}s.getDefaultSettings().set("useCursors",!0)},88903:(e,t,n)=>{n.d(t,{EPSILON:()=>i,MPR_CAMERA_VALUES:()=>a.A,RENDERING_DEFAULTS:()=>r,VIEWPORT_PRESETS:()=>s.A});n(21301);const o={MINIMUM_SLAB_THICKNESS:.05,MAXIMUM_RAY_DISTANCE:1e6};Object.freeze(o);const r=o,i=.001;var a=n(99753),s=n(59845);n(61507)},15453:(e,t,n)=>{var o;n.d(t,{A:()=>r}),function(e){e.Interaction="interaction",e.Thumbnail="thumbnail",e.Prefetch="prefetch",e.Compute="compute"}(o||(o={}));const r=o},17702:(e,t,n)=>{var o;n.d(t,{A:()=>r}),function(e){e.NO_DATA="noData",e.LOADING="loading",e.PRE_RENDER="preRender",e.RESIZE="resize",e.RENDERED="rendered"}(o||(o={}));const r=o},50002:(e,t,n)=>{n.d(t,{BlendModes:()=>u,CalibrationTypes:()=>I,ContourType:()=>p,Events:()=>o.A,GeometryType:()=>f,ImageQualityStatus:()=>E.A,InterpolationType:()=>a.A,MetadataModules:()=>S.A,OrientationAxis:()=>g.A,RequestType:()=>r.A,SharedArrayBufferModes:()=>h.A,VOILUTFunctionType:()=>w.A,VideoEnums:()=>T,ViewportStatus:()=>A.A,ViewportType:()=>i.A});var o=n(11731),r=n(15453),i=n(21432),a=n(67342),s=n(16265);const{BlendMode:l}=s.Ay;var c;!function(e){e[e.COMPOSITE=0]="COMPOSITE",e[e.MAXIMUM_INTENSITY_BLEND=1]="MAXIMUM_INTENSITY_BLEND",e[e.MINIMUM_INTENSITY_BLEND=2]="MINIMUM_INTENSITY_BLEND",e[e.AVERAGE_INTENSITY_BLEND=3]="AVERAGE_INTENSITY_BLEND"}(c||(c={}));const u=c;var d,g=n(45919),h=n(38698);!function(e){e.CONTOUR="contour",e.SURFACE="Surface"}(d||(d={}));const f=d;var m;!function(e){e.CLOSED_PLANAR="CLOSED_PLANAR",e.OPEN_PLANAR="OPEN_PLANAR"}(m||(m={}));const p=m;var v,w=n(15381);!function(e){e.SUM="SUM",e.AVERAGE="AVERAGE",e.SUBTRACT="SUBTRACT"}(v||(v={}));var y;!function(e){e.NOT_APPLICABLE="",e.ERMF="ERMF",e.USER="User",e.PROJECTION="Proj",e.REGION="Region",e.ERROR="Error",e.UNCALIBRATED="Uncalibrated"}(y||(y={}));const I=y;var A=n(17702),E=n(89426),T=n(49465),S=n(29354)},29870:(e,t,n)=>{n.d(t,{Ay:()=>r,b1:()=>i,yj:()=>a,zb:()=>s});var o=n(49184);function r(e){if(!e)return;const{viewportUid:t,renderingEngineUid:n}=e.dataset;return i(t,n)}function i(e,t){if(!t||!e)return;const n=(0,o.Ay)(t);if(!n||n.hasBeenDestroyed)return;const r=n.getViewport(e);if(!r)return;const i=r.getFrameOfReferenceUID();return{viewport:r,renderingEngine:n,viewportId:e,renderingEngineId:t,FrameOfReferenceUID:i}}function a(e){const t=(0,o.qO)();for(let n=0;n<t.length;n++){const o=t[n];if(o.getViewport(e))return i(e,o.id)}}function s(){const e=[];return(0,o.qO)().forEach((t=>{t.getViewports().forEach((({element:t})=>{e.push(r(t))}))})),e}},79220:(e,t,n)=>{n.r(t),n.d(t,{cancelLoadAll:()=>E,cancelLoadImage:()=>I,cancelLoadImages:()=>A,createAndCacheDerivedImage:()=>v,createAndCacheDerivedImages:()=>w,createAndCacheDerivedSegmentationImage:()=>D,createAndCacheDerivedSegmentationImages:()=>b,createAndCacheLocalImage:()=>y,loadAndCacheImage:()=>m,loadAndCacheImages:()=>p,loadImage:()=>f,registerImageLoader:()=>T,registerUnknownImageLoader:()=>S,unregisterAllImageLoaders:()=>x});var o=n(25534),r=n(13320),i=n(11731),a=n(51884),s=n(35678),l=n(775),c=n(92136);const u={};let d;function g(e,t){const n=e.indexOf(":"),o=e.substring(0,n),r=u[o];if(null==r){if(void 0!==d)return d(e);throw new Error("loadImageFromImageLoader: no image loader for imageId")}const l=r(e,t);return l.promise.then((function(e){(0,s.triggerEvent)(a.A,i.A.IMAGE_LOADED,{image:e})}),(function(t){const n={imageId:e,error:t};(0,s.triggerEvent)(a.A,i.A.IMAGE_LOAD_FAILED,n)})),l}function h(e,t){if(t.ignoreCache)return g(e,t);let n=o.A.getImageLoadObject(e);if(void 0!==n)return n;const i=o.A.getVolumeContainingImageId(e);if(i?.volume?.loadStatus?.loaded){const{volume:t,imageIdIndex:o}=i;return t instanceof r.QV&&(n=t.convertToCornerstoneImage(e,o)),n}const a=o.A.getCachedImageBasedOnImageURI(e);return a?(n=a.imageLoadObject,n):(n=g(e,t),n)}function f(e,t={priority:0,requestType:"prefetch"}){if(void 0===e)throw new Error("loadImage: parameter imageId must not be undefined");return h(e,t).promise}function m(e,t={priority:0,requestType:"prefetch"}){if(void 0===e)throw new Error("loadAndCacheImage: parameter imageId must not be undefined");const n=h(e,t);return o.A.getImageLoadObject(e)||o.A.putImageLoadObject(e,n).catch((e=>{console.warn(e)})),n.promise}function p(e,t={priority:0,requestType:"prefetch"}){if(!e||0===e.length)throw new Error("loadAndCacheImages: parameter imageIds must be list of image Ids");return e.map((e=>m(e,t)))}function v(e,t={},n=!1){if(void 0===e)throw new Error("createAndCacheDerivedImage: parameter imageId must not be undefined");void 0===t.imageId&&(t.imageId=`derived:${(0,s.uuidv4)()}`);const{imageId:r,skipCreateBuffer:i,onCacheAdd:a}=t,l=c.metaData.get("imagePlaneModule",e),u=l.rows*l.columns,{TypedArrayConstructor:d}=(0,s.getBufferConfiguration)(t.targetBufferType,u),g=new d(i?1:u),h=r;["imagePixelModule","imagePlaneModule","generalSeriesModule"].forEach((t=>{s.genericMetadataProvider.add(h,{type:t,metadata:c.metaData.get(t,e)})}));const f=y({scalarData:g,onCacheAdd:a,skipCreateBuffer:i},r,!0),m={promise:Promise.resolve(f)};return n||o.A.putImageLoadObject(h,m),m.promise}function w(e,t={}){if(0===e?.length)throw new Error("createAndCacheDerivedImages: parameter imageIds must be list of image Ids");const n=[],o=e.map((e=>{const o={imageId:t.getDerivedImageId?.(e)||`derived:${(0,s.uuidv4)()}`,...t};return n.push(o.imageId),v(e,o)}));return{imageIds:n,promises:o}}function y(e,t,n=!1){const r=c.metaData.get("imagePlaneModule",t),i=r.rows*r.columns,a={imageId:t,intercept:0,windowCenter:0,windowWidth:0,color:!1,numComps:1,slope:1,minPixelValue:0,maxPixelValue:255,voiLUTFunction:void 0,rows:r.rows,columns:r.columns,getCanvas:void 0,height:r.rows,width:r.columns,rgba:void 0,columnPixelSpacing:r.columnPixelSpacing,rowPixelSpacing:r.rowPixelSpacing,invert:!1};if(e.scalarData){const t=e.scalarData;if(!(t instanceof Uint8Array||t instanceof Float32Array||t instanceof Uint16Array||t instanceof Int16Array))throw new Error("To use createLocalVolume you should pass scalarData of type Uint8Array, Uint16Array, Int16Array or Float32Array");a.sizeInBytes=t.byteLength,a.getPixelData=()=>t}else if(!0!==e.skipCreateBuffer){const{numBytes:t,TypedArrayConstructor:n}=(0,s.getBufferConfiguration)(e.targetBufferType,i),o=new n(i);a.sizeInBytes=t,a.getPixelData=()=>o}e.onCacheAdd?.(a);const l={promise:Promise.resolve(a)};return n||o.A.putImageLoadObject(a.imageId,l),a}function I(e){l.A.filterRequests((({additionalDetails:t})=>!t.imageId||t.imageId!==e));const t=o.A.getImageLoadObject(e);t&&t.cancelFn()}function A(e){e.forEach((e=>I(e)))}function E(){const e=l.A.getRequestPool();Object.keys(e).forEach((t=>{const n=e[t];Object.keys(n).forEach((e=>{const t=n[e].pop().additionalDetails,{imageId:r,volumeId:i}=t;let a;r?a=o.A.getImageLoadObject(r):i&&(a=o.A.getVolumeLoadObject(i)),a&&a.cancel()})),l.A.clearRequestStack(t)}))}function T(e,t){u[e]=t}function S(e){const t=d;return d=e,t}function x(){Object.keys(u).forEach((e=>delete u[e])),d=void 0}function b(e,t={targetBufferType:"Uint8Array"}){return w(e,t)}function D(e,t={targetBufferType:"Uint8Array"}){return v(e,t)}},82041:(e,t,n)=>{n.r(t),n.d(t,{createAndCacheDerivedSegmentationVolume:()=>C,createAndCacheDerivedVolume:()=>A,createAndCacheVolume:()=>I,createAndCacheVolumeFromImages:()=>T,createLocalSegmentationVolume:()=>P,createLocalVolume:()=>E,getUnknownVolumeLoaderSchema:()=>D,getVolumeLoaderSchemes:()=>x,loadVolume:()=>y,registerUnknownVolumeLoader:()=>b,registerVolumeLoader:()=>S});n(3622);var o=n(51250),r=n(45128),i=n(77076),a=n(25534),s=n(11731),l=n(51884),c=n(13292),u=n(48463),d=n.n(u),g=n(35678),h=n(71702),f=n(51631);function m(e){const{dimensions:t,metadata:n,spacing:i,direction:a,origin:s}=e,{PhotometricInterpretation:l}=n;let c=1;"RGB"===l&&(c=3);const u=o.Ay.newInstance(),d={numberOfComponents:c};if(u.setDimensions(t),u.setSpacing(i),u.setDirection(a),u.setOrigin(s),e.isDynamicVolume()){!function(e,t,n){t.forEach(((t,o)=>{const i=r.Ay.newInstance({name:`timePoint-${o}`,values:t,...n});e.getPointData().addArray(i)})),e.getPointData().setActiveScalars("timePoint-0")}(u,e.getScalarDataArrays(),d)}else{!function(e,t,n){const o=r.Ay.newInstance({name:"Pixels",values:t,...n});e.getPointData().setScalars(o)}(u,e.getScalarData(),d)}return u}const p={};let v;function w(e,t){const n=e.indexOf(":"),o=e.substring(0,n);let r=p[o];if(null==r){if(null==v||"function"!=typeof v)throw new Error(`No volume loader for scheme ${o} has been registered`);r=v}const i=r(e,t);return(0,f.setupCacheOptimizationEventListener)(e),i.promise.then((function(e){(0,c.A)(l.A,s.A.VOLUME_LOADED,{volume:e})}),(function(t){const n={volumeId:e,error:t};(0,c.A)(l.A,s.A.VOLUME_LOADED_FAILED,n)})),i}function y(e,t={imageIds:[]}){if(void 0===e)throw new Error("loadVolume: parameter volumeId must not be undefined");let n=a.A.getVolumeLoadObject(e);return void 0!==n?n.promise:(n=w(e,t),n.promise.then((e=>(e.imageData=m(e),e))))}async function I(e,t){if(void 0===e)throw new Error("createAndCacheVolume: parameter volumeId must not be undefined");let n=a.A.getVolumeLoadObject(e);return void 0!==n||(n=w(e,t),n.promise.then((e=>{e.imageData=m(e)})),a.A.putVolumeLoadObject(e,n).catch((e=>{throw e}))),n.promise}async function A(e,t){const n=a.A.getVolume(e);if(!n)throw new Error(`Cannot created derived volume: Referenced volume with id ${e} does not exist.`);let{volumeId:s}=t;const{targetBuffer:l}=t;void 0===s&&(s=(0,g.uuidv4)());const{metadata:c,dimensions:u,spacing:h,origin:f,direction:m}=n,p=n.getScalarData().length,{volumeScalarData:v,numBytes:w}=_(l,p),y=r.Ay.newInstance({name:"Pixels",numberOfComponents:1,values:v}),I=o.Ay.newInstance();I.setDimensions(u),I.setSpacing(h),I.setDirection(m),I.setOrigin(f),I.getPointData().setScalars(y);const A=new i.Q({volumeId:s,metadata:d()(c),dimensions:[u[0],u[1],u[2]],spacing:h,origin:f,direction:m,imageData:I,scalarData:v,sizeInBytes:w,imageIds:[],referencedVolumeId:e}),E={promise:Promise.resolve(A)};return await a.A.putVolumeLoadObject(s,E),A}function E(e,t,n=!1){const{metadata:l,dimensions:c,spacing:u,origin:h,direction:f,targetBuffer:m}=e;let{scalarData:p}=e;const v=["Uint8Array","Float32Array","Uint16Array","Int16Array"],w=c[0]*c[1]*c[2];if(!p||!v.includes(p.constructor.name)){if(!m?.type||!v.includes(m.type))throw new Error("createLocalVolume: parameter scalarData must be provided and must be either Uint8Array, Float32Array, Uint16Array or Int16Array");({volumeScalarData:p}=_(m,w))}void 0===t&&(t=(0,g.uuidv4)());const y=a.A.getVolume(t);if(y)return y;const I=p?p.buffer.byteLength:4*w;if(!a.A.isCacheable(I))throw new Error(s.A.CACHE_SIZE_EXCEEDED);const A=r.Ay.newInstance({name:"Pixels",numberOfComponents:1,values:p}),E=o.Ay.newInstance();E.setDimensions(c),E.setSpacing(u),E.setDirection(f),E.setOrigin(h),E.getPointData().setScalars(A);const T=new i.Q({volumeId:t,metadata:d()(l),dimensions:[c[0],c[1],c[2]],spacing:u,origin:h,direction:f,imageData:E,scalarData:p,sizeInBytes:I,referencedImageIds:e.referencedImageIds||[],referencedVolumeId:e.referencedVolumeId,imageIds:e.imageIds||[]});if(n)return T;const S={promise:Promise.resolve(T)};return a.A.putVolumeLoadObject(t,S),T}async function T(e,t,n={}){const{preventCache:o=!1}=n;if(void 0===t)throw new Error("createAndCacheVolumeFromImages: parameter imageIds must not be undefined");if(void 0===e)throw new Error("createAndCacheVolumeFromImages: parameter volumeId must not be undefined");const r=a.A.getVolume(e);if(r)return Promise.resolve(r);const s=(0,g.generateVolumePropsFromImageIds)(t,e),l=s.imageIds.map(((e,t)=>a.A.getImageLoadObject(e).promise.then((e=>{const n=e.getPixelData(),o=t*e.rows*e.columns;s.scalarData.set(n,o)}))));await Promise.all(l);const c=new i.Q({...s,referencedImageIds:t,...n});(0,f.performCacheOptimizationForVolume)(c);const u={promise:Promise.resolve(c)};return o||a.A.putVolumeLoadObject(e,u),u.promise}function S(e,t){p[e]=t}function x(){return Object.keys(p)}function b(e){const t=v;return v=e,t}function D(){return v.name}async function C(e,t={}){return A(e,{...t,targetBuffer:{type:"Uint8Array"}})}async function P(e,t,n=!1){return e.scalarData||(e.scalarData=new Uint8Array(e.dimensions[0]*e.dimensions[1]*e.dimensions[2])),E(e,t,n)}function _(e,t){const{useNorm16Texture:n}=(0,h.D0)().rendering,{TypedArrayConstructor:o,numBytes:r}=(0,g.getBufferConfiguration)(e?.type,t,{use16BitTexture:n,isVolumeBuffer:!0});if(!a.A.isCacheable(r))throw new Error(s.A.CACHE_SIZE_EXCEEDED);let i;if(e?.sharedArrayBuffer){i=new o(new SharedArrayBuffer(r))}else i=new o(t);return{volumeScalarData:i,numBytes:r}}},55692:(e,t,n)=>{n.r(t),n.d(t,{addProvider:()=>r,get:()=>s,removeAllProviders:()=>a,removeProvider:()=>i});const o=[];function r(e,t=0){let n;for(n=0;n<o.length&&!(o[n].priority<=t);n++);o.splice(n,0,{priority:t,provider:e})}function i(e){for(let t=0;t<o.length;t++)if(o[t].provider===e){o.splice(t,1);break}}function a(){for(;o.length>0;)o.pop()}function s(e,...t){for(let n=0;n<o.length;n++){const r=o[n].provider(e,...t);if(void 0!==r)return r}}},775:(e,t,n)=>{n.d(t,{A:()=>a});var o=n(79927),r=n(15453);const i=new o.R("imageLoadPool");i.grabDelay=0,i.setMaxSimultaneousRequests(r.A.Interaction,1e3),i.setMaxSimultaneousRequests(r.A.Thumbnail,1e3),i.setMaxSimultaneousRequests(r.A.Prefetch,1e3);const a=i},79927:(e,t,n)=>{n.d(t,{R:()=>i});var o=n(15453),r=n(35678);class i{constructor(e){this.numRequests={interaction:0,thumbnail:0,prefetch:0,compute:0},this.id=e||(0,r.uuidv4)(),this.requestPool={interaction:{0:[]},thumbnail:{0:[]},prefetch:{0:[]},compute:{0:[]}},this.grabDelay=5,this.awake=!1,this.numRequests={interaction:0,thumbnail:0,prefetch:0,compute:0},this.maxNumRequests={interaction:6,thumbnail:6,prefetch:5,compute:1e3}}setMaxSimultaneousRequests(e,t){this.maxNumRequests[e]=t}getMaxSimultaneousRequests(e){return this.maxNumRequests[e]}destroy(){this.timeoutHandle&&window.clearTimeout(this.timeoutHandle)}addRequest(e,t,n,o=0){const r={requestFn:e,type:t,additionalDetails:n};void 0===this.requestPool[t][o]&&(this.requestPool[t][o]=[]),this.requestPool[t][o].push(r),this.startGrabbing()}filterRequests(e){Object.keys(this.requestPool).forEach((t=>{const n=this.requestPool[t];Object.keys(n).forEach((t=>{n[t]=n[t].filter((t=>e(t)))}))}))}clearRequestStack(e){if(!this.requestPool[e])throw new Error(`No category for the type ${e} found`);this.requestPool[e]={0:[]}}sendRequests(e){const t=this.maxNumRequests[e]-this.numRequests[e];let n=0;for(let o=0;o<t;o++){const t=this.getNextRequest(e);if(null===t)return!1;if(t){let o;this.numRequests[e]++,this.awake=!0;try{o=t.requestFn()}catch(e){console.warn("sendRequest failed",e)}o?.finally?o.finally((()=>{this.numRequests[e]--,this.startAgain()})):(this.numRequests[e]--,n++)}}return n&&this.startAgain(),!0}getNextRequest(e){const t=this.getSortedPriorityGroups(e);for(const n of t)if(this.requestPool[e][n].length)return this.requestPool[e][n].shift();return null}startGrabbing(){const e=this.sendRequests(o.A.Interaction),t=this.sendRequests(o.A.Thumbnail),n=this.sendRequests(o.A.Prefetch),r=this.sendRequests(o.A.Compute);e||t||n||r||(this.awake=!1)}startAgain(){this.awake&&(void 0!==this.grabDelay?this.timeoutHandle||(this.timeoutHandle=window.setTimeout((()=>{this.timeoutHandle=null,this.startGrabbing()}),this.grabDelay)):this.startGrabbing())}getSortedPriorityGroups(e){return Object.keys(this.requestPool[e]).map(Number).filter((t=>this.requestPool[e][t].length)).sort(((e,t)=>e-t))}getRequestPool(){return this.requestPool}}},13292:(e,t,n)=>{n.d(t,{A:()=>r});var o=n(51884);function r(e=o.A,t,n=null){if(!t)throw new Error("Event type was not defined");const r=new CustomEvent(t,{detail:n,cancelable:!0});return e.dispatchEvent(r)}},61874:(e,t,n)=>{n.d(t,{A:()=>a});var o=n(99178),r=n(50002),i=n(79927);const a=class{constructor(){this.workerRegistry={},this.workerPoolManager=new i.R("webworker")}registerWorker(e,t,n={}){const{maxWorkerInstances:r=1,overwrite:i=!1,autoTerminateOnIdle:a={enabled:!1,idleTimeThreshold:3e3}}=n;if(this.workerRegistry[e]&&!i)return void console.warn(`Worker type '${e}' is already registered...`);i&&this.workerRegistry[e]?.idleCheckIntervalId&&clearInterval(this.workerRegistry[e].idleCheckIntervalId);const s={workerFn:null,instances:[],loadCounters:[],lastActiveTime:[],nativeWorkers:[],autoTerminateOnIdle:a.enabled,idleCheckIntervalId:null,idleTimeThreshold:a.idleTimeThreshold};s.loadCounters=Array(r).fill(0),s.lastActiveTime=Array(r).fill(null);for(let e=0;e<r;e++){const e=t();s.instances.push(o.LV(e)),s.nativeWorkers.push(e),s.workerFn=t}this.workerRegistry[e]=s}getNextWorkerAPI(e){const t=this.workerRegistry[e];if(!t)return console.error(`Worker type '${e}' is not registered.`),null;const n=t.instances.filter((e=>null!==e));let r=0,i=t.loadCounters[0]||0;for(let e=1;e<n.length;e++){const n=t.loadCounters[e]||0;n<i&&(r=e,i=n)}if(null===t.instances[r]){const e=t.workerFn();t.instances[r]=o.LV(e),t.nativeWorkers[r]=e}return t.loadCounters[r]+=1,{api:t.instances[r],index:r}}executeTask(e,t,n={},{requestType:i=r.RequestType.Compute,priority:a=0,options:s={},callbacks:l=[]}={}){return new Promise(((r,c)=>{this.workerPoolManager.addRequest((async()=>{const{api:i,index:a}=this.getNextWorkerAPI(e);if(!i){const t=new Error(`No available worker instance for '${e}'`);return console.error(t),void c(t)}try{let s=[];l.length&&(s=l.map((e=>o.BX(e))));const c=this.workerRegistry[e];c.processing=!0;const u=await i[t](n,...s);c.processing=!1,c.lastActiveTime[a]=Date.now(),c.autoTerminateOnIdle&&!c.idleCheckIntervalId&&c.idleTimeThreshold&&(c.idleCheckIntervalId=setInterval((()=>{this.terminateIdleWorkers(e,c.idleTimeThreshold)}),c.idleTimeThreshold)),r(u)}catch(n){console.error(`Error executing method '${t}' on worker '${e}':`,n),c(n)}finally{this.workerRegistry[e].loadCounters[a]--}}),i,s,a)}))}terminateIdleWorkers(e,t){const n=this.workerRegistry[e];if(n.processing)return;const o=Date.now();n.instances.forEach(((r,i)=>{const a=n.lastActiveTime[i];!(null!==a&&n.loadCounters[i]>0)&&o-a>t&&this.terminateWorkerInstance(e,i)}))}terminate(e){const t=this.workerRegistry[e];t?t.instances.forEach(((t,n)=>{this.terminateWorkerInstance(e,n)})):console.error(`Worker type '${e}' is not registered.`)}terminateWorkerInstance(e,t){const n=this.workerRegistry[e],r=n.instances[t];null!==r&&(r[o.A2](),n.nativeWorkers[t].terminate(),n.instances[t]=null,n.lastActiveTime[t]=null)}}},39371:(e,t,n)=>{n.d(t,{segmentation:()=>o});n(35373),n(61738),n(55965),n(42375),n(2746),n(74119),n(32916),n(40969),n(45238);var o=n(63421);n(81848),n(65043),n(84901)},35837:(e,t,n)=>{n.d(t,{getState:()=>o.A});var o=n(70692);n(80456),n(31862)},45238:(e,t,n)=>{n.d(t,{state:()=>o});n(35837),n(48428),n(42351);var o=n(38296);n(21009),n(22581),n(16122)},50720:(e,t,n)=>{var o=n(44753),r=n(92136),i=n(24592),a=n(74119),s=n(96214),l=n(21090),c=n(38296),u=n(48428),d=n(21009),g=n(54177),h=n(2746),f=n(61738),m=n(84901),p=n(90252),v=n(21954),w=n(10910),y=n(40233),I=n(23072);const{transformWorldToIndex:A}=r.utilities;class E extends s.EC{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:T}}){super(e,t),this.isPointNearTool=(e,t,n,o)=>{const i=(0,r.getEnabledElement)(e),{viewport:a}=i,{data:s}=t,{points:l}=s.handles;let c=a.worldToCanvas(l[0]),u=a.worldToCanvas(l[1]),d={start:{x:c[0],y:c[1]},end:{x:u[0],y:u[1]}},g=v.distanceToPoint([d.start.x,d.start.y],[d.end.x,d.end.y],[n[0],n[1]]);return g<=o||(c=a.worldToCanvas(l[2]),u=a.worldToCanvas(l[3]),d={start:{x:c[0],y:c[1]},end:{x:u[0],y:u[1]}},g=v.distanceToPoint([d.start.x,d.start.y],[d.end.x,d.end.y],[n[0],n[1]]),g<=o)},this.toolSelectedCallback=(e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=(0,p.getViewportIdsWithToolToRender)(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(o);const a=(0,r.getEnabledElement)(o),{renderingEngine:s}=a;(0,I.A)(s,i),(0,y.hideElementCursor)(o),e.preventDefault()},this.handleSelectedCallback=(e,t,n)=>{const o=e.detail,{element:i}=o,a=t.data;t.highlighted=!0;let s,l=!1;n.worldPosition?l=!0:s=a.handles.points.findIndex((e=>e===n));const c=(0,p.getViewportIdsWithToolToRender)(i,this.getToolName());(0,y.hideElementCursor)(i),this.editData={annotation:t,viewportIdsToRender:c,handleIndex:s,movingTextBox:l},this._activateModify(i);const u=(0,r.getEnabledElement)(i),{renderingEngine:d}=u;(0,I.A)(d,c),e.preventDefault()},this._endCallback=e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,newAnnotation:s,hasMoved:l}=this.editData,{data:u}=i;if(s&&!l)return;u.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),(0,y.resetElementCursor)(n);const{renderingEngine:d}=(0,r.getEnabledElement)(n);if(void 0!==this.editData.handleIndex){const{points:e}=u.handles,t=o.eR.distance(e[0],e[1]);if(o.eR.distance(e[2],e[3])>t){const t=[[...e[2]],[...e[3]]],n=[...e[0]],r=[...e[1]],i=o.Zc.create();o.Zc.set(i,t[1][0]-t[0][0],t[1][1]-t[1][0]);const a=o.Zc.create();o.Zc.set(a,-i[1],i[0]);const s=o.Zc.create();let l;o.Zc.set(s,r[0]-n[0],r[1]-n[0]),l=o.Zc.dot(s,a)>0?[n,r]:[r,n],u.handles.points=[t[0],t[1],l[0],l[1]]}}this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&(0,c.removeAnnotation)(i.annotationUID),(0,I.A)(d,a),s&&(0,g.dZ)(i),this.editData=null,this.isDrawing=!1},this._dragDrawCallback=e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:i}=t,a=(0,r.getEnabledElement)(i),{renderingEngine:s,viewport:l}=a,{worldToCanvas:c}=l,{annotation:u,viewportIdsToRender:d,handleIndex:g}=this.editData,{data:h}=u,f=n.world;h.handles.points[g]=[...f];const m=h.handles.points.map(c),p={start:{x:m[0][0],y:m[0][1]},end:{x:m[1][0],y:m[1][1]}},v=(m[2][0],m[2][1],m[3][0],m[3][1],o.Zc.distance(m[0],m[1])/3),w=p.start.x-p.end.x,y=p.start.y-p.end.y,A=Math.sqrt(w*w+y*y),E=w/A,T=y/A,S=(p.start.x+p.end.x)/2,x=(p.start.y+p.end.y)/2,b=S+v*T,D=x-v*E,C=S-v*T,P=x+v*E;h.handles.points[2]=l.canvasToWorld([b,D]),h.handles.points[3]=l.canvasToWorld([C,P]),u.invalidated=!0,(0,I.A)(s,d),this.editData.hasMoved=!0},this._dragModifyCallback=e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,o=(0,r.getEnabledElement)(n),{renderingEngine:i}=o,{annotation:a,viewportIdsToRender:s,handleIndex:l,movingTextBox:c}=this.editData,{data:u}=a;if(c){const{deltaPoints:e}=t,n=e.world,{textBox:o}=u.handles,{worldPosition:r}=o;r[0]+=n[0],r[1]+=n[1],r[2]+=n[2],o.hasMoved=!0}else if(void 0===l){const{deltaPoints:e}=t,n=e.world;u.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),a.invalidated=!0}else this._dragModifyHandle(e),a.invalidated=!0;(0,I.A)(i,s)},this._dragModifyHandle=e=>{const t=e.detail,{currentPoints:n,element:i}=t,a=(0,r.getEnabledElement)(i),{viewport:s}=a,{annotation:l,handleIndex:c}=this.editData,{data:u}=l,d=n.world,g=[s.worldToCanvas(u.handles.points[0]),s.worldToCanvas(u.handles.points[1]),s.worldToCanvas(u.handles.points[2]),s.worldToCanvas(u.handles.points[3])],h={start:{x:g[0][0],y:g[0][1]},end:{x:g[1][0],y:g[1][1]}},f={start:{x:g[2][0],y:g[2][1]},end:{x:g[3][0],y:g[3][1]}},m=[...d],p=s.worldToCanvas(m);if(0===c||1===c){const e=g[0===c?1:0],t=o.Zc.set(o.Zc.create(),p[0]-e[0],p[1]-e[1]),n=o.Zc.set(o.Zc.create(),g[c][0]-e[0],g[c][1]-e[1]);o.Zc.normalize(t,t),o.Zc.normalize(n,n);const r={start:{x:e[0],y:e[1]},end:{x:p[0],y:p[1]}};if(this._movingLongAxisWouldPutItThroughShortAxis(r,f))return;const i=e,a=this._getSignedAngle(n,t);let l=g[2][0],d=g[2][1],h=g[3][0],v=g[3][1];l-=i[0],d-=i[1],h-=i[0],v-=i[1];const w=l*Math.cos(a)-d*Math.sin(a),y=l*Math.sin(a)+d*Math.cos(a),I=h*Math.cos(a)-v*Math.sin(a),A=h*Math.sin(a)+v*Math.cos(a);l=w+i[0],d=y+i[1],h=I+i[0],v=A+i[1];const E=s.canvasToWorld([l,d]),T=s.canvasToWorld([h,v]);u.handles.points[c]=m,u.handles.points[2]=E,u.handles.points[3]=T}else{const e=2===c?3:2,t={longLineSegment:{start:h.start,end:h.end},shortLineSegment:{start:f.start,end:f.end}},n=o.Zc.subtract(o.Zc.create(),[t.longLineSegment.end.x,t.longLineSegment.end.y],[t.longLineSegment.start.x,t.longLineSegment.start.y]),r=o.Zc.normalize(o.Zc.create(),n),i=o.Zc.subtract(o.Zc.create(),[p[0],p[1]],[g[c][0],g[c][1]]),a=o.Zc.length(i),l=this._getSignedAngle(r,i),d=Math.cos(l)*a,w=o.Zc.scaleAndAdd(o.Zc.create(),[g[e][0],g[e][1]],r,d);if(this._movingLongAxisWouldPutItThroughShortAxis({start:{x:p[0],y:p[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(!v.intersectLine([p[0],p[1]],[w[0],w[1]],[h.start.x,h.start.y],[h.end.x,h.end.y]))return;u.handles.points[e]=s.canvasToWorld(w),u.handles.points[c]=m}},this.cancel=e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),(0,y.resetElementCursor)(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const{renderingEngine:a}=(0,r.getEnabledElement)(e);return(0,I.A)(a,n),o&&(0,g.dZ)(t),this.editData=null,t.annotationUID}},this._activateDraw=e=>{f.wk.isInteractingWithTool=!0,e.addEventListener(m.Events.MOUSE_UP,this._endCallback),e.addEventListener(m.Events.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(m.Events.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(m.Events.MOUSE_CLICK,this._endCallback),e.addEventListener(m.Events.TOUCH_TAP,this._endCallback),e.addEventListener(m.Events.TOUCH_END,this._endCallback),e.addEventListener(m.Events.TOUCH_DRAG,this._dragDrawCallback)},this._deactivateDraw=e=>{f.wk.isInteractingWithTool=!1,e.removeEventListener(m.Events.MOUSE_UP,this._endCallback),e.removeEventListener(m.Events.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(m.Events.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(m.Events.MOUSE_CLICK,this._endCallback),e.removeEventListener(m.Events.TOUCH_TAP,this._endCallback),e.removeEventListener(m.Events.TOUCH_END,this._endCallback),e.removeEventListener(m.Events.TOUCH_DRAG,this._dragDrawCallback)},this._activateModify=e=>{f.wk.isInteractingWithTool=!0,e.addEventListener(m.Events.MOUSE_UP,this._endCallback),e.addEventListener(m.Events.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(m.Events.MOUSE_CLICK,this._endCallback),e.addEventListener(m.Events.TOUCH_END,this._endCallback),e.addEventListener(m.Events.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(m.Events.TOUCH_TAP,this._endCallback)},this._deactivateModify=e=>{f.wk.isInteractingWithTool=!1,e.removeEventListener(m.Events.MOUSE_UP,this._endCallback),e.removeEventListener(m.Events.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(m.Events.MOUSE_CLICK,this._endCallback),e.removeEventListener(m.Events.TOUCH_END,this._endCallback),e.removeEventListener(m.Events.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(m.Events.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(e,t)=>{let n=!0;const{viewport:o}=e,{element:r}=o;let i=(0,c.getAnnotations)(this.getToolName(),r);if(!i?.length)return n;if(i=this.filterInteractableAnnotationsForElement(r,i),!i?.length)return n;const a=this.getTargetId(o),s=o.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let r=0;r<i.length;r++){const c=i[r],{annotationUID:g,data:f}=c,{points:m,activeHandleIndex:p}=f.handles,v=m.map((e=>o.worldToCanvas(e)));l.annotationUID=g;const{color:y,lineWidth:I,lineDash:A,shadow:E}=this.getAnnotationStyle({annotation:c,styleSpecifier:l});if(f.cachedStats[a]&&null!=f.cachedStats[a].unit?c.invalidated&&this._throttledCalculateCachedStats(c,s,e):(f.cachedStats[a]={length:null,width:null,unit:null},this._calculateCachedStats(c,s,e)),!o.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let T;if(!(0,d.isAnnotationVisible)(g))continue;if((0,u.isAnnotationLocked)(c)||this.editData||null===p||(T=[v[p]]),T){const e="0";(0,h.drawHandles)(t,g,e,T,{color:y})}const S=`${g}-line-1`,x=`${g}-line-2`,b="0";(0,h.drawLine)(t,g,b,v[0],v[1],{color:y,lineDash:A,lineWidth:I,shadow:E},S);const D="1";(0,h.drawLine)(t,g,D,v[2],v[3],{color:y,lineDash:A,lineWidth:I,shadow:E},x),n=!0;const C=this.getLinkedTextBoxStyle(l,c);if(!C.visibility){f.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 P=this.configuration.getTextLines(f,a);if(!P||0===P.length)continue;let _;f.handles.textBox.hasMoved||(_=(0,w.getTextBoxCoordsCanvas)(v),f.handles.textBox.worldPosition=o.canvasToWorld(_));const R=o.worldToCanvas(f.handles.textBox.worldPosition),M="1",O=(0,h.drawLinkedTextBox)(t,g,M,P,R,v,{},C),{x:L,y:k,width:N,height:V}=O;f.handles.textBox.worldBoundingBox={topLeft:o.canvasToWorld([L,k]),topRight:o.canvasToWorld([L+N,k]),bottomLeft:o.canvasToWorld([L,k+V]),bottomRight:o.canvasToWorld([L+N,k+V])}}return n},this._movingLongAxisWouldPutItThroughShortAxis=(e,t)=>{const n=o.Zc.create();o.Zc.set(n,t.end.x-t.start.x,t.end.y-t.start.y),o.Zc.normalize(n,n);const r={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!v.intersectLine([r.start.x,r.start.y],[r.end.x,r.end.y],[e.start.x,e.start.y],[e.end.x,e.end.y])},this._calculateCachedStats=(e,t,n)=>{const{data:o}=e,{element:r}=n.viewport,a=o.handles.points[0],s=o.handles.points[1],l=o.handles.points[2],c=o.handles.points[3],{cachedStats:u}=o,d=Object.keys(u);for(let e=0;e<d.length;e++){const n=d[e],o=this.getTargetIdImage(n,t);if(!o)continue;const{imageData:r,dimensions:g}=o,h=A(r,a),f=A(r,s),m=A(r,l),p=A(r,c),v=[h,f],w=[m,p],{scale:y,units:I}=(0,i.Op)(o,v),{scale:E,units:T}=(0,i.Op)(o,w),S=this._calculateLength(a,s)/y,x=this._calculateLength(l,c)/E,b=S>x?S:x,D=S>x?x:S,C=S>x?I:T,P=S>x?T:I;this._isInsideVolume(h,f,m,p,g)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,u[n]={length:b,width:D,unit:I,lengthUnit:C,widthUnit:P}}return e.invalidated=!1,(0,g.XF)(e,r),u},this._isInsideVolume=(e,t,n,o,i)=>r.utilities.indexWithinDimensions(e,i)&&r.utilities.indexWithinDimensions(t,i)&&r.utilities.indexWithinDimensions(n,i)&&r.utilities.indexWithinDimensions(o,i),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,l.A)(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,r.getEnabledElement)(o),{viewport:s,renderingEngine:l}=a;this.isDrawing=!0;const u=s.getCamera(),{viewPlaneNormal:d,viewUp:g}=u,h=this.getReferencedImageId(s,i,d,g),f=s.getFrameOfReferenceUID(),m={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...g],FrameOfReferenceUID:f,referencedImageId:h},data:{handles:{points:[[...i],[...i],[...i],[...i]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}}};(0,c.addAnnotation)(m,o);const v=(0,p.getViewportIdsWithToolToRender)(o,this.getToolName());return this.editData={annotation:m,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),(0,y.hideElementCursor)(o),e.preventDefault(),(0,I.A)(l,v),m}_calculateLength(e,t){const n=e[0]-t[0],o=e[1]-t[1],r=e[2]-t[2];return Math.sqrt(n*n+o*o+r*r)}}function T(e,t){const{cachedStats:n,label:o}=e,{length:r,width:i,unit:s,lengthUnit:l,widthUnit:c}=n[t],u=[];return o&&u.push(o),void 0===r||u.push(`L: ${(0,a.roundNumber)(r)} ${l||s}`,`W: ${(0,a.roundNumber)(i)} ${c||s}`),u}E.toolName="Bidirectional"},52454:(e,t,n)=>{n.d(t,{A:()=>d});var o=n(92136),r=n(44753),i=n(28062),a=n(48428),s=n(21009),l=n(38296),c=n(54177);class u extends i.A{constructor(e,t){super(e,t),this.mouseMoveCallback=(e,t)=>{if(!t)return!1;const{element:n,currentPoints:o}=e.detail,r=o.canvas;let i=!1;for(const e of t){if((0,a.isAnnotationLocked)(e)||!(0,s.isAnnotationVisible)(e.annotationUID))continue;const{data:t}=e,o=t.handles?t.handles.activeHandleIndex:void 0,l=this._imagePointNearToolOrHandle(n,e,r,6),c=l&&!e.highlighted,u=!l&&e.highlighted;c||u?(e.highlighted=!e.highlighted,i=!0):t.handles&&t.handles.activeHandleIndex!==o&&(i=!0)}return i},e.configuration?.getTextLines&&(this.configuration.getTextLines=e.configuration.getTextLines),e.configuration?.statsCalculator&&(this.configuration.statsCalculator=e.configuration.statsCalculator)}static createAnnotation(...e){let t={annotationUID:null,highlighted:!0,invalidated:!0,metadata:{toolName:this.toolName},data:{text:"",handles:{points:new Array,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:""}};for(const n of e)t=o.utilities.deepMerge(t,n);return t}static createAnnotationForViewport(e,...t){return this.createAnnotation({metadata:e.getViewReference()},...t)}static createAndAddAnnotation(e,...t){const n=this.createAnnotationForViewport(e,...t);(0,l.addAnnotation)(n,e.element),(0,c.XF)(n,e.element)}getHandleNearImagePoint(e,t,n,i){const a=(0,o.getEnabledElement)(e),{viewport:s}=a,{data:l}=t,{isCanvasAnnotation:c}=l,{points:u,textBox:d}=l.handles;if(d){const{worldBoundingBox:e}=d;if(e){const t={topLeft:s.worldToCanvas(e.topLeft),topRight:s.worldToCanvas(e.topRight),bottomLeft:s.worldToCanvas(e.bottomLeft),bottomRight:s.worldToCanvas(e.bottomRight)};if(n[0]>=t.topLeft[0]&&n[0]<=t.bottomRight[0]&&n[1]>=t.topLeft[1]&&n[1]<=t.bottomRight[1])return l.handles.activeHandleIndex=null,d}}for(let e=0;e<u?.length;e++){const t=u[e],o=c?t.slice(0,2):s.worldToCanvas(t);if(!0===r.Zc.distance(n,o)<i)return l.handles.activeHandleIndex=e,t}l.handles.activeHandleIndex=null}getLinkedTextBoxStyle(e,t){return{visibility:this.getStyle("textBoxVisibility",e,t),fontFamily:this.getStyle("textBoxFontFamily",e,t),fontSize:this.getStyle("textBoxFontSize",e,t),color:this.getStyle("textBoxColor",e,t),shadow:this.getStyle("textBoxShadow",e,t),background:this.getStyle("textBoxBackground",e,t),lineWidth:this.getStyle("textBoxLinkLineWidth",e,t),lineDash:this.getStyle("textBoxLinkLineDash",e,t)}}isSuvScaled(e,t,n){if(e instanceof o.BaseVolumeViewport){const e=o.utilities.getVolumeId(t),n=o.cache.getVolume(e);return void 0!==n.scaling?.PT}const r=n&&o.metaData.get("scalingModule",n);return"number"==typeof r?.suvbw}getAnnotationStyle(e){const{annotation:t,styleSpecifier:n}=e,o=e=>this.getStyle(e,n,t),{annotationUID:r}=t,i=(0,s.isAnnotationVisible)(r),l=(0,a.isAnnotationLocked)(t),c=o("lineWidth"),u=o("lineDash"),d=o("color");return{visibility:i,locked:l,color:d,lineWidth:c,lineDash:u,lineOpacity:1,fillColor:d,fillOpacity:0,shadow:o("shadow"),textbox:this.getLinkedTextBoxStyle(n,t)}}_imagePointNearToolOrHandle(e,t,n,o){if(this.getHandleNearImagePoint(e,t,n,o))return!0;return!!this.isPointNearTool(e,t,n,o,"mouse")||void 0}}u.toolName="AnnotationTool";const d=u},44350:(e,t,n)=>{n.d(t,{A:()=>r});const o={renderOutline:!0,outlineWidthActive:3,outlineWidthInactive:2,activeSegmentOutlineWidthDelta:0,renderFill:!0,renderFillInactive:!0,fillAlpha:.7,fillAlphaInactive:.65,outlineOpacity:1,outlineOpacityInactive:.85};const r=function(){return o}},81848:(e,t,n)=>{n.d(t,{M$:()=>r.A,EC:()=>o.EC,PlanarFreehandContourSegmentationTool:()=>s.A,ex:()=>a.A,t0:()=>l.A});var o=n(96214),r=(n(25294),n(15924),n(455),n(20132),n(15354),n(57008),n(20842),n(94574),n(57424),n(91976),n(93970),n(73168)),i=(n(54541),n(87841),n(70494),n(1143),n(92807),n(50720),n(72655),n(30049),n(28087),n(19994)),a=(n(19116),n(42865),n(42058),n(67540),n(39244)),s=n(20070),l=(n(19904),n(88854),n(65314),n(1368),n(40310),n(95608),n(72799),n(7336),n(31163)),c=(n(81502),n(34229),n(55108),n(92136)),u=n(95778),d=n(48428),g=n(2746),h=n(90252),f=n(40233),m=n(23072),p=n(21009),v=n(54177);class w extends i.A{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}){super(e,t),this.addNewAnnotation=e=>{const t=e.detail,{currentPoints:n,element:o}=t,r=n.world,i=(0,c.getEnabledElement)(o),{viewport:a,renderingEngine:s}=i;this.isDrawing=!0;const l=a.getCamera(),{viewPlaneNormal:d,viewUp:g}=l,p=this.getTargetId(a);let v,w;if(a instanceof c.StackViewport)v=p.split("imageId:")[1];else{w=c.utilities.getVolumeId(p);const e=c.cache.getVolume(w);v=c.utilities.getClosestImageId(e,r,d)}const y=a.getFrameOfReferenceUID(),I={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:i,viewUp:[...g],FrameOfReferenceUID:y,referencedImageId:v,toolName:this.getToolName(),volumeId:w},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...r],[...r],[...r],[...r]],activeHandleIndex:null},segmentationId:null}};(0,u.lC)(I,o);const A=(0,h.getViewportIdsWithToolToRender)(o,this.getToolName());return this.editData={annotation:I,viewportIdsToRender:A,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),(0,f.hideElementCursor)(o),e.preventDefault(),(0,m.A)(s,A),I},this.renderAnnotation=(e,t)=>{let n=!1;const{viewport:o}=e,{element:r}=o;let i=(0,u.Rh)(this.getToolName(),r);if(!i?.length)return n;if(i=this.filterInteractableAnnotationsForElement(r,i),!i?.length)return n;const a={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<i.length;e++){const s=i[e],{annotationUID:l,data:c}=s,{points:u,activeHandleIndex:h}=c.handles,f=u.map((e=>o.worldToCanvas(e)));a.annotationUID=l;const m=this.getStyle("lineWidth",a,s),w=this.getStyle("lineDash",a,s),y=this.getStyle("color",a,s);if(!o.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let I;if((0,v.XF)(s,r),!(0,p.isAnnotationVisible)(l))continue;if((0,d.isAnnotationLocked)(s)||this.editData||null===h||(I=[f[h]]),I){const e="0";(0,g.drawHandles)(t,l,e,I,{color:y})}const A="0";(0,g.drawRect)(t,l,A,f[0],f[3],{color:y,lineDash:w,lineWidth:m}),n=!0}return n}}}w.toolName="RectangleROIThreshold";var y=n(44753),I=n(21090),A=n(74119);const{transformWorldToIndex:E}=c.utilities;class T extends i.A{constructor(e={},t={configuration:{numSlicesToPropagate:10,computePointsInsideVolume:!1}}){super(e,t),this.addNewAnnotation=e=>{const t=e.detail,{currentPoints:n,element:o}=t,r=n.world,i=(0,c.getEnabledElement)(o),{viewport:a,renderingEngine:s}=i;this.isDrawing=!0;const l=a.getCamera(),{viewPlaneNormal:d,viewUp:g}=l;let p,v,w;if(a instanceof c.StackViewport)throw new Error("Stack Viewport Not implemented");{const e=this.getTargetId(a);w=c.utilities.getVolumeId(e),v=c.cache.getVolume(w),p=c.utilities.getClosestImageId(v,r,d)}if(!p)throw new Error("This tool does not work on non-acquisition planes");const y=a.getCurrentImageIdIndex(),I=c.utilities.getSpacingInNormalDirection(v,d),A=this._getEndSliceIndex(v,r,I,d),E=a.getFrameOfReferenceUID(),T={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:i,viewUp:[...g],FrameOfReferenceUID:E,referencedImageId:p,toolName:this.getToolName(),volumeId:w,spacingInNormal:I},data:{label:"",startSlice:y,endSlice:A,cachedStats:{pointsInVolume:[],projectionPoints:[],projectionPointsImageIds:[p]},handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...r],[...r],[...r],[...r]],activeHandleIndex:null},labelmapUID:null}};this._computeProjectionPoints(T,v),(0,u.lC)(T,o);const S=(0,h.getViewportIdsWithToolToRender)(o,this.getToolName());return this.editData={annotation:T,viewportIdsToRender:S,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),(0,f.hideElementCursor)(o),e.preventDefault(),(0,m.A)(s,S),T},this._endCallback=e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:r,newAnnotation:i,hasMoved:a}=this.editData,{data:s}=o;if(i&&!a)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),(0,f.resetElementCursor)(n);const l=(0,c.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&(0,u.O8)(o.annotationUID);const d=this.getTargetId(l.viewport),g=c.cache.getVolume(d.split(/volumeId:|\?/)[1]);this.configuration.calculatePointsInsideVolume&&this._computePointsInsideVolume(o,g,l),(0,m.A)(l.renderingEngine,r),i&&(0,v.dZ)(o)},this.renderAnnotation=(e,t)=>{let n=!1;const{viewport:o}=e,r=(0,u.Rh)(this.getToolName(),o.element);if(!r?.length)return n;const i=o.getCurrentImageIdIndex(),a={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let s=0;s<r.length;s++){const l=r[s],{annotationUID:c,data:u}=l,{startSlice:h,endSlice:f}=u,{points:m,activeHandleIndex:v}=u.handles,w=m.map((e=>o.worldToCanvas(e)));a.annotationUID=c;const y=this.getStyle("lineWidth",a,l),I=this.getStyle("lineDash",a,l),A=this.getStyle("color",a,l);if(i<Math.min(h,f)||i>Math.max(h,f))continue;l.invalidated&&this._throttledCalculateCachedStats(l,e);let E,T=!1;if(i!==h&&i!==f||(T=!0),!o.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!(0,p.isAnnotationVisible)(c))continue;if((0,d.isAnnotationLocked)(l)||this.editData||null===v||!T||(E=[w[v]]),E){const e="0";(0,g.drawHandles)(t,c,e,E,{color:A})}let S=I;T||(S=2);const x="0";(0,g.drawRect)(t,c,x,w[0],w[3],{color:A,lineDash:S,lineWidth:y}),n=!0}return n},this._throttledCalculateCachedStats=(0,I.A)(this._calculateCachedStatsTool,100,{trailing:!0})}_computeProjectionPoints(e,t){const{data:n,metadata:o}=e,{viewPlaneNormal:r,spacingInNormal:i}=o,{imageData:a}=t,{startSlice:s,endSlice:l}=n,{points:u}=n.handles,d=E(a,u[0]);if(d[2]!==s)throw new Error("Start slice does not match");const g=y.eR.fromValues(d[0],d[1],l),h=y.eR.create();a.indexToWorldVec3(d,h);const f=y.eR.create();a.indexToWorldVec3(g,f);const m=y.eR.distance(h,f),p=[];for(let e=0;e<m;e+=i)p.push(u.map((t=>{const n=y.eR.create();return y.eR.scaleAndAdd(n,t,r,e),Array.from(n)})));n.cachedStats.projectionPoints=p;const v=[];for(const e of p){const n=c.utilities.getClosestImageId(t,e[0],r);v.push(n)}n.cachedStats.projectionPointsImageIds=v}_computePointsInsideVolume(e,t,n){const{data:o}=e,r=o.cachedStats.projectionPoints,i=[[]];for(let e=0;e<r.length;e++){if(!t)continue;const n=r[e][0],a=o.handles.points[0],s=o.handles.points[3],{dimensions:l,imageData:c}=t,u=E(c,a),d=E(c,n);u[0]=Math.floor(u[0]),u[1]=Math.floor(u[1]),u[2]=Math.floor(d[2]);const g=E(c,s);if(g[0]=Math.floor(g[0]),g[1]=Math.floor(g[1]),g[2]=Math.floor(d[2]),this._isInsideVolume(u,g,l)){this.isHandleOutsideImage=!1;const e=[[Math.min(u[0],g[0]),Math.max(u[0],g[0])],[Math.min(u[1],g[1]),Math.max(u[1],g[1])],[Math.min(u[2],g[2]),Math.max(u[2],g[2])]],t=(0,A.pointInShapeCallback)(c,(()=>!0),null,e);i.push(t)}}o.cachedStats.pointsInVolume=i}_calculateCachedStatsTool(e,t){const n=e.data,{viewport:o}=t,{cachedStats:r}=n,i=this.getTargetId(o),a=c.cache.getVolume(i.split(/volumeId:|\?/)[1]);return this._computeProjectionPoints(e,a),e.invalidated=!1,(0,v.XF)(e,o.element),r}_getEndSliceIndex(e,t,n,o){const r=this.configuration.numSlicesToPropagate,i=y.eR.create();y.eR.scaleAndAdd(i,t,o,r*n);const a=n/2,{imageIds:s}=e;let l;for(let e=0;e<s.length;e++){const t=s[e],{imagePositionPatient:n}=c.metaData.get("imagePlaneModule",t),r=y.eR.create();y.eR.sub(r,i,n);const u=y.eR.dot(r,o);Math.abs(u)<a&&(l=e)}return l}}T.toolName="RectangleROIStartEndThreshold";n(94932),n(53712),n(70817),n(36129),n(34041)},41209:(e,t,n)=>{var o=n(92136),r=n(28117);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 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 o=this.framesToString(t);return e.replace(this.frameRangeExtractor,`${n[1]}${o}`)}static setFrameRange(e,t,n){const{referencedImageId:i}=e.metadata;e.metadata.referencedImageId=this.framesToImageId(i,t);const a={...n,annotation:e};(0,o.triggerEvent)(o.eventTarget,r.A.ANNOTATION_MODIFIED,a)}static getFrameRange(e){return this.imageIdToFrames(e.metadata.referencedImageId)}}},42290:()=>{},14471:(e,t,n)=>{n.d(t,{C:()=>s,g:()=>a});var o=n(92136);const{EPSILON:r}=o.CONSTANTS;function i(e,t,n=!1){let o=1/0,i=n?-1/0:0,a=1/0,s=n?-1/0:0,l=1/0,c=n?-1/0:0;const u=3===e[0]?.length;for(let t=0;t<e.length;t++){const n=e[t];o=Math.min(n[0],o),i=Math.max(n[0],i),a=Math.min(n[1],a),s=Math.max(n[1],s),u&&(l=Math.min(n[2]??l,l),c=Math.max(n[2]??c,c))}return t?(o=Math.max(n?t[0]+r:0,o),i=Math.min(n?t[0]-r:t[0]-1,i),a=Math.max(n?t[1]+r:0,a),s=Math.min(n?t[1]-r:t[1]-1,s),u&&3===t.length&&(l=Math.max(n?t[2]+r:0,l),c=Math.min(n?t[2]-r:t[2]-1,c))):n||(o=Math.max(0,o),i=Math.min(1/0,i),a=Math.max(0,a),s=Math.min(1/0,s),u&&(l=Math.max(0,l),c=Math.min(1/0,c))),u?[[o,i],[a,s],[l,c]]:[[o,i],[a,s],null]}function a(e,t){return i(e,t,!1)}function s(e,t){return i(e,t,!0)}},15306:(e,t,n)=>{n.d(t,{getBoundingBoxAroundShapeIJK:()=>o.g,getBoundingBoxAroundShapeWorld:()=>o.C});n(42290);var o=n(14471)},17167:(e,t,n)=>{var o=n(92136);const{calibratedPixelSpacingMetadataProvider:r}=o.utilities},60001:(e,t,n)=>{n(44753);var o,r=n(92136);!function(e){e.CLIP_STOPPED="CORNERSTONE_CINE_TOOL_STOPPED",e.CLIP_STARTED="CORNERSTONE_CINE_TOOL_STARTED"}(o||(o={}));n(21783);const{ViewportStatus:i}=r.Enums,{triggerEvent:a}=r.utilities;new Map},88484:(e,t,n)=>{},32415:(e,t,n)=>{n.d(t,{V:()=>r});var o=n(30322);function r(e){if(e.parentAnnotationUID)return;if(!e.data.segmentation)throw new Error("addContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:t,segmentIndex:n}=e.data.segmentation,r=(0,o.getSegmentation)(t);r.representationData.CONTOUR||(r.representationData.CONTOUR={annotationUIDsMap:new Map});const{annotationUIDsMap:i}=r.representationData.CONTOUR;let a=i.get(n);a||(a=new Set,i.set(n,a)),i.set(n,a.add(e.annotationUID))}},3030:(e,t,n)=>{},7259:(e,t,n)=>{n.d(t,{addContourSegmentationAnnotation:()=>o.V,removeContourSegmentationAnnotation:()=>r.M});n(3030),n(84354);var o=n(32415),r=n(78170)},84354:(e,t,n)=>{},78170:(e,t,n)=>{n.d(t,{M:()=>r});var o=n(63421);function r(e){if(!e.data.segmentation)throw new Error("removeContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:t,segmentIndex:n}=e.data.segmentation,r=o.state.getSegmentation(t),{annotationUIDsMap:i}=r?.representationData.CONTOUR||{},a=i?.get(n);a&&(a.delete(e.annotationUID),a.size||i.delete(n))}},93712:(e,t,n)=>{var o=n(69405);class r{constructor(){}static{this.TOOL_NAMES={}}static convert(e,t,n){!function(e){if(!e?.data)throw new Error("Tool data is empty");if(!e.metadata||e.metadata.refer