@cornerstonejs/core 2.0.0-beta.21 → 2.0.0-beta.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/RenderingEngine/BaseVolumeViewport.d.ts +1 -1
- package/dist/esm/RenderingEngine/BaseVolumeViewport.js +16 -6
- package/dist/esm/RenderingEngine/RenderingEngine.d.ts +1 -2
- package/dist/esm/RenderingEngine/RenderingEngine.js +2 -1
- package/dist/esm/RenderingEngine/StackViewport.d.ts +1 -3
- package/dist/esm/RenderingEngine/StackViewport.js +15 -8
- package/dist/esm/RenderingEngine/VideoViewport.js +2 -2
- package/dist/esm/RenderingEngine/Viewport.js +4 -1
- package/dist/esm/RenderingEngine/VolumeViewport.d.ts +1 -1
- package/dist/esm/RenderingEngine/VolumeViewport.js +8 -3
- package/dist/esm/RenderingEngine/WSIViewport.js +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderPseudoColorImage.js +1 -1
- package/dist/esm/RenderingEngine/helpers/createVolumeActor.js +1 -1
- package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.js +3 -2
- package/dist/esm/RenderingEngine/helpers/volumeNewImageEventDispatcher.js +4 -4
- package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLTexture.js +1 -1
- package/dist/esm/cache/cache.js +2 -1
- package/dist/esm/cache/classes/BaseStreamingImageVolume.d.ts +85 -0
- package/dist/esm/cache/classes/BaseStreamingImageVolume.js +339 -0
- package/dist/esm/cache/classes/ImageVolume.js +2 -1
- package/dist/esm/cache/classes/StreamingDynamicImageVolume.d.ts +52 -0
- package/dist/esm/cache/classes/StreamingDynamicImageVolume.js +81 -0
- package/dist/esm/cache/classes/StreamingImageVolume.d.ts +8 -0
- package/dist/esm/cache/classes/StreamingImageVolume.js +21 -0
- package/dist/esm/cache/index.d.ts +4 -3
- package/dist/esm/cache/index.js +4 -3
- package/dist/esm/enums/Events.d.ts +2 -1
- package/dist/esm/enums/Events.js +1 -0
- package/dist/esm/index.d.ts +8 -3
- package/dist/esm/index.js +8 -3
- package/dist/esm/init.js +1 -1
- package/dist/esm/loaders/ProgressiveRetrieveImages.js +4 -2
- package/dist/esm/loaders/cornerstoneStreamingDynamicImageVolumeLoader.d.ts +10 -0
- package/dist/esm/loaders/cornerstoneStreamingDynamicImageVolumeLoader.js +58 -0
- package/dist/esm/loaders/cornerstoneStreamingImageVolumeLoader.d.ts +12 -0
- package/dist/esm/loaders/cornerstoneStreamingImageVolumeLoader.js +73 -0
- package/dist/esm/loaders/geometryLoader.js +1 -1
- package/dist/esm/loaders/imageLoader.js +6 -2
- package/dist/esm/loaders/volumeLoader.d.ts +1 -0
- package/dist/esm/loaders/volumeLoader.js +34 -5
- package/dist/esm/requestPool/requestPoolManager.js +1 -1
- package/dist/esm/types/CPUFallbackEnabledElement.d.ts +1 -39
- package/dist/esm/types/IImage.d.ts +37 -2
- package/dist/esm/types/ImageLoadRequests.d.ts +24 -0
- package/dist/esm/types/ImageLoadRequests.js +1 -0
- package/dist/esm/types/index.d.ts +3 -2
- package/dist/esm/utilities/VoxelManager.js +1 -1
- package/dist/esm/utilities/autoLoad.d.ts +2 -0
- package/dist/esm/utilities/autoLoad.js +28 -0
- package/dist/esm/utilities/calculateViewportsSpatialRegistration.js +3 -3
- package/dist/esm/utilities/convertVolumeToStackViewport.js +2 -1
- package/dist/esm/utilities/getClosestStackImageIndexForPoint.js +2 -2
- package/dist/esm/utilities/getDynamicVolumeInfo.d.ts +6 -0
- package/dist/esm/utilities/getDynamicVolumeInfo.js +7 -0
- package/dist/esm/utilities/getImageLegacy.js +1 -1
- package/dist/esm/utilities/getScalingParameters.js +4 -4
- package/dist/esm/utilities/getViewportImageIds.js +1 -1
- package/dist/esm/utilities/imageToWorldCoords.js +2 -2
- package/dist/esm/utilities/index.d.ts +5 -1
- package/dist/esm/utilities/index.js +6 -2
- package/dist/esm/utilities/isValidVolume.js +1 -1
- package/dist/esm/utilities/loadImageToCanvas.js +1 -1
- package/dist/esm/utilities/makeVolumeMetadata.js +5 -5
- package/dist/esm/utilities/scaleArray.d.ts +2 -0
- package/dist/esm/utilities/scaleArray.js +15 -0
- package/dist/esm/utilities/sortImageIdsAndGetSpacing.js +2 -1
- package/dist/esm/utilities/splitImageIdsBy4DTags.d.ts +5 -0
- package/dist/esm/utilities/splitImageIdsBy4DTags.js +161 -0
- package/dist/esm/utilities/worldToImageCoords.js +2 -2
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +3 -2
- package/dist/esm/utilities/isTypedArray.d.ts +0 -1
- package/dist/esm/utilities/isTypedArray.js +0 -11
package/dist/umd/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@kitware/vtk.js/Rendering/Core/VolumeMapper/Constants"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps"),require("@kitware/vtk.js/Common/DataModel/PiecewiseFunction"),require("gl-matrix"),require("@kitware/vtk.js/Common/Core/MatrixBuilder"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Common/DataModel/Plane"),require("@kitware/vtk.js/macros"),require("@kitware/vtk.js/Rendering/Core/Camera"),require("@kitware/vtk.js/Rendering/Profiles/Volume"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Rendering/OpenGL/Texture"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Rendering/Core/Volume"),require("@kitware/vtk.js/Rendering/Core/VolumeMapper"),require("@kitware/vtk.js/Rendering/Core/ImageMapper"),require("@kitware/vtk.js/Rendering/Core/ImageSlice"),require("@kitware/vtk.js/Rendering/Core/Renderer"),require("@kitware/vtk.js/Rendering/Core/RenderWindow"),require("@kitware/vtk.js/Rendering/Core/RenderWindowInteractor"),require("@kitware/vtk.js/Common/Core/Points"),require("@kitware/vtk.js/Common/DataModel/PolyData"),require("@kitware/vtk.js/Rendering/Core/Actor"),require("@kitware/vtk.js/Rendering/Core/Mapper"),require("@kitware/vtk.js/Rendering/OpenGL/RenderWindow"),require("@kitware/vtk.js/Rendering/OpenGL/Actor"),require("@kitware/vtk.js/Rendering/OpenGL/Actor2D"),require("@kitware/vtk.js/Rendering/OpenGL/Camera"),require("@kitware/vtk.js/Rendering/OpenGL/Glyph3DMapper"),require("@kitware/vtk.js/Rendering/OpenGL/ImageMapper"),require("@kitware/vtk.js/Rendering/OpenGL/ImageSlice"),require("@kitware/vtk.js/Rendering/OpenGL/PixelSpaceCallbackMapper"),require("@kitware/vtk.js/Rendering/OpenGL/PolyDataMapper"),require("@kitware/vtk.js/Rendering/OpenGL/Renderer"),require("@kitware/vtk.js/Rendering/OpenGL/Skybox"),require("@kitware/vtk.js/Rendering/OpenGL/SphereMapper"),require("@kitware/vtk.js/Rendering/OpenGL/StickMapper"),require("@kitware/vtk.js/Rendering/OpenGL/Volume"),require("@kitware/vtk.js/Rendering/OpenGL/VolumeMapper"),require("@kitware/vtk.js/Rendering/SceneGraph/ViewNodeFactory"),require("@kitware/vtk.js/Rendering/OpenGL/Texture/Constants"),require("@kitware/vtk.js/Common/Core/DataArray/Constants"),require("@kitware/vtk.js/Rendering/OpenGL/RenderWindow/resourceSharingHelper"),require("@kitware/vtk.js/Rendering/Core/Property/Constants"),require("@kitware/vtk.js/Rendering/Profiles/Geometry")):"function"==typeof define&&define.amd?define(["@kitware/vtk.js/Rendering/Core/VolumeMapper/Constants","@kitware/vtk.js/Rendering/Core/ColorTransferFunction","@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps","@kitware/vtk.js/Common/DataModel/PiecewiseFunction","gl-matrix","@kitware/vtk.js/Common/Core/MatrixBuilder","@kitware/vtk.js/Common/Core/Math","@kitware/vtk.js/Common/DataModel/Plane","@kitware/vtk.js/macros","@kitware/vtk.js/Rendering/Core/Camera","@kitware/vtk.js/Rendering/Profiles/Volume","@kitware/vtk.js/Common/DataModel/ImageData","@kitware/vtk.js/Rendering/OpenGL/Texture","@kitware/vtk.js/Common/Core/DataArray","@kitware/vtk.js/Rendering/Core/Volume","@kitware/vtk.js/Rendering/Core/VolumeMapper","@kitware/vtk.js/Rendering/Core/ImageMapper","@kitware/vtk.js/Rendering/Core/ImageSlice","@kitware/vtk.js/Rendering/Core/Renderer","@kitware/vtk.js/Rendering/Core/RenderWindow","@kitware/vtk.js/Rendering/Core/RenderWindowInteractor","@kitware/vtk.js/Common/Core/Points","@kitware/vtk.js/Common/DataModel/PolyData","@kitware/vtk.js/Rendering/Core/Actor","@kitware/vtk.js/Rendering/Core/Mapper","@kitware/vtk.js/Rendering/OpenGL/RenderWindow","@kitware/vtk.js/Rendering/OpenGL/Actor","@kitware/vtk.js/Rendering/OpenGL/Actor2D","@kitware/vtk.js/Rendering/OpenGL/Camera","@kitware/vtk.js/Rendering/OpenGL/Glyph3DMapper","@kitware/vtk.js/Rendering/OpenGL/ImageMapper","@kitware/vtk.js/Rendering/OpenGL/ImageSlice","@kitware/vtk.js/Rendering/OpenGL/PixelSpaceCallbackMapper","@kitware/vtk.js/Rendering/OpenGL/PolyDataMapper","@kitware/vtk.js/Rendering/OpenGL/Renderer","@kitware/vtk.js/Rendering/OpenGL/Skybox","@kitware/vtk.js/Rendering/OpenGL/SphereMapper","@kitware/vtk.js/Rendering/OpenGL/StickMapper","@kitware/vtk.js/Rendering/OpenGL/Volume","@kitware/vtk.js/Rendering/OpenGL/VolumeMapper","@kitware/vtk.js/Rendering/SceneGraph/ViewNodeFactory","@kitware/vtk.js/Rendering/OpenGL/Texture/Constants","@kitware/vtk.js/Common/Core/DataArray/Constants","@kitware/vtk.js/Rendering/OpenGL/RenderWindow/resourceSharingHelper","@kitware/vtk.js/Rendering/Core/Property/Constants","@kitware/vtk.js/Rendering/Profiles/Geometry"],t):"object"==typeof exports?exports.cornerstone3D=t(require("@kitware/vtk.js/Rendering/Core/VolumeMapper/Constants"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps"),require("@kitware/vtk.js/Common/DataModel/PiecewiseFunction"),require("gl-matrix"),require("@kitware/vtk.js/Common/Core/MatrixBuilder"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Common/DataModel/Plane"),require("@kitware/vtk.js/macros"),require("@kitware/vtk.js/Rendering/Core/Camera"),require("@kitware/vtk.js/Rendering/Profiles/Volume"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Rendering/OpenGL/Texture"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Rendering/Core/Volume"),require("@kitware/vtk.js/Rendering/Core/VolumeMapper"),require("@kitware/vtk.js/Rendering/Core/ImageMapper"),require("@kitware/vtk.js/Rendering/Core/ImageSlice"),require("@kitware/vtk.js/Rendering/Core/Renderer"),require("@kitware/vtk.js/Rendering/Core/RenderWindow"),require("@kitware/vtk.js/Rendering/Core/RenderWindowInteractor"),require("@kitware/vtk.js/Common/Core/Points"),require("@kitware/vtk.js/Common/DataModel/PolyData"),require("@kitware/vtk.js/Rendering/Core/Actor"),require("@kitware/vtk.js/Rendering/Core/Mapper"),require("@kitware/vtk.js/Rendering/OpenGL/RenderWindow"),require("@kitware/vtk.js/Rendering/OpenGL/Actor"),require("@kitware/vtk.js/Rendering/OpenGL/Actor2D"),require("@kitware/vtk.js/Rendering/OpenGL/Camera"),require("@kitware/vtk.js/Rendering/OpenGL/Glyph3DMapper"),require("@kitware/vtk.js/Rendering/OpenGL/ImageMapper"),require("@kitware/vtk.js/Rendering/OpenGL/ImageSlice"),require("@kitware/vtk.js/Rendering/OpenGL/PixelSpaceCallbackMapper"),require("@kitware/vtk.js/Rendering/OpenGL/PolyDataMapper"),require("@kitware/vtk.js/Rendering/OpenGL/Renderer"),require("@kitware/vtk.js/Rendering/OpenGL/Skybox"),require("@kitware/vtk.js/Rendering/OpenGL/SphereMapper"),require("@kitware/vtk.js/Rendering/OpenGL/StickMapper"),require("@kitware/vtk.js/Rendering/OpenGL/Volume"),require("@kitware/vtk.js/Rendering/OpenGL/VolumeMapper"),require("@kitware/vtk.js/Rendering/SceneGraph/ViewNodeFactory"),require("@kitware/vtk.js/Rendering/OpenGL/Texture/Constants"),require("@kitware/vtk.js/Common/Core/DataArray/Constants"),require("@kitware/vtk.js/Rendering/OpenGL/RenderWindow/resourceSharingHelper"),require("@kitware/vtk.js/Rendering/Core/Property/Constants"),require("@kitware/vtk.js/Rendering/Profiles/Geometry")):e.cornerstone3D=t(e["@kitware/vtk.js/Rendering/Core/VolumeMapper/Constants"],e["@kitware/vtk.js/Rendering/Core/ColorTransferFunction"],e["@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps"],e["@kitware/vtk.js/Common/DataModel/PiecewiseFunction"],e.window,e["@kitware/vtk.js/Common/Core/MatrixBuilder"],e["@kitware/vtk.js/Common/Core/Math"],e["@kitware/vtk.js/Common/DataModel/Plane"],e["@kitware/vtk.js/macros"],e["@kitware/vtk.js/Rendering/Core/Camera"],e["@kitware/vtk.js/Rendering/Profiles/Volume"],e["@kitware/vtk.js/Common/DataModel/ImageData"],e["@kitware/vtk.js/Rendering/OpenGL/Texture"],e["@kitware/vtk.js/Common/Core/DataArray"],e["@kitware/vtk.js/Rendering/Core/Volume"],e["@kitware/vtk.js/Rendering/Core/VolumeMapper"],e["@kitware/vtk.js/Rendering/Core/ImageMapper"],e["@kitware/vtk.js/Rendering/Core/ImageSlice"],e["@kitware/vtk.js/Rendering/Core/Renderer"],e["@kitware/vtk.js/Rendering/Core/RenderWindow"],e["@kitware/vtk.js/Rendering/Core/RenderWindowInteractor"],e["@kitware/vtk.js/Common/Core/Points"],e["@kitware/vtk.js/Common/DataModel/PolyData"],e["@kitware/vtk.js/Rendering/Core/Actor"],e["@kitware/vtk.js/Rendering/Core/Mapper"],e["@kitware/vtk.js/Rendering/OpenGL/RenderWindow"],e["@kitware/vtk.js/Rendering/OpenGL/Actor"],e["@kitware/vtk.js/Rendering/OpenGL/Actor2D"],e["@kitware/vtk.js/Rendering/OpenGL/Camera"],e["@kitware/vtk.js/Rendering/OpenGL/Glyph3DMapper"],e["@kitware/vtk.js/Rendering/OpenGL/ImageMapper"],e["@kitware/vtk.js/Rendering/OpenGL/ImageSlice"],e["@kitware/vtk.js/Rendering/OpenGL/PixelSpaceCallbackMapper"],e["@kitware/vtk.js/Rendering/OpenGL/PolyDataMapper"],e["@kitware/vtk.js/Rendering/OpenGL/Renderer"],e["@kitware/vtk.js/Rendering/OpenGL/Skybox"],e["@kitware/vtk.js/Rendering/OpenGL/SphereMapper"],e["@kitware/vtk.js/Rendering/OpenGL/StickMapper"],e["@kitware/vtk.js/Rendering/OpenGL/Volume"],e["@kitware/vtk.js/Rendering/OpenGL/VolumeMapper"],e["@kitware/vtk.js/Rendering/SceneGraph/ViewNodeFactory"],e["@kitware/vtk.js/Rendering/OpenGL/Texture/Constants"],e["@kitware/vtk.js/Common/Core/DataArray/Constants"],e["@kitware/vtk.js/Rendering/OpenGL/RenderWindow/resourceSharingHelper"],e["@kitware/vtk.js/Rendering/Core/Property/Constants"],e["@kitware/vtk.js/Rendering/Profiles/Geometry"])}(self,((e,t,i,n,r,a,o,s,l,c,d,h,u,g,m,p,f,v,w,I,C,E,y,R,P,b,T,A,S,O,D,M,x,_,V,k,L,N,U,F,j,G,W,B,q,z)=>(()=>{"use strict";var H={785:e=>{e.exports=g},948:e=>{e.exports=W},807:e=>{e.exports=o},847:e=>{e.exports=a},348:e=>{e.exports=E},283:e=>{e.exports=h},441:e=>{e.exports=n},864:e=>{e.exports=s},70:e=>{e.exports=y},474:e=>{e.exports=R},821:e=>{e.exports=c},795:e=>{e.exports=t},38:e=>{e.exports=i},896:e=>{e.exports=f},861:e=>{e.exports=v},610:e=>{e.exports=P},478:e=>{e.exports=q},329:e=>{e.exports=I},673:e=>{e.exports=C},281:e=>{e.exports=w},739:e=>{e.exports=m},9:e=>{e.exports=p},468:t=>{t.exports=e},643:e=>{e.exports=T},128:e=>{e.exports=A},664:e=>{e.exports=S},973:e=>{e.exports=O},394:e=>{e.exports=D},582:e=>{e.exports=M},482:e=>{e.exports=x},343:e=>{e.exports=_},21:e=>{e.exports=b},411:e=>{e.exports=B},363:e=>{e.exports=V},982:e=>{e.exports=k},130:e=>{e.exports=L},298:e=>{e.exports=N},953:e=>{e.exports=u},395:e=>{e.exports=G},398:e=>{e.exports=U},388:e=>{e.exports=F},914:e=>{e.exports=z},215:e=>{e.exports=d},120:e=>{e.exports=j},197:e=>{e.exports=l},976:e=>{e.exports=r}},$={};function K(e){var t=$[e];if(void 0!==t)return t.exports;var i=$[e]={exports:{}};return H[e](i,i.exports,K),i.exports}K.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return K.d(t,{a:t}),t},K.d=(e,t)=>{for(var i in t)K.o(t,i)&&!K.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},K.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),K.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var Y={};return(()=>{K.r(Y),K.d(Y,{BaseVolumeViewport:()=>Wr,CONSTANTS:()=>i,EVENTS:()=>p,Enums:()=>t,ImageVolume:()=>Me,ProgressiveRetrieveImages:()=>Ga,RenderingEngine:()=>to,Settings:()=>mo,StackViewport:()=>Ba,Surface:()=>io,VideoViewport:()=>Ya,Viewport:()=>_r,VolumeViewport:()=>zr,VolumeViewport3D:()=>qa,WSIViewport:()=>Xa,addImageSlicesToViewports:()=>Rs,addVolumesToViewports:()=>ys,cache:()=>ue,canRenderFloatTextures:()=>pi,createVolumeActor:()=>Di,createVolumeMapper:()=>Pi,eventTarget:()=>le,geometryLoader:()=>d,getConfiguration:()=>Ii,getEnabledElement:()=>ao,getEnabledElementByIds:()=>oo,getEnabledElementByViewportId:()=>so,getEnabledElements:()=>lo,getOrCreateCanvas:()=>Vi,getRenderingEngine:()=>Ot,getRenderingEngines:()=>Dt,getShouldUseCPURendering:()=>vi,getWebWorkerManager:()=>yi,imageLoadPoolManager:()=>qe,imageLoader:()=>r,imageRetrievalPoolManager:()=>ro,init:()=>ui,isCornerstoneInitialized:()=>wi,metaData:()=>n,peerImport:()=>Ri,registerImageLoader:()=>nt,requestPoolManager:()=>qe,resetUseCPURendering:()=>fi,setConfiguration:()=>Ci,setPreferSizeOverAccuracy:()=>mi,setUseCPURendering:()=>gi,setVolumesForViewports:()=>cs,triggerEvent:()=>ce,utilities:()=>g,volumeLoader:()=>a});var e={};K.r(e),K.d(e,{SpeedUnit:()=>W});var t={};K.r(t),K.d(t,{BlendModes:()=>T,CalibrationTypes:()=>N,ContourType:()=>x,DynamicOperatorType:()=>L,Events:()=>p,GenerateImageType:()=>z,GeometryType:()=>D,ImageQualityStatus:()=>G,InterpolationType:()=>E,MetadataModules:()=>q,OrientationAxis:()=>S,RequestType:()=>v,VOILUTFunctionType:()=>V,VideoEnums:()=>e,ViewportStatus:()=>F,ViewportType:()=>I});var i={};K.r(i),K.d(i,{BACKGROUND_COLORS:()=>ee,CPU_COLORMAPS:()=>H,EPSILON:()=>J,MPR_CAMERA_VALUES:()=>X,RENDERING_DEFAULTS:()=>Z,VIEWPORT_PRESETS:()=>Q});var n={};K.r(n),K.d(n,{addProvider:()=>ke,get:()=>Ue,removeAllProviders:()=>Ne,removeProvider:()=>Le});var r={};K.r(r),K.d(r,{cancelLoadAll:()=>it,cancelLoadImage:()=>et,cancelLoadImages:()=>tt,createAndCacheDerivedImage:()=>Je,createAndCacheDerivedImages:()=>Xe,createAndCacheDerivedSegmentationImage:()=>st,createAndCacheDerivedSegmentationImages:()=>ot,createAndCacheLocalImage:()=>Qe,loadAndCacheImage:()=>Ye,loadAndCacheImages:()=>Ze,loadImage:()=>Ke,registerImageLoader:()=>nt,registerUnknownImageLoader:()=>rt,unregisterAllImageLoaders:()=>at});var a={};K.r(a),K.d(a,{createAndCacheDerivedSegmentationVolume:()=>Ct,createAndCacheDerivedVolume:()=>gt,createAndCacheVolume:()=>ut,createAndCacheVolumeFromImages:()=>mt,createLocalSegmentationVolume:()=>Et,createLocalVolume:()=>pt,getUnknownVolumeLoaderSchema:()=>It,getVolumeLoaderSchemes:()=>vt,loadVolume:()=>ht,registerUnknownVolumeLoader:()=>wt,registerVolumeLoader:()=>ft});var o={};K.r(o),K.d(o,{toLowHighRange:()=>Ti,toWindowLevel:()=>bi});var s={};K.r(s),K.d(s,{findMatchingColormap:()=>ur,getColormap:()=>dr,getColormapNames:()=>hr,registerColormap:()=>cr});var l={};K.r(l),K.d(l,{linePlaneIntersection:()=>Ar,planeDistanceToPoint:()=>Dr,planeEquation:()=>Sr,threePlaneIntersection:()=>Or});var c={};K.r(c),K.d(c,{getTransferFunctionNodes:()=>jr,setTransferFunctionNodes:()=>Gr});var d={};K.r(d),K.d(d,{createAndCacheGeometry:()=>Eo});var h={};K.r(h),K.d(h,{MultiTargetEventListenerManager:()=>Po,TargetEventListeners:()=>Ro});var u={};K.r(u),K.d(u,{hexToRgb:()=>Cs,rgbToHex:()=>Is});var g={};K.r(g),K.d(g,{PointsManager:()=>Xo,ProgressiveIterator:()=>La,RLEVoxelMap:()=>ge,VoxelManager:()=>ye,actorIsA:()=>qn,applyPreset:()=>yr,calculateViewportsSpatialRegistration:()=>Yo,calibratedPixelSpacingMetadataProvider:()=>xo,clamp:()=>ya,color:()=>u,colormap:()=>s,convertStackToVolumeViewport:()=>ds,convertToGrayscale:()=>ms,convertVolumeToStackViewport:()=>hs,createLinearRGBTransferFunction:()=>Wa,createSigmoidRGBTransferFunction:()=>mr,decimate:()=>Na,deepMerge:()=>Lt,eventListener:()=>h,generateVolumePropsFromImageIds:()=>ss,genericMetadataProvider:()=>Ge,getBufferConfiguration:()=>_e,getClosestImageId:()=>zn,getClosestStackImageIndexForPoint:()=>qo,getCurrentVolumeViewportSlice:()=>zo,getImageLegacy:()=>es,getImageSliceDataForVolumeViewport:()=>Rr,getMinMax:()=>Ai,getRandomSampleFromArray:()=>fs,getRuntimeId:()=>Do,getScalingParameters:()=>Qo,getSliceRange:()=>Qn,getSpacingInNormalDirection:()=>Wn,getTargetVolumeAndSpacingInNormalDir:()=>wr,getViewportImageCornersInWorld:()=>Zo,getViewportImageIds:()=>ps,getViewportModality:()=>Es,getViewportsWithImageURI:()=>Bo,getViewportsWithVolumeId:()=>Lo,getVoiFromSigmoidRGBTransferFunction:()=>sr,getVolumeActorCorners:()=>Kn,getVolumeId:()=>pr,getVolumeSliceRangeInfo:()=>Cr,getVolumeViewportScrollInfo:()=>Er,getVolumeViewportsContainingSameVolumes:()=>ko,hasFloatScalingParameters:()=>os,hasNaNValues:()=>Mr,imageIdToURI:()=>de,imageRetrieveMetadataProvider:()=>Qr,imageToWorldCoords:()=>Wo,indexWithinDimensions:()=>Vo,invertRgbTransferFunction:()=>gr,isEqual:()=>ve,isEqualAbs:()=>Ee,isEqualNegative:()=>Ce,isImageActor:()=>Bn,isOpposite:()=>_o,isPTPrescaledWithSUV:()=>No,isValidVolume:()=>ns,isVideoTransferSyntax:()=>as,loadImageToCanvas:()=>jo,makeVolumeMetadata:()=>is,planar:()=>l,renderToCanvasCPU:()=>Fo,renderToCanvasGPU:()=>Uo,roundNumber:()=>gs,roundToPrecision:()=>us,scaleRgbTransferFunction:()=>bo,snapFocalPointToSlice:()=>er,sortImageIdsAndGetSpacing:()=>ts,spatialRegistrationMetadataProvider:()=>Ko,transferFunctionUtils:()=>c,transformIndexToWorld:()=>qr,transformWorldToIndex:()=>Fr,triggerEvent:()=>ce,updateVTKImageDataWithCornerstoneImage:()=>ea,uuidv4:()=>xe,windowLevel:()=>o,worldToImageCoords:()=>Go});var m=function(e){return e.ERROR_EVENT="CORNERSTONE_ERROR",e.CACHE_SIZE_EXCEEDED="CACHE_SIZE_EXCEEDED",e.IMAGE_LOAD_ERROR="IMAGE_LOAD_ERROR",e.CAMERA_MODIFIED="CORNERSTONE_CAMERA_MODIFIED",e.CAMERA_RESET="CORNERSTONE_CAMERA_RESET",e.VOI_MODIFIED="CORNERSTONE_VOI_MODIFIED",e.PRESET_MODIFIED="CORNERSTONE_VIEWPORT_RENDERING_PRESET_MODIFIED",e.DISPLAY_AREA_MODIFIED="CORNERSTONE_DISPLAY_AREA_MODIFIED",e.ELEMENT_DISABLED="CORNERSTONE_ELEMENT_DISABLED",e.ELEMENT_ENABLED="CORNERSTONE_ELEMENT_ENABLED",e.IMAGE_RENDERED="CORNERSTONE_IMAGE_RENDERED",e.IMAGE_VOLUME_MODIFIED="CORNERSTONE_IMAGE_VOLUME_MODIFIED",e.IMAGE_VOLUME_LOADING_COMPLETED="CORNERSTONE_IMAGE_VOLUME_LOADING_COMPLETED",e.IMAGE_LOADED="CORNERSTONE_IMAGE_LOADED",e.IMAGE_RETRIEVAL_STAGE="CORNERSTONE_IMAGE_RETRIEVAL_STAGE",e.IMAGE_LOAD_FAILED="CORNERSTONE_IMAGE_LOAD_FAILED",e.VOLUME_VIEWPORT_NEW_VOLUME="CORNERSTONE_VOLUME_VIEWPORT_NEW_VOLUME",e.VOLUME_LOADED="CORNERSTONE_VOLUME_LOADED",e.VOLUME_LOADED_FAILED="CORNERSTONE_VOLUME_LOADED_FAILED",e.IMAGE_CACHE_IMAGE_ADDED="CORNERSTONE_IMAGE_CACHE_IMAGE_ADDED",e.IMAGE_CACHE_IMAGE_REMOVED="CORNERSTONE_IMAGE_CACHE_IMAGE_REMOVED",e.VOLUME_CACHE_VOLUME_ADDED="CORNERSTONE_VOLUME_CACHE_VOLUME_ADDED",e.VOLUME_CACHE_VOLUME_REMOVED="CORNERSTONE_VOLUME_CACHE_VOLUME_REMOVED",e.STACK_NEW_IMAGE="CORNERSTONE_STACK_NEW_IMAGE",e.VOLUME_NEW_IMAGE="CORNERSTONE_VOLUME_NEW_IMAGE",e.PRE_STACK_NEW_IMAGE="CORNERSTONE_PRE_STACK_NEW_IMAGE",e.IMAGE_SPACING_CALIBRATED="CORNERSTONE_IMAGE_SPACING_CALIBRATED",e.STACK_VIEWPORT_NEW_STACK="CORNERSTONE_STACK_VIEWPORT_NEW_STACK",e.STACK_VIEWPORT_SCROLL="CORNERSTONE_STACK_VIEWPORT_SCROLL",e.GEOMETRY_CACHE_GEOMETRY_ADDED="CORNERSTONE_GEOMETRY_CACHE_GEOMETRY_ADDED",e.VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS="VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS",e.VOLUME_VIEWPORT_SCROLL="VOLUME_VIEWPORT_SCROLL",e.CLIPPING_PLANES_UPDATED="CORNERSTONE_CLIPPING_PLANES_UPDATED",e.WEB_WORKER_PROGRESS="CORNERSTONE_WEB_WORKER_PROGRESS",e.COLORMAP_MODIFIED="CORNERSTONE_COLORMAP_MODIFIED",e}(m||{});const p=m;var f=function(e){return e.Interaction="interaction",e.Thumbnail="thumbnail",e.Prefetch="prefetch",e.Compute="compute",e}(f||{});const v=f;var w=function(e){return e.STACK="stack",e.ORTHOGRAPHIC="orthographic",e.PERSPECTIVE="perspective",e.VOLUME_3D="volume3d",e.VIDEO="video",e.WholeSlide="wholeSlide",e}(w||{});const I=w;var C=function(e){return e[e.NEAREST=0]="NEAREST",e[e.LINEAR=1]="LINEAR",e[e.FAST_LINEAR=2]="FAST_LINEAR",e}(C||{});const E=C;var y=K(468),R=K.n(y);const{BlendMode:P}=R();var b=function(e){return e[e.COMPOSITE=P.COMPOSITE_BLEND]="COMPOSITE",e[e.MAXIMUM_INTENSITY_BLEND=P.MAXIMUM_INTENSITY_BLEND]="MAXIMUM_INTENSITY_BLEND",e[e.MINIMUM_INTENSITY_BLEND=P.MINIMUM_INTENSITY_BLEND]="MINIMUM_INTENSITY_BLEND",e[e.AVERAGE_INTENSITY_BLEND=P.AVERAGE_INTENSITY_BLEND]="AVERAGE_INTENSITY_BLEND",e}(b||{});const T=b;var A=function(e){return e.AXIAL="axial",e.CORONAL="coronal",e.SAGITTAL="sagittal",e.ACQUISITION="acquisition",e}(A||{});const S=A;var O=function(e){return e.CONTOUR="contour",e.SURFACE="Surface",e}(O||{});const D=O;var M=function(e){return e.CLOSED_PLANAR="CLOSED_PLANAR",e.OPEN_PLANAR="OPEN_PLANAR",e}(M||{});const x=M;var _=function(e){return e.LINEAR="LINEAR",e.SAMPLED_SIGMOID="SIGMOID",e}(_||{});const V=_;var k=function(e){return e.SUM="SUM",e.AVERAGE="AVERAGE",e.SUBTRACT="SUBTRACT",e}(k||{});const L=k,N=function(e){return e.NOT_APPLICABLE="",e.ERMF="ERMF",e.USER="User",e.PROJECTION="Proj",e.REGION="Region",e.ERROR="Error",e.UNCALIBRATED="Uncalibrated",e}({});var U=function(e){return e.NO_DATA="noData",e.LOADING="loading",e.PRE_RENDER="preRender",e.RESIZE="resize",e.RENDERED="rendered",e}(U||{});const F=U;var j=function(e){return e[e.FAR_REPLICATE=1]="FAR_REPLICATE",e[e.ADJACENT_REPLICATE=3]="ADJACENT_REPLICATE",e[e.SUBRESOLUTION=6]="SUBRESOLUTION",e[e.LOSSY=7]="LOSSY",e[e.FULL_RESOLUTION=8]="FULL_RESOLUTION",e}(j||{});const G=j;var W=function(e){return e.FRAME="f",e.SECOND="s",e}(W||{}),B=function(e){return e.CALIBRATION="calibrationModule",e.CINE="cineModule",e.GENERAL_IMAGE="generalImageModule",e.GENERAL_SERIES="generalSeriesModule",e.GENERAL_STUDY="generalStudyModule",e.IMAGE_PIXEL="imagePixelModule",e.IMAGE_PLANE="imagePlaneModule",e.IMAGE_URL="imageUrlModule",e.MODALITY_LUT="modalityLutModule",e.MULTIFRAME="multiframeModule",e.NM_MULTIFRAME_GEOMETRY="nmMultiframeGeometryModule",e.OVERLAY_PLANE="overlayPlaneModule",e.PATIENT="patientModule",e.PATIENT_STUDY="patientStudyModule",e.PET_IMAGE="petImageModule",e.PET_ISOTOPE="petIsotopeModule",e.PET_SERIES="petSeriesModule",e.SOP_COMMON="sopCommonModule",e.ULTRASOUND_ENHANCED_REGION="ultrasoundEnhancedRegionModule",e.VOI_LUT="voiLutModule",e.WADO_WEB_CLIENT="wadoWebClient",e}(B||{});const q=B;let z=function(e){return e.SUM="SUM",e.SUBTRACT="SUBTRACT",e.AVERAGE="AVERAGE",e}({});const H={hotIron:{name:"Hot Iron",numOfColors:256,colors:[[0,0,0,255],[2,0,0,255],[4,0,0,255],[6,0,0,255],[8,0,0,255],[10,0,0,255],[12,0,0,255],[14,0,0,255],[16,0,0,255],[18,0,0,255],[20,0,0,255],[22,0,0,255],[24,0,0,255],[26,0,0,255],[28,0,0,255],[30,0,0,255],[32,0,0,255],[34,0,0,255],[36,0,0,255],[38,0,0,255],[40,0,0,255],[42,0,0,255],[44,0,0,255],[46,0,0,255],[48,0,0,255],[50,0,0,255],[52,0,0,255],[54,0,0,255],[56,0,0,255],[58,0,0,255],[60,0,0,255],[62,0,0,255],[64,0,0,255],[66,0,0,255],[68,0,0,255],[70,0,0,255],[72,0,0,255],[74,0,0,255],[76,0,0,255],[78,0,0,255],[80,0,0,255],[82,0,0,255],[84,0,0,255],[86,0,0,255],[88,0,0,255],[90,0,0,255],[92,0,0,255],[94,0,0,255],[96,0,0,255],[98,0,0,255],[100,0,0,255],[102,0,0,255],[104,0,0,255],[106,0,0,255],[108,0,0,255],[110,0,0,255],[112,0,0,255],[114,0,0,255],[116,0,0,255],[118,0,0,255],[120,0,0,255],[122,0,0,255],[124,0,0,255],[126,0,0,255],[128,0,0,255],[130,0,0,255],[132,0,0,255],[134,0,0,255],[136,0,0,255],[138,0,0,255],[140,0,0,255],[142,0,0,255],[144,0,0,255],[146,0,0,255],[148,0,0,255],[150,0,0,255],[152,0,0,255],[154,0,0,255],[156,0,0,255],[158,0,0,255],[160,0,0,255],[162,0,0,255],[164,0,0,255],[166,0,0,255],[168,0,0,255],[170,0,0,255],[172,0,0,255],[174,0,0,255],[176,0,0,255],[178,0,0,255],[180,0,0,255],[182,0,0,255],[184,0,0,255],[186,0,0,255],[188,0,0,255],[190,0,0,255],[192,0,0,255],[194,0,0,255],[196,0,0,255],[198,0,0,255],[200,0,0,255],[202,0,0,255],[204,0,0,255],[206,0,0,255],[208,0,0,255],[210,0,0,255],[212,0,0,255],[214,0,0,255],[216,0,0,255],[218,0,0,255],[220,0,0,255],[222,0,0,255],[224,0,0,255],[226,0,0,255],[228,0,0,255],[230,0,0,255],[232,0,0,255],[234,0,0,255],[236,0,0,255],[238,0,0,255],[240,0,0,255],[242,0,0,255],[244,0,0,255],[246,0,0,255],[248,0,0,255],[250,0,0,255],[252,0,0,255],[254,0,0,255],[255,0,0,255],[255,2,0,255],[255,4,0,255],[255,6,0,255],[255,8,0,255],[255,10,0,255],[255,12,0,255],[255,14,0,255],[255,16,0,255],[255,18,0,255],[255,20,0,255],[255,22,0,255],[255,24,0,255],[255,26,0,255],[255,28,0,255],[255,30,0,255],[255,32,0,255],[255,34,0,255],[255,36,0,255],[255,38,0,255],[255,40,0,255],[255,42,0,255],[255,44,0,255],[255,46,0,255],[255,48,0,255],[255,50,0,255],[255,52,0,255],[255,54,0,255],[255,56,0,255],[255,58,0,255],[255,60,0,255],[255,62,0,255],[255,64,0,255],[255,66,0,255],[255,68,0,255],[255,70,0,255],[255,72,0,255],[255,74,0,255],[255,76,0,255],[255,78,0,255],[255,80,0,255],[255,82,0,255],[255,84,0,255],[255,86,0,255],[255,88,0,255],[255,90,0,255],[255,92,0,255],[255,94,0,255],[255,96,0,255],[255,98,0,255],[255,100,0,255],[255,102,0,255],[255,104,0,255],[255,106,0,255],[255,108,0,255],[255,110,0,255],[255,112,0,255],[255,114,0,255],[255,116,0,255],[255,118,0,255],[255,120,0,255],[255,122,0,255],[255,124,0,255],[255,126,0,255],[255,128,4,255],[255,130,8,255],[255,132,12,255],[255,134,16,255],[255,136,20,255],[255,138,24,255],[255,140,28,255],[255,142,32,255],[255,144,36,255],[255,146,40,255],[255,148,44,255],[255,150,48,255],[255,152,52,255],[255,154,56,255],[255,156,60,255],[255,158,64,255],[255,160,68,255],[255,162,72,255],[255,164,76,255],[255,166,80,255],[255,168,84,255],[255,170,88,255],[255,172,92,255],[255,174,96,255],[255,176,100,255],[255,178,104,255],[255,180,108,255],[255,182,112,255],[255,184,116,255],[255,186,120,255],[255,188,124,255],[255,190,128,255],[255,192,132,255],[255,194,136,255],[255,196,140,255],[255,198,144,255],[255,200,148,255],[255,202,152,255],[255,204,156,255],[255,206,160,255],[255,208,164,255],[255,210,168,255],[255,212,172,255],[255,214,176,255],[255,216,180,255],[255,218,184,255],[255,220,188,255],[255,222,192,255],[255,224,196,255],[255,226,200,255],[255,228,204,255],[255,230,208,255],[255,232,212,255],[255,234,216,255],[255,236,220,255],[255,238,224,255],[255,240,228,255],[255,242,232,255],[255,244,236,255],[255,246,240,255],[255,248,244,255],[255,250,248,255],[255,252,252,255],[255,255,255,255]]},pet:{name:"PET",numColors:256,colors:[[0,0,0,255],[0,2,1,255],[0,4,3,255],[0,6,5,255],[0,8,7,255],[0,10,9,255],[0,12,11,255],[0,14,13,255],[0,16,15,255],[0,18,17,255],[0,20,19,255],[0,22,21,255],[0,24,23,255],[0,26,25,255],[0,28,27,255],[0,30,29,255],[0,32,31,255],[0,34,33,255],[0,36,35,255],[0,38,37,255],[0,40,39,255],[0,42,41,255],[0,44,43,255],[0,46,45,255],[0,48,47,255],[0,50,49,255],[0,52,51,255],[0,54,53,255],[0,56,55,255],[0,58,57,255],[0,60,59,255],[0,62,61,255],[0,65,63,255],[0,67,65,255],[0,69,67,255],[0,71,69,255],[0,73,71,255],[0,75,73,255],[0,77,75,255],[0,79,77,255],[0,81,79,255],[0,83,81,255],[0,85,83,255],[0,87,85,255],[0,89,87,255],[0,91,89,255],[0,93,91,255],[0,95,93,255],[0,97,95,255],[0,99,97,255],[0,101,99,255],[0,103,101,255],[0,105,103,255],[0,107,105,255],[0,109,107,255],[0,111,109,255],[0,113,111,255],[0,115,113,255],[0,117,115,255],[0,119,117,255],[0,121,119,255],[0,123,121,255],[0,125,123,255],[0,128,125,255],[1,126,127,255],[3,124,129,255],[5,122,131,255],[7,120,133,255],[9,118,135,255],[11,116,137,255],[13,114,139,255],[15,112,141,255],[17,110,143,255],[19,108,145,255],[21,106,147,255],[23,104,149,255],[25,102,151,255],[27,100,153,255],[29,98,155,255],[31,96,157,255],[33,94,159,255],[35,92,161,255],[37,90,163,255],[39,88,165,255],[41,86,167,255],[43,84,169,255],[45,82,171,255],[47,80,173,255],[49,78,175,255],[51,76,177,255],[53,74,179,255],[55,72,181,255],[57,70,183,255],[59,68,185,255],[61,66,187,255],[63,64,189,255],[65,63,191,255],[67,61,193,255],[69,59,195,255],[71,57,197,255],[73,55,199,255],[75,53,201,255],[77,51,203,255],[79,49,205,255],[81,47,207,255],[83,45,209,255],[85,43,211,255],[86,41,213,255],[88,39,215,255],[90,37,217,255],[92,35,219,255],[94,33,221,255],[96,31,223,255],[98,29,225,255],[100,27,227,255],[102,25,229,255],[104,23,231,255],[106,21,233,255],[108,19,235,255],[110,17,237,255],[112,15,239,255],[114,13,241,255],[116,11,243,255],[118,9,245,255],[120,7,247,255],[122,5,249,255],[124,3,251,255],[126,1,253,255],[128,0,255,255],[130,2,252,255],[132,4,248,255],[134,6,244,255],[136,8,240,255],[138,10,236,255],[140,12,232,255],[142,14,228,255],[144,16,224,255],[146,18,220,255],[148,20,216,255],[150,22,212,255],[152,24,208,255],[154,26,204,255],[156,28,200,255],[158,30,196,255],[160,32,192,255],[162,34,188,255],[164,36,184,255],[166,38,180,255],[168,40,176,255],[170,42,172,255],[171,44,168,255],[173,46,164,255],[175,48,160,255],[177,50,156,255],[179,52,152,255],[181,54,148,255],[183,56,144,255],[185,58,140,255],[187,60,136,255],[189,62,132,255],[191,64,128,255],[193,66,124,255],[195,68,120,255],[197,70,116,255],[199,72,112,255],[201,74,108,255],[203,76,104,255],[205,78,100,255],[207,80,96,255],[209,82,92,255],[211,84,88,255],[213,86,84,255],[215,88,80,255],[217,90,76,255],[219,92,72,255],[221,94,68,255],[223,96,64,255],[225,98,60,255],[227,100,56,255],[229,102,52,255],[231,104,48,255],[233,106,44,255],[235,108,40,255],[237,110,36,255],[239,112,32,255],[241,114,28,255],[243,116,24,255],[245,118,20,255],[247,120,16,255],[249,122,12,255],[251,124,8,255],[253,126,4,255],[255,128,0,255],[255,130,4,255],[255,132,8,255],[255,134,12,255],[255,136,16,255],[255,138,20,255],[255,140,24,255],[255,142,28,255],[255,144,32,255],[255,146,36,255],[255,148,40,255],[255,150,44,255],[255,152,48,255],[255,154,52,255],[255,156,56,255],[255,158,60,255],[255,160,64,255],[255,162,68,255],[255,164,72,255],[255,166,76,255],[255,168,80,255],[255,170,85,255],[255,172,89,255],[255,174,93,255],[255,176,97,255],[255,178,101,255],[255,180,105,255],[255,182,109,255],[255,184,113,255],[255,186,117,255],[255,188,121,255],[255,190,125,255],[255,192,129,255],[255,194,133,255],[255,196,137,255],[255,198,141,255],[255,200,145,255],[255,202,149,255],[255,204,153,255],[255,206,157,255],[255,208,161,255],[255,210,165,255],[255,212,170,255],[255,214,174,255],[255,216,178,255],[255,218,182,255],[255,220,186,255],[255,222,190,255],[255,224,194,255],[255,226,198,255],[255,228,202,255],[255,230,206,255],[255,232,210,255],[255,234,214,255],[255,236,218,255],[255,238,222,255],[255,240,226,255],[255,242,230,255],[255,244,234,255],[255,246,238,255],[255,248,242,255],[255,250,246,255],[255,252,250,255],[255,255,255,255]]},hotMetalBlue:{name:"Hot Metal Blue",numColors:256,colors:[[0,0,0,255],[0,0,2,255],[0,0,4,255],[0,0,6,255],[0,0,8,255],[0,0,10,255],[0,0,12,255],[0,0,14,255],[0,0,16,255],[0,0,17,255],[0,0,19,255],[0,0,21,255],[0,0,23,255],[0,0,25,255],[0,0,27,255],[0,0,29,255],[0,0,31,255],[0,0,33,255],[0,0,35,255],[0,0,37,255],[0,0,39,255],[0,0,41,255],[0,0,43,255],[0,0,45,255],[0,0,47,255],[0,0,49,255],[0,0,51,255],[0,0,53,255],[0,0,55,255],[0,0,57,255],[0,0,59,255],[0,0,61,255],[0,0,63,255],[0,0,65,255],[0,0,67,255],[0,0,69,255],[0,0,71,255],[0,0,73,255],[0,0,75,255],[0,0,77,255],[0,0,79,255],[0,0,81,255],[0,0,83,255],[0,0,84,255],[0,0,86,255],[0,0,88,255],[0,0,90,255],[0,0,92,255],[0,0,94,255],[0,0,96,255],[0,0,98,255],[0,0,100,255],[0,0,102,255],[0,0,104,255],[0,0,106,255],[0,0,108,255],[0,0,110,255],[0,0,112,255],[0,0,114,255],[0,0,116,255],[0,0,117,255],[0,0,119,255],[0,0,121,255],[0,0,123,255],[0,0,125,255],[0,0,127,255],[0,0,129,255],[0,0,131,255],[0,0,133,255],[0,0,135,255],[0,0,137,255],[0,0,139,255],[0,0,141,255],[0,0,143,255],[0,0,145,255],[0,0,147,255],[0,0,149,255],[0,0,151,255],[0,0,153,255],[0,0,155,255],[0,0,157,255],[0,0,159,255],[0,0,161,255],[0,0,163,255],[0,0,165,255],[0,0,167,255],[3,0,169,255],[6,0,171,255],[9,0,173,255],[12,0,175,255],[15,0,177,255],[18,0,179,255],[21,0,181,255],[24,0,183,255],[26,0,184,255],[29,0,186,255],[32,0,188,255],[35,0,190,255],[38,0,192,255],[41,0,194,255],[44,0,196,255],[47,0,198,255],[50,0,200,255],[52,0,197,255],[55,0,194,255],[57,0,191,255],[59,0,188,255],[62,0,185,255],[64,0,182,255],[66,0,179,255],[69,0,176,255],[71,0,174,255],[74,0,171,255],[76,0,168,255],[78,0,165,255],[81,0,162,255],[83,0,159,255],[85,0,156,255],[88,0,153,255],[90,0,150,255],[93,2,144,255],[96,4,138,255],[99,6,132,255],[102,8,126,255],[105,9,121,255],[108,11,115,255],[111,13,109,255],[114,15,103,255],[116,17,97,255],[119,19,91,255],[122,21,85,255],[125,23,79,255],[128,24,74,255],[131,26,68,255],[134,28,62,255],[137,30,56,255],[140,32,50,255],[143,34,47,255],[146,36,44,255],[149,38,41,255],[152,40,38,255],[155,41,35,255],[158,43,32,255],[161,45,29,255],[164,47,26,255],[166,49,24,255],[169,51,21,255],[172,53,18,255],[175,55,15,255],[178,56,12,255],[181,58,9,255],[184,60,6,255],[187,62,3,255],[190,64,0,255],[194,66,0,255],[198,68,0,255],[201,70,0,255],[205,72,0,255],[209,73,0,255],[213,75,0,255],[217,77,0,255],[221,79,0,255],[224,81,0,255],[228,83,0,255],[232,85,0,255],[236,87,0,255],[240,88,0,255],[244,90,0,255],[247,92,0,255],[251,94,0,255],[255,96,0,255],[255,98,3,255],[255,100,6,255],[255,102,9,255],[255,104,12,255],[255,105,15,255],[255,107,18,255],[255,109,21,255],[255,111,24,255],[255,113,26,255],[255,115,29,255],[255,117,32,255],[255,119,35,255],[255,120,38,255],[255,122,41,255],[255,124,44,255],[255,126,47,255],[255,128,50,255],[255,130,53,255],[255,132,56,255],[255,134,59,255],[255,136,62,255],[255,137,65,255],[255,139,68,255],[255,141,71,255],[255,143,74,255],[255,145,76,255],[255,147,79,255],[255,149,82,255],[255,151,85,255],[255,152,88,255],[255,154,91,255],[255,156,94,255],[255,158,97,255],[255,160,100,255],[255,162,103,255],[255,164,106,255],[255,166,109,255],[255,168,112,255],[255,169,115,255],[255,171,118,255],[255,173,121,255],[255,175,124,255],[255,177,126,255],[255,179,129,255],[255,181,132,255],[255,183,135,255],[255,184,138,255],[255,186,141,255],[255,188,144,255],[255,190,147,255],[255,192,150,255],[255,194,153,255],[255,196,156,255],[255,198,159,255],[255,200,162,255],[255,201,165,255],[255,203,168,255],[255,205,171,255],[255,207,174,255],[255,209,176,255],[255,211,179,255],[255,213,182,255],[255,215,185,255],[255,216,188,255],[255,218,191,255],[255,220,194,255],[255,222,197,255],[255,224,200,255],[255,226,203,255],[255,228,206,255],[255,229,210,255],[255,231,213,255],[255,233,216,255],[255,235,219,255],[255,237,223,255],[255,239,226,255],[255,240,229,255],[255,242,232,255],[255,244,236,255],[255,246,239,255],[255,248,242,255],[255,250,245,255],[255,251,249,255],[255,253,252,255],[255,255,255,255]]},pet20Step:{name:"PET 20 Step",numColors:256,colors:[[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255]]},gray:{name:"Gray",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,0,0],[1,1,1]]}},jet:{name:"Jet",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.35,0,0],[.66,1,1],[.89,1,1],[1,.5,.5]],green:[[0,0,0],[.125,0,0],[.375,1,1],[.64,1,1],[.91,0,0],[1,0,0]],blue:[[0,.5,.5],[.11,1,1],[.34,1,1],[.65,0,0],[1,0,0]]}},hsv:{name:"HSV",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[.15873,1,1],[.174603,.96875,.96875],[.333333,.03125,.03125],[.349206,0,0],[.666667,0,0],[.68254,.03125,.03125],[.84127,.96875,.96875],[.857143,1,1],[1,1,1]],green:[[0,0,0],[.15873,.9375,.9375],[.174603,1,1],[.507937,1,1],[.666667,.0625,.0625],[.68254,0,0],[1,0,0]],blue:[[0,0,0],[.333333,0,0],[.349206,.0625,.0625],[.507937,1,1],[.84127,1,1],[.857143,.9375,.9375],[1,.09375,.09375]]}},hot:{name:"Hot",numColors:256,gamma:1,segmentedData:{red:[[0,.0416,.0416],[.365079,1,1],[1,1,1]],green:[[0,0,0],[.365079,0,0],[.746032,1,1],[1,1,1]],blue:[[0,0,0],[.746032,0,0],[1,1,1]]}},cool:{name:"Cool",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,1,1],[1,0,0]],blue:[[0,1,1],[1,1,1]]}},spring:{name:"Spring",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,1,1],[1,0,0]]}},summer:{name:"Summer",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,.5,.5],[1,1,1]],blue:[[0,.4,.4],[1,.4,.4]]}},autumn:{name:"Autumn",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,0,0],[1,0,0]]}},winter:{name:"Winter",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,0,0]],green:[[0,0,0],[1,1,1]],blue:[[0,1,1],[1,.5,.5]]}},bone:{name:"Bone",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.746032,.652778,.652778],[1,1,1]],green:[[0,0,0],[.365079,.319444,.319444],[.746032,.777778,.777778],[1,1,1]],blue:[[0,0,0],[.365079,.444444,.444444],[1,1,1]]}},copper:{name:"Copper",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.809524,1,1],[1,1,1]],green:[[0,0,0],[1,.7812,.7812]],blue:[[0,0,0],[1,.4975,.4975]]}},spectral:{name:"Spectral",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.05,.4667,.4667],[.1,.5333,.5333],[.15,0,0],[.2,0,0],[.25,0,0],[.3,0,0],[.35,0,0],[.4,0,0],[.45,0,0],[.5,0,0],[.55,0,0],[.6,0,0],[.65,.7333,.7333],[.7,.9333,.9333],[.75,1,1],[.8,1,1],[.85,1,1],[.9,.8667,.8667],[.95,.8,.8],[1,.8,.8]],green:[[0,0,0],[.05,0,0],[.1,0,0],[.15,0,0],[.2,0,0],[.25,.4667,.4667],[.3,.6,.6],[.35,.6667,.6667],[.4,.6667,.6667],[.45,.6,.6],[.5,.7333,.7333],[.55,.8667,.8667],[.6,1,1],[.65,1,1],[.7,.9333,.9333],[.75,.8,.8],[.8,.6,.6],[.85,0,0],[.9,0,0],[.95,0,0],[1,.8,.8]],blue:[[0,0,0],[.05,.5333,.5333],[.1,.6,.6],[.15,.6667,.6667],[.2,.8667,.8667],[.25,.8667,.8667],[.3,.8667,.8667],[.35,.6667,.6667],[.4,.5333,.5333],[.45,0,0],[.5,0,0],[.55,0,0],[.6,0,0],[.65,0,0],[.7,0,0],[.75,0,0],[.8,0,0],[.85,0,0],[.9,0,0],[.95,0,0],[1,.8,.8]]}},coolwarm:{name:"CoolWarm",numColors:256,gamma:1,segmentedData:{red:[[0,.2298057,.2298057],[.03125,.26623388,.26623388],[.0625,.30386891,.30386891],[.09375,.342804478,.342804478],[.125,.38301334,.38301334],[.15625,.424369608,.424369608],[.1875,.46666708,.46666708],[.21875,.509635204,.509635204],[.25,.552953156,.552953156],[.28125,.596262162,.596262162],[.3125,.639176211,.639176211],[.34375,.681291281,.681291281],[.375,.722193294,.722193294],[.40625,.761464949,.761464949],[.4375,.798691636,.798691636],[.46875,.833466556,.833466556],[.5,.865395197,.865395197],[.53125,.897787179,.897787179],[.5625,.924127593,.924127593],[.59375,.944468518,.944468518],[.625,.958852946,.958852946],[.65625,.96732803,.96732803],[.6875,.969954137,.969954137],[.71875,.966811177,.966811177],[.75,.958003065,.958003065],[.78125,.943660866,.943660866],[.8125,.923944917,.923944917],[.84375,.89904617,.89904617],[.875,.869186849,.869186849],[.90625,.834620542,.834620542],[.9375,.795631745,.795631745],[.96875,.752534934,.752534934],[1,.705673158,.705673158]],green:[[0,.298717966,.298717966],[.03125,.353094838,.353094838],[.0625,.406535296,.406535296],[.09375,.458757618,.458757618],[.125,.50941904,.50941904],[.15625,.558148092,.558148092],[.1875,.604562568,.604562568],[.21875,.648280772,.648280772],[.25,.688929332,.688929332],[.28125,.726149107,.726149107],[.3125,.759599947,.759599947],[.34375,.788964712,.788964712],[.375,.813952739,.813952739],[.40625,.834302879,.834302879],[.4375,.849786142,.849786142],[.46875,.860207984,.860207984],[.5,.86541021,.86541021],[.53125,.848937047,.848937047],[.5625,.827384882,.827384882],[.59375,.800927443,.800927443],[.625,.769767752,.769767752],[.65625,.734132809,.734132809],[.6875,.694266682,.694266682],[.71875,.650421156,.650421156],[.75,.602842431,.602842431],[.78125,.551750968,.551750968],[.8125,.49730856,.49730856],[.84375,.439559467,.439559467],[.875,.378313092,.378313092],[.90625,.312874446,.312874446],[.9375,.24128379,.24128379],[.96875,.157246067,.157246067],[1,.01555616,.01555616]],blue:[[0,.753683153,.753683153],[.03125,.801466763,.801466763],[.0625,.84495867,.84495867],[.09375,.883725899,.883725899],[.125,.917387822,.917387822],[.15625,.945619588,.945619588],[.1875,.968154911,.968154911],[.21875,.98478814,.98478814],[.25,.995375608,.995375608],[.28125,.999836203,.999836203],[.3125,.998151185,.998151185],[.34375,.990363227,.990363227],[.375,.976574709,.976574709],[.40625,.956945269,.956945269],[.4375,.931688648,.931688648],[.46875,.901068838,.901068838],[.5,.865395561,.865395561],[.53125,.820880546,.820880546],[.5625,.774508472,.774508472],[.59375,.726736146,.726736146],[.625,.678007945,.678007945],[.65625,.628751763,.628751763],[.6875,.579375448,.579375448],[.71875,.530263762,.530263762],[.75,.481775914,.481775914],[.78125,.434243684,.434243684],[.8125,.387970225,.387970225],[.84375,.343229596,.343229596],[.875,.300267182,.300267182],[.90625,.259301199,.259301199],[.9375,.220525627,.220525627],[.96875,.184115123,.184115123],[1,.150232812,.150232812]]}},blues:{name:"Blues",numColors:256,gamma:1,segmentedData:{red:[[0,.9686274528503418,.9686274528503418],[.125,.8705882430076599,.8705882430076599],[.25,.7764706015586853,.7764706015586853],[.375,.6196078658103943,.6196078658103943],[.5,.41960784792900085,.41960784792900085],[.625,.25882354378700256,.25882354378700256],[.75,.12941177189350128,.12941177189350128],[.875,.0313725508749485,.0313725508749485],[1,.0313725508749485,.0313725508749485]],green:[[0,.9843137264251709,.9843137264251709],[.125,.9215686321258545,.9215686321258545],[.25,.8588235378265381,.8588235378265381],[.375,.7921568751335144,.7921568751335144],[.5,.6823529601097107,.6823529601097107],[.625,.572549045085907,.572549045085907],[.75,.4431372582912445,.4431372582912445],[.875,.3176470696926117,.3176470696926117],[1,.1882352977991104,.1882352977991104]],blue:[[0,1,1],[.125,.9686274528503418,.9686274528503418],[.25,.9372549057006836,.9372549057006836],[.375,.8823529481887817,.8823529481887817],[.5,.8392156958580017,.8392156958580017],[.625,.7764706015586853,.7764706015586853],[.75,.7098039388656616,.7098039388656616],[.875,.6117647290229797,.6117647290229797],[1,.41960784792900085,.41960784792900085]]}}},$={MINIMUM_SLAB_THICKNESS:.05,MAXIMUM_RAY_DISTANCE:1e6};Object.freeze($);const Z=$,J=.001,X=function e(t){const i=Object.getOwnPropertyNames(t);for(const n of i){const i=t[n];i&&"object"==typeof i&&e(i)}return Object.freeze(t)}({axial:{viewPlaneNormal:[0,0,-1],viewUp:[0,-1,0]},sagittal:{viewPlaneNormal:[1,0,0],viewUp:[0,0,1]},coronal:{viewPlaneNormal:[0,-1,0],viewUp:[0,0,1]}}),Q=[{name:"CT-AAA",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"12 -3024 0 143.556 0 166.222 0.686275 214.389 0.696078 419.736 0.833333 3071 0.803922",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"24 -3024 0 0 0 143.556 0.615686 0.356863 0.184314 166.222 0.882353 0.603922 0.290196 214.389 1 1 1 419.736 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-AAA2",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"16 -3024 0 129.542 0 145.244 0.166667 157.02 0.5 169.918 0.627451 395.575 0.8125 1578.73 0.8125 3071 0.8125",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"32 -3024 0 0 0 129.542 0.54902 0.25098 0.14902 145.244 0.6 0.627451 0.843137 157.02 0.890196 0.47451 0.6 169.918 0.992157 0.870588 0.392157 395.575 1 0.886275 0.658824 1578.73 1 0.829256 0.957922 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Bone",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"8 -3024 0 -16.4458 0 641.385 0.715686 3071 0.705882",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"16 -3024 0 0 0 -16.4458 0.729412 0.254902 0.301961 641.385 0.905882 0.815686 0.552941 3071 1 1 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Bones",gradientOpacity:"4 0 1 985.12 1",specularPower:"1",scalarOpacity:"8 -1000 0 152.19 0 278.93 0.190476 952 0.2",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"20 -1000 0.3 0.3 1 -488 0.3 1 0.3 463.28 1 0 0 659.15 1 0.912535 0.0374849 953 1 0.3 0.3",diffuse:"1",interpolation:"1"},{name:"CT-Cardiac",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"12 -3024 0 -77.6875 0 94.9518 0.285714 179.052 0.553571 260.439 0.848214 3071 0.875",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"24 -3024 0 0 0 -77.6875 0.54902 0.25098 0.14902 94.9518 0.882353 0.603922 0.290196 179.052 1 0.937033 0.954531 260.439 0.615686 0 0 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Cardiac2",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"12 -3024 0 42.8964 0 163.488 0.428571 277.642 0.776786 1587 0.754902 3071 0.754902",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"24 -3024 0 0 0 42.8964 0.54902 0.25098 0.14902 163.488 0.917647 0.639216 0.0588235 277.642 1 0.878431 0.623529 1587 1 1 1 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Cardiac3",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"14 -3024 0 -86.9767 0 45.3791 0.169643 139.919 0.589286 347.907 0.607143 1224.16 0.607143 3071 0.616071",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"28 -3024 0 0 0 -86.9767 0 0.25098 1 45.3791 1 0 0 139.919 1 0.894893 0.894893 347.907 1 1 0.25098 1224.16 1 1 1 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Chest-Contrast-Enhanced",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"10 -3024 0 67.0106 0 251.105 0.446429 439.291 0.625 3071 0.616071",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"20 -3024 0 0 0 67.0106 0.54902 0.25098 0.14902 251.105 0.882353 0.603922 0.290196 439.291 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Chest-Vessels",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"10 -3024 0 -1278.35 0 22.8277 0.428571 439.291 0.625 3071 0.616071",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"20 -3024 0 0 0 -1278.35 0.54902 0.25098 0.14902 22.8277 0.882353 0.603922 0.290196 439.291 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"1",interpolation:"1"},{name:"CT-Coronary-Arteries",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"12 -2048 0 136.47 0 159.215 0.258929 318.43 0.571429 478.693 0.776786 3661 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"24 -2048 0 0 0 136.47 0 0 0 159.215 0.159804 0.159804 0.159804 318.43 0.764706 0.764706 0.764706 478.693 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Coronary-Arteries-2",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"14 -2048 0 142.677 0 145.016 0.116071 192.174 0.5625 217.24 0.776786 384.347 0.830357 3661 0.830357",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"28 -2048 0 0 0 142.677 0 0 0 145.016 0.615686 0 0.0156863 192.174 0.909804 0.454902 0 217.24 0.972549 0.807843 0.611765 384.347 0.909804 0.909804 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Coronary-Arteries-3",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"14 -2048 0 128.643 0 129.982 0.0982143 173.636 0.669643 255.884 0.857143 584.878 0.866071 3661 1",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"28 -2048 0 0 0 128.643 0 0 0 129.982 0.615686 0 0.0156863 173.636 0.909804 0.454902 0 255.884 0.886275 0.886275 0.886275 584.878 0.968627 0.968627 0.968627 3661 1 1 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Cropped-Volume-Bone",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"10 -2048 0 -451 0 -450 1 1050 1 3661 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"20 -2048 0 0 0 -451 0 0 0 -450 0.0556356 0.0556356 0.0556356 1050 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Fat",gradientOpacity:"6 0 1 985.12 1 988 1",specularPower:"1",scalarOpacity:"14 -1000 0 -100 0 -99 0.15 -60 0.15 -59 0 101.2 0 952 0",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"36 -1000 0.3 0.3 1 -497.5 0.3 1 0.3 -99 0 0 1 -76.946 0 1 0 -65.481 0.835431 0.888889 0.0165387 83.89 1 0 0 463.28 1 0 0 659.15 1 0.912535 0.0374849 2952 1 0.300267 0.299886",diffuse:"1",interpolation:"1"},{name:"CT-Liver-Vasculature",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"14 -2048 0 149.113 0 157.884 0.482143 339.96 0.660714 388.526 0.830357 1197.95 0.839286 3661 0.848214",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"28 -2048 0 0 0 149.113 0 0 0 157.884 0.501961 0.25098 0 339.96 0.695386 0.59603 0.36886 388.526 0.854902 0.85098 0.827451 1197.95 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Lung",gradientOpacity:"6 0 1 985.12 1 988 1",specularPower:"1",scalarOpacity:"12 -1000 0 -600 0 -599 0.15 -400 0.15 -399 0 2952 0",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"24 -1000 0.3 0.3 1 -600 0 0 1 -530 0.134704 0.781726 0.0724558 -460 0.929244 1 0.109473 -400 0.888889 0.254949 0.0240258 2952 1 0.3 0.3",diffuse:"1",interpolation:"1"},{name:"CT-MIP",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"8 -3024 0 -637.62 0 700 1 3071 1",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"16 -3024 0 0 0 -637.62 1 1 1 700 1 1 1 3071 1 1 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Muscle",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"10 -3024 0 -155.407 0 217.641 0.676471 419.736 0.833333 3071 0.803922",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"20 -3024 0 0 0 -155.407 0.54902 0.25098 0.14902 217.641 0.882353 0.603922 0.290196 419.736 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Pulmonary-Arteries",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"14 -2048 0 -568.625 0 -364.081 0.0714286 -244.813 0.401786 18.2775 0.607143 447.798 0.830357 3592.73 0.839286",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"28 -2048 0 0 0 -568.625 0 0 0 -364.081 0.396078 0.301961 0.180392 -244.813 0.611765 0.352941 0.0705882 18.2775 0.843137 0.0156863 0.156863 447.798 0.752941 0.752941 0.752941 3592.73 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Soft-Tissue",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"10 -2048 0 -167.01 0 -160 1 240 1 3661 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"20 -2048 0 0 0 -167.01 0 0 0 -160 0.0556356 0.0556356 0.0556356 240 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Air",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"8 -3024 0.705882 -900.0 0.715686 -500.0 0 3071 0",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"16 -3024 1 1 1 -900.0 0.2 1.0 1.0 -500.0 0.3 0.3 1.0 3071 0 0 0 ",diffuse:"0.9",interpolation:"1"},{name:"MR-Angio",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"12 -2048 0 151.354 0 158.279 0.4375 190.112 0.580357 200.873 0.732143 3661 0.741071",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"24 -2048 0 0 0 151.354 0 0 0 158.279 0.74902 0.376471 0 190.112 1 0.866667 0.733333 200.873 0.937255 0.937255 0.937255 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"MR-Default",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"12 0 0 20 0 40 0.15 120 0.3 220 0.375 1024 0.5",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"24 0 0 0 0 20 0.168627 0 0 40 0.403922 0.145098 0.0784314 120 0.780392 0.607843 0.380392 220 0.847059 0.835294 0.788235 1024 1 1 1",diffuse:"1",interpolation:"1"},{name:"MR-MIP",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"8 0 0 98.3725 0 416.637 1 2800 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"16 0 1 1 1 98.3725 1 1 1 416.637 1 1 1 2800 1 1 1",diffuse:"1",interpolation:"1"},{name:"MR-T2-Brain",gradientOpacity:"4 0 1 160.25 1",specularPower:"40",scalarOpacity:"10 0 0 36.05 0 218.302 0.171429 412.406 1 641 1",specular:"0.5",shade:"1",ambient:"0.3",colorTransfer:"16 0 0 0 0 98.7223 0.956863 0.839216 0.192157 412.406 0 0.592157 0.807843 641 1 1 1",diffuse:"0.6",interpolation:"1"},{name:"DTI-FA-Brain",gradientOpacity:"4 0 1 0.9950 1",specularPower:"40",scalarOpacity:"16 0 0 0 0 0.3501 0.0158 0.49379 0.7619 0.6419 1 0.9920 1 0.9950 0 0.9950 0",specular:"0.5",shade:"1",ambient:"0.3",colorTransfer:"28 0 1 0 0 0 1 0 0 0.24974 0.4941 1 0 0.49949 0 0.9882 1 0.7492 0.51764 0 1 0.9950 1 0 0 0.9950 1 0 0",diffuse:"0.9",interpolation:"1"}],ee={slicer3D:[160/255,164/255,217/255]};var te=K(739),ie=K.n(te);function ne(e){return ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ne(e)}function re(e,t,i){return(t=function(e){var t=function(e){if("object"!==ne(e)||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var i=t.call(e,"string");if("object"!==ne(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===ne(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}K(215);var ae=K(283),oe=K.n(ae),se=K(976);const le=new class{constructor(){re(this,"listeners",void 0),re(this,"debouncedListeners",void 0),this.listeners={},this.debouncedListeners={}}reset(){this.listeners={},this.debouncedListeners={}}addEventListenerOnce(e,t){const i=n=>{this.removeEventListener(e,i),t.call(this,n)};this.addEventListener(e,i)}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),-1===this.listeners[e].indexOf(t)&&this.listeners[e].push(t)}addEventListenerDebounced(e,t,i){this.debouncedListeners[e]=this.debouncedListeners[e]||{};const n=this.debouncedListeners[e];if(!n[t]){const r=e=>{n[t]&&clearTimeout(n[t].timeoutId),n[t].timeoutId=setTimeout((()=>{t.call(this,e)}),i)};n[t]={original:t,handle:r,timeoutId:null},this.addEventListener(e,r)}}removeEventListenerDebounced(e,t){if(this.debouncedListeners[e]?.[t]){const i=this.debouncedListeners[e][t];this.removeEventListener(e,i.handle),clearTimeout(i.timeoutId),delete this.debouncedListeners[e][t]}}removeEventListener(e,t){if(!this.listeners[e])return;const i=this.listeners[e],n=i.length;for(let e=0;e<n;e++)if(i[e]===t)return void i.splice(e,1)}dispatchEvent(e){if(!this.listeners[e.type])return!e.defaultPrevented;const t=this.listeners[e.type].slice(),i=t.length;for(let n=0;n<i;n++)try{t[n].call(this,e)}catch(t){console.error(`error in event listener of type: ${e.type}`,t)}return!e.defaultPrevented}};function ce(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:le,t=arguments.length>1?arguments[1]:void 0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!t)throw new Error("Event type was not defined");const n=new CustomEvent(t,{detail:i,cancelable:!0});return e?.dispatchEvent(n)}function de(e){const t=e.indexOf(":");return e.substring(t+1)}const he=new class{constructor(){re(this,"_imageCache",new Map),re(this,"_volumeCache",new Map),re(this,"_geometryCache",new Map),re(this,"_imageCacheSize",0),re(this,"_maxCacheSize",3221225472),re(this,"setMaxCacheSize",(e=>{if(!e||"number"!=typeof e){const e=`New max cacheSize ${this._maxCacheSize} should be defined and should be a number.`;throw new Error(e)}this._maxCacheSize=e})),re(this,"isCacheable",(e=>this.getBytesAvailable()+Array.from(this._imageCache.values()).reduce(((e,t)=>t.sharedCacheKey?e:e+t.sizeInBytes),0)>=e)),re(this,"getMaxCacheSize",(()=>this._maxCacheSize)),re(this,"getCacheSize",(()=>this._imageCacheSize)),re(this,"_decacheImage",(e=>{const t=this._imageCache.get(e);if(!t)return;if(t.sharedCacheKey)throw new Error("Cannot decache an image with a shared cache key. You need to manually decache the volume first.");const{imageLoadObject:i}=t;i.cancelFn&&i.cancelFn(),i.decache&&i.decache(),this._imageCache.delete(e)})),re(this,"_decacheVolume",(e=>{const t=this._volumeCache.get(e);if(!t)return;const{volumeLoadObject:i,volume:n}=t;n&&(n.cancelLoading&&n.cancelLoading(),n.imageData&&n.imageData.delete(),i.cancelFn&&i.cancelFn(),n.imageIds&&n.imageIds.forEach((t=>{const i=this._imageCache.get(t);i&&i.sharedCacheKey===e&&(i.sharedCacheKey=void 0)})),this._volumeCache.delete(e))})),re(this,"purgeCache",(()=>{const e=this._imageCache.keys();for(this.purgeVolumeCache();;){const{value:t,done:i}=e.next();if(i)break;this.removeImageLoadObject(t),ce(le,p.IMAGE_CACHE_IMAGE_REMOVED,{imageId:t})}})),re(this,"purgeVolumeCache",(()=>{const e=this._volumeCache.keys();for(;;){const{value:t,done:i}=e.next();if(i)break;this.removeVolumeLoadObject(t),ce(le,p.VOLUME_CACHE_VOLUME_REMOVED,{volumeId:t})}})),re(this,"getVolumeLoadObject",(e=>{if(void 0===e)throw new Error("getVolumeLoadObject: volumeId must not be undefined");const t=this._volumeCache.get(e);if(t)return t.timeStamp=Date.now(),t.volumeLoadObject})),re(this,"getGeometry",(e=>{if(null==e)throw new Error("getGeometry: geometryId must not be undefined");const t=this._geometryCache.get(e);if(t)return t.timeStamp=Date.now(),t.geometry})),re(this,"getImage",(e=>{if(void 0===e)throw new Error("getImage: imageId must not be undefined");const t=this._imageCache.get(e);if(t)return t.timeStamp=Date.now(),t.image})),re(this,"getVolume",(e=>{if(void 0===e)throw new Error("getVolume: volumeId must not be undefined");const t=this._volumeCache.get(e);if(t)return t.timeStamp=Date.now(),t.volume})),re(this,"getVolumes",(()=>Array.from(this._volumeCache.values()).map((e=>e.volume)))),re(this,"filterVolumesByReferenceId",(e=>this.getVolumes().filter((t=>t.referencedVolumeId===e)))),re(this,"removeImageLoadObject",(e=>{if(void 0===e)throw new Error("removeImageLoadObject: imageId must not be undefined");const t=this._imageCache.get(e);if(!t)throw new Error("removeImageLoadObject: imageId was not present in imageCache");this.incrementImageCacheSize(-t.sizeInBytes);const i={image:t,imageId:e};ce(le,p.IMAGE_CACHE_IMAGE_REMOVED,i),this._decacheImage(e)})),re(this,"removeVolumeLoadObject",(e=>{if(void 0===e)throw new Error("removeVolumeLoadObject: volumeId must not be undefined");const t=this._volumeCache.get(e);if(!t)throw new Error("removeVolumeLoadObject: volumeId was not present in volumeCache");const i={volume:t,volumeId:e};ce(le,p.VOLUME_CACHE_VOLUME_REMOVED,i),this._decacheVolume(e)})),re(this,"putGeometryLoadObject",((e,t)=>{if(null==e)throw new Error("putGeometryLoadObject: geometryId must not be undefined");if(this._geometryCache.has(e))throw new Error("putGeometryLoadObject: geometryId already present in geometryCache");const i={geometryId:e,geometryLoadObject:t,loaded:!1,timeStamp:Date.now(),sizeInBytes:0};return this._geometryCache.set(e,i),t.promise.then((t=>{if(!this._geometryCache.has(e))return void console.warn("putGeometryLoadObject: geometryId was removed from geometryCache");if(Number.isNaN(t.sizeInBytes))throw new Error("putGeometryLoadObject: geometry.sizeInBytes is not a number");i.loaded=!0,i.geometry=t,i.sizeInBytes=t.sizeInBytes;const n={geometry:t,geometryId:e};ce(le,p.GEOMETRY_CACHE_GEOMETRY_ADDED,n)})).catch((t=>{throw this._geometryCache.delete(e),t}))})),re(this,"incrementImageCacheSize",(e=>{this._imageCacheSize+=e})),re(this,"decrementImageCacheSize",(e=>{this._imageCacheSize-=e}))}getBytesAvailable(){return this.getMaxCacheSize()-this.getCacheSize()}decacheIfNecessaryUntilBytesAvailable(e,t){let i=this.getBytesAvailable();if(i>=e)return i;const n=Array.from(this._imageCache.values()).filter((e=>!e.sharedCacheKey));n.sort((function(e,t){return e.timeStamp>t.timeStamp?1:e.timeStamp<t.timeStamp?-1:0}));const r=n.map((e=>e.imageId));let a=r;t&&(a=r.filter((e=>!t.includes(e))));for(const t of a)if(this.removeImageLoadObject(t),ce(le,p.IMAGE_CACHE_IMAGE_REMOVED,{imageId:t}),i=this.getBytesAvailable(),i>=e)return i;for(const t of r)if(this.removeImageLoadObject(t),ce(le,p.IMAGE_CACHE_IMAGE_REMOVED,{imageId:t}),i=this.getBytesAvailable(),i>=e)return i}_putImageCommon(e,t,i){if(!this._imageCache.get(e))return void console.warn("The image was purged from the cache before it completed loading.");if(void 0===t.sizeInBytes||Number.isNaN(t.sizeInBytes))throw new Error("_putImageCommon: image.sizeInBytes must not be undefined");if(void 0===t.sizeInBytes.toFixed)throw new Error("_putImageCommon: image.sizeInBytes is not a number");if(!this.isCacheable(t.sizeInBytes))throw new Error(p.CACHE_SIZE_EXCEEDED);this.decacheIfNecessaryUntilBytesAvailable(t.sizeInBytes),i.loaded=!0,i.image=t,i.sizeInBytes=t.sizeInBytes,this.incrementImageCacheSize(i.sizeInBytes);const n={image:i};ce(le,p.IMAGE_CACHE_IMAGE_ADDED,n),i.sharedCacheKey=t.sharedCacheKey}async putImageLoadObject(e,t){if(void 0===e)throw console.error("putImageLoadObject: imageId must not be undefined"),new Error("putImageLoadObject: imageId must not be undefined");if(void 0===t.promise)throw console.error("putImageLoadObject: imageLoadObject.promise must not be undefined"),new Error("putImageLoadObject: imageLoadObject.promise must not be undefined");if(this._imageCache.has(e))throw console.warn(`putImageLoadObject: imageId ${e} already in cache`),new Error("putImageLoadObject: imageId already in cache");if(t.cancelFn&&"function"!=typeof t.cancelFn)throw console.error("putImageLoadObject: imageLoadObject.cancel must be a function"),new Error("putImageLoadObject: imageLoadObject.cancel must be a function");const i={loaded:!1,imageId:e,sharedCacheKey:void 0,imageLoadObject:t,timeStamp:Date.now(),sizeInBytes:0};return this._imageCache.set(e,i),this._imageCache.set(e,i),t.promise.then((t=>{try{this._putImageCommon(e,t,i)}catch(t){throw console.debug(`Error in _putImageCommon for image ${e}:`,t),t}})).catch((t=>{throw console.debug(`Error caching image ${e}:`,t),this._imageCache.delete(e),t}))}putImageSync(e,t){if(void 0===e)throw new Error("putImageSync: imageId must not be undefined");if(this._imageCache.has(e))throw new Error("putImageSync: imageId already in cache");const i={loaded:!1,imageId:e,sharedCacheKey:void 0,imageLoadObject:{promise:Promise.resolve(t)},timeStamp:Date.now(),sizeInBytes:0};this._imageCache.set(e,i);try{this._putImageCommon(e,t,i)}catch(t){throw this._imageCache.delete(e),t}}getImageLoadObject(e){if(void 0===e)throw new Error("getImageLoadObject: imageId must not be undefined");const t=this._imageCache.get(e);if(t)return t.timeStamp=Date.now(),t.imageLoadObject}isLoaded(e){const t=this._imageCache.get(e);return!!t&&t.loaded}getVolumeContainingImageId(e){const t=Array.from(this._volumeCache.keys()),i=de(e);for(const e of t){const t=this._volumeCache.get(e);if(!t)return;const{volume:n}=t;if(!n.imageIds.length)return;const r=n.getImageURIIndex(i);if(r>-1)return{volume:n,imageIdIndex:r}}}getCachedImageBasedOnImageURI(e){const t=de(e),i=Array.from(this._imageCache.keys()).find((e=>de(e)===t));if(i)return this._imageCache.get(i)}_putVolumeCommon(e,t,i){if(!this._volumeCache.get(e))return void console.warn("The volume was purged from the cache before it completed loading.");i.loaded=!0,i.volume=t,t.imageIds?.forEach((t=>{const i=this._imageCache.get(t);i&&(i.sharedCacheKey=e)}));const n={volume:i};ce(le,p.VOLUME_CACHE_VOLUME_ADDED,n)}putVolumeSync(e,t){if(void 0===e)throw new Error("putVolumeSync: volumeId must not be undefined");if(this._volumeCache.has(e))throw new Error("putVolumeSync: volumeId already in cache");const i={loaded:!1,volumeId:e,volumeLoadObject:{promise:Promise.resolve(t)},timeStamp:Date.now(),sizeInBytes:0};this._volumeCache.set(e,i);try{this._putVolumeCommon(e,t,i)}catch(t){throw this._volumeCache.delete(e),t}}async putVolumeLoadObject(e,t){if(void 0===e)throw new Error("putVolumeLoadObject: volumeId must not be undefined");if(void 0===t.promise)throw new Error("putVolumeLoadObject: volumeLoadObject.promise must not be undefined");if(this._volumeCache.has(e))throw new Error(`putVolumeLoadObject: volumeId:${e} already in cache`);if(t.cancelFn&&"function"!=typeof t.cancelFn)throw new Error("putVolumeLoadObject: volumeLoadObject.cancel must be a function");const i={loaded:!1,volumeId:e,volumeLoadObject:t,timeStamp:Date.now(),sizeInBytes:0};return this._volumeCache.set(e,i),t.promise.then((t=>{try{this._putVolumeCommon(e,t,i)}catch(t){throw console.error(`Error in _putVolumeCommon for volume ${e}:`,t),this._volumeCache.delete(e),t}})).catch((t=>{throw this._volumeCache.delete(e),t}))}},ue=he;class ge{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;re(this,"rows",new Map),re(this,"height",1),re(this,"width",1),re(this,"depth",1),re(this,"jMultiple",1),re(this,"kMultiple",1),re(this,"numberOfComponents",1),re(this,"defaultValue",0),re(this,"pixelDataConstructor",Uint8Array),re(this,"get",(e=>{const t=e%this.jMultiple,i=(e-t)/this.jMultiple;return this.getRLE(t,i).value||this.defaultValue})),re(this,"getRun",((e,t)=>{const i=e+t*this.height;return this.rows.get(i)})),re(this,"set",((e,t)=>{if(void 0===t)throw new Error("Can't set undefined at "+e%this.width);const i=e%this.width,n=(e-i)/this.width,r=this.rows.get(n);if(!r)return void this.rows.set(n,[{start:i,end:i+1,value:t}]);const a=this.findIndex(r,i),o=r[a],s=r[a-1];if(!o)return s&&s.value===t&&s.end===i?void s.end++:void(r[a]={start:i,end:i+1,value:t});const{start:l,end:c,value:d}=o;if(t===d&&i>=l)return;const h={start:i,end:i+1,value:t},u=i>l,g=u?a+1:a,m=u?o:s;let p=u?r[a+1]:o;if(m.value===t&&m.end===i)return m.end++,void(p.value===t&&p.start===i+1?(m.end=p.end,r.splice(a,1)):p.start===i&&(p.start++,p.start===p.end&&(r.splice(a,1),p=r[a],p.start===i+1&&p.value===t&&(m.end=p.end,r.splice(a,1)))));if(p.value===t&&p.start===i+1)return p.start--,void(m.end>i&&(m.end=i,m.end===m.start&&r.splice(a,1)));if(p.start!==i||p.end!==i+1)i===p.start&&p.start++,u&&c>i+1?r.splice(g,0,h,{start:i+1,end:m.end,value:m.value}):r.splice(g,0,h),m.end>i&&(m.end=i);else{p.value=t;const e=r[a+1];e.start==i+1&&e.value===t&&(r.splice(a+1,1),p.end=e.end)}})),this.width=e,this.height=t,this.depth=i,this.jMultiple=e,this.kMultiple=this.jMultiple*t}getRLE(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;const n=this.rows.get(t+i*this.height);if(!n)return;const r=n[this.findIndex(n,e)];return e>=r.start?r:void 0}findIndex(e,t){for(let i=0;i<e.length;i++){const{end:n}=e[i];if(t<n)return i}return e.length}clear(){this.rows.clear()}keys(){return[...this.rows.keys()]}getPixelData(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1?arguments[1]:void 0;t?t.fill(0):t=new this.pixelDataConstructor(this.width*this.height*this.numberOfComponents);const{width:i,height:n,numberOfComponents:r}=this;for(let a=0;a<n;a++){const n=this.getRun(a,e);if(n)if(1===r)for(const e of n){const n=a*i,{start:r,end:o,value:s}=e;for(let e=r;e<o;e++)t[n+e]=s}else for(const e of n){const n=a*i*r,{start:o,end:s,value:l}=e;for(let e=o;e<s;e+=r)for(let i=0;i<r;i++)t[n+e+i]=l[i]}}return t}}function me(e,t,i){return Math.abs(e-t)<=i}function pe(e){return"number"==typeof e}function fe(e){return e&&"object"==typeof e&&"length"in e&&"number"==typeof e.length&&e.length>0&&"number"==typeof e[0]}function ve(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e-5;return typeof e==typeof t&&null!==e&&null!==t&&(pe(e)&&pe(t)?me(e,t,i):!(!fe(e)||!fe(t))&&function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e-5;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!me(e[n],t[n],i))return!1;return!0}(e,t,i))}const we=e=>"number"==typeof e?-e:e?.map?e.map(we):!e,Ie=e=>"number"==typeof e?Math.abs(e):e?.map?e.map(Ie):e,Ce=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;return ve(e,we(t),i)},Ee=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;return ve(Ie(e),Ie(t),i)};class ye{constructor(e,t,i){re(this,"modifiedSlices",new Set),re(this,"boundsIJK",[[1/0,-1/0],[1/0,-1/0],[1/0,-1/0]]),re(this,"map",void 0),re(this,"sourceVoxelManager",void 0),re(this,"isInObject",void 0),re(this,"dimensions",void 0),re(this,"numberOfComponents",1),re(this,"getCompleteScalarDataArray",void 0),re(this,"setCompleteScalarDataArray",void 0),re(this,"getRange",void 0),re(this,"scalarData",null),re(this,"_sliceDataCache",null),re(this,"points",void 0),re(this,"width",void 0),re(this,"frameSize",void 0),re(this,"_get",void 0),re(this,"_set",void 0),re(this,"_getConstructor",void 0),re(this,"_getScalarDataLength",void 0),re(this,"_getScalarData",void 0),re(this,"_getSliceData",void 0),re(this,"getAtIJK",((e,t,i)=>{const n=this.toIndex([e,t,i]);return this._get(n)})),re(this,"setAtIJK",((e,t,i,n)=>{const r=this.toIndex([e,t,i]);!1!==this._set(r,n)&&(this.modifiedSlices.add(i),ye.addBounds(this.boundsIJK,[e,t,i]))})),re(this,"getAtIJKPoint",(e=>{let[t,i,n]=e;return this.getAtIJK(t,i,n)})),re(this,"setAtIJKPoint",((e,t)=>{let[i,n,r]=e;this.setAtIJK(i,n,r,t)})),re(this,"getAtIndex",(e=>this._get(e))),re(this,"setAtIndex",((e,t)=>{if(!1!==this._set(e,t)){const t=this.toIJK(e);this.modifiedSlices.add(t[2]),ye.addBounds(this.boundsIJK,t)}})),re(this,"getMiddleSliceData",(()=>{const e=Math.floor(this.dimensions[2]/2);return this.getSliceData({sliceIndex:e,slicePlane:2})})),re(this,"forEach",((e,t)=>{const i=t.boundsIJK||this.getBoundsIJK(),n=t.isInObject||this.isInObject||(()=>!0),r=t.returnPoints||!1,a=t.imageData,o=i[0][0],s=i[0][1],l=i[1][0],c=i[1][1],d=i[2][0],h=i[2][1],u=[];if(a){const{imageData:i}=t,a=i.getDirection(),g=a.slice(0,3),m=a.slice(3,6),p=a.slice(6,9),f=i.getSpacing(),[v,w,I]=f,C=se.vec3.fromValues(o,l,d),E=i.indexToWorld(C),y=se.vec3.fromValues(g[0]*v,g[1]*v,g[2]*v),R=se.vec3.fromValues(m[0]*w,m[1]*w,m[2]*w),P=se.vec3.fromValues(p[0]*I,p[1]*I,p[2]*I),b=se.vec3.clone(E);for(let t=d;t<=h;t++){const i=se.vec3.clone(b);for(let i=l;i<=c;i++){const a=se.vec3.clone(b);for(let a=o;a<=s;a++){const o=[a,i,t];if(n(b,o)){const t=this.toIndex(o),i=this._get(t);r&&u.push({value:i,index:t,pointIJK:o,pointLPS:b.slice()}),e&&e({value:i,index:t,pointIJK:o,pointLPS:b})}se.vec3.add(b,b,y)}se.vec3.copy(b,a),se.vec3.add(b,b,R)}se.vec3.copy(b,i),se.vec3.add(b,b,P)}return u}if(this.map){for(const t of this.map.keys()){const i=this.toIJK(t);if(!n(null,i))continue;const a=this._get(t);r&&u.push({value:a,index:t,pointIJK:i,pointLPS:null}),e({value:a,index:t,pointIJK:i,pointLPS:null})}return u}for(let t=d;t<=h;t++){const i=t*this.frameSize;for(let a=l;a<=c;a++)for(let l=o,c=i+a*this.width+l;l<=s;l++,c++){const i=this.getAtIndex(c),o=[l,a,t];n(null,o)&&(r&&u.push({value:i,index:c,pointIJK:o,pointLPS:null}),e({value:i,index:c,pointIJK:[l,a,t],pointLPS:null}))}}return u})),re(this,"getSliceData",(e=>{let{sliceIndex:t,slicePlane:i}=e;const[n,r,a]=this.dimensions,o=n*r,s=t*o;let l;const c=this.getConstructor();if("function"!=typeof c)return new Uint8Array(0);let d;switch(i){case 0:l=r*a,d=new c(l);for(let e=0;e<r;e++)for(let i=0;i<a;i++){const r=t+e*n+i*o;this.setSliceDataValue(d,e*a+i,this._get(r))}break;case 1:l=n*a,d=new c(l);for(let e=0;e<n;e++)for(let i=0;i<a;i++){const r=e+t*n+i*o;this.setSliceDataValue(d,e+i*n,this._get(r))}break;case 2:l=n*r,d=new c(l);for(let e=0;e<l;e++)this.setSliceDataValue(d,e,this._get(s+e));break;default:throw new Error("Oblique plane - todo - implement as ortho normal vector")}return d})),re(this,"static",void 0),this.dimensions=e,this.width=e[0],this.frameSize=this.width*e[1],this._get=t,this._set=i}toIJK(e){return[e%this.width,Math.floor(e%this.frameSize/this.width),Math.floor(e/this.frameSize)]}toIndex(e){return e[0]+e[1]*this.width+e[2]*this.frameSize}getBoundsIJK(){return this.boundsIJK[0][0]<this.dimensions[0]?this.boundsIJK:this.dimensions.map((e=>[0,e-1]))}getScalarData(){if(this.scalarData)return this.scalarData;if(this._getScalarData)return this._getScalarData();throw new Error("No scalar data available")}getScalarDataLength(){if(this.scalarData)return this.scalarData.length;if(this._getScalarDataLength)return this._getScalarDataLength();throw new Error("No scalar data available")}get sizeInBytes(){return this.getScalarDataLength()*this.bytePerVoxel}get bytePerVoxel(){return this.scalarData?this.scalarData.BYTES_PER_ELEMENT:this._get(0).BYTES_PER_ELEMENT}clear(){this.map&&this.map.clear(),this.boundsIJK.map((e=>{e[0]=1/0,e[1]=-1/0})),this.modifiedSlices.clear(),this.points?.clear()}getConstructor(){return this.scalarData?this.scalarData.constructor:this._getConstructor?this._getConstructor():(console.warn("No scalar data available or can be used to get the constructor"),Float32Array)}getArrayOfSlices(){return Array.from(this.modifiedSlices)}static addBounds(e,t){e||(e=[[1/0,-1/0],[1/0,-1/0],[1/0,-1/0]]),e[0][0]=Math.min(t[0],e[0][0]),e[0][1]=Math.max(t[0],e[0][1]),e[1][0]=Math.min(t[1],e[1][0]),e[1][1]=Math.max(t[1],e[1][1]),e[2][0]=Math.min(t[2],e[2][0]),e[2][1]=Math.max(t[2],e[2][1])}addPoint(e){const t=Array.isArray(e)?e[0]+this.width*e[1]+this.frameSize*e[2]:e;this.points||(this.points=new Set),this.points.add(t)}getPoints(){return this.points?[...this.points].map((e=>this.toIJK(e))):[]}setSliceDataValue(e,t,i){if(Array.isArray(i))for(let n=0;n<i.length;n++)e[t*i.length+n]=this.toNumber(i[n]);else e[t]=this.toNumber(i)}toNumber(e){return"number"==typeof e?e:Array.isArray(e)&&e[0]||0}static _createRGBScalarVolumeVoxelManager(e){let{dimensions:t,scalarData:i,numberOfComponents:n=3}=e;const r=new ye(t,(e=>(e*=n,[i[e++],i[e++],i[e++]])),((e,t)=>{const n=!ve(i[e*=3],t);return i[e++]=t[0],i[e++]=t[1],i[e++]=t[2],n}));return r.numberOfComponents=n,r.scalarData=i,r}static createImageVolumeVoxelManager(e){let{dimensions:t,imageIds:i,numberOfComponents:n=1}=e;const r=t[0]*t[1];function a(e){const t=Math.floor(e/r),a=i[t],o=ue.getImage(a);return o?{pixelData:o.voxelManager.getScalarData(),pixelIndex:e%r*n}:(console.warn(`Image not found for imageId: ${a}`),{pixelData:null,pixelIndex:null})}const o=new ye(t,(e=>function(e){const{pixelData:t,pixelIndex:i}=a(e);return t&&null!==i?1===n?t[i]:[t[i],t[i+1],t[i+2]]:null}(e)),((e,t)=>function(e,t){const{pixelData:i,pixelIndex:r}=a(e);if(!i||null===r)return!1;let o=!1;if(1===n)i[r]!==t&&(i[r]=t,o=!0);else{const e=t;for(let t=0;t<n;t++)i[r+t]!==e[t]&&(i[r+t]=e[t],o=!0)}return o}(e,t)));return o.numberOfComponents=n,o._getConstructor=()=>{const{pixelData:e}=a(0);return e.constructor},o.getMiddleSliceData=()=>{const e=Math.floor(t[2]/2);return o.getSliceData({sliceIndex:e,slicePlane:2})},o.getRange=()=>{let e,t;for(const n of i){const i=ue.getImage(n);i.minPixelValue<e&&(e=i.minPixelValue),i.maxPixelValue>t&&(t=i.maxPixelValue)}return[e,t]},o._getScalarDataLength=()=>{const{pixelData:e}=a(0);return e.length*t[2]},o.getCompleteScalarDataArray=()=>{const e=new(o._getConstructor())(o.getScalarDataLength()),i=t[0]*t[1]*n;for(let r=0;r<t[2];r++){const{pixelData:t}=a(r*i/n);if(t){const a=r*i;if(1===n)e.set(t,a);else for(let i=0;i<t.length;i+=n)for(let r=0;r<n;r++)e[a+i+r]=t[i+r]}}return e},o.setCompleteScalarDataArray=e=>{const i=t[0]*t[1]*n,r=o._getConstructor();for(let o=0;o<t[2];o++){const{pixelData:t}=a(o*i/n);if(t&&r){const n=o*i,a=n+i,s=new r(i);s.set(e.subarray(n,a)),t.set(s)}}for(let e=0;e<t[2];e++)o.modifiedSlices.add(e);o.boundsIJK=[[0,t[0]-1],[0,t[1]-1],[0,t[2]-1]]},o}static createScalarVolumeVoxelManager(e){let{dimensions:t,scalarData:i,numberOfComponents:n=1}=e;if(3!==t.length)throw new Error("Dimensions must be provided as [number, number, number] for [width, height, depth]");if(!n&&(n=i.length/t[0]/t[1]/t[2],n>4||n<1||2===n))throw new Error(`Number of components ${n} must be 1, 3 or 4`);return n>1?ye._createRGBScalarVolumeVoxelManager({dimensions:t,scalarData:i,numberOfComponents:n}):ye._createNumberVolumeVoxelManager({dimensions:t,scalarData:i})}static createScalarDynamicVolumeVoxelManager(e){let{imageIdGroups:t,dimensions:i,timePoint:n=0,numberOfComponents:r=1}=e;if(!r){const e=ue.getImage(t[0][0]);if(!e)throw new Error("Unable to determine number of components: No image found");if(r=e.getPixelData().length/(i[0]*i[1]),r>4||r<1||2===r)throw new Error(`Number of components ${r} must be 1, 3 or 4`)}const a=t.map((e=>ye.createImageVolumeVoxelManager({dimensions:i,imageIds:e,numberOfComponents:r}))),o=new ye(i,(e=>a[n]._get(e)),((e,t)=>a[n]._set(e,t)));return o.numberOfComponents=r,o.getScalarDataLength=()=>a[n].getScalarDataLength(),o.getConstructor=()=>a[n].getConstructor(),o.getRange=()=>a[n].getRange(),o.getMiddleSliceData=()=>a[n].getMiddleSliceData(),o.setTimePoint=e=>{n=e,o._get=e=>a[n]._get(e),o._set=(e,t)=>a[n]._set(e,t)},o.getAtIndexAndTimePoint=(e,t)=>a[t]._get(e),o.getTimePointScalarData=e=>a[e].getCompleteScalarDataArray(),o.getCurrentTimePointScalarData=()=>a[n].getCompleteScalarDataArray(),o}static createImageVoxelManager(e){let{width:t,height:i,scalarData:n,numberOfComponents:r=1}=e;const a=[t,i,1];if(!r&&(r=n.length/t/i,r>4||r<1||2===r))throw new Error(`Number of components ${r} must be 1, 3 or 4`);return r>1?ye._createRGBScalarVolumeVoxelManager({dimensions:a,scalarData:n,numberOfComponents:r}):ye._createNumberVolumeVoxelManager({dimensions:a,scalarData:n})}static _createNumberVolumeVoxelManager(e){let{dimensions:t,scalarData:i}=e;const n=new ye(t,(e=>i[e]),((e,t)=>{const n=i[e]!==t;return i[e]=t,n}));return n.scalarData=i,n.getMiddleSliceData=()=>{const e=Math.floor(t[2]/2);return n.getSliceData({sliceIndex:e,slicePlane:2})},n}static createMapVoxelManager(e){let{dimension:t}=e;const i=new Map,n=new ye(t,i.get.bind(i),((e,t)=>i.set(e,t)&&!0));return n.map=i,n}static createHistoryVoxelManager(e){let{sourceVoxelManager:t}=e;const i=new Map,{dimensions:n}=t,r=new ye(n,(e=>i.get(e)),(function(e,t){if(i.has(e))t===i.get(e)&&i.delete(e);else{const n=this.sourceVoxelManager.getAtIndex(e);if(n===t)return!1;i.set(e,n)}this.sourceVoxelManager.setAtIndex(e,t)}));return r.map=i,r.scalarData=t.scalarData,r.sourceVoxelManager=t,r}static createLazyVoxelManager(e){let{dimensions:t,planeFactory:i}=e;const n=new Map,[r,a]=t,o=r*a,s=new ye(t,(e=>n.get(Math.floor(e/o))[e%o]),((e,t)=>{const s=Math.floor(e/o);let l=n.get(s);l||(l=i(r,a),n.set(s,l)),l[e%o]=t}));return s.map=n,s}static createRLEVoxelManager(e){let{dimensions:t}=e;const[i,n,r]=t,a=new ge(i,n,r),o=new ye(t,(e=>a.get(e)),((e,t)=>{a.set(e,t)}));return o.map=a,o.getPixelData=a.getPixelData.bind(a),o}static addInstanceToImage(e){const{width:t,height:i}=e,n=e.voxelManager.getScalarData();n.length>=t*i?e.voxelManager=ye.createScalarVolumeVoxelManager({dimensions:[t,i,1],scalarData:n}):(e.voxelManager=ye.createRLEVoxelManager({dimensions:[t,i,1]}),e.getPixelData=e.voxelManager.getPixelData,e.sizeInBytes=5120)}}var Re=K(197),Pe=K.n(Re),be=K(953),Te=K.n(be);const Ae={updatedFrames:[]};function Se(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ae,i),Te().extend(e,t,i),function(e,t){t.classHierarchy.push("vtkStreamingOpenGLTexture"),t.updatedFrames=[],t.volumeId=null;const i=e.create3DFilterableFromRaw;e.create3DFilterableFromRaw=(e,n,r,a,o,s,l)=>{t.inputDataType=o,t.inputNumComps=a,i(e,n,r,a,o,s,l)},e.update3DFromRaw=()=>{const{volumeId:i}=t;if(!i)return;const n=ue.getVolume(i);if(t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind(),!n.isDynamicVolume())return e.hasUpdatedFrames()&&function(){const i=ue.getVolume(t.volumeId).imageIds;for(let n=0;n<t.updatedFrames.length;n++)if(t.updatedFrames[n]){const r=ue.getImage(i[n]);if(!r)continue;const a=r.voxelManager.getScalarData(),o=t.context,s=a.constructor.name,[l]=e.updateArrayDataTypeForGL(s,[a]);e.bind();const c=n;o.texSubImage3D(t.target,0,0,0,c,t.width,t.height,1,t.format,t.openGLDataType,l),e.deactivate(),t.updatedFrames[n]=null}return t.generateMipmap&&t.context.generateMipmap(t.target),e.deactivate(),!0}();!function(){const i=ue.getVolume(t.volumeId).getCurrentTimePointImageIds();for(let n=0;n<i.length;n++){const r=i[n],a=ue.getImage(r);if(!a)continue;const o=a.voxelManager.getScalarData(),s=t.context,l=o.constructor.name,[c]=e.updateArrayDataTypeForGL(l,[o]);e.bind();let d=n;s.texSubImage3D(t.target,0,0,0,d,t.width,t.height,1,t.format,t.openGLDataType,c),e.deactivate()}t.generateMipmap&&t.context.generateMipmap(t.target),e.deactivate()}()};const n=e.modified;e.setUpdatedFrame=e=>{t.updatedFrames[e]=!0,n()},e.modified=()=>{n();const e=ue.getVolume(t.volumeId);if(!e)return;const i=e.imageIds;for(let e=0;e<i.length;e++)t.updatedFrames[e]=!0},e.hasUpdatedFrames=()=>!t.updatedFrames.length||t.updatedFrames.some((e=>e)),e.getUpdatedFrames=()=>t.updatedFrames,e.setVolumeId=e=>{t.volumeId=e},e.getVolumeId=()=>t.volumeId,e.setTextureParameters=e=>{let{width:i,height:n,depth:r,numberOfComponents:a,dataType:o}=e;t.width??=i,t.height??=n,t.depth??=r,t.inputNumComps??=a,t.inputDataType??=o},e.getTextureParameters=()=>({width:t.width,height:t.height,depth:t.depth,numberOfComponents:t.inputNumComps,dataType:t.inputDataType})}(e,t)}const Oe={newInstance:Pe().newInstance(Se,"vtkStreamingOpenGLTexture"),extend:Se};class De{constructor(e){re(this,"_imageIds",void 0),re(this,"_imageIdsIndexMap",new Map),re(this,"_imageURIsIndexMap",new Map),re(this,"numFrames",void 0),re(this,"totalNumFrames",void 0),re(this,"cornerstoneImageMetaData",null),re(this,"volumeId",void 0),re(this,"isPreScaled",!1),re(this,"dimensions",void 0),re(this,"direction",void 0),re(this,"metadata",void 0),re(this,"origin",void 0),re(this,"scaling",void 0),re(this,"spacing",void 0),re(this,"numVoxels",void 0),re(this,"imageData",void 0),re(this,"vtkOpenGLTexture",void 0),re(this,"loadStatus",void 0),re(this,"referencedVolumeId",void 0),re(this,"referencedImageIds",void 0),re(this,"hasPixelSpacing",void 0),re(this,"additionalDetails",void 0),re(this,"voxelManager",void 0),re(this,"dataType",void 0),re(this,"numTimePoints",null),re(this,"cancelLoading",void 0);const{imageIds:t,scaling:i,dimensions:n,spacing:r,origin:a,direction:o,dataType:s,volumeId:l,referencedVolumeId:c,metadata:d,referencedImageIds:h,additionalDetails:u,voxelManager:g,numberOfComponents:m}=e;if(!s)throw new Error('Data type is required, please provide a data type as string such as "Uint8Array", "Float32Array", etc.');let{imageData:p}=e;this.imageIds=t,this.volumeId=l,this.metadata=d,this.dimensions=n,this.spacing=r,this.origin=a,this.direction=o,this.dataType=s,this.vtkOpenGLTexture=Oe.newInstance(),this.vtkOpenGLTexture.setVolumeId(l),this.voxelManager=g??ye.createImageVolumeVoxelManager({dimensions:n,imageIds:t,numberOfComponents:m}),this.numVoxels=this.dimensions[0]*this.dimensions[1]*this.dimensions[2],p||(p=oe().newInstance(),p.setDimensions(n),p.setSpacing(r),p.setDirection(o),p.setOrigin(a)),p.set({dataType:s,voxelManager:this.voxelManager,id:l,numberOfComponents:m||1}),p.set({hasScalarVolume:!1}),this.imageData=p,this.numFrames=this._getNumFrames(),this._reprocessImageIds(),i&&(this.scaling=i),c&&(this.referencedVolumeId=c),h&&(this.referencedImageIds=h),u&&(this.additionalDetails=u)}get sizeInBytes(){return this.voxelManager.sizeInBytes}get imageIds(){return this._imageIds}set imageIds(e){this._imageIds=e,this._reprocessImageIds()}_reprocessImageIds(){this._imageIdsIndexMap.clear(),this._imageURIsIndexMap.clear(),this._imageIds.forEach(((e,t)=>{const i=de(e);this._imageIdsIndexMap.set(e,t),this._imageURIsIndexMap.set(i,t)}))}isDynamicVolume(){return this.numTimePoints>1}getImageIdIndex(e){return this._imageIdsIndexMap.get(e)}getImageIdByIndex(e){return this._imageIds[e]}getImageURIIndex(e){return this._imageURIsIndexMap.get(e)}destroy(){this.imageData.delete(),this.imageData=null,this.voxelManager.clear(),this.vtkOpenGLTexture.releaseGraphicsResources(),this.vtkOpenGLTexture.delete()}invalidate(){for(let e=0;e<this.imageIds.length;e++)this.vtkOpenGLTexture.setUpdatedFrame(e);this.imageData.modified()}modified(){this.imageData.modified(),this.vtkOpenGLTexture.modified(),this.numFrames=this._getNumFrames()}removeFromCache(){he.removeVolumeLoadObject(this.volumeId)}getScalarDataLength(){return this.voxelManager.getScalarDataLength()}_getNumFrames(){return this.isDynamicVolume()?this.numTimePoints:this.imageIds.length}imageIdIndexToFrameIndex(e){return e%this.numFrames}getCornerstoneImages(){const{imageIds:e}=this;return e.map((e=>he.getImage(e)))}}const Me=De;function xe(){return crypto.randomUUID()||([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)))}function _e(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{isVolumeBuffer:n=!1}=i;switch(e){case"Float32Array":return{numBytes:4*t,TypedArrayConstructor:Float32Array};case"Uint8Array":return{numBytes:t,TypedArrayConstructor:Uint8Array};case"Uint16Array":return n?(console.warn("Uint16Array is not supported for volume rendering, switching back to Float32Array"),{numBytes:4*t,TypedArrayConstructor:Float32Array}):{numBytes:2*t,TypedArrayConstructor:Uint16Array};case"Int16Array":return n?(console.warn("Int16Array is not supported for volume rendering, switching back to Float32Array"),{numBytes:4*t,TypedArrayConstructor:Float32Array}):{numBytes:2*t,TypedArrayConstructor:Int16Array};default:if(e)throw new Error("TargetBuffer should be Float32Array, Uint8Array, Uint16Array, or Int16Array");return{numBytes:4*t,TypedArrayConstructor:Float32Array}}}const Ve=[];function ke(e){let t,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;for(t=0;t<Ve.length&&!(Ve[t].priority<=i);t++);Ve.splice(t,0,{priority:i,provider:e})}function Le(e){for(let t=0;t<Ve.length;t++)if(Ve[t].provider===e){Ve.splice(t,1);break}}function Ne(){for(;Ve.length>0;)Ve.pop()}function Ue(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];for(let t=0;t<Ve.length;t++){const n=Ve[t].provider(e,...i);if(void 0!==n)return n}}let Fe={};const je={add:(e,t)=>{je.addRaw(e,{...t,metadata:structuredClone(t.metadata)})},addRaw:(e,t)=>{const i=t.type;Fe[e]||(Fe[e]={}),Fe[e][i]=t.metadata},get:(e,t)=>Fe[t]?.[e],clear:()=>{Fe={}}};ke(je.get);const Ge=je;class We{constructor(e){re(this,"id",void 0),re(this,"awake",void 0),re(this,"requestPool",void 0),re(this,"numRequests",{interaction:0,thumbnail:0,prefetch:0,compute:0}),re(this,"maxNumRequests",void 0),re(this,"grabDelay",void 0),re(this,"timeoutHandle",void 0),this.id=e||xe(),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,i){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const r={requestFn:e,type:t,additionalDetails:i};void 0===this.requestPool[t][n]&&(this.requestPool[t][n]=[]),this.requestPool[t][n].push(r),this.startGrabbing()}filterRequests(e){Object.keys(this.requestPool).forEach((t=>{const i=this.requestPool[t];Object.keys(i).forEach((t=>{i[t]=i[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 i=0;for(let n=0;n<t;n++){const t=this.getNextRequest(e);if(null===t)return!1;if(t){let n;this.numRequests[e]++,this.awake=!0;try{n=t.requestFn()}catch(e){console.warn("sendRequest failed",e)}n?.finally?n.finally((()=>{this.numRequests[e]--,this.startAgain()})):(this.numRequests[e]--,i++)}}return i&&this.startAgain(),!0}getNextRequest(e){const t=this.getSortedPriorityGroups(e);for(const i of t)if(this.requestPool[e][i].length)return this.requestPool[e][i].shift();return null}startGrabbing(){const e=this.sendRequests(v.Interaction),t=this.sendRequests(v.Thumbnail),i=this.sendRequests(v.Prefetch),n=this.sendRequests(v.Compute);e||t||i||n||(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}}const Be=new We("imageLoadPool");Be.grabDelay=0,Be.setMaxSimultaneousRequests(v.Interaction,1e3),Be.setMaxSimultaneousRequests(v.Thumbnail,1e3),Be.setMaxSimultaneousRequests(v.Prefetch,1e3);const qe=Be,ze={};let He;function $e(e,t){const i=he.getImageLoadObject(e);if(i)return i;const n=e.indexOf(":"),r=e.substring(0,n),a=ze[r];if(null==a){if(void 0!==He)return He(e);throw new Error("loadImageFromImageLoader: no image loader for imageId")}const o=a(e,t);return o.promise.then((e=>{const t=e.getPixelData(),{width:i,height:n,numberOfComponents:r}=e;if(!e.voxelManager){const a=ye.createImageVoxelManager({scalarData:t,width:i,height:n,numberOfComponents:r});e.voxelManager=a,e.getPixelData=()=>a.getScalarData(),delete e.imageFrame.pixelData}ce(le,p.IMAGE_LOADED,{image:e})})).catch((t=>{const i={imageId:e,error:t};ce(le,p.IMAGE_LOAD_FAILED,i)})),o}function Ke(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{priority:0,requestType:"prefetch"};if(void 0===e)throw new Error("loadImage: parameter imageId must not be undefined");return $e(e,t).promise}function Ye(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{priority:0,requestType:"prefetch"};if(void 0===e)throw new Error("loadAndCacheImage: parameter imageId must not be undefined");const i=$e(e,t);return he.getImageLoadObject(e)||he.putImageLoadObject(e,i),i.promise}function Ze(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{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=>Ye(e,t)))}function Je(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0===e)throw new Error("createAndCacheDerivedImage: parameter imageId must not be undefined");void 0===t.imageId&&(t.imageId=`derived:${xe()}`);const{imageId:i,skipCreateBuffer:n,onCacheAdd:r}=t,a=Ue("imagePlaneModule",e),o=a.rows*a.columns,{TypedArrayConstructor:s}=_e(t.targetBufferType,o),l=new s(n?1:o),c=i,d=Ue("imagePlaneModule",e);Ge.add(c,{type:"imagePlaneModule",metadata:d});const h=Ue("generalSeriesModule",e);Ge.add(c,{type:"generalSeriesModule",metadata:h});const u=Ue("imagePixelModule",e);Ge.add(c,{type:"imagePixelModule",metadata:{...u,bitsAllocated:8,bitsStored:8,highBit:7,samplesPerPixel:1,pixelRepresentation:0}});const g=Qe(i,{scalarData:l,onCacheAdd:r,skipCreateBuffer:n,targetBufferType:l.constructor.name,dimensions:[a.columns,a.rows],spacing:[a.columnPixelSpacing,a.rowPixelSpacing],origin:a.imagePositionPatient,direction:a.imageOrientationPatient});return he.getImageLoadObject(i)||he.putImageSync(i,g),g}function Xe(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(0===e.length)throw new Error("createAndCacheDerivedImages: parameter imageIds must be list of image Ids");const i=[];return e.map((e=>{const n={imageId:t?.getDerivedImageId?.(e)||`derived:${xe()}`,...t};return i.push(n.imageId),Je(e,n)}))}function Qe(e,t){const{scalarData:i,origin:n,direction:r,targetBufferType:a,skipCreateBuffer:o,onCacheAdd:s}=t,l=t.dimensions,c=t.spacing;if(!l||!c)throw new Error("createAndCacheLocalImage: dimensions and spacing are required");const d=l[0],h=l[1],u=c[0],g=c[1],m={rows:h.toString(),columns:d.toString(),imageOrientationPatient:r??[1,0,0,0,1,0],rowCosines:r?r.slice(0,3):[1,0,0],columnCosines:r?r.slice(3,6):[0,1,0],imagePositionPatient:n??[0,0,0],pixelSpacing:[g,u],rowPixelSpacing:g,columnPixelSpacing:u},p=d*h,f=i.length/p;let v,w,I,C;if(i){if(!(i instanceof Uint8Array||i instanceof Float32Array||i instanceof Uint16Array||i instanceof Int16Array))throw new Error("createAndCacheLocalImage: scalarData must be of type Uint8Array, Uint16Array, Int16Array or Float32Array");v=i}else if(!o){const{numBytes:e,TypedArrayConstructor:t}=_e(a,p);v=new t(p)}if(v instanceof Uint8Array)w=8,I=8,C=7;else if(v instanceof Uint16Array)w=16,I=16,C=15;else if(v instanceof Int16Array)w=16,I=16,C=15;else{if(!(v instanceof Float32Array))throw new Error("Unsupported scalarData type");w=32,I=32,C=31}const E={samplesPerPixel:1,photometricInterpretation:v.length>l[0]*l[1]?"RGB":"MONOCHROME2",rows:h,columns:d,bitsAllocated:w,bitsStored:I,highBit:C},y={imagePlaneModule:m,imagePixelModule:E};["imagePlaneModule","imagePixelModule"].forEach((t=>{Ge.add(e,{type:t,metadata:y[t]||{}})}));const R=ye.createImageVoxelManager({height:h,width:d,numberOfComponents:f,scalarData:v}),P={imageId:e,intercept:0,windowCenter:0,windowWidth:0,color:"RGB"===E.photometricInterpretation,numberOfComponents:E.samplesPerPixel,dataType:a,slope:1,minPixelValue:0,maxPixelValue:Math.pow(2,E.bitsStored)-1,rows:E.rows,columns:E.columns,getCanvas:void 0,height:E.rows,width:E.columns,rgba:void 0,columnPixelSpacing:m.columnPixelSpacing,rowPixelSpacing:m.rowPixelSpacing,FrameOfReferenceUID:m.frameOfReferenceUID,invert:!1,getPixelData:()=>R.getScalarData(),voxelManager:R,sizeInBytes:i.byteLength};return s?.(P),he.putImageSync(P.imageId,P),P}function et(e){qe.filterRequests((t=>{let{additionalDetails:i}=t;return!i.imageId||i.imageId!==e}));const t=he.getImageLoadObject(e);t&&t.cancelFn()}function tt(e){e.forEach((e=>{et(e)}))}function it(){const e=qe.getRequestPool();Object.keys(e).forEach((t=>{const i=e[t];Object.keys(i).forEach((e=>{const t=i[e].pop().additionalDetails,{imageId:n,volumeId:r}=t;let a;n?a=he.getImageLoadObject(n):r&&(a=he.getVolumeLoadObject(r)),a&&a.cancel()})),qe.clearRequestStack(t)}))}function nt(e,t){ze[e]=t}function rt(e){const t=He;return He=e,t}function at(){Object.keys(ze).forEach((e=>delete ze[e])),He=void 0}function ot(e){return Xe(e,{...arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},targetBufferType:"Uint8Array"})}function st(e){return Je(e,{...arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},targetBufferType:"Uint8Array"})}const lt={};let ct;function dt(e,t){const i=e.indexOf(":"),n=e.substring(0,i);let r=lt[n];if(null==r){if(null==ct||"function"!=typeof ct)throw new Error(`No volume loader for scheme ${n} has been registered`);r=ct}const a=r(e,t);return a.promise.then((function(e){ce(le,p.VOLUME_LOADED,{volume:e})}),(function(t){const i={volumeId:e,error:t};ce(le,p.VOLUME_LOADED_FAILED,i)})),a}function ht(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{imageIds:[]};if(void 0===e)throw new Error("loadVolume: parameter volumeId must not be undefined");let i=he.getVolumeLoadObject(e);return void 0!==i?i.promise:(i=dt(e,t),i.promise.then((e=>e)))}async function ut(e,t){if(void 0===e)throw new Error("createAndCacheVolume: parameter volumeId must not be undefined");let i=he.getVolumeLoadObject(e);return void 0!==i||(i=dt(e,t),he.putVolumeLoadObject(e,i)),i.promise}function gt(e,t){const i=he.getVolume(e);if(!i)throw new Error(`Cannot created derived volume: Referenced volume with id ${e} does not exist.`);let{volumeId:n}=t;void 0===n&&(n=xe());const{metadata:r,dimensions:a,spacing:o,origin:s,direction:l}=i,c=Xe(i.imageIds??[],{targetBufferType:t.targetBufferType}),d=c[0].dataType,h=c.map((e=>e.imageId)),u=new De({volumeId:n,dataType:d,metadata:structuredClone(r),dimensions:[a[0],a[1],a[2]],spacing:o,origin:s,direction:l,referencedVolumeId:e,imageIds:h,referencedImageIds:i.imageIds??[]});return he.putVolumeSync(n,u),u}async function mt(e,t){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 i=he.getVolume(e);return i||await ut(e,{imageIds:t})}function pt(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{metadata:i,dimensions:n,spacing:r,origin:a,direction:o,scalarData:s,targetBufferType:l,preventCache:c=!1}=t,d=he.getVolume(e);if(d)return d;const h=n[0]*n[1],u=s?s.constructor.name:l,g=[],m=[];for(let t=0;t<n[2];t++){const i=`${e}_slice_${t}`;g.push(i);const l=Qe(i,{scalarData:s.subarray(t*h,(t+1)*h),dimensions:[n[0],n[1]],spacing:[r[0],r[1]],origin:a,direction:o,targetBufferType:u});m.push(l)}const p=new De({volumeId:e,metadata:structuredClone(i),dimensions:[n[0],n[1],n[2]],spacing:r,origin:a,direction:o,imageIds:g,dataType:u}),f=ye.createImageVolumeVoxelManager({imageIds:g,dimensions:n,numberOfComponents:1});return p.voxelManager=f,he.putVolumeSync(e,p),p}function ft(e,t){lt[e]=t}function vt(){return Object.keys(lt)}function wt(e){const t=ct;return ct=e,t}function It(){return ct.name}function Ct(e){return gt(e,{...arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},targetBufferType:"Uint8Array"})}function Et(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e.scalarData||(e.scalarData=new Uint8Array(e.dimensions[0]*e.dimensions[1]*e.dimensions[2])),pt(t,{...e,preventCache:i})}var yt=K(9),Rt=K.n(yt);const Pt={scalarTexture:null};function bt(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Pt,i),Rt().extend(e,t,i),Pe().setGet(e,t,["scalarTexture"]),function(e,t){t.classHierarchy.push("vtkSharedVolumeMapper");const i=e.delete;e.delete=()=>{t.scalarTexture=null,i()}}(e,t)}const Tt={newInstance:Pe().newInstance(bt,"vtkSharedVolumeMapper"),extend:bt},At={},St={get:e=>At[e],set:e=>{const t=e.id;At[t]=e},delete:e=>delete At[e],getAll:()=>{const e=Object.keys(At).map((e=>At[e]));return e.sort(((e,t)=>"_"===e.id[0]&&"_"!==t.id[0]?1:"_"!==e.id[0]&&"_"===t.id[0]?-1:0)),e}};function Ot(e){return St.get(e)}function Dt(){return St.getAll()}const Mt=Ot,xt=e=>e&&"object"==typeof e&&"[object RegExp]"!==Object.prototype.toString.call(e)&&"[object Date]"!==Object.prototype.toString.call(e),_t=(e,t)=>{return t&&!0===t.clone&&xt(e)?kt((i=e,Array.isArray(i)?[]:{}),e,t):e;var i},Vt=(e,t,i)=>{const n=e.slice();return t.forEach((function(t,r){void 0===n[r]?n[r]=_t(t,i):xt(t)?n[r]=kt(e[r],t,i):-1===e.indexOf(t)&&(n[r]=_t(t,i))})),n},kt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;const n=Array.isArray(t),r=(i||{arrayMerge:Vt}).arrayMerge||Vt;return n?Array.isArray(e)?r(e,t,i):_t(t,i):((e,t,i)=>{const n={};return xt(e)&&Object.keys(e).forEach((function(t){n[t]=_t(e[t],i)})),Object.keys(t).forEach((function(r){xt(t[r])&&e[r]?n[r]=kt(e[r],t[r],i):n[r]=_t(t[r],i)})),n})(e,t,i)},Lt=kt,Nt=Symbol("Comlink.proxy"),Ut=Symbol("Comlink.endpoint"),Ft=Symbol("Comlink.releaseProxy"),jt=Symbol("Comlink.finalizer"),Gt=Symbol("Comlink.thrown"),Wt=e=>"object"==typeof e&&null!==e||"function"==typeof e,Bt=new Map([["proxy",{canHandle:e=>Wt(e)&&e[Nt],serialize(e){const{port1:t,port2:i}=new MessageChannel;return qt(e,t),[i,[i]]},deserialize:e=>(e.start(),Ht(e))}],["throw",{canHandle:e=>Wt(e)&&Gt in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function qt(e,t=globalThis,i=["*"]){t.addEventListener("message",(function n(r){if(!r||!r.data)return;if(!function(e,t){for(const i of e){if(t===i||"*"===i)return!0;if(i instanceof RegExp&&i.test(t))return!0}return!1}(i,r.origin))return void console.warn(`Invalid origin '${r.origin}' for comlink proxy`);const{id:a,type:o,path:s}=Object.assign({path:[]},r.data),l=(r.data.argumentList||[]).map(ii);let c;try{const t=s.slice(0,-1).reduce(((e,t)=>e[t]),e),i=s.reduce(((e,t)=>e[t]),e);switch(o){case"GET":c=i;break;case"SET":t[s.slice(-1)[0]]=ii(r.data.value),c=!0;break;case"APPLY":c=i.apply(t,l);break;case"CONSTRUCT":c=ei(new i(...l));break;case"ENDPOINT":{const{port1:t,port2:i}=new MessageChannel;qt(e,i),c=function(e,t){return Qt.set(e,t),e}(t,[t])}break;case"RELEASE":c=void 0;break;default:return}}catch(e){c={value:e,[Gt]:0}}Promise.resolve(c).catch((e=>({value:e,[Gt]:0}))).then((i=>{const[r,s]=ti(i);t.postMessage(Object.assign(Object.assign({},r),{id:a}),s),"RELEASE"===o&&(t.removeEventListener("message",n),zt(t),jt in e&&"function"==typeof e[jt]&&e[jt]())})).catch((e=>{const[i,n]=ti({value:new TypeError("Unserializable return value"),[Gt]:0});t.postMessage(Object.assign(Object.assign({},i),{id:a}),n)}))})),t.start&&t.start()}function zt(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function Ht(e,t){return Jt(e,[],t)}function $t(e){if(e)throw new Error("Proxy has been released and is not useable")}function Kt(e){return ni(e,{type:"RELEASE"}).then((()=>{zt(e)}))}const Yt=new WeakMap,Zt="FinalizationRegistry"in globalThis&&new FinalizationRegistry((e=>{const t=(Yt.get(e)||0)-1;Yt.set(e,t),0===t&&Kt(e)}));function Jt(e,t=[],i=function(){}){let n=!1;const r=new Proxy(i,{get(i,a){if($t(n),a===Ft)return()=>{!function(e){Zt&&Zt.unregister(e)}(r),Kt(e),n=!0};if("then"===a){if(0===t.length)return{then:()=>r};const i=ni(e,{type:"GET",path:t.map((e=>e.toString()))}).then(ii);return i.then.bind(i)}return Jt(e,[...t,a])},set(i,r,a){$t(n);const[o,s]=ti(a);return ni(e,{type:"SET",path:[...t,r].map((e=>e.toString())),value:o},s).then(ii)},apply(i,r,a){$t(n);const o=t[t.length-1];if(o===Ut)return ni(e,{type:"ENDPOINT"}).then(ii);if("bind"===o)return Jt(e,t.slice(0,-1));const[s,l]=Xt(a);return ni(e,{type:"APPLY",path:t.map((e=>e.toString())),argumentList:s},l).then(ii)},construct(i,r){$t(n);const[a,o]=Xt(r);return ni(e,{type:"CONSTRUCT",path:t.map((e=>e.toString())),argumentList:a},o).then(ii)}});return function(e,t){const i=(Yt.get(t)||0)+1;Yt.set(t,i),Zt&&Zt.register(e,t,e)}(r,e),r}function Xt(e){const t=e.map(ti);return[t.map((e=>e[0])),(i=t.map((e=>e[1])),Array.prototype.concat.apply([],i))];var i}const Qt=new WeakMap;function ei(e){return Object.assign(e,{[Nt]:!0})}function ti(e){for(const[t,i]of Bt)if(i.canHandle(e)){const[n,r]=i.serialize(e);return[{type:"HANDLER",name:t,value:n},r]}return[{type:"RAW",value:e},Qt.get(e)||[]]}function ii(e){switch(e.type){case"HANDLER":return Bt.get(e.name).deserialize(e.value);case"RAW":return e.value}}function ni(e,t,i){return new Promise((n=>{const r=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");e.addEventListener("message",(function t(i){i.data&&i.data.id&&i.data.id===r&&(e.removeEventListener("message",t),n(i.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:r},t),i)}))}const ri=class{constructor(){this.workerRegistry={},this.workerPoolManager=new We("webworker")}registerWorker(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{maxWorkerInstances:n=1,overwrite:r=!1,autoTerminateOnIdle:a={enabled:!1,idleTimeThreshold:3e3}}=i;if(this.workerRegistry[e]&&!r)return void console.warn(`Worker type '${e}' is already registered...`);r&&this.workerRegistry[e]?.idleCheckIntervalId&&clearInterval(this.workerRegistry[e].idleCheckIntervalId);const o={workerFn:null,instances:[],loadCounters:[],lastActiveTime:[],nativeWorkers:[],autoTerminateOnIdle:a.enabled,idleCheckIntervalId:null,idleTimeThreshold:a.idleTimeThreshold};o.loadCounters=Array(n).fill(0),o.lastActiveTime=Array(n).fill(null);for(let e=0;e<n;e++){const e=t();o.instances.push(Ht(e)),o.nativeWorkers.push(e),o.workerFn=t}this.workerRegistry[e]=o}getNextWorkerAPI(e){const t=this.workerRegistry[e];if(!t)return console.error(`Worker type '${e}' is not registered.`),null;const i=t.instances.filter((e=>null!==e));let n=0,r=t.loadCounters[0]||0;for(let e=1;e<i.length;e++){const i=t.loadCounters[e]||0;i<r&&(n=e,r=i)}if(null===t.instances[n]){const e=t.workerFn();t.instances[n]=Ht(e),t.nativeWorkers[n]=e}return t.loadCounters[n]+=1,{api:t.instances[n],index:n}}executeTask(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{requestType:n=v.Compute,priority:r=0,options:a={},callbacks:o=[]}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return new Promise(((s,l)=>{this.workerPoolManager.addRequest((async()=>{const{api:n,index:r}=this.getNextWorkerAPI(e);if(!n){const t=new Error(`No available worker instance for '${e}'`);return console.error(t),void l(t)}try{let a=[];o.length&&(a=o.map((e=>ei(e))));const l=this.workerRegistry[e];l.processing=!0;const c=await n[t](i,...a);l.processing=!1,l.lastActiveTime[r]=Date.now(),l.autoTerminateOnIdle&&!l.idleCheckIntervalId&&l.idleTimeThreshold&&(l.idleCheckIntervalId=setInterval((()=>{this.terminateIdleWorkers(e,l.idleTimeThreshold)}),l.idleTimeThreshold)),s(c)}catch(i){console.error(`Error executing method '${t}' on worker '${e}':`,i),l(i)}finally{this.workerRegistry[e].loadCounters[r]--}}),n,a,r)}))}terminateIdleWorkers(e,t){const i=this.workerRegistry[e];if(i.processing)return;const n=Date.now();i.instances.forEach(((r,a)=>{const o=i.lastActiveTime[a];!(null!==o&&i.loadCounters[a]>0)&&n-o>t&&this.terminateWorkerInstance(e,a)}))}terminate(e){const t=this.workerRegistry[e];t?t.instances.forEach(((t,i)=>{this.terminateWorkerInstance(e,i)})):console.error(`Worker type '${e}' is not registered.`)}terminateWorkerInstance(e,t){const i=this.workerRegistry[e],n=i.instances[t];null!==n&&(n[Ft](),i.nativeWorkers[t].terminate(),i.instances[t]=null,i.lastActiveTime[t]=null)}};let ai=!1;const oi={gpuTier:{tier:2},isMobile:!1,rendering:{useCPURendering:!1,preferSizeOverAccuracy:!1,useNorm16Texture:!1,strictZSpacingForVolumeViewport:!0},peerImport:e=>null};let si={...oi,rendering:{...oi.rendering}},li=null;function ci(){const e=document.createElement("canvas");return e.getContext("webgl2")||e.getContext("webgl")||e.getContext("experimental-webgl")}function di(){const e=ci();return e instanceof WebGLRenderingContext||e instanceof WebGL2RenderingContext}function hi(){return!!/iPad|iPhone|iPod/.test(navigator.platform)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2&&navigator.platform.includes("MacIntel")}function ui(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:si;return ai||(si=Lt(oi,e),hi()&&(si.rendering.useNorm16Texture=function(){const e=ci();return!(!e||!e.getExtension("EXT_texture_norm16"))}(),si.rendering.useNorm16Texture||(e.rendering.preferSizeOverAccuracy?si.rendering.preferSizeOverAccuracy=!0:console.log("norm16 texture not supported, you can turn on the preferSizeOverAccuracy flag to use native data type, but be aware of the inaccuracy of the rendering in high bits"))),di()?console.log("CornerstoneRender: using GPU rendering"):(console.log("CornerstoneRender: GPU not detected, using CPU rendering"),si.rendering.useCPURendering=!0),ai=!0,li||(li=new ri),ai)}function gi(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];si.rendering.useCPURendering=e,ai=!0,t&&Ei()}function mi(e){si.rendering.preferSizeOverAccuracy=e,ai=!0,Ei()}function pi(){return!hi()}function fi(){si.rendering.useCPURendering=!di(),Ei()}function vi(){return si.rendering.useCPURendering}function wi(){return ai}function Ii(){return si}function Ci(e){si=e,Ei()}function Ei(){Dt().forEach((e=>{e.getViewports().forEach((e=>{e.updateRenderingPipeline()}))}))}function yi(){return li||(li=new ri),li}function Ri(e){return si.peerImport(e)}function Pi(e,t){const i=Tt.newInstance();Ii().rendering.preferSizeOverAccuracy&&i.setPreferSizeOverAccuracy(!0),i.setInputData(e);const n=e.getSpacing(),r=(n[0]+n[1]+n[2])/6;return i.setMaximumSamplesPerRay(4e3),i.setSampleDistance(r),i.setScalarTexture(t),i}function bi(e,t){return{windowWidth:Math.abs(t-e)+1,windowCenter:(e+t+1)/2}}function Ti(e,t){return{lower:t-.5-(e-1)/2,upper:t-.5+(e-1)/2}}function Ai(e){let t,i=e[0],n=e[0];const r=e.length;for(let a=1;a<r;a++)t=e[a],i=Math.min(i,t),n=Math.max(n,t);return{min:i,max:n}}const Si=v.Prefetch,Oi=async function(e,t){let i=function(e){const{imageIds:t,metadata:i}=e;let n;if(t.length){const e=Ue("voiLutModule",t[Math.floor(t.length/2)]);if(e?.windowWidth&&e.windowCenter){const{windowWidth:t,windowCenter:i}=e;n={windowWidth:Array.isArray(t)?t[0]:t,windowCenter:Array.isArray(i)?i[0]:i}}}else n=i.voiLut[0];if(n){const{lower:e,upper:t}=Ti(Number(n.windowWidth),Number(n.windowCenter));return{lower:e,upper:t}}}(t);!i&&t.imageIds.length&&(i=await async function(e){const{imageIds:t}=e,i=Math.floor(t.length/2),n=e.imageIds[i],r=Ue("generalSeriesModule",n)||{},{modality:a}=r,o=Ue("modalityLutModule",n)||{},s={rescaleSlope:o.rescaleSlope,rescaleIntercept:o.rescaleIntercept,modality:a};let l;if("PT"===a){const e=Ue("scalingModule",n);e&&(l={...s,suvbw:e.suvbw})}const c={priority:0,requestType:Si,preScale:{scalingParameters:l}};let d=ue.getImage(n);e.referencedImageIds?.length||(d=await Ye(n,{...c,ignoreCache:!0}));const h=d.getPixelData(),{min:u,max:g}=Ai(h);return{lower:u,upper:g}}(t),i=function(e,t){const i=e.imageIds;return function(e,t){return!("PT"!==e||!t.isPreScaled)&&!!t.scaling?.PT.suvbw}((Ue("generalSeriesModule",i[Math.floor(i.length/2)])||{}).modality,e)?{lower:0,upper:5}:t}(t,i)),0===i.lower&&0===i.upper||void 0===i.lower||void 0===i.upper||e.getProperty().getRGBTransferFunction(0).setMappingRange(i.lower,i.upper)},Di=async function(e,t,i){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{volumeId:r,callback:a,blendMode:o}=e,s=await ht(r);if(!s)throw new Error(`imageVolume with id: ${s.volumeId} does not exist`);const{imageData:l,vtkOpenGLTexture:c}=s,d=Pi(l,c);o&&d.setBlendMode(o);const h=ie().newInstance();h.setMapper(d);const{numberOfComponents:u}=l.get("numberOfComponents");return 3===u&&h.getProperty().setIndependentComponents(!1),await Oi(h,s),a&&a({volumeActor:h,volumeId:r}),n||function(e,t,i,n){const r=i.getProperty().getRGBTransferFunction(0).getRange(),a={viewportId:t,range:{lower:r[0],upper:r[1]},volumeId:n};ce(e,p.VOI_MODIFIED,a)}(t,i,h,r),h},Mi="viewport-element",xi="cornerstone-canvas",_i=1e-4;function Vi(e){const t=`canvas.${xi}`,i=`div.${Mi}`,n=e.querySelector(i)||function(e){const t=document.createElement("div");return t.style.position="relative",t.style.width="100%",t.style.height="100%",t.style.overflow="hidden",t.classList.add(Mi),e.appendChild(t),t}(e),r=n.querySelector(t);if(r)return r;const a=function(e){const t=document.createElement("canvas");return t.style.position="absolute",t.style.width="100%",t.style.height="100%",t.style.imageRendering="pixelated",t.classList.add(xi),e.appendChild(t),t}(n),o=n.getBoundingClientRect(),s=window.devicePixelRatio||1,l=Math.ceil(o.width*s),c=Math.ceil(o.height*s);return a.width=l,a.height=c,a}var ki=K(21),Li=K.n(ki),Ni=K(643),Ui=K.n(Ni),Fi=K(128),ji=K.n(Fi),Gi=K(664),Wi=K.n(Gi),Bi=K(973),qi=K.n(Bi),zi=K(394),Hi=K.n(zi),$i=K(582),Ki=K.n($i),Yi=K(482),Zi=K.n(Yi),Ji=K(343),Xi=K.n(Ji),Qi=K(363),en=K.n(Qi),tn=K(982),nn=K.n(tn),rn=K(130),an=K.n(rn),on=K(298),sn=K.n(on),ln=K(398),cn=K.n(ln),dn=K(388),hn=K.n(dn),un=K(120),gn=K.n(un),mn=K(395),pn=K(948),fn=K(411),vn=K(785),wn=K.n(vn),In=K(478);const Cn={};function En(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Cn,i),hn().extend(e,t,i),t.scalarTexture=i.scalarTexture,t.previousState={},function(e,t){t.classHierarchy.push("vtkStreamingOpenGLVolumeMapper"),e.buildBufferObjects=(i,n)=>{const r=t.currentInput;if(!r)return;const a=n.getProperty();if(!t.jitterTexture.getHandle()){const e=new Uint8Array(1024);for(let t=0;t<1024;++t)e[t]=255*Math.random();t.jitterTexture.setMinificationFilter(mn.Filter.LINEAR),t.jitterTexture.setMagnificationFilter(mn.Filter.LINEAR),t.jitterTexture.create2DFromRaw(32,32,1,pn.VtkDataTypes.UNSIGNED_CHAR,e)}const{numberOfComponents:o}=r.get("numberOfComponents"),s=e.useIndependentComponents(a),l=a.getScalarOpacity(),c=t._openGLRenderWindow.getGraphicsResourceForObject(l);let d=(0,fn.getTransferFunctionHash)(l,s,o);if(c?.oglObject&&c.hash===d)t.opacityTexture=c.oglObject;else{t.opacityTexture=Te().newInstance(),t.opacityTexture.setOpenGLRenderWindow(t._openGLRenderWindow);const n=1024,r=2*n*o,s=new Float32Array(r),c=new Float32Array(n);for(let t=0;t<o;++t){const r=a.getScalarOpacity(t),o=e.getCurrentSampleDistance(i)/a.getScalarOpacityUnitDistance(t),l=r.getRange();r.getTable(l[0],l[1],n,c,1);for(let e=0;e<n;++e)s[t*n*2+e]=1-(1-c[e])**o,s[t*n*2+e+n]=s[t*n*2+e]}if(t.opacityTexture.resetFormatAndType(),t.opacityTexture.setMinificationFilter(mn.Filter.LINEAR),t.opacityTexture.setMagnificationFilter(mn.Filter.LINEAR),t._openGLRenderWindow.getWebgl2()||t.context.getExtension("OES_texture_float")&&t.context.getExtension("OES_texture_float_linear"))t.opacityTexture.create2DFromRaw(n,2*o,1,pn.VtkDataTypes.FLOAT,s);else{const e=new Uint8ClampedArray(r);for(let t=0;t<r;++t)e[t]=255*s[t];t.opacityTexture.create2DFromRaw(n,2*o,1,pn.VtkDataTypes.UNSIGNED_CHAR,e)}l&&(t._openGLRenderWindow.setGraphicsResourceForObject(l,t.opacityTexture,d),l!==t._scalarOpacityFunc&&(t._openGLRenderWindow.registerGraphicsResourceUser(l,e),t._openGLRenderWindow.unregisterGraphicsResourceUser(t._scalarOpacityFunc,e)),t._scalarOpacityFunc=l)}const h=a.getRGBTransferFunction();d=(0,fn.getTransferFunctionHash)(h,s,o);const u=t._openGLRenderWindow.getGraphicsResourceForObject(h);if(u?.oglObject?.getHandle()&&u?.hash===d)t.colorTexture=u.oglObject;else{t.colorTexture=Te().newInstance(),t.colorTexture.setOpenGLRenderWindow(t._openGLRenderWindow);const i=1024,n=new Uint8ClampedArray(2*i*o*3),r=new Float32Array(3*i);for(let e=0;e<o;++e){const t=a.getRGBTransferFunction(e),o=t.getRange();t.getTable(o[0],o[1],i,r,1);for(let t=0;t<3*i;++t)n[e*i*6+t]=255*r[t],n[e*i*6+t+3*i]=255*r[t]}t.colorTexture.resetFormatAndType(),t.colorTexture.setMinificationFilter(mn.Filter.LINEAR),t.colorTexture.setMagnificationFilter(mn.Filter.LINEAR),t.colorTexture.create2DFromRaw(i,2*o,3,pn.VtkDataTypes.UNSIGNED_CHAR,n),h&&(t._openGLRenderWindow.setGraphicsResourceForObject(h,t.colorTexture,d),h!==t._colorTransferFunc&&(t._openGLRenderWindow.registerGraphicsResourceUser(h,e),t._openGLRenderWindow.unregisterGraphicsResourceUser(t._colorTransferFunc,e)),t._colorTransferFunc=h)}if(e.updateLabelOutlineThicknessTexture(n),d=`${r.getMTime()}-${t.scalarTexture.getMTime()}`,t.scalarTextureString!==d){const e=r.getDimensions();t.scalarTexture.setOpenGLRenderWindow(t._openGLRenderWindow),t.scalarTexture.enableUseHalfFloat(!1);const i=t.scalarTexture.getTextureParameters(),n=r.get("dataType").dataType;let a=!0;if(i?.dataType===n&&i?.width===e[0]&&i?.height===e[1]&&i?.depth===e[2]&&(a=!1),a){const i=t.context.getExtension("EXT_texture_norm16");t.scalarTexture.setOglNorm16Ext(i),t.scalarTexture.resetFormatAndType(),t.scalarTexture.setTextureParameters({width:e[0],height:e[1],depth:e[2],numberOfComponents:o,dataType:n}),t.scalarTexture.create3DFromRaw(e[0],e[1],e[2],o,n,null),t.scalarTexture.update3DFromRaw()}else t.scalarTexture.deactivate(),t.scalarTexture.update3DFromRaw();t.scalarTextureString=d}if(!t.tris.getCABO().getElementCount()){const e=new Float32Array(12);for(let t=0;t<4;t++)e[3*t]=t%2*2-1,e[3*t+1]=t>1?1:-1,e[3*t+2]=-1;const i=new Uint16Array(8);i[0]=3,i[1]=0,i[2]=1,i[3]=3,i[4]=3,i[5]=0,i[6]=3,i[7]=2;const n=wn().newInstance({numberOfComponents:3,values:e});n.setName("points");const r=wn().newInstance({numberOfComponents:1,values:i});t.tris.getCABO().createVBO(r,"polys",In.Representation.SURFACE,{points:n,cellOffset:0})}t.VBOBuildTime.modified()},e.getNeedToRebuildBufferObjects=(i,n)=>t.VBOBuildTime.getMTime()<e.getMTime()||t.VBOBuildTime.getMTime()<n.getMTime()||t.VBOBuildTime.getMTime()<t.renderable.getMTime()||t.VBOBuildTime.getMTime()<n.getProperty().getMTime()||t.VBOBuildTime.getMTime()<t.currentInput.getMTime()||t.VBOBuildTime.getMTime()<t.scalarTexture?.getMTime()||t.VBOBuildTime.getMTime()<t.colorTexture?.getMTime()||t.VBOBuildTime.getMTime()<t.labelOutlineThicknessTexture?.getMTime()||!t.scalarTexture?.getHandle()||!t.colorTexture?.getHandle()||!t.labelOutlineThicknessTexture?.getHandle()}(e,t)}const yn={newInstance:Pe().newInstance(En,"vtkStreamingOpenGLVolumeMapper"),extend:En},Rn=Object.create(null);function Pn(e,t){Rn[e]=t}const bn={};function Tn(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,bn,i),gn().extend(e,t,i),function(e,t){t.classHierarchy.push("vtkStreamingOpenGLViewNodeFactory"),e.createNode=i=>{if(i.isDeleted())return null;let n=0,r=i.getClassName(n++),a=!1;const o=Object.keys(t.overrides);for(;r&&!a;)o.includes(r)?a=!0:r=i.getClassName(n++);if(!a)return null;const s=t.getModelInitialValues(i),l=t.overrides[r](s);return l.setMyFactory(e),l},t.overrides=Rn,t.getModelInitialValues=e=>{const t={};return"vtkSharedVolumeMapper"===e.getClassName()&&(t.scalarTexture=e.getScalarTexture()),t}}(e,t),Pn("vtkActor",Ui().newInstance),Pn("vtkActor2D",ji().newInstance),Pn("vtkCamera",Wi().newInstance),Pn("vtkGlyph3DMapper",qi().newInstance),Pn("vtkImageMapper",Hi().newInstance),Pn("vtkImageSlice",Ki().newInstance),Pn("vtkMapper",Xi().newInstance),Pn("vtkPixelSpaceCallbackMapper",Zi().newInstance),Pn("vtkRenderer",en().newInstance),Pn("vtkSkybox",nn().newInstance),Pn("vtkSphereMapper",an().newInstance),Pn("vtkStickMapper",sn().newInstance),Pn("vtkTexture",Te().newInstance),Pn("vtkVolume",cn().newInstance),Pn("vtkVolumeMapper",hn().newInstance),Pn("vtkSharedVolumeMapper",yn.newInstance)}const An={newInstance:Pe().newInstance(Tn,"vtkStreamingOpenGLViewNodeFactory"),extend:Tn};function Sn(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,i),Li().extend(e,t,i),t.myFactory=An.newInstance(),Pn("vtkRenderWindow",On),function(e,t){t.classHierarchy.push("vtkStreamingOpenGLRenderWindow")}(0,t)}const On=Pe().newInstance(Sn,"vtkStreamingOpenGLRenderWindow"),Dn={newInstance:On,extend:Sn};var Mn=K(281),xn=K.n(Mn),_n=K(329),Vn=K.n(_n),kn=K(673),Ln=K.n(kn);K(348),K(70),K(474),K(610);const Nn={background:[0,0,0],container:null};function Un(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Nn,i),Pe().obj(e,t),Pe().get(e,t,["renderWindow","openGLRenderWindow","interactor","container"]),Pe().event(e,t,"resize"),function(e,t){const i=e.invokeResize;delete e.invokeResize,t.renderWindow=Vn().newInstance(),t.rendererMap={},t.openGLRenderWindow=Dn.newInstance(),t.renderWindow.addView(t.openGLRenderWindow),t.interactor=Ln().newInstance(),t.interactor.setView(t.openGLRenderWindow),t.interactor.initialize(),e.addRenderer=e=>{let{viewport:i,id:n,background:r}=e;const a=xn().newInstance({viewport:i,background:r||t.background});t.renderWindow.addRenderer(a),t.rendererMap[n]=a},e.destroy=()=>{t.renderWindow.getInteractor().delete()},e.removeRenderer=i=>{const n=e.getRenderer(i);t.renderWindow.removeRenderer(n),n.delete(),delete t.rendererMap[i]},e.getRenderer=e=>t.rendererMap[e],e.getRenderers=()=>{const{rendererMap:e}=t;return Object.keys(e).map((t=>({id:t,renderer:e[t]})))},e.resize=()=>{if(t.container){const{width:e,height:n}=t.container;t.openGLRenderWindow.setSize(Math.floor(e),Math.floor(n)),i(),t.renderWindow.render()}},e.setContainer=e=>{t.container=e,t.openGLRenderWindow.setContainer(t.container)},e.delete=Pe().chain(e.setContainer,e.destroy,t.openGLRenderWindow.delete,e.delete),e.resize()}(e,t)}const Fn={newInstance:Pe().newInstance(Un),extend:Un};var jn=K(864),Gn=K.n(jn);function Wn(e,t){const{direction:i,spacing:n}=e,r=i.slice(0,3),a=i.slice(3,6),o=i.slice(6,9),s=[se.vec3.dot(r,t),se.vec3.dot(a,t),se.vec3.dot(o,t)],l=se.vec3.create();return se.vec3.set(l,s[0]*n[0],s[1]*n[1],s[2]*n[2]),se.vec3.length(l)}function Bn(e){return qn(e,"vtkVolume")||qn(e,"vtkImageSlice")}function qn(e,t){return!!("isA"in e?e:e.actor).isA(t)}function zn(e,t,i){if(!e)return;const{direction:n,imageIds:r}=e;if(!r.length)return;const a=n.slice(6,9),o=se.vec3.dot(a,i);if(Math.abs(o)<1-J)return;const s=Wn(e,i)/2;let l;for(let e=0;e<r.length;e++){const n=r[e],{imagePositionPatient:a}=Ue("imagePlaneModule",n),o=se.vec3.create();se.vec3.sub(o,t,a);const c=se.vec3.dot(o,i);Math.abs(c)<s&&(l=n)}return l}var Hn=K(847),$n=K.n(Hn);function Kn(e){const t=e.getMapper().getInputData(),i=t.extentToBounds(t.getExtent());return[[i[0],i[2],i[4]],[i[0],i[2],i[5]],[i[0],i[3],i[4]],[i[0],i[3],i[5]],[i[1],i[2],i[4]],[i[1],i[2],i[5]],[i[1],i[3],i[4]],[i[1],i[3],i[5]]]}const Yn=J*J,Zn=e=>Math.abs(Math.abs(e)-1)<Yn,Jn=(e,t)=>Zn(e[t])||Zn(e[t+1])||Zn(e[t+2]),Xn=e=>Jn(e,0)&&Jn(e,3)&&Jn(e,6);function Qn(e,t,i){const n=e.getMapper().getInputData();let r;const a=n.getDirection();if(Xn(a))r=Kn(e);else{const[e,t,i]=n.getDimensions();r=[[0,0,0],[e-1,0,0],[0,t-1,0],[e-1,t-1,0],[0,0,i-1],[e-1,0,i-1],[0,t-1,i-1],[e-1,t-1,i-1]].map((e=>n.indexToWorld(e)))}const o=$n().buildFromDegree().identity().rotateFromDirections(t,[1,0,0]);r.forEach((e=>o.apply(e)));const s=[...i];o.apply(s);const l=s[0];let c=1/0,d=-1/0;for(let e=0;e<8;e++){const t=r[e][0];t>d&&(d=t),t<c&&(c=t)}return{min:c,max:d,current:l,actor:e,viewPlaneNormal:t,focalPoint:i}}function er(e,t,i,n,r,a){const{min:o,max:s,current:l}=i,c=se.vec3.create();se.vec3.sub(c,t,e);const d=Math.round((s-o)/r),h=(l-o)/(s-o)*d;let u=Math.round(h),g=[e[0]-n[0]*h*r,e[1]-n[1]*h*r,e[2]-n[2]*h*r];u+=a,u>d?u=d:u<0&&(u=0);const m=u*r;return g=[g[0]+n[0]*m,g[1]+n[1]*m,g[2]+n[2]*m],{newFocalPoint:g,newPosition:[g[0]+c[0],g[1]+c[1],g[2]+c[2]]}}var tr=K(795),ir=K.n(tr),nr=K(38),rr=K.n(nr),ar=K(441),or=K.n(ar);function sr(e){let t=[];const[i,n]=e.getRange();e.getTable(i,n,1024,t),t=t.filter(((e,t)=>t%3==0));const r=[...Array(1024).keys()].map(((e,t)=>i+(n-i)/1023*t)),a=t[256],o=Math.log((1-a)/a),s=r[256],l=t[768],c=Math.log((1-l)/l),d=r[768],h=Math.round(4*(d-s)/(o-c)),u=Math.round(s+h*o/4);return[Math.round(u-h/2),Math.round(u+h/2)]}const lr=new Map;function cr(e){lr.set(e.Name,e)}function dr(e){return lr.get(e)}function hr(){return Array.from(lr.keys())}function ur(e,t){const i=rr().rgbPresetNames.map((e=>rr().getPresetByName(e))),n=hr().map((e=>dr(e))),r=i.concat(n).find((t=>{const{RGBPoints:i}=t;if(i.length!==e.length)return!1;for(let t=0;t<i.length;t+=4)if(!ve(i.slice(t+1,t+4),e.slice(t+1,t+4)))return!1;return!0}));if(!r)return null;const a=[];if(qn(t,"vtkVolume")){const e=t.getProperty().getScalarOpacity(0).getDataPointer();if(!e)return{name:r.Name};for(let t=0;t<e.length;t+=2)a.push({value:e[t],opacity:e[t+1]})}return{name:r.Name,opacity:a}}function gr(e){if(!e)return;const t=e.getSize();for(let i=0;i<t;i++){const t=[];e.getNodeValue(i,t),t[1]=1-t[1],t[2]=1-t[2],t[3]=1-t[3],e.setNodeValue(i,t)}}function mr(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1024;const{windowWidth:i,windowCenter:n}=bi(e.lower,e.upper),r=Array.from({length:t},((e,i)=>(i+1)/(t+2))).flatMap((e=>{const t=((e,t,i)=>t-i/4*Math.log((1-e)/e))(e,n,i);return[t,e,e,e,.5,0]})),a=ir().newInstance();return a.buildFunctionFromArray(wn().newInstance({values:r,numberOfComponents:6})),a}const pr=e=>{const t=e.includes("volumeId:")?e.substring(9):e,i=t.indexOf("sliceIndex=");return-1===i?t:t.substring(0,i-1)},fr=1+J,vr=e=>!!vt().find((t=>{return(n=t)===(i=e.volumeId).substring(0,Math.min(i.length,n.length));var i,n}));function wr(e,t,i){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{viewPlaneNormal:r}=t,a=e.getActors();if(!a.length)return{spacingInNormalDirection:null,imageVolume:null,actorUID:null};const o=a.map((e=>{const t=e.referencedId??e.uid;return he.getVolume(t)})).filter((e=>!!e));if(i){const t=pr(i),s=o.findIndex((e=>t.includes(e.volumeId))),l=o[s],{uid:c}=a[s];return{imageVolume:l,spacingInNormalDirection:Ir(l,r,e,n),actorUID:c}}if(!o.length)return{spacingInNormalDirection:null,imageVolume:null,actorUID:null};const s={spacingInNormalDirection:1/0,imageVolume:null,actorUID:null},l=o.find(vr);for(let t=0;t<o.length;t++){const i=o[t];if(l&&!vr(i))continue;const n=Ir(i,r,e);n*fr<s.spacingInNormalDirection&&(s.spacingInNormalDirection=n,s.imageVolume=i,s.actorUID=a[t].uid)}return s}function Ir(e,t,i){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{slabThickness:r}=i.getProperties();let a=r;return r&&n||(a=Wn(e,t)),a}const Cr=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=e.getCamera(),{focalPoint:r,viewPlaneNormal:a}=n,{spacingInNormalDirection:o,actorUID:s}=wr(e,n,t,i);if(!s)throw new Error(`Could not find image volume with id ${t} in the viewport`);const l=e.getActor(s);return l?{sliceRange:Qn(l.actor,a,r),spacingInNormalDirection:o,camera:n}:(console.warn("No actor found for with actorUID of",s),null)},Er=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const{sliceRange:n,spacingInNormalDirection:r,camera:a}=Cr(e,t,i),{min:o,max:s,current:l}=n,c=Math.round((s-o)/r),d=(l-o)/(s-o)*c;return{numScrollSteps:c,currentStepIndex:Math.round(d),sliceRangeInfo:{sliceRange:n,spacingInNormalDirection:r,camera:a}}};function yr(e,t){const i=t.colorTransfer.split(" ").splice(1).map(parseFloat),{shiftRange:n}=function(e){let t=1/0,i=-1/0;for(let n=0;n<e.length;n+=4)t=Math.min(t,e[n]),i=Math.max(i,e[n]);const n=(i-t)/2;return{shiftRange:[-n,n],min:t,max:i}}(i),r=n[0],a=n[1]-n[0],o=ir().newInstance(),s=[];for(let e=0;e<i.length;e+=4){let t=i[e];const n=i[e+1],o=i[e+2],l=i[e+3];t=(t-r)/a,s.push([t,n,o,l])}!function(e,t,i){const n=t[1]-t[0],r=e.map((e=>{let[i,r,a,o]=e;return[i*n+t[0],r,a,o]}));i.removeAllPoints(),r.forEach((e=>{let[t,n,r,a]=e;return i.addRGBPoint(t,n,r,a)}))}(s,n,o),e.getProperty().setRGBTransferFunction(0,o);const l=t.scalarOpacity.split(" ").splice(1).map(parseFloat),c=or().newInstance(),d=[];for(let e=0;e<l.length;e+=2){let t=l[e];const i=l[e+1];t=(t-r)/a,d.push([t,i])}!function(e,t,i){const n=t[1]-t[0],r=e.map((e=>{let[i,r]=e;return[i*n+t[0],r]}));i.removeAllPoints(),r.forEach((e=>{let[t,n]=e;return i.addPoint(t,n)}))}(d,n,c);const h=e.getProperty();h.setScalarOpacity(0,c);const[u,g,m,p]=t.gradientOpacity.split(" ").splice(1).map(parseFloat);h.setUseGradientOpacity(0,!0),h.setGradientOpacityMinimumValue(0,u),h.setGradientOpacityMinimumOpacity(0,g),h.setGradientOpacityMaximumValue(0,m),h.setGradientOpacityMaximumOpacity(0,p),"1"===t.interpolation&&h.setInterpolationTypeToFastLinear(),h.setShade("1"===t.shade);const f=parseFloat(t.ambient),v=parseFloat(t.diffuse),w=parseFloat(t.specular),I=parseFloat(t.specularPower);h.setAmbient(f),h.setDiffuse(v),h.setSpecular(w),h.setSpecularPower(I)}const Rr=function(e){const t=e.getCamera(),{spacingInNormalDirection:i,imageVolume:n}=wr(e,t);if(!n)return;const{viewPlaneNormal:r,focalPoint:a}=t,o=e.getActors().find((e=>e.referencedId===n.volumeId||e.uid===n.volumeId));o||console.warn("No actor found for with actorUID of",n.volumeId);const s=Qn(o.actor,r,a),{min:l,max:c,current:d}=s,h=Math.round((c-l)/i)+1;let u=(d-l)/(c-l)*h;return u=Math.floor(u),u>h-1?u=h-1:u<0&&(u=0),{numberOfSlices:h,imageIndex:u}},Pr={};var br=K(807),Tr=K.n(br);function Ar(e,t,i){const[n,r,a]=e,[o,s,l]=t,[c,d,h,u]=i,g=o-n,m=s-r,p=l-a,f=-1*(c*n+d*r+h*a-u)/(c*g+d*m+h*p);return[g*f+n,m*f+r,p*f+a]}function Sr(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const[n,r,a]=e,o=n*t[0]+r*t[1]+a*t[2];if(i){const e=Math.sqrt(n*n+r*r+a*a);return[n/e,r/e,a/e,o/e]}return[n,r,a,o]}function Or(e,t,i){const[n,r,a,o]=e,[s,l,c,d]=t,[h,u,g,m]=i,p=se.mat3.fromValues(n,s,h,r,l,u,a,c,g),f=se.mat3.fromValues(o,d,m,r,l,u,a,c,g),v=se.mat3.fromValues(n,s,h,o,d,m,a,c,g),w=se.mat3.fromValues(n,s,h,r,l,u,o,d,m);return[se.mat3.determinant(f)/se.mat3.determinant(p),se.mat3.determinant(v)/se.mat3.determinant(p),se.mat3.determinant(w)/se.mat3.determinant(p)]}function Dr(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const[n,r,a,o]=e,[s,l,c]=t,d=n*s+r*l+a*c-o,h=Math.abs(d)/Math.sqrt(n*n+r*r+a*a);return(i?Math.sign(d):1)*h}function Mr(e){return Array.isArray(e)?e.some((e=>Number.isNaN(e))):Number.isNaN(e)}class xr{constructor(e){re(this,"id",void 0),re(this,"element",void 0),re(this,"canvas",void 0),re(this,"renderingEngineId",void 0),re(this,"type",void 0),re(this,"insetImageMultiplier",1.1),re(this,"flipHorizontal",!1),re(this,"flipVertical",!1),re(this,"isDisabled",void 0),re(this,"viewportStatus",F.NO_DATA),re(this,"sx",void 0),re(this,"sy",void 0),re(this,"sWidth",void 0),re(this,"sHeight",void 0),re(this,"_actors",void 0),re(this,"defaultOptions",void 0),re(this,"options",void 0),re(this,"_suppressCameraModifiedEvents",!1),re(this,"suppressEvents",void 0),re(this,"hasPixelSpacing",!0),re(this,"calibration",void 0),re(this,"initialCamera",void 0),re(this,"fitToCanvasCamera",void 0),re(this,"getRotation",void 0),re(this,"getFrameOfReferenceUID",void 0),re(this,"canvasToWorld",void 0),re(this,"worldToCanvas",void 0),re(this,"customRenderViewportToCanvas",void 0),re(this,"resize",void 0),re(this,"getProperties",(()=>({}))),re(this,"updateRenderingPipeline",void 0),re(this,"getNumberOfSlices",void 0),re(this,"setRotation",(e=>{})),re(this,"viewportWidgets",new Map),re(this,"addWidget",((e,t)=>{this.viewportWidgets.set(e,t)})),re(this,"getWidget",(e=>this.viewportWidgets.get(e))),re(this,"getWidgets",(()=>Array.from(this.viewportWidgets.values()))),re(this,"removeWidgets",(()=>{this.getWidgets().forEach((e=>{if(e.getEnabled()&&e.setEnabled(!1),e.getActor&&e.getRenderer){const t=e.getActor(),i=e.getRenderer();i&&t&&i.removeActor(t)}}))})),this.id=e.id,this.renderingEngineId=e.renderingEngineId,this.type=e.type,this.element=e.element,this.canvas=e.canvas,this.sx=e.sx,this.sy=e.sy,this.sWidth=e.sWidth,this.sHeight=e.sHeight,this._actors=new Map,this.element.setAttribute("data-viewport-uid",this.id),this.element.setAttribute("data-rendering-engine-uid",this.renderingEngineId),this.defaultOptions=structuredClone(e.defaultOptions),this.suppressEvents=!!e.defaultOptions.suppressEvents&&e.defaultOptions.suppressEvents,this.options=structuredClone(e.defaultOptions),this.isDisabled=!1}static get useCustomRenderingPipeline(){return!1}setRendered(){this.viewportStatus!==F.NO_DATA&&this.viewportStatus!==F.LOADING&&(this.viewportStatus=F.RENDERED)}getRenderingEngine(){return St.get(this.renderingEngineId)}getRenderer(){const e=this.getRenderingEngine();if(!e||e.hasBeenDestroyed)throw new Error("Rendering engine has been destroyed");return e.offscreenMultiRenderWindow?.getRenderer(this.id)}render(){this.getRenderingEngine().renderViewport(this.id)}setOptions(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.options=structuredClone(e),this.options?.displayArea&&this.setDisplayArea(this.options?.displayArea),t&&this.render()}reset(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.options=structuredClone(this.defaultOptions),e&&this.render()}getSliceViewInfo(){throw new Error("Method not implemented.")}flip(e){let{flipHorizontal:t,flipVertical:i}=e;const n=this.getDefaultImageData();if(!n)return;const r=this.getCamera(),{viewPlaneNormal:a,viewUp:o,focalPoint:s,position:l}=r,c=se.vec3.cross(se.vec3.create(),a,o);let d=se.vec3.copy(se.vec3.create(),o);const h=se.vec3.negate(se.vec3.create(),a),u=se.vec3.distance(l,s),g=n.getDimensions().map((e=>Math.floor(e/2))),m=[g[0],g[1],g[2]],p=n.indexToWorld(m,se.vec3.create()),f=this._getFocalPointForResetCamera(p,r,{resetPan:!0,resetToCenter:!1}),v=se.vec3.subtract(se.vec3.create(),s,f),w=se.vec3.length(v),I=e=>{const t=se.vec3.scale(se.vec3.create(),e,2*se.vec3.dot(v,e));return se.vec3.subtract(t,t,v),se.vec3.normalize(t,t),t};if(t){const e=I(d),t=se.vec3.scaleAndAdd(se.vec3.create(),f,e,w),i=se.vec3.scaleAndAdd(se.vec3.create(),t,h,u);this.setCamera({viewPlaneNormal:h,position:i,focalPoint:t}),this.flipHorizontal=!this.flipHorizontal}if(i){d=se.vec3.negate(d,o);const e=I(c),t=se.vec3.scaleAndAdd(se.vec3.create(),f,e,w),i=se.vec3.scaleAndAdd(se.vec3.create(),t,h,u);this.setCamera({focalPoint:t,viewPlaneNormal:h,viewUp:d,position:i}),this.flipVertical=!this.flipVertical}this.render()}getDefaultImageData(){const e=this.getDefaultActor();if(e&&Bn(e))return e.actor.getMapper().getInputData()}getDefaultActor(){return this.getActors()[0]}getActors(){return Array.from(this._actors.values())}getActorUIDs(){return Array.from(this._actors.keys())}getActor(e){return this._actors.get(e)}getActorUIDByIndex(e){const t=this.getActors()[e];if(t)return t.uid}getActorByIndex(e){return this.getActors()[e]}setActors(e){this.removeAllActors(),this.addActors(e,!0)}_removeActor(e){const t=this.getActor(e);t?(this.getRenderer().removeViewProp(t.actor),this._actors.delete(e)):console.warn(`Actor ${e} does not exist for this viewport`)}removeActors(e){e.forEach((e=>{this._removeActor(e)}))}addActors(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.getRenderingEngine();i&&!i.hasBeenDestroyed?(e.forEach((e=>{this.addActor(e)})),this.resetCamera({resetPan:t,resetZoom:t})):console.warn("Viewport::addActors::Rendering engine has not been initialized or has been destroyed")}addActor(e){const{uid:t,actor:i}=e,n=this.getRenderingEngine();if(!n||n.hasBeenDestroyed)return void console.warn(`Cannot add actor UID of ${t} Rendering Engine has been destroyed`);if(!t||!i)throw new Error("Actors should have uid and vtk Actor properties");if(this.getActor(t))return void console.warn(`Actor ${t} already exists for this viewport`);const r=this.getRenderer();r?.addActor(i),this._actors.set(t,Object.assign({},e)),this.updateCameraClippingPlanesAndRange()}removeAllActors(){this.getRenderer()?.removeAllViewProps(),this._actors=new Map}resetCameraNoEvent(){this._suppressCameraModifiedEvents=!0,this.resetCamera(),this._suppressCameraModifiedEvents=!1}setCameraNoEvent(e){this._suppressCameraModifiedEvents=!0,this.setCamera(e),this._suppressCameraModifiedEvents=!1}_getViewImageDataIntersections(e,t,i){const n=i[0],r=i[1],a=i[2],o=n*t[0]+r*t[1]+a*t[2],s=e.getBounds(),l=this._getEdges(s),c=[];for(const e of l){const[[t,i,l],[d,h,u]]=e;if(n*(d-t)+r*(h-i)+a*(u-l)==0)continue;const g=Ar([t,i,l],[d,h,u],[n,r,a,o]);this._isInBounds(g,s)&&c.push(g)}return c}setInterpolationType(e,t){}setDisplayArea(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e)return;const{storeAsInitialCamera:i,type:n}=e;i&&(this.options.displayArea=e);const{_suppressCameraModifiedEvents:r}=this;if(this._suppressCameraModifiedEvents=!0,this.setCamera(this.fitToCanvasCamera),"SCALE"===n?this.setDisplayAreaScale(e):(this.setInterpolationType(this.getProperties()?.interpolationType||E.LINEAR),this.setDisplayAreaFit(e)),i&&(this.initialCamera=this.getCamera()),this._suppressCameraModifiedEvents=r,!t&&!r){const t={viewportId:this.id,displayArea:e,storeAsInitialCamera:i};ce(this.element,p.DISPLAY_AREA_MODIFIED,t),this.setCamera(this.getCamera())}}setDisplayAreaScale(e){const{scale:t=1}=e,i=this.canvas,n=i.height,r=i.width;if(n<8||r<8)return;const a=this.getDefaultImageData().getSpacing()[1];this.setInterpolationType(E.NEAREST),this.setCamera({parallelScale:n*a/(2*t)}),delete e.imageArea,this.setDisplayAreaFit(e);const{focalPoint:o,position:s,viewUp:l,viewPlaneNormal:c}=this.getCamera(),d=se.vec3.create();if(i.height%2&&se.vec3.scaleAndAdd(d,d,l,.5*t*a),i.width%2){const e=se.vec3.cross(se.vec3.create(),l,c);se.vec3.scaleAndAdd(d,d,e,.5*t*a)}(d[0]||d[1]||d[2])&&this.setCamera({focalPoint:se.vec3.add(se.vec3.create(),o,d),position:se.vec3.add(se.vec3.create(),s,d)})}setDisplayAreaFit(e){const{imageArea:t,imageCanvasPoint:i}=e,n=window?.devicePixelRatio||1,r=this.getDefaultImageData();if(!r)return;const a=this.sWidth/n,o=this.sHeight/n,s=r.getDimensions(),l=this.worldToCanvas(r.indexToWorld([0,0,0])),c=this.worldToCanvas(r.indexToWorld([s[0]-1,s[1]-1,s[2]])),d=[Math.abs(c[0]-l[0]),Math.abs(c[1]-l[1])],[h,u]=d;if(t){const[e,i]=t,n=Math.abs(e*h/a),r=Math.abs(i*u/o),s=this.getZoom(),l=this.getZoom(this.fitToCanvasCamera),c=Math.min(1/n,1/r)*s/l;this.setZoom(c,!1)}if(i){const{imagePoint:e,canvasPoint:t=e||[.5,.5]}=i,[n,r]=t,s=a*(n-.5),l=o*(r-.5),[c,d]=e||t,g=1,m=[g*h*(.5-c)+s,g*u*(.5-d)+l];se.vec2.add(m,m,this.getPan()),this.setPan(m,!1)}}getDisplayArea(){return this.options?.displayArea}resetCamera(e){const{resetPan:t=!0,resetZoom:i=!0,resetToCenter:n=!0,storeAsInitialCamera:r=!0}=e||{},a=this.getRenderer();this.setCameraNoEvent({flipHorizontal:!1,flipVertical:!1});const o=structuredClone(this.getCamera()),s=a.computeVisiblePropBounds(),l=[0,0,0],c=this.getDefaultImageData();if(c){const e=c.getSpacing();s[0]=s[0]+e[0]/2,s[1]=s[1]-e[0]/2,s[2]=s[2]+e[1]/2,s[3]=s[3]-e[1]/2,s[4]=s[4]+e[2]/2,s[5]=s[5]-e[2]/2}const d=this.getVtkActiveCamera(),h=d.getViewPlaneNormal(),u=d.getViewUp();if(l[0]=(s[0]+s[1])/2,l[1]=(s[2]+s[3])/2,l[2]=(s[4]+s[5])/2,c){const e=c.getDimensions().map((e=>Math.floor(e/2))),t=[e[0],e[1],e[2]];c.indexToWorld(t,l)}const{widthWorld:g,heightWorld:m}=this._getWorldDistanceViewUpAndViewRight(s,u,h),p=[this.sWidth,this.sHeight],f=g/m/(p[0]/p[1]),v=f<1?this.insetImageMultiplier*m/2:this.insetImageMultiplier*m*f/2,w=xr.boundsRadius(s)*(this.type===I.VOLUME_3D?10:1),C=this.insetImageMultiplier*w,E=Math.abs(Tr().dot(u,h))>.999?[-u[2],u[0],u[1]]:u,y=this._getFocalPointForResetCamera(l,o,{resetPan:t,resetToCenter:n}),R=[y[0]+C*h[0],y[1]+C*h[1],y[2]+C*h[2]];a.resetCameraClippingRange(s);const P=[-Z.MAXIMUM_RAY_DISTANCE,Z.MAXIMUM_RAY_DISTANCE];d.setPhysicalScale(w),d.setPhysicalTranslation(-y[0],-y[1],-y[2]),this.setCamera({parallelScale:i?v:o.parallelScale,focalPoint:y,position:R,viewAngle:90,viewUp:E,clippingRange:P});const b=structuredClone(this.getCamera());this.setFitToCanvasCamera(structuredClone(this.getCamera())),r&&this.setInitialCamera(b),i&&this.setZoom(1,r);const T={type:"ResetCameraEvent",renderer:a};return a.invokeEvent(T),this.triggerCameraModifiedEventIfNecessary(o,b),c&&this.options.displayArea&&i&&t&&n&&this.setDisplayArea(this.options.displayArea),!0}setInitialCamera(e){this.initialCamera=e}setFitToCanvasCamera(e){this.fitToCanvasCamera=e}getPan(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.initialCamera;const t=this.getVtkActiveCamera().getFocalPoint(),i=this.canvasToWorld([0,0]),n=this.worldToCanvas(se.vec3.subtract([0,0,0],e.focalPoint,i)),r=this.worldToCanvas(se.vec3.subtract([0,0,0],t,i));return se.vec2.subtract([0,0],n,r)}getCurrentImageIdIndex(){throw new Error("Not implemented")}getSliceIndex(){throw new Error("Not implemented")}getImageData(){throw new Error("Not implemented")}getViewReferenceId(e){return null}setPan(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.getCamera(),{focalPoint:n,position:r}=i,a=this.canvasToWorld([0,0]),o=se.vec2.subtract([0,0],e,this.getPan());if(Math.abs(o[0])<1&&Math.abs(o[1])<1&&!t)return;const s=se.vec3.subtract(se.vec3.create(),this.canvasToWorld(o),a),l=se.vec3.subtract(se.vec3.create(),n,s),c=se.vec3.subtract(se.vec3.create(),r,s);this.setCamera({...i,focalPoint:l,position:c},t)}getZoom(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.initialCamera;if(!e)return 1;const t=this.getVtkActiveCamera(),{parallelScale:i}=e;return i/t.getParallelScale()}setZoom(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.getCamera(),{parallelScale:n}=this.initialCamera,r=n/e;(i.parallelScale!==r||t)&&this.setCamera({...i,parallelScale:r},t)}_getFocalPointForViewPlaneReset(e){const{focalPoint:t,viewPlaneNormal:i}=this.getCamera(),n=this._getViewImageDataIntersections(e,t,i);let r=0,a=0,o=0;return n.forEach((e=>{let[t,i,n]=e;r+=t,a+=i,o+=n})),[r/n.length,a/n.length,o/n.length]}getCanvas(){return this.canvas}getVtkActiveCamera(){return this.getRenderer().getActiveCamera()}getCameraNoRotation(){const e=this.getVtkActiveCamera();return{viewUp:e.getViewUp(),viewPlaneNormal:e.getViewPlaneNormal(),position:e.getPosition(),focalPoint:e.getFocalPoint(),parallelProjection:e.getParallelProjection(),parallelScale:e.getParallelScale(),viewAngle:e.getViewAngle(),flipHorizontal:this.flipHorizontal,flipVertical:this.flipVertical}}getCamera(){return{...this.getCameraNoRotation(),rotation:this.getRotation()}}setCamera(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.getVtkActiveCamera(),n=structuredClone(this.getCamera()),r=Object.assign({},n,e),{viewUp:a,viewPlaneNormal:o,position:s,focalPoint:l,parallelScale:c,viewAngle:d,flipHorizontal:h,flipVertical:u,clippingRange:g}=e;if(void 0!==h){const e=h&&!this.flipHorizontal||!h&&this.flipHorizontal;e&&this.flip({flipHorizontal:e})}if(void 0!==u){const e=u&&!this.flipVertical||!u&&this.flipVertical;e&&this.flip({flipVertical:e})}void 0!==a&&i.setViewUp(a),void 0!==o&&i.setDirectionOfProjection(-o[0],-o[1],-o[2]),void 0!==s&&i.setPosition(...s),void 0!==l&&i.setFocalPoint(...l),void 0!==c&&i.setParallelScale(c),void 0!==d&&i.setViewAngle(d),void 0!==g&&i.setClippingRange(g);const m=n.focalPoint,p=n.viewUp;if(m&&l||p&&a){const e=i.getViewPlaneNormal(),t=i.getViewUp();let n=!1,o=!1;if(l){const t=[l[0]-m[0],l[1]-m[1],l[2]-m[2]];n=Math.abs(Tr().dot(t,e))>0}if(a&&(o=!ve(t,p)),n||o){const e=this.getDefaultActor();if(!e.actor)return;qn(e,"vtkActor")||this.updateClippingPlanesForActors(r),(qn(e,"vtkImageSlice")||this.type===I.VOLUME_3D)&&this.getRenderer().resetCameraClippingRange()}}t&&this.setInitialCamera(r),this.triggerCameraModifiedEventIfNecessary(n,this.getCamera())}triggerCameraModifiedEventIfNecessary(e,t){if(!this._suppressCameraModifiedEvents&&!this.suppressEvents){const i={previousCamera:e,camera:t,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};ce(this.element,p.CAMERA_MODIFIED,i)}}updateCameraClippingPlanesAndRange(){const e=this.getCamera();this.updateClippingPlanesForActors(e),this.getRenderer().resetCameraClippingRange()}async updateClippingPlanesForActors(e){this.getActors().map((t=>{if(!t.actor)return;const i=t.actor.getMapper();let n=t?.clippingFilter?t?.clippingFilter.getClippingPlanes():i.getClippingPlanes();0===n.length&&t?.clippingFilter&&(n=[Gn().newInstance(),Gn().newInstance()]);let r=Z.MINIMUM_SLAB_THICKNESS;t.slabThickness&&(r=t.slabThickness);const{viewPlaneNormal:a,focalPoint:o}=e;this.setOrientationOfClippingPlanes(n,r,a,o),ce(this.element,p.CLIPPING_PLANES_UPDATED,{actorEntry:t,focalPoint:o,vtkPlanes:n,viewport:this})}))}setOrientationOfClippingPlanes(e,t,i,n){if(e.length<2)return;const r=[i[0],i[1],i[2]];Tr().multiplyScalar(r,t),e[0].setNormal(i);const a=[0,0,0];Tr().subtract(n,r,a),e[0].setOrigin(a),e[1].setNormal(-i[0],-i[1],-i[2]);const o=[0,0,0];Tr().add(n,r,o),e[1].setOrigin(o)}getClippingPlanesForActor(e){if(e||(e=this.getDefaultActor()),!e.actor)throw new Error("Invalid actor entry: Actor is undefined");const t=e.actor.getMapper();let i=e?.clippingFilter?e?.clippingFilter.getClippingPlanes():t.getClippingPlanes();return 0===i.length&&e?.clippingFilter&&(i=[Gn().newInstance(),Gn().newInstance()]),i}_getWorldDistanceViewUpAndViewRight(e,t,i){const n=this._getCorners(e),r=this._getCorners(e),a=se.vec3.cross(se.vec3.create(),t,i);let o=$n().buildFromDegree().identity().rotateFromDirections(t,[1,0,0]);n.forEach((e=>o.apply(e)));let s=1/0,l=-1/0;for(let e=0;e<8;e++){const t=n[e][0];t>l&&(l=t),t<s&&(s=t)}o=$n().buildFromDegree().identity().rotateFromDirections([a[0],a[1],a[2]],[1,0,0]),r.forEach((e=>o.apply(e)));let c=1/0,d=-1/0;for(let e=0;e<8;e++){const t=r[e][0];t>d&&(d=t),t<c&&(c=t)}return{widthWorld:d-c,heightWorld:l-s}}getViewReference(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{focalPoint:t,viewPlaneNormal:i,viewUp:n}=this.getCamera();return{FrameOfReferenceUID:this.getFrameOfReferenceUID(),cameraFocalPoint:t,viewPlaneNormal:i,viewUp:n,sliceIndex:e.sliceIndex??this.getSliceIndex()}}isReferenceViewable(e,t){if(e.FrameOfReferenceUID&&e.FrameOfReferenceUID!==this.getFrameOfReferenceUID())return!1;const{viewPlaneNormal:i}=e,n=this.getCamera();return!(i&&!ve(i,n.viewPlaneNormal)&&!ve(se.vec3.negate(n.viewPlaneNormal,n.viewPlaneNormal),i))||t?.withOrientation}getViewPresentation(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{rotation:!0,displayArea:!0,zoom:!0,pan:!0};const t={},{rotation:i,displayArea:n,zoom:r,pan:a}=e;i&&(t.rotation=this.getRotation()),n&&(t.displayArea=this.getDisplayArea());const o=this.getZoom();return r&&(t.zoom=o),a&&(t.pan=this.getPan(),se.vec2.scale(t.pan,t.pan,1/o)),t}setViewReference(e){}setViewPresentation(e){if(!e)return;const{displayArea:t,zoom:i=this.getZoom(),pan:n,rotation:r}=e;t!==this.getDisplayArea()&&this.setDisplayArea(t),this.setZoom(i),n&&this.setPan(se.vec2.scale([0,0],n,i)),r>=0&&this.setRotation(r)}_getCorners(e){return[[e[0],e[2],e[4]],[e[0],e[2],e[5]],[e[0],e[3],e[4]],[e[0],e[3],e[5]],[e[1],e[2],e[4]],[e[1],e[2],e[5]],[e[1],e[3],e[4]],[e[1],e[3],e[5]]]}_getFocalPointForResetCamera(e,t,i){let{resetPan:n=!0,resetToCenter:r=!0}=i;if(r&&n)return e;if(r&&!n)return Mr(t.focalPoint)?e:t.focalPoint;if(!r&&n){const i=t,n=i.focalPoint,r=i.viewPlaneNormal,a=se.vec3.subtract(se.vec3.create(),e,n),o=se.vec3.dot(a,r),s=se.vec3.scaleAndAdd(se.vec3.create(),e,r,-1*o);return[s[0],s[1],s[2]]}return n||r?void 0:Mr(t.focalPoint)?e:t.focalPoint}_isInBounds(e,t){const[i,n,r,a,o,s]=t,[l,c,d]=e;return!(l<i||l>n||c<r||c>a||d<o||d>s)}_getEdges(e){const[t,i,n,r,a,o,s,l]=this._getCorners(e);return[[t,i],[t,a],[t,n],[i,r],[i,o],[n,r],[n,s],[r,l],[a,s],[a,o],[o,l],[s,l]]}static boundsRadius(e){const t=(e[1]-e[0])**2,i=(e[3]-e[2])**2,n=(e[5]-e[4])**2;return.5*Math.sqrt(t+i+n||1)}setDataIds(e,t){throw new Error("Unsupported operatoin setDataIds")}}re(xr,"CameraViewPresentation",{rotation:!0,pan:!0,zoom:!0,displayArea:!0}),re(xr,"TransferViewPresentation",{windowLevel:!0,paletteLut:!0});const _r=xr;var Vr=K(821),kr=K.n(Vr);const Lr={isPerformingCoordinateTransformation:!1};function Nr(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Lr,i),kr().extend(e,t,i),Pe().setGet(e,t,["isPerformingCoordinateTransformation"]),function(e,t){t.classHierarchy.push("vtkSlabCamera");const i=se.mat4.identity(new Float64Array(16)),n=new Float64Array(3);e.getProjectionMatrix=(e,r,a)=>{const o=se.mat4.create();if(t.projectionMatrix){const e=1/t.physicalScale;return se.vec3.set(n,e,e,e),se.mat4.copy(o,t.projectionMatrix),se.mat4.scale(o,o,n),se.mat4.transpose(o,o),o}se.mat4.identity(i);let s=t.clippingRange[0],l=t.clippingRange[1];t.isPerformingCoordinateTransformation&&(s=t.distance,l=t.distance+.1);const c=l-s,d=[s+(r+1)*c/2,s+(a+1)*c/2];if(t.parallelProjection){const n=t.parallelScale*e,r=t.parallelScale,a=(t.windowCenter[0]-1)*n,o=(t.windowCenter[0]+1)*n,s=(t.windowCenter[1]-1)*r,l=(t.windowCenter[1]+1)*r;se.mat4.ortho(i,a,o,s,l,d[0],d[1]),se.mat4.transpose(i,i)}else{if(t.useOffAxisProjection)throw new Error("Off-Axis projection is not supported at this time");{const n=Math.tan(Tr().radiansFromDegrees(t.viewAngle)/2);let r,a;!0===t.useHorizontalViewAngle?(r=s*n,a=s*n/e):(r=s*n*e,a=s*n);const o=(t.windowCenter[0]-1)*r,l=(t.windowCenter[0]+1)*r,c=(t.windowCenter[1]-1)*a,h=(t.windowCenter[1]+1)*a,u=d[0],g=d[1];i[0]=2*u/(l-o),i[5]=2*u/(h-c),i[2]=(o+l)/(l-o),i[6]=(c+h)/(h-c),i[10]=-(u+g)/(g-u),i[14]=-1,i[11]=-2*u*g/(g-u),i[15]=0}}return se.mat4.copy(o,i),o}}(e,t)}const Ur={newInstance:Pe().newInstance(Nr,"vtkSlabCamera"),extend:Nr};function Fr(e,t){return e.worldToIndex(t).map(Math.round)}function jr(e){const t=e.getSize(),i=[];for(let n=0;n<t;n++){const t=[];e.getNodeValue(n,t),i.push(t)}return i}function Gr(e,t){t?.length&&(e.removeAllPoints(),t.forEach((t=>{e.addRGBPoint(...t)})))}const Wr=class extends _r{constructor(e){if(super(e),re(this,"useCPURendering",!1),re(this,"_FrameOfReferenceUID",void 0),re(this,"initialTransferFunctionNodes",void 0),re(this,"globalDefaultProperties",void 0),re(this,"perVolumeIdDefaultProperties",new Map),re(this,"initialViewUp",void 0),re(this,"viewportProperties",{}),re(this,"volumeIds",new Set),re(this,"setRotation",(e=>{const t=this.getPan(this.fitToCanvasCamera),i=this.getPan(),n=this.getCamera(),r=se.vec2.sub([0,0],t,i);this.setPan(r,!1);const{flipVertical:a}=this.getCamera(),o=a?se.vec3.negate([0,0,0],this.initialViewUp):this.initialViewUp;this.setCameraNoEvent({viewUp:o}),this.rotateCamera(e);const s=this.getPan(),l=this.getPan(this.fitToCanvasCamera),c=se.vec2.sub([0,0],s,l),d=se.vec2.add([0,0],t,c);if(this.setPan(d,!1),this._suppressCameraModifiedEvents)return;const h={previousCamera:n,camera:this.getCamera(),element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};ce(this.element,p.CAMERA_MODIFIED,h)})),re(this,"getDefaultProperties",(e=>{let t;return void 0!==e&&(t=this.perVolumeIdDefaultProperties.get(e)),void 0!==t?t:{...this.globalDefaultProperties}})),re(this,"getProperties",(e=>{if(!this._getApplicableVolumeActor(e))return;const{colormap:t,VOILUTFunction:i,interpolationType:n,invert:r,slabThickness:a,preset:o}=this.viewportProperties,s=this.getActors().map((e=>{const t=e.actor,i=e.uid;if(!ue.getVolume(i))return null;const n=t.getProperty().getRGBTransferFunction(0),[r,a]="SIGMOID"===this.viewportProperties?.VOILUTFunction?sr(n):n.getRange();return{volumeId:i,voiRange:{lower:r,upper:a}}})).filter(Boolean),l=e?s.find((t=>t.volumeId===e))?.voiRange:s[0]?.voiRange,c=this.getColormap(e);return{colormap:e&&c?c:t,voiRange:l,VOILUTFunction:i,interpolationType:n,invert:r,slabThickness:a,preset:o}})),re(this,"getColormap",(e=>{const t=this._getApplicableVolumeActor(e);if(!t)return;const{volumeActor:i}=t,n=i.getProperty().getRGBTransferFunction(0),{nodes:r}=n.getState();return ur(r.reduce(((e,t)=>(e.push(t.x,t.r,t.g,t.b),e)),[]),i)})),re(this,"getRotation",(()=>{const{viewUp:e,viewPlaneNormal:t,flipVertical:i}=this.getCameraNoRotation(),n=i?se.vec3.negate([0,0,0],this.initialViewUp):this.initialViewUp;if(!n)return 0;const r=180*se.vec3.angle(n,e)/Math.PI,a=se.vec3.cross([0,0,0],n,e);return se.vec3.dot(a,t)>=0?r:(360-r)%360})),re(this,"getFrameOfReferenceUID",(()=>this._FrameOfReferenceUID)),re(this,"canvasToWorld",(e=>{const t=this.getVtkActiveCamera();t.setIsPerformingCoordinateTransformation?.(!0);const i=this.getRenderer(),n=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),r=n.getSize(),a=window.devicePixelRatio||1,o=[e[0]*a,e[1]*a],s=[o[0]+this.sx,o[1]+this.sy];s[1]=r[1]-s[1];const l=n.displayToWorld(s[0],s[1],0,i);return t.setIsPerformingCoordinateTransformation?.(!1),[l[0],l[1],l[2]]})),re(this,"worldToCanvas",(e=>{const t=this.getVtkActiveCamera();t.setIsPerformingCoordinateTransformation?.(!0);const i=this.getRenderer(),n=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),r=n.getSize(),a=n.worldToDisplay(...e,i);a[1]=r[1]-a[1];const o=[a[0]-this.sx,a[1]-this.sy],s=window.devicePixelRatio||1,l=[o[0]/s,o[1]/s];return t.setIsPerformingCoordinateTransformation(!1),l})),re(this,"hasImageURI",(e=>this.getActors().filter((e=>qn(e,"vtkVolume"))).some((t=>{let{uid:i}=t;const n=ue.getVolume(i);return!!n?.imageIds&&n.imageIds.map(de).includes(e)})))),re(this,"getImageIds",(e=>{const t=this._getApplicableVolumeActor(e);if(!t)throw new Error(`No actor found for the given volumeId: ${e}`);const i=t.volumeId,n=ue.getVolume(i);if(!n)throw new Error(`imageVolume with id: ${i} does not exist in cache`);return n.imageIds})),this.useCPURendering=vi(),this.useCPURendering)throw new Error("VolumeViewports cannot be used whilst CPU Fallback Rendering is enabled.");const t=this.getRenderer(),i=Ur.newInstance();switch(t.setActiveCamera(i),this.type){case I.ORTHOGRAPHIC:case I.VOLUME_3D:i.setParallelProjection(!0);break;case I.PERSPECTIVE:i.setParallelProjection(!1);break;default:throw new Error(`Unrecognized viewport type: ${this.type}`)}this.initializeVolumeNewImageEventDispatcher()}static get useCustomRenderingPipeline(){return!1}getSliceViewInfo(){throw new Error("Method not implemented.")}applyViewOrientation(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const{viewPlaneNormal:i,viewUp:n}=this._getOrientationVectors(e),r=this.getVtkActiveCamera();r.setDirectionOfProjection(-i[0],-i[1],-i[2]),r.setViewUpFrom(n),this.initialViewUp=n,t&&this.resetCamera()}initializeVolumeNewImageEventDispatcher(){const e=function(e){const{viewportId:t}=e.detail;t!==this.id||this.isDisabled||this.getImageData()&&function(e){const{renderingEngineId:t,viewportId:i}=e.detail,n=Ot(t).getViewport(i);if(!(n instanceof Wr))throw new Error("volumeNewImageEventDispatcher: viewport is not a BaseVolumeViewport");void 0===Pr[n.id]&&(Pr[n.id]=0);const r=Rr(n);if(!r)return void console.warn(`volumeNewImageEventDispatcher: sliceData is undefined for viewport ${n.id}`);const{numberOfSlices:a,imageIndex:o}=r;if(Pr[n.id]===o)return;Pr[n.id]=o;const s={imageIndex:o,viewportId:i,renderingEngineId:t,numberOfSlices:a};ce(n.element,p.VOLUME_NEW_IMAGE,s)}(e)}.bind(this),t=function(i){const{viewportId:n}=i.detail;n===this.id&&(this.element.removeEventListener(p.CAMERA_MODIFIED,e),le.removeEventListener(p.ELEMENT_DISABLED,t),function(e){void 0!==Pr[e]&&delete Pr[e]}(n))}.bind(this);this.element.removeEventListener(p.CAMERA_MODIFIED,e),this.element.addEventListener(p.CAMERA_MODIFIED,e),le.addEventListener(p.ELEMENT_DISABLED,t)}setVOILUTFunction(e,t,i){Object.values(V).includes(e)||(e=V.LINEAR);const{voiRange:n}=this.getProperties();this.setVOI(n,t,i),this.viewportProperties.VOILUTFunction=e}setColormap(e,t,i){const n=this._getApplicableVolumeActor(t);if(!n)return;const{volumeActor:r}=n,a=ir().newInstance();let o=dr(e.name);const{name:s}=e;if(o||(o=rr().getPresetByName(s)),!o)throw new Error(`Colormap ${e} not found`);const l=r.getProperty().getRGBTransferFunction(0).getRange();if(a.applyColorMap(o),a.setMappingRange(l[0],l[1]),r.getProperty().setRGBTransferFunction(0,a),this.viewportProperties.colormap=e,!i){const i={viewportId:this.id,colormap:e,volumeId:t};ce(this.element,p.COLORMAP_MODIFIED,i)}}setOpacity(e,t){const i=this._getApplicableVolumeActor(t);if(!i)return;const{volumeActor:n}=i,r=or().newInstance();if("number"==typeof e.opacity){const t=n.getProperty().getRGBTransferFunction(0).getRange();r.addPoint(t[0],e.opacity),r.addPoint(t[1],e.opacity)}else e.opacity.forEach((e=>{let{opacity:t,value:i}=e;r.addPoint(i,t)}));n.getProperty().setScalarOpacity(0,r),this.viewportProperties.colormap||(this.viewportProperties.colormap={}),this.viewportProperties.colormap.opacity=e.opacity}setInvert(e,t,i){const n=this._getApplicableVolumeActor(t);if(!n)return;const r=n.volumeId;if(gr(this._getOrCreateColorTransferFunction(r)),this.viewportProperties.invert=e,!i){const e={...this.getVOIModifiedEventDetail(r),invertStateChanged:!0};ce(this.element,p.VOI_MODIFIED,e)}}getVOIModifiedEventDetail(e){const t=this._getApplicableVolumeActor(e);if(!t)throw new Error(`No actor found for the given volumeId: ${e}`);const i=t.volumeActor.getProperty().getRGBTransferFunction(0).getMappingRange(),n=this.getColormap(e),{VOILUTFunction:r,invert:a}=this.getProperties(e);return{viewportId:this.id,range:{lower:i[0],upper:i[1]},volumeId:t.volumeId,VOILUTFunction:r,colormap:n,invert:a}}_getOrCreateColorTransferFunction(e){const t=this._getApplicableVolumeActor(e);if(!t)return null;const{volumeActor:i}=t,n=i.getProperty().getRGBTransferFunction(0);if(n)return n;const r=ir().newInstance();return i.getProperty().setRGBTransferFunction(0,r),r}setInterpolationType(e,t){const i=this._getApplicableVolumeActor(t);if(!i)return;const{volumeActor:n}=i;n.getProperty().setInterpolationType(e),this.viewportProperties.interpolationType=e}setVOI(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=this._getApplicableVolumeActor(t);if(!n)return;const{volumeActor:r}=n,a=n.volumeId;let o=e;if(void 0===o){const e=r.getMapper().getInputData().getPointData().getScalars().getRange();o={lower:e[0],upper:e[1]}}const{VOILUTFunction:s}=this.getProperties(a);if(s===V.SAMPLED_SIGMOID){const e=mr(o);r.getProperty().setRGBTransferFunction(0,e)}else{const{lower:e,upper:t}=o;r.getProperty().getRGBTransferFunction(0).setRange(e,t)}if(!i){const e={...this.getVOIModifiedEventDetail(a)};ce(this.element,p.VOI_MODIFIED,e)}this.viewportProperties.voiRange=o}rotateCamera(e){const t=e-this.getRotation();this.getVtkActiveCamera().roll(-t)}setDefaultProperties(e,t){null==t?this.globalDefaultProperties=e:this.perVolumeIdDefaultProperties.set(t,e)}clearDefaultProperties(e){null==e?(this.globalDefaultProperties={},this.resetProperties()):(this.perVolumeIdDefaultProperties.delete(e),this.resetToDefaultProperties(e))}getViewReference(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=super.getViewReference(e),i=this.getVolumeId(e);if(!1!==e?.forFrameOfReference&&(t.volumeId=i),"number"!=typeof e?.sliceIndex)return t;const{viewPlaneNormal:n}=t,r=e?.sliceIndex-this.getSliceIndex(),{sliceRangeInfo:a}=Er(this,i,!0),{sliceRange:o,spacingInNormalDirection:s,camera:l}=a,{focalPoint:c,position:d}=l,{newFocalPoint:h}=er(c,d,o,n,s,r);return t.cameraFocalPoint=h,t}isReferenceViewable(e,t){if(!e.FrameOfReferenceUID)return!1;if(!super.isReferenceViewable(e,t))return!1;if(t?.withNavigation)return!0;const i=this.getSliceIndex(),{sliceIndex:n}=e;return Array.isArray(n)?n[0]<=i&&i<=n[1]:void 0===n||n===i}scroll(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;const t=this.getVolumeId(),{sliceRangeInfo:i}=Er(this,t,!0);if(!i)return;const{sliceRange:n,spacingInNormalDirection:r,camera:a}=i,{focalPoint:o,viewPlaneNormal:s,position:l}=a,{newFocalPoint:c,newPosition:d}=er(o,l,n,s,r,e);this.setCamera({focalPoint:c,position:d})}setViewReference(e){if(!e)return;const t=this.getVolumeId(),{viewPlaneNormal:i,FrameOfReferenceUID:n,cameraFocalPoint:r,viewUp:a}=e;let{sliceIndex:o}=e;const{focalPoint:s,viewPlaneNormal:l,position:c}=this.getCamera(),d=Ce(l,i),h=ve(l,i);if("number"==typeof o&&e.volumeId===t&&(d||h)){const{currentStepIndex:e,sliceRangeInfo:i,numScrollSteps:n}=Er(this,t,!0),{sliceRange:r,spacingInNormalDirection:a}=i;d&&(o=n-o-1);const h=o-e,{newFocalPoint:u,newPosition:g}=er(s,c,r,l,a,h);this.setCamera({focalPoint:u,position:g})}else{if(n!==this.getFrameOfReferenceUID())throw new Error(`Incompatible view refs: ${n}!==${this.getFrameOfReferenceUID()}`);if(i&&!d&&!h)return this.setOrientation({viewPlaneNormal:i,viewUp:a}),void this.setViewReference(e);if(r){const e=se.vec3.subtract([0,0,0],r,s),t=i??l,n=se.vec3.dot(e,t);ve(n,0)||se.vec3.scale(e,t,n);const a=se.vec3.add([0,0,0],s,e),o=se.vec3.add([0,0,0],c,e);this.setCamera({focalPoint:a,position:o})}}}setProperties(){let{voiRange:e,VOILUTFunction:t,invert:i,colormap:n,preset:r,interpolationType:a,slabThickness:o}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=arguments.length>1?arguments[1]:void 0,l=arguments.length>2&&void 0!==arguments[2]&&arguments[2];null==this.globalDefaultProperties&&this.setDefaultProperties({voiRange:e,VOILUTFunction:t,invert:i,colormap:n,preset:r,slabThickness:o}),n?.name&&this.setColormap(n,s,l),null!=n?.opacity&&this.setOpacity(n,s),void 0!==e&&this.setVOI(e,s,l),void 0!==a&&this.setInterpolationType(a),void 0!==t&&this.setVOILUTFunction(t,s,l),void 0!==i&&this.viewportProperties.invert!==i&&this.setInvert(i,s,l),void 0!==r&&this.setPreset(r,s,l),void 0!==o&&(this.setSlabThickness(o),this.viewportProperties.slabThickness=o)}resetToDefaultProperties(e){const t=this.globalDefaultProperties;t.colormap?.name&&this.setColormap(t.colormap,e),null!=t.colormap?.opacity&&this.setOpacity(t.colormap,e),void 0!==t.voiRange&&this.setVOI(t.voiRange,e),void 0!==t.VOILUTFunction&&this.setVOILUTFunction(t.VOILUTFunction,e),void 0!==t.invert&&this.setInvert(t.invert,e),void 0!==t.slabThickness&&(this.setSlabThickness(t.slabThickness),this.viewportProperties.slabThickness=t.slabThickness),this.render()}setPreset(e,t,i){const n=this._getApplicableVolumeActor(t);if(!n)return;const{volumeActor:r}=n;let a=e;"string"==typeof a&&(a=Q.find((t=>t.name===e))),a&&(yr(r,a),this.viewportProperties.preset=a,this.render(),i||ce(this.element,p.PRESET_MODIFIED,{viewportId:this.id,volumeId:n.volumeId,actor:r,presetName:a.name}))}async setVolumes(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=ue.getVolume(e[0].volumeId);if(!n)throw new Error(`imageVolume with id: ${n.volumeId} does not exist, you need to create/allocate the volume first`);const r=n.metadata.FrameOfReferenceUID;this._isValidVolumeInputArray(e,r),this._FrameOfReferenceUID=r,e.forEach((e=>{this._addVolumeId(e.volumeId)}));const a=[];for(let t=0;t<e.length;t++){const{volumeId:n,actorUID:r,slabThickness:o}=e[t],s=await Di(e[t],this.element,this.id,i),l=r||n;a.push({uid:l,actor:s,slabThickness:o,referencedId:n})}this._setVolumeActors(a),this.viewportStatus=F.PRE_RENDER,this.initializeColorTransferFunction(e),ce(this.element,p.VOLUME_VIEWPORT_NEW_VOLUME,{viewportId:this.id,volumeActors:a}),t&&this.render()}async addVolumes(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=ue.getVolume(e[0].volumeId);if(!n)throw new Error(`imageVolume with id: ${n.volumeId} does not exist`);const r=[];this._isValidVolumeInputArray(e,this._FrameOfReferenceUID),e.forEach((e=>{this._addVolumeId(e.volumeId)}));for(let t=0;t<e.length;t++){const{volumeId:n,visibility:a,actorUID:o,slabThickness:s}=e[t],l=await Di(e[t],this.element,this.id,i);a||l.setVisibility(!1);const c=o||n;r.push({uid:c,actor:l,slabThickness:s,referencedId:n})}this.addActors(r),this.initializeColorTransferFunction(e),t&&this.render()}removeVolumeActors(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.removeActors(e),t&&this.render()}setOrientation(e){console.warn('Method "setOrientation" needs implementation')}initializeColorTransferFunction(e){const t=e[0].volumeId,i=this._getOrCreateColorTransferFunction(t);!this.initialTransferFunctionNodes&&i&&(this.initialTransferFunctionNodes=jr(i))}_getApplicableVolumeActor(e){if(void 0!==e&&!this.getActor(e))return;const t=this.getActors();if(!t.length)return;let i;return e&&(i=this.getActor(e).actor),i||(i=t[0].actor,e=t[0].uid),{volumeActor:i,volumeId:e}}async _isValidVolumeInputArray(e,t){const i=e.length;for(let n=1;n<i;n++)if(t!==ue.getVolume(e[n].volumeId).metadata.FrameOfReferenceUID)throw new Error(`Volumes being added to viewport ${this.id} do not share the same FrameOfReferenceUID. This is not yet supported`);return!0}getBounds(){return this.getRenderer().computeVisiblePropBounds()}flip(e){super.flip(e)}hasVolumeId(e){return this.volumeIds.has(e)}getImageData(e){const t=this.getDefaultActor();if(!t)return;const{uid:i}=t;e=e??i;const n=this.getActor(e);if(!qn(n,"vtkVolume"))return;const r=n.actor,a=ue.getVolume(e),o=r.getMapper().getInputData();return{dimensions:o.getDimensions(),spacing:o.getSpacing(),origin:o.getOrigin(),direction:o.getDirection(),imageData:r.getMapper().getInputData(),metadata:{Modality:a?.metadata?.Modality,FrameOfReferenceUID:a?.metadata?.FrameOfReferenceUID},get scalarData(){return a?.voxelManager?.getScalarData()},scaling:a?.scaling,hasPixelSpacing:!0,voxelManager:a?.voxelManager}}_setVolumeActors(e){for(let t=0;t<e.length;t++)this.viewportProperties.invert=!1;this.setActors(e)}_getOrientationVectors(e){if("object"==typeof e){if(e.viewPlaneNormal&&e.viewUp)return e;throw new Error("Invalid orientation object. It must contain viewPlaneNormal and viewUp")}if("string"==typeof e&&X[e])return this.viewportProperties.orientation=e,X[e];throw new Error(`Invalid orientation: ${e}. Valid orientations are: ${Object.keys(X).join(", ")}`)}getSlabThickness(){const e=this.getActors();let t=Z.MINIMUM_SLAB_THICKNESS;return e.forEach((e=>{e.slabThickness>t&&(t=e.slabThickness)})),t}getIntensityFromWorld(e){const t=this.getDefaultActor();if(!qn(t,"vtkVolume"))return;const{actor:i,uid:n}=t,r=i.getMapper().getInputData(),a=ue.getVolume(n),o=Fr(r,e);return a.voxelManager.getAtIJKPoint(o)}getVolumeId(e){const t=this.getActors();if(t)return e?.volumeId?t.find((t=>"vtkVolume"===t.actor.getClassName()&&t.uid===e?.volumeId))?.uid:t.find((e=>"vtkVolume"===e.actor.getClassName()))?.uid}getViewReferenceId(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{volumeId:t,sliceIndex:i}=e;if(!t){const e=this.getActors();if(!e)return;t=e.find((e=>"vtkVolume"===e.actor.getClassName()))?.uid}const n=this.getSliceIndex();i??=n;const{viewPlaneNormal:r,focalPoint:a}=this.getCamera(),o=t.includes("?")?"&":"?";return`volumeId:${t}${o}sliceIndex=${i}&viewPlaneNormal=${r.join(",")}&focalPoint=${a.join(",")}`}_addVolumeId(e){this.volumeIds.add(e)}};function Br(e,t){const{imageData:i}=e.getImageData();return Fr(i,e.canvasToWorld(t))}function qr(e,t){return e.indexToWorld(t)}const zr=class extends Wr{constructor(e){super(e),re(this,"_useAcquisitionPlaneForViewPlane",!1),re(this,"getNumberOfSlices",(()=>{const{numberOfSlices:e}=Rr(this)||{};return e})),re(this,"getCurrentImageIdIndex",(e=>{const{viewPlaneNormal:t,focalPoint:i}=this.getCamera(),n=this.getImageData(e);if(!n)return;const{origin:r,direction:a,spacing:o}=n,s=Wn({direction:a,spacing:o},t),l=se.vec3.create();se.vec3.sub(l,i,r);const c=se.vec3.dot(l,t);return Math.round(Math.abs(c)/s)})),re(this,"getSliceIndex",(()=>{const{imageIndex:e}=Rr(this)||{};return e})),re(this,"getCurrentImageId",(()=>{const e=this.getDefaultActor();if(!e||!qn(e,"vtkVolume"))return;const{uid:t}=e,i=ue.getVolume(t);if(!i)return;const{viewPlaneNormal:n,focalPoint:r}=this.getCamera();return zn(i,r,n)})),re(this,"getSlicePlaneCoordinates",(()=>{const e=this.getDefaultActor();if(!e?.actor)return console.warn("No image data found for calculating vtkPlanes."),[];const t=e.uid,i=ue.getVolume(t),n=this.getCamera(),{focalPoint:r,position:a,viewPlaneNormal:o}=n,s=Wn(i,o),l=Qn(e.actor,o,r),c=Math.round((l.current-l.min)/s),d=Math.round((l.max-l.current)/s),h=this.getSliceIndex(),u=[];for(let e=-c;e<=d;e++){const{newFocalPoint:t}=er(r,a,l,o,s,e);u.push({sliceIndex:h+e,point:t})}return u}));const{orientation:t}=this.options;t&&t!==S.ACQUISITION?this.applyViewOrientation(t):this._useAcquisitionPlaneForViewPlane=!0}async setVolumes(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=ue.getVolume(e[0].volumeId);if(!n)throw new Error(`imageVolume with id: ${n.volumeId} does not exist`);return this._useAcquisitionPlaneForViewPlane&&(this._setViewPlaneToAcquisitionPlane(n),this._useAcquisitionPlaneForViewPlane=!1),super.setVolumes(e,t,i)}async addVolumes(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=ue.getVolume(e[0].volumeId);if(!n)throw new Error(`imageVolume with id: ${n.volumeId} does not exist`);return this._useAcquisitionPlaneForViewPlane&&(this._setViewPlaneToAcquisitionPlane(n),this._useAcquisitionPlaneForViewPlane=!1),super.addVolumes(e,t,i)}setOrientation(e){let t,i,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("string"==typeof e){if(X[e])({viewPlaneNormal:t,viewUp:i}=X[e]);else{if("acquisition"!==e)throw new Error(`Invalid orientation: ${e}. Use Enums.OrientationAxis instead.`);({viewPlaneNormal:t,viewUp:i}=this._getAcquisitionPlaneOrientation())}this.setCamera({viewPlaneNormal:t,viewUp:i}),this.viewportProperties.orientation=e,this.resetCamera()}else({viewPlaneNormal:t,viewUp:i}=e),this.applyViewOrientation(e);n&&this.render()}_getAcquisitionPlaneOrientation(){const e=this.getDefaultActor();if(!e)return;const t=e.uid,i=ue.getVolume(t);if(!i)throw new Error(`imageVolume with id: ${t} does not exist in cache`);const{direction:n}=i;return{viewPlaneNormal:n.slice(6,9).map((e=>-e)),viewUp:n.slice(3,6).map((e=>-e))}}_setViewPlaneToAcquisitionPlane(e){let t,i;if(e){const{direction:n}=e;t=n.slice(6,9).map((e=>-e)),i=n.slice(3,6).map((e=>-e))}else({viewPlaneNormal:t,viewUp:i}=this._getAcquisitionPlaneOrientation());this.setCamera({viewPlaneNormal:t,viewUp:i}),this.initialViewUp=i,this.resetCamera()}setBlendMode(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.getActors();t&&t.length>0&&(n=n.filter((e=>t.includes(e.uid)))),n.forEach((t=>{const{actor:i}=t,n=i.getMapper();n.setBlendMode?.(e)})),i&&this.render()}resetCamera(e){const{resetPan:t=!0,resetZoom:i=!0,resetRotation:n=!0,resetToCenter:r=!0,suppressEvents:a=!1,resetOrientation:o=!0}=e||{},{orientation:s}=this.viewportProperties;s&&o&&this.applyViewOrientation(s,!1),super.resetCamera({resetPan:t,resetZoom:i,resetToCenter:r});const l=this.getVtkActiveCamera();this.setCameraClippingRange();const c=l.getViewPlaneNormal(),d=l.getFocalPoint();if(this.getActors().forEach((e=>{if(!e.actor)return;const t=e.actor.getMapper();if(0===t.getClippingPlanes().length&&!e?.clippingFilter){const i=Gn().newInstance(),n=Gn().newInstance(),r=[i,n];let a=Z.MINIMUM_SLAB_THICKNESS;e.slabThickness&&(a=e.slabThickness),this.setOrientationOfClippingPlanes(r,a,c,d),t.addClippingPlane(i),t.addClippingPlane(n)}})),n&&void 0!==X[this.viewportProperties.orientation]){const e=X[this.viewportProperties.orientation];this.setCameraNoEvent({viewUp:e.viewUp,viewPlaneNormal:e.viewPlaneNormal})}if(!a){const e={viewportId:this.id,camera:this.getCamera(),renderingEngineId:this.renderingEngineId,element:this.element};ce(this.element,p.CAMERA_RESET,e)}return!0}setSlabThickness(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e<.1&&(e=.1);let i=this.getActors();t&&t.length>0&&(i=i.filter((e=>t.includes(e.uid)))),i.forEach((t=>{qn(t,"vtkVolume")&&(t.slabThickness=e)}));const n=this.getCamera();this.updateClippingPlanesForActors(n),this.setCameraClippingRange(),this.triggerCameraModifiedEventIfNecessary(n,n),this.viewportProperties.slabThickness=e}resetSlabThickness(){this.getActors().forEach((e=>{qn(e,"vtkVolume")&&(e.slabThickness=Z.MINIMUM_SLAB_THICKNESS)}));const e=this.getCamera();this.updateClippingPlanesForActors(e),this.triggerCameraModifiedEventIfNecessary(e,e),this.viewportProperties.slabThickness=void 0}getSliceViewInfo(){const{width:e,height:t}=this.getCanvas(),i=Br(this,[0,0]),n=Br(this,[e-1,0]),r=Br(this,[0,t-1]),a=se.vec3.sub(se.vec3.create(),n,i),o=se.vec3.sub(se.vec3.create(),r,i),s=se.vec3.cross(se.vec3.create(),a,o);se.vec3.normalize(a,a),se.vec3.normalize(o,o),se.vec3.normalize(s,s);const{dimensions:l}=this.getImageData(),[c,d,h]=l,u=[[0,0,0],[c-1,0,0],[0,d-1,0],[c-1,d-1,0],[0,0,h-1],[c-1,0,h-1],[0,d-1,h-1],[c-1,d-1,h-1]].map((e=>function(e,t){const{imageData:i}=e.getImageData(),n=qr(i,t);return e.worldToCanvas(n)}(this,e))).reduce(((e,t)=>(e.minX=Math.min(e.minX,t[0]),e.minY=Math.min(e.minY,t[1]),e.maxX=Math.max(e.maxX,t[0]),e.maxY=Math.max(e.maxY,t[1]),e)),{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}),g=Br(this,[u.minX,u.minY]),m=se.mat4.fromValues(a[0],a[1],a[2],0,o[0],o[1],o[2],0,s[0],s[1],s[2],0,g[0],g[1],g[2],1),p=Br(this,[u.maxX,u.maxY]),f=se.vec3.sub(se.vec3.create(),p,g),v=se.mat4.invert(se.mat4.create(),m),{viewPlaneNormal:w}=this.getCamera();if(w.filter((e=>Math.abs(e)>J)).length>1)throw new Error("getSliceInfo is not supported for oblique views");const I=w.findIndex((e=>Math.abs(e)>1-J));if(-1===I)throw new Error("Unable to determine slice axis");const C=se.vec3.dot(a,f)+1,E=se.vec3.dot(o,f)+1;return{sliceIndex:this.getSliceIndex(),width:C,height:E,slicePlane:I,sliceToIndexMatrix:m,indexToSliceMatrix:v}}getCurrentSlicePixelData(){const{voxelManager:e}=this.getImageData();return e.getSliceData(this.getSliceViewInfo())}getViewReference(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=super.getViewReference(e);if(!t?.volumeId)return;const i=ue.getVolume(t.volumeId);return t.referencedImageId=zn(i,t.cameraFocalPoint,t.viewPlaneNormal),t}resetProperties(e){this._resetProperties(e)}_resetProperties(e){const t=e?this.getActor(e):this.getDefaultActor();if(!t)throw new Error(`No actor found for the given volumeId: ${e}`);t.slabThickness&&(t.slabThickness=Z.MINIMUM_SLAB_THICKNESS,this.viewportProperties.slabThickness=void 0,this.updateClippingPlanesForActors(this.getCamera()));const i=ue.getVolume(t.uid);if(!i)throw new Error(`imageVolume with id: ${t.uid} does not exist in cache`);Oi(t.actor,i),Bn(t)&&Gr(t.actor.getProperty().getRGBTransferFunction(0),this.initialTransferFunctionNodes);const n={...super.getVOIModifiedEventDetail(e)};this.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,resetCameraRotation:!0}),ce(this.element,p.VOI_MODIFIED,n)}setCameraClippingRange(){const e=this.getVtkActiveCamera();e.getParallelProjection()?e.setClippingRange(e.getDistance(),e.getDistance()+this.getSlabThickness()):e.setClippingRange(Z.MINIMUM_SLAB_THICKNESS,Z.MAXIMUM_RAY_DISTANCE)}getSlicesClippingPlanes(){const e=this.getSlicePlaneCoordinates(),{viewPlaneNormal:t}=this.getCamera(),i=Z.MINIMUM_SLAB_THICKNESS;return e.map((e=>{let{point:n,sliceIndex:r}=e;const a=[Gn().newInstance(),Gn().newInstance()];return this.setOrientationOfClippingPlanes(a,i,t,n),{sliceIndex:r,planes:a.map((e=>({normal:e.getNormal(),origin:e.getOrigin()})))}}))}};var Hr=K(896),$r=K.n(Hr),Kr=K(861),Yr=K.n(Kr);const Zr=new Map,Jr="imageRetrieveConfiguration",Xr={IMAGE_RETRIEVE_CONFIGURATION:Jr,clear:()=>{Zr.clear()},add:(e,t)=>{Zr.set(e,t)},get:function(e){if(e===Jr){for(var t=arguments.length,i=new Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return i.map((e=>Zr.get(e))).find((e=>void 0!==e))}}};ke(Xr.get.bind(Xr));const Qr=Xr;function ea(e,t){const i=t.voxelManager.getScalarData();if(!e.getPointData)return;const n=e.getPointData().getScalars().getData();if(t.color&&t.rgba){const e=new Uint8Array(t.columns*t.rows*3);for(let n=0;n<t.columns*t.rows;n++)e[3*n]=i[4*n],e[3*n+1]=i[4*n+1],e[3*n+2]=i[4*n+2];t.rgba=!1,t.getPixelData=()=>e,n.set(e)}else n.set(i);e.modified()}function ta(e,t,i){if(e>1)throw new Error("HSVToRGB expects hue < 1");const n=[];if(0===t)return n[0]=i,n[1]=i,n[2]=i,n;const r=Math.floor(6*e),a=6*e-r,o=i*(1-t),s=i*(1-t*a),l=i*(1-t*(1-a));switch(r){case 0:case 6:n[0]=i,n[1]=l,n[2]=o;break;case 1:n[0]=s,n[1]=i,n[2]=o;break;case 2:n[0]=o,n[1]=i,n[2]=l;break;case 3:n[0]=o,n[1]=s,n[2]=i;break;case 4:n[0]=l,n[1]=o,n[2]=i;break;case 5:n[0]=i,n[1]=o,n[2]=s}return n}const ia=class{constructor(){re(this,"NumberOfColors",void 0),re(this,"Ramp",void 0),re(this,"TableRange",void 0),re(this,"HueRange",void 0),re(this,"SaturationRange",void 0),re(this,"ValueRange",void 0),re(this,"AlphaRange",void 0),re(this,"NaNColor",void 0),re(this,"BelowRangeColor",void 0),re(this,"UseBelowRangeColor",void 0),re(this,"AboveRangeColor",void 0),re(this,"UseAboveRangeColor",void 0),re(this,"InputRange",void 0),re(this,"Table",void 0),this.NumberOfColors=256,this.Ramp="linear",this.TableRange=[0,255],this.HueRange=[0,.66667],this.SaturationRange=[1,1],this.ValueRange=[1,1],this.AlphaRange=[1,1],this.NaNColor=[128,0,0,255],this.BelowRangeColor=[0,0,0,255],this.UseBelowRangeColor=!0,this.AboveRangeColor=[255,255,255,255],this.UseAboveRangeColor=!0,this.InputRange=[0,255],this.Table=[]}setNumberOfTableValues(e){this.NumberOfColors=e}setRamp(e){this.Ramp=e}setTableRange(e,t){this.TableRange[0]=e,this.TableRange[1]=t}setHueRange(e,t){this.HueRange[0]=e,this.HueRange[1]=t}setSaturationRange(e,t){this.SaturationRange[0]=e,this.SaturationRange[1]=t}setValueRange(e,t){this.ValueRange[0]=e,this.ValueRange[1]=t}setRange(e,t){this.InputRange[0]=e,this.InputRange[1]=t}setAlphaRange(e,t){this.AlphaRange[0]=e,this.AlphaRange[1]=t}getColor(e){return this.mapValue(e)}build(e){if(this.Table.length>1&&!e)return;this.Table=[];const t=this.NumberOfColors-1;let i,n,r,a;t?(i=(this.HueRange[1]-this.HueRange[0])/t,n=(this.SaturationRange[1]-this.SaturationRange[0])/t,r=(this.ValueRange[1]-this.ValueRange[0])/t,a=(this.AlphaRange[1]-this.AlphaRange[0])/t):i=n=r=a=0;for(let e=0;e<=t;e++){const t=this.HueRange[0]+e*i,o=this.SaturationRange[0]+e*n,s=this.ValueRange[0]+e*r,l=this.AlphaRange[0]+e*a,c=ta(t,o,s),d=[0,0,0,0];switch(this.Ramp){case"scurve":d[0]=Math.floor(127.5*(1+Math.cos((1-c[0])*Math.PI))),d[1]=Math.floor(127.5*(1+Math.cos((1-c[1])*Math.PI))),d[2]=Math.floor(127.5*(1+Math.cos((1-c[2])*Math.PI))),d[3]=Math.floor(255*l);break;case"linear":d[0]=Math.floor(255*c[0]+.5),d[1]=Math.floor(255*c[1]+.5),d[2]=Math.floor(255*c[2]+.5),d[3]=Math.floor(255*l+.5);break;case"sqrt":d[0]=Math.floor(255*Math.sqrt(c[0])+.5),d[1]=Math.floor(255*Math.sqrt(c[1])+.5),d[2]=Math.floor(255*Math.sqrt(c[2])+.5),d[3]=Math.floor(255*Math.sqrt(l)+.5);break;default:throw new Error(`Invalid Ramp value (${this.Ramp})`)}this.Table.push(d)}this.buildSpecialColors()}buildSpecialColors(){const e=this.NumberOfColors,t=e+0,i=e+1,n=e+2;this.UseBelowRangeColor||0===e?this.Table[t]=this.BelowRangeColor:this.Table[t]=this.Table[0],this.UseAboveRangeColor||0===e?this.Table[i]=this.AboveRangeColor:this.Table[i]=this.Table[e-1],this.Table[n]=this.NaNColor}mapValue(e){const t=this.getIndex(e);if(t<0)return this.NaNColor;if(0===t){if(this.UseBelowRangeColor&&e<this.TableRange[0])return this.BelowRangeColor}else if(t===this.NumberOfColors-1&&this.UseAboveRangeColor&&e>this.TableRange[1])return this.AboveRangeColor;return this.Table[t]}getIndex(e){const t={Range:[],MaxIndex:this.NumberOfColors-1,Shift:-this.TableRange[0],Scale:1};if(this.TableRange[1]<=this.TableRange[0]?t.Scale=Number.MAX_VALUE:t.Scale=t.MaxIndex/(this.TableRange[1]-this.TableRange[0]),t.Range[0]=this.TableRange[0],t.Range[1]=this.TableRange[1],isNaN(e))return-1;let i=function(e,t){let i;return i=e<t.Range[0]?t.MaxIndex+0+1.5:e>t.Range[1]?t.MaxIndex+1+1.5:(e+t.Shift)*t.Scale,Math.floor(i)}(e,t);return i===this.NumberOfColors+0?i=0:i===this.NumberOfColors+1&&(i=this.NumberOfColors-1),i}setTableValue(e,t,i,n,r){let a;if("number"==typeof t&&void 0!==i&&void 0!==n&&void 0!==r)a=[t,i,n,r];else{if(!Array.isArray(t))throw new Error("Invalid arguments for setTableValue");a=t}if(e<0)throw new Error(`Can't set the table value for negative index (${e})`);if(e>=this.NumberOfColors)throw new Error(`Index ${e} is greater than the number of colors ${this.NumberOfColors}`);this.Table[e]=a,0!==e&&e!==this.NumberOfColors-1||this.buildSpecialColors()}},na=[0,0,0,0];function ra(e,t){let i=0,n=e.length-1;for(;i<=n;){const r=i+Math.floor((n-i)/2),a=e[r];if(a===t)return r;t<a?n=r-1:i=r+1}return i}function aa(e,t,i){let n;const r=[],a=[],o=[],s=[];for(i=null===i?1:i,n=0;n<t.length;n++){const i=t[n];r.push((e-1)*i[0]),a.push(i[1]),o.push(i[1])}const l=function(e,t,i){const n=(1-e)/((i=null===i?100:i)-1),r=[];for(;i-- >0;)r.push(e),e+=n;return r[r.length-1]=1,r}(0,0,e);for(n=0;n<e;n++)l[n]=(e-1)*Math.pow(l[n],i);const c=function(e,t){let i;const n=[],r=t.length;for(e.sort((function(e,t){return e-t})),i=0;i<r;i++)n[i]=ra(e,t[i]);return n}(r,l);for(n=1;n<e-1;n++){const e=c[n],t=(l[n]-r[e-1])/(r[e]-r[e-1]),i=a[e]-o[e-1];s[n]=t*i+o[e-1]}return s[0]=o[0],s[e-1]=a[t.length-1],s}function oa(e,t){let i=H[e];return i||(i=H[e]=t||{name:"",colors:[]}),!i.colors&&i.segmentedData&&(i.colors=function(e,t,i){let n;const r=[];i=null===i?1:i;const a=aa(t=null===t?256:t,e.red,i),o=aa(t,e.green,i),s=aa(t,e.blue,i);for(n=0;n<t;n++){const e=[Math.round(255*a[n]),Math.round(255*o[n]),Math.round(255*s[n]),255];r.push(e)}return r}(i.segmentedData,i.numColors,i.gamma)),{getId:()=>e,getColorSchemeName:()=>i.name,setColorSchemeName(e){i.name=e},getNumberOfColors:()=>i.colors.length,setNumberOfColors(e){for(;i.colors.length<e;)i.colors.push(na);i.colors.length=e},getColor(e){return this.isValidIndex(e)?i.colors[e]:na},getColorRepeating(e){const t=i.colors.length;return e=t?e%t:0,this.getColor(e)},setColor(e,t){this.isValidIndex(e)&&(i.colors[e]=t)},addColor(e){i.colors.push(e)},insertColor(e,t){this.isValidIndex(e)&&i.colors.splice(e,1,t)},removeColor(e){this.isValidIndex(e)&&i.colors.splice(e,1)},clearColors(){i.colors=[]},buildLookupTable(e){if(!e)return;const t=i.colors.length;e.setNumberOfTableValues(t);for(let n=0;n<t;n++)e.setTableValue(n,i.colors[n])},createLookupTable(){const e=new ia;return this.buildLookupTable(e),e},isValidIndex:e=>e>=0&&e<i.colors.length}}function sa(){return window.performance?performance.now():Date.now()}function la(e,t,i){return i?function(e){const t=Math.max(...e.lut).toString(2).length-8,i=e.lut[0]>>t,n=e.lut[e.lut.length-1]>>t,r=e.firstValueMapped+e.lut.length-1;return function(a){return a<e.firstValueMapped?i:a>=r?n:e.lut[a-e.firstValueMapped]>>t}}(i):function(e,t){return function(i){const n=255*((i-(t-.5))/(e-1)+.5);return Math.min(Math.max(n,0),255)}}(e,t)}class ca{constructor(){re(this,"m",void 0),this.reset()}getMatrix(){return this.m}reset(){this.m=[1,0,0,1,0,0]}clone(){const e=new ca;return e.m[0]=this.m[0],e.m[1]=this.m[1],e.m[2]=this.m[2],e.m[3]=this.m[3],e.m[4]=this.m[4],e.m[5]=this.m[5],e}multiply(e){const t=this.m[0]*e[0]+this.m[2]*e[1],i=this.m[1]*e[0]+this.m[3]*e[1],n=this.m[0]*e[2]+this.m[2]*e[3],r=this.m[1]*e[2]+this.m[3]*e[3],a=this.m[0]*e[4]+this.m[2]*e[5]+this.m[4],o=this.m[1]*e[4]+this.m[3]*e[5]+this.m[5];this.m[0]=t,this.m[1]=i,this.m[2]=n,this.m[3]=r,this.m[4]=a,this.m[5]=o}invert(){const e=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),t=this.m[3]*e,i=-this.m[1]*e,n=-this.m[2]*e,r=this.m[0]*e,a=e*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),o=e*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);this.m[0]=t,this.m[1]=i,this.m[2]=n,this.m[3]=r,this.m[4]=a,this.m[5]=o}rotate(e){const t=Math.cos(e),i=Math.sin(e),n=this.m[0]*t+this.m[2]*i,r=this.m[1]*t+this.m[3]*i,a=this.m[0]*-i+this.m[2]*t,o=this.m[1]*-i+this.m[3]*t;this.m[0]=n,this.m[1]=r,this.m[2]=a,this.m[3]=o}translate(e,t){this.m[4]+=this.m[0]*e+this.m[2]*t,this.m[5]+=this.m[1]*e+this.m[3]*t}scale(e,t){this.m[0]*=e,this.m[1]*=e,this.m[2]*=t,this.m[3]*=t}transformPoint(e){const t=e[0],i=e[1];return[t*this.m[0]+i*this.m[2]+this.m[4],t*this.m[1]+i*this.m[3]+this.m[5]]}}function da(e,t){const i=new ca;if(!e.viewport.displayedArea)return i;i.translate(e.canvas.width/2,e.canvas.height/2);const n=e.viewport.rotation;0!==n&&i.rotate(n*Math.PI/180);let r=e.viewport.scale,a=e.viewport.scale;const o=e.viewport.displayedArea.brhc.x-(e.viewport.displayedArea.tlhc.x-1),s=e.viewport.displayedArea.brhc.y-(e.viewport.displayedArea.tlhc.y-1);if("NONE"===e.viewport.displayedArea.presentationSizeMode)e.image.rowPixelSpacing<e.image.columnPixelSpacing?r*=e.image.columnPixelSpacing/e.image.rowPixelSpacing:e.image.columnPixelSpacing<e.image.rowPixelSpacing&&(a*=e.image.rowPixelSpacing/e.image.columnPixelSpacing);else if(r=e.viewport.displayedArea.columnPixelSpacing,a=e.viewport.displayedArea.rowPixelSpacing,"SCALE TO FIT"===e.viewport.displayedArea.presentationSizeMode){const t=e.canvas.height/(s*a),i=e.canvas.width/(o*r);r=a=Math.min(i,t),e.viewport.displayedArea.rowPixelSpacing<e.viewport.displayedArea.columnPixelSpacing?r*=e.viewport.displayedArea.columnPixelSpacing/e.viewport.displayedArea.rowPixelSpacing:e.viewport.displayedArea.columnPixelSpacing<e.viewport.displayedArea.rowPixelSpacing&&(a*=e.viewport.displayedArea.rowPixelSpacing/e.viewport.displayedArea.columnPixelSpacing)}return i.scale(r,a),0!==n&&i.rotate(-n*Math.PI/180),i.translate(e.viewport.translation.x,e.viewport.translation.y),0!==n&&i.rotate(n*Math.PI/180),void 0!==t&&i.scale(t,t),e.viewport.hflip&&i.scale(-1,1),e.viewport.vflip&&i.scale(1,-1),i.translate(-o/2,-s/2),i}function ha(e,t,i){if(void 0===e)throw new Error("setToPixelCoordinateSystem: parameter enabledElement must not be undefined");if(void 0===t)throw new Error("setToPixelCoordinateSystem: parameter context must not be undefined");const n=da(e,i).getMatrix();t.setTransform(n[0],n[1],n[2],n[3],n[4],n[5])}function ua(e,t){const i=e.renderingTools.lastRenderedImageId,n=e.renderingTools.lastRenderedViewport;return t.imageId!==i||!n||n.windowCenter!==e.viewport.voi.windowCenter||n.windowWidth!==e.viewport.voi.windowWidth||n.invert!==e.viewport.invert||n.rotation!==e.viewport.rotation||n.hflip!==e.viewport.hflip||n.vflip!==e.viewport.vflip||n.modalityLUT!==e.viewport.modalityLUT||n.voiLUT!==e.viewport.voiLUT||n.colormap!==e.viewport.colormap}function ga(e,t){const i=e.renderingTools.renderCanvas;i.width=t.width,i.height=t.height;const n=i.getContext("2d");n.fillStyle="white",n.fillRect(0,0,i.width,i.height);const r=n.getImageData(0,0,t.width,t.height);e.renderingTools.renderCanvasContext=n,e.renderingTools.renderCanvasData=r}function ma(e){const t=e.image.imageId,i=e.viewport,n=e.image.color;return e.renderingTools.lastRenderedImageId=t,e.renderingTools.lastRenderedIsColor=n,e.renderingTools.lastRenderedViewport={windowCenter:i.voi.windowCenter,windowWidth:i.voi.windowWidth,invert:i.invert,rotation:i.rotation,hflip:i.hflip,vflip:i.vflip,modalityLUT:i.modalityLUT,voiLUT:i.voiLUT,colormap:i.colormap},e.renderingTools}function pa(e,t,i){const n=e.renderingTools.lastRenderedIsColor;e.renderingTools.renderCanvas&&n||(e.renderingTools.renderCanvas=document.createElement("canvas"));const r=e.renderingTools.renderCanvas,{windowWidth:a,windowCenter:o}=e.viewport.voi;if((256===a||255===a)&&(128===o||127===o)&&!e.viewport.invert&&t.getCanvas&&t.getCanvas())return t.getCanvas();if(!ua(e,t)&&!i)return r;r.width===t.width&&r.height===t.height||ga(e,t);let s=sa();const l=function(e,t){return void 0!==e.cachedLut&&e.cachedLut.windowCenter===t.voi.windowCenter&&e.cachedLut.windowWidth===t.voi.windowWidth&&e.cachedLut.invert===t.invert||(function(e,t,i,n){const r=e.maxPixelValue,a=e.minPixelValue,o=Math.min(a,0);if(void 0===e.cachedLut){const t=r-o+1;e.cachedLut={},e.cachedLut.lutArray=new Uint8ClampedArray(t)}const s=e.cachedLut.lutArray,l=la(Array.isArray(t)?t[0]:t,Array.isArray(i)?i[0]:i,void 0);if(n)for(let e=a;e<=r;e++)s[e+-o]=255-l(e);else for(let e=a;e<=r;e++)s[e+-o]=l(e)}(e,t.voi.windowWidth,t.voi.windowCenter,t.invert),e.cachedLut.windowWidth=t.voi.windowWidth,e.cachedLut.windowCenter=t.voi.windowCenter,e.cachedLut.invert=t.invert),e.cachedLut.lutArray}(t,e.viewport);t.stats=t.stats||{},t.stats.lastLutGenerateTime=sa()-s;const c=e.renderingTools.renderCanvasData,d=e.renderingTools.renderCanvasContext;return t.rgba?function(e,t,i){let n=sa();const r=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=sa()-n;const a=e.minPixelValue;let o=0,s=0;const l=r.length;if(n=sa(),a<0)for(;s<l;)i[o++]=t[r[s++]+-a],i[o++]=t[r[s++]+-a],i[o++]=t[r[s++]+-a],i[o++]=r[s++];else for(;s<l;)i[o++]=t[r[s++]],i[o++]=t[r[s++]],i[o++]=t[r[s++]],i[o++]=r[s++];e.stats.lastStoredPixelDataToCanvasImageDataTime=sa()-n}(t,l,c.data):function(e,t,i){let n=sa();const r=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=sa()-n;const a=e.minPixelValue;let o=0,s=0;const l=r.length;if(n=sa(),a<0)for(;s<l;)i[o++]=t[r[s++]+-a],i[o++]=t[r[s++]+-a],i[o]=t[r[s]+-a],s+=2,o+=2;else for(;s<l;)i[o++]=t[r[s++]],i[o++]=t[r[s++]],i[o]=t[r[s]],s+=2,o+=2;e.stats.lastStoredPixelDataToCanvasImageDataTime=sa()-n}(t,l,c.data),s=sa(),d.putImageData(c,0,0),t.stats.lastPutImageDataTime=sa()-s,r}function fa(e,t){if(void 0===e)throw new Error("renderColorImage: enabledElement parameter must not be undefined");const i=e.image;if(void 0===i)throw new Error("renderColorImage: image must be loaded before it can be drawn");const n=e.canvas.getContext("2d");n.setTransform(1,0,0,1,0,0),n.fillStyle="black",n.fillRect(0,0,e.canvas.width,e.canvas.height),n.imageSmoothingEnabled=!e.viewport.pixelReplication,ha(e,n);const r=pa(e,i,t),a=e.viewport.displayedArea.tlhc.x-1,o=e.viewport.displayedArea.tlhc.y-1,s=e.viewport.displayedArea.brhc.x-a,l=e.viewport.displayedArea.brhc.y-o;n.drawImage(r,a,o,s,l,0,0,s,l),e.renderingTools=ma(e)}function va(e,t){return!e&&!t||!(!e||!t)&&e.id===t.id}function wa(e,t,i){return void 0!==e.cachedLut&&e.cachedLut.windowCenter===t.voi.windowCenter&&e.cachedLut.windowWidth===t.voi.windowWidth&&va(e.cachedLut.modalityLUT,t.modalityLUT)&&va(e.cachedLut.voiLUT,t.voiLUT)&&e.cachedLut.invert===t.invert&&!i||(function(e,t){if(function(e){return e.voiLUT&&e.voiLUT.lut&&e.voiLUT.lut.length>0||void 0!==e.voi.windowWidth&&void 0!==e.voi.windowCenter}(e))return;const i=t.maxPixelValue*t.slope+t.intercept,n=t.minPixelValue*t.slope+t.intercept,r=i-n,a=(i+n)/2;void 0===e.voi?e.voi={windowWidth:r,windowCenter:a}:(e.voi.windowWidth=r,e.voi.windowCenter=a)}(t,e),function(e,t,i,n,r,a){const o=e.maxPixelValue,s=e.minPixelValue,l=Math.min(s,0);if(void 0===e.cachedLut){const t=o-l+1;e.cachedLut={},e.cachedLut.lutArray=new Uint8ClampedArray(t)}const c=e.cachedLut.lutArray,d=function(e,t,i){return i?function(e){const t=e.lut[0],i=e.lut[e.lut.length-1],n=e.firstValueMapped+e.lut.length;return r=>r<e.firstValueMapped?t:r>=n?i:e.lut[r]}(i):function(e,t){return i=>i*e+t}(e,t)}(e.slope,e.intercept,r),h=la(t,i,a);if(e.isPreScaled)if(n)for(let e=s;e<=o;e++)c[e+-l]=255-h(e);else for(let e=s;e<=o;e++)c[e+-l]=h(e);else if(n)for(let e=s;e<=o;e++)c[e+-l]=255-h(d(e));else for(let e=s;e<=o;e++)c[e+-l]=h(d(e))}(e,t.voi.windowWidth,t.voi.windowCenter,t.invert,t.modalityLUT,t.voiLUT),e.cachedLut.windowWidth=t.voi.windowWidth,e.cachedLut.windowCenter=t.voi.windowCenter,e.cachedLut.invert=t.invert,e.cachedLut.voiLUT=t.voiLUT,e.cachedLut.modalityLUT=t.modalityLUT),e.cachedLut.lutArray}function Ia(e,t){if(void 0===e)throw new Error("drawImage: enabledElement parameter must not be undefined");const i=e.image;if(void 0===i)throw new Error("drawImage: image must be loaded before it can be drawn");const n=e.canvas.getContext("2d");n.setTransform(1,0,0,1,0,0),n.fillStyle="black",n.fillRect(0,0,e.canvas.width,e.canvas.height),n.imageSmoothingEnabled=!e.viewport.pixelReplication,ha(e,n);const r=function(e,t,i){let n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const r=e.renderingTools.lastRenderedIsColor;e.renderingTools.renderCanvas&&!r||(e.renderingTools.renderCanvas=document.createElement("canvas"),ga(e,t));const a=e.renderingTools.renderCanvas;if(!ua(e,t)&&!i)return a;a.width===t.width&&a.height===t.height||ga(e,t),t.stats=t.stats||{};const o=e.renderingTools.renderCanvasData,s=e.renderingTools.renderCanvasContext;let l=sa();t.stats.lastLutGenerateTime=sa()-l;const{viewport:c}=e;if("PT"===c.modality&&t.isPreScaled){const{windowWidth:e,windowCenter:i}=c.voi,n=i-e/2,r=255/(i+e/2-n);let a;a=c.invert?e=>255-(e-n)*r:e=>(e-n)*r,function(e,t,i){let n=sa();const r=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=sa()-n;const a=r.length;let o=3,s=0;for(n=sa();s<a;)i[o]=t(r[s++]),o+=4;e.stats.lastStoredPixelDataToCanvasImageDataTime=sa()-n}(t,a,o.data)}else{const e=wa(t,c,i);n?function(e,t,i){let n=sa();const r=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=sa()-n;const a=r.length,o=e.minPixelValue;let s=3,l=0;if(n=sa(),r instanceof Int16Array)if(o<0)for(;l<a;)i[s]=t[r[l++]+-o],s+=4;else for(;l<a;)i[s]=t[r[l++]],s+=4;else if(r instanceof Uint16Array)for(;l<a;)i[s]=t[r[l++]],s+=4;else if(o<0)for(;l<a;)i[s]=t[r[l++]+-o],s+=4;else for(;l<a;)i[s]=t[r[l++]],s+=4;e.stats.lastStoredPixelDataToCanvasImageDataTime=sa()-n}(t,e,o.data):function(e,t,i){let n=sa();const r=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=sa()-n;const a=r.length,o=e.minPixelValue;let s,l=0,c=0;if(n=sa(),r instanceof Int16Array)if(o<0)for(;c<a;)s=t[r[c++]+-o],i[l++]=s,i[l++]=s,i[l++]=s,i[l++]=255;else for(;c<a;)s=t[r[c++]],i[l++]=s,i[l++]=s,i[l++]=s,i[l++]=255;else if(r instanceof Uint16Array)for(;c<a;)s=t[r[c++]],i[l++]=s,i[l++]=s,i[l++]=s,i[l++]=255;else if(o<0)for(;c<a;)s=t[r[c++]+-o],i[l++]=s,i[l++]=s,i[l++]=s,i[l++]=255;else for(;c<a;)s=t[r[c++]],i[l++]=s,i[l++]=s,i[l++]=s,i[l++]=255;e.stats.lastStoredPixelDataToCanvasImageDataTime=sa()-n}(t,e,o.data)}return l=sa(),s.putImageData(o,0,0),t.stats.lastPutImageDataTime=sa()-l,a}(e,i,t),a=e.viewport.displayedArea.tlhc.x-1,o=e.viewport.displayedArea.tlhc.y-1,s=e.viewport.displayedArea.brhc.x-a,l=e.viewport.displayedArea.brhc.y-o;n.drawImage(r,a,o,s,l,0,0,s,l),e.renderingTools=ma(e)}const Ca=function(e,t,i,n){let r=sa();const a=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=sa()-r;const o=a.length,s=e.minPixelValue;let l,c,d,h=0,u=0;if(r=sa(),d=i instanceof ia?i.Table:i,s<0)for(;u<o;)l=t[a[u++]+-s],c=d[l],n[h++]=c[0],n[h++]=c[1],n[h++]=c[2],n[h++]=c[3];else for(;u<o;)l=t[a[u++]],c=d[l],n[h++]=c[0],n[h++]=c[1],n[h++]=c[2],n[h++]=c[3];e.stats.lastStoredPixelDataToCanvasImageDataTime=sa()-r},Ea=function(e,t,i,n){let r=sa();const a=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=sa()-r;const o=a.length,s=e.minPixelValue;let l,c,d,h=0,u=0;if(r=sa(),d=i instanceof ia?i.Table:i,s<0)for(;u<o;)l=t(a[u++]+-s),c=d[l],n[h++]=c[0],n[h++]=c[1],n[h++]=c[2],n[h++]=c[3];else for(;u<o;)l=t(a[u++]),c=d[l],n[h++]=c[0],n[h++]=c[1],n[h++]=c[2],n[h++]=c[3];e.stats.lastStoredPixelDataToCanvasImageDataTime=sa()-r};function ya(e,t,i){return Math.max(t,Math.min(i,e))}function Ra(e,t){if(void 0===e)throw new Error("drawImage: enabledElement parameter must not be undefined");const i=e.image;if(void 0===i)throw new Error("drawImage: image must be loaded before it can be drawn");const n=e.canvas.getContext("2d");n.setTransform(1,0,0,1,0,0),n.fillStyle="black",n.fillRect(0,0,e.canvas.width,e.canvas.height),n.imageSmoothingEnabled=!e.viewport.pixelReplication,ha(e,n);const r=function(e,t,i){e.renderingTools.renderCanvas||(e.renderingTools.renderCanvas=document.createElement("canvas"));const n=e.renderingTools.renderCanvas;let r=e.viewport.colormap||e.options.colormap;if(e.options&&e.options.colormap&&console.warn("enabledElement.options.colormap is deprecated. Use enabledElement.viewport.colormap instead"),r&&"string"==typeof r&&(r=oa(r)),!r)throw new Error("renderPseudoColorImage: colormap not found.");const a=r.getId();if(!ua(e,t)&&!i&&e.renderingTools.colormapId===a)return n;n.width===t.width&&n.height===t.height||ga(e,t);let o=sa();e.renderingTools.colorLUT&&!i&&e.renderingTools.colormapId===a||(r.setNumberOfColors(256),e.renderingTools.colorLUT=r.createLookupTable(),e.renderingTools.colormapId=a);const s=e.renderingTools.renderCanvasData,l=e.renderingTools.renderCanvasContext,{viewport:c}=e,d=e.renderingTools.colorLUT;if("PT"===c.modality){const{windowWidth:e,windowCenter:i}=c.voi,n=i-e/2,r=255/(i+e/2-n);let a;a=c.invert?e=>ya(Math.floor(255-(e-n)*r),0,255):e=>ya(Math.floor((e-n)*r),0,255),Ea(t,a,d,s.data)}else{const n=wa(t,e.viewport,i);t.stats=t.stats||{},t.stats.lastLutGenerateTime=sa()-o,Ca(t,n,d,s.data)}return o=sa(),l.putImageData(s,0,0),t.stats.lastPutImageDataTime=sa()-o,n}(e,i,t),a=e.viewport.displayedArea.tlhc.x-1,o=e.viewport.displayedArea.tlhc.y-1,s=e.viewport.displayedArea.brhc.x-a,l=e.viewport.displayedArea.brhc.y-o;n.drawImage(r,a,o,s,l,0,0,s,l),e.renderingTools=ma(e)}function Pa(e,t){const i=e.image;if(!e.canvas||!e.image)return;const n=sa();if(i.stats={lastGetPixelDataTime:-1,lastStoredPixelDataToCanvasImageDataTime:-1,lastPutImageDataTime:-1,lastRenderTime:-1,lastLutGenerateTime:-1},i){let n=i.render;n||(n=e.viewport.colormap?Ra:i.color?fa:Ia),n(e,t)}const r=sa()-n;i.stats.lastRenderTime=r,e.invalid=!1,e.needsRedraw=!1}function ba(e){return da(e)}function Ta(e,t){const i=ba(e);return i.invert(),i.transformPoint(t)}const Aa={viewport:{}};function Sa(e,t){if(null==e)throw new Error(t)}function Oa(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return Sa(e,"getImageSize: parameter image must not be undefined"),Sa(e.width,"getImageSize: parameter image must have width"),Sa(e.height,"getImageSize: parameter image must have height"),function(e){return!(null==e||0===e||180===e)}(t)?{height:e.width,width:e.height}:{width:e.width,height:e.height}}function Da(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;Sa(e,"getImageScale: parameter canvas must not be undefined"),Sa(t,"getImageScale: parameter image must not be undefined");const n=Oa(t,i),r=t.rowPixelSpacing||1,a=t.columnPixelSpacing||1;let o=1,s=1;r<a?s=a/r:o=r/a;const l=e.height/n.height/o,c=e.width/n.width/s;return{verticalScale:l,horizontalScale:c,scaleFactor:Math.min(c,l)}}function Ma(e,t,i,n){if(void 0===e)throw new Error("getDefaultViewport: parameter canvas must not be undefined");if(void 0===t)return Object.assign({},{scale:1,translation:{x:0,y:0},voi:{windowWidth:void 0,windowCenter:void 0},invert:!1,pixelReplication:!1,rotation:0,hflip:!1,vflip:!1,modalityLUT:void 0,voiLUT:void 0,colormap:void 0,labelmap:!1,displayedArea:{tlhc:{x:1,y:1},brhc:{x:1,y:1},rowPixelSpacing:1,columnPixelSpacing:1,presentationSizeMode:"NONE"}},Aa.viewport);const r=Da(e,t,0).scaleFactor;let a;return"PT"===i&&t.isPreScaled?a={windowWidth:5,windowCenter:2.5}:void 0!==t.windowWidth&&void 0!==t.windowCenter&&(a={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:a,invert:t.invert,pixelReplication:!1,rotation:0,hflip:!1,vflip:!1,modalityLUT:t.modalityLUT,modality:i,voiLUT:t.voiLUT,colormap:void 0!==n?n: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"}}}function xa(e,t){return ba(e).transformPoint(t)}const _a=[{id:"initialImages",retrieveType:"single"},{id:"errorRetrieve"}],Va=[{offset:-1,imageQualityStatus:G.ADJACENT_REPLICATE},{offset:1,imageQualityStatus:G.ADJACENT_REPLICATE},{offset:2,imageQualityStatus:G.FAR_REPLICATE}],ka=[{id:"initialImages",positions:[.5,0,-1],retrieveType:"default",requestType:v.Thumbnail,priority:5,nearbyFrames:Va},{id:"quarterThumb",decimate:4,offset:3,requestType:v.Thumbnail,retrieveType:"multipleFast",priority:6,nearbyFrames:Va},{id:"halfThumb",decimate:4,offset:1,priority:7,requestType:v.Thumbnail,retrieveType:"multipleFast",nearbyFrames:Va},{id:"quarterFull",decimate:4,offset:2,priority:8,requestType:v.Thumbnail,retrieveType:"multipleFinal"},{id:"halfFull",decimate:4,offset:0,priority:9,requestType:v.Thumbnail,retrieveType:"multipleFinal"},{id:"threeQuarterFull",decimate:4,offset:1,priority:10,requestType:v.Thumbnail,retrieveType:"multipleFinal"},{id:"finalFull",decimate:4,offset:3,priority:11,requestType:v.Thumbnail,retrieveType:"multipleFinal"},{id:"errorRetrieve"}];class La{constructor(e){re(this,"done",void 0),re(this,"name",void 0),re(this,"nextValue",void 0),re(this,"waiting",void 0),re(this,"rejectReason",void 0),this.name=e||"unknown"}static as(e){if(e.iterator)return e.iterator;const t=new La("as iterator");return e.then((e=>{try{t.add(e,!0)}catch(e){t.reject(e)}}),(e=>{t.reject(e)})),t}add(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[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 i=0;try{for await(const n of this){const{done:r}=this;try{await e(n,r,i),i++}catch(e){if(!r){console.warn("Caught exception in intermediate value",e);continue}if(!t)throw e;t(e,r)}}}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}}function Na(e,t){const i=[];for(let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;n<e.length;n+=t)i.push(n);return i}class Ua{constructor(e){re(this,"stages",void 0),re(this,"retrieveOptions",void 0),this.stages=e.stages||_a,this.retrieveOptions=e.retrieveOptions||{}}loadImages(e,t){return new Fa(this,e,t).loadImages()}}re(Ua,"createProgressive",ja),re(Ua,"interleavedRetrieveStages",{stages:ka}),re(Ua,"singleRetrieveStages",{stages:_a}),re(Ua,"sequentialRetrieveStages",{stages:[{id:"lossySequential",retrieveType:"singleFast"},{id:"finalSequential",retrieveType:"singleFinal"}]});class Fa{constructor(e,t,i){re(this,"imageIds",void 0),re(this,"listener",void 0),re(this,"stages",void 0),re(this,"retrieveOptions",void 0),re(this,"outstandingRequests",0),re(this,"stageStatusMap",new Map),re(this,"imageQualityStatusMap",new Map),re(this,"displayedIterator",new La("displayed")),this.stages=e.stages,this.retrieveOptions=e.retrieveOptions,this.imageIds=t,this.listener=i}async loadImages(){const e=this.createStageRequests();this.outstandingRequests=e.length;for(const t of e)this.addRequest(t);return 0===this.outstandingRequests?Promise.resolve(null):this.displayedIterator.getDonePromise()}sendRequest(e,t){const{imageId:i,next:n}=e,r=(t.loader||Ye)(i,t),a=La.as(r);let o=!1;return a.forEach((async(n,r)=>{const a=this.imageQualityStatusMap.get(i);if(!n)return void console.warn("No image retrieved",i);const{imageQualityStatus:s}=n;o||=s===G.FULL_RESOLUTION,void 0!==a&&a>s?this.updateStageStatus(e.stage,null,!0):(this.listener.successCallback(i,n),this.imageQualityStatusMap.set(i,s),this.displayedIterator.add(n),r&&this.updateStageStatus(e.stage),function(e,t,i,n,r){if(!i?.nearbyRequests?.length)return;const{arrayBuffer:a,offset:o,type:s,length:l}=r.targetBuffer;if(!a||void 0===o||!s)return;const c=new Float32Array(a),d=c.byteLength/c.length,h=r.targetBuffer.offset/d,u=c.slice(h,h+l);for(const r of i.nearbyRequests)try{const{itemId:i,imageQualityStatus:a}=r,o=t.get(i);if(void 0!==o&&o>=a)continue;const s=e.getLoaderImageOptions(i),{offset:l}=s.targetBuffer;c.set(u,l/d);const h={...n,imageQualityStatus:a};e.successCallback(i,h),t.set(i,a)}catch(e){console.log("Couldn't fill nearby item ",r.itemId,e)}}(this.listener,this.imageQualityStatusMap,e,n,t))}),((t,r)=>{this.listener.errorCallback(i,o||!n,t),r&&this.updateStageStatus(e.stage,t)})).finally((()=>{if(!o&&n)ue.getImageLoadObject(i)&&ue.removeImageLoadObject(i),this.addRequest(n,t.streamingData);else{o||this.listener.errorCallback(i,!0,"Couldn't decode"),this.outstandingRequests--;for(let e=n;e;e=e.next)this.updateStageStatus(e.stage,null,!0)}this.outstandingRequests<=0&&this.displayedIterator.resolve()})),a.getDonePromise().catch((e=>null))}addRequest(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{imageId:i,stage:n}=e,r=this.listener.getLoaderImageOptions(i);if(!r)return;const{retrieveType:a="default"}=n,{retrieveOptions:o}=this,s=o[a]||o.default,l={...r,retrieveType:a,retrieveOptions:s,streamingData:t},c=n.priority??-5,d=n.requestType||v.Interaction,h={imageId:i};qe.addRequest(this.sendRequest.bind(this,e,l),d,h,c)}updateStageStatus(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const{id:n}=e,r=this.stageStatusMap.get(n);if(r&&(r.imageLoadPendingCount--,t?r.imageLoadFailedCount++:i||r.totalImageCount++,i||r.stageStartTime||(r.stageStartTime=Date.now()),!r.imageLoadPendingCount)){const{imageLoadFailedCount:e,totalImageCount:t,stageStartTime:i=Date.now(),startTime:a}=r,o={stageId:n,numberOfFailures:e,numberOfImages:t,stageDurationInMS:i?Date.now()-i:null,startDurationInMS:Date.now()-a};ce(le,p.IMAGE_RETRIEVAL_STAGE,o),this.stageStatusMap.delete(n)}}createStageRequests(){const e=new Array,t=new Map,i=(i,n)=>{const r=n<0?this.imageIds.length+n:n<1?Math.floor((this.imageIds.length-1)*n):n,a=this.imageIds[r];if(!a)throw new Error(`No value found to add to requests at ${n}`);const o={imageId:a,stage:i,nearbyRequests:this.findNearbyRequests(r,i)};this.addStageStatus(i);const s=t.get(a);s?s.next=o:e.push(o),t.set(a,o)};for(const e of this.stages)(e.positions||Na(this.imageIds,e.decimate||1,e.offset??0)).forEach((t=>{i(e,t)}));return e}findNearbyRequests(e,t){const i=new Array;if(!t.nearbyFrames)return i;for(const n of t.nearbyFrames){const t=e+n.offset;t<0||t>=this.imageIds.length||i.push({itemId:this.imageIds[t],imageQualityStatus:n.imageQualityStatus})}return i}addStageStatus(e){const{id:t}=e,i=this.stageStatusMap.get(t)||{stageId:t,startTime:Date.now(),stageStartTime:null,totalImageCount:0,imageLoadFailedCount:0,imageLoadPendingCount:0};return i.imageLoadPendingCount++,this.stageStatusMap.set(t,i),i}}function ja(e){return new Ua(e)}const Ga=Ua;function Wa(e){const t=ir().newInstance();let i=0,n=1024;return void 0!==e.lower&&void 0!==e.upper&&(i=e.lower,n=e.upper),t.addRGBPoint(i,0,0,0),t.addRGBPoint(n,1,1,1),t}const Ba=class extends _r{constructor(e){var t;super(e),t=this,re(this,"imageIds",void 0),re(this,"currentImageIdIndex",void 0),re(this,"targetImageIdIndex",void 0),re(this,"debouncedTimeout",void 0),re(this,"imagesLoader",this),re(this,"globalDefaultProperties",void 0),re(this,"perImageIdDefaultProperties",new Map),re(this,"colormap",void 0),re(this,"voiRange",void 0),re(this,"voiUpdatedWithSetProperties",!1),re(this,"VOILUTFunction",void 0),re(this,"invert",!1),re(this,"initialInvert",!1),re(this,"initialTransferFunctionNodes",null),re(this,"interpolationType",void 0),re(this,"_imageData",void 0),re(this,"cameraFocalPointOnRender",void 0),re(this,"stackInvalidated",!1),re(this,"_publishCalibratedEvent",!1),re(this,"_calibrationEvent",void 0),re(this,"_cpuFallbackEnabledElement",void 0),re(this,"useCPURendering",void 0),re(this,"cpuImagePixelData",void 0),re(this,"cpuRenderingInvalidated",void 0),re(this,"csImage",void 0),re(this,"modality",void 0),re(this,"scaling",void 0),re(this,"initialViewUp",void 0),re(this,"stackActorReInitialized",void 0),re(this,"updateRenderingPipeline",(()=>{this._configureRenderingPipeline()})),re(this,"getImageData",void 0),re(this,"getCamera",void 0),re(this,"setCamera",void 0),re(this,"getRotation",void 0),re(this,"unsetColormap",void 0),re(this,"resetCamera",void 0),re(this,"canvasToWorld",void 0),re(this,"worldToCanvas",void 0),re(this,"getRenderer",void 0),re(this,"getDefaultActor",void 0),re(this,"getActors",void 0),re(this,"getActor",void 0),re(this,"setActors",void 0),re(this,"addActors",void 0),re(this,"addActor",void 0),re(this,"removeAllActors",void 0),re(this,"setVOI",void 0),re(this,"setInterpolationType",void 0),re(this,"setInvertColor",void 0),re(this,"setColormap",void 0),re(this,"resize",(()=>{this.useCPURendering&&this._resizeCPU()})),re(this,"_resizeCPU",(()=>{this._cpuFallbackEnabledElement.viewport&&function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=e.canvas.width,n=e.canvas.height;!function(e){const{canvas:t}=e,{clientWidth:i,clientHeight:n}=t;t.width===i&&t.height===n||(t.width=i,t.height=n)}(e),void 0!==e.image&&(t||function(e,t,i){const n=e.viewport.scale,r=Oa(e.image,e.viewport.rotation),a=Math.round(r.width*n),o=Math.round(r.height*n),s=e.viewport.translation.x,l=e.viewport.translation.y;return a===t&&o<=i||a<=t&&o===i&&0===s&&0===l}(e,i,n)?function(e){const{image:t}=e;e.viewport.scale=Da(e.canvas,t,e.viewport.rotation).scaleFactor,e.viewport.translation.x=0,e.viewport.translation.y=0}(e):function(e,t,i){const n=e.viewport.scale,r=e.canvas.width/t,a=e.canvas.height/i,o=Math.sqrt(r*a);e.viewport.scale=o*n}(e,i,n))}(this._cpuFallbackEnabledElement)})),re(this,"getFrameOfReferenceUID",(e=>this.getImagePlaneReferenceData(e)?.FrameOfReferenceUID)),re(this,"getCornerstoneImage",(()=>this.csImage)),re(this,"createActorMapper",(e=>{const t=$r().newInstance();t.setInputData(e);const i=Yr().newInstance();i.setMapper(t);const{preferSizeOverAccuracy:n}=Ii().rendering;return n&&t.setPreferSizeOverAccuracy(!0),e.getPointData().getScalars().getNumberOfComponents()>1&&i.getProperty().setIndependentComponents(!1),i})),re(this,"getNumberOfSlices",(()=>this.imageIds.length)),re(this,"getDefaultProperties",(e=>{let t;return void 0!==e&&(t=this.perImageIdDefaultProperties.get(e)),void 0!==t?t:{...this.globalDefaultProperties}})),re(this,"getProperties",(()=>{const{colormap:e,voiRange:t,VOILUTFunction:i,interpolationType:n,invert:r,voiUpdatedWithSetProperties:a}=this;return{colormap:e,voiRange:t,VOILUTFunction:i,interpolationType:n,invert:r,isComputedVOI:!a}})),re(this,"getRotationCPU",(()=>{const{viewport:e}=this._cpuFallbackEnabledElement;return e.rotation})),re(this,"getRotationGPU",(()=>{const{viewUp:e,viewPlaneNormal:t,flipVertical:i}=this.getCameraNoRotation(),n=i?se.vec3.negate(se.vec3.create(),this.initialViewUp):this.initialViewUp,r=180*se.vec3.angle(n,e)/Math.PI,a=se.vec3.cross(se.vec3.create(),n,e);return se.vec3.dot(a,t)>=0?r:(360-r)%360})),re(this,"setRotation",(e=>{const t=this.getCamera();if(this.useCPURendering?this.setRotationCPU(e):this.setRotationGPU(e),this._suppressCameraModifiedEvents)return;const i={previousCamera:t,camera:this.getCamera(),element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};ce(this.element,p.CAMERA_MODIFIED,i)})),re(this,"renderImageObject",(e=>{this._setCSImage(e),(this.useCPURendering?this._updateToDisplayImageCPU:this._updateActorToDisplayImageId).call(this,e)})),re(this,"_setCSImage",(e=>{e.isPreScaled=e.preScale?.scaled,this.csImage=e})),re(this,"canvasToWorldCPU",(function(e){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0];if(!t._cpuFallbackEnabledElement.image)return;const[n,r]=Ta(t._cpuFallbackEnabledElement,e),{origin:a,spacing:o,direction:s}=t.getImageData(),l=s.slice(0,3),c=s.slice(3,6);return se.vec3.scaleAndAdd(i,a,l,n*o[0]),se.vec3.scaleAndAdd(i,i,c,r*o[1]),i})),re(this,"worldToCanvasCPU",(e=>{const{spacing:t,direction:i,origin:n}=this.getImageData(),r=i.slice(0,3),a=i.slice(3,6),o=se.vec3.subtract(se.vec3.create(),e,n),s=[se.vec3.dot(o,r)/t[0],se.vec3.dot(o,a)/t[1]];return xa(this._cpuFallbackEnabledElement,s)})),re(this,"canvasToWorldGPU",(e=>{const t=this.getRenderer(),i=this.getVtkActiveCamera(),n=i.getClippingRange(),r=i.getDistance();i.setClippingRange(r,r+.1);const a=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),o=a.getSize(),s=window.devicePixelRatio||1,l=[e[0]*s,e[1]*s],c=[l[0]+this.sx,l[1]+this.sy];c[1]=o[1]-c[1];const d=a.displayToWorld(c[0],c[1],0,t);return i.setClippingRange(n[0],n[1]),[d[0],d[1],d[2]]})),re(this,"worldToCanvasGPU",(e=>{const t=this.getRenderer(),i=this.getVtkActiveCamera(),n=i.getClippingRange(),r=i.getDistance();i.setClippingRange(r,r+.1);const a=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),o=a.getSize(),s=a.worldToDisplay(...e,t);s[1]=o[1]-s[1];const l=[s[0]-this.sx,s[1]-this.sy];i.setClippingRange(n[0],n[1]);const c=window.devicePixelRatio||1;return[l[0]/c,l[1]/c]})),re(this,"getCurrentImageIdIndex",(()=>this.currentImageIdIndex)),re(this,"getSliceIndex",(()=>this.currentImageIdIndex)),re(this,"getTargetImageIdIndex",(()=>this.targetImageIdIndex)),re(this,"getImageIds",(()=>this.imageIds)),re(this,"getCurrentImageId",(()=>this.imageIds[this.currentImageIdIndex])),re(this,"hasImageId",(e=>this.imageIds.includes(e))),re(this,"hasImageURI",(e=>{const t=this.imageIds;for(let i=0;i<t.length;i++)if(de(t[i])===e)return!0;return!1})),re(this,"customRenderViewportToCanvas",(()=>{if(!this.useCPURendering)throw new Error("Custom cpu rendering pipeline should only be hit in CPU rendering mode");return this._cpuFallbackEnabledElement.image?(Pa(this._cpuFallbackEnabledElement,this.cpuRenderingInvalidated),this.cpuRenderingInvalidated=!1):this.fillWithBackgroundColor(),{canvas:this.canvas,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId,viewportStatus:this.viewportStatus}})),re(this,"renderingPipelineFunctions",{getImageData:{cpu:this.getImageDataCPU,gpu:this.getImageDataGPU},setColormap:{cpu:this.setColormapCPU,gpu:this.setColormapGPU},getCamera:{cpu:this.getCameraCPU,gpu:super.getCamera},setCamera:{cpu:this.setCameraCPU,gpu:super.setCamera},getPan:{cpu:this.getPanCPU,gpu:super.getPan},setPan:{cpu:this.setPanCPU,gpu:super.setPan},getZoom:{cpu:this.getZoomCPU,gpu:super.getZoom},setZoom:{cpu:this.setZoomCPU,gpu:super.setZoom},setVOI:{cpu:this.setVOICPU,gpu:this.setVOIGPU},getRotation:{cpu:this.getRotationCPU,gpu:this.getRotationGPU},setInterpolationType:{cpu:this.setInterpolationTypeCPU,gpu:this.setInterpolationTypeGPU},setInvertColor:{cpu:this.setInvertColorCPU,gpu:this.setInvertColorGPU},resetCamera:{cpu:function(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return t.resetCameraCPU(e,i),!0},gpu:function(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return t.resetCameraGPU(e,i),!0}},canvasToWorld:{cpu:this.canvasToWorldCPU,gpu:this.canvasToWorldGPU},worldToCanvas:{cpu:this.worldToCanvasCPU,gpu:this.worldToCanvasGPU},getRenderer:{cpu:()=>this.getCPUFallbackError("getRenderer"),gpu:super.getRenderer},getDefaultActor:{cpu:()=>this.getCPUFallbackError("getDefaultActor"),gpu:super.getDefaultActor},getActors:{cpu:()=>this.getCPUFallbackError("getActors"),gpu:super.getActors},getActor:{cpu:()=>this.getCPUFallbackError("getActor"),gpu:super.getActor},setActors:{cpu:()=>this.getCPUFallbackError("setActors"),gpu:super.setActors},addActors:{cpu:()=>this.getCPUFallbackError("addActors"),gpu:super.addActors},addActor:{cpu:()=>this.getCPUFallbackError("addActor"),gpu:super.addActor},removeAllActors:{cpu:()=>this.getCPUFallbackError("removeAllActors"),gpu:super.removeAllActors},unsetColormap:{cpu:this.unsetColormapCPU,gpu:this.unsetColormapGPU}}),this.scaling={},this.modality=null,this.useCPURendering=vi(),this._configureRenderingPipeline(),this.useCPURendering?this._resetCPUFallbackElement():this._resetGPUViewport(),this.imageIds=[],this.currentImageIdIndex=0,this.targetImageIdIndex=0,this.cameraFocalPointOnRender=[0,0,0],this.resetCamera(),this.initializeElementDisabledHandler()}setUseCPURendering(e){this.useCPURendering=e,this._configureRenderingPipeline(e)}static get useCustomRenderingPipeline(){return vi()}_configureRenderingPipeline(e){this.useCPURendering=e??vi();for(const e in this.renderingPipelineFunctions)if(Object.prototype.hasOwnProperty.call(this.renderingPipelineFunctions,e)){const t=this.renderingPipelineFunctions[e];this[e]=this.useCPURendering?t.cpu:t.gpu}this.useCPURendering?this._resetCPUFallbackElement():this._resetGPUViewport()}_resetCPUFallbackElement(){this._cpuFallbackEnabledElement={canvas:this.canvas,renderingTools:{},transform:new ca,viewport:{rotation:0}}}_resetGPUViewport(){const e=this.getRenderer(),t=kr().newInstance();e.setActiveCamera(t);const i=[0,0,-1];this.initialViewUp=[0,-1,0],t.setDirectionOfProjection(-i[0],-i[1],-i[2]),t.setViewUp(...this.initialViewUp),t.setParallelProjection(!0),t.setThicknessFromFocalPoint(.1),t.setFreezeFocalPoint(!0)}initializeElementDisabledHandler(){le.addEventListener(p.ELEMENT_DISABLED,(function e(){clearTimeout(this.debouncedTimeout),le.removeEventListener(p.ELEMENT_DISABLED,e)}))}getImageDataGPU(){const e=this.getDefaultActor();if(!e)return;if(!Bn(e))return;const{actor:t}=e,i=t.getMapper().getInputData();return{dimensions:i.getDimensions(),spacing:i.getSpacing(),origin:i.getOrigin(),direction:i.getDirection(),get scalarData(){return this.csImage.voxelManager.getScalarData()},imageData:t.getMapper().getInputData(),metadata:{Modality:this.modality,FrameOfReferenceUID:this.getFrameOfReferenceUID()},scaling:this.scaling,hasPixelSpacing:this.hasPixelSpacing,calibration:{...this.csImage.calibration,...this.calibration},preScale:{...this.csImage.preScale},voxelManager:this.csImage.voxelManager}}getImageDataCPU(){const{metadata:e}=this._cpuFallbackEnabledElement,t=e.spacing;return{dimensions:e.dimensions,spacing:t,origin:e.origin,direction:e.direction,metadata:{Modality:this.modality,FrameOfReferenceUID:this.getFrameOfReferenceUID()},scaling:this.scaling,imageData:{getDirection:()=>e.direction,getDimensions:()=>e.dimensions,getScalarData:()=>this.cpuImagePixelData,getSpacing:()=>t,worldToIndex:e=>{const t=this.worldToCanvasCPU(e),i=Ta(this._cpuFallbackEnabledElement,t);return[i[0],i[1],0]},indexToWorld:(e,t)=>{const i=xa(this._cpuFallbackEnabledElement,[e[0],e[1]]);return this.canvasToWorldCPU(i,t)}},scalarData:this.cpuImagePixelData,hasPixelSpacing:this.hasPixelSpacing,calibration:{...this.csImage.calibration,...this.calibration},preScale:{...this.csImage.preScale},voxelManager:this.csImage.voxelManager}}buildMetadata(e){const t=e.imageId,{pixelRepresentation:i,bitsAllocated:n,bitsStored:r,highBit:a,photometricInterpretation:o,samplesPerPixel:s}=Ue("imagePixelModule",t),{windowWidth:l,windowCenter:c,voiLUTFunction:d}=e,{modality:h}=Ue("generalSeriesModule",t),u=Ue("scalingModule",t),g=Ue(q.CALIBRATION,t);"PT"===h&&u&&this._addScalingToViewport(u),this.modality=h;const m=this._getValidVOILUTFunction(d);this.VOILUTFunction=m,this.calibration=g;let p=this._getImagePlaneModule(t);return this.useCPURendering||(p=this.calibrateIfNecessary(t,p)),{imagePlaneModule:p,imagePixelModule:{bitsAllocated:n,bitsStored:r,samplesPerPixel:s,highBit:a,photometricInterpretation:o,pixelRepresentation:i,windowWidth:l,windowCenter:c,modality:h,voiLUTFunction:m}}}calibrateIfNecessary(e,t){const i=Ue("calibratedPixelSpacing",e),n=this.calibration!==i,{scale:r}=i||{};return this.hasPixelSpacing=r>0||t.rowPixelSpacing>0,t.calibration=i,n?(this.calibration=i,this._publishCalibratedEvent=!0,this._calibrationEvent={scale:r,calibration:i},t):t}setDefaultProperties(e,t){null==t?this.globalDefaultProperties=e:(this.perImageIdDefaultProperties.set(t,e),this.getCurrentImageId()===t&&this.setProperties(e))}clearDefaultProperties(e){null==e?(this.globalDefaultProperties={},this.resetProperties()):(this.perImageIdDefaultProperties.delete(e),this.resetToDefaultProperties())}setProperties(){let{colormap:e,voiRange:t,VOILUTFunction:i,invert:n,interpolationType:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.viewportStatus=this.csImage?F.PRE_RENDER:F.LOADING,null==this.globalDefaultProperties&&this.setDefaultProperties({colormap:e,voiRange:t,VOILUTFunction:i,invert:n,interpolationType:r}),void 0!==e&&this.setColormap(e),void 0!==t){const e=!0;this.setVOI(t,{suppressEvents:a,voiUpdatedWithSetProperties:e})}void 0!==i&&this.setVOILUTFunction(i,a),void 0!==n&&this.setInvertColor(n),void 0!==r&&this.setInterpolationType(r)}resetProperties(){this.cpuRenderingInvalidated=!0,this.voiUpdatedWithSetProperties=!1,this.viewportStatus=F.PRE_RENDER,this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={}),this._resetProperties(),this.render()}_resetProperties(){let e;e=this._isCurrentImagePTPrescaled()?this._getDefaultPTPrescaledVOIRange():this._getVOIRangeForCurrentImage(),this.setVOI(e),this.setInvertColor(this.initialInvert),this.setInterpolationType(E.LINEAR);const t=this.getTransferFunction();Gr(t,this.initialTransferFunctionNodes);const i=ur(jr(t).reduce(((e,t)=>(e.push(t[0],t[1],t[2],t[3]),e)),[]),this.getDefaultActor().actor);this.setColormap(i)}resetToDefaultProperties(){this.cpuRenderingInvalidated=!0,this.viewportStatus=F.PRE_RENDER,this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={});const e=this.getCurrentImageId(),t=this.perImageIdDefaultProperties.get(e)||this.globalDefaultProperties;let i;t.colormap?.name&&this.setColormap(t.colormap),i=null==t.voiRange?this._getVOIRangeForCurrentImage():t.voiRange,this.setVOI(i),this.setInterpolationType(E.LINEAR),this.setInvertColor(!1),this.render()}_setPropertiesFromCache(){const{interpolationType:e,invert:t}=this;let i;i=this.voiUpdatedWithSetProperties?this.voiRange:this._isCurrentImagePTPrescaled()?this._getDefaultPTPrescaledVOIRange():this._getVOIRangeForCurrentImage()??this.voiRange,this.setVOI(i),this.setInterpolationType(e),this.setInvertColor(t)}getCameraCPU(){const{metadata:e,viewport:t}=this._cpuFallbackEnabledElement,{direction:i}=e,n=i.slice(6,9).map((e=>-e));let r=i.slice(3,6).map((e=>-e));if(t.rotation){const e=se.mat4.fromRotation(se.mat4.create(),t.rotation*Math.PI/180,n);r=se.vec3.transformMat4(se.vec3.create(),r,e)}const a=[this.element.clientWidth/2,this.element.clientHeight/2],o=this.canvasToWorld(a),s=this.canvasToWorld([0,0]),l=this.canvasToWorld([0,this.element.clientHeight]);return{parallelProjection:!0,focalPoint:o,position:[0,0,0],parallelScale:se.vec3.distance(s,l)/2,scale:t.scale,viewPlaneNormal:[n[0],n[1],n[2]],viewUp:[r[0],r[1],r[2]],flipHorizontal:this.flipHorizontal,flipVertical:this.flipVertical}}setCameraCPU(e){const{viewport:t,image:i}=this._cpuFallbackEnabledElement,n=this.getCameraCPU(),{focalPoint:r,parallelScale:a,scale:o,flipHorizontal:s,flipVertical:l}=e,{clientHeight:c}=this.element;if(r){const e=this.worldToCanvasCPU(r),i=Ta(this._cpuFallbackEnabledElement,e),a=this.worldToCanvasCPU(n.focalPoint),o=Ta(this._cpuFallbackEnabledElement,a),s=se.vec2.create();se.vec2.subtract(s,se.vec2.fromValues(i[0],i[1]),se.vec2.fromValues(o[0],o[1]));const l=function(e,t){const{hflip:i,vflip:n,rotation:r}=t;if(e.x*=i?-1:1,e.y*=n?-1:1,0!==r){const t=r*Math.PI/180,i=Math.cos(t),n=Math.sin(t),a=e.x*i-e.y*n,o=e.x*n+e.y*i;e.x=a,e.y=o}return e}({x:s[0],y:s[1]},t);t.translation.x-=l.x,t.translation.y-=l.y}if(a){const{rowPixelSpacing:e}=i,n=c*e*.5/a;t.scale=n,t.parallelScale=a}if(o){const{rowPixelSpacing:e}=i;t.scale=o,t.parallelScale=c*e*.5/o}void 0===s&&void 0===l||this.setFlipCPU({flipHorizontal:s,flipVertical:l}),this._cpuFallbackEnabledElement.transform=da(this._cpuFallbackEnabledElement);const d={previousCamera:n,camera:this.getCamera(),element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};ce(this.element,p.CAMERA_MODIFIED,d)}getPanCPU(){const{viewport:e}=this._cpuFallbackEnabledElement;return[e.translation.x,e.translation.y]}setPanCPU(e){const t=this.getCameraCPU();this.setCameraCPU({...t,focalPoint:[...e.map((e=>-e)),0]})}getZoomCPU(){const{viewport:e}=this._cpuFallbackEnabledElement;return e.scale}setZoomCPU(e){const t=this.getCameraCPU();this.setCameraCPU({...t,scale:e})}setFlipCPU(e){let{flipHorizontal:t,flipVertical:i}=e;const{viewport:n}=this._cpuFallbackEnabledElement;void 0!==t&&(n.hflip=t,this.flipHorizontal=n.hflip),void 0!==i&&(n.vflip=i,this.flipVertical=n.vflip)}setVOILUTFunction(e,t){if(this.useCPURendering)throw new Error("VOI LUT function is not supported in CPU rendering");const i=this._getValidVOILUTFunction(e);let n=!1;this.VOILUTFunction!==i&&(n=!0),this.VOILUTFunction=i;const{voiRange:r}=this.getProperties();this.setVOI(r,{suppressEvents:t,forceRecreateLUTFunction:n})}setRotationCPU(e){const{viewport:t}=this._cpuFallbackEnabledElement;t.rotation=e}setRotationGPU(e){const t=this.getPan(this.fitToCanvasCamera),i=this.getPan(),n=se.vec2.sub([0,0],t,i);this.setPan(n,!1);const{flipVertical:r}=this.getCamera(),a=r?se.vec3.negate(se.vec3.create(),this.initialViewUp):this.initialViewUp;this.setCameraNoEvent({viewUp:a}),this.getVtkActiveCamera().roll(-e);const o=this.getPan(),s=this.getPan(this.fitToCanvasCamera),l=se.vec2.sub([0,0],o,s),c=se.vec2.add([0,0],t,l);this.setPan(c,!1)}setInterpolationTypeGPU(e){const t=this.getDefaultActor();if(!t)return;if(!Bn(t))return;const{actor:i}=t;i.getProperty().setInterpolationType(e),this.interpolationType=e}setInterpolationTypeCPU(e){const{viewport:t}=this._cpuFallbackEnabledElement;t.pixelReplication=e!==E.LINEAR,this.interpolationType=e}setInvertColorCPU(e){const{viewport:t}=this._cpuFallbackEnabledElement;t&&(t.invert=e,this.invert=e)}setInvertColorGPU(e){const t=this.getDefaultActor();if(t&&Bn(t))if(qn(t,"vtkVolume")){const i=t.actor.getProperty().getRGBTransferFunction(0);(!this.invert&&e||this.invert&&!e)&&gr(i),this.invert=e}else if(qn(t,"vtkImageSlice")){const i=t.actor.getProperty().getRGBTransferFunction(0);(!this.invert&&e||this.invert&&!e)&&gr(i),this.invert=e}}setVOICPU(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{suppressEvents:i=!1}=t,{viewport:n,image:r}=this._cpuFallbackEnabledElement;if(!n||!r)return;if(void 0===e){const{windowWidth:t,windowCenter:i}=r,a=Array.isArray(t)?t[0]:t,o=Array.isArray(i)?i[0]:i;n.voi={windowWidth:a,windowCenter:o};const{lower:s,upper:l}=Ti(a,o);e={lower:s,upper:l}}else{const{lower:t,upper:i}=e,{windowCenter:r,windowWidth:a}=bi(t,i);n.voi||(n.voi={windowWidth:0,windowCenter:0}),n.voi.windowWidth=a,n.voi.windowCenter=r}this.voiRange=e;const a={viewportId:this.id,range:e};i||ce(this.element,p.VOI_MODIFIED,a)}getTransferFunction(){const e=this.getDefaultActor();if(e&&Bn(e))return e.actor.getProperty().getRGBTransferFunction(0)}setVOIGPU(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{suppressEvents:i=!1,forceRecreateLUTFunction:n=!1,voiUpdatedWithSetProperties:r=!1}=t;if(e&&this.voiRange&&this.voiRange.lower===e.lower&&this.voiRange.upper===e.upper&&!n&&!this.stackInvalidated)return;const a=this.getDefaultActor();if(!a)return;if(!Bn(a))return;const o=a.actor;let s=e;if(void 0===s){const e=o.getMapper().getInputData().getPointData().getScalars().getRange();s={lower:e[0],upper:e[1]}}o.getProperty().setUseLookupTableScalarRange(!0);let l=o.getProperty().getRGBTransferFunction(0);const c=this.VOILUTFunction===V.SAMPLED_SIGMOID;if((c||!l||n)&&(l=(c?mr:Wa)(s),this.invert&&gr(l),o.getProperty().setRGBTransferFunction(0,l),this.initialTransferFunctionNodes=jr(l)),c||l.setRange(s.lower,s.upper),this.voiRange=s,this.voiUpdatedWithSetProperties||(this.voiUpdatedWithSetProperties=r),i)return;const d={viewportId:this.id,range:s,VOILUTFunction:this.VOILUTFunction};ce(this.element,p.VOI_MODIFIED,d)}_addScalingToViewport(e){if(this.scaling.PT)return;const{suvbw:t,suvlbm:i,suvbsa:n}=e,r={};i&&(r.suvbwToSuvlbm=i/t),n&&(r.suvbwToSuvbsa=n/t),this.scaling.PT=r}_getNumCompsFromPhotometricInterpretation(e){let t=1;return("RGB"===e||e.includes("YBR")||"PALETTE COLOR"===e)&&(t=3),t}getImageDataMetadata(e){const{imagePlaneModule:t,imagePixelModule:i}=this.buildMetadata(e);let n,r;n=t.rowCosines,r=t.columnCosines,null!=n&&null!=r||(n=[1,0,0],r=[0,1,0]);const a=se.vec3.fromValues(n[0],n[1],n[2]),o=se.vec3.fromValues(r[0],r[1],r[2]),s=se.vec3.create();se.vec3.cross(s,a,o);let l=t.imagePositionPatient;null==l&&(l=[0,0,0]);const c=t.columnPixelSpacing||e.columnPixelSpacing,d=t.rowPixelSpacing||e.rowPixelSpacing,h=e.columns,u=e.rows,g=e.numberOfComponents||this._getNumCompsFromPhotometricInterpretation(i.photometricInterpretation);return{bitsAllocated:i.bitsAllocated,numberOfComponents:g,origin:l,direction:[...a,...o,...s],dimensions:[h,u,1],spacing:[c,d,1],numVoxels:h*u*1,imagePlaneModule:t,imagePixelModule:i}}getImagePlaneReferenceData(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.getCurrentImageIdIndex();const t=this.imageIds[e];if(!t)return;const i=Ue(q.IMAGE_PLANE,t);if(!i)return;const{imagePositionPatient:n,frameOfReferenceUID:r}=i;let{rowCosines:a,columnCosines:o}=i;return a||=[1,0,0],o||=[0,1,0],{FrameOfReferenceUID:r,viewPlaneNormal:se.vec3.cross([0,0,0],o,a),cameraFocalPoint:n,referencedImageId:t,sliceIndex:e}}_getCameraOrientation(e){const t=e.slice(6,9).map((e=>-e)),i=e.slice(3,6).map((e=>-e));return{viewPlaneNormal:[t[0],t[1],t[2]],viewUp:[i[0],i[1],i[2]]}}createVTKImageData(e){let{origin:t,direction:i,dimensions:n,spacing:r,numberOfComponents:a,pixelArray:o}=e;const s=new o.constructor(o.length),l=wn().newInstance({name:"Pixels",numberOfComponents:a,values:s}),c=oe().newInstance();return c.setDimensions(n),c.setSpacing(r),c.setDirection(i),c.setOrigin(t),c.getPointData().setScalars(l),c}_createVTKImageData(e){let{origin:t,direction:i,dimensions:n,spacing:r,numberOfComponents:a,pixelArray:o}=e;try{this._imageData=this.createVTKImageData({origin:t,direction:i,dimensions:n,spacing:r,numberOfComponents:a,pixelArray:o})}catch(e){console.error(e)}}async setStack(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;this._throwIfDestroyed(),this.imageIds=e,this.currentImageIdIndex=t,this.targetImageIdIndex=t;const i=Ue(Qr.IMAGE_RETRIEVE_CONFIGURATION,e[t],"stack");this.imagesLoader=i?(i.create||ja)(i):this,this.stackInvalidated=!0,this.flipVertical=!1,this.flipHorizontal=!1,this.voiRange=null,this.interpolationType=E.LINEAR,this.invert=!1,this.viewportStatus=F.LOADING,this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={},delete this._cpuFallbackEnabledElement.viewport.colormap);const n=await this._setImageIdIndex(t),r={imageIds:e,viewportId:this.id,element:this.element,currentImageIdIndex:t};return ce(this.element,p.STACK_VIEWPORT_NEW_STACK,r),n}_throwIfDestroyed(){if(this.isDisabled)throw new Error("The stack viewport has been destroyed and is no longer usable. Renderings will not be performed. If you are using the same viewportId and have re-enabled the viewport, you need to grab the new viewport instance using renderingEngine.getViewport(viewportId), instead of using your lexical scoped reference to the viewport instance.")}_checkVTKImageDataMatchesCornerstoneImage(e,t){if(!t)return!1;const[i,n]=t.getSpacing(),[r,a]=t.getDimensions(),o=this._getImagePlaneModule(e.imageId),s=t.getDirection(),l=s.slice(0,3),c=s.slice(3,6),d=t.getPointData().getScalars().getDataType(),h=ve(i,e.columnPixelSpacing),u=ve(n,e.rowPixelSpacing);return(h||null===e.columnPixelSpacing&&1===i)&&(u||null===e.rowPixelSpacing&&1===n)&&r===e.columns&&a===e.rows&&ve(o.rowCosines,l)&&ve(o.columnCosines,c)&&d===e.voxelManager.getScalarData().constructor.name}_updateVTKImageDataFromCornerstoneImage(e){let t=this._getImagePlaneModule(e.imageId).imagePositionPatient;null==t&&(t=[0,0,0]),this._imageData.setOrigin(t),ea(this._imageData,e)}_loadAndDisplayImage(e,t){return this.useCPURendering?this._loadAndDisplayImageCPU(e,t):this._loadAndDisplayImageGPU(e,t)}_loadAndDisplayImageCPU(e,t){return new Promise(((i,n)=>{function r(e,t,n){if(this.currentImageIdIndex!==t)return;const r=e.voxelManager.getScalarData(),a=e.preScale,o=a?.scalingParameters;if(r instanceof Float32Array&&(a?.scaled&&o?.rescaleIntercept%1!=0||o?.rescaleSlope%1!=0)){const t={min:e.maxPixelValue,max:e.minPixelValue},i=Math.abs(t.max-t.min)/65535,n=t.min,a=r.length,o=new Uint16Array(a);let s=65535,l=0;for(let e=0;e<a;e++){const t=Math.floor((r[e]-n)/i);o[e]=t,s=Math.min(s,t),l=Math.max(l,t)}e.minPixelValue=s,e.maxPixelValue=l,e.slope=i,e.intercept=n,e.getPixelData=()=>o,e.preScale={...e.preScale,scaled:!1}}this._setCSImage(e),this.viewportStatus=F.PRE_RENDER;const s={image:e,imageId:n,imageIdIndex:t,viewportId:this.id,renderingEngineId:this.renderingEngineId};ce(this.element,p.STACK_NEW_IMAGE,s),this._updateToDisplayImageCPU(e),this.render(),this.currentImageIdIndex=t,i(n)}function a(e,t,i){const r={error:e,imageIdIndex:t,imageId:i};this.suppressEvents||ce(le,p.IMAGE_LOAD_ERROR,r),n(e)}const o=v.Interaction,s={imageId:e,imageIdIndex:t},l={useRGBA:!0,requestType:o},c={imageId:e,imageIdIndex:t,viewportId:this.id,renderingEngineId:this.renderingEngineId};ce(this.element,p.PRE_STACK_NEW_IMAGE,c),qe.addRequest(function(e,t,i){return Ye(e,i).then((i=>{r.call(this,i,t,e)}),(i=>{a.call(this,i,t,e)}))}.bind(this,e,t,l),o,s,-5)}))}successCallback(e,t){const i=this.imageIds.indexOf(e);if(this.currentImageIdIndex!==i)return;const n=this.csImage?.imageFrame,r=t?.imageFrame;(n?.photometricInterpretation||this.csImage?.photometricInterpretation)!==(r?.photometricInterpretation||t?.photometricInterpretation)&&(this.stackInvalidated=!0),this._setCSImage(t);const a={image:t,imageId:e,imageIdIndex:i,viewportId:this.id,renderingEngineId:this.renderingEngineId};this._updateActorToDisplayImageId(t),ce(this.element,p.STACK_NEW_IMAGE,a),this.render(),this.currentImageIdIndex=i}errorCallback(e,t,i){if(!t)return;const n={error:i,imageIdIndex:this.imageIds.indexOf(e),imageId:e};ce(le,p.IMAGE_LOAD_ERROR,n)}getLoaderImageOptions(e){const t=this.imageIds.indexOf(e),{transferSyntaxUID:i}=Ue("transferSyntax",e)||{};return{useRGBA:!1,transferSyntaxUID:i,priority:5,requestType:v.Interaction,additionalDetails:{imageId:e,imageIdIndex:t}}}async loadImages(e,t){const i=await Promise.allSettled(e.map((e=>{const i=this.getLoaderImageOptions(e);return Ye(e,i).then((i=>(t.successCallback(e,i),e)),(i=>(t.errorCallback(e,!0,i),e)))}))),n=i.filter((e=>"rejected"===e.status));if(n&&n.length){const e=new CustomEvent(p.IMAGE_LOAD_ERROR,{detail:n,cancelable:!0});le.dispatchEvent(e)}return i}_loadAndDisplayImageGPU(e,t){const i={imageId:e,imageIdIndex:t,viewportId:this.id,renderingEngineId:this.renderingEngineId};return ce(this.element,p.PRE_STACK_NEW_IMAGE,i),this.imagesLoader.loadImages([e],this).then((t=>e))}_updateToDisplayImageCPU(e){const t=this.getImageDataMetadata(e),i=Ma(this.canvas,e,this.modality,this._cpuFallbackEnabledElement.viewport.colormap),{windowCenter:n,windowWidth:r}=i.voi;this.voiRange=Ti(r,n),this._cpuFallbackEnabledElement.image=e,this._cpuFallbackEnabledElement.metadata={...t},this.cpuImagePixelData=e.voxelManager.getScalarData();const a=Object.assign({},i,this._cpuFallbackEnabledElement.viewport);this._cpuFallbackEnabledElement.viewport=this.stackInvalidated?i:a,this.stackInvalidated=!1,this.cpuRenderingInvalidated=!0,this._cpuFallbackEnabledElement.transform=da(this._cpuFallbackEnabledElement)}getSliceViewInfo(){throw new Error("Method not implemented.")}addImages(e){const t=this.getActors();e.forEach((e=>{const{imageId:i}=e,n=ue.getImage(i),{origin:r,dimensions:a,direction:o,spacing:s,numberOfComponents:l}=this.getImageDataMetadata(n),c=this.createVTKImageData({origin:r,dimensions:a,direction:o,spacing:s,numberOfComponents:l,pixelArray:n.voxelManager.getScalarData()}),d=this.createActorMapper(c);d&&(t.push({uid:e.actorUID,actor:d,referencedId:i}),e.callback&&e.callback({imageActor:d,imageId:e.imageId}))})),this.setActors(t)}_updateActorToDisplayImageId(e){const t=this._checkVTKImageDataMatchesCornerstoneImage(e,this._imageData),i=this.getRenderer().getActiveCamera(),n=structuredClone(this.getCamera());if(t&&!this.stackInvalidated){this._updateVTKImageDataFromCornerstoneImage(e);const t=this.getCamera(),r=se.vec3.subtract(se.vec3.create(),this.cameraFocalPointOnRender,t.focalPoint);this.resetCameraNoEvent(),this.setCameraNoEvent({flipHorizontal:n.flipHorizontal,flipVertical:n.flipVertical,viewUp:n.viewUp});const{focalPoint:a}=this.getCamera();return this.cameraFocalPointOnRender=a,i.setFreezeFocalPoint(!0),this._restoreCameraProps(t,n,r),this._setPropertiesFromCache(),void(this.stackActorReInitialized=!1)}const{origin:r,direction:a,dimensions:o,spacing:s,numberOfComponents:l,imagePixelModule:c}=this.getImageDataMetadata(e),d=e.voxelManager.getScalarData();this._createVTKImageData({origin:r,direction:a,dimensions:o,spacing:s,numberOfComponents:l,pixelArray:d}),this._updateVTKImageDataFromCornerstoneImage(e);const h=this.createActorMapper(this._imageData),u=this.getActors();u.length&&u[0].uid===this.id?u[0].actor=h:u.unshift({uid:this.id,actor:h}),this.setActors(u);const{viewPlaneNormal:g,viewUp:m}=this._getCameraOrientation(a);this.setCameraNoEvent({viewUp:m,viewPlaneNormal:g}),this.initialViewUp=m,this.resetCameraNoEvent(),this.triggerCameraEvent(this.getCamera(),n),i.setFreezeFocalPoint(!0);const p="MONOCHROME1"===c.photometricInterpretation;this.stackInvalidated=!0,this.setVOI(this._getInitialVOIRange(e),{forceRecreateLUTFunction:!!p}),this.initialInvert=!!p,this.setInvertColor(this.invert||this.initialInvert),this.cameraFocalPointOnRender=this.getCamera().focalPoint,this.stackInvalidated=!1,this.stackActorReInitialized=!0,this._publishCalibratedEvent&&this.triggerCalibrationEvent()}_getInitialVOIRange(e){if(this.voiRange&&this.voiUpdatedWithSetProperties)return this.globalDefaultProperties.voiRange;const{windowCenter:t,windowWidth:i}=e;let n=this._getVOIRangeFromWindowLevel(i,t);return n=this._getPTPreScaledRange()||n,n}_getPTPreScaledRange(){if(this._isCurrentImagePTPrescaled())return this._getDefaultPTPrescaledVOIRange()}_isCurrentImagePTPrescaled(){return!("PT"!==this.modality||!this.csImage.isPreScaled||!this.csImage.preScale?.scalingParameters.suvbw)}_getDefaultPTPrescaledVOIRange(){return{lower:0,upper:5}}_getVOIRangeFromWindowLevel(e,t){let i,n;if("number"==typeof t&&"number"==typeof e?(i=t,n=e):Array.isArray(t)&&Array.isArray(e)&&(i=t[0],n=e[0]),void 0!==i&&void 0!==n)return Ti(n,i)}async _setImageIdIndex(e){if(e>=this.imageIds.length)throw new Error(`ImageIdIndex provided ${e} is invalid, the stack only has ${this.imageIds.length} elements`);this.currentImageIdIndex=e,this.hasPixelSpacing=!0,this.viewportStatus=F.PRE_RENDER;const t=await this._loadAndDisplayImage(this.imageIds[e],e);if(this.perImageIdDefaultProperties.size>=1){const e=this.perImageIdDefaultProperties.get(t);void 0!==e?this.setProperties(e):void 0!==this.globalDefaultProperties&&this.setProperties(this.globalDefaultProperties)}return t}resetCameraCPU(e,t){const{image:i}=this._cpuFallbackEnabledElement;if(!i)return;!function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const{canvas:n,image:r,viewport:a}=e,o=Da(n,r,0).scaleFactor;a.vflip=!1,a.hflip=!1,t&&(a.translation.x=0,a.translation.y=0),i&&(a.displayedArea.tlhc.x=1,a.displayedArea.tlhc.y=1,a.displayedArea.brhc.x=r.columns,a.displayedArea.brhc.y=r.rows,a.scale=o)}(this._cpuFallbackEnabledElement,e,t);const{scale:n}=this._cpuFallbackEnabledElement.viewport,{clientWidth:r,clientHeight:a}=this.element,o=[r/2,a/2],s=this.canvasToWorldCPU(o);this.setCameraCPU({focalPoint:s,scale:n})}resetCameraGPU(e,t){return this.setCamera({flipHorizontal:!1,flipVertical:!1,viewUp:this.initialViewUp}),super.resetCamera({resetPan:e,resetZoom:t,resetToCenter:!0})}scroll(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=this.imageIds,r=this.targetImageIdIndex,a=n.length;let o=r+e;o=Math.max(0,o),i?o%=a:o=Math.min(a-1,o),this.targetImageIdIndex=o;const s=n[o];ue.isLoaded(s)||!t?this.setImageIdIndex(o):(clearTimeout(this.debouncedTimeout),this.debouncedTimeout=window.setTimeout((()=>{this.setImageIdIndex(o)}),40));const l={newImageIdIndex:o,imageId:s,direction:e};o!==r&&ce(this.element,p.STACK_VIEWPORT_SCROLL,l)}setImageIdIndex(e){return this._throwIfDestroyed(),this.currentImageIdIndex===e?Promise.resolve(this.getCurrentImageId()):this._setImageIdIndex(e)}calibrateSpacing(e){const t=this.getImageIds().indexOf(e);this.stackInvalidated=!0,this._loadAndDisplayImage(e,t)}_restoreCameraProps(e,t,i){let{parallelScale:n}=e;const r=this.getRenderer(),{position:a,focalPoint:o}=this.getCamera(),s=se.vec3.subtract(se.vec3.create(),a,i),l=se.vec3.subtract(se.vec3.create(),o,i);this.setCameraNoEvent({parallelScale:n,position:s,focalPoint:l});const c=this.getCamera();this.triggerCameraEvent(c,t);const d={type:"ResetCameraEvent",renderer:r};r.invokeEvent(d)}triggerCameraEvent(e,t){const i={previousCamera:t,camera:e,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};this.suppressEvents||ce(this.element,p.CAMERA_MODIFIED,i)}triggerCalibrationEvent(){const{imageData:e}=this.getImageData(),t={element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId,imageId:this.getCurrentImageId(),imageData:e,worldToIndex:e.getWorldToIndex(),...this._calibrationEvent};this.suppressEvents||ce(this.element,p.IMAGE_SPACING_CALIBRATED,t),this._publishCalibratedEvent=!1}_getVOIRangeForCurrentImage(){const{windowCenter:e,windowWidth:t}=this.csImage;return this._getVOIRangeFromWindowLevel(t,e)}_getValidVOILUTFunction(e){return Object.values(V).includes(e)?e:V.LINEAR}getSliceInfo(){const e=this.getSliceIndex(),{dimensions:t}=this.getImageData();return{width:t[0],height:t[1],sliceIndex:e,slicePlane:2}}isReferenceViewable(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!super.isReferenceViewable(e,t))return!1;const{referencedImageId:i,sliceIndex:n}=e;if(e.volumeId&&!i)return t.asVolume;let r=this.getCurrentImageIdIndex();const a=this.imageIds[r];if(t.withNavigation&&"number"==typeof n&&(r=n),!a)return!1;if(t.asOverlay&&i){const e=(e=>{const t=Ue(q.IMAGE_PLANE,i),n=Ue(q.IMAGE_PLANE,e),r=t.imageOrientationPatient,a=n.imageOrientationPatient;if(r&&a){if(ve(t.imageOrientationPatient,n.imageOrientationPatient)){const i=t.imagePositionPatient,r=n.imagePositionPatient;if(i&&r){const t=se.vec3.create();se.vec3.subtract(t,r,i);const n=se.vec3.create();se.vec3.cross(n,a.slice(0,3),a.slice(3,6));const o=se.vec3.dot(t,n);if(Math.abs(o)<1)return e}}}else{const i=t.rows,r=t.columns,a=n.rows,o=n.columns;if(i===a&&r===o)return e}})(a);if(e)return e}let{imageURI:o}=t;if(!o){const e=a.indexOf(":");o=a.substring(e+1)}return i?.endsWith(o)}getViewReference(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{sliceIndex:t=this.getCurrentImageIdIndex()}=e,i=super.getViewReference(e),n=this.imageIds[t];if(n){if(i.referencedImageId=n,this.getCurrentImageIdIndex()!==t){const e=this.getImagePlaneReferenceData(t);if(!e)return;Object.assign(i,e)}return i}}setViewReference(e){if(!e)return;const{referencedImageId:t,sliceIndex:i}=e;if("number"==typeof i&&t&&t===this.imageIds[i])this.scroll(i-this.targetImageIdIndex);else{const e=this.imageIds.indexOf(t);if(-1===e)throw new Error("Unsupported - referenced image id not found");this.scroll(e-this.targetImageIdIndex)}}getViewReferenceId(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{sliceIndex:t=this.currentImageIdIndex}=e;if(Array.isArray(t))throw new Error("Use of slice ranges for stacks not supported");return`imageId:${this.imageIds[t]}`}getCPUFallbackError(e){return new Error(`method ${e} cannot be used during CPU Fallback mode`)}fillWithBackgroundColor(){const e=this.getRenderingEngine();e&&e.fillCanvasWithBackgroundColor(this.canvas,this.options.background)}unsetColormapCPU(){delete this._cpuFallbackEnabledElement.viewport.colormap,this._cpuFallbackEnabledElement.renderingTools={},this.cpuRenderingInvalidated=!0,this.fillWithBackgroundColor(),this.render()}setColormapCPU(e){this.colormap=e;const t=oa(e.name,e);this._cpuFallbackEnabledElement.viewport.colormap=t,this._cpuFallbackEnabledElement.renderingTools={},this.fillWithBackgroundColor(),this.cpuRenderingInvalidated=!0,this.render();const i={viewportId:this.id,colormap:e};ce(this.element,p.COLORMAP_MODIFIED,i)}setColormapGPU(e){const t=this.getDefaultActor().actor.getProperty(),i=t.getRGBTransferFunction(),n=dr(e.name)||rr().getPresetByName(e.name);if(i)i.applyColorMap(n),i.setMappingRange(this.voiRange.lower,this.voiRange.upper),t.setRGBTransferFunction(0,i);else{const e=ir().newInstance();e.applyColorMap(n),e.setMappingRange(this.voiRange.lower,this.voiRange.upper),t.setRGBTransferFunction(0,e)}this.colormap=e,this.render();const r={viewportId:this.id,colormap:e};ce(this.element,p.COLORMAP_MODIFIED,r)}unsetColormapGPU(){throw new Error("unsetColormapGPU not implemented.")}_getImagePlaneModule(e){const t=Ue(q.IMAGE_PLANE,e);this.calibration||=t.calibration;const i={...t};return i.columnPixelSpacing||(i.columnPixelSpacing=1,this.hasPixelSpacing=this.calibration?.scale>0),i.rowPixelSpacing||(i.rowPixelSpacing=1,this.hasPixelSpacing=this.calibration?.scale>0),i.columnCosines||(i.columnCosines=[0,1,0]),i.rowCosines||(i.rowCosines=[1,0,0]),i.imagePositionPatient||(i.imagePositionPatient=[0,0,0]),i.imageOrientationPatient||(i.imageOrientationPatient=new Float32Array([1,0,0,0,1,0])),i}},qa=class extends Wr{constructor(e){super(e),re(this,"getRotation",(()=>0)),re(this,"getCurrentImageIdIndex",(()=>0)),re(this,"getCurrentImageId",(()=>null));const{parallelProjection:t,orientation:i}=this.options,n=this.getVtkActiveCamera();null!=t&&n.setParallelProjection(t),i&&i!==S.ACQUISITION&&this.applyViewOrientation(i)}resetCamera(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super.resetCamera({resetPan:e,resetZoom:t,resetToCenter:i});const n=this.getVtkActiveCamera();return n.getParallelProjection()?n.setClippingRange(-Z.MAXIMUM_RAY_DISTANCE,Z.MAXIMUM_RAY_DISTANCE):n.setClippingRange(Z.MINIMUM_SLAB_THICKNESS,Z.MAXIMUM_RAY_DISTANCE),!0}setSlabThickness(e,t){return null}setBlendMode(e,t,i){return null}resetProperties(e){return null}resetSlabThickness(){return null}};class za{constructor(e){re(this,"actor",void 0),re(this,"opacity",.4),re(this,"outlineOpacity",.4),re(this,"transferFunction",[]),this.actor=e}setRGBTransferFunction(e,t){this.transferFunction[e]=t}setScalarOpacity(e){}setInterpolationTypeToNearest(){}setUseLabelOutline(){}setLabelOutlineOpacity(e){this.outlineOpacity=e}setLabelOutlineThickness(){}getColor(e){const t=this.transferFunction[0];return[t.getRedValue(e),t.getGreenValue(e),t.getBlueValue(e),this.opacity]}}class Ha{constructor(e){re(this,"actor",void 0),this.actor=e}getInputData(){return this.actor.getImage()}}class $a{constructor(e,t){re(this,"image",void 0),re(this,"derivedImage",void 0),re(this,"canvasProperties",new za(this)),re(this,"visibility",!1),re(this,"mapper",new Ha(this)),re(this,"viewport",void 0),re(this,"className","CanvasActor"),re(this,"canvas",void 0),this.derivedImage=t,this.viewport=e}renderRLE(e,t,i){const{width:n,height:r}=this.image;let{canvas:a}=this;a&&a.width===n&&a.height===r||(this.canvas=a=new window.OffscreenCanvas(n,r));const o=a.getContext("2d"),s=o.createImageData(n,r),{data:l}=s;l.fill(0);const{map:c}=i;let d=1/0,h=1/0,u=-1/0,g=-1/0;for(let e=0;e<r;e++){const t=c.getRun(e,0);if(!t)continue;h=Math.min(h,e),g=Math.max(g,e);const i=e*n<<2;let r;for(const e of t){const{start:n,end:a,value:o}=e;if(0===o){r||=[],r.push(t.indexOf(e));continue}d=Math.min(d,n),u=Math.max(u,a);const s=this.canvasProperties.getColor(o).map((e=>255*e));let c=i+(n<<2);for(let e=n;e<a;e++)l[c++]=s[0],l[c++]=s[1],l[c++]=s[2],l[c++]=s[3]}}if(d>n)return;const m=u-d,p=g-h;o.putImageData(s,0,0,d-1,h-1,m+2,p+2),t.drawImage(a,d,h,m,p,d,h,m,p)}render(e,t){if(!this.visibility)return;const i=this.image||this.getImage(),{width:n,height:r}=i,a=i.getScalarData();if(!a)return;const{voxelManager:o}=i;if(o&&o.map.getRun)return void this.renderRLE(e,t,o);let{canvas:s}=this;s&&s.width===n&&s.height===r||(this.canvas=s=new window.OffscreenCanvas(n,r));const l=s.getContext("2d"),c=l.createImageData(n,r),{data:d}=c;let h=0,u=0,g=1/0,m=1/0,p=-1/0,f=-1/0;for(let e=0;e<r;e++)for(let t=0;t<n;t++){const i=a[h++];if(i){g=Math.min(t,g),m=Math.min(e,m),p=Math.max(t,p),f=Math.max(e,f);const n=this.canvasProperties.getColor(i);d[u]=255*n[0],d[u+1]=255*n[1],d[u+2]=255*n[2],d[u+3]=127}u+=4}if(g>n)return;const v=p-g+1,w=f-m+1;l.putImageData(c,0,0,g,m,v,w),t.drawImage(s,g,m,v,w,g,m,v,w)}getClassName(){return this.className}getProperty(){return this.canvasProperties}setVisibility(e){this.visibility=e}getMapper(){return this.mapper}isA(e){return e===this.className}getImage(){if(this.image)return this.image;this.image={...this.derivedImage};const e=this.viewport.getImageData();return Object.assign(this.image,{worldToIndex:t=>e.imageData.worldToIndex(t),indexToWorld:(t,i)=>e.imageData.indexToWorld(t,i),getDimensions:()=>e.dimensions,getScalarData:()=>this.derivedImage?.getPixelData(),getDirection:()=>e.direction,getSpacing:()=>e.spacing,setOrigin:()=>null,setDerivedImage:e=>{this.derivedImage=e,this.image=null},modified:()=>null}),this.image}}class Ka extends _r{constructor(e){var t;super({...e,canvas:e.canvas||Vi(e.element)}),t=this,re(this,"modality",void 0),re(this,"imageId",void 0),re(this,"uid",void 0),re(this,"renderingEngineId",void 0),re(this,"canvasContext",void 0),re(this,"videoElement",void 0),re(this,"videoWidth",0),re(this,"videoHeight",0),re(this,"loop",!0),re(this,"mute",!0),re(this,"isPlaying",!1),re(this,"scrollSpeed",1),re(this,"playbackRate",1),re(this,"scalarData",void 0),re(this,"initialRender",void 0),re(this,"frameRange",[0,0]),re(this,"metadata",void 0),re(this,"fps",30),re(this,"numberOfFrames",void 0),re(this,"videoCamera",{panWorld:[0,0],parallelScale:1}),re(this,"feFilter",void 0),re(this,"averageWhite",void 0),re(this,"voiRange",{lower:0,upper:255}),re(this,"getProperties",(()=>({loop:this.videoElement.loop,muted:this.videoElement.muted,playbackRate:this.playbackRate,scrollSpeed:this.scrollSpeed,voiRange:{...this.voiRange}}))),re(this,"getMiddleSliceData",(()=>{throw new Error("Method not implemented.")})),re(this,"useCustomRenderingPipeline",!0),re(this,"resetCamera",(()=>(this.refreshRenderValues(),this.canvasContext.fillRect(0,0,this.canvas.width,this.canvas.height),this.isPlaying||this.renderFrame(),!0))),re(this,"getNumberOfSlices",(()=>{const e=Math.round(this.videoElement.duration*this.fps/this.scrollSpeed);return isNaN(e)?this.numberOfFrames:e})),re(this,"getFrameOfReferenceUID",(()=>this.videoElement.src)),re(this,"resize",(()=>{const e=this.canvas,{clientWidth:t,clientHeight:i}=e;e.width===t&&e.height===i||(e.width=t,e.height=i),this.refreshRenderValues(),this.isPlaying||this.renderFrame()})),re(this,"canvasToWorld",(function(e){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0];const n=t.videoCamera.panWorld,r=t.getWorldToCanvasRatio(),a=[n[0]*r,n[1]*r],o=[e[0]-a[0],e[1]-a[1]];return i.splice(0,2,o[0]/r,o[1]/r),i})),re(this,"worldToCanvas",(e=>{const t=this.videoCamera.panWorld,i=this.getWorldToCanvasRatio();return[(e[0]+t[0])*i,(e[1]+t[1])*i]})),re(this,"getRotation",(()=>0)),re(this,"canvasToIndex",(e=>{const t=this.getTransform();return t.invert(),t.transformPoint(e.map((e=>e*devicePixelRatio)))})),re(this,"indexToCanvas",(e=>this.getTransform().transformPoint(e).map((e=>e/devicePixelRatio)))),re(this,"customRenderViewportToCanvas",(()=>{this.renderFrame()})),re(this,"renderFrame",(()=>{const e=this.getTransform().getMatrix(),t=this.canvasContext;t.resetTransform(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.drawImage(this.videoElement,0,0,this.videoWidth||1024,this.videoHeight||1024);for(const e of this.getActors())e.actor.render(this,this.canvasContext);this.canvasContext.resetTransform(),ce(this.element,p.STACK_NEW_IMAGE,{element:this.element,viewportId:this.id,viewport:this,renderingEngineId:this.renderingEngineId,time:this.videoElement.currentTime,duration:this.videoElement.duration}),ce(this.element,p.IMAGE_RENDERED,{element:this.element,viewportId:this.id,viewport:this,imageIndex:this.getCurrentImageIdIndex(),numberOfSlices:this.numberOfFrames,renderingEngineId:this.renderingEngineId,time:this.videoElement.currentTime,duration:this.videoElement.duration}),this.initialRender();const i=this.getFrameNumber();this.isPlaying&&(i<this.frameRange[0]?this.setFrameNumber(this.frameRange[0]):i>this.frameRange[1]&&(this.loop?this.setFrameNumber(this.frameRange[0]):this.pause()))})),re(this,"renderWhilstPlaying",(()=>{this.renderFrame(),this.isPlaying&&requestAnimationFrame(this.renderWhilstPlaying)})),this.canvasContext=this.canvas.getContext("2d"),this.renderingEngineId=e.renderingEngineId,this.element.setAttribute("data-viewport-uid",this.id),this.element.setAttribute("data-rendering-engine-uid",this.renderingEngineId),this.videoElement=document.createElement("video"),this.videoElement.muted=this.mute,this.videoElement.loop=this.loop,this.videoElement.autoplay=!0,this.videoElement.crossOrigin="anonymous",this.addEventListeners(),this.resize()}static get useCustomRenderingPipeline(){return!0}addEventListeners(){this.canvas.addEventListener(p.ELEMENT_DISABLED,this.elementDisabledHandler)}removeEventListeners(){this.canvas.removeEventListener(p.ELEMENT_DISABLED,this.elementDisabledHandler)}elementDisabledHandler(){this.removeEventListeners(),this.videoElement.remove()}getImageDataMetadata(e){const t="string"==typeof e?e:e.imageId,i=Ue(q.IMAGE_PLANE,t);let n=i.rowCosines,r=i.columnCosines;null!=n&&null!=r||(n=[1,0,0],r=[0,1,0]);const a=se.vec3.fromValues(n[0],n[1],n[2]),o=se.vec3.fromValues(r[0],r[1],r[2]),{rows:s,columns:l}=i,c=se.vec3.create();se.vec3.cross(c,a,o);let d=i.imagePositionPatient;null==d&&(d=[0,0,0]);const h=i.columnPixelSpacing||1,u=i.rowPixelSpacing||1,g=i.columns,m=i.rows;return this.hasPixelSpacing=!!i.columnPixelSpacing,{bitsAllocated:8,numberOfComponents:3,origin:d,rows:s,columns:l,direction:[...a,...o,...c],dimensions:[g,m,1],spacing:[h,u,1],hasPixelSpacing:this.hasPixelSpacing,numVoxels:g*m*1,imagePlaneModule:i}}setDataIds(e,t){this.setVideo(e[0],(t.viewReference.sliceIndex||0)+1)}setVideo(e,t){this.imageId=Array.isArray(e)?e[0]:e;const i=Ue(q.IMAGE_URL,e);if(!i?.rendered)throw new Error(`Video Image ID ${e} does not have a rendered video view`);const{rendered:n}=i,r=Ue(q.GENERAL_SERIES,e);this.modality=r?.Modality,this.metadata=this.getImageDataMetadata(e);let{cineRate:a,numberOfFrames:o}=Ue(q.CINE,e);return this.numberOfFrames=o,this.setVideoURL(n).then((()=>(o&&1!==o||(o=Math.round(this.videoElement.duration*(a||30))),a||(a=Math.round(o/this.videoElement.duration)),this.fps=a,this.numberOfFrames=o,this.setFrameRange([1,o]),this.initialRender=()=>{this.initialRender=null,this.pause(),this.setFrameNumber(t||1)},new Promise((e=>{window.setTimeout((()=>{this.setFrameNumber(t||1),e(this)}),25)})))))}async setVideoURL(e){return new Promise((t=>{this.videoElement.src=e,this.videoElement.preload="auto";const i=()=>{this.videoWidth=this.videoElement.videoWidth,this.videoHeight=this.videoElement.videoHeight,this.videoElement.removeEventListener("loadedmetadata",i),this.refreshRenderValues(),t(!0)};this.videoElement.addEventListener("loadedmetadata",i)}))}getImageIds(){const e=new Array(this.numberOfFrames),t=this.imageId.replace(/[0-9]+$/,"");for(let i=0;i<this.numberOfFrames;i++)e[i]=`${t}${i+1}`;return e}togglePlayPause(){return this.isPlaying?(this.pause(),!1):(this.play(),!0)}async play(){try{this.isPlaying||(this.isPlaying=!0,await this.videoElement.play(),this.renderWhilstPlaying())}catch(e){}}pause(){try{this.isPlaying=!1,this.videoElement.pause()}catch(e){}}async scroll(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;await this.pause();const t=this.videoElement,i=this.renderFrame,n=t.currentTime+e*this.scrollSpeed/this.fps;t.currentTime=n;const r=e=>{i(),t.removeEventListener("seeked",r)};t.addEventListener("seeked",r)}async start(){const e=this.videoElement,t=this.renderFrame;if(e.currentTime=0,e.paused){const i=n=>{t(),e.removeEventListener("seeked",i)};e.addEventListener("seeked",i)}}async end(){const e=this.videoElement,t=this.renderFrame;if(e.currentTime=e.duration,e.paused){const i=n=>{t(),e.removeEventListener("seeked",i)};e.addEventListener("seeked",i)}}async setTime(e){const t=this.videoElement,i=this.renderFrame;if(t.currentTime=e,t.paused){const e=n=>{i(),t.removeEventListener("seeked",e)};t.addEventListener("seeked",e)}}getSliceViewInfo(){throw new Error("Method not implemented.")}async setFrameNumber(e){this.setTime((e-1)/this.fps)}setFrameRange(e){e?2===e.length&&e[0]!==e[1]&&(this.frameRange=[e[0],e[1]]):this.frameRange=[1,this.numberOfFrames]}getFrameRange(){return this.frameRange}setProperties(e){void 0!==e.loop&&(this.videoElement.loop=e.loop),void 0!==e.muted&&(this.videoElement.muted=e.muted),void 0!==e.playbackRate&&this.setPlaybackRate(e.playbackRate),void 0!==e.scrollSpeed&&this.setScrollSpeed(e.scrollSpeed),e.voiRange&&this.setVOI(e.voiRange)}setPlaybackRate(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.playbackRate=e,e<.0625?this.pause():this.videoElement&&(this.videoElement.playbackRate=e,this.play())}setScrollSpeed(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:W.FRAME;this.scrollSpeed=t===W.SECOND?e*this.fps:e}resetProperties(){this.setProperties({loop:!1,muted:!0})}getScalarData(){if(this.scalarData.frameNumber===this.getFrameNumber())return this.scalarData;const e=document.createElement("canvas");e.width=this.videoWidth,e.height=this.videoHeight;const t=e.getContext("2d");t.drawImage(this.videoElement,0,0);const i=t.getImageData(0,0,this.videoWidth,this.videoHeight).data;return i.getRange=()=>[0,255],i.frameNumber=this.getFrameNumber(),this.scalarData=i,i}getImageData(){const{metadata:e}=this,t=e.spacing,i={dimensions:e.dimensions,spacing:t,origin:e.origin,direction:e.direction,metadata:{Modality:this.modality,FrameOfReferenceUID:e.FrameOfReferenceUID},getScalarData:()=>this.getScalarData(),scalarData:this.getScalarData(),imageData:{getDirection:()=>e.direction,getDimensions:()=>e.dimensions,getRange:()=>[0,255],getScalarData:()=>this.getScalarData(),getSpacing:()=>e.spacing,worldToIndex:e=>{const t=this.worldToCanvas(e),i=this.canvasToIndex(t);return[i[0],i[1],0]},indexToWorld:(e,t)=>{const i=this.indexToCanvas([e[0],e[1]]);return this.canvasToWorld(i,t)}},hasPixelSpacing:this.hasPixelSpacing,calibration:this.calibration,preScale:{scaled:!1}};return Object.defineProperty(i,"scalarData",{get:()=>this.getScalarData(),enumerable:!0}),i}hasImageURI(e){const t=e.match(Ka.frameRangeExtractor),i=t?e.substring(0,t.index):e;return this.imageId.includes(i)}setVOI(e){this.voiRange=e,this.setColorTransform()}setWindowLevel(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:256,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:128;const i=t-e/2,n=t+e/2-1;this.setVOI({lower:i,upper:n}),this.setColorTransform()}setAverageWhite(e){this.averageWhite=e,this.setColorTransform()}setColorTransform(){if(!this.voiRange&&!this.averageWhite)return void(this.feFilter=null);const e=this.averageWhite||[255,255,255],t=Math.max(...e),i=e.map((e=>t/e)),{lower:n=0,upper:r=255}=this.voiRange||{},a=(r-n+1)/255,o=n/255;this.feFilter=`url('data:image/svg+xml, <svg xmlns="http://www.w3.org/2000/svg"> <filter id="colour" color-interpolation-filters="linearRGB"> <feColorMatrix type="matrix" values=" ${i[0]*a} 0 0 0 ${o} 0 ${i[1]*a} 0 0 ${o} 0 0 ${i[2]*a} 0 ${o} 0 0 0 1 0" /> </filter> </svg>#colour')`,this.canvas.style.filter=this.feFilter}setCamera(e){const{parallelScale:t,focalPoint:i}=e;if(t&&(this.videoCamera.parallelScale=this.element.clientHeight/2/t),void 0!==i){const e=this.worldToCanvas(i),t=[this.element.clientWidth/2,this.element.clientHeight/2],n=[(e[0]-t[0])/this.videoCamera.parallelScale,(e[1]-t[1])/this.videoCamera.parallelScale];this.videoCamera.panWorld=[this.videoCamera.panWorld[0]-n[0],this.videoCamera.panWorld[1]-n[1]]}this.canvasContext.fillStyle="rgba(0,0,0,1)",this.canvasContext.fillRect(0,0,this.canvas.width,this.canvas.height),this.isPlaying||this.renderFrame()}getCurrentImageId(){return this.imageId.replace("/frames/1",this.isPlaying?`/frames/${this.frameRange[0]}-${this.frameRange[1]}`:`/frames/${this.getFrameNumber()}`)}getViewReferenceId(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{sliceIndex:t}=e;return void 0===t?`videoId:${this.getCurrentImageId()}`:Array.isArray(t)?`videoId:${this.imageId.substring(0,this.imageId.length-1)}${t[0]+1}-${t[1]+1}`:`videoId:${this.imageId.replace("/frames/1",`/frames/${1+t}`)}`}isReferenceViewable(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{imageURI:i}=t;const{referencedImageId:n,sliceIndex:r}=e;if(!super.isReferenceViewable(e))return!1;const a=this.getCurrentImageId();if(!i){const e=a.indexOf(":");i=a.substring(e+1,a.length-1)}if(t.withNavigation)return!0;const o=this.getSliceIndex();if(Array.isArray(r))return o>=r[0]&&o<=r[1];if(void 0!==r)return o===r;if(!n)return!1;const s=n.match(Ka.frameRangeExtractor);if(!s[2])return!0;const l=s[2].split("-").map((e=>Number(e))),c=o+1;return l[0]<=c&&c<=(l[1]??l[0])}setViewReference(e){"number"==typeof e.sliceIndex?this.setFrameNumber(e.sliceIndex+1):Array.isArray(e.sliceIndex)&&this.setFrameRange(e.sliceIndex)}getViewReference(e){let t=e.sliceIndex;return t||(t=this.isPlaying?[this.frameRange[0]-1,this.frameRange[1]-1]:this.getCurrentImageIdIndex()),{...super.getViewReference(e),referencedImageId:this.getViewReferenceId(e),sliceIndex:t}}getFrameNumber(){return 1+this.getCurrentImageIdIndex()}getCurrentImageIdIndex(){return Math.round(this.videoElement.currentTime*this.fps)}getSliceIndex(){return this.getCurrentImageIdIndex()/this.scrollSpeed}getCamera(){const{parallelScale:e}=this.videoCamera,t=[this.element.clientWidth/2,this.element.clientHeight/2];return{parallelProjection:!0,focalPoint:this.canvasToWorld(t),position:[0,0,0],viewUp:[0,-1,0],parallelScale:this.element.clientHeight/2/e,viewPlaneNormal:[0,0,1]}}getFrameRate(){return this.fps}getPan(){const e=this.videoCamera.panWorld;return[e[0],e[1]]}refreshRenderValues(){let e=this.canvas.offsetWidth/this.videoWidth;this.videoHeight*e>this.canvas.height&&(e=this.canvas.offsetHeight/this.videoHeight);const t=Math.floor(this.videoWidth*e),i=Math.floor(this.videoHeight*e),n=(this.canvas.offsetWidth-t)/2/e,r=(this.canvas.offsetHeight-i)/2/e;this.videoCamera.panWorld=[n,r],this.videoCamera.parallelScale=e}getWorldToCanvasRatio(){return this.videoCamera.parallelScale}getCanvasToWorldRatio(){return 1/this.videoCamera.parallelScale}getTransform(){const e=this.videoCamera.panWorld,t=window.devicePixelRatio||1,i=this.getWorldToCanvasRatio(),n=this.getCanvasToWorldRatio(),r=[this.canvas.offsetWidth/2,this.canvas.offsetHeight/2],a=[r[0]*n,r[1]*n],o=new ca;return o.scale(t,t),o.translate(r[0],r[1]),o.scale(i,i),o.translate(e[0],e[1]),o.translate(-a[0],-a[1]),o}updateCameraClippingPlanesAndRange(){}addImages(e){const t=this.getActors();e.forEach((e=>{const i=ue.getImage(e.imageId),n=this.createActorMapper(i);n&&(t.push({uid:e.actorUID,actor:n}),e.callback&&e.callback({imageActor:n,imageId:e.imageId}))})),this.setActors(t)}createActorMapper(e){return new $a(this,e)}}re(Ka,"frameRangeExtractor",/(\/frames\/|[&?]frameNumber=)([^/&?]*)/i);const Ya=Ka,Za=Symbol.for("map");class Ja extends _r{constructor(e){super({...e,canvas:e.canvas||Vi(e.element)}),re(this,"modality",void 0),re(this,"imageIds",void 0),re(this,"uid",void 0),re(this,"renderingEngineId",void 0),re(this,"frameOfReferenceUID",void 0),re(this,"metadata",void 0),re(this,"metadataDicomweb",void 0),re(this,"microscopyElement",void 0),re(this,"map",void 0),re(this,"internalCamera",{rotation:0,centerIndex:[0,0],extent:[0,-2,1,-1],xSpacing:1,ySpacing:1,resolution:1,zoom:1}),re(this,"viewer",void 0),re(this,"voiRange",{lower:0,upper:255}),re(this,"getProperties",(()=>({}))),re(this,"resetCamera",(()=>!0)),re(this,"getNumberOfSlices",(()=>1)),re(this,"getFrameOfReferenceUID",(()=>this.frameOfReferenceUID)),re(this,"resize",(()=>{const e=this.canvas,{clientWidth:t,clientHeight:i}=e;e.width===t&&e.height===i||(e.width=t,e.height=i),this.refreshRenderValues()})),re(this,"canvasToWorld",(e=>{if(!this.metadata)return;const[t,i]=this.canvasToIndex(e),{origin:n,spacing:r,direction:a}=this.getImageData(),o=se.vec3.fromValues(0,0,0),s=a.slice(0,3),l=a.slice(3,6);return se.vec3.scaleAndAdd(o,n,s,t*r[0]),se.vec3.scaleAndAdd(o,o,l,i*r[1]),[o[0],o[1],o[2]]})),re(this,"worldToCanvas",(e=>{if(!this.metadata)return;const{spacing:t,direction:i,origin:n}=this.metadata,r=i.slice(0,3),a=i.slice(3,6),o=se.vec3.subtract([0,0,0],e,n),s=[se.vec3.dot(o,r)/t[0],se.vec3.dot(o,a)/t[1]];return this.indexToCanvas(s)})),re(this,"postrender",(()=>{this.refreshRenderValues(),ce(this.element,p.IMAGE_RENDERED,{element:this.element,viewportId:this.id,viewport:this,renderingEngineId:this.renderingEngineId})})),re(this,"getRotation",(()=>0)),re(this,"canvasToIndex",(e=>{const t=this.getTransform();return t.invert(),t.transformPoint(e)})),re(this,"indexToCanvas",(e=>this.getTransform().transformPoint(e))),re(this,"customRenderViewportToCanvas",(()=>{})),this.renderingEngineId=e.renderingEngineId,this.element.setAttribute("data-viewport-uid",this.id),this.element.setAttribute("data-rendering-engine-uid",this.renderingEngineId),this.element.style.position="relative",this.microscopyElement=document.createElement("div"),this.microscopyElement.id=xe(),this.microscopyElement.innerText="Initial",this.microscopyElement.style.background="grey",this.microscopyElement.style.width="100%",this.microscopyElement.style.height="100%",this.microscopyElement.style.position="absolute",this.microscopyElement.style.left="0",this.microscopyElement.style.top="0";const t=this.element.firstElementChild;t.insertBefore(this.microscopyElement,t.childNodes[1]),this.addEventListeners(),this.resize()}static get useCustomRenderingPipeline(){return!0}addEventListeners(){this.canvas.addEventListener(p.ELEMENT_DISABLED,this.elementDisabledHandler)}removeEventListeners(){this.canvas.removeEventListener(p.ELEMENT_DISABLED,this.elementDisabledHandler)}elementDisabledHandler(){this.removeEventListeners()}getImageDataMetadata(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;const t=this.metadataDicomweb.reduce(((e,t)=>e?.NumberOfFrames<t.NumberOfFrames?t:e)),{TotalPixelMatrixColumns:i,TotalPixelMatrixRows:n,ImageOrientationSlide:r,ImagedVolumeWidth:a,ImagedVolumeHeight:o,ImagedVolumeDepth:s}=t,l=Ue(q.IMAGE_PLANE,this.imageIds[e]);let c=r.slice(0,3),d=r.slice(3,6);null!=c&&null!=d||(c=[1,0,0],d=[0,1,0]);const h=se.vec3.fromValues(c[0],c[1],c[2]),u=se.vec3.fromValues(d[0],d[1],d[2]),g=se.vec3.create();se.vec3.cross(g,h,u);const{XOffsetInSlideCoordinateSystem:m=0,YOffsetInSlideCoordinateSystem:p=0,ZOffsetInSlideCoordinateSystem:f=0}=t.TotalPixelMatrixOriginSequence?.[0]||{},v=[m,p,f],w=a/i,I=o/n,C=i,E=n,y=s;return this.hasPixelSpacing=!(!a||!o),{bitsAllocated:8,numberOfComponents:3,origin:v,direction:[...h,...u,...g],dimensions:[C,E,1],spacing:[w,I,y],hasPixelSpacing:this.hasPixelSpacing,numVoxels:C*E*1,imagePlaneModule:l}}async setFrameNumber(e){}setProperties(e){}resetProperties(){this.setProperties({})}getScalarData(){return null}getImageData(){const{metadata:e}=this;if(!e)return null;const{spacing:t}=e;return{dimensions:e.dimensions,spacing:t,numberOfComponents:3,origin:e.origin,direction:e.direction,metadata:{Modality:this.modality,FrameOfReferenceUID:this.frameOfReferenceUID},imageData:{getDirection:()=>e.direction,getDimensions:()=>e.dimensions,getRange:()=>[0,255],getScalarData:()=>this.getScalarData(),getSpacing:()=>e.spacing,worldToIndex:e=>{const t=this.worldToCanvas(e),i=this.canvasToIndex(t);return[i[0],i[1],0]},indexToWorld:e=>{const t=this.indexToCanvas([e[0],e[1]]);return this.canvasToWorld(t)}},hasPixelSpacing:this.hasPixelSpacing,calibration:this.calibration,preScale:{scaled:!1},scalarData:this.getScalarData()}}hasImageURI(e){return!0}setCamera(e){const t=this.getCamera(),{parallelScale:i,focalPoint:n}=e,r=this.getView(),{xSpacing:a}=this.internalCamera;if(i){const e=1/a/(this.element.clientHeight/i);r.setResolution(e)}if(n){const e=this.worldToCanvas(n),t=this.canvasToIndex(e);r.setCenter(t)}const o=this.getCamera();this.triggerCameraModifiedEventIfNecessary(t,o)}getCurrentImageId(){return this.imageIds[0]}getFrameNumber(){return 1}getCamera(){this.refreshRenderValues();const{resolution:e,xSpacing:t}=this.internalCamera,i=e*t,n=[this.element.clientWidth/2,this.element.clientHeight/2],r=this.canvasToWorld(n);return{parallelProjection:!0,focalPoint:r,position:r,viewUp:[0,-1,0],parallelScale:this.element.clientHeight*i,viewPlaneNormal:[0,0,1]}}setDataIds(e){const t=Ue(q.WADO_WEB_CLIENT,e[0]);if(!t)throw new Error(`To use setDataIds on WSI data, you must provide metaData.webClient for ${e[0]}`);return this.setWSI(e,t)}async setWSI(e,t){this.microscopyElement.style.background="black",this.microscopyElement.innerText="Loading",this.imageIds=e;const i=await Ja.getDicomMicroscopyViewer();this.frameOfReferenceUID=null;const n=this.imageIds.map((e=>{const i=t.getDICOMwebMetadata(e);Object.defineProperty(i,"isMultiframe",{value:i.isMultiframe,enumerable:!1}),Object.defineProperty(i,"frameNumber",{value:void 0,enumerable:!1});const n=i["00080008"]?.Value;1===n?.length&&(i["00080008"].Value=n[0].split("\\"));const r=i["00200052"]?.Value?.[0];return this.frameOfReferenceUID?r!==this.frameOfReferenceUID&&(i["00200052"].Value=[this.frameOfReferenceUID]):this.frameOfReferenceUID=r,i})),r=[];n.forEach((e=>{const t=new i.metadata.VLWholeSlideMicroscopyImage({metadata:e}),n=t.ImageType[2];"VOLUME"===n||"THUMBNAIL"===n?r.push(t):console.log("Unknown image type",t.ImageType)})),this.metadataDicomweb=r;const a=new i.viewer.VolumeImageViewer({client:t,metadata:r,controls:[],bindings:{}});a.render({container:this.microscopyElement}),this.metadata=this.getImageDataMetadata(),a.deactivateDragPanInteraction(),this.viewer=a,this.map=a[Za],this.map.on("postrender",this.postrender),this.resize(),this.microscopyElement.innerText="",Object.assign(this.microscopyElement.style,{"--ol-partial-background-color":"rgba(127, 127, 127, 0.7)","--ol-foreground-color":"#000000","--ol-subtle-foreground-color":"#000","--ol-subtle-background-color":"rgba(78, 78, 78, 0.5)",background:"none"})}scroll(e){const t=this.getCamera();this.setCamera({parallelScale:t.parallelScale*(1+.1*e)})}getSliceIndex(){return 0}getView(){if(!this.viewer)return;const e=this.viewer[Za],t=window;return t.map=e,t.viewer=this.viewer,t.view=e?.getView(),t.wsi=this,e?.getView()}refreshRenderValues(){const e=this.getView();if(!e)return;const t=e.getResolution();if(!t||t<J)return;const i=e.getCenter(),n=e.getProjection().getExtent(),r=e.getRotation(),a=e.getZoom(),{metadata:{spacing:[o,s]}}=this,l=1/t/o;Object.assign(this.internalCamera,{extent:n,centerIndex:i,worldToCanvasRatio:l,xSpacing:o,ySpacing:s,resolution:t,rotation:r,zoom:a})}getZoom(){return this.getView()?.getZoom()}setZoom(e){this.getView()?.setZoom(e)}getTransform(){this.refreshRenderValues();const{centerIndex:e,resolution:t,rotation:i}=this.internalCamera,n=[this.canvas.width/2,this.canvas.height/2],r=new ca;return r.translate(n[0],n[1]),r.rotate(i),r.scale(1/t,-1/t),r.translate(-e[0],-e[1]),r}getReferenceId(){return`imageId:${this.getCurrentImageId()}`}getCurrentImageIdIndex(){return 0}}re(Ja,"getDicomMicroscopyViewer",(async()=>Ri("dicom-microscopy-viewer")));const Xa=Ja,Qa={[I.ORTHOGRAPHIC]:zr,[I.PERSPECTIVE]:zr,[I.STACK]:Ba,[I.VOLUME_3D]:qa,[I.VIDEO]:Ya,[I.WholeSlide]:Xa};function eo(e){return Qa[e].useCustomRenderingPipeline}const to=class{constructor(e){if(re(this,"id",void 0),re(this,"hasBeenDestroyed",void 0),re(this,"offscreenMultiRenderWindow",void 0),re(this,"offScreenCanvasContainer",void 0),re(this,"_viewports",void 0),re(this,"_needsRender",new Set),re(this,"_animationFrameSet",!1),re(this,"_animationFrameHandle",null),re(this,"useCPURendering",void 0),re(this,"renderFrameOfReference",(e=>{const t=this._getViewportsAsArray().map((t=>{if(t.getFrameOfReferenceUID()===e)return t.id}));this.renderViewports(t)})),re(this,"_renderFlaggedViewports",(()=>{this._throwIfDestroyed(),this.useCPURendering||this.performVtkDrawCall();const e=this._getViewportsAsArray(),t=[];for(let i=0;i<e.length;i++){const n=e[i];if(this._needsRender.has(n.id)){const e=this.renderViewportUsingCustomOrVtkPipeline(n);if(t.push(e),n.setRendered(),this._needsRender.delete(n.id),0===this._needsRender.size)break}}this._animationFrameSet=!1,this._animationFrameHandle=null,t.forEach((e=>{e?.element&&ce(e.element,p.IMAGE_RENDERED,e)}))})),this.id=e||xe(),this.useCPURendering=vi(),St.set(this),!wi())throw new Error("@cornerstonejs/core is not initialized, run init() first");this.useCPURendering||(this.offscreenMultiRenderWindow=Fn.newInstance(),this.offScreenCanvasContainer=document.createElement("div"),this.offscreenMultiRenderWindow.setContainer(this.offScreenCanvasContainer)),this._viewports=new Map,this.hasBeenDestroyed=!1}enableElement(e){const t=this._normalizeViewportInputEntry(e);this._throwIfDestroyed();const{element:i,viewportId:n}=t;if(!i)throw new Error("No element provided");this.getViewport(n)&&this.disableElement(n);const{type:r}=t,a=eo(r);this.useCPURendering||a?this.addCustomViewport(t):this.enableVTKjsDrivenViewport(t);const o=Vi(i),{background:s}=t.defaultOptions;this.fillCanvasWithBackgroundColor(o,s)}disableElement(e){this._throwIfDestroyed();const t=this.getViewport(e);t?(this._resetViewport(t),eo(t.type)||this.useCPURendering||this.offscreenMultiRenderWindow.removeRenderer(e),this._removeViewport(e),t.isDisabled=!0,this._needsRender.delete(e),this.getViewports().length||this._clearAnimationFrame()):console.warn(`viewport ${e} does not exist`)}setViewports(e){const t=this._normalizeViewportInputEntries(e);this._throwIfDestroyed(),this._reset();const i=[],n=[];t.forEach((e=>{this.useCPURendering||eo(e.type)?n.push(e):i.push(e)})),this.setVtkjsDrivenViewports(i),this.setCustomViewports(n),t.forEach((e=>{const t=Vi(e.element),{background:i}=e.defaultOptions;this.fillCanvasWithBackgroundColor(t,i)}))}resize(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this._throwIfDestroyed();const i=this._getViewportsAsArray(),n=[],r=[];i.forEach((e=>{eo(e.type)?r.push(e):n.push(e)})),n.length&&this._resizeVTKViewports(n,t,e),r.length&&this._resizeUsingCustomResizeHandler(r,t,e)}getViewport(e){return this._viewports.get(e)}getViewports(){return this._throwIfDestroyed(),this._getViewportsAsArray()}getStackViewport(e){this._throwIfDestroyed();const t=this.getViewport(e);if(!t)throw new Error(`Viewport with Id ${e} does not exist`);if(!(t instanceof Ba))throw new Error(`Viewport with Id ${e} is not a StackViewport.`);return t}getStackViewports(){return this._throwIfDestroyed(),this.getViewports().filter((e=>e instanceof Ba))}getVolumeViewports(){return this._throwIfDestroyed(),this.getViewports().filter((e=>e instanceof Wr))}render(){const e=this.getViewports().map((e=>e.id));this._setViewportsToBeRenderedNextFrame(e)}renderViewports(e){this._setViewportsToBeRenderedNextFrame(e)}renderViewport(e){this._setViewportsToBeRenderedNextFrame([e])}destroy(){this.hasBeenDestroyed||(this.useCPURendering||(this._getViewportsAsArray().forEach((e=>{this.offscreenMultiRenderWindow.removeRenderer(e.id)})),this.offscreenMultiRenderWindow.delete(),delete this.offscreenMultiRenderWindow),this._reset(),St.delete(this.id),this.hasBeenDestroyed=!0)}fillCanvasWithBackgroundColor(e,t){const i=e.getContext("2d");let n;if(t){const e=t.map((e=>Math.floor(255*e)));n=`rgb(${e[0]}, ${e[1]}, ${e[2]})`}else n="black";i.fillStyle=n,i.fillRect(0,0,e.width,e.height)}_normalizeViewportInputEntry(e){const{type:t,defaultOptions:i}=e;let n=i;return n&&0!==Object.keys(n).length||(n={background:[0,0,0],orientation:null,displayArea:null},t===I.ORTHOGRAPHIC&&(n={...n,orientation:S.AXIAL})),{...e,defaultOptions:n}}_normalizeViewportInputEntries(e){const t=[];return e.forEach((e=>{t.push(this._normalizeViewportInputEntry(e))})),t}_resizeUsingCustomResizeHandler(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e.forEach((e=>{"function"==typeof e.resize&&e.resize()})),e.forEach((e=>{const i=e.getCamera();e.resetCamera(),t&&e.setCamera(i)})),i&&this.render()}_resizeVTKViewports(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e.forEach((e=>{Vi(e.element)}));const n=e.map((e=>e.canvas));if(n.length){const{offScreenCanvasWidth:t,offScreenCanvasHeight:i}=this._resizeOffScreenCanvas(n);this._resize(e,t,i)}e.forEach((e=>{const i=e.getCamera(),n=e.getRotation(),{flipHorizontal:r}=i;e.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,resetRotation:!1,suppressEvents:!0});const a=e.getDisplayArea();t&&(a?(r&&e.setCamera({flipHorizontal:r}),n&&e.setViewPresentation({rotation:n})):e.setCamera(i))})),i&&this.render()}enableVTKjsDrivenViewport(e){const t=this._getViewportsAsArray().filter((e=>!1===eo(e.type))),i=t.map((e=>e.canvas)),n=Vi(e.element);i.push(n);const{offScreenCanvasWidth:r,offScreenCanvasHeight:a}=this._resizeOffScreenCanvas(i),o=this._resize(t,r,a),s={...e,canvas:n};this.addVtkjsDrivenViewport(s,{offScreenCanvasWidth:r,offScreenCanvasHeight:a,xOffset:o})}_removeViewport(e){this.getViewport(e)?this._viewports.delete(e):console.warn(`viewport ${e} does not exist`)}addVtkjsDrivenViewport(e,t){const{element:i,canvas:n,viewportId:r,type:a,defaultOptions:o}=e;i.tabIndex=-1;const{offScreenCanvasWidth:s,offScreenCanvasHeight:l,xOffset:c}=t,{sxStartDisplayCoords:d,syStartDisplayCoords:h,sxEndDisplayCoords:u,syEndDisplayCoords:g,sx:m,sy:f,sWidth:v,sHeight:w}=this._getViewportCoordsOnOffScreenCanvas(e,s,l,c);this.offscreenMultiRenderWindow.addRenderer({viewport:[d,h,u,g],id:r,background:o.background?o.background:[0,0,0]});const C={id:r,element:i,renderingEngineId:this.id,type:a,canvas:n,sx:m,sy:f,sWidth:v,sHeight:w,defaultOptions:o||{}};let E;if(a===I.STACK)E=new Ba(C);else if(a===I.ORTHOGRAPHIC||a===I.PERSPECTIVE)E=new zr(C);else{if(a!==I.VOLUME_3D)throw new Error(`Viewport Type ${a} is not supported`);E=new qa(C)}this._viewports.set(r,E);const y={element:i,viewportId:r,renderingEngineId:this.id};E.suppressEvents||ce(le,p.ELEMENT_ENABLED,y)}addCustomViewport(e){const{element:t,viewportId:i,type:n,defaultOptions:r}=e;t.tabIndex=-1;const a=Vi(t),{clientWidth:o,clientHeight:s}=a;a.width===o&&a.height===s||(a.width=o,a.height=s);const l={id:i,renderingEngineId:this.id,element:t,type:n,canvas:a,sx:0,sy:0,sWidth:o,sHeight:s,defaultOptions:r||{}},c=new(0,Qa[n])(l);this._viewports.set(i,c);const d={element:t,viewportId:i,renderingEngineId:this.id};ce(le,p.ELEMENT_ENABLED,d)}setCustomViewports(e){e.forEach((e=>{this.addCustomViewport(e)}))}setVtkjsDrivenViewports(e){if(e.length){const t=e.map((e=>Vi(e.element)));t.forEach((e=>{const t=window.devicePixelRatio||1,i=e.getBoundingClientRect();e.width=i.width*t,e.height=i.height*t}));const{offScreenCanvasWidth:i,offScreenCanvasHeight:n}=this._resizeOffScreenCanvas(t);let r=0;for(let a=0;a<e.length;a++){const o=e[a],s=t[a],l={...o,canvas:s};this.addVtkjsDrivenViewport(l,{offScreenCanvasWidth:i,offScreenCanvasHeight:n,xOffset:r}),r+=s.width}}}_resizeOffScreenCanvas(e){const{offScreenCanvasContainer:t,offscreenMultiRenderWindow:i}=this,n=Math.max(...e.map((e=>e.height)));let r=0;return e.forEach((e=>{r+=e.width})),t.width=r,t.height=n,i.resize(),{offScreenCanvasWidth:r,offScreenCanvasHeight:n}}_resize(e,t,i){let n=0;for(let r=0;r<e.length;r++){const a=e[r],{sxStartDisplayCoords:o,syStartDisplayCoords:s,sxEndDisplayCoords:l,syEndDisplayCoords:c,sx:d,sy:h,sWidth:u,sHeight:g}=this._getViewportCoordsOnOffScreenCanvas(a,t,i,n);n+=a.canvas.width,a.sx=d,a.sy=h,a.sWidth=u,a.sHeight=g,this.offscreenMultiRenderWindow.getRenderer(a.id).setViewport([o,s,l,c])}return n}_getViewportCoordsOnOffScreenCanvas(e,t,i,n){const{canvas:r}=e,{width:a,height:o}=r,s=n/t,l=0+(i-o)/i;return{sxStartDisplayCoords:s,syStartDisplayCoords:l,sxEndDisplayCoords:s+a/t,syEndDisplayCoords:l+o/i,sx:n,sy:0,sWidth:a,sHeight:o}}_getViewportsAsArray(){return Array.from(this._viewports.values())}_setViewportsToBeRenderedNextFrame(e){e.forEach((e=>{this._needsRender.add(e)})),this._render()}_render(){this._needsRender.size>0&&!this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedViewports),this._animationFrameSet=!0)}performVtkDrawCall(){const{offscreenMultiRenderWindow:e}=this,t=e.getRenderWindow(),i=e.getRenderers();if(i.length){for(let e=0;e<i.length;e++){const{renderer:t,id:n}=i[e];this._needsRender.has(n)?t.setDraw(!0):t.setDraw(!1)}t.render();for(let e=0;e<i.length;e++)i[e].renderer.setDraw(!1)}}renderViewportUsingCustomOrVtkPipeline(e){let t;if(!(e.sWidth<2||e.sHeight<2)){if(!0===eo(e.type))t=e.customRenderViewportToCanvas();else{if(this.useCPURendering)throw new Error("GPU not available, and using a viewport with no custom render pipeline.");const{offscreenMultiRenderWindow:i}=this,n=i.getOpenGLRenderWindow().get3DContext().canvas;t=this._renderViewportFromVtkCanvasToOnscreenCanvas(e,n)}return t}console.warn("Viewport is too small",e.sWidth,e.sHeight)}_renderViewportFromVtkCanvasToOnscreenCanvas(e,t){const{element:i,canvas:n,sx:r,sy:a,sWidth:o,sHeight:s,id:l,renderingEngineId:c,suppressEvents:d}=e,{width:h,height:u}=n;return n.getContext("2d").drawImage(t,r,a,o,s,0,0,h,u),{element:i,suppressEvents:d,viewportId:l,renderingEngineId:c,viewportStatus:e.viewportStatus}}_resetViewport(e){const t=this.id,{element:i,canvas:n,id:r}=e,a={element:i,viewportId:r,renderingEngineId:t};e.removeWidgets(),ce(le,p.ELEMENT_DISABLED,a),i.removeAttribute("data-viewport-uid"),i.removeAttribute("data-rendering-engine-uid"),n.getContext("2d").clearRect(0,0,n.width,n.height)}_clearAnimationFrame(){window.cancelAnimationFrame(this._animationFrameHandle),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null}_reset(){this._getViewportsAsArray().forEach((e=>{this._resetViewport(e)})),this._clearAnimationFrame(),this._viewports=new Map}_throwIfDestroyed(){if(this.hasBeenDestroyed)throw new Error("this.destroy() has been manually called to free up memory, can not longer use this instance. Instead make a new one.")}_downloadOffScreenCanvas(){!function(e){const t=document.createElement("a");t.download="viewport.png",t.href=e,document.body.appendChild(t),t.click(),document.body.removeChild(t)}(this._debugRender())}_debugRender(){const{offscreenMultiRenderWindow:e}=this,t=e.getRenderWindow(),i=e.getRenderers();for(let e=0;e<i.length;e++)i[e].renderer.setDraw(!0);t.render();const n=e.getOpenGLRenderWindow().get3DContext().canvas,r=n.toDataURL();return this._getViewportsAsArray().forEach((e=>{const{sx:t,sy:i,sWidth:r,sHeight:a}=e,o=e.canvas,{width:s,height:l}=o;o.getContext("2d").drawImage(n,t,i,r,a,0,0,s,l)})),r}};class io{constructor(e){re(this,"id",void 0),re(this,"sizeInBytes",void 0),re(this,"frameOfReferenceUID",void 0),re(this,"color",[200,0,0]),re(this,"points",void 0),re(this,"polys",void 0),this.id=e.id,this.points=e.data.points,this.polys=e.data.polys,this.color=e.color??this.color,this.frameOfReferenceUID=e.frameOfReferenceUID,this.sizeInBytes=this._getSizeInBytes()}_getSizeInBytes(){return 4*this.points.length+4*this.polys.length}getColor(){return this.color}getPoints(){return this.points}getPolys(){return this.polys}setColor(e){this.color=e}setPoints(e){this.points=e}setPolys(e){this.polys=e}getSizeInBytes(){return this.sizeInBytes}}const no=new We("imageRetrievalPool");no.setMaxSimultaneousRequests(v.Interaction,200),no.setMaxSimultaneousRequests(v.Thumbnail,200),no.setMaxSimultaneousRequests(v.Prefetch,200),no.grabDelay=0;const ro=no;function ao(e){if(!e)return;const{viewportUid:t,renderingEngineUid:i}=e.dataset;return oo(t,i)}function oo(e,t){if(!t||!e)return;const i=Mt(t);if(!i||i.hasBeenDestroyed)return;const n=i.getViewport(e);if(!n)return;const r=n.getFrameOfReferenceUID();return{viewport:n,renderingEngine:i,viewportId:e,renderingEngineId:t,FrameOfReferenceUID:r}}function so(e){const t=Dt();for(let i=0;i<t.length;i++){const n=t[i];if(n.getViewport(e))return oo(e,n.id)}}function lo(){const e=[];return Dt().forEach((t=>{t.getViewports().forEach((t=>{let{element:i}=t;e.push(ao(i))}))})),e}const co=Symbol("DefaultSettings"),ho=Symbol("RuntimeSettings"),uo=Symbol("ObjectSettingsMap"),go=Symbol("Dictionary");class mo{constructor(e){const t=Object.create(e instanceof mo&&go in e?e[go]:null);Object.seal(Object.defineProperty(this,go,{value:t}))}set(e,t){return fo(this[go],e,t,null)}get(e){return function(e,t){return e[t]}(this[go],e)}unset(e){return function(e,t){if(t.endsWith(".")){let i=0;const n=t,r=n.slice(0,-1),a=0===r.length;for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(a||t.startsWith(n)||t===r)&&(delete e[t],++i);return i>0}return delete e[t]}(this[go],e+"")}forEach(e){po(this[go],e)}extend(){return new mo(this)}import(e){vo(e)&&Object.keys(e).forEach((t=>{fo(this[go],t,e[t],null)}))}dump(){const e={};return po(this[go],((t,i)=>{void 0!==i&&wo(e,t,i)})),e}static assert(e){return e instanceof mo?e:mo.getRuntimeSettings()}static getDefaultSettings(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=mo[co];if(t instanceof mo||(t=new mo,mo[co]=t),e){const i={};return t.forEach((n=>{if(n.startsWith(e)){const r=n.split(`${e}.`)[1];i[r]=t.get(n)}})),i}return t}static getRuntimeSettings(){let e=mo[ho];return e instanceof mo||(e=new mo(mo.getDefaultSettings()),mo[ho]=e),e}static getObjectSettings(e,t){let i=null;if(e instanceof mo)i=e;else if("object"==typeof e&&null!==e){let n=mo[uo];n instanceof WeakMap||(n=new WeakMap,mo[uo]=n),i=n.get(e),i instanceof mo||(i=new mo(mo.assert(mo.getObjectSettings(t))),n.set(e,i))}return i}static extendRuntimeSettings(){return mo.getRuntimeSettings().extend()}}function po(e,t){for(const i in e)t(i,e[i])}function fo(e,t,i,n){return!!function(e){let t,i,n;if("string"!=typeof e||(t=e.length-1)<0)return!1;for(n=-1;(i=e.indexOf(".",n+1))>=0;){if(i-n<2||i===t)return!1;n=i}return!0}(t)&&(vo(i)?function(e,t,i,n){let r;if(n.has(i))return fo(e,t,null,n);n.add(i),r=0;for(const a in i)Object.prototype.hasOwnProperty.call(i,a)&&(fo(e,0===a.length?t:`${t}.${a}`,i[a],n)||++r);return n.delete(i),0===r}(e,t,i,n instanceof WeakSet?n:new WeakSet):(e[t]=i,!0))}function vo(e){if("object"==typeof e&&null!==e){const t=Object.getPrototypeOf(e);if(t===Object.prototype||null===t)return!0}return!1}function wo(e,t,i){const n=t.indexOf(".");if(n>=0){const r=t.slice(0,n);let a=e[r];if("object"!=typeof a||null===a){const t=a;a={},void 0!==t&&(a[""]=t),e[r]=a}wo(a,t.slice(n+1,t.length),i)}else e[t]=i}mo.getDefaultSettings().set("useCursors",!0),K(914);const Io=class{constructor(e){re(this,"id",void 0),re(this,"sizeInBytes",void 0),re(this,"points",void 0),re(this,"color",void 0),re(this,"type",void 0),re(this,"segmentIndex",void 0);const{points:t,type:i}=e.data;this.id=e.id,this.points=t,this.type=i,this.color=e.color,this.segmentIndex=e.segmentIndex,this.sizeInBytes=this._getSizeInBytes()}_getSizeInBytes(){let e=0;return e+=3*this.points.length,e}getPoints(){return this.points}getFlatPointsArray(){return this.points.map((e=>[...e])).flat()}getColor(){return this.color}getType(){return this.type}};class Co{constructor(e){re(this,"id",void 0),re(this,"sizeInBytes",void 0),re(this,"frameOfReferenceUID",void 0),re(this,"color",[200,0,0]),re(this,"segmentIndex",void 0),re(this,"polyData",void 0),re(this,"centroid",void 0),re(this,"contours",void 0),this.id=e.id,this.contours=[],this.color=e.color??this.color,this.frameOfReferenceUID=e.frameOfReferenceUID,this.segmentIndex=e.segmentIndex,this._createEachContour(e.data),this.sizeInBytes=this._getSizeInBytes()}_createEachContour(e){e.forEach((e=>{const{points:t,type:i,color:n}=e,r=new Io({id:`${this.id}-segment-${this.segmentIndex}`,data:{points:t,type:i,segmentIndex:this.segmentIndex,color:n??this.color},segmentIndex:this.segmentIndex,color:n??this.color});this.contours.push(r)})),this._updateContourSetCentroid()}_updateContourSetCentroid(){const e=this.getTotalNumberOfPoints(),t=this.getFlatPointsArray(),i=t.reduce(((e,t)=>[e[0]+t[0],e[1]+t[1],e[2]+t[2]]),[0,0,0]),n=[i[0]/e,i[1]/e,i[2]/e],r=t.reduce(((e,t)=>this._getDistance(n,t)<this._getDistance(n,e)?t:e),t[0]);this.centroid=r}_getSizeInBytes(){return this.contours.reduce(((e,t)=>e+t.sizeInBytes),0)}getCentroid(){return this.centroid}getSegmentIndex(){return this.segmentIndex}getColor(){return this.color}getContours(){return this.contours}getSizeInBytes(){return this.sizeInBytes}getFlatPointsArray(){return this.contours.map((e=>e.getPoints())).flat()}getNumberOfContours(){return this.contours.length}getTotalNumberOfPoints(){return this.contours.reduce(((e,t)=>e+t.getPoints().length),0)}getNumberOfPointsArray(){return this.contours.reduce(((e,t,i)=>(e[i]=this.getNumberOfPointsInAContour(i),e)),[])}getPointsInContour(e){return this.contours[e].getPoints()}getNumberOfPointsInAContour(e){return this.getPointsInContour(e).length}_getDistance(e,t){return Math.sqrt((e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2)}}async function Eo(e,t){let i=ue.getGeometry(e);if(i)return i;if(t.type===D.CONTOUR)i=function(e,t){!function(e){if(!e||0===e.data.length)throw new Error("Invalid contour set data, see publicContourSetData type for more info");if(!e.id)throw new Error("Invalid contour set data, each contour set must have an id");if(!e.data||!Array.isArray(e.data))throw new Error("Invalid contour set data, each contour set must have an array of contours");e.data.forEach((e=>{if(!e.points||!Array.isArray(e.points))throw new Error("Invalid contour set data, each contour must have an array of points");e.points.forEach((e=>{if(!e||!Array.isArray(e)||3!==e.length)throw new Error("Invalid contour set data, each point must be an array of length 3")}))}))}(t);const i=new Co({id:t.id,data:t.data,color:t.color,frameOfReferenceUID:t.frameOfReferenceUID,segmentIndex:t.segmentIndex??1});return{id:e,type:D.CONTOUR,data:i,sizeInBytes:i.getSizeInBytes()}}(e,t.geometryData);else{if(t.type!==D.SURFACE)throw new Error("Unknown geometry type, Only CONTOUR is supported");i=function(e,t){!function(e){const{data:t}=e;if(!t.points||!t.polys)throw new Error("Invalid surface data")}(t);const i=new io({id:t.id,color:t.color,frameOfReferenceUID:t.frameOfReferenceUID,data:{points:t.data.points,polys:t.data.polys}});return{id:e,type:D.SURFACE,data:i,sizeInBytes:i.getSizeInBytes()}}(e,t.geometryData)}const n={promise:Promise.resolve(i)};return await ue.putGeometryLoadObject(e,n),i}var yo=function(e){return e[e.None=0]="None",e[e.Capture=1]="Capture",e[e.Bubble=2]="Bubble",e}(yo||{});class Ro{constructor(e){re(this,"_target",void 0),re(this,"_eventListeners",new Map),re(this,"_children",new Map),this._target=e}get isEmpty(){return 0===this._eventListeners.size&&0===this._children.size}addEventListener(e,t,i){const n=e.indexOf(".");if(-1!==n){const r=e.substring(0,n);let a=this._children.get(r);a||(a=new Ro(this._target),this._children.set(r,a)),e=e.substring(n+1),a.addEventListener(e,t,i)}else this._addEventListener(e,t,i)}removeEventListener(e,t,i){const n=e.indexOf(".");if(-1!==n){const r=e.substring(0,n),a=this._children.get(r);if(!a)return;e=e.substring(n+1),a.removeEventListener(e,t,i),a.isEmpty&&this._children.delete(r)}else this._removeEventListener(e,t,i)}reset(){Array.from(this._children.entries()).forEach((e=>{let[t,i]=e;if(i.reset(),!i.isEmpty)throw new Error("Child is not empty and cannot be removed");this._children.delete(t)})),this._unregisterAllEvents()}_addEventListener(e,t,i){let n=this._eventListeners.get(e);n||(n=new Map,this._eventListeners.set(e,n));const r=i.capture?yo.Capture:yo.Bubble,a=n.get(t)??yo.None;a&r?console.warn("A listener is already registered for this phase"):(n.set(t,a|r),this._target.addEventListener(e,t,i))}_removeEventListener(e,t,i){const n=i.capture?yo.Capture:yo.Bubble,r=this._eventListeners.get(e);r&&((t?[t]:Array.from(r.keys())).forEach((t=>{const a=r.get(t)??yo.None;if(!(a&n))return;this._target.removeEventListener(e,t,i);const o=a^n;o===yo.None?r.delete(t):r.set(t,o)})),r.size||this._eventListeners.delete(e))}_unregisterAllListeners(e,t){Array.from(t.entries()).forEach((t=>{let[i,n]=t;for(let t=yo.Capture;n;t<<=1){if(!(n&t))continue;const r=t===yo.Capture;this.removeEventListener(e,i,{capture:r}),n^=t}}))}_unregisterAllEvents(){Array.from(this._eventListeners.entries()).forEach((e=>{let[t,i]=e;this._unregisterAllListeners(t,i)}))}}class Po{constructor(){re(this,"_targetsEventListeners",new Map)}addEventListener(e,t,i,n){let r=this._targetsEventListeners.get(e);r||(r=new Ro(e),this._targetsEventListeners.set(e,r)),r.addEventListener(t,i,n)}removeEventListener(e,t,i,n){const r=this._targetsEventListeners.get(e);r&&(r.removeEventListener(t,i,n),r.isEmpty&&this._targetsEventListeners.delete(e))}reset(){Array.from(this._targetsEventListeners.entries()).forEach((e=>{let[t,i]=e;i.reset(),this._targetsEventListeners.delete(t)}))}}function bo(e,t){const i=e.getSize();for(let n=0;n<i;n++){const i=[];e.getNodeValue(n,i),i[1]=i[1]*t,i[2]=i[2]*t,i[3]=i[3]*t,e.setNodeValue(n,i)}}const To=Symbol("LastRuntimeId"),Ao={},So=4294967295,Oo="-";function Do(e,t,i){return function(e,t,i){let n=e[t];n instanceof Array||(n=[0],Object.defineProperty(e,t,{value:n}));for(let e=!0,t=0;e&&t<n.length;++t){let r=0|n[t];r<i?(e=!1,r+=1):(r=0,t+1===n.length&&n.push(0)),n[t]=r}return n}(null!==e&&"object"==typeof e?e:Ao,To,("number"==typeof i&&i>0?i:So)>>>0).join("string"==typeof t?t:Oo)}const Mo={},xo={add:(e,t)=>{const i=de(e);Mo[i]=t},get:(e,t)=>{if("calibratedPixelSpacing"===e){const e=de(t);return Mo[e]}}};function _o(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e-5;return Math.abs(e[0]+t[0])<i&&Math.abs(e[1]+t[1])<i&&Math.abs(e[2]+t[2])<i}function Vo(e,t){return!(e[0]<0||e[0]>=t[0]||e[1]<0||e[1]>=t[1]||e[2]<0||e[2]>=t[2])}const ko=function(e,t){let i;i=t?[Ot(t)]:Dt();const n=[];return i.forEach((t=>{const i=e.getActors(),r=t.getVolumeViewports();for(const e of r){const t=e.getActors();t.length===i.length&&(i.every((e=>{let{uid:i}=e;return t.find((e=>i===e.uid))}))&&n.push(e))}})),n},Lo=function(e,t){const i=t?[Ot(t)]:Dt(),n=[];return i.forEach((t=>{const i=t.getVolumeViewports().filter((t=>t.hasVolumeId(e)));n.push(...i)})),n},No=e=>e.preScale.scaled&&e.preScale.scalingParameters.suvbw;function Uo(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"_thumbnails",r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{displayArea:{imageArea:[1,1]}};if(!(e&&e instanceof HTMLCanvasElement))throw new Error("canvas element is required");const a=!t.imageId,o=!a&&t,s=a&&t,l=`renderGPUViewport-${o.imageId||s.volumeId}`,c=document.createElement("div"),d=window.devicePixelRatio||1;r.displayArea||(r.displayArea={imageArea:[1,1]});const h=e.width,u=e.height;c.style.width=`${h/d+_i}px`,c.style.height=`${u/d+_i}px`,c.style.visibility="hidden",c.style.position="absolute",document.body.appendChild(c);const g=l.split(":").join("-");c.setAttribute("viewport-id-for-remove",g);const m=Vi(c),f=Ot(n)||new to(n);let v=f.getViewport(l);if(!v){const e={viewportId:l,type:a?I.ORTHOGRAPHIC:I.STACK,element:c,defaultOptions:{...r,suppressEvents:!0}};f.enableElement(e),v=f.getViewport(l)}return new Promise((n=>{let h=!1,{viewReference:u}=r;const w=t=>{if(h)return;if(u){const e=u;return u=null,v.setViewReference(e),void v.render()}e.getContext("2d").drawImage(m,0,0,m.width,m.height,0,0,e.width,e.height);const i=v.canvasToWorld([0,0]),r=v.canvasToWorld([m.width/d,0]),a=v.canvasToWorld([0,m.height/d]);h=!0,c.removeEventListener(p.IMAGE_RENDERED,w),setTimeout((()=>{f.disableElement(l),document.querySelectorAll(`[viewport-id-for-remove="${g}"]`).forEach((e=>{e.remove()}))}),0),n({origin:i,bottomLeft:a,topRight:r,thicknessMm:1})};c.addEventListener(p.IMAGE_RENDERED,w),a?v.setVolumes([s],!1,!0):v.renderImageObject(t),v.resetCamera(),"PT"!==i||No(o)||v.setProperties({voiRange:{lower:o.minPixelValue,upper:o.maxPixelValue}}),v.render()}))}function Fo(e,t,i,n,r){if(t.volumeId)throw new Error("Unsupported volume rendering for CPU");const a=t,o={canvas:e,viewport:Ma(e,a,i),image:a,renderingTools:{}};return o.transform=da(o),new Promise(((e,t)=>{Pa(o,!0),e(null)}))}function jo(e){const{canvas:t,imageId:i,viewReference:n,requestType:r=v.Thumbnail,priority:a=-5,renderingEngineId:o="_thumbnails",useCPURendering:s=!1,thumbnail:l=!1,imageAspect:c=!1,viewportOptions:d}=e,h=n?.volumeId,u=h&&!i,g=n&&d?{...d,viewReference:n}:d,m=s?Fo:Uo;return new Promise(((e,n)=>{function d(i,r){const{modality:a}=Ue("generalSeriesModule",r)||{},d=!u&&i,h=u&&i;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",h&&s&&n(new Error("CPU rendering of volume not supported")),m(t,i,a,o,g).then(e)}function p(e,t){console.error(e,t),n(e)}const{useNorm16Texture:f}=Ii().rendering,v={targetBuffer:{type:f?void 0:"Float32Array"},useRGBA:!!s,requestType:r};if(h){const e=ue.getVolume(h);e||n(new Error(`Volume id ${h} not found in cache`)),d(e,e.imageIds[0])}else qe.addRequest(function(e,t,i){return Ye(e,i).then((t=>{d.call(this,t,e)}),(t=>{p.call(this,t,e)}))}.bind(null,i,null,v),r,{imageId:i},a)}))}const Go=function(e,t){const i=Ue("imagePlaneModule",e);if(!i)throw new Error(`No imagePlaneModule found for imageId: ${e}`);const{columnCosines:n,rowCosines:r,imagePositionPatient:a}=i;let{columnPixelSpacing:o,rowPixelSpacing:s}=i;o||=1,s||=1;const l=se.vec3.create();se.vec3.scaleAndAdd(l,a,n,-o/2),se.vec3.scaleAndAdd(l,l,r,-s/2);const c=se.vec3.create();return se.vec3.sub(c,t,l),[se.vec3.dot(c,r)/s,se.vec3.dot(c,n)/o]};function Wo(e,t){const i=Ue("imagePlaneModule",e);if(!i)throw new Error(`No imagePlaneModule found for imageId: ${e}`);const{columnCosines:n,rowCosines:r,imagePositionPatient:a}=i;let{columnPixelSpacing:o,rowPixelSpacing:s}=i;o||=1,s||=1;const l=se.vec3.create();return se.vec3.scaleAndAdd(l,a,r,s*(t[0]-.5)),se.vec3.scaleAndAdd(l,l,n,o*(t[1]-.5)),Array.from(l)}function Bo(e,t){let i;i=t?[Mt(t)]:Dt();const n=[];return i.forEach((t=>{t.getViewports().forEach((t=>{t.hasImageURI(e)&&n.push(t)}))})),n}function qo(e,t){const i=function(e,t){const i=t.getImageIds(),n=t.getCurrentImageIdIndex();if(0===i.length)return null;const r=t=>{const i=function(e){const t=Ue("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:i,columnCosines:n,imagePositionPatient:r}=t,a=se.vec3.set(se.vec3.create(),...i),o=se.vec3.set(se.vec3.create(),...n);return{rowCosines:i,columnCosines:n,imagePositionPatient:r,planeNormal:se.vec3.cross(se.vec3.create(),a,o)}}(t);return i?Dr(Sr(i.planeNormal,i.imagePositionPatient),e):null},a={distance:r(i[n])??1/0,index:n},o=i.slice(n+1);for(let e=0;e<o.length;e++){const t=r(o[e]);if(null!==t){if(!(t<=a.distance))break;a.distance=t,a.index=e+n+1}}const s=i.slice(0,n);for(let e=s.length-1;e>=0;e--){const t=r(s[e]);if(null!==t&&t!==a.distance){if(!(t<a.distance))break;a.distance=t,a.index=e}}return a.distance===1/0?null:a}(e,t);return i?i.index:null}function zo(e){const{width:t,height:i}=e.getCanvas(),{sliceToIndexMatrix:n,indexToSliceMatrix:r}=e.getSliceViewInfo(),a=Br(e,[0,0]),o=Br(e,[t-1,0]),s=Br(e,[0,i-1]),l=se.vec3.sub(se.vec3.create(),o,a),c=se.vec3.sub(se.vec3.create(),s,a),d=se.vec3.cross(se.vec3.create(),l,c);se.vec3.normalize(l,l),se.vec3.normalize(c,c),se.vec3.normalize(d,d);const h=Math.max(Math.abs(l[0]),Math.abs(l[1]),Math.abs(l[2])),u=Math.max(Math.abs(c[0]),Math.abs(c[1]),Math.abs(c[2]));if(!se.glMatrix.equals(1,h)||!se.glMatrix.equals(1,u))throw new Error("Livewire is not available for rotate/oblique viewports");const{voxelManager:g}=e.getImageData(),m=e.getSliceViewInfo(),p=g.getSliceData(m);return{width:m.width,height:m.height,scalarData:p,sliceToIndexMatrix:n,indexToSliceMatrix:r}}const Ho={},$o={add:(e,t)=>{const[i,n]=e,r=`${i}_${n}`;Ho[r]||(Ho[r]={}),Ho[r]=t},get:(e,t,i)=>{if("spatialRegistrationModule"!==e)return;const n=`${t}_${i}`;if(Ho[n])return Ho[n];const r=`${i}_${t}`;return Ho[r]?se.mat4.invert(se.mat4.create(),Ho[r]):void 0}};ke($o.get.bind($o));const Ko=$o,Yo=function(e,t){const i=e.getSliceIndex(),n=t.getSliceIndex(),r=Ue("imagePlaneModule",i.toString()),a=Ue("imagePlaneModule",n.toString());if(!r||!a)return void console.log("Viewport spatial registration requires image plane module");const{imageOrientationPatient:o}=a;if(!r.imageOrientationPatient.every(((e,t)=>Math.abs(e-o[t])<.05)))return void console.log("Viewport spatial registration only supported for same orientation (hence translation only) for now",r?.imageOrientationPatient,a?.imageOrientationPatient);const s=r.imagePositionPatient,l=a.imagePositionPatient,c=se.vec3.subtract(se.vec3.create(),s,l),d=se.mat4.fromTranslation(se.mat4.create(),c);Ko.add([e.id,t.id],d)};function Zo(e){const{imageData:t,dimensions:i}=e.getImageData(),{canvas:n}=e,r=window.devicePixelRatio,a=[n.width/r,0],o=[n.width/r,n.height/r],s=[0,n.height/r],l=e.canvasToWorld([0,0]),c=e.canvasToWorld(a),d=e.canvasToWorld(o),h=e.canvasToWorld(s),u=t.worldToIndex(l),g=t.worldToIndex(c),m=t.worldToIndex(d),p=t.worldToIndex(h);return function(e){let{dimensions:t,imageData:i,topLeftImage:n,topRightImage:r,bottomRightImage:a,bottomLeftImage:o,topLeftWorld:s,topRightWorld:l,bottomRightWorld:c,bottomLeftWorld:d}=e;const h=Jo(n,t)?s:i.indexToWorld([0,0,0]),u=Jo(r,t)?l:i.indexToWorld([t[0]-1,0,0]),g=Jo(a,t)?c:i.indexToWorld([t[0]-1,t[1]-1,0]);return[h,u,Jo(o,t)?d:i.indexToWorld([0,t[1]-1,0]),g]}({dimensions:i,imageData:t,topLeftImage:u,topRightImage:g,bottomRightImage:m,bottomLeftImage:p,topLeftWorld:l,topRightWorld:c,bottomRightWorld:d,bottomLeftWorld:h})}function Jo(e,t){return e[0]>0||e[0]<t[0]-1||e[1]>0||e[1]<t[1]-1||e[2]>0||e[2]<t[2]-1}class Xo{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};re(this,"kIndex",void 0),re(this,"sources",void 0),re(this,"data",void 0),re(this,"_dimensions",3),re(this,"_length",0),re(this,"_byteSize",4),re(this,"growSize",128),re(this,"array",void 0);const{initialSize:t=1024,dimensions:i=3,growSize:n=128}=e,r=t*i;this.growSize=n,this.array=new ArrayBuffer(r*this._byteSize),this.data=new Float32Array(this.array),this._dimensions=i}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 i=this._dimensions*e;for(let e=0;e<this._dimensions;e++)t.push(this.data[e+i]);return t}grow(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.growSize;if(this.dimensionLength+e*this._dimensions<=this.data.length)return;const i=this.data.length+t,n=new ArrayBuffer(i*this._dimensions*this._byteSize),r=new Float32Array(n);r.set(this.data),this.data=r,this.array=n}reverse(){const e=Math.floor(this._length/2);for(let t=0;t<e;t++){const e=t*this._dimensions,i=(this._length-1-t)*this._dimensions;for(let t=0;t<this._dimensions;t++){const n=this.data[e+t];this.data[e+t]=this.data[i+t],this.data[i+t]=n}}}push(e){this.grow(1);const t=this.length*this._dimensions;for(let i=0;i<this._dimensions;i++)this.data[i+t]=e[i];this._length++}map(e){const t=[];for(let i=0;i<this._length;i++)t.push(e(this.getPoint(i),i));return t}get points(){return this.map((e=>e))}toXYZ(){const e={x:[],y:[]};this._dimensions>=3&&(e.z=[]);const{x:t,y:i,z:n}=e;return this.forEach((e=>{t.push(e[0]),i.push(e[1]),n&&n.push(e[2])})),e}static fromXYZ(e){let{x:t,y:i,z:n}=e;const r=Xo.create3(t.length);let a=0;for(let e=0;e<t.length;e++)r.data[a++]=t[e],r.data[a++]=i[e],r.data[a++]=n?n[e]:0;return r._length=t.length,r}subselect(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const i=new Xo({initialSize:e,dimensions:this._dimensions});for(let n=0;n<e;n++){const r=(t+Math.floor(this.length*n/e))%this.length;i.push(this.getPoint(r))}return i}static create3(){return new Xo({initialSize:arguments.length>0&&void 0!==arguments[0]?arguments[0]:128,dimensions:3})}static create2(){return new Xo({initialSize:arguments.length>0&&void 0!==arguments[0]?arguments[0]:128,dimensions:2})}}function Qo(e){const t=Ue("modalityLutModule",e)||{},i=Ue("generalSeriesModule",e)||{},{modality:n}=i,r={rescaleSlope:t.rescaleSlope||1,rescaleIntercept:t.rescaleIntercept??0,modality:n},a=Ue("scalingModule",e)||{};return{...r,..."PT"===n&&{suvbw:a.suvbw,suvbsa:a.suvbsa,suvlbm:a.suvlbm}}}const es=function(e){const t=ao(e);if(!t)return;const{viewport:i}=t;if(!(i instanceof Ba))throw new Error(`An image can only be fetched for a stack viewport and not for a viewport of type: ${i.type}`);return i.getCornerstoneImage()};function ts(e,t){const{imagePositionPatient:i,imageOrientationPatient:n}=Ue("imagePlaneModule",e[0]);if(!t){const e=se.vec3.fromValues(n[0],n[1],n[2]),i=se.vec3.fromValues(n[3],n[4],n[5]);t=se.vec3.create(),se.vec3.cross(t,e,i)}const r=se.vec3.create(),a="wadouri"===e[0].split(":")[0];let o,s;function l(e){const{imagePositionPatient:n}=Ue("imagePlaneModule",e),r=se.vec3.create();return se.vec3.sub(r,i,n),se.vec3.dot(r,t)}if(se.vec3.set(r,i[0],i[1],i[2]),a){const n=[e[0],e[Math.floor(e.length/2)]];o=e,l(n[0])-l(n[1])<0&&o.reverse();const r=Ue("imagePlaneModule",n[1]);if(!r)throw new Error("Incomplete metadata required for volume construction.");const a=se.vec3.create();se.vec3.sub(a,i,r.imagePositionPatient);const c=se.vec3.dot(a,t);s=Math.abs(c)/Math.floor(e.length/2)}else{const t=e.map((e=>({distance:l(e),imageId:e})));t.sort(((e,t)=>t.distance-e.distance)),o=t.map((e=>e.imageId));const i=t.length;s=Math.abs(t[i-1].distance-t[0].distance)/(i-1)}const{imagePositionPatient:c,sliceThickness:d,spacingBetweenSlices:h}=Ue("imagePlaneModule",o[0]),{strictZSpacingForVolumeViewport:u}=Ii().rendering;return 0!==s||u||(d&&h?(console.log("Could not calculate zSpacing. Using spacingBetweenSlices"),s=h):d?(console.log("Could not calculate zSpacing and no spacingBetweenSlices. Using sliceThickness"),s=d):(console.log("Could not calculate zSpacing. The VolumeViewport visualization is compromised. Setting zSpacing to 1 to render"),s=1)),{zSpacing:s,origin:c,sortedImageIds:o}}function is(e){const t=e[0],{pixelRepresentation:i,bitsAllocated:n,bitsStored:r,highBit:a,photometricInterpretation:o,samplesPerPixel:s}=Ue("imagePixelModule",t),l=[],c=Ue("voiLutModule",t);let d;if(c){const{windowWidth:e,windowCenter:t}=c;if(d=c?.voiLUTFunction,Array.isArray(e))for(let i=0;i<e.length;i++)l.push({windowWidth:e[i],windowCenter:t[i]});else l.push({windowWidth:e,windowCenter:t})}else l.push({windowWidth:void 0,windowCenter:void 0});const{modality:h,seriesInstanceUID:u}=Ue("generalSeriesModule",t),{imageOrientationPatient:g,pixelSpacing:m,frameOfReferenceUID:p,columns:f,rows:v}=Ue("imagePlaneModule",t);return{BitsAllocated:n,BitsStored:r,SamplesPerPixel:s,HighBit:a,PhotometricInterpretation:o,PixelRepresentation:i,Modality:h,ImageOrientationPatient:g,PixelSpacing:m,FrameOfReferenceUID:p,Columns:f,Rows:v,voiLut:l,VOILUTFunction:d,SeriesInstanceUID:u}}function ns(e){const t=e[0],{modality:i,seriesInstanceUID:n}=Ue("generalSeriesModule",t),{imageOrientationPatient:r,pixelSpacing:a,frameOfReferenceUID:o,columns:s,rows:l}=Ue("imagePlaneModule",t),c={modality:i,imageOrientationPatient:r,pixelSpacing:a,frameOfReferenceUID:o,columns:s,rows:l,seriesInstanceUID:n},d=e.every((e=>{const{modality:t,seriesInstanceUID:i}=Ue("generalSeriesModule",e),{imageOrientationPatient:n,pixelSpacing:r,columns:a,rows:o}=Ue("imagePlaneModule",e);return i===c.seriesInstanceUID&&t===c.modality&&a===c.columns&&o===c.rows&&ve(n,c.imageOrientationPatient)&&ve(r,c.pixelSpacing)}));return d}const rs=new Set(["1.2.840.10008.1.2.4.100","1.2.840.10008.1.2.4.100.1","1.2.840.10008.1.2.4.101","1.2.840.10008.1.2.4.101.1","1.2.840.10008.1.2.4.102","1.2.840.10008.1.2.4.102.1","1.2.840.10008.1.2.4.103","1.2.840.10008.1.2.4.103.1","1.2.840.10008.1.2.4.104","1.2.840.10008.1.2.4.104.1","1.2.840.10008.1.2.4.105","1.2.840.10008.1.2.4.105.1","1.2.840.10008.1.2.4.106","1.2.840.10008.1.2.4.106.1","1.2.840.10008.1.2.4.107","1.2.840.10008.1.2.4.108"]);function as(e){return!!e&&(Array.isArray(e)?e:[e]).find((e=>rs.has(e)))}const os=e=>Object.values(e).some((e=>"number"==typeof e&&!Number.isInteger(e)));function ss(e,t){const i=is(e),{ImageOrientationPatient:n,PixelSpacing:r,Columns:a,Rows:o}=i,s=se.vec3.fromValues(n[0],n[1],n[2]),l=se.vec3.fromValues(n[3],n[4],n[5]),c=se.vec3.create();se.vec3.cross(c,s,l);const{zSpacing:d,origin:h,sortedImageIds:u}=ts(e,c),g=e.length,m=[r[1],r[0],d],p=[a,o,g],f=[...s,...l,...c];return{dimensions:p,spacing:m,origin:h,dataType:ls(u,i),direction:f,metadata:i,imageIds:u,volumeId:t,voxelManager:null,numberOfComponents:"RGB"===i.PhotometricInterpretation?3:1}}function ls(e,t){const{BitsAllocated:i,PixelRepresentation:n,PhotometricInterpretation:r}=t,a=1===n,o=Qo(e[Math.floor(e.length/2)]),s=o.rescaleIntercept<0||o.rescaleSlope<0,l=os(o),c=pi();switch(i){case 8:if(a)throw new Error("8 Bit signed images are not yet supported by this plugin.");return"Uint8Array";case 16:return c&&l?"Float32Array":a||s?"Int16Array":a||s?"Float32Array":"Uint16Array";case 24:return"Uint8Array";case 32:return"Float32Array";default:throw new Error(`Bits allocated of ${i} is not defined to generate scalarData for the volume.`)}}const cs=async function(e,t,i){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];i.forEach((t=>{const i=e.getViewport(t);if(!i)throw new Error(`Viewport with Id ${t} does not exist`);if(!(i instanceof Wr))throw new Error("setVolumesForViewports only supports VolumeViewport and VolumeViewport3D")}));const a=i.map((async i=>{const a=e.getViewport(i);await a.setVolumes(t,n,r)}));await Promise.all(a)};async function ds(e){let{viewport:t,options:i}=e;const n=t.getRenderingEngine();let{volumeId:r}=i;1===r.split(":").length&&(r=`${It()}:${r}`);const{id:a,element:o}=t,s=i.viewportId||a,l=t.getImageIds(),c=t.getViewReference();n.enableElement({viewportId:s,type:I.ORTHOGRAPHIC,element:o,defaultOptions:{background:i.background,orientation:i.orientation}}),(await ut(r,{imageIds:l})).load();const d=n.getViewport(s);await cs(n,[{volumeId:r}],[s]);const h=()=>{d.setViewReference(c),d.render(),o.removeEventListener(p.VOLUME_VIEWPORT_NEW_VOLUME,h)};return o.addEventListener(p.VOLUME_VIEWPORT_NEW_VOLUME,h),d.render(),d}async function hs(e){let{viewport:t,options:i}=e;const n=t,{id:r,element:a}=n,o=t.getRenderingEngine(),{background:s}=i,l=i.viewportId||r,c=n.getDefaultActor(),{uid:d}=c,h=ue.getVolume(d);if(!(h instanceof Me))throw new Error("Currently, you cannot decache a volume that is not an ImageVolume. So, unfortunately, volumes such as nifti (which are basic Volume, without imageIds) cannot be decached.");const u={viewportId:l,type:I.STACK,element:a,defaultOptions:{background:s}},g=n.getViewReference();o.enableElement(u);const m=o.getViewport(l);return await m.setStack(h.imageIds),m.setViewReference(g),m.render(),m}function us(e){return Math.round(e/J)*J}const gs=function e(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(Array.isArray(t))return t.map((t=>e(t,i))).join(", ");if(null==t||""===t)return"NaN";t=Number(t);const n=Math.abs(t);if(n<1e-4)return`${t}`;const r=n>=100?i-2:n>=10?i-1:n>=1?i:n>=.1?i+1:n>=.01?i+2:n>=.001?i+3:i+4;return t.toFixed(r)};function ms(e,t,i){const n=e.length===t*i*4,r=e.length===t*i*3;if(n||r){const r=new Float32Array(t*i);let a=0,o=0;const s=n?4:3;for(let n=0;n<t;n++)for(let t=0;t<i;t++){const t=e[a],i=e[a+1],n=e[a+2];r[o]=(t+i+n)/3,a+=s,o++}return r}return e}const ps=function(e){if(e instanceof zr){const t=e.getDefaultActor().uid;return ue.getVolume(t).imageIds}if(e.getImageIds)return e.getImageIds()};function fs(e,t){const i=[...e];return t>=i.length?(vs(i),i):(vs(i),i.slice(0,t))}function vs(e){for(let t=e.length-1;t>0;t--){const i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}function ws(e){const t=e.toString(16);return 1==t.length?"0"+t:t}function Is(e,t,i){return"#"+ws(e)+ws(t)+ws(i)}function Cs(e){const t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}const Es=(e,t)=>function(e,t,i){if(!i)throw new Error("getVolume is required, use the utilities export instead ");if(e.modality)return e.modality;if(e.setVolumes){if(!(t=t??e.getDefaultActor().uid)||!i)return;return i(t).metadata.Modality}throw new Error("Invalid viewport type")}(e,t,ue.getVolume),ys=async function(e,t,i){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];for(const t of i){const i=e.getViewport(t);if(!i)throw new Error(`Viewport with Id ${t} does not exist`);if(!(i instanceof Wr))return void console.warn(`Viewport with Id ${t} is not a BaseVolumeViewport. Cannot add volume to this viewport.`)}const a=i.map((async i=>{const a=e.getViewport(i);await a.addVolumes(t,n,r)}));await Promise.all(a)},Rs=async function(e,t,i){for(const t of i){const i=e.getStackViewport(t);if(!i)throw new Error(`Viewport with Id ${t} does not exist`);if(!i.addImages)return void console.warn(`Viewport with Id ${t} does not have addImages. Cannot add image segmentation to this viewport.`)}const n=i.map((async i=>{e.getStackViewport(i).addImages(t)}));await Promise.all(n)}})(),Y})()));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@kitware/vtk.js/Rendering/Core/VolumeMapper/Constants"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps"),require("@kitware/vtk.js/Common/DataModel/PiecewiseFunction"),require("gl-matrix"),require("@kitware/vtk.js/Common/Core/MatrixBuilder"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Common/DataModel/Plane"),require("@kitware/vtk.js/macros"),require("@kitware/vtk.js/Rendering/Core/Camera"),require("@kitware/vtk.js/Rendering/Profiles/Volume"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Rendering/OpenGL/Texture"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Rendering/Core/Volume"),require("@kitware/vtk.js/Rendering/Core/VolumeMapper"),require("@kitware/vtk.js/Rendering/Core/ImageMapper"),require("@kitware/vtk.js/Rendering/Core/ImageSlice"),require("@kitware/vtk.js/Rendering/Core/Renderer"),require("@kitware/vtk.js/Rendering/Core/RenderWindow"),require("@kitware/vtk.js/Rendering/Core/RenderWindowInteractor"),require("@kitware/vtk.js/Common/Core/Points"),require("@kitware/vtk.js/Common/DataModel/PolyData"),require("@kitware/vtk.js/Rendering/Core/Actor"),require("@kitware/vtk.js/Rendering/Core/Mapper"),require("@kitware/vtk.js/Rendering/OpenGL/RenderWindow"),require("@kitware/vtk.js/Rendering/OpenGL/Actor"),require("@kitware/vtk.js/Rendering/OpenGL/Actor2D"),require("@kitware/vtk.js/Rendering/OpenGL/Camera"),require("@kitware/vtk.js/Rendering/OpenGL/Glyph3DMapper"),require("@kitware/vtk.js/Rendering/OpenGL/ImageMapper"),require("@kitware/vtk.js/Rendering/OpenGL/ImageSlice"),require("@kitware/vtk.js/Rendering/OpenGL/PixelSpaceCallbackMapper"),require("@kitware/vtk.js/Rendering/OpenGL/PolyDataMapper"),require("@kitware/vtk.js/Rendering/OpenGL/Renderer"),require("@kitware/vtk.js/Rendering/OpenGL/Skybox"),require("@kitware/vtk.js/Rendering/OpenGL/SphereMapper"),require("@kitware/vtk.js/Rendering/OpenGL/StickMapper"),require("@kitware/vtk.js/Rendering/OpenGL/Volume"),require("@kitware/vtk.js/Rendering/OpenGL/VolumeMapper"),require("@kitware/vtk.js/Rendering/SceneGraph/ViewNodeFactory"),require("@kitware/vtk.js/Rendering/OpenGL/Texture/Constants"),require("@kitware/vtk.js/Common/Core/DataArray/Constants"),require("@kitware/vtk.js/Rendering/OpenGL/RenderWindow/resourceSharingHelper"),require("@kitware/vtk.js/Rendering/Core/Property/Constants"),require("@kitware/vtk.js/Rendering/Profiles/Geometry")):"function"==typeof define&&define.amd?define(["@kitware/vtk.js/Rendering/Core/VolumeMapper/Constants","@kitware/vtk.js/Rendering/Core/ColorTransferFunction","@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps","@kitware/vtk.js/Common/DataModel/PiecewiseFunction","gl-matrix","@kitware/vtk.js/Common/Core/MatrixBuilder","@kitware/vtk.js/Common/Core/Math","@kitware/vtk.js/Common/DataModel/Plane","@kitware/vtk.js/macros","@kitware/vtk.js/Rendering/Core/Camera","@kitware/vtk.js/Rendering/Profiles/Volume","@kitware/vtk.js/Common/DataModel/ImageData","@kitware/vtk.js/Rendering/OpenGL/Texture","@kitware/vtk.js/Common/Core/DataArray","@kitware/vtk.js/Rendering/Core/Volume","@kitware/vtk.js/Rendering/Core/VolumeMapper","@kitware/vtk.js/Rendering/Core/ImageMapper","@kitware/vtk.js/Rendering/Core/ImageSlice","@kitware/vtk.js/Rendering/Core/Renderer","@kitware/vtk.js/Rendering/Core/RenderWindow","@kitware/vtk.js/Rendering/Core/RenderWindowInteractor","@kitware/vtk.js/Common/Core/Points","@kitware/vtk.js/Common/DataModel/PolyData","@kitware/vtk.js/Rendering/Core/Actor","@kitware/vtk.js/Rendering/Core/Mapper","@kitware/vtk.js/Rendering/OpenGL/RenderWindow","@kitware/vtk.js/Rendering/OpenGL/Actor","@kitware/vtk.js/Rendering/OpenGL/Actor2D","@kitware/vtk.js/Rendering/OpenGL/Camera","@kitware/vtk.js/Rendering/OpenGL/Glyph3DMapper","@kitware/vtk.js/Rendering/OpenGL/ImageMapper","@kitware/vtk.js/Rendering/OpenGL/ImageSlice","@kitware/vtk.js/Rendering/OpenGL/PixelSpaceCallbackMapper","@kitware/vtk.js/Rendering/OpenGL/PolyDataMapper","@kitware/vtk.js/Rendering/OpenGL/Renderer","@kitware/vtk.js/Rendering/OpenGL/Skybox","@kitware/vtk.js/Rendering/OpenGL/SphereMapper","@kitware/vtk.js/Rendering/OpenGL/StickMapper","@kitware/vtk.js/Rendering/OpenGL/Volume","@kitware/vtk.js/Rendering/OpenGL/VolumeMapper","@kitware/vtk.js/Rendering/SceneGraph/ViewNodeFactory","@kitware/vtk.js/Rendering/OpenGL/Texture/Constants","@kitware/vtk.js/Common/Core/DataArray/Constants","@kitware/vtk.js/Rendering/OpenGL/RenderWindow/resourceSharingHelper","@kitware/vtk.js/Rendering/Core/Property/Constants","@kitware/vtk.js/Rendering/Profiles/Geometry"],t):"object"==typeof exports?exports.cornerstone3D=t(require("@kitware/vtk.js/Rendering/Core/VolumeMapper/Constants"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps"),require("@kitware/vtk.js/Common/DataModel/PiecewiseFunction"),require("gl-matrix"),require("@kitware/vtk.js/Common/Core/MatrixBuilder"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Common/DataModel/Plane"),require("@kitware/vtk.js/macros"),require("@kitware/vtk.js/Rendering/Core/Camera"),require("@kitware/vtk.js/Rendering/Profiles/Volume"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Rendering/OpenGL/Texture"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Rendering/Core/Volume"),require("@kitware/vtk.js/Rendering/Core/VolumeMapper"),require("@kitware/vtk.js/Rendering/Core/ImageMapper"),require("@kitware/vtk.js/Rendering/Core/ImageSlice"),require("@kitware/vtk.js/Rendering/Core/Renderer"),require("@kitware/vtk.js/Rendering/Core/RenderWindow"),require("@kitware/vtk.js/Rendering/Core/RenderWindowInteractor"),require("@kitware/vtk.js/Common/Core/Points"),require("@kitware/vtk.js/Common/DataModel/PolyData"),require("@kitware/vtk.js/Rendering/Core/Actor"),require("@kitware/vtk.js/Rendering/Core/Mapper"),require("@kitware/vtk.js/Rendering/OpenGL/RenderWindow"),require("@kitware/vtk.js/Rendering/OpenGL/Actor"),require("@kitware/vtk.js/Rendering/OpenGL/Actor2D"),require("@kitware/vtk.js/Rendering/OpenGL/Camera"),require("@kitware/vtk.js/Rendering/OpenGL/Glyph3DMapper"),require("@kitware/vtk.js/Rendering/OpenGL/ImageMapper"),require("@kitware/vtk.js/Rendering/OpenGL/ImageSlice"),require("@kitware/vtk.js/Rendering/OpenGL/PixelSpaceCallbackMapper"),require("@kitware/vtk.js/Rendering/OpenGL/PolyDataMapper"),require("@kitware/vtk.js/Rendering/OpenGL/Renderer"),require("@kitware/vtk.js/Rendering/OpenGL/Skybox"),require("@kitware/vtk.js/Rendering/OpenGL/SphereMapper"),require("@kitware/vtk.js/Rendering/OpenGL/StickMapper"),require("@kitware/vtk.js/Rendering/OpenGL/Volume"),require("@kitware/vtk.js/Rendering/OpenGL/VolumeMapper"),require("@kitware/vtk.js/Rendering/SceneGraph/ViewNodeFactory"),require("@kitware/vtk.js/Rendering/OpenGL/Texture/Constants"),require("@kitware/vtk.js/Common/Core/DataArray/Constants"),require("@kitware/vtk.js/Rendering/OpenGL/RenderWindow/resourceSharingHelper"),require("@kitware/vtk.js/Rendering/Core/Property/Constants"),require("@kitware/vtk.js/Rendering/Profiles/Geometry")):e.cornerstone3D=t(e["@kitware/vtk.js/Rendering/Core/VolumeMapper/Constants"],e["@kitware/vtk.js/Rendering/Core/ColorTransferFunction"],e["@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps"],e["@kitware/vtk.js/Common/DataModel/PiecewiseFunction"],e.window,e["@kitware/vtk.js/Common/Core/MatrixBuilder"],e["@kitware/vtk.js/Common/Core/Math"],e["@kitware/vtk.js/Common/DataModel/Plane"],e["@kitware/vtk.js/macros"],e["@kitware/vtk.js/Rendering/Core/Camera"],e["@kitware/vtk.js/Rendering/Profiles/Volume"],e["@kitware/vtk.js/Common/DataModel/ImageData"],e["@kitware/vtk.js/Rendering/OpenGL/Texture"],e["@kitware/vtk.js/Common/Core/DataArray"],e["@kitware/vtk.js/Rendering/Core/Volume"],e["@kitware/vtk.js/Rendering/Core/VolumeMapper"],e["@kitware/vtk.js/Rendering/Core/ImageMapper"],e["@kitware/vtk.js/Rendering/Core/ImageSlice"],e["@kitware/vtk.js/Rendering/Core/Renderer"],e["@kitware/vtk.js/Rendering/Core/RenderWindow"],e["@kitware/vtk.js/Rendering/Core/RenderWindowInteractor"],e["@kitware/vtk.js/Common/Core/Points"],e["@kitware/vtk.js/Common/DataModel/PolyData"],e["@kitware/vtk.js/Rendering/Core/Actor"],e["@kitware/vtk.js/Rendering/Core/Mapper"],e["@kitware/vtk.js/Rendering/OpenGL/RenderWindow"],e["@kitware/vtk.js/Rendering/OpenGL/Actor"],e["@kitware/vtk.js/Rendering/OpenGL/Actor2D"],e["@kitware/vtk.js/Rendering/OpenGL/Camera"],e["@kitware/vtk.js/Rendering/OpenGL/Glyph3DMapper"],e["@kitware/vtk.js/Rendering/OpenGL/ImageMapper"],e["@kitware/vtk.js/Rendering/OpenGL/ImageSlice"],e["@kitware/vtk.js/Rendering/OpenGL/PixelSpaceCallbackMapper"],e["@kitware/vtk.js/Rendering/OpenGL/PolyDataMapper"],e["@kitware/vtk.js/Rendering/OpenGL/Renderer"],e["@kitware/vtk.js/Rendering/OpenGL/Skybox"],e["@kitware/vtk.js/Rendering/OpenGL/SphereMapper"],e["@kitware/vtk.js/Rendering/OpenGL/StickMapper"],e["@kitware/vtk.js/Rendering/OpenGL/Volume"],e["@kitware/vtk.js/Rendering/OpenGL/VolumeMapper"],e["@kitware/vtk.js/Rendering/SceneGraph/ViewNodeFactory"],e["@kitware/vtk.js/Rendering/OpenGL/Texture/Constants"],e["@kitware/vtk.js/Common/Core/DataArray/Constants"],e["@kitware/vtk.js/Rendering/OpenGL/RenderWindow/resourceSharingHelper"],e["@kitware/vtk.js/Rendering/Core/Property/Constants"],e["@kitware/vtk.js/Rendering/Profiles/Geometry"])}(self,((e,t,i,n,r,a,s,o,l,c,d,h,u,g,m,p,f,v,I,w,C,E,y,R,P,b,T,A,S,O,D,x,M,_,V,k,L,N,F,U,G,j,W,B,q,z)=>(()=>{"use strict";var H={785:e=>{e.exports=g},948:e=>{e.exports=W},807:e=>{e.exports=s},847:e=>{e.exports=a},348:e=>{e.exports=E},283:e=>{e.exports=h},441:e=>{e.exports=n},864:e=>{e.exports=o},70:e=>{e.exports=y},474:e=>{e.exports=R},821:e=>{e.exports=c},795:e=>{e.exports=t},38:e=>{e.exports=i},896:e=>{e.exports=f},861:e=>{e.exports=v},610:e=>{e.exports=P},478:e=>{e.exports=q},329:e=>{e.exports=w},673:e=>{e.exports=C},281:e=>{e.exports=I},739:e=>{e.exports=m},9:e=>{e.exports=p},468:t=>{t.exports=e},643:e=>{e.exports=T},128:e=>{e.exports=A},664:e=>{e.exports=S},973:e=>{e.exports=O},394:e=>{e.exports=D},582:e=>{e.exports=x},482:e=>{e.exports=M},343:e=>{e.exports=_},21:e=>{e.exports=b},411:e=>{e.exports=B},363:e=>{e.exports=V},982:e=>{e.exports=k},130:e=>{e.exports=L},298:e=>{e.exports=N},953:e=>{e.exports=u},395:e=>{e.exports=j},398:e=>{e.exports=F},388:e=>{e.exports=U},914:e=>{e.exports=z},215:e=>{e.exports=d},120:e=>{e.exports=G},197:e=>{e.exports=l},976:e=>{e.exports=r}},$={};function K(e){var t=$[e];if(void 0!==t)return t.exports;var i=$[e]={exports:{}};return H[e](i,i.exports,K),i.exports}K.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return K.d(t,{a:t}),t},K.d=(e,t)=>{for(var i in t)K.o(t,i)&&!K.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},K.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),K.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var Y={};return(()=>{K.r(Y),K.d(Y,{BaseVolumeViewport:()=>Nr,CONSTANTS:()=>i,EVENTS:()=>p,Enums:()=>t,ImageVolume:()=>In,ProgressiveRetrieveImages:()=>La,RenderingEngine:()=>Qa,Settings:()=>hs,StackViewport:()=>Na,Surface:()=>es,VideoViewport:()=>$a,Viewport:()=>Ar,VolumeViewport:()=>Gr,VolumeViewport3D:()=>Fa,WSIViewport:()=>Za,addImageSlicesToViewports:()=>Fo,addVolumesToViewports:()=>No,cache:()=>Ct,canRenderFloatTextures:()=>Mi,cornerstoneStreamingDynamicImageVolumeLoader:()=>Lo,cornerstoneStreamingImageVolumeLoader:()=>Vo,createVolumeActor:()=>hr,createVolumeMapper:()=>or,eventTarget:()=>ae,geometryLoader:()=>d,getConfiguration:()=>Li,getEnabledElement:()=>ns,getEnabledElementByIds:()=>rs,getEnabledElementByViewportId:()=>as,getEnabledElements:()=>ss,getOrCreateCanvas:()=>Wa,getRenderingEngine:()=>zt,getRenderingEngines:()=>Ht,getShouldUseCPURendering:()=>Vi,getWebWorkerManager:()=>Ui,imageLoadPoolManager:()=>Pn,imageLoader:()=>o,imageRetrievalPoolManager:()=>is,init:()=>Oi,isCornerstoneInitialized:()=>ki,metaData:()=>n,peerImport:()=>Gi,registerImageLoader:()=>Nn,requestPoolManager:()=>Pn,resetUseCPURendering:()=>_i,setConfiguration:()=>Ni,setPreferSizeOverAccuracy:()=>xi,setUseCPURendering:()=>Di,setVolumesForViewports:()=>so,triggerEvent:()=>oe,utilities:()=>g,volumeLoader:()=>l});var e={};K.r(e),K.d(e,{SpeedUnit:()=>W});var t={};K.r(t),K.d(t,{BlendModes:()=>T,CalibrationTypes:()=>N,ContourType:()=>M,DynamicOperatorType:()=>L,Events:()=>p,GenerateImageType:()=>z,GeometryType:()=>D,ImageQualityStatus:()=>j,InterpolationType:()=>E,MetadataModules:()=>q,OrientationAxis:()=>S,RequestType:()=>v,VOILUTFunctionType:()=>V,VideoEnums:()=>e,ViewportStatus:()=>U,ViewportType:()=>w});var i={};K.r(i),K.d(i,{BACKGROUND_COLORS:()=>ee,CPU_COLORMAPS:()=>H,EPSILON:()=>X,MPR_CAMERA_VALUES:()=>J,RENDERING_DEFAULTS:()=>Z,VIEWPORT_PRESETS:()=>Q});var n={};K.r(n),K.d(n,{addProvider:()=>Pt,get:()=>At,removeAllProviders:()=>Tt,removeProvider:()=>bt});var r={};K.r(r),K.d(r,{findMatchingColormap:()=>Qi,getColormap:()=>Xi,getColormapNames:()=>Ji,registerColormap:()=>Zi});var a={};K.r(a),K.d(a,{toLowHighRange:()=>nn,toWindowLevel:()=>tn});var s={};K.r(s),K.d(s,{getTransferFunctionNodes:()=>sn,setTransferFunctionNodes:()=>on});var o={};K.r(o),K.d(o,{cancelLoadAll:()=>Ln,cancelLoadImage:()=>Vn,cancelLoadImages:()=>kn,createAndCacheDerivedImage:()=>xn,createAndCacheDerivedImages:()=>Mn,createAndCacheDerivedSegmentationImage:()=>jn,createAndCacheDerivedSegmentationImages:()=>Gn,createAndCacheLocalImage:()=>_n,loadAndCacheImage:()=>On,loadAndCacheImages:()=>Dn,loadImage:()=>Sn,registerImageLoader:()=>Nn,registerUnknownImageLoader:()=>Fn,unregisterAllImageLoaders:()=>Un});var l={};K.r(l),K.d(l,{createAndCacheDerivedSegmentationVolume:()=>er,createAndCacheDerivedVolume:()=>$n,createAndCacheVolume:()=>Hn,createAndCacheVolumeFromImages:()=>Kn,createLocalSegmentationVolume:()=>tr,createLocalVolume:()=>Yn,getUnknownVolumeLoaderSchema:()=>Qn,getVolumeLoaderSchemes:()=>Xn,loadVolume:()=>zn,registerUnknownVolumeLoader:()=>Jn,registerVolumeLoader:()=>Zn});var c={};K.r(c),K.d(c,{linePlaneIntersection:()=>Er,planeDistanceToPoint:()=>Pr,planeEquation:()=>yr,threePlaneIntersection:()=>Rr});var d={};K.r(d),K.d(d,{createAndCacheGeometry:()=>Is});var h={};K.r(h),K.d(h,{MultiTargetEventListenerManager:()=>Es,TargetEventListeners:()=>Cs});var u={};K.r(u),K.d(u,{hexToRgb:()=>Io,rgbToHex:()=>vo});var g={};K.r(g),K.d(g,{PointsManager:()=>Ys,ProgressiveIterator:()=>xa,RLEVoxelMap:()=>un,VoxelManager:()=>gn,actorIsA:()=>yt,applyPreset:()=>Lr,autoLoad:()=>So,calculateViewportsSpatialRegistration:()=>Hs,calibratedPixelSpacingMetadataProvider:()=>Os,clamp:()=>va,color:()=>u,colormap:()=>r,convertStackToVolumeViewport:()=>oo,convertToGrayscale:()=>uo,convertVolumeToStackViewport:()=>lo,createLinearRGBTransferFunction:()=>zr,createSigmoidRGBTransferFunction:()=>rn,decimate:()=>Ma,deepMerge:()=>Jt,eventListener:()=>h,generateVolumePropsFromImageIds:()=>ro,genericMetadataProvider:()=>En,getBufferConfiguration:()=>yn,getClosestImageId:()=>Ot,getClosestStackImageIndexForPoint:()=>js,getCurrentVolumeViewportSlice:()=>Ws,getDynamicVolumeInfo:()=>Ao,getImageLegacy:()=>Xs,getImageSliceDataForVolumeViewport:()=>vr,getMinMax:()=>lr,getRandomSampleFromArray:()=>mo,getRuntimeId:()=>As,getScalingParameters:()=>Zs,getSliceRange:()=>Nt,getSpacingInNormalDirection:()=>St,getTargetVolumeAndSpacingInNormalDir:()=>pr,getViewportImageCornersInWorld:()=>$s,getViewportImageIds:()=>go,getViewportModality:()=>Do,getViewportsWithImageURI:()=>Gs,getViewportsWithVolumeId:()=>_s,getVoiFromSigmoidRGBTransferFunction:()=>kr,getVolumeActorCorners:()=>Mt,getVolumeId:()=>ur,getVolumeSliceRangeInfo:()=>_r,getVolumeViewportScrollInfo:()=>Vr,getVolumeViewportsContainingSameVolumes:()=>Ms,hasFloatScalingParameters:()=>no,hasNaNValues:()=>br,imageIdToURI:()=>wt,imageRetrieveMetadataProvider:()=>Zr,imageToWorldCoords:()=>Us,indexWithinDimensions:()=>xs,invertRgbTransferFunction:()=>en,isEqual:()=>qi,isEqualAbs:()=>Ki,isEqualNegative:()=>$i,isImageActor:()=>Et,isOpposite:()=>Ds,isPTPrescaledWithSUV:()=>Vs,isValidVolume:()=>eo,isVideoTransferSyntax:()=>io,loadImageToCanvas:()=>Ns,makeVolumeMetadata:()=>Qs,planar:()=>c,renderToCanvasCPU:()=>Ls,renderToCanvasGPU:()=>ks,roundNumber:()=>ho,roundToPrecision:()=>co,scaleArray:()=>Oo,scaleRgbTransferFunction:()=>ys,snapFocalPointToSlice:()=>Ft,sortImageIdsAndGetSpacing:()=>Js,spatialRegistrationMetadataProvider:()=>zs,splitImageIdsBy4DTags:()=>To,transferFunctionUtils:()=>s,transformIndexToWorld:()=>Ur,transformWorldToIndex:()=>an,triggerEvent:()=>oe,updateVTKImageDataWithCornerstoneImage:()=>Hr,uuidv4:()=>se,windowLevel:()=>a,worldToImageCoords:()=>Fs});var m=function(e){return e.ERROR_EVENT="CORNERSTONE_ERROR",e.CACHE_SIZE_EXCEEDED="CACHE_SIZE_EXCEEDED",e.IMAGE_LOAD_ERROR="IMAGE_LOAD_ERROR",e.CAMERA_MODIFIED="CORNERSTONE_CAMERA_MODIFIED",e.CAMERA_RESET="CORNERSTONE_CAMERA_RESET",e.VOI_MODIFIED="CORNERSTONE_VOI_MODIFIED",e.PRESET_MODIFIED="CORNERSTONE_VIEWPORT_RENDERING_PRESET_MODIFIED",e.DISPLAY_AREA_MODIFIED="CORNERSTONE_DISPLAY_AREA_MODIFIED",e.ELEMENT_DISABLED="CORNERSTONE_ELEMENT_DISABLED",e.ELEMENT_ENABLED="CORNERSTONE_ELEMENT_ENABLED",e.IMAGE_RENDERED="CORNERSTONE_IMAGE_RENDERED",e.IMAGE_VOLUME_MODIFIED="CORNERSTONE_IMAGE_VOLUME_MODIFIED",e.IMAGE_VOLUME_LOADING_COMPLETED="CORNERSTONE_IMAGE_VOLUME_LOADING_COMPLETED",e.IMAGE_LOADED="CORNERSTONE_IMAGE_LOADED",e.IMAGE_RETRIEVAL_STAGE="CORNERSTONE_IMAGE_RETRIEVAL_STAGE",e.IMAGE_LOAD_FAILED="CORNERSTONE_IMAGE_LOAD_FAILED",e.VOLUME_VIEWPORT_NEW_VOLUME="CORNERSTONE_VOLUME_VIEWPORT_NEW_VOLUME",e.VOLUME_LOADED="CORNERSTONE_VOLUME_LOADED",e.VOLUME_LOADED_FAILED="CORNERSTONE_VOLUME_LOADED_FAILED",e.IMAGE_CACHE_IMAGE_ADDED="CORNERSTONE_IMAGE_CACHE_IMAGE_ADDED",e.IMAGE_CACHE_IMAGE_REMOVED="CORNERSTONE_IMAGE_CACHE_IMAGE_REMOVED",e.VOLUME_CACHE_VOLUME_ADDED="CORNERSTONE_VOLUME_CACHE_VOLUME_ADDED",e.VOLUME_CACHE_VOLUME_REMOVED="CORNERSTONE_VOLUME_CACHE_VOLUME_REMOVED",e.STACK_NEW_IMAGE="CORNERSTONE_STACK_NEW_IMAGE",e.VOLUME_NEW_IMAGE="CORNERSTONE_VOLUME_NEW_IMAGE",e.PRE_STACK_NEW_IMAGE="CORNERSTONE_PRE_STACK_NEW_IMAGE",e.IMAGE_SPACING_CALIBRATED="CORNERSTONE_IMAGE_SPACING_CALIBRATED",e.STACK_VIEWPORT_NEW_STACK="CORNERSTONE_STACK_VIEWPORT_NEW_STACK",e.STACK_VIEWPORT_SCROLL="CORNERSTONE_STACK_VIEWPORT_SCROLL",e.GEOMETRY_CACHE_GEOMETRY_ADDED="CORNERSTONE_GEOMETRY_CACHE_GEOMETRY_ADDED",e.VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS="VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS",e.VOLUME_VIEWPORT_SCROLL="VOLUME_VIEWPORT_SCROLL",e.CLIPPING_PLANES_UPDATED="CORNERSTONE_CLIPPING_PLANES_UPDATED",e.WEB_WORKER_PROGRESS="CORNERSTONE_WEB_WORKER_PROGRESS",e.COLORMAP_MODIFIED="CORNERSTONE_COLORMAP_MODIFIED",e.DYNAMIC_VOLUME_TIME_POINT_INDEX_CHANGED="DYNAMIC_VOLUME_TIME_POINT_INDEX_CHANGED",e}(m||{});const p=m;var f=function(e){return e.Interaction="interaction",e.Thumbnail="thumbnail",e.Prefetch="prefetch",e.Compute="compute",e}(f||{});const v=f;var I=function(e){return e.STACK="stack",e.ORTHOGRAPHIC="orthographic",e.PERSPECTIVE="perspective",e.VOLUME_3D="volume3d",e.VIDEO="video",e.WholeSlide="wholeSlide",e}(I||{});const w=I;var C=function(e){return e[e.NEAREST=0]="NEAREST",e[e.LINEAR=1]="LINEAR",e[e.FAST_LINEAR=2]="FAST_LINEAR",e}(C||{});const E=C;var y=K(468),R=K.n(y);const{BlendMode:P}=R();var b=function(e){return e[e.COMPOSITE=P.COMPOSITE_BLEND]="COMPOSITE",e[e.MAXIMUM_INTENSITY_BLEND=P.MAXIMUM_INTENSITY_BLEND]="MAXIMUM_INTENSITY_BLEND",e[e.MINIMUM_INTENSITY_BLEND=P.MINIMUM_INTENSITY_BLEND]="MINIMUM_INTENSITY_BLEND",e[e.AVERAGE_INTENSITY_BLEND=P.AVERAGE_INTENSITY_BLEND]="AVERAGE_INTENSITY_BLEND",e}(b||{});const T=b;var A=function(e){return e.AXIAL="axial",e.CORONAL="coronal",e.SAGITTAL="sagittal",e.ACQUISITION="acquisition",e}(A||{});const S=A;var O=function(e){return e.CONTOUR="contour",e.SURFACE="Surface",e}(O||{});const D=O;var x=function(e){return e.CLOSED_PLANAR="CLOSED_PLANAR",e.OPEN_PLANAR="OPEN_PLANAR",e}(x||{});const M=x;var _=function(e){return e.LINEAR="LINEAR",e.SAMPLED_SIGMOID="SIGMOID",e}(_||{});const V=_;var k=function(e){return e.SUM="SUM",e.AVERAGE="AVERAGE",e.SUBTRACT="SUBTRACT",e}(k||{});const L=k,N=function(e){return e.NOT_APPLICABLE="",e.ERMF="ERMF",e.USER="User",e.PROJECTION="Proj",e.REGION="Region",e.ERROR="Error",e.UNCALIBRATED="Uncalibrated",e}({});var F=function(e){return e.NO_DATA="noData",e.LOADING="loading",e.PRE_RENDER="preRender",e.RESIZE="resize",e.RENDERED="rendered",e}(F||{});const U=F;var G=function(e){return e[e.FAR_REPLICATE=1]="FAR_REPLICATE",e[e.ADJACENT_REPLICATE=3]="ADJACENT_REPLICATE",e[e.SUBRESOLUTION=6]="SUBRESOLUTION",e[e.LOSSY=7]="LOSSY",e[e.FULL_RESOLUTION=8]="FULL_RESOLUTION",e}(G||{});const j=G;var W=function(e){return e.FRAME="f",e.SECOND="s",e}(W||{}),B=function(e){return e.CALIBRATION="calibrationModule",e.CINE="cineModule",e.GENERAL_IMAGE="generalImageModule",e.GENERAL_SERIES="generalSeriesModule",e.GENERAL_STUDY="generalStudyModule",e.IMAGE_PIXEL="imagePixelModule",e.IMAGE_PLANE="imagePlaneModule",e.IMAGE_URL="imageUrlModule",e.MODALITY_LUT="modalityLutModule",e.MULTIFRAME="multiframeModule",e.NM_MULTIFRAME_GEOMETRY="nmMultiframeGeometryModule",e.OVERLAY_PLANE="overlayPlaneModule",e.PATIENT="patientModule",e.PATIENT_STUDY="patientStudyModule",e.PET_IMAGE="petImageModule",e.PET_ISOTOPE="petIsotopeModule",e.PET_SERIES="petSeriesModule",e.SOP_COMMON="sopCommonModule",e.ULTRASOUND_ENHANCED_REGION="ultrasoundEnhancedRegionModule",e.VOI_LUT="voiLutModule",e.WADO_WEB_CLIENT="wadoWebClient",e}(B||{});const q=B;let z=function(e){return e.SUM="SUM",e.SUBTRACT="SUBTRACT",e.AVERAGE="AVERAGE",e}({});const H={hotIron:{name:"Hot Iron",numOfColors:256,colors:[[0,0,0,255],[2,0,0,255],[4,0,0,255],[6,0,0,255],[8,0,0,255],[10,0,0,255],[12,0,0,255],[14,0,0,255],[16,0,0,255],[18,0,0,255],[20,0,0,255],[22,0,0,255],[24,0,0,255],[26,0,0,255],[28,0,0,255],[30,0,0,255],[32,0,0,255],[34,0,0,255],[36,0,0,255],[38,0,0,255],[40,0,0,255],[42,0,0,255],[44,0,0,255],[46,0,0,255],[48,0,0,255],[50,0,0,255],[52,0,0,255],[54,0,0,255],[56,0,0,255],[58,0,0,255],[60,0,0,255],[62,0,0,255],[64,0,0,255],[66,0,0,255],[68,0,0,255],[70,0,0,255],[72,0,0,255],[74,0,0,255],[76,0,0,255],[78,0,0,255],[80,0,0,255],[82,0,0,255],[84,0,0,255],[86,0,0,255],[88,0,0,255],[90,0,0,255],[92,0,0,255],[94,0,0,255],[96,0,0,255],[98,0,0,255],[100,0,0,255],[102,0,0,255],[104,0,0,255],[106,0,0,255],[108,0,0,255],[110,0,0,255],[112,0,0,255],[114,0,0,255],[116,0,0,255],[118,0,0,255],[120,0,0,255],[122,0,0,255],[124,0,0,255],[126,0,0,255],[128,0,0,255],[130,0,0,255],[132,0,0,255],[134,0,0,255],[136,0,0,255],[138,0,0,255],[140,0,0,255],[142,0,0,255],[144,0,0,255],[146,0,0,255],[148,0,0,255],[150,0,0,255],[152,0,0,255],[154,0,0,255],[156,0,0,255],[158,0,0,255],[160,0,0,255],[162,0,0,255],[164,0,0,255],[166,0,0,255],[168,0,0,255],[170,0,0,255],[172,0,0,255],[174,0,0,255],[176,0,0,255],[178,0,0,255],[180,0,0,255],[182,0,0,255],[184,0,0,255],[186,0,0,255],[188,0,0,255],[190,0,0,255],[192,0,0,255],[194,0,0,255],[196,0,0,255],[198,0,0,255],[200,0,0,255],[202,0,0,255],[204,0,0,255],[206,0,0,255],[208,0,0,255],[210,0,0,255],[212,0,0,255],[214,0,0,255],[216,0,0,255],[218,0,0,255],[220,0,0,255],[222,0,0,255],[224,0,0,255],[226,0,0,255],[228,0,0,255],[230,0,0,255],[232,0,0,255],[234,0,0,255],[236,0,0,255],[238,0,0,255],[240,0,0,255],[242,0,0,255],[244,0,0,255],[246,0,0,255],[248,0,0,255],[250,0,0,255],[252,0,0,255],[254,0,0,255],[255,0,0,255],[255,2,0,255],[255,4,0,255],[255,6,0,255],[255,8,0,255],[255,10,0,255],[255,12,0,255],[255,14,0,255],[255,16,0,255],[255,18,0,255],[255,20,0,255],[255,22,0,255],[255,24,0,255],[255,26,0,255],[255,28,0,255],[255,30,0,255],[255,32,0,255],[255,34,0,255],[255,36,0,255],[255,38,0,255],[255,40,0,255],[255,42,0,255],[255,44,0,255],[255,46,0,255],[255,48,0,255],[255,50,0,255],[255,52,0,255],[255,54,0,255],[255,56,0,255],[255,58,0,255],[255,60,0,255],[255,62,0,255],[255,64,0,255],[255,66,0,255],[255,68,0,255],[255,70,0,255],[255,72,0,255],[255,74,0,255],[255,76,0,255],[255,78,0,255],[255,80,0,255],[255,82,0,255],[255,84,0,255],[255,86,0,255],[255,88,0,255],[255,90,0,255],[255,92,0,255],[255,94,0,255],[255,96,0,255],[255,98,0,255],[255,100,0,255],[255,102,0,255],[255,104,0,255],[255,106,0,255],[255,108,0,255],[255,110,0,255],[255,112,0,255],[255,114,0,255],[255,116,0,255],[255,118,0,255],[255,120,0,255],[255,122,0,255],[255,124,0,255],[255,126,0,255],[255,128,4,255],[255,130,8,255],[255,132,12,255],[255,134,16,255],[255,136,20,255],[255,138,24,255],[255,140,28,255],[255,142,32,255],[255,144,36,255],[255,146,40,255],[255,148,44,255],[255,150,48,255],[255,152,52,255],[255,154,56,255],[255,156,60,255],[255,158,64,255],[255,160,68,255],[255,162,72,255],[255,164,76,255],[255,166,80,255],[255,168,84,255],[255,170,88,255],[255,172,92,255],[255,174,96,255],[255,176,100,255],[255,178,104,255],[255,180,108,255],[255,182,112,255],[255,184,116,255],[255,186,120,255],[255,188,124,255],[255,190,128,255],[255,192,132,255],[255,194,136,255],[255,196,140,255],[255,198,144,255],[255,200,148,255],[255,202,152,255],[255,204,156,255],[255,206,160,255],[255,208,164,255],[255,210,168,255],[255,212,172,255],[255,214,176,255],[255,216,180,255],[255,218,184,255],[255,220,188,255],[255,222,192,255],[255,224,196,255],[255,226,200,255],[255,228,204,255],[255,230,208,255],[255,232,212,255],[255,234,216,255],[255,236,220,255],[255,238,224,255],[255,240,228,255],[255,242,232,255],[255,244,236,255],[255,246,240,255],[255,248,244,255],[255,250,248,255],[255,252,252,255],[255,255,255,255]]},pet:{name:"PET",numColors:256,colors:[[0,0,0,255],[0,2,1,255],[0,4,3,255],[0,6,5,255],[0,8,7,255],[0,10,9,255],[0,12,11,255],[0,14,13,255],[0,16,15,255],[0,18,17,255],[0,20,19,255],[0,22,21,255],[0,24,23,255],[0,26,25,255],[0,28,27,255],[0,30,29,255],[0,32,31,255],[0,34,33,255],[0,36,35,255],[0,38,37,255],[0,40,39,255],[0,42,41,255],[0,44,43,255],[0,46,45,255],[0,48,47,255],[0,50,49,255],[0,52,51,255],[0,54,53,255],[0,56,55,255],[0,58,57,255],[0,60,59,255],[0,62,61,255],[0,65,63,255],[0,67,65,255],[0,69,67,255],[0,71,69,255],[0,73,71,255],[0,75,73,255],[0,77,75,255],[0,79,77,255],[0,81,79,255],[0,83,81,255],[0,85,83,255],[0,87,85,255],[0,89,87,255],[0,91,89,255],[0,93,91,255],[0,95,93,255],[0,97,95,255],[0,99,97,255],[0,101,99,255],[0,103,101,255],[0,105,103,255],[0,107,105,255],[0,109,107,255],[0,111,109,255],[0,113,111,255],[0,115,113,255],[0,117,115,255],[0,119,117,255],[0,121,119,255],[0,123,121,255],[0,125,123,255],[0,128,125,255],[1,126,127,255],[3,124,129,255],[5,122,131,255],[7,120,133,255],[9,118,135,255],[11,116,137,255],[13,114,139,255],[15,112,141,255],[17,110,143,255],[19,108,145,255],[21,106,147,255],[23,104,149,255],[25,102,151,255],[27,100,153,255],[29,98,155,255],[31,96,157,255],[33,94,159,255],[35,92,161,255],[37,90,163,255],[39,88,165,255],[41,86,167,255],[43,84,169,255],[45,82,171,255],[47,80,173,255],[49,78,175,255],[51,76,177,255],[53,74,179,255],[55,72,181,255],[57,70,183,255],[59,68,185,255],[61,66,187,255],[63,64,189,255],[65,63,191,255],[67,61,193,255],[69,59,195,255],[71,57,197,255],[73,55,199,255],[75,53,201,255],[77,51,203,255],[79,49,205,255],[81,47,207,255],[83,45,209,255],[85,43,211,255],[86,41,213,255],[88,39,215,255],[90,37,217,255],[92,35,219,255],[94,33,221,255],[96,31,223,255],[98,29,225,255],[100,27,227,255],[102,25,229,255],[104,23,231,255],[106,21,233,255],[108,19,235,255],[110,17,237,255],[112,15,239,255],[114,13,241,255],[116,11,243,255],[118,9,245,255],[120,7,247,255],[122,5,249,255],[124,3,251,255],[126,1,253,255],[128,0,255,255],[130,2,252,255],[132,4,248,255],[134,6,244,255],[136,8,240,255],[138,10,236,255],[140,12,232,255],[142,14,228,255],[144,16,224,255],[146,18,220,255],[148,20,216,255],[150,22,212,255],[152,24,208,255],[154,26,204,255],[156,28,200,255],[158,30,196,255],[160,32,192,255],[162,34,188,255],[164,36,184,255],[166,38,180,255],[168,40,176,255],[170,42,172,255],[171,44,168,255],[173,46,164,255],[175,48,160,255],[177,50,156,255],[179,52,152,255],[181,54,148,255],[183,56,144,255],[185,58,140,255],[187,60,136,255],[189,62,132,255],[191,64,128,255],[193,66,124,255],[195,68,120,255],[197,70,116,255],[199,72,112,255],[201,74,108,255],[203,76,104,255],[205,78,100,255],[207,80,96,255],[209,82,92,255],[211,84,88,255],[213,86,84,255],[215,88,80,255],[217,90,76,255],[219,92,72,255],[221,94,68,255],[223,96,64,255],[225,98,60,255],[227,100,56,255],[229,102,52,255],[231,104,48,255],[233,106,44,255],[235,108,40,255],[237,110,36,255],[239,112,32,255],[241,114,28,255],[243,116,24,255],[245,118,20,255],[247,120,16,255],[249,122,12,255],[251,124,8,255],[253,126,4,255],[255,128,0,255],[255,130,4,255],[255,132,8,255],[255,134,12,255],[255,136,16,255],[255,138,20,255],[255,140,24,255],[255,142,28,255],[255,144,32,255],[255,146,36,255],[255,148,40,255],[255,150,44,255],[255,152,48,255],[255,154,52,255],[255,156,56,255],[255,158,60,255],[255,160,64,255],[255,162,68,255],[255,164,72,255],[255,166,76,255],[255,168,80,255],[255,170,85,255],[255,172,89,255],[255,174,93,255],[255,176,97,255],[255,178,101,255],[255,180,105,255],[255,182,109,255],[255,184,113,255],[255,186,117,255],[255,188,121,255],[255,190,125,255],[255,192,129,255],[255,194,133,255],[255,196,137,255],[255,198,141,255],[255,200,145,255],[255,202,149,255],[255,204,153,255],[255,206,157,255],[255,208,161,255],[255,210,165,255],[255,212,170,255],[255,214,174,255],[255,216,178,255],[255,218,182,255],[255,220,186,255],[255,222,190,255],[255,224,194,255],[255,226,198,255],[255,228,202,255],[255,230,206,255],[255,232,210,255],[255,234,214,255],[255,236,218,255],[255,238,222,255],[255,240,226,255],[255,242,230,255],[255,244,234,255],[255,246,238,255],[255,248,242,255],[255,250,246,255],[255,252,250,255],[255,255,255,255]]},hotMetalBlue:{name:"Hot Metal Blue",numColors:256,colors:[[0,0,0,255],[0,0,2,255],[0,0,4,255],[0,0,6,255],[0,0,8,255],[0,0,10,255],[0,0,12,255],[0,0,14,255],[0,0,16,255],[0,0,17,255],[0,0,19,255],[0,0,21,255],[0,0,23,255],[0,0,25,255],[0,0,27,255],[0,0,29,255],[0,0,31,255],[0,0,33,255],[0,0,35,255],[0,0,37,255],[0,0,39,255],[0,0,41,255],[0,0,43,255],[0,0,45,255],[0,0,47,255],[0,0,49,255],[0,0,51,255],[0,0,53,255],[0,0,55,255],[0,0,57,255],[0,0,59,255],[0,0,61,255],[0,0,63,255],[0,0,65,255],[0,0,67,255],[0,0,69,255],[0,0,71,255],[0,0,73,255],[0,0,75,255],[0,0,77,255],[0,0,79,255],[0,0,81,255],[0,0,83,255],[0,0,84,255],[0,0,86,255],[0,0,88,255],[0,0,90,255],[0,0,92,255],[0,0,94,255],[0,0,96,255],[0,0,98,255],[0,0,100,255],[0,0,102,255],[0,0,104,255],[0,0,106,255],[0,0,108,255],[0,0,110,255],[0,0,112,255],[0,0,114,255],[0,0,116,255],[0,0,117,255],[0,0,119,255],[0,0,121,255],[0,0,123,255],[0,0,125,255],[0,0,127,255],[0,0,129,255],[0,0,131,255],[0,0,133,255],[0,0,135,255],[0,0,137,255],[0,0,139,255],[0,0,141,255],[0,0,143,255],[0,0,145,255],[0,0,147,255],[0,0,149,255],[0,0,151,255],[0,0,153,255],[0,0,155,255],[0,0,157,255],[0,0,159,255],[0,0,161,255],[0,0,163,255],[0,0,165,255],[0,0,167,255],[3,0,169,255],[6,0,171,255],[9,0,173,255],[12,0,175,255],[15,0,177,255],[18,0,179,255],[21,0,181,255],[24,0,183,255],[26,0,184,255],[29,0,186,255],[32,0,188,255],[35,0,190,255],[38,0,192,255],[41,0,194,255],[44,0,196,255],[47,0,198,255],[50,0,200,255],[52,0,197,255],[55,0,194,255],[57,0,191,255],[59,0,188,255],[62,0,185,255],[64,0,182,255],[66,0,179,255],[69,0,176,255],[71,0,174,255],[74,0,171,255],[76,0,168,255],[78,0,165,255],[81,0,162,255],[83,0,159,255],[85,0,156,255],[88,0,153,255],[90,0,150,255],[93,2,144,255],[96,4,138,255],[99,6,132,255],[102,8,126,255],[105,9,121,255],[108,11,115,255],[111,13,109,255],[114,15,103,255],[116,17,97,255],[119,19,91,255],[122,21,85,255],[125,23,79,255],[128,24,74,255],[131,26,68,255],[134,28,62,255],[137,30,56,255],[140,32,50,255],[143,34,47,255],[146,36,44,255],[149,38,41,255],[152,40,38,255],[155,41,35,255],[158,43,32,255],[161,45,29,255],[164,47,26,255],[166,49,24,255],[169,51,21,255],[172,53,18,255],[175,55,15,255],[178,56,12,255],[181,58,9,255],[184,60,6,255],[187,62,3,255],[190,64,0,255],[194,66,0,255],[198,68,0,255],[201,70,0,255],[205,72,0,255],[209,73,0,255],[213,75,0,255],[217,77,0,255],[221,79,0,255],[224,81,0,255],[228,83,0,255],[232,85,0,255],[236,87,0,255],[240,88,0,255],[244,90,0,255],[247,92,0,255],[251,94,0,255],[255,96,0,255],[255,98,3,255],[255,100,6,255],[255,102,9,255],[255,104,12,255],[255,105,15,255],[255,107,18,255],[255,109,21,255],[255,111,24,255],[255,113,26,255],[255,115,29,255],[255,117,32,255],[255,119,35,255],[255,120,38,255],[255,122,41,255],[255,124,44,255],[255,126,47,255],[255,128,50,255],[255,130,53,255],[255,132,56,255],[255,134,59,255],[255,136,62,255],[255,137,65,255],[255,139,68,255],[255,141,71,255],[255,143,74,255],[255,145,76,255],[255,147,79,255],[255,149,82,255],[255,151,85,255],[255,152,88,255],[255,154,91,255],[255,156,94,255],[255,158,97,255],[255,160,100,255],[255,162,103,255],[255,164,106,255],[255,166,109,255],[255,168,112,255],[255,169,115,255],[255,171,118,255],[255,173,121,255],[255,175,124,255],[255,177,126,255],[255,179,129,255],[255,181,132,255],[255,183,135,255],[255,184,138,255],[255,186,141,255],[255,188,144,255],[255,190,147,255],[255,192,150,255],[255,194,153,255],[255,196,156,255],[255,198,159,255],[255,200,162,255],[255,201,165,255],[255,203,168,255],[255,205,171,255],[255,207,174,255],[255,209,176,255],[255,211,179,255],[255,213,182,255],[255,215,185,255],[255,216,188,255],[255,218,191,255],[255,220,194,255],[255,222,197,255],[255,224,200,255],[255,226,203,255],[255,228,206,255],[255,229,210,255],[255,231,213,255],[255,233,216,255],[255,235,219,255],[255,237,223,255],[255,239,226,255],[255,240,229,255],[255,242,232,255],[255,244,236,255],[255,246,239,255],[255,248,242,255],[255,250,245,255],[255,251,249,255],[255,253,252,255],[255,255,255,255]]},pet20Step:{name:"PET 20 Step",numColors:256,colors:[[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255]]},gray:{name:"Gray",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,0,0],[1,1,1]]}},jet:{name:"Jet",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.35,0,0],[.66,1,1],[.89,1,1],[1,.5,.5]],green:[[0,0,0],[.125,0,0],[.375,1,1],[.64,1,1],[.91,0,0],[1,0,0]],blue:[[0,.5,.5],[.11,1,1],[.34,1,1],[.65,0,0],[1,0,0]]}},hsv:{name:"HSV",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[.15873,1,1],[.174603,.96875,.96875],[.333333,.03125,.03125],[.349206,0,0],[.666667,0,0],[.68254,.03125,.03125],[.84127,.96875,.96875],[.857143,1,1],[1,1,1]],green:[[0,0,0],[.15873,.9375,.9375],[.174603,1,1],[.507937,1,1],[.666667,.0625,.0625],[.68254,0,0],[1,0,0]],blue:[[0,0,0],[.333333,0,0],[.349206,.0625,.0625],[.507937,1,1],[.84127,1,1],[.857143,.9375,.9375],[1,.09375,.09375]]}},hot:{name:"Hot",numColors:256,gamma:1,segmentedData:{red:[[0,.0416,.0416],[.365079,1,1],[1,1,1]],green:[[0,0,0],[.365079,0,0],[.746032,1,1],[1,1,1]],blue:[[0,0,0],[.746032,0,0],[1,1,1]]}},cool:{name:"Cool",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,1,1],[1,0,0]],blue:[[0,1,1],[1,1,1]]}},spring:{name:"Spring",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,1,1],[1,0,0]]}},summer:{name:"Summer",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,.5,.5],[1,1,1]],blue:[[0,.4,.4],[1,.4,.4]]}},autumn:{name:"Autumn",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,0,0],[1,0,0]]}},winter:{name:"Winter",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,0,0]],green:[[0,0,0],[1,1,1]],blue:[[0,1,1],[1,.5,.5]]}},bone:{name:"Bone",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.746032,.652778,.652778],[1,1,1]],green:[[0,0,0],[.365079,.319444,.319444],[.746032,.777778,.777778],[1,1,1]],blue:[[0,0,0],[.365079,.444444,.444444],[1,1,1]]}},copper:{name:"Copper",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.809524,1,1],[1,1,1]],green:[[0,0,0],[1,.7812,.7812]],blue:[[0,0,0],[1,.4975,.4975]]}},spectral:{name:"Spectral",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.05,.4667,.4667],[.1,.5333,.5333],[.15,0,0],[.2,0,0],[.25,0,0],[.3,0,0],[.35,0,0],[.4,0,0],[.45,0,0],[.5,0,0],[.55,0,0],[.6,0,0],[.65,.7333,.7333],[.7,.9333,.9333],[.75,1,1],[.8,1,1],[.85,1,1],[.9,.8667,.8667],[.95,.8,.8],[1,.8,.8]],green:[[0,0,0],[.05,0,0],[.1,0,0],[.15,0,0],[.2,0,0],[.25,.4667,.4667],[.3,.6,.6],[.35,.6667,.6667],[.4,.6667,.6667],[.45,.6,.6],[.5,.7333,.7333],[.55,.8667,.8667],[.6,1,1],[.65,1,1],[.7,.9333,.9333],[.75,.8,.8],[.8,.6,.6],[.85,0,0],[.9,0,0],[.95,0,0],[1,.8,.8]],blue:[[0,0,0],[.05,.5333,.5333],[.1,.6,.6],[.15,.6667,.6667],[.2,.8667,.8667],[.25,.8667,.8667],[.3,.8667,.8667],[.35,.6667,.6667],[.4,.5333,.5333],[.45,0,0],[.5,0,0],[.55,0,0],[.6,0,0],[.65,0,0],[.7,0,0],[.75,0,0],[.8,0,0],[.85,0,0],[.9,0,0],[.95,0,0],[1,.8,.8]]}},coolwarm:{name:"CoolWarm",numColors:256,gamma:1,segmentedData:{red:[[0,.2298057,.2298057],[.03125,.26623388,.26623388],[.0625,.30386891,.30386891],[.09375,.342804478,.342804478],[.125,.38301334,.38301334],[.15625,.424369608,.424369608],[.1875,.46666708,.46666708],[.21875,.509635204,.509635204],[.25,.552953156,.552953156],[.28125,.596262162,.596262162],[.3125,.639176211,.639176211],[.34375,.681291281,.681291281],[.375,.722193294,.722193294],[.40625,.761464949,.761464949],[.4375,.798691636,.798691636],[.46875,.833466556,.833466556],[.5,.865395197,.865395197],[.53125,.897787179,.897787179],[.5625,.924127593,.924127593],[.59375,.944468518,.944468518],[.625,.958852946,.958852946],[.65625,.96732803,.96732803],[.6875,.969954137,.969954137],[.71875,.966811177,.966811177],[.75,.958003065,.958003065],[.78125,.943660866,.943660866],[.8125,.923944917,.923944917],[.84375,.89904617,.89904617],[.875,.869186849,.869186849],[.90625,.834620542,.834620542],[.9375,.795631745,.795631745],[.96875,.752534934,.752534934],[1,.705673158,.705673158]],green:[[0,.298717966,.298717966],[.03125,.353094838,.353094838],[.0625,.406535296,.406535296],[.09375,.458757618,.458757618],[.125,.50941904,.50941904],[.15625,.558148092,.558148092],[.1875,.604562568,.604562568],[.21875,.648280772,.648280772],[.25,.688929332,.688929332],[.28125,.726149107,.726149107],[.3125,.759599947,.759599947],[.34375,.788964712,.788964712],[.375,.813952739,.813952739],[.40625,.834302879,.834302879],[.4375,.849786142,.849786142],[.46875,.860207984,.860207984],[.5,.86541021,.86541021],[.53125,.848937047,.848937047],[.5625,.827384882,.827384882],[.59375,.800927443,.800927443],[.625,.769767752,.769767752],[.65625,.734132809,.734132809],[.6875,.694266682,.694266682],[.71875,.650421156,.650421156],[.75,.602842431,.602842431],[.78125,.551750968,.551750968],[.8125,.49730856,.49730856],[.84375,.439559467,.439559467],[.875,.378313092,.378313092],[.90625,.312874446,.312874446],[.9375,.24128379,.24128379],[.96875,.157246067,.157246067],[1,.01555616,.01555616]],blue:[[0,.753683153,.753683153],[.03125,.801466763,.801466763],[.0625,.84495867,.84495867],[.09375,.883725899,.883725899],[.125,.917387822,.917387822],[.15625,.945619588,.945619588],[.1875,.968154911,.968154911],[.21875,.98478814,.98478814],[.25,.995375608,.995375608],[.28125,.999836203,.999836203],[.3125,.998151185,.998151185],[.34375,.990363227,.990363227],[.375,.976574709,.976574709],[.40625,.956945269,.956945269],[.4375,.931688648,.931688648],[.46875,.901068838,.901068838],[.5,.865395561,.865395561],[.53125,.820880546,.820880546],[.5625,.774508472,.774508472],[.59375,.726736146,.726736146],[.625,.678007945,.678007945],[.65625,.628751763,.628751763],[.6875,.579375448,.579375448],[.71875,.530263762,.530263762],[.75,.481775914,.481775914],[.78125,.434243684,.434243684],[.8125,.387970225,.387970225],[.84375,.343229596,.343229596],[.875,.300267182,.300267182],[.90625,.259301199,.259301199],[.9375,.220525627,.220525627],[.96875,.184115123,.184115123],[1,.150232812,.150232812]]}},blues:{name:"Blues",numColors:256,gamma:1,segmentedData:{red:[[0,.9686274528503418,.9686274528503418],[.125,.8705882430076599,.8705882430076599],[.25,.7764706015586853,.7764706015586853],[.375,.6196078658103943,.6196078658103943],[.5,.41960784792900085,.41960784792900085],[.625,.25882354378700256,.25882354378700256],[.75,.12941177189350128,.12941177189350128],[.875,.0313725508749485,.0313725508749485],[1,.0313725508749485,.0313725508749485]],green:[[0,.9843137264251709,.9843137264251709],[.125,.9215686321258545,.9215686321258545],[.25,.8588235378265381,.8588235378265381],[.375,.7921568751335144,.7921568751335144],[.5,.6823529601097107,.6823529601097107],[.625,.572549045085907,.572549045085907],[.75,.4431372582912445,.4431372582912445],[.875,.3176470696926117,.3176470696926117],[1,.1882352977991104,.1882352977991104]],blue:[[0,1,1],[.125,.9686274528503418,.9686274528503418],[.25,.9372549057006836,.9372549057006836],[.375,.8823529481887817,.8823529481887817],[.5,.8392156958580017,.8392156958580017],[.625,.7764706015586853,.7764706015586853],[.75,.7098039388656616,.7098039388656616],[.875,.6117647290229797,.6117647290229797],[1,.41960784792900085,.41960784792900085]]}}},$={MINIMUM_SLAB_THICKNESS:.05,MAXIMUM_RAY_DISTANCE:1e6};Object.freeze($);const Z=$,X=.001,J=function e(t){const i=Object.getOwnPropertyNames(t);for(const n of i){const i=t[n];i&&"object"==typeof i&&e(i)}return Object.freeze(t)}({axial:{viewPlaneNormal:[0,0,-1],viewUp:[0,-1,0]},sagittal:{viewPlaneNormal:[1,0,0],viewUp:[0,0,1]},coronal:{viewPlaneNormal:[0,-1,0],viewUp:[0,0,1]}}),Q=[{name:"CT-AAA",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"12 -3024 0 143.556 0 166.222 0.686275 214.389 0.696078 419.736 0.833333 3071 0.803922",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"24 -3024 0 0 0 143.556 0.615686 0.356863 0.184314 166.222 0.882353 0.603922 0.290196 214.389 1 1 1 419.736 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-AAA2",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"16 -3024 0 129.542 0 145.244 0.166667 157.02 0.5 169.918 0.627451 395.575 0.8125 1578.73 0.8125 3071 0.8125",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"32 -3024 0 0 0 129.542 0.54902 0.25098 0.14902 145.244 0.6 0.627451 0.843137 157.02 0.890196 0.47451 0.6 169.918 0.992157 0.870588 0.392157 395.575 1 0.886275 0.658824 1578.73 1 0.829256 0.957922 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Bone",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"8 -3024 0 -16.4458 0 641.385 0.715686 3071 0.705882",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"16 -3024 0 0 0 -16.4458 0.729412 0.254902 0.301961 641.385 0.905882 0.815686 0.552941 3071 1 1 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Bones",gradientOpacity:"4 0 1 985.12 1",specularPower:"1",scalarOpacity:"8 -1000 0 152.19 0 278.93 0.190476 952 0.2",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"20 -1000 0.3 0.3 1 -488 0.3 1 0.3 463.28 1 0 0 659.15 1 0.912535 0.0374849 953 1 0.3 0.3",diffuse:"1",interpolation:"1"},{name:"CT-Cardiac",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"12 -3024 0 -77.6875 0 94.9518 0.285714 179.052 0.553571 260.439 0.848214 3071 0.875",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"24 -3024 0 0 0 -77.6875 0.54902 0.25098 0.14902 94.9518 0.882353 0.603922 0.290196 179.052 1 0.937033 0.954531 260.439 0.615686 0 0 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Cardiac2",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"12 -3024 0 42.8964 0 163.488 0.428571 277.642 0.776786 1587 0.754902 3071 0.754902",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"24 -3024 0 0 0 42.8964 0.54902 0.25098 0.14902 163.488 0.917647 0.639216 0.0588235 277.642 1 0.878431 0.623529 1587 1 1 1 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Cardiac3",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"14 -3024 0 -86.9767 0 45.3791 0.169643 139.919 0.589286 347.907 0.607143 1224.16 0.607143 3071 0.616071",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"28 -3024 0 0 0 -86.9767 0 0.25098 1 45.3791 1 0 0 139.919 1 0.894893 0.894893 347.907 1 1 0.25098 1224.16 1 1 1 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Chest-Contrast-Enhanced",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"10 -3024 0 67.0106 0 251.105 0.446429 439.291 0.625 3071 0.616071",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"20 -3024 0 0 0 67.0106 0.54902 0.25098 0.14902 251.105 0.882353 0.603922 0.290196 439.291 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Chest-Vessels",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"10 -3024 0 -1278.35 0 22.8277 0.428571 439.291 0.625 3071 0.616071",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"20 -3024 0 0 0 -1278.35 0.54902 0.25098 0.14902 22.8277 0.882353 0.603922 0.290196 439.291 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"1",interpolation:"1"},{name:"CT-Coronary-Arteries",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"12 -2048 0 136.47 0 159.215 0.258929 318.43 0.571429 478.693 0.776786 3661 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"24 -2048 0 0 0 136.47 0 0 0 159.215 0.159804 0.159804 0.159804 318.43 0.764706 0.764706 0.764706 478.693 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Coronary-Arteries-2",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"14 -2048 0 142.677 0 145.016 0.116071 192.174 0.5625 217.24 0.776786 384.347 0.830357 3661 0.830357",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"28 -2048 0 0 0 142.677 0 0 0 145.016 0.615686 0 0.0156863 192.174 0.909804 0.454902 0 217.24 0.972549 0.807843 0.611765 384.347 0.909804 0.909804 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Coronary-Arteries-3",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"14 -2048 0 128.643 0 129.982 0.0982143 173.636 0.669643 255.884 0.857143 584.878 0.866071 3661 1",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"28 -2048 0 0 0 128.643 0 0 0 129.982 0.615686 0 0.0156863 173.636 0.909804 0.454902 0 255.884 0.886275 0.886275 0.886275 584.878 0.968627 0.968627 0.968627 3661 1 1 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Cropped-Volume-Bone",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"10 -2048 0 -451 0 -450 1 1050 1 3661 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"20 -2048 0 0 0 -451 0 0 0 -450 0.0556356 0.0556356 0.0556356 1050 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Fat",gradientOpacity:"6 0 1 985.12 1 988 1",specularPower:"1",scalarOpacity:"14 -1000 0 -100 0 -99 0.15 -60 0.15 -59 0 101.2 0 952 0",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"36 -1000 0.3 0.3 1 -497.5 0.3 1 0.3 -99 0 0 1 -76.946 0 1 0 -65.481 0.835431 0.888889 0.0165387 83.89 1 0 0 463.28 1 0 0 659.15 1 0.912535 0.0374849 2952 1 0.300267 0.299886",diffuse:"1",interpolation:"1"},{name:"CT-Liver-Vasculature",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"14 -2048 0 149.113 0 157.884 0.482143 339.96 0.660714 388.526 0.830357 1197.95 0.839286 3661 0.848214",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"28 -2048 0 0 0 149.113 0 0 0 157.884 0.501961 0.25098 0 339.96 0.695386 0.59603 0.36886 388.526 0.854902 0.85098 0.827451 1197.95 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Lung",gradientOpacity:"6 0 1 985.12 1 988 1",specularPower:"1",scalarOpacity:"12 -1000 0 -600 0 -599 0.15 -400 0.15 -399 0 2952 0",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"24 -1000 0.3 0.3 1 -600 0 0 1 -530 0.134704 0.781726 0.0724558 -460 0.929244 1 0.109473 -400 0.888889 0.254949 0.0240258 2952 1 0.3 0.3",diffuse:"1",interpolation:"1"},{name:"CT-MIP",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"8 -3024 0 -637.62 0 700 1 3071 1",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"16 -3024 0 0 0 -637.62 1 1 1 700 1 1 1 3071 1 1 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Muscle",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"10 -3024 0 -155.407 0 217.641 0.676471 419.736 0.833333 3071 0.803922",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"20 -3024 0 0 0 -155.407 0.54902 0.25098 0.14902 217.641 0.882353 0.603922 0.290196 419.736 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Pulmonary-Arteries",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"14 -2048 0 -568.625 0 -364.081 0.0714286 -244.813 0.401786 18.2775 0.607143 447.798 0.830357 3592.73 0.839286",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"28 -2048 0 0 0 -568.625 0 0 0 -364.081 0.396078 0.301961 0.180392 -244.813 0.611765 0.352941 0.0705882 18.2775 0.843137 0.0156863 0.156863 447.798 0.752941 0.752941 0.752941 3592.73 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Soft-Tissue",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"10 -2048 0 -167.01 0 -160 1 240 1 3661 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"20 -2048 0 0 0 -167.01 0 0 0 -160 0.0556356 0.0556356 0.0556356 240 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Air",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"8 -3024 0.705882 -900.0 0.715686 -500.0 0 3071 0",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"16 -3024 1 1 1 -900.0 0.2 1.0 1.0 -500.0 0.3 0.3 1.0 3071 0 0 0 ",diffuse:"0.9",interpolation:"1"},{name:"MR-Angio",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"12 -2048 0 151.354 0 158.279 0.4375 190.112 0.580357 200.873 0.732143 3661 0.741071",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"24 -2048 0 0 0 151.354 0 0 0 158.279 0.74902 0.376471 0 190.112 1 0.866667 0.733333 200.873 0.937255 0.937255 0.937255 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"MR-Default",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"12 0 0 20 0 40 0.15 120 0.3 220 0.375 1024 0.5",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"24 0 0 0 0 20 0.168627 0 0 40 0.403922 0.145098 0.0784314 120 0.780392 0.607843 0.380392 220 0.847059 0.835294 0.788235 1024 1 1 1",diffuse:"1",interpolation:"1"},{name:"MR-MIP",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"8 0 0 98.3725 0 416.637 1 2800 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"16 0 1 1 1 98.3725 1 1 1 416.637 1 1 1 2800 1 1 1",diffuse:"1",interpolation:"1"},{name:"MR-T2-Brain",gradientOpacity:"4 0 1 160.25 1",specularPower:"40",scalarOpacity:"10 0 0 36.05 0 218.302 0.171429 412.406 1 641 1",specular:"0.5",shade:"1",ambient:"0.3",colorTransfer:"16 0 0 0 0 98.7223 0.956863 0.839216 0.192157 412.406 0 0.592157 0.807843 641 1 1 1",diffuse:"0.6",interpolation:"1"},{name:"DTI-FA-Brain",gradientOpacity:"4 0 1 0.9950 1",specularPower:"40",scalarOpacity:"16 0 0 0 0 0.3501 0.0158 0.49379 0.7619 0.6419 1 0.9920 1 0.9950 0 0.9950 0",specular:"0.5",shade:"1",ambient:"0.3",colorTransfer:"28 0 1 0 0 0 1 0 0 0.24974 0.4941 1 0 0.49949 0 0.9882 1 0.7492 0.51764 0 1 0.9950 1 0 0 0.9950 1 0 0",diffuse:"0.9",interpolation:"1"}],ee={slicer3D:[160/255,164/255,217/255]};function te(e){return te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},te(e)}function ie(e,t,i){return(t=function(e){var t=function(e){if("object"!==te(e)||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var i=t.call(e,"string");if("object"!==te(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===te(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}const ne={},re={get:e=>ne[e],set:e=>{const t=e.id;ne[t]=e},delete:e=>delete ne[e],getAll:()=>{const e=Object.keys(ne).map((e=>ne[e]));return e.sort(((e,t)=>"_"===e.id[0]&&"_"!==t.id[0]?1:"_"!==e.id[0]&&"_"===t.id[0]?-1:0)),e}},ae=new class{constructor(){ie(this,"listeners",void 0),ie(this,"debouncedListeners",void 0),this.listeners={},this.debouncedListeners={}}reset(){this.listeners={},this.debouncedListeners={}}addEventListenerOnce(e,t){const i=n=>{this.removeEventListener(e,i),t.call(this,n)};this.addEventListener(e,i)}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),-1===this.listeners[e].indexOf(t)&&this.listeners[e].push(t)}addEventListenerDebounced(e,t,i){this.debouncedListeners[e]=this.debouncedListeners[e]||{};const n=this.debouncedListeners[e];if(!n[t]){const r=e=>{n[t]&&clearTimeout(n[t].timeoutId),n[t].timeoutId=setTimeout((()=>{t.call(this,e)}),i)};n[t]={original:t,handle:r,timeoutId:null},this.addEventListener(e,r)}}removeEventListenerDebounced(e,t){if(this.debouncedListeners[e]?.[t]){const i=this.debouncedListeners[e][t];this.removeEventListener(e,i.handle),clearTimeout(i.timeoutId),delete this.debouncedListeners[e][t]}}removeEventListener(e,t){if(!this.listeners[e])return;const i=this.listeners[e],n=i.length;for(let e=0;e<n;e++)if(i[e]===t)return void i.splice(e,1)}dispatchEvent(e){if(!this.listeners[e.type])return!e.defaultPrevented;const t=this.listeners[e.type].slice(),i=t.length;for(let n=0;n<i;n++)try{t[n].call(this,e)}catch(t){console.error(`error in event listener of type: ${e.type}`,t)}return!e.defaultPrevented}};function se(){return crypto.randomUUID()||([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)))}function oe(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ae,t=arguments.length>1?arguments[1]:void 0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!t)throw new Error("Event type was not defined");const n=new CustomEvent(t,{detail:i,cancelable:!0});return e?.dispatchEvent(n)}var le=K(197),ce=K.n(le),de=K(21),he=K.n(de),ue=K(643),ge=K.n(ue),me=K(128),pe=K.n(me),fe=K(664),ve=K.n(fe),Ie=K(973),we=K.n(Ie),Ce=K(394),Ee=K.n(Ce),ye=K(582),Re=K.n(ye),Pe=K(482),be=K.n(Pe),Te=K(343),Ae=K.n(Te),Se=K(363),Oe=K.n(Se),De=K(982),xe=K.n(De),Me=K(130),_e=K.n(Me),Ve=K(298),ke=K.n(Ve),Le=K(953),Ne=K.n(Le),Fe=K(398),Ue=K.n(Fe),Ge=K(388),je=K.n(Ge),We=K(120),Be=K.n(We),qe=K(395),ze=K(948),He=K(411),$e=K(785),Ke=K.n($e),Ye=K(478);const Ze={};function Xe(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ze,i),je().extend(e,t,i),t.scalarTexture=i.scalarTexture,t.previousState={},function(e,t){t.classHierarchy.push("vtkStreamingOpenGLVolumeMapper"),e.buildBufferObjects=(i,n)=>{const r=t.currentInput;if(!r)return;const a=n.getProperty();if(!t.jitterTexture.getHandle()){const e=new Uint8Array(1024);for(let t=0;t<1024;++t)e[t]=255*Math.random();t.jitterTexture.setMinificationFilter(qe.Filter.LINEAR),t.jitterTexture.setMagnificationFilter(qe.Filter.LINEAR),t.jitterTexture.create2DFromRaw(32,32,1,ze.VtkDataTypes.UNSIGNED_CHAR,e)}const{numberOfComponents:s}=r.get("numberOfComponents"),o=e.useIndependentComponents(a),l=a.getScalarOpacity(),c=t._openGLRenderWindow.getGraphicsResourceForObject(l);let d=(0,He.getTransferFunctionHash)(l,o,s);if(c?.oglObject&&c.hash===d)t.opacityTexture=c.oglObject;else{t.opacityTexture=Ne().newInstance(),t.opacityTexture.setOpenGLRenderWindow(t._openGLRenderWindow);const n=1024,r=2*n*s,o=new Float32Array(r),c=new Float32Array(n);for(let t=0;t<s;++t){const r=a.getScalarOpacity(t),s=e.getCurrentSampleDistance(i)/a.getScalarOpacityUnitDistance(t),l=r.getRange();r.getTable(l[0],l[1],n,c,1);for(let e=0;e<n;++e)o[t*n*2+e]=1-(1-c[e])**s,o[t*n*2+e+n]=o[t*n*2+e]}if(t.opacityTexture.resetFormatAndType(),t.opacityTexture.setMinificationFilter(qe.Filter.LINEAR),t.opacityTexture.setMagnificationFilter(qe.Filter.LINEAR),t._openGLRenderWindow.getWebgl2()||t.context.getExtension("OES_texture_float")&&t.context.getExtension("OES_texture_float_linear"))t.opacityTexture.create2DFromRaw(n,2*s,1,ze.VtkDataTypes.FLOAT,o);else{const e=new Uint8ClampedArray(r);for(let t=0;t<r;++t)e[t]=255*o[t];t.opacityTexture.create2DFromRaw(n,2*s,1,ze.VtkDataTypes.UNSIGNED_CHAR,e)}l&&(t._openGLRenderWindow.setGraphicsResourceForObject(l,t.opacityTexture,d),l!==t._scalarOpacityFunc&&(t._openGLRenderWindow.registerGraphicsResourceUser(l,e),t._openGLRenderWindow.unregisterGraphicsResourceUser(t._scalarOpacityFunc,e)),t._scalarOpacityFunc=l)}const h=a.getRGBTransferFunction();d=(0,He.getTransferFunctionHash)(h,o,s);const u=t._openGLRenderWindow.getGraphicsResourceForObject(h);if(u?.oglObject?.getHandle()&&u?.hash===d)t.colorTexture=u.oglObject;else{t.colorTexture=Ne().newInstance(),t.colorTexture.setOpenGLRenderWindow(t._openGLRenderWindow);const i=1024,n=new Uint8ClampedArray(2*i*s*3),r=new Float32Array(3*i);for(let e=0;e<s;++e){const t=a.getRGBTransferFunction(e),s=t.getRange();t.getTable(s[0],s[1],i,r,1);for(let t=0;t<3*i;++t)n[e*i*6+t]=255*r[t],n[e*i*6+t+3*i]=255*r[t]}t.colorTexture.resetFormatAndType(),t.colorTexture.setMinificationFilter(qe.Filter.LINEAR),t.colorTexture.setMagnificationFilter(qe.Filter.LINEAR),t.colorTexture.create2DFromRaw(i,2*s,3,ze.VtkDataTypes.UNSIGNED_CHAR,n),h&&(t._openGLRenderWindow.setGraphicsResourceForObject(h,t.colorTexture,d),h!==t._colorTransferFunc&&(t._openGLRenderWindow.registerGraphicsResourceUser(h,e),t._openGLRenderWindow.unregisterGraphicsResourceUser(t._colorTransferFunc,e)),t._colorTransferFunc=h)}if(e.updateLabelOutlineThicknessTexture(n),d=`${r.getMTime()}-${t.scalarTexture.getMTime()}`,t.scalarTextureString!==d){const e=r.getDimensions();t.scalarTexture.setOpenGLRenderWindow(t._openGLRenderWindow),t.scalarTexture.enableUseHalfFloat(!1);const i=t.scalarTexture.getTextureParameters(),n=r.get("dataType").dataType;let a=!0;if(i?.dataType===n&&i?.width===e[0]&&i?.height===e[1]&&i?.depth===e[2]&&(a=!1),a){const i=t.context.getExtension("EXT_texture_norm16");t.scalarTexture.setOglNorm16Ext(i),t.scalarTexture.resetFormatAndType(),t.scalarTexture.setTextureParameters({width:e[0],height:e[1],depth:e[2],numberOfComponents:s,dataType:n}),t.scalarTexture.create3DFromRaw(e[0],e[1],e[2],s,n,null),t.scalarTexture.update3DFromRaw()}else t.scalarTexture.deactivate(),t.scalarTexture.update3DFromRaw();t.scalarTextureString=d}if(!t.tris.getCABO().getElementCount()){const e=new Float32Array(12);for(let t=0;t<4;t++)e[3*t]=t%2*2-1,e[3*t+1]=t>1?1:-1,e[3*t+2]=-1;const i=new Uint16Array(8);i[0]=3,i[1]=0,i[2]=1,i[3]=3,i[4]=3,i[5]=0,i[6]=3,i[7]=2;const n=Ke().newInstance({numberOfComponents:3,values:e});n.setName("points");const r=Ke().newInstance({numberOfComponents:1,values:i});t.tris.getCABO().createVBO(r,"polys",Ye.Representation.SURFACE,{points:n,cellOffset:0})}t.VBOBuildTime.modified()},e.getNeedToRebuildBufferObjects=(i,n)=>t.VBOBuildTime.getMTime()<e.getMTime()||t.VBOBuildTime.getMTime()<n.getMTime()||t.VBOBuildTime.getMTime()<t.renderable.getMTime()||t.VBOBuildTime.getMTime()<n.getProperty().getMTime()||t.VBOBuildTime.getMTime()<t.currentInput.getMTime()||t.VBOBuildTime.getMTime()<t.scalarTexture?.getMTime()||t.VBOBuildTime.getMTime()<t.colorTexture?.getMTime()||t.VBOBuildTime.getMTime()<t.labelOutlineThicknessTexture?.getMTime()||!t.scalarTexture?.getHandle()||!t.colorTexture?.getHandle()||!t.labelOutlineThicknessTexture?.getHandle()}(e,t)}const Je={newInstance:ce().newInstance(Xe,"vtkStreamingOpenGLVolumeMapper"),extend:Xe},Qe=Object.create(null);function et(e,t){Qe[e]=t}const tt={};function it(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,tt,i),Be().extend(e,t,i),function(e,t){t.classHierarchy.push("vtkStreamingOpenGLViewNodeFactory"),e.createNode=i=>{if(i.isDeleted())return null;let n=0,r=i.getClassName(n++),a=!1;const s=Object.keys(t.overrides);for(;r&&!a;)s.includes(r)?a=!0:r=i.getClassName(n++);if(!a)return null;const o=t.getModelInitialValues(i),l=t.overrides[r](o);return l.setMyFactory(e),l},t.overrides=Qe,t.getModelInitialValues=e=>{const t={};return"vtkSharedVolumeMapper"===e.getClassName()&&(t.scalarTexture=e.getScalarTexture()),t}}(e,t),et("vtkActor",ge().newInstance),et("vtkActor2D",pe().newInstance),et("vtkCamera",ve().newInstance),et("vtkGlyph3DMapper",we().newInstance),et("vtkImageMapper",Ee().newInstance),et("vtkImageSlice",Re().newInstance),et("vtkMapper",Ae().newInstance),et("vtkPixelSpaceCallbackMapper",be().newInstance),et("vtkRenderer",Oe().newInstance),et("vtkSkybox",xe().newInstance),et("vtkSphereMapper",_e().newInstance),et("vtkStickMapper",ke().newInstance),et("vtkTexture",Ne().newInstance),et("vtkVolume",Ue().newInstance),et("vtkVolumeMapper",je().newInstance),et("vtkSharedVolumeMapper",Je.newInstance)}const nt={newInstance:ce().newInstance(it,"vtkStreamingOpenGLViewNodeFactory"),extend:it};function rt(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,i),he().extend(e,t,i),t.myFactory=nt.newInstance(),et("vtkRenderWindow",at),function(e,t){t.classHierarchy.push("vtkStreamingOpenGLRenderWindow")}(0,t)}const at=ce().newInstance(rt,"vtkStreamingOpenGLRenderWindow"),st={newInstance:at,extend:rt};var ot=K(281),lt=K.n(ot),ct=K(329),dt=K.n(ct),ht=K(673),ut=K.n(ht);K(348),K(70),K(474),K(610);const gt={background:[0,0,0],container:null};function mt(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,gt,i),ce().obj(e,t),ce().get(e,t,["renderWindow","openGLRenderWindow","interactor","container"]),ce().event(e,t,"resize"),function(e,t){const i=e.invokeResize;delete e.invokeResize,t.renderWindow=dt().newInstance(),t.rendererMap={},t.openGLRenderWindow=st.newInstance(),t.renderWindow.addView(t.openGLRenderWindow),t.interactor=ut().newInstance(),t.interactor.setView(t.openGLRenderWindow),t.interactor.initialize(),e.addRenderer=e=>{let{viewport:i,id:n,background:r}=e;const a=lt().newInstance({viewport:i,background:r||t.background});t.renderWindow.addRenderer(a),t.rendererMap[n]=a},e.destroy=()=>{t.renderWindow.getInteractor().delete()},e.removeRenderer=i=>{const n=e.getRenderer(i);t.renderWindow.removeRenderer(n),n.delete(),delete t.rendererMap[i]},e.getRenderer=e=>t.rendererMap[e],e.getRenderers=()=>{const{rendererMap:e}=t;return Object.keys(e).map((t=>({id:t,renderer:e[t]})))},e.resize=()=>{if(t.container){const{width:e,height:n}=t.container;t.openGLRenderWindow.setSize(Math.floor(e),Math.floor(n)),i(),t.renderWindow.render()}},e.setContainer=e=>{t.container=e,t.openGLRenderWindow.setContainer(t.container)},e.delete=ce().chain(e.setContainer,e.destroy,t.openGLRenderWindow.delete,e.delete),e.resize()}(e,t)}const pt={newInstance:ce().newInstance(mt),extend:mt};var ft=K(976),vt=K(864),It=K.n(vt);function wt(e){const t=e.indexOf(":");return e.substring(t+1)}const Ct=new class{constructor(){ie(this,"_imageCache",new Map),ie(this,"_volumeCache",new Map),ie(this,"_geometryCache",new Map),ie(this,"_imageCacheSize",0),ie(this,"_maxCacheSize",3221225472),ie(this,"setMaxCacheSize",(e=>{if(!e||"number"!=typeof e){const e=`New max cacheSize ${this._maxCacheSize} should be defined and should be a number.`;throw new Error(e)}this._maxCacheSize=e})),ie(this,"isCacheable",(e=>this.getBytesAvailable()+Array.from(this._imageCache.values()).reduce(((e,t)=>t.sharedCacheKey?e:e+t.sizeInBytes),0)>=e)),ie(this,"getMaxCacheSize",(()=>this._maxCacheSize)),ie(this,"getCacheSize",(()=>this._imageCacheSize)),ie(this,"_decacheImage",(e=>{const t=this._imageCache.get(e);if(!t)return;if(t.sharedCacheKey)throw new Error("Cannot decache an image with a shared cache key. You need to manually decache the volume first.");const{imageLoadObject:i}=t;i.cancelFn&&i.cancelFn(),i.decache&&i.decache(),this._imageCache.delete(e)})),ie(this,"_decacheVolume",(e=>{const t=this._volumeCache.get(e);if(!t)return;const{volumeLoadObject:i,volume:n}=t;n&&(n.cancelLoading&&n.cancelLoading(),n.imageData&&n.imageData.delete(),i.cancelFn&&i.cancelFn(),n.imageIds&&n.imageIds.forEach((t=>{const i=this._imageCache.get(t);i&&i.sharedCacheKey===e&&(i.sharedCacheKey=void 0)})),this._volumeCache.delete(e))})),ie(this,"purgeCache",(()=>{const e=this._imageCache.keys();for(this.purgeVolumeCache();;){const{value:t,done:i}=e.next();if(i)break;this.removeImageLoadObject(t),oe(ae,p.IMAGE_CACHE_IMAGE_REMOVED,{imageId:t})}})),ie(this,"purgeVolumeCache",(()=>{const e=this._volumeCache.keys();for(;;){const{value:t,done:i}=e.next();if(i)break;this.removeVolumeLoadObject(t),oe(ae,p.VOLUME_CACHE_VOLUME_REMOVED,{volumeId:t})}})),ie(this,"getVolumeLoadObject",(e=>{if(void 0===e)throw new Error("getVolumeLoadObject: volumeId must not be undefined");const t=this._volumeCache.get(e);if(t)return t.timeStamp=Date.now(),t.volumeLoadObject})),ie(this,"getGeometry",(e=>{if(null==e)throw new Error("getGeometry: geometryId must not be undefined");const t=this._geometryCache.get(e);if(t)return t.timeStamp=Date.now(),t.geometry})),ie(this,"getImage",(e=>{if(void 0===e)throw new Error("getImage: imageId must not be undefined");const t=this._imageCache.get(e);if(t)return t.timeStamp=Date.now(),t.image})),ie(this,"getVolume",(e=>{if(void 0===e)throw new Error("getVolume: volumeId must not be undefined");const t=this._volumeCache.get(e);if(t)return t.timeStamp=Date.now(),t.volume})),ie(this,"getVolumes",(()=>Array.from(this._volumeCache.values()).map((e=>e.volume)))),ie(this,"filterVolumesByReferenceId",(e=>this.getVolumes().filter((t=>t.referencedVolumeId===e)))),ie(this,"removeImageLoadObject",(e=>{if(void 0===e)throw new Error("removeImageLoadObject: imageId must not be undefined");const t=this._imageCache.get(e);if(!t)throw new Error("removeImageLoadObject: imageId was not present in imageCache");this.incrementImageCacheSize(-t.sizeInBytes);const i={image:t,imageId:e};oe(ae,p.IMAGE_CACHE_IMAGE_REMOVED,i),this._decacheImage(e)})),ie(this,"removeVolumeLoadObject",(e=>{if(void 0===e)throw new Error("removeVolumeLoadObject: volumeId must not be undefined");const t=this._volumeCache.get(e);if(!t)throw new Error("removeVolumeLoadObject: volumeId was not present in volumeCache");const i={volume:t,volumeId:e};oe(ae,p.VOLUME_CACHE_VOLUME_REMOVED,i),this._decacheVolume(e)})),ie(this,"putGeometryLoadObject",((e,t)=>{if(null==e)throw new Error("putGeometryLoadObject: geometryId must not be undefined");if(this._geometryCache.has(e))throw new Error("putGeometryLoadObject: geometryId already present in geometryCache");const i={geometryId:e,geometryLoadObject:t,loaded:!1,timeStamp:Date.now(),sizeInBytes:0};return this._geometryCache.set(e,i),t.promise.then((t=>{if(!this._geometryCache.has(e))return void console.warn("putGeometryLoadObject: geometryId was removed from geometryCache");if(Number.isNaN(t.sizeInBytes))throw new Error("putGeometryLoadObject: geometry.sizeInBytes is not a number");i.loaded=!0,i.geometry=t,i.sizeInBytes=t.sizeInBytes;const n={geometry:t,geometryId:e};oe(ae,p.GEOMETRY_CACHE_GEOMETRY_ADDED,n)})).catch((t=>{throw this._geometryCache.delete(e),t}))})),ie(this,"incrementImageCacheSize",(e=>{this._imageCacheSize+=e})),ie(this,"decrementImageCacheSize",(e=>{this._imageCacheSize-=e}))}getBytesAvailable(){return this.getMaxCacheSize()-this.getCacheSize()}decacheIfNecessaryUntilBytesAvailable(e,t){let i=this.getBytesAvailable();if(i>=e)return i;const n=Array.from(this._imageCache.values()).filter((e=>!e.sharedCacheKey));n.sort((function(e,t){return e.timeStamp>t.timeStamp?1:e.timeStamp<t.timeStamp?-1:0}));const r=n.map((e=>e.imageId));let a=r;t&&(a=r.filter((e=>!t.includes(e))));for(const t of a)if(this.removeImageLoadObject(t),oe(ae,p.IMAGE_CACHE_IMAGE_REMOVED,{imageId:t}),i=this.getBytesAvailable(),i>=e)return i;for(const t of r)if(this.removeImageLoadObject(t),oe(ae,p.IMAGE_CACHE_IMAGE_REMOVED,{imageId:t}),i=this.getBytesAvailable(),i>=e)return i}_putImageCommon(e,t,i){if(!this._imageCache.get(e))return void console.warn("The image was purged from the cache before it completed loading.");if(void 0===t.sizeInBytes||Number.isNaN(t.sizeInBytes))throw new Error("_putImageCommon: image.sizeInBytes must not be undefined");if(void 0===t.sizeInBytes.toFixed)throw new Error("_putImageCommon: image.sizeInBytes is not a number");if(!this.isCacheable(t.sizeInBytes))throw new Error(p.CACHE_SIZE_EXCEEDED);this.decacheIfNecessaryUntilBytesAvailable(t.sizeInBytes),i.loaded=!0,i.image=t,i.sizeInBytes=t.sizeInBytes,this.incrementImageCacheSize(i.sizeInBytes);const n={image:i};oe(ae,p.IMAGE_CACHE_IMAGE_ADDED,n),i.sharedCacheKey=t.sharedCacheKey}async putImageLoadObject(e,t){if(void 0===e)throw console.error("putImageLoadObject: imageId must not be undefined"),new Error("putImageLoadObject: imageId must not be undefined");if(void 0===t.promise)throw console.error("putImageLoadObject: imageLoadObject.promise must not be undefined"),new Error("putImageLoadObject: imageLoadObject.promise must not be undefined");if(this._imageCache.has(e))throw console.warn(`putImageLoadObject: imageId ${e} already in cache`),new Error("putImageLoadObject: imageId already in cache");if(t.cancelFn&&"function"!=typeof t.cancelFn)throw console.error("putImageLoadObject: imageLoadObject.cancel must be a function"),new Error("putImageLoadObject: imageLoadObject.cancel must be a function");const i={loaded:!1,imageId:e,sharedCacheKey:void 0,imageLoadObject:t,timeStamp:Date.now(),sizeInBytes:0};return this._imageCache.set(e,i),this._imageCache.set(e,i),t.promise.then((t=>{try{this._putImageCommon(e,t,i)}catch(t){throw console.debug(`Error in _putImageCommon for image ${e}:`,t),t}})).catch((t=>{throw console.debug(`Error caching image ${e}:`,t),this._imageCache.delete(e),t}))}putImageSync(e,t){if(void 0===e)throw new Error("putImageSync: imageId must not be undefined");if(this._imageCache.has(e))throw new Error("putImageSync: imageId already in cache");const i={loaded:!1,imageId:e,sharedCacheKey:void 0,imageLoadObject:{promise:Promise.resolve(t)},timeStamp:Date.now(),sizeInBytes:0};this._imageCache.set(e,i);try{this._putImageCommon(e,t,i)}catch(t){throw this._imageCache.delete(e),t}}getImageLoadObject(e){if(void 0===e)throw new Error("getImageLoadObject: imageId must not be undefined");const t=this._imageCache.get(e);if(t)return t.timeStamp=Date.now(),t.imageLoadObject}isLoaded(e){const t=this._imageCache.get(e);return!!t&&t.loaded}getVolumeContainingImageId(e){const t=Array.from(this._volumeCache.keys()),i=wt(e);for(const e of t){const t=this._volumeCache.get(e);if(!t)return;const{volume:n}=t;if(!n.imageIds.length)return;const r=n.getImageURIIndex(i);if(r>-1)return{volume:n,imageIdIndex:r}}}getCachedImageBasedOnImageURI(e){const t=wt(e),i=Array.from(this._imageCache.keys()).find((e=>wt(e)===t));if(i)return this._imageCache.get(i)}_putVolumeCommon(e,t,i){if(!this._volumeCache.get(e))return void console.warn("The volume was purged from the cache before it completed loading.");i.loaded=!0,i.volume=t,t.imageIds?.forEach((t=>{const i=this._imageCache.get(t);i&&(i.sharedCacheKey=e)}));const n={volume:i};oe(ae,p.VOLUME_CACHE_VOLUME_ADDED,n)}putVolumeSync(e,t){if(void 0===e)throw new Error("putVolumeSync: volumeId must not be undefined");if(this._volumeCache.has(e))throw new Error("putVolumeSync: volumeId already in cache");const i={loaded:!1,volumeId:e,volumeLoadObject:{promise:Promise.resolve(t)},timeStamp:Date.now(),sizeInBytes:0};this._volumeCache.set(e,i);try{this._putVolumeCommon(e,t,i)}catch(t){throw this._volumeCache.delete(e),t}}async putVolumeLoadObject(e,t){if(void 0===e)throw new Error("putVolumeLoadObject: volumeId must not be undefined");if(void 0===t.promise)throw new Error("putVolumeLoadObject: volumeLoadObject.promise must not be undefined");if(this._volumeCache.has(e))throw new Error(`putVolumeLoadObject: volumeId:${e} already in cache`);if(t.cancelFn&&"function"!=typeof t.cancelFn)throw new Error("putVolumeLoadObject: volumeLoadObject.cancel must be a function");const i={loaded:!1,volumeId:e,volumeLoadObject:t,timeStamp:Date.now(),sizeInBytes:0};return this._volumeCache.set(e,i),t.promise.then((t=>{try{this._putVolumeCommon(e,t,i)}catch(t){throw console.error(`Error in _putVolumeCommon for volume ${e}:`,t),this._volumeCache.delete(e),t}})).catch((t=>{throw this._volumeCache.delete(e),t}))}};function Et(e){return yt(e,"vtkVolume")||yt(e,"vtkImageSlice")}function yt(e,t){return!!("isA"in e?e:e.actor).isA(t)}const Rt=[];function Pt(e){let t,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;for(t=0;t<Rt.length&&!(Rt[t].priority<=i);t++);Rt.splice(t,0,{priority:i,provider:e})}function bt(e){for(let t=0;t<Rt.length;t++)if(Rt[t].provider===e){Rt.splice(t,1);break}}function Tt(){for(;Rt.length>0;)Rt.pop()}function At(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];for(let t=0;t<Rt.length;t++){const n=Rt[t].provider(e,...i);if(void 0!==n)return n}}function St(e,t){const{direction:i,spacing:n}=e,r=i.slice(0,3),a=i.slice(3,6),s=i.slice(6,9),o=[ft.vec3.dot(r,t),ft.vec3.dot(a,t),ft.vec3.dot(s,t)],l=ft.vec3.create();return ft.vec3.set(l,o[0]*n[0],o[1]*n[1],o[2]*n[2]),ft.vec3.length(l)}function Ot(e,t,i){if(!e)return;const{direction:n,imageIds:r}=e;if(!r.length)return;const a=n.slice(6,9),s=ft.vec3.dot(a,i);if(Math.abs(s)<1-X)return;const o=St(e,i)/2;let l;for(let e=0;e<r.length;e++){const n=r[e],{imagePositionPatient:a}=At("imagePlaneModule",n),s=ft.vec3.create();ft.vec3.sub(s,t,a);const c=ft.vec3.dot(s,i);Math.abs(c)<o&&(l=n)}return l}var Dt=K(847),xt=K.n(Dt);function Mt(e){const t=e.getMapper().getInputData(),i=t.extentToBounds(t.getExtent());return[[i[0],i[2],i[4]],[i[0],i[2],i[5]],[i[0],i[3],i[4]],[i[0],i[3],i[5]],[i[1],i[2],i[4]],[i[1],i[2],i[5]],[i[1],i[3],i[4]],[i[1],i[3],i[5]]]}const _t=X*X,Vt=e=>Math.abs(Math.abs(e)-1)<_t,kt=(e,t)=>Vt(e[t])||Vt(e[t+1])||Vt(e[t+2]),Lt=e=>kt(e,0)&&kt(e,3)&&kt(e,6);function Nt(e,t,i){const n=e.getMapper().getInputData();let r;const a=n.getDirection();if(Lt(a))r=Mt(e);else{const[e,t,i]=n.getDimensions();r=[[0,0,0],[e-1,0,0],[0,t-1,0],[e-1,t-1,0],[0,0,i-1],[e-1,0,i-1],[0,t-1,i-1],[e-1,t-1,i-1]].map((e=>n.indexToWorld(e)))}const s=xt().buildFromDegree().identity().rotateFromDirections(t,[1,0,0]);r.forEach((e=>s.apply(e)));const o=[...i];s.apply(o);const l=o[0];let c=1/0,d=-1/0;for(let e=0;e<8;e++){const t=r[e][0];t>d&&(d=t),t<c&&(c=t)}return{min:c,max:d,current:l,actor:e,viewPlaneNormal:t,focalPoint:i}}function Ft(e,t,i,n,r,a){const{min:s,max:o,current:l}=i,c=ft.vec3.create();ft.vec3.sub(c,t,e);const d=Math.round((o-s)/r),h=(l-s)/(o-s)*d;let u=Math.round(h),g=[e[0]-n[0]*h*r,e[1]-n[1]*h*r,e[2]-n[2]*h*r];u+=a,u>d?u=d:u<0&&(u=0);const m=u*r;return g=[g[0]+n[0]*m,g[1]+n[1]*m,g[2]+n[2]*m],{newFocalPoint:g,newPosition:[g[0]+c[0],g[1]+c[1],g[2]+c[2]]}}var Ut=K(795),Gt=K.n(Ut),jt=K(38),Wt=K.n(jt),Bt=K(441),qt=K.n(Bt);function zt(e){return re.get(e)}function Ht(){return re.getAll()}const $t=zt,Kt=e=>e&&"object"==typeof e&&"[object RegExp]"!==Object.prototype.toString.call(e)&&"[object Date]"!==Object.prototype.toString.call(e),Yt=(e,t)=>{return t&&!0===t.clone&&Kt(e)?Xt((i=e,Array.isArray(i)?[]:{}),e,t):e;var i},Zt=(e,t,i)=>{const n=e.slice();return t.forEach((function(t,r){void 0===n[r]?n[r]=Yt(t,i):Kt(t)?n[r]=Xt(e[r],t,i):-1===e.indexOf(t)&&(n[r]=Yt(t,i))})),n},Xt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;const n=Array.isArray(t),r=(i||{arrayMerge:Zt}).arrayMerge||Zt;return n?Array.isArray(e)?r(e,t,i):Yt(t,i):((e,t,i)=>{const n={};return Kt(e)&&Object.keys(e).forEach((function(t){n[t]=Yt(e[t],i)})),Object.keys(t).forEach((function(r){Kt(t[r])&&e[r]?n[r]=Xt(e[r],t[r],i):n[r]=Yt(t[r],i)})),n})(e,t,i)},Jt=Xt,Qt=Symbol("Comlink.proxy"),ei=Symbol("Comlink.endpoint"),ti=Symbol("Comlink.releaseProxy"),ii=Symbol("Comlink.finalizer"),ni=Symbol("Comlink.thrown"),ri=e=>"object"==typeof e&&null!==e||"function"==typeof e,ai=new Map([["proxy",{canHandle:e=>ri(e)&&e[Qt],serialize(e){const{port1:t,port2:i}=new MessageChannel;return si(e,t),[i,[i]]},deserialize:e=>(e.start(),li(e))}],["throw",{canHandle:e=>ri(e)&&ni in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function si(e,t=globalThis,i=["*"]){t.addEventListener("message",(function n(r){if(!r||!r.data)return;if(!function(e,t){for(const i of e){if(t===i||"*"===i)return!0;if(i instanceof RegExp&&i.test(t))return!0}return!1}(i,r.origin))return void console.warn(`Invalid origin '${r.origin}' for comlink proxy`);const{id:a,type:s,path:o}=Object.assign({path:[]},r.data),l=(r.data.argumentList||[]).map(Ii);let c;try{const t=o.slice(0,-1).reduce(((e,t)=>e[t]),e),i=o.reduce(((e,t)=>e[t]),e);switch(s){case"GET":c=i;break;case"SET":t[o.slice(-1)[0]]=Ii(r.data.value),c=!0;break;case"APPLY":c=i.apply(t,l);break;case"CONSTRUCT":c=fi(new i(...l));break;case"ENDPOINT":{const{port1:t,port2:i}=new MessageChannel;si(e,i),c=function(e,t){return pi.set(e,t),e}(t,[t])}break;case"RELEASE":c=void 0;break;default:return}}catch(e){c={value:e,[ni]:0}}Promise.resolve(c).catch((e=>({value:e,[ni]:0}))).then((i=>{const[r,o]=vi(i);t.postMessage(Object.assign(Object.assign({},r),{id:a}),o),"RELEASE"===s&&(t.removeEventListener("message",n),oi(t),ii in e&&"function"==typeof e[ii]&&e[ii]())})).catch((e=>{const[i,n]=vi({value:new TypeError("Unserializable return value"),[ni]:0});t.postMessage(Object.assign(Object.assign({},i),{id:a}),n)}))})),t.start&&t.start()}function oi(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function li(e,t){return gi(e,[],t)}function ci(e){if(e)throw new Error("Proxy has been released and is not useable")}function di(e){return wi(e,{type:"RELEASE"}).then((()=>{oi(e)}))}const hi=new WeakMap,ui="FinalizationRegistry"in globalThis&&new FinalizationRegistry((e=>{const t=(hi.get(e)||0)-1;hi.set(e,t),0===t&&di(e)}));function gi(e,t=[],i=function(){}){let n=!1;const r=new Proxy(i,{get(i,a){if(ci(n),a===ti)return()=>{!function(e){ui&&ui.unregister(e)}(r),di(e),n=!0};if("then"===a){if(0===t.length)return{then:()=>r};const i=wi(e,{type:"GET",path:t.map((e=>e.toString()))}).then(Ii);return i.then.bind(i)}return gi(e,[...t,a])},set(i,r,a){ci(n);const[s,o]=vi(a);return wi(e,{type:"SET",path:[...t,r].map((e=>e.toString())),value:s},o).then(Ii)},apply(i,r,a){ci(n);const s=t[t.length-1];if(s===ei)return wi(e,{type:"ENDPOINT"}).then(Ii);if("bind"===s)return gi(e,t.slice(0,-1));const[o,l]=mi(a);return wi(e,{type:"APPLY",path:t.map((e=>e.toString())),argumentList:o},l).then(Ii)},construct(i,r){ci(n);const[a,s]=mi(r);return wi(e,{type:"CONSTRUCT",path:t.map((e=>e.toString())),argumentList:a},s).then(Ii)}});return function(e,t){const i=(hi.get(t)||0)+1;hi.set(t,i),ui&&ui.register(e,t,e)}(r,e),r}function mi(e){const t=e.map(vi);return[t.map((e=>e[0])),(i=t.map((e=>e[1])),Array.prototype.concat.apply([],i))];var i}const pi=new WeakMap;function fi(e){return Object.assign(e,{[Qt]:!0})}function vi(e){for(const[t,i]of ai)if(i.canHandle(e)){const[n,r]=i.serialize(e);return[{type:"HANDLER",name:t,value:n},r]}return[{type:"RAW",value:e},pi.get(e)||[]]}function Ii(e){switch(e.type){case"HANDLER":return ai.get(e.name).deserialize(e.value);case"RAW":return e.value}}function wi(e,t,i){return new Promise((n=>{const r=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");e.addEventListener("message",(function t(i){i.data&&i.data.id&&i.data.id===r&&(e.removeEventListener("message",t),n(i.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:r},t),i)}))}class Ci{constructor(e){ie(this,"id",void 0),ie(this,"awake",void 0),ie(this,"requestPool",void 0),ie(this,"numRequests",{interaction:0,thumbnail:0,prefetch:0,compute:0}),ie(this,"maxNumRequests",void 0),ie(this,"grabDelay",void 0),ie(this,"timeoutHandle",void 0),this.id=e||se(),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,i){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const r={requestFn:e,type:t,additionalDetails:i};void 0===this.requestPool[t][n]&&(this.requestPool[t][n]=[]),this.requestPool[t][n].push(r),this.startGrabbing()}filterRequests(e){Object.keys(this.requestPool).forEach((t=>{const i=this.requestPool[t];Object.keys(i).forEach((t=>{i[t]=i[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 i=0;for(let n=0;n<t;n++){const t=this.getNextRequest(e);if(null===t)return!1;if(t){let n;this.numRequests[e]++,this.awake=!0;try{n=t.requestFn()}catch(e){console.warn("sendRequest failed",e)}n?.finally?n.finally((()=>{this.numRequests[e]--,this.startAgain()})):(this.numRequests[e]--,i++)}}return i&&this.startAgain(),!0}getNextRequest(e){const t=this.getSortedPriorityGroups(e);for(const i of t)if(this.requestPool[e][i].length)return this.requestPool[e][i].shift();return null}startGrabbing(){const e=this.sendRequests(v.Interaction),t=this.sendRequests(v.Thumbnail),i=this.sendRequests(v.Prefetch),n=this.sendRequests(v.Compute);e||t||i||n||(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}}const Ei=class{constructor(){this.workerRegistry={},this.workerPoolManager=new Ci("webworker")}registerWorker(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{maxWorkerInstances:n=1,overwrite:r=!1,autoTerminateOnIdle:a={enabled:!1,idleTimeThreshold:3e3}}=i;if(this.workerRegistry[e]&&!r)return void console.warn(`Worker type '${e}' is already registered...`);r&&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(n).fill(0),s.lastActiveTime=Array(n).fill(null);for(let e=0;e<n;e++){const e=t();s.instances.push(li(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 i=t.instances.filter((e=>null!==e));let n=0,r=t.loadCounters[0]||0;for(let e=1;e<i.length;e++){const i=t.loadCounters[e]||0;i<r&&(n=e,r=i)}if(null===t.instances[n]){const e=t.workerFn();t.instances[n]=li(e),t.nativeWorkers[n]=e}return t.loadCounters[n]+=1,{api:t.instances[n],index:n}}executeTask(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{requestType:n=v.Compute,priority:r=0,options:a={},callbacks:s=[]}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return new Promise(((o,l)=>{this.workerPoolManager.addRequest((async()=>{const{api:n,index:r}=this.getNextWorkerAPI(e);if(!n){const t=new Error(`No available worker instance for '${e}'`);return console.error(t),void l(t)}try{let a=[];s.length&&(a=s.map((e=>fi(e))));const l=this.workerRegistry[e];l.processing=!0;const c=await n[t](i,...a);l.processing=!1,l.lastActiveTime[r]=Date.now(),l.autoTerminateOnIdle&&!l.idleCheckIntervalId&&l.idleTimeThreshold&&(l.idleCheckIntervalId=setInterval((()=>{this.terminateIdleWorkers(e,l.idleTimeThreshold)}),l.idleTimeThreshold)),o(c)}catch(i){console.error(`Error executing method '${t}' on worker '${e}':`,i),l(i)}finally{this.workerRegistry[e].loadCounters[r]--}}),n,a,r)}))}terminateIdleWorkers(e,t){const i=this.workerRegistry[e];if(i.processing)return;const n=Date.now();i.instances.forEach(((r,a)=>{const s=i.lastActiveTime[a];!(null!==s&&i.loadCounters[a]>0)&&n-s>t&&this.terminateWorkerInstance(e,a)}))}terminate(e){const t=this.workerRegistry[e];t?t.instances.forEach(((t,i)=>{this.terminateWorkerInstance(e,i)})):console.error(`Worker type '${e}' is not registered.`)}terminateWorkerInstance(e,t){const i=this.workerRegistry[e],n=i.instances[t];null!==n&&(n[ti](),i.nativeWorkers[t].terminate(),i.instances[t]=null,i.lastActiveTime[t]=null)}};let yi=!1;const Ri={gpuTier:{tier:2},isMobile:!1,rendering:{useCPURendering:!1,preferSizeOverAccuracy:!1,useNorm16Texture:!1,strictZSpacingForVolumeViewport:!0},peerImport:e=>null};let Pi={...Ri,rendering:{...Ri.rendering}},bi=null;function Ti(){const e=document.createElement("canvas");return e.getContext("webgl2")||e.getContext("webgl")||e.getContext("experimental-webgl")}function Ai(){const e=Ti();return e instanceof WebGLRenderingContext||e instanceof WebGL2RenderingContext}function Si(){return!!/iPad|iPhone|iPod/.test(navigator.platform)||navigator.maxTouchPoints&&navigator.maxTouchPoints>2&&navigator.platform.includes("MacIntel")}function Oi(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Pi;return yi||(Pi=Jt(Ri,e),Si()&&(Pi.rendering.useNorm16Texture=function(){const e=Ti();return!(!e||!e.getExtension("EXT_texture_norm16"))}(),Pi.rendering.useNorm16Texture||(e.rendering.preferSizeOverAccuracy?Pi.rendering.preferSizeOverAccuracy=!0:console.log("norm16 texture not supported, you can turn on the preferSizeOverAccuracy flag to use native data type, but be aware of the inaccuracy of the rendering in high bits"))),Ai()?console.log("CornerstoneRender: using GPU rendering"):(console.log("CornerstoneRender: GPU not detected, using CPU rendering"),Pi.rendering.useCPURendering=!0),yi=!0,bi||(bi=new Ei),yi)}function Di(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];Pi.rendering.useCPURendering=e,yi=!0,t&&Fi()}function xi(e){Pi.rendering.preferSizeOverAccuracy=e,yi=!0,Fi()}function Mi(){return!Si()}function _i(){Pi.rendering.useCPURendering=!Ai(),Fi()}function Vi(){return Pi.rendering.useCPURendering}function ki(){return yi}function Li(){return Pi}function Ni(e){Pi=e,Fi()}function Fi(){Ht().forEach((e=>{e.getViewports().forEach((e=>{e.updateRenderingPipeline()}))}))}function Ui(){return bi||(bi=new Ei),bi}function Gi(e){return Pi.peerImport(e)}function ji(e,t,i){return Math.abs(e-t)<=i}function Wi(e){return"number"==typeof e}function Bi(e){return e&&"object"==typeof e&&"length"in e&&"number"==typeof e.length&&e.length>0&&"number"==typeof e[0]}function qi(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e-5;return typeof e==typeof t&&null!==e&&null!==t&&(Wi(e)&&Wi(t)?ji(e,t,i):!(!Bi(e)||!Bi(t))&&function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e-5;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!ji(e[n],t[n],i))return!1;return!0}(e,t,i))}const zi=e=>"number"==typeof e?-e:e?.map?e.map(zi):!e,Hi=e=>"number"==typeof e?Math.abs(e):e?.map?e.map(Hi):e,$i=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;return qi(e,zi(t),i)},Ki=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;return qi(Hi(e),Hi(t),i)},Yi=new Map;function Zi(e){Yi.set(e.Name,e)}function Xi(e){return Yi.get(e)}function Ji(){return Array.from(Yi.keys())}function Qi(e,t){const i=Wt().rgbPresetNames.map((e=>Wt().getPresetByName(e))),n=Ji().map((e=>Xi(e))),r=i.concat(n).find((t=>{const{RGBPoints:i}=t;if(i.length!==e.length)return!1;for(let t=0;t<i.length;t+=4)if(!qi(i.slice(t+1,t+4),e.slice(t+1,t+4)))return!1;return!0}));if(!r)return null;const a=[];if(yt(t,"vtkVolume")){const e=t.getProperty().getScalarOpacity(0).getDataPointer();if(!e)return{name:r.Name};for(let t=0;t<e.length;t+=2)a.push({value:e[t],opacity:e[t+1]})}return{name:r.Name,opacity:a}}function en(e){if(!e)return;const t=e.getSize();for(let i=0;i<t;i++){const t=[];e.getNodeValue(i,t),t[1]=1-t[1],t[2]=1-t[2],t[3]=1-t[3],e.setNodeValue(i,t)}}function tn(e,t){return{windowWidth:Math.abs(t-e)+1,windowCenter:(e+t+1)/2}}function nn(e,t){return{lower:t-.5-(e-1)/2,upper:t-.5+(e-1)/2}}function rn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1024;const{windowWidth:i,windowCenter:n}=tn(e.lower,e.upper),r=Array.from({length:t},((e,i)=>(i+1)/(t+2))).flatMap((e=>{const t=((e,t,i)=>t-i/4*Math.log((1-e)/e))(e,n,i);return[t,e,e,e,.5,0]})),a=Gt().newInstance();return a.buildFunctionFromArray(Ke().newInstance({values:r,numberOfComponents:6})),a}function an(e,t){return e.worldToIndex(t).map(Math.round)}function sn(e){const t=e.getSize(),i=[];for(let n=0;n<t;n++){const t=[];e.getNodeValue(n,t),i.push(t)}return i}function on(e,t){t?.length&&(e.removeAllPoints(),t.forEach((t=>{e.addRGBPoint(...t)})))}var ln=K(739),cn=K.n(ln),dn=(K(215),K(283)),hn=K.n(dn);class un{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;ie(this,"rows",new Map),ie(this,"height",1),ie(this,"width",1),ie(this,"depth",1),ie(this,"jMultiple",1),ie(this,"kMultiple",1),ie(this,"numberOfComponents",1),ie(this,"defaultValue",0),ie(this,"pixelDataConstructor",Uint8Array),ie(this,"get",(e=>{const t=e%this.jMultiple,i=(e-t)/this.jMultiple;return this.getRLE(t,i).value||this.defaultValue})),ie(this,"getRun",((e,t)=>{const i=e+t*this.height;return this.rows.get(i)})),ie(this,"set",((e,t)=>{if(void 0===t)throw new Error("Can't set undefined at "+e%this.width);const i=e%this.width,n=(e-i)/this.width,r=this.rows.get(n);if(!r)return void this.rows.set(n,[{start:i,end:i+1,value:t}]);const a=this.findIndex(r,i),s=r[a],o=r[a-1];if(!s)return o&&o.value===t&&o.end===i?void o.end++:void(r[a]={start:i,end:i+1,value:t});const{start:l,end:c,value:d}=s;if(t===d&&i>=l)return;const h={start:i,end:i+1,value:t},u=i>l,g=u?a+1:a,m=u?s:o;let p=u?r[a+1]:s;if(m.value===t&&m.end===i)return m.end++,void(p.value===t&&p.start===i+1?(m.end=p.end,r.splice(a,1)):p.start===i&&(p.start++,p.start===p.end&&(r.splice(a,1),p=r[a],p.start===i+1&&p.value===t&&(m.end=p.end,r.splice(a,1)))));if(p.value===t&&p.start===i+1)return p.start--,void(m.end>i&&(m.end=i,m.end===m.start&&r.splice(a,1)));if(p.start!==i||p.end!==i+1)i===p.start&&p.start++,u&&c>i+1?r.splice(g,0,h,{start:i+1,end:m.end,value:m.value}):r.splice(g,0,h),m.end>i&&(m.end=i);else{p.value=t;const e=r[a+1];e.start==i+1&&e.value===t&&(r.splice(a+1,1),p.end=e.end)}})),this.width=e,this.height=t,this.depth=i,this.jMultiple=e,this.kMultiple=this.jMultiple*t}getRLE(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;const n=this.rows.get(t+i*this.height);if(!n)return;const r=n[this.findIndex(n,e)];return e>=r.start?r:void 0}findIndex(e,t){for(let i=0;i<e.length;i++){const{end:n}=e[i];if(t<n)return i}return e.length}clear(){this.rows.clear()}keys(){return[...this.rows.keys()]}getPixelData(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1?arguments[1]:void 0;t?t.fill(0):t=new this.pixelDataConstructor(this.width*this.height*this.numberOfComponents);const{width:i,height:n,numberOfComponents:r}=this;for(let a=0;a<n;a++){const n=this.getRun(a,e);if(n)if(1===r)for(const e of n){const n=a*i,{start:r,end:s,value:o}=e;for(let e=r;e<s;e++)t[n+e]=o}else for(const e of n){const n=a*i*r,{start:s,end:o,value:l}=e;for(let e=s;e<o;e+=r)for(let i=0;i<r;i++)t[n+e+i]=l[i]}}return t}}class gn{constructor(e,t,i){ie(this,"modifiedSlices",new Set),ie(this,"boundsIJK",[[1/0,-1/0],[1/0,-1/0],[1/0,-1/0]]),ie(this,"map",void 0),ie(this,"sourceVoxelManager",void 0),ie(this,"isInObject",void 0),ie(this,"dimensions",void 0),ie(this,"numberOfComponents",1),ie(this,"getCompleteScalarDataArray",void 0),ie(this,"setCompleteScalarDataArray",void 0),ie(this,"getRange",void 0),ie(this,"scalarData",null),ie(this,"_sliceDataCache",null),ie(this,"points",void 0),ie(this,"width",void 0),ie(this,"frameSize",void 0),ie(this,"_get",void 0),ie(this,"_set",void 0),ie(this,"_getConstructor",void 0),ie(this,"_getScalarDataLength",void 0),ie(this,"_getScalarData",void 0),ie(this,"_getSliceData",void 0),ie(this,"getAtIJK",((e,t,i)=>{const n=this.toIndex([e,t,i]);return this._get(n)})),ie(this,"setAtIJK",((e,t,i,n)=>{const r=this.toIndex([e,t,i]);!1!==this._set(r,n)&&(this.modifiedSlices.add(i),gn.addBounds(this.boundsIJK,[e,t,i]))})),ie(this,"getAtIJKPoint",(e=>{let[t,i,n]=e;return this.getAtIJK(t,i,n)})),ie(this,"setAtIJKPoint",((e,t)=>{let[i,n,r]=e;this.setAtIJK(i,n,r,t)})),ie(this,"getAtIndex",(e=>this._get(e))),ie(this,"setAtIndex",((e,t)=>{if(!1!==this._set(e,t)){const t=this.toIJK(e);this.modifiedSlices.add(t[2]),gn.addBounds(this.boundsIJK,t)}})),ie(this,"getMiddleSliceData",(()=>{const e=Math.floor(this.dimensions[2]/2);return this.getSliceData({sliceIndex:e,slicePlane:2})})),ie(this,"forEach",((e,t)=>{const i=t.boundsIJK||this.getBoundsIJK(),n=t.isInObject||this.isInObject||(()=>!0),r=t.returnPoints||!1,a=t.imageData,s=i[0][0],o=i[0][1],l=i[1][0],c=i[1][1],d=i[2][0],h=i[2][1],u=[];if(a){const{imageData:i}=t,a=i.getDirection(),g=a.slice(0,3),m=a.slice(3,6),p=a.slice(6,9),f=i.getSpacing(),[v,I,w]=f,C=ft.vec3.fromValues(s,l,d),E=i.indexToWorld(C),y=ft.vec3.fromValues(g[0]*v,g[1]*v,g[2]*v),R=ft.vec3.fromValues(m[0]*I,m[1]*I,m[2]*I),P=ft.vec3.fromValues(p[0]*w,p[1]*w,p[2]*w),b=ft.vec3.clone(E);for(let t=d;t<=h;t++){const i=ft.vec3.clone(b);for(let i=l;i<=c;i++){const a=ft.vec3.clone(b);for(let a=s;a<=o;a++){const s=[a,i,t];if(n(b,s)){const t=this.toIndex(s),i=this._get(t);r&&u.push({value:i,index:t,pointIJK:s,pointLPS:b.slice()}),e&&e({value:i,index:t,pointIJK:s,pointLPS:b})}ft.vec3.add(b,b,y)}ft.vec3.copy(b,a),ft.vec3.add(b,b,R)}ft.vec3.copy(b,i),ft.vec3.add(b,b,P)}return u}if(this.map){for(const t of this.map.keys()){const i=this.toIJK(t);if(!n(null,i))continue;const a=this._get(t);r&&u.push({value:a,index:t,pointIJK:i,pointLPS:null}),e({value:a,index:t,pointIJK:i,pointLPS:null})}return u}for(let t=d;t<=h;t++){const i=t*this.frameSize;for(let a=l;a<=c;a++)for(let l=s,c=i+a*this.width+l;l<=o;l++,c++){const i=this.getAtIndex(c),s=[l,a,t];n(null,s)&&(r&&u.push({value:i,index:c,pointIJK:s,pointLPS:null}),e({value:i,index:c,pointIJK:[l,a,t],pointLPS:null}))}}return u})),ie(this,"getSliceData",(e=>{let{sliceIndex:t,slicePlane:i}=e;const[n,r,a]=this.dimensions,s=n*r,o=t*s;let l;const c=this.getConstructor();if("function"!=typeof c)return new Uint8Array(0);let d;switch(i){case 0:l=r*a,d=new c(l);for(let e=0;e<r;e++)for(let i=0;i<a;i++){const r=t+e*n+i*s;this.setSliceDataValue(d,e*a+i,this._get(r))}break;case 1:l=n*a,d=new c(l);for(let e=0;e<n;e++)for(let i=0;i<a;i++){const r=e+t*n+i*s;this.setSliceDataValue(d,e+i*n,this._get(r))}break;case 2:l=n*r,d=new c(l);for(let e=0;e<l;e++)this.setSliceDataValue(d,e,this._get(o+e));break;default:throw new Error("Oblique plane - todo - implement as ortho normal vector")}return d})),ie(this,"static",void 0),this.dimensions=e,this.width=e[0],this.frameSize=this.width*e[1],this._get=t,this._set=i}toIJK(e){return[e%this.width,Math.floor(e%this.frameSize/this.width),Math.floor(e/this.frameSize)]}toIndex(e){return e[0]+e[1]*this.width+e[2]*this.frameSize}getBoundsIJK(){return this.boundsIJK[0][0]<this.dimensions[0]?this.boundsIJK:this.dimensions.map((e=>[0,e-1]))}getScalarData(){if(this.scalarData)return this.scalarData;if(this._getScalarData)return this._getScalarData();throw new Error("No scalar data available")}getScalarDataLength(){if(this.scalarData)return this.scalarData.length;if(this._getScalarDataLength)return this._getScalarDataLength();throw new Error("No scalar data available")}get sizeInBytes(){return this.getScalarDataLength()*this.bytePerVoxel}get bytePerVoxel(){return this.scalarData?this.scalarData.BYTES_PER_ELEMENT:this._get(0).BYTES_PER_ELEMENT}clear(){this.map&&this.map.clear(),this.boundsIJK.map((e=>{e[0]=1/0,e[1]=-1/0})),this.modifiedSlices.clear(),this.points?.clear()}getConstructor(){return this.scalarData?this.scalarData.constructor:this._getConstructor?this._getConstructor():(console.warn("No scalar data available or can be used to get the constructor"),Float32Array)}getArrayOfSlices(){return Array.from(this.modifiedSlices)}static addBounds(e,t){e||(e=[[1/0,-1/0],[1/0,-1/0],[1/0,-1/0]]),e[0][0]=Math.min(t[0],e[0][0]),e[0][1]=Math.max(t[0],e[0][1]),e[1][0]=Math.min(t[1],e[1][0]),e[1][1]=Math.max(t[1],e[1][1]),e[2][0]=Math.min(t[2],e[2][0]),e[2][1]=Math.max(t[2],e[2][1])}addPoint(e){const t=Array.isArray(e)?e[0]+this.width*e[1]+this.frameSize*e[2]:e;this.points||(this.points=new Set),this.points.add(t)}getPoints(){return this.points?[...this.points].map((e=>this.toIJK(e))):[]}setSliceDataValue(e,t,i){if(Array.isArray(i))for(let n=0;n<i.length;n++)e[t*i.length+n]=this.toNumber(i[n]);else e[t]=this.toNumber(i)}toNumber(e){return"number"==typeof e?e:Array.isArray(e)&&e[0]||0}static _createRGBScalarVolumeVoxelManager(e){let{dimensions:t,scalarData:i,numberOfComponents:n=3}=e;const r=new gn(t,(e=>(e*=n,[i[e++],i[e++],i[e++]])),((e,t)=>{const n=!qi(i[e*=3],t);return i[e++]=t[0],i[e++]=t[1],i[e++]=t[2],n}));return r.numberOfComponents=n,r.scalarData=i,r}static createImageVolumeVoxelManager(e){let{dimensions:t,imageIds:i,numberOfComponents:n=1}=e;const r=t[0]*t[1];function a(e){const t=Math.floor(e/r),a=i[t],s=Ct.getImage(a);return s?{pixelData:s.voxelManager.getScalarData(),pixelIndex:e%r*n}:(console.warn(`Image not found for imageId: ${a}`),{pixelData:null,pixelIndex:null})}const s=new gn(t,(e=>function(e){const{pixelData:t,pixelIndex:i}=a(e);return t&&null!==i?1===n?t[i]:[t[i],t[i+1],t[i+2]]:null}(e)),((e,t)=>function(e,t){const{pixelData:i,pixelIndex:r}=a(e);if(!i||null===r)return!1;let s=!1;if(1===n)i[r]!==t&&(i[r]=t,s=!0);else{const e=t;for(let t=0;t<n;t++)i[r+t]!==e[t]&&(i[r+t]=e[t],s=!0)}return s}(e,t)));return s.numberOfComponents=n,s._getConstructor=()=>{const{pixelData:e}=a(0);return e.constructor},s.getMiddleSliceData=()=>{const e=Math.floor(t[2]/2);return s.getSliceData({sliceIndex:e,slicePlane:2})},s.getRange=()=>{let e,t;for(const n of i){const i=Ct.getImage(n);i.minPixelValue<e&&(e=i.minPixelValue),i.maxPixelValue>t&&(t=i.maxPixelValue)}return[e,t]},s._getScalarDataLength=()=>{const{pixelData:e}=a(0);return e.length*t[2]},s.getCompleteScalarDataArray=()=>{const e=new(s._getConstructor())(s.getScalarDataLength()),i=t[0]*t[1]*n;for(let r=0;r<t[2];r++){const{pixelData:t}=a(r*i/n);if(t){const a=r*i;if(1===n)e.set(t,a);else for(let i=0;i<t.length;i+=n)for(let r=0;r<n;r++)e[a+i+r]=t[i+r]}}return e},s.setCompleteScalarDataArray=e=>{const i=t[0]*t[1]*n,r=s._getConstructor();for(let s=0;s<t[2];s++){const{pixelData:t}=a(s*i/n);if(t&&r){const n=s*i,a=n+i,o=new r(i);o.set(e.subarray(n,a)),t.set(o)}}for(let e=0;e<t[2];e++)s.modifiedSlices.add(e);s.boundsIJK=[[0,t[0]-1],[0,t[1]-1],[0,t[2]-1]]},s}static createScalarVolumeVoxelManager(e){let{dimensions:t,scalarData:i,numberOfComponents:n=1}=e;if(3!==t.length)throw new Error("Dimensions must be provided as [number, number, number] for [width, height, depth]");if(!n&&(n=i.length/t[0]/t[1]/t[2],n>4||n<1||2===n))throw new Error(`Number of components ${n} must be 1, 3 or 4`);return n>1?gn._createRGBScalarVolumeVoxelManager({dimensions:t,scalarData:i,numberOfComponents:n}):gn._createNumberVolumeVoxelManager({dimensions:t,scalarData:i})}static createScalarDynamicVolumeVoxelManager(e){let{imageIdGroups:t,dimensions:i,timePoint:n=0,numberOfComponents:r=1}=e;if(!r){const e=Ct.getImage(t[0][0]);if(!e)throw new Error("Unable to determine number of components: No image found");if(r=e.getPixelData().length/(i[0]*i[1]),r>4||r<1||2===r)throw new Error(`Number of components ${r} must be 1, 3 or 4`)}const a=t.map((e=>gn.createImageVolumeVoxelManager({dimensions:i,imageIds:e,numberOfComponents:r}))),s=new gn(i,(e=>a[n]._get(e)),((e,t)=>a[n]._set(e,t)));return s.numberOfComponents=r,s.getScalarDataLength=()=>a[n].getScalarDataLength(),s.getConstructor=()=>a[n].getConstructor(),s.getRange=()=>a[n].getRange(),s.getMiddleSliceData=()=>a[n].getMiddleSliceData(),s.setTimePoint=e=>{n=e,s._get=e=>a[n]._get(e),s._set=(e,t)=>a[n]._set(e,t)},s.getAtIndexAndTimePoint=(e,t)=>a[t]._get(e),s.getTimePointScalarData=e=>a[e].getCompleteScalarDataArray(),s.getCurrentTimePointScalarData=()=>a[n].getCompleteScalarDataArray(),s}static createImageVoxelManager(e){let{width:t,height:i,scalarData:n,numberOfComponents:r=1}=e;const a=[t,i,1];if(!r&&(r=n.length/t/i,r>4||r<1||2===r))throw new Error(`Number of components ${r} must be 1, 3 or 4`);return r>1?gn._createRGBScalarVolumeVoxelManager({dimensions:a,scalarData:n,numberOfComponents:r}):gn._createNumberVolumeVoxelManager({dimensions:a,scalarData:n})}static _createNumberVolumeVoxelManager(e){let{dimensions:t,scalarData:i}=e;const n=new gn(t,(e=>i[e]),((e,t)=>{const n=i[e]!==t;return i[e]=t,n}));return n.scalarData=i,n.getMiddleSliceData=()=>{const e=Math.floor(t[2]/2);return n.getSliceData({sliceIndex:e,slicePlane:2})},n}static createMapVoxelManager(e){let{dimension:t}=e;const i=new Map,n=new gn(t,i.get.bind(i),((e,t)=>i.set(e,t)&&!0));return n.map=i,n}static createHistoryVoxelManager(e){let{sourceVoxelManager:t}=e;const i=new Map,{dimensions:n}=t,r=new gn(n,(e=>i.get(e)),(function(e,t){if(i.has(e))t===i.get(e)&&i.delete(e);else{const n=this.sourceVoxelManager.getAtIndex(e);if(n===t)return!1;i.set(e,n)}this.sourceVoxelManager.setAtIndex(e,t)}));return r.map=i,r.scalarData=t.scalarData,r.sourceVoxelManager=t,r}static createLazyVoxelManager(e){let{dimensions:t,planeFactory:i}=e;const n=new Map,[r,a]=t,s=r*a,o=new gn(t,(e=>n.get(Math.floor(e/s))[e%s]),((e,t)=>{const o=Math.floor(e/s);let l=n.get(o);l||(l=i(r,a),n.set(o,l)),l[e%s]=t}));return o.map=n,o}static createRLEVoxelManager(e){let{dimensions:t}=e;const[i,n,r]=t,a=new un(i,n,r),s=new gn(t,(e=>a.get(e)),((e,t)=>{a.set(e,t)}));return s.map=a,s.getPixelData=a.getPixelData.bind(a),s}static addInstanceToImage(e){const{width:t,height:i}=e,n=e.voxelManager.getScalarData();n.length>=t*i?e.voxelManager=gn.createScalarVolumeVoxelManager({dimensions:[t,i,1],scalarData:n}):(e.voxelManager=gn.createRLEVoxelManager({dimensions:[t,i,1]}),e.getPixelData=e.voxelManager.getPixelData,e.sizeInBytes=5120)}}const mn={updatedFrames:[]};function pn(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,mn,i),Ne().extend(e,t,i),function(e,t){t.classHierarchy.push("vtkStreamingOpenGLTexture"),t.updatedFrames=[],t.volumeId=null;const i=e.create3DFilterableFromRaw;e.create3DFilterableFromRaw=(e,n,r,a,s,o,l)=>{t.inputDataType=s,t.inputNumComps=a,i(e,n,r,a,s,o,l)},e.update3DFromRaw=()=>{const{volumeId:i}=t;if(!i)return;const n=Ct.getVolume(i);if(t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind(),!n.isDynamicVolume())return e.hasUpdatedFrames()&&function(){const i=Ct.getVolume(t.volumeId).imageIds;for(let n=0;n<t.updatedFrames.length;n++)if(t.updatedFrames[n]){const r=Ct.getImage(i[n]);if(!r)continue;const a=r.voxelManager.getScalarData(),s=t.context,o=a.constructor.name,[l]=e.updateArrayDataTypeForGL(o,[a]);e.bind();const c=n;s.texSubImage3D(t.target,0,0,0,c,t.width,t.height,1,t.format,t.openGLDataType,l),e.deactivate(),t.updatedFrames[n]=null}return t.generateMipmap&&t.context.generateMipmap(t.target),e.deactivate(),!0}();!function(){const i=Ct.getVolume(t.volumeId).getCurrentTimePointImageIds();for(let n=0;n<i.length;n++){const r=i[n],a=Ct.getImage(r);if(!a)continue;const s=a.voxelManager.getScalarData(),o=t.context,l=s.constructor.name,[c]=e.updateArrayDataTypeForGL(l,[s]);e.bind();let d=n;o.texSubImage3D(t.target,0,0,0,d,t.width,t.height,1,t.format,t.openGLDataType,c),e.deactivate()}t.generateMipmap&&t.context.generateMipmap(t.target),e.deactivate()}()};const n=e.modified;e.setUpdatedFrame=e=>{t.updatedFrames[e]=!0,n()},e.modified=()=>{n();const e=Ct.getVolume(t.volumeId);if(!e)return;const i=e.imageIds;for(let e=0;e<i.length;e++)t.updatedFrames[e]=!0},e.hasUpdatedFrames=()=>!t.updatedFrames.length||t.updatedFrames.some((e=>e)),e.getUpdatedFrames=()=>t.updatedFrames,e.setVolumeId=e=>{t.volumeId=e},e.getVolumeId=()=>t.volumeId,e.setTextureParameters=e=>{let{width:i,height:n,depth:r,numberOfComponents:a,dataType:s}=e;t.width??=i,t.height??=n,t.depth??=r,t.inputNumComps??=a,t.inputDataType??=s},e.getTextureParameters=()=>({width:t.width,height:t.height,depth:t.depth,numberOfComponents:t.inputNumComps,dataType:t.inputDataType})}(e,t)}const fn={newInstance:ce().newInstance(pn,"vtkStreamingOpenGLTexture"),extend:pn};class vn{constructor(e){ie(this,"_imageIds",void 0),ie(this,"_imageIdsIndexMap",new Map),ie(this,"_imageURIsIndexMap",new Map),ie(this,"numFrames",void 0),ie(this,"totalNumFrames",void 0),ie(this,"cornerstoneImageMetaData",null),ie(this,"volumeId",void 0),ie(this,"isPreScaled",!1),ie(this,"dimensions",void 0),ie(this,"direction",void 0),ie(this,"metadata",void 0),ie(this,"origin",void 0),ie(this,"scaling",void 0),ie(this,"spacing",void 0),ie(this,"numVoxels",void 0),ie(this,"imageData",void 0),ie(this,"vtkOpenGLTexture",void 0),ie(this,"loadStatus",void 0),ie(this,"referencedVolumeId",void 0),ie(this,"referencedImageIds",void 0),ie(this,"hasPixelSpacing",void 0),ie(this,"additionalDetails",void 0),ie(this,"voxelManager",void 0),ie(this,"dataType",void 0),ie(this,"numTimePoints",null),ie(this,"cancelLoading",void 0);const{imageIds:t,scaling:i,dimensions:n,spacing:r,origin:a,direction:s,dataType:o,volumeId:l,referencedVolumeId:c,metadata:d,referencedImageIds:h,additionalDetails:u,voxelManager:g,numberOfComponents:m}=e;if(!o)throw new Error('Data type is required, please provide a data type as string such as "Uint8Array", "Float32Array", etc.');let{imageData:p}=e;this.imageIds=t,this.volumeId=l,this.metadata=d,this.dimensions=n,this.spacing=r,this.origin=a,this.direction=s,this.dataType=o,this.vtkOpenGLTexture=fn.newInstance(),this.vtkOpenGLTexture.setVolumeId(l),this.voxelManager=g??gn.createImageVolumeVoxelManager({dimensions:n,imageIds:t,numberOfComponents:m}),this.numVoxels=this.dimensions[0]*this.dimensions[1]*this.dimensions[2],p||(p=hn().newInstance(),p.setDimensions(n),p.setSpacing(r),p.setDirection(s),p.setOrigin(a)),p.set({dataType:o,voxelManager:this.voxelManager,id:l,numberOfComponents:m||1}),p.set({hasScalarVolume:!1}),this.imageData=p,this.numFrames=this._getNumFrames(),this._reprocessImageIds(),i&&(this.scaling=i),c&&(this.referencedVolumeId=c),h&&(this.referencedImageIds=h),u&&(this.additionalDetails=u)}get sizeInBytes(){return this.voxelManager.sizeInBytes}get imageIds(){return this._imageIds}set imageIds(e){this._imageIds=e,this._reprocessImageIds()}_reprocessImageIds(){this._imageIdsIndexMap.clear(),this._imageURIsIndexMap.clear(),this._imageIds.forEach(((e,t)=>{const i=wt(e);this._imageIdsIndexMap.set(e,t),this._imageURIsIndexMap.set(i,t)}))}isDynamicVolume(){return this.numTimePoints>1}getImageIdIndex(e){return this._imageIdsIndexMap.get(e)}getImageIdByIndex(e){return this._imageIds[e]}getImageURIIndex(e){return this._imageURIsIndexMap.get(e)}destroy(){this.imageData.delete(),this.imageData=null,this.voxelManager.clear(),this.vtkOpenGLTexture.releaseGraphicsResources(),this.vtkOpenGLTexture.delete()}invalidate(){for(let e=0;e<this.imageIds.length;e++)this.vtkOpenGLTexture.setUpdatedFrame(e);this.imageData.modified()}modified(){this.imageData.modified(),this.vtkOpenGLTexture.modified(),this.numFrames=this._getNumFrames()}removeFromCache(){Ct.removeVolumeLoadObject(this.volumeId)}getScalarDataLength(){return this.voxelManager.getScalarDataLength()}_getNumFrames(){return this.isDynamicVolume()?this.numTimePoints:this.imageIds.length}imageIdIndexToFrameIndex(e){return e%this.numFrames}getCornerstoneImages(){const{imageIds:e}=this;return e.map((e=>Ct.getImage(e)))}}const In=vn;let wn={};const Cn={add:(e,t)=>{Cn.addRaw(e,{...t,metadata:structuredClone(t.metadata)})},addRaw:(e,t)=>{const i=t.type;wn[e]||(wn[e]={}),wn[e][i]=t.metadata},get:(e,t)=>wn[t]?.[e],clear:()=>{wn={}}};Pt(Cn.get);const En=Cn;function yn(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{isVolumeBuffer:n=!1}=i;switch(e){case"Float32Array":return{numBytes:4*t,TypedArrayConstructor:Float32Array};case"Uint8Array":return{numBytes:t,TypedArrayConstructor:Uint8Array};case"Uint16Array":return n?(console.warn("Uint16Array is not supported for volume rendering, switching back to Float32Array"),{numBytes:4*t,TypedArrayConstructor:Float32Array}):{numBytes:2*t,TypedArrayConstructor:Uint16Array};case"Int16Array":return n?(console.warn("Int16Array is not supported for volume rendering, switching back to Float32Array"),{numBytes:4*t,TypedArrayConstructor:Float32Array}):{numBytes:2*t,TypedArrayConstructor:Int16Array};default:if(e)throw new Error("TargetBuffer should be Float32Array, Uint8Array, Uint16Array, or Int16Array");return{numBytes:4*t,TypedArrayConstructor:Float32Array}}}const Rn=new Ci("imageLoadPool");Rn.grabDelay=0,Rn.setMaxSimultaneousRequests(v.Interaction,1e3),Rn.setMaxSimultaneousRequests(v.Thumbnail,1e3),Rn.setMaxSimultaneousRequests(v.Prefetch,1e3);const Pn=Rn,bn={};let Tn;function An(e,t){const i=Ct.getImageLoadObject(e);if(i)return i;const n=e.indexOf(":"),r=e.substring(0,n),a=bn[r];if(null==a){if(void 0!==Tn)return Tn(e);throw new Error("loadImageFromImageLoader: no image loader for imageId")}const s=a(e,t);return s.promise.then((e=>{const t=e.getPixelData(),{width:i,height:n,numberOfComponents:r}=e;if(!e.voxelManager){const a=gn.createImageVoxelManager({scalarData:t,width:i,height:n,numberOfComponents:r});e.voxelManager=a,e.getPixelData=()=>a.getScalarData(),delete e.imageFrame.pixelData}oe(ae,p.IMAGE_LOADED,{image:e})})).catch((t=>{const i={imageId:e,error:t};oe(ae,p.IMAGE_LOAD_FAILED,i)})),s}function Sn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{priority:0,requestType:"prefetch"};if(void 0===e)throw new Error("loadImage: parameter imageId must not be undefined");return An(e,t).promise}function On(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{priority:0,requestType:"prefetch"};if(void 0===e)throw new Error("loadAndCacheImage: parameter imageId must not be undefined");const i=An(e,t);return Ct.getImageLoadObject(e)||Ct.putImageLoadObject(e,i),i.promise}function Dn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{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=>On(e,t)))}function xn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0===e)throw new Error("createAndCacheDerivedImage: parameter imageId must not be undefined");void 0===t.imageId&&(t.imageId=`derived:${se()}`);const{imageId:i,skipCreateBuffer:n,onCacheAdd:r}=t,a=At("imagePlaneModule",e),s=a.rows*a.columns,{TypedArrayConstructor:o}=yn(t.targetBufferType,s),l=new o(n?1:s),c=i,d=At("imagePlaneModule",e);En.add(c,{type:"imagePlaneModule",metadata:d});const h=At("generalSeriesModule",e);En.add(c,{type:"generalSeriesModule",metadata:h});const u=At("imagePixelModule",e);En.add(c,{type:"imagePixelModule",metadata:{...u,bitsAllocated:8,bitsStored:8,highBit:7,samplesPerPixel:1,pixelRepresentation:0}});const g=_n(i,{scalarData:l,onCacheAdd:r,skipCreateBuffer:n,targetBufferType:l.constructor.name,dimensions:[a.columns,a.rows],spacing:[a.columnPixelSpacing,a.rowPixelSpacing],origin:a.imagePositionPatient,direction:a.imageOrientationPatient});return Ct.getImageLoadObject(i)||Ct.putImageSync(i,g),g}function Mn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(0===e.length)throw new Error("createAndCacheDerivedImages: parameter imageIds must be list of image Ids");const i=[];return e.map((e=>{const n={imageId:t?.getDerivedImageId?.(e)||`derived:${se()}`,...t};return i.push(n.imageId),xn(e,n)}))}function _n(e,t){const{scalarData:i,origin:n,direction:r,targetBufferType:a,skipCreateBuffer:s,onCacheAdd:o}=t,l=t.dimensions,c=t.spacing;if(!l||!c)throw new Error("createAndCacheLocalImage: dimensions and spacing are required");const d=l[0],h=l[1],u=c[0],g=c[1],m={rows:h.toString(),columns:d.toString(),imageOrientationPatient:r??[1,0,0,0,1,0],rowCosines:r?r.slice(0,3):[1,0,0],columnCosines:r?r.slice(3,6):[0,1,0],imagePositionPatient:n??[0,0,0],pixelSpacing:[g,u],rowPixelSpacing:g,columnPixelSpacing:u},p=d*h,f=i.length/p;let v,I,w,C;if(i){if(!(i instanceof Uint8Array||i instanceof Float32Array||i instanceof Uint16Array||i instanceof Int16Array))throw new Error("createAndCacheLocalImage: scalarData must be of type Uint8Array, Uint16Array, Int16Array or Float32Array");v=i}else if(!s){const{numBytes:e,TypedArrayConstructor:t}=yn(a,p);v=new t(p)}if(v instanceof Uint8Array)I=8,w=8,C=7;else if(v instanceof Uint16Array)I=16,w=16,C=15;else if(v instanceof Int16Array)I=16,w=16,C=15;else{if(!(v instanceof Float32Array))throw new Error("Unsupported scalarData type");I=32,w=32,C=31}const E={samplesPerPixel:1,photometricInterpretation:v.length>l[0]*l[1]?"RGB":"MONOCHROME2",rows:h,columns:d,bitsAllocated:I,bitsStored:w,highBit:C},y={imagePlaneModule:m,imagePixelModule:E};["imagePlaneModule","imagePixelModule"].forEach((t=>{En.add(e,{type:t,metadata:y[t]||{}})}));const R=gn.createImageVoxelManager({height:h,width:d,numberOfComponents:f,scalarData:v}),P={imageId:e,intercept:0,windowCenter:0,windowWidth:0,color:"RGB"===E.photometricInterpretation,numberOfComponents:E.samplesPerPixel,dataType:a,slope:1,minPixelValue:0,maxPixelValue:Math.pow(2,E.bitsStored)-1,rows:E.rows,columns:E.columns,getCanvas:void 0,height:E.rows,width:E.columns,rgba:void 0,columnPixelSpacing:m.columnPixelSpacing,rowPixelSpacing:m.rowPixelSpacing,FrameOfReferenceUID:m.frameOfReferenceUID,invert:!1,getPixelData:()=>R.getScalarData(),voxelManager:R,sizeInBytes:i.byteLength};return o?.(P),Ct.putImageSync(P.imageId,P),P}function Vn(e){Pn.filterRequests((t=>{let{additionalDetails:i}=t;return!i.imageId||i.imageId!==e}));const t=Ct.getImageLoadObject(e);t&&t.cancelFn()}function kn(e){e.forEach((e=>{Vn(e)}))}function Ln(){const e=Pn.getRequestPool();Object.keys(e).forEach((t=>{const i=e[t];Object.keys(i).forEach((e=>{const t=i[e].pop().additionalDetails,{imageId:n,volumeId:r}=t;let a;n?a=Ct.getImageLoadObject(n):r&&(a=Ct.getVolumeLoadObject(r)),a&&a.cancel()})),Pn.clearRequestStack(t)}))}function Nn(e,t){bn[e]=t}function Fn(e){const t=Tn;return Tn=e,t}function Un(){Object.keys(bn).forEach((e=>delete bn[e])),Tn=void 0}function Gn(e){return Mn(e,{...arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},targetBufferType:"Uint8Array"})}function jn(e){return xn(e,{...arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},targetBufferType:"Uint8Array"})}const Wn={};let Bn;function qn(e,t){const i=e.indexOf(":"),n=e.substring(0,i);let r=Wn[n];if(null==r){if(null==Bn||"function"!=typeof Bn)throw new Error(`No volume loader for scheme ${n} has been registered`);r=Bn}const a=r(e,t);return a.promise.then((function(e){oe(ae,p.VOLUME_LOADED,{volume:e})}),(function(t){const i={volumeId:e,error:t};oe(ae,p.VOLUME_LOADED_FAILED,i)})),a}function zn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{imageIds:[]};if(void 0===e)throw new Error("loadVolume: parameter volumeId must not be undefined");let i=Ct.getVolumeLoadObject(e);return void 0!==i?i.promise:(i=qn(e,t),i.promise.then((e=>e)))}async function Hn(e,t){if(void 0===e)throw new Error("createAndCacheVolume: parameter volumeId must not be undefined");let i=Ct.getVolumeLoadObject(e);return void 0!==i||(i=qn(e,t),Ct.putVolumeLoadObject(e,i)),i.promise}function $n(e,t){const i=Ct.getVolume(e);if(!i)throw new Error(`Cannot created derived volume: Referenced volume with id ${e} does not exist.`);let{volumeId:n}=t;void 0===n&&(n=se());const{metadata:r,dimensions:a,spacing:s,origin:o,direction:l}=i,c=i.imageIds??[],d=c.reduce(((e,t)=>e+Ct.getImage(t).sizeInBytes),0);if(!Ct.isCacheable(d))throw new Error(`Cannot created derived volume: Referenced volume with id ${e} does not exist.`);const h=Mn(c,{targetBufferType:t.targetBufferType}),u=h[0].dataType,g=h.map((e=>e.imageId)),m=new vn({volumeId:n,dataType:u,metadata:structuredClone(r),dimensions:[a[0],a[1],a[2]],spacing:s,origin:o,direction:l,referencedVolumeId:e,imageIds:g,referencedImageIds:i.imageIds??[]});return Ct.putVolumeSync(n,m),m}async function Kn(e,t){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 i=Ct.getVolume(e);return i||await Hn(e,{imageIds:t})}function Yn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{metadata:i,dimensions:n,spacing:r,origin:a,direction:s,scalarData:o,targetBufferType:l,preventCache:c=!1}=t,d=Ct.getVolume(e);if(d)return d;const h=n[0]*n[1],u=o?o.constructor.name:l,g=h*n[2];let m;switch(u){case"Uint8Array":case"Int8Array":m=g;break;case"Uint16Array":case"Int16Array":m=2*g;break;case"Float32Array":m=4*g}if(!Ct.isCacheable(m))throw new Error(`Cannot created derived volume: Volume with id ${e} is not cacheable.`);const p=[],f=[];for(let t=0;t<n[2];t++){const i=`${e}_slice_${t}`;p.push(i);const l=_n(i,{scalarData:o.subarray(t*h,(t+1)*h),dimensions:[n[0],n[1]],spacing:[r[0],r[1]],origin:a,direction:s,targetBufferType:u});f.push(l)}const v=new vn({volumeId:e,metadata:structuredClone(i),dimensions:[n[0],n[1],n[2]],spacing:r,origin:a,direction:s,imageIds:p,dataType:u}),I=gn.createImageVolumeVoxelManager({imageIds:p,dimensions:n,numberOfComponents:1});return v.voxelManager=I,c||Ct.putVolumeSync(e,v),v}function Zn(e,t){Wn[e]=t}function Xn(){return Object.keys(Wn)}function Jn(e){const t=Bn;return Bn=e,t}function Qn(){return Bn.name}function er(e){return $n(e,{...arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},targetBufferType:"Uint8Array"})}function tr(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e.scalarData||(e.scalarData=new Uint8Array(e.dimensions[0]*e.dimensions[1]*e.dimensions[2])),Yn(t,{...e,preventCache:i})}var ir=K(9),nr=K.n(ir);const rr={scalarTexture:null};function ar(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,rr,i),nr().extend(e,t,i),ce().setGet(e,t,["scalarTexture"]),function(e,t){t.classHierarchy.push("vtkSharedVolumeMapper");const i=e.delete;e.delete=()=>{t.scalarTexture=null,i()}}(e,t)}const sr={newInstance:ce().newInstance(ar,"vtkSharedVolumeMapper"),extend:ar};function or(e,t){const i=sr.newInstance();Li().rendering.preferSizeOverAccuracy&&i.setPreferSizeOverAccuracy(!0),i.setInputData(e);const n=e.getSpacing(),r=(n[0]+n[1]+n[2])/6;return i.setMaximumSamplesPerRay(4e3),i.setSampleDistance(r),i.setScalarTexture(t),i}function lr(e){let t,i=e[0],n=e[0];const r=e.length;for(let a=1;a<r;a++)t=e[a],i=Math.min(i,t),n=Math.max(n,t);return{min:i,max:n}}const cr=v.Prefetch,dr=async function(e,t){let i=function(e){const{imageIds:t,metadata:i}=e;let n;if(t.length){const e=At("voiLutModule",t[Math.floor(t.length/2)]);if(e?.windowWidth&&e.windowCenter){const{windowWidth:t,windowCenter:i}=e;n={windowWidth:Array.isArray(t)?t[0]:t,windowCenter:Array.isArray(i)?i[0]:i}}}else n=i.voiLut[0];if(n){const{lower:e,upper:t}=nn(Number(n.windowWidth),Number(n.windowCenter));return{lower:e,upper:t}}}(t);!i&&t.imageIds.length&&(i=await async function(e){const{imageIds:t}=e,i=Math.floor(t.length/2),n=e.imageIds[i],r=At("generalSeriesModule",n)||{},{modality:a}=r,s=At("modalityLutModule",n)||{},o={rescaleSlope:s.rescaleSlope,rescaleIntercept:s.rescaleIntercept,modality:a};let l;if("PT"===a){const e=At("scalingModule",n);e&&(l={...o,suvbw:e.suvbw})}const c={priority:0,requestType:cr,preScale:{scalingParameters:l}};let d=Ct.getImage(n);e.referencedImageIds?.length||(d=await On(n,{...c,ignoreCache:!0}));const h=d.getPixelData(),{min:u,max:g}=lr(h);return{lower:u,upper:g}}(t),i=function(e,t){const i=e.imageIds;return function(e,t){return!("PT"!==e||!t.isPreScaled)&&!!t.scaling?.PT.suvbw}((At("generalSeriesModule",i[Math.floor(i.length/2)])||{}).modality,e)?{lower:0,upper:5}:t}(t,i)),0===i.lower&&0===i.upper||void 0===i.lower||void 0===i.upper||e.getProperty().getRGBTransferFunction(0).setMappingRange(i.lower,i.upper)},hr=async function(e,t,i){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{volumeId:r,callback:a,blendMode:s}=e,o=await zn(r);if(!o)throw new Error(`imageVolume with id: ${o.volumeId} does not exist`);const{imageData:l,vtkOpenGLTexture:c}=o,d=or(l,c);s&&d.setBlendMode(s);const h=cn().newInstance();h.setMapper(d);const{numberOfComponents:u}=l.get("numberOfComponents");return 3===u&&h.getProperty().setIndependentComponents(!1),await dr(h,o),a&&a({volumeActor:h,volumeId:r}),n||function(e,t,i,n){const r=i.getProperty().getRGBTransferFunction(0).getRange(),a={viewportId:t,range:{lower:r[0],upper:r[1]},volumeId:n};oe(e,p.VOI_MODIFIED,a)}(t,i,h,r),h},ur=e=>{const t=e.includes("volumeId:")?e.substring(9):e,i=t.indexOf("sliceIndex=");return-1===i?t:t.substring(0,i-1)},gr=1+X,mr=e=>!!Xn().find((t=>{return(n=t)===(i=e.volumeId).substring(0,Math.min(i.length,n.length));var i,n}));function pr(e,t,i){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{viewPlaneNormal:r}=t,a=e.getActors();if(!a.length)return{spacingInNormalDirection:null,imageVolume:null,actorUID:null};const s=a.map((e=>{const t=e.referencedId??e.uid;return Ct.getVolume(t)})).filter((e=>!!e));if(i){const t=ur(i),o=s.findIndex((e=>t.includes(e.volumeId))),l=s[o],{uid:c}=a[o];return{imageVolume:l,spacingInNormalDirection:fr(l,r,e,n),actorUID:c}}if(!s.length)return{spacingInNormalDirection:null,imageVolume:null,actorUID:null};const o={spacingInNormalDirection:1/0,imageVolume:null,actorUID:null},l=s.find(mr);for(let t=0;t<s.length;t++){const i=s[t];if(l&&!mr(i))continue;const n=fr(i,r,e);n*gr<o.spacingInNormalDirection&&(o.spacingInNormalDirection=n,o.imageVolume=i,o.actorUID=a[t].uid)}return o}function fr(e,t,i){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{slabThickness:r}=i.getProperties();let a=r;return r&&n||(a=St(e,t)),a}const vr=function(e){const t=e.getCamera(),{spacingInNormalDirection:i,imageVolume:n}=pr(e,t);if(!n)return;const{viewPlaneNormal:r,focalPoint:a}=t,s=e.getActors().find((e=>e.referencedId===n.volumeId||e.uid===n.volumeId));s||console.warn("No actor found for with actorUID of",n.volumeId);const o=Nt(s.actor,r,a),{min:l,max:c,current:d}=o,h=Math.round((c-l)/i)+1;let u=(d-l)/(c-l)*h;return u=Math.floor(u),u>h-1?u=h-1:u<0&&(u=0),{numberOfSlices:h,imageIndex:u}},Ir={};var wr=K(807),Cr=K.n(wr);function Er(e,t,i){const[n,r,a]=e,[s,o,l]=t,[c,d,h,u]=i,g=s-n,m=o-r,p=l-a,f=-1*(c*n+d*r+h*a-u)/(c*g+d*m+h*p);return[g*f+n,m*f+r,p*f+a]}function yr(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const[n,r,a]=e,s=n*t[0]+r*t[1]+a*t[2];if(i){const e=Math.sqrt(n*n+r*r+a*a);return[n/e,r/e,a/e,s/e]}return[n,r,a,s]}function Rr(e,t,i){const[n,r,a,s]=e,[o,l,c,d]=t,[h,u,g,m]=i,p=ft.mat3.fromValues(n,o,h,r,l,u,a,c,g),f=ft.mat3.fromValues(s,d,m,r,l,u,a,c,g),v=ft.mat3.fromValues(n,o,h,s,d,m,a,c,g),I=ft.mat3.fromValues(n,o,h,r,l,u,s,d,m);return[ft.mat3.determinant(f)/ft.mat3.determinant(p),ft.mat3.determinant(v)/ft.mat3.determinant(p),ft.mat3.determinant(I)/ft.mat3.determinant(p)]}function Pr(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const[n,r,a,s]=e,[o,l,c]=t,d=n*o+r*l+a*c-s,h=Math.abs(d)/Math.sqrt(n*n+r*r+a*a);return(i?Math.sign(d):1)*h}function br(e){return Array.isArray(e)?e.some((e=>Number.isNaN(e))):Number.isNaN(e)}class Tr{constructor(e){ie(this,"id",void 0),ie(this,"element",void 0),ie(this,"canvas",void 0),ie(this,"renderingEngineId",void 0),ie(this,"type",void 0),ie(this,"insetImageMultiplier",1.1),ie(this,"flipHorizontal",!1),ie(this,"flipVertical",!1),ie(this,"isDisabled",void 0),ie(this,"viewportStatus",U.NO_DATA),ie(this,"sx",void 0),ie(this,"sy",void 0),ie(this,"sWidth",void 0),ie(this,"sHeight",void 0),ie(this,"_actors",void 0),ie(this,"defaultOptions",void 0),ie(this,"options",void 0),ie(this,"_suppressCameraModifiedEvents",!1),ie(this,"suppressEvents",void 0),ie(this,"hasPixelSpacing",!0),ie(this,"calibration",void 0),ie(this,"initialCamera",void 0),ie(this,"fitToCanvasCamera",void 0),ie(this,"getRotation",void 0),ie(this,"getFrameOfReferenceUID",void 0),ie(this,"canvasToWorld",void 0),ie(this,"worldToCanvas",void 0),ie(this,"customRenderViewportToCanvas",void 0),ie(this,"resize",void 0),ie(this,"getProperties",(()=>({}))),ie(this,"updateRenderingPipeline",void 0),ie(this,"getNumberOfSlices",void 0),ie(this,"setRotation",(e=>{})),ie(this,"viewportWidgets",new Map),ie(this,"addWidget",((e,t)=>{this.viewportWidgets.set(e,t)})),ie(this,"getWidget",(e=>this.viewportWidgets.get(e))),ie(this,"getWidgets",(()=>Array.from(this.viewportWidgets.values()))),ie(this,"removeWidgets",(()=>{this.getWidgets().forEach((e=>{if(e.getEnabled()&&e.setEnabled(!1),e.getActor&&e.getRenderer){const t=e.getActor(),i=e.getRenderer();i&&t&&i.removeActor(t)}}))})),this.id=e.id,this.renderingEngineId=e.renderingEngineId,this.type=e.type,this.element=e.element,this.canvas=e.canvas,this.sx=e.sx,this.sy=e.sy,this.sWidth=e.sWidth,this.sHeight=e.sHeight,this._actors=new Map,this.element.setAttribute("data-viewport-uid",this.id),this.element.setAttribute("data-rendering-engine-uid",this.renderingEngineId),this.defaultOptions=structuredClone(e.defaultOptions),this.suppressEvents=!!e.defaultOptions.suppressEvents&&e.defaultOptions.suppressEvents,this.options=structuredClone(e.defaultOptions),this.isDisabled=!1}static get useCustomRenderingPipeline(){return!1}setRendered(){this.viewportStatus!==U.NO_DATA&&this.viewportStatus!==U.LOADING&&(this.viewportStatus=U.RENDERED)}getRenderingEngine(){return re.get(this.renderingEngineId)}getRenderer(){const e=this.getRenderingEngine();if(!e||e.hasBeenDestroyed)throw new Error("Rendering engine has been destroyed");return e.offscreenMultiRenderWindow?.getRenderer(this.id)}render(){this.getRenderingEngine().renderViewport(this.id)}setOptions(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.options=structuredClone(e),this.options?.displayArea&&this.setDisplayArea(this.options?.displayArea),t&&this.render()}reset(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.options=structuredClone(this.defaultOptions),e&&this.render()}getSliceViewInfo(){throw new Error("Method not implemented.")}flip(e){let{flipHorizontal:t,flipVertical:i}=e;const n=this.getDefaultImageData();if(!n)return;const r=this.getCamera(),{viewPlaneNormal:a,viewUp:s,focalPoint:o,position:l}=r,c=ft.vec3.cross(ft.vec3.create(),a,s);let d=ft.vec3.copy(ft.vec3.create(),s);const h=ft.vec3.negate(ft.vec3.create(),a),u=ft.vec3.distance(l,o),g=n.getDimensions().map((e=>Math.floor(e/2))),m=[g[0],g[1],g[2]],p=n.indexToWorld(m,ft.vec3.create()),f=this._getFocalPointForResetCamera(p,r,{resetPan:!0,resetToCenter:!1}),v=ft.vec3.subtract(ft.vec3.create(),o,f),I=ft.vec3.length(v),w=e=>{const t=ft.vec3.scale(ft.vec3.create(),e,2*ft.vec3.dot(v,e));return ft.vec3.subtract(t,t,v),ft.vec3.normalize(t,t),t};if(t){const e=w(d),t=ft.vec3.scaleAndAdd(ft.vec3.create(),f,e,I),i=ft.vec3.scaleAndAdd(ft.vec3.create(),t,h,u);this.setCamera({viewPlaneNormal:h,position:i,focalPoint:t}),this.flipHorizontal=!this.flipHorizontal}if(i){d=ft.vec3.negate(d,s);const e=w(c),t=ft.vec3.scaleAndAdd(ft.vec3.create(),f,e,I),i=ft.vec3.scaleAndAdd(ft.vec3.create(),t,h,u);this.setCamera({focalPoint:t,viewPlaneNormal:h,viewUp:d,position:i}),this.flipVertical=!this.flipVertical}this.render()}getDefaultImageData(){const e=this.getDefaultActor();if(e&&Et(e))return e.actor.getMapper().getInputData()}getDefaultActor(){return this.getActors()[0]}getActors(){return Array.from(this._actors.values())}getActorUIDs(){return Array.from(this._actors.keys())}getActor(e){return this._actors.get(e)}getActorUIDByIndex(e){const t=this.getActors()[e];if(t)return t.uid}getActorByIndex(e){return this.getActors()[e]}setActors(e){this.removeAllActors(),this.addActors(e,!0)}_removeActor(e){const t=this.getActor(e);t?(this.getRenderer().removeViewProp(t.actor),this._actors.delete(e)):console.warn(`Actor ${e} does not exist for this viewport`)}removeActors(e){e.forEach((e=>{this._removeActor(e)}))}addActors(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.getRenderingEngine();i&&!i.hasBeenDestroyed?(e.forEach((e=>{this.addActor(e)})),this.resetCamera({resetPan:t,resetZoom:t})):console.warn("Viewport::addActors::Rendering engine has not been initialized or has been destroyed")}addActor(e){const{uid:t,actor:i}=e,n=this.getRenderingEngine();if(!n||n.hasBeenDestroyed)return void console.warn(`Cannot add actor UID of ${t} Rendering Engine has been destroyed`);if(!t||!i)throw new Error("Actors should have uid and vtk Actor properties");if(this.getActor(t))return void console.warn(`Actor ${t} already exists for this viewport`);const r=this.getRenderer();r?.addActor(i),this._actors.set(t,Object.assign({},e)),this.updateCameraClippingPlanesAndRange()}removeAllActors(){this.getRenderer()?.removeAllViewProps(),this._actors=new Map}resetCameraNoEvent(){this._suppressCameraModifiedEvents=!0,this.resetCamera(),this._suppressCameraModifiedEvents=!1}setCameraNoEvent(e){this._suppressCameraModifiedEvents=!0,this.setCamera(e),this._suppressCameraModifiedEvents=!1}_getViewImageDataIntersections(e,t,i){const n=i[0],r=i[1],a=i[2],s=n*t[0]+r*t[1]+a*t[2],o=e.getBounds(),l=this._getEdges(o),c=[];for(const e of l){const[[t,i,l],[d,h,u]]=e;if(n*(d-t)+r*(h-i)+a*(u-l)==0)continue;const g=Er([t,i,l],[d,h,u],[n,r,a,s]);this._isInBounds(g,o)&&c.push(g)}return c}setInterpolationType(e,t){}setDisplayArea(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e)return;const{storeAsInitialCamera:i,type:n}=e;i&&(this.options.displayArea=e);const{_suppressCameraModifiedEvents:r}=this;if(this._suppressCameraModifiedEvents=!0,this.setCamera(this.fitToCanvasCamera),"SCALE"===n?this.setDisplayAreaScale(e):(this.setInterpolationType(this.getProperties()?.interpolationType||E.LINEAR),this.setDisplayAreaFit(e)),i&&(this.initialCamera=this.getCamera()),this._suppressCameraModifiedEvents=r,!t&&!r){const t={viewportId:this.id,displayArea:e,storeAsInitialCamera:i};oe(this.element,p.DISPLAY_AREA_MODIFIED,t),this.setCamera(this.getCamera())}}setDisplayAreaScale(e){const{scale:t=1}=e,i=this.canvas,n=i.height,r=i.width;if(n<8||r<8)return;const a=this.getDefaultImageData().getSpacing()[1];this.setInterpolationType(E.NEAREST),this.setCamera({parallelScale:n*a/(2*t)}),delete e.imageArea,this.setDisplayAreaFit(e);const{focalPoint:s,position:o,viewUp:l,viewPlaneNormal:c}=this.getCamera(),d=ft.vec3.create();if(i.height%2&&ft.vec3.scaleAndAdd(d,d,l,.5*t*a),i.width%2){const e=ft.vec3.cross(ft.vec3.create(),l,c);ft.vec3.scaleAndAdd(d,d,e,.5*t*a)}(d[0]||d[1]||d[2])&&this.setCamera({focalPoint:ft.vec3.add(ft.vec3.create(),s,d),position:ft.vec3.add(ft.vec3.create(),o,d)})}setDisplayAreaFit(e){const{imageArea:t,imageCanvasPoint:i}=e,n=window?.devicePixelRatio||1,r=this.getDefaultImageData();if(!r)return;const a=this.sWidth/n,s=this.sHeight/n,o=r.getDimensions(),l=this.worldToCanvas(r.indexToWorld([0,0,0])),c=this.worldToCanvas(r.indexToWorld([o[0]-1,o[1]-1,o[2]])),d=[Math.abs(c[0]-l[0]),Math.abs(c[1]-l[1])],[h,u]=d;if(t){const[e,i]=t,n=Math.abs(e*h/a),r=Math.abs(i*u/s),o=this.getZoom(),l=this.getZoom(this.fitToCanvasCamera),c=Math.min(1/n,1/r)*o/l;this.setZoom(c,!1)}if(i){const{imagePoint:e,canvasPoint:t=e||[.5,.5]}=i,[n,r]=t,o=a*(n-.5),l=s*(r-.5),[c,d]=e||t,g=1,m=[g*h*(.5-c)+o,g*u*(.5-d)+l];ft.vec2.add(m,m,this.getPan()),this.setPan(m,!1)}}getDisplayArea(){return this.options?.displayArea}resetCamera(e){const{resetPan:t=!0,resetZoom:i=!0,resetToCenter:n=!0,storeAsInitialCamera:r=!0}=e||{},a=this.getRenderer();this.setCameraNoEvent({flipHorizontal:!1,flipVertical:!1});const s=structuredClone(this.getCamera()),o=a.computeVisiblePropBounds(),l=[0,0,0],c=this.getDefaultImageData();if(c){const e=c.getSpacing();o[0]=o[0]+e[0]/2,o[1]=o[1]-e[0]/2,o[2]=o[2]+e[1]/2,o[3]=o[3]-e[1]/2,o[4]=o[4]+e[2]/2,o[5]=o[5]-e[2]/2}const d=this.getVtkActiveCamera(),h=d.getViewPlaneNormal(),u=d.getViewUp();if(l[0]=(o[0]+o[1])/2,l[1]=(o[2]+o[3])/2,l[2]=(o[4]+o[5])/2,c){const e=c.getDimensions().map((e=>Math.floor(e/2))),t=[e[0],e[1],e[2]];c.indexToWorld(t,l)}const{widthWorld:g,heightWorld:m}=this._getWorldDistanceViewUpAndViewRight(o,u,h),p=[this.sWidth,this.sHeight],f=g/m/(p[0]/p[1]),v=f<1?this.insetImageMultiplier*m/2:this.insetImageMultiplier*m*f/2,I=Tr.boundsRadius(o)*(this.type===w.VOLUME_3D?10:1),C=this.insetImageMultiplier*I,E=Math.abs(Cr().dot(u,h))>.999?[-u[2],u[0],u[1]]:u,y=this._getFocalPointForResetCamera(l,s,{resetPan:t,resetToCenter:n}),R=[y[0]+C*h[0],y[1]+C*h[1],y[2]+C*h[2]];a.resetCameraClippingRange(o);const P=[-Z.MAXIMUM_RAY_DISTANCE,Z.MAXIMUM_RAY_DISTANCE];d.setPhysicalScale(I),d.setPhysicalTranslation(-y[0],-y[1],-y[2]),this.setCamera({parallelScale:i?v:s.parallelScale,focalPoint:y,position:R,viewAngle:90,viewUp:E,clippingRange:P});const b=structuredClone(this.getCamera());this.setFitToCanvasCamera(structuredClone(this.getCamera())),r&&this.setInitialCamera(b),i&&this.setZoom(1,r);const T={type:"ResetCameraEvent",renderer:a};return a.invokeEvent(T),this.triggerCameraModifiedEventIfNecessary(s,b),c&&this.options.displayArea&&i&&t&&n&&this.setDisplayArea(this.options.displayArea),!0}setInitialCamera(e){this.initialCamera=e}setFitToCanvasCamera(e){this.fitToCanvasCamera=e}getPan(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.initialCamera;const t=this.getVtkActiveCamera().getFocalPoint(),i=this.canvasToWorld([0,0]),n=this.worldToCanvas(ft.vec3.subtract([0,0,0],e.focalPoint,i)),r=this.worldToCanvas(ft.vec3.subtract([0,0,0],t,i));return ft.vec2.subtract([0,0],n,r)}getCurrentImageIdIndex(){throw new Error("Not implemented")}getSliceIndex(){throw new Error("Not implemented")}getImageData(){throw new Error("Not implemented")}getViewReferenceId(e){return null}setPan(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.getCamera(),{focalPoint:n,position:r}=i,a=this.canvasToWorld([0,0]),s=ft.vec2.subtract([0,0],e,this.getPan());if(Math.abs(s[0])<1&&Math.abs(s[1])<1&&!t)return;const o=ft.vec3.subtract(ft.vec3.create(),this.canvasToWorld(s),a),l=ft.vec3.subtract(ft.vec3.create(),n,o),c=ft.vec3.subtract(ft.vec3.create(),r,o);this.setCamera({...i,focalPoint:l,position:c},t)}getZoom(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.initialCamera;if(!e)return 1;const t=this.getVtkActiveCamera(),{parallelScale:i}=e;return i/t.getParallelScale()}setZoom(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.getCamera(),{parallelScale:n}=this.initialCamera,r=n/e;(i.parallelScale!==r||t)&&this.setCamera({...i,parallelScale:r},t)}_getFocalPointForViewPlaneReset(e){const{focalPoint:t,viewPlaneNormal:i}=this.getCamera(),n=this._getViewImageDataIntersections(e,t,i);let r=0,a=0,s=0;return n.forEach((e=>{let[t,i,n]=e;r+=t,a+=i,s+=n})),[r/n.length,a/n.length,s/n.length]}getCanvas(){return this.canvas}getVtkActiveCamera(){return this.getRenderer().getActiveCamera()}getCameraNoRotation(){const e=this.getVtkActiveCamera();return{viewUp:e.getViewUp(),viewPlaneNormal:e.getViewPlaneNormal(),position:e.getPosition(),focalPoint:e.getFocalPoint(),parallelProjection:e.getParallelProjection(),parallelScale:e.getParallelScale(),viewAngle:e.getViewAngle(),flipHorizontal:this.flipHorizontal,flipVertical:this.flipVertical}}getCamera(){return{...this.getCameraNoRotation(),rotation:this.getRotation()}}setCamera(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.getVtkActiveCamera(),n=structuredClone(this.getCamera()),r=Object.assign({},n,e),{viewUp:a,viewPlaneNormal:s,position:o,focalPoint:l,parallelScale:c,viewAngle:d,flipHorizontal:h,flipVertical:u,clippingRange:g}=e;if(void 0!==h){const e=h&&!this.flipHorizontal||!h&&this.flipHorizontal;e&&this.flip({flipHorizontal:e})}if(void 0!==u){const e=u&&!this.flipVertical||!u&&this.flipVertical;e&&this.flip({flipVertical:e})}void 0!==a&&i.setViewUp(a),void 0!==s&&i.setDirectionOfProjection(-s[0],-s[1],-s[2]),void 0!==o&&i.setPosition(...o),void 0!==l&&i.setFocalPoint(...l),void 0!==c&&i.setParallelScale(c),void 0!==d&&i.setViewAngle(d),void 0!==g&&i.setClippingRange(g);const m=n.focalPoint,p=n.viewUp;if(m&&l||p&&a){const e=i.getViewPlaneNormal(),t=i.getViewUp();let n=!1,s=!1;if(l){const t=[l[0]-m[0],l[1]-m[1],l[2]-m[2]];n=Math.abs(Cr().dot(t,e))>0}if(a&&(s=!qi(t,p)),n||s){const e=this.getDefaultActor();if(!e.actor)return;yt(e,"vtkActor")||this.updateClippingPlanesForActors(r),(yt(e,"vtkImageSlice")||this.type===w.VOLUME_3D)&&this.getRenderer().resetCameraClippingRange()}}t&&this.setInitialCamera(r),this.triggerCameraModifiedEventIfNecessary(n,this.getCamera())}triggerCameraModifiedEventIfNecessary(e,t){if(!this._suppressCameraModifiedEvents&&!this.suppressEvents){const i={previousCamera:e,camera:t,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};oe(this.element,p.CAMERA_MODIFIED,i)}}updateCameraClippingPlanesAndRange(){const e=this.getCamera();this.updateClippingPlanesForActors(e),this.getRenderer().resetCameraClippingRange()}async updateClippingPlanesForActors(e){this.getActors().map((t=>{if(!t.actor)return;const i=t.actor.getMapper();let n=t?.clippingFilter?t?.clippingFilter.getClippingPlanes():i.getClippingPlanes();0===n.length&&t?.clippingFilter&&(n=[It().newInstance(),It().newInstance()]);let r=Z.MINIMUM_SLAB_THICKNESS;t.slabThickness&&(r=t.slabThickness);const{viewPlaneNormal:a,focalPoint:s}=e;this.setOrientationOfClippingPlanes(n,r,a,s),oe(this.element,p.CLIPPING_PLANES_UPDATED,{actorEntry:t,focalPoint:s,vtkPlanes:n,viewport:this})}))}setOrientationOfClippingPlanes(e,t,i,n){if(e.length<2)return;const r=[i[0],i[1],i[2]];Cr().multiplyScalar(r,t),e[0].setNormal(i);const a=[0,0,0];Cr().subtract(n,r,a),e[0].setOrigin(a),e[1].setNormal(-i[0],-i[1],-i[2]);const s=[0,0,0];Cr().add(n,r,s),e[1].setOrigin(s)}getClippingPlanesForActor(e){if(e||(e=this.getDefaultActor()),!e.actor)throw new Error("Invalid actor entry: Actor is undefined");const t=e.actor.getMapper();let i=e?.clippingFilter?e?.clippingFilter.getClippingPlanes():t.getClippingPlanes();return 0===i.length&&e?.clippingFilter&&(i=[It().newInstance(),It().newInstance()]),i}_getWorldDistanceViewUpAndViewRight(e,t,i){const n=this._getCorners(e),r=this._getCorners(e),a=ft.vec3.cross(ft.vec3.create(),t,i);let s=xt().buildFromDegree().identity().rotateFromDirections(t,[1,0,0]);n.forEach((e=>s.apply(e)));let o=1/0,l=-1/0;for(let e=0;e<8;e++){const t=n[e][0];t>l&&(l=t),t<o&&(o=t)}s=xt().buildFromDegree().identity().rotateFromDirections([a[0],a[1],a[2]],[1,0,0]),r.forEach((e=>s.apply(e)));let c=1/0,d=-1/0;for(let e=0;e<8;e++){const t=r[e][0];t>d&&(d=t),t<c&&(c=t)}return{widthWorld:d-c,heightWorld:l-o}}getViewReference(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{focalPoint:t,viewPlaneNormal:i,viewUp:n}=this.getCamera();return{FrameOfReferenceUID:this.getFrameOfReferenceUID(),cameraFocalPoint:t,viewPlaneNormal:i,viewUp:n,sliceIndex:e.sliceIndex??this.getSliceIndex()}}isReferenceViewable(e,t){if(e.FrameOfReferenceUID&&e.FrameOfReferenceUID!==this.getFrameOfReferenceUID())return!1;const{viewPlaneNormal:i}=e,n=this.getCamera();return!(i&&!qi(i,n.viewPlaneNormal)&&!qi(ft.vec3.negate(n.viewPlaneNormal,n.viewPlaneNormal),i))||t?.withOrientation}getViewPresentation(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{rotation:!0,displayArea:!0,zoom:!0,pan:!0};const t={},{rotation:i,displayArea:n,zoom:r,pan:a}=e;i&&(t.rotation=this.getRotation()),n&&(t.displayArea=this.getDisplayArea());const s=this.getZoom();return r&&(t.zoom=s),a&&(t.pan=this.getPan(),ft.vec2.scale(t.pan,t.pan,1/s)),t}setViewReference(e){}setViewPresentation(e){if(!e)return;const{displayArea:t,zoom:i=this.getZoom(),pan:n,rotation:r}=e;t!==this.getDisplayArea()&&this.setDisplayArea(t),this.setZoom(i),n&&this.setPan(ft.vec2.scale([0,0],n,i)),r>=0&&this.setRotation(r)}_getCorners(e){return[[e[0],e[2],e[4]],[e[0],e[2],e[5]],[e[0],e[3],e[4]],[e[0],e[3],e[5]],[e[1],e[2],e[4]],[e[1],e[2],e[5]],[e[1],e[3],e[4]],[e[1],e[3],e[5]]]}_getFocalPointForResetCamera(e,t,i){let{resetPan:n=!0,resetToCenter:r=!0}=i;if(r&&n)return e;if(r&&!n)return br(t.focalPoint)?e:t.focalPoint;if(!r&&n){const i=t,n=i.focalPoint,r=i.viewPlaneNormal,a=ft.vec3.subtract(ft.vec3.create(),e,n),s=ft.vec3.dot(a,r),o=ft.vec3.scaleAndAdd(ft.vec3.create(),e,r,-1*s);return[o[0],o[1],o[2]]}return n||r?void 0:br(t.focalPoint)?e:t.focalPoint}_isInBounds(e,t){const[i,n,r,a,s,o]=t,[l,c,d]=e;return!(l<i||l>n||c<r||c>a||d<s||d>o)}_getEdges(e){const[t,i,n,r,a,s,o,l]=this._getCorners(e);return[[t,i],[t,a],[t,n],[i,r],[i,s],[n,r],[n,o],[r,l],[a,o],[a,s],[s,l],[o,l]]}static boundsRadius(e){const t=(e[1]-e[0])**2,i=(e[3]-e[2])**2,n=(e[5]-e[4])**2;return.5*Math.sqrt(t+i+n||1)}setDataIds(e,t){throw new Error("Unsupported operatoin setDataIds")}}ie(Tr,"CameraViewPresentation",{rotation:!0,pan:!0,zoom:!0,displayArea:!0}),ie(Tr,"TransferViewPresentation",{windowLevel:!0,paletteLut:!0});const Ar=Tr;var Sr=K(821),Or=K.n(Sr);const Dr={isPerformingCoordinateTransformation:!1};function xr(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Dr,i),Or().extend(e,t,i),ce().setGet(e,t,["isPerformingCoordinateTransformation"]),function(e,t){t.classHierarchy.push("vtkSlabCamera");const i=ft.mat4.identity(new Float64Array(16)),n=new Float64Array(3);e.getProjectionMatrix=(e,r,a)=>{const s=ft.mat4.create();if(t.projectionMatrix){const e=1/t.physicalScale;return ft.vec3.set(n,e,e,e),ft.mat4.copy(s,t.projectionMatrix),ft.mat4.scale(s,s,n),ft.mat4.transpose(s,s),s}ft.mat4.identity(i);let o=t.clippingRange[0],l=t.clippingRange[1];t.isPerformingCoordinateTransformation&&(o=t.distance,l=t.distance+.1);const c=l-o,d=[o+(r+1)*c/2,o+(a+1)*c/2];if(t.parallelProjection){const n=t.parallelScale*e,r=t.parallelScale,a=(t.windowCenter[0]-1)*n,s=(t.windowCenter[0]+1)*n,o=(t.windowCenter[1]-1)*r,l=(t.windowCenter[1]+1)*r;ft.mat4.ortho(i,a,s,o,l,d[0],d[1]),ft.mat4.transpose(i,i)}else{if(t.useOffAxisProjection)throw new Error("Off-Axis projection is not supported at this time");{const n=Math.tan(Cr().radiansFromDegrees(t.viewAngle)/2);let r,a;!0===t.useHorizontalViewAngle?(r=o*n,a=o*n/e):(r=o*n*e,a=o*n);const s=(t.windowCenter[0]-1)*r,l=(t.windowCenter[0]+1)*r,c=(t.windowCenter[1]-1)*a,h=(t.windowCenter[1]+1)*a,u=d[0],g=d[1];i[0]=2*u/(l-s),i[5]=2*u/(h-c),i[2]=(s+l)/(l-s),i[6]=(c+h)/(h-c),i[10]=-(u+g)/(g-u),i[14]=-1,i[11]=-2*u*g/(g-u),i[15]=0}}return ft.mat4.copy(s,i),s}}(e,t)}const Mr={newInstance:ce().newInstance(xr,"vtkSlabCamera"),extend:xr},_r=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=e.getCamera(),{focalPoint:r,viewPlaneNormal:a}=n,{spacingInNormalDirection:s,actorUID:o}=pr(e,n,t,i);if(!o)throw new Error(`Could not find image volume with id ${t} in the viewport`);const l=e.getActor(o);return l?{sliceRange:Nt(l.actor,a,r),spacingInNormalDirection:s,camera:n}:(console.warn("No actor found for with actorUID of",o),null)},Vr=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const{sliceRange:n,spacingInNormalDirection:r,camera:a}=_r(e,t,i),{min:s,max:o,current:l}=n,c=Math.round((o-s)/r),d=(l-s)/(o-s)*c;return{numScrollSteps:c,currentStepIndex:Math.round(d),sliceRangeInfo:{sliceRange:n,spacingInNormalDirection:r,camera:a}}};function kr(e){let t=[];const[i,n]=e.getRange();e.getTable(i,n,1024,t),t=t.filter(((e,t)=>t%3==0));const r=[...Array(1024).keys()].map(((e,t)=>i+(n-i)/1023*t)),a=t[256],s=Math.log((1-a)/a),o=r[256],l=t[768],c=Math.log((1-l)/l),d=r[768],h=Math.round(4*(d-o)/(s-c)),u=Math.round(o+h*s/4);return[Math.round(u-h/2),Math.round(u+h/2)]}function Lr(e,t){const i=t.colorTransfer.split(" ").splice(1).map(parseFloat),{shiftRange:n}=function(e){let t=1/0,i=-1/0;for(let n=0;n<e.length;n+=4)t=Math.min(t,e[n]),i=Math.max(i,e[n]);const n=(i-t)/2;return{shiftRange:[-n,n],min:t,max:i}}(i),r=n[0],a=n[1]-n[0],s=Gt().newInstance(),o=[];for(let e=0;e<i.length;e+=4){let t=i[e];const n=i[e+1],s=i[e+2],l=i[e+3];t=(t-r)/a,o.push([t,n,s,l])}!function(e,t,i){const n=t[1]-t[0],r=e.map((e=>{let[i,r,a,s]=e;return[i*n+t[0],r,a,s]}));i.removeAllPoints(),r.forEach((e=>{let[t,n,r,a]=e;return i.addRGBPoint(t,n,r,a)}))}(o,n,s),e.getProperty().setRGBTransferFunction(0,s);const l=t.scalarOpacity.split(" ").splice(1).map(parseFloat),c=qt().newInstance(),d=[];for(let e=0;e<l.length;e+=2){let t=l[e];const i=l[e+1];t=(t-r)/a,d.push([t,i])}!function(e,t,i){const n=t[1]-t[0],r=e.map((e=>{let[i,r]=e;return[i*n+t[0],r]}));i.removeAllPoints(),r.forEach((e=>{let[t,n]=e;return i.addPoint(t,n)}))}(d,n,c);const h=e.getProperty();h.setScalarOpacity(0,c);const[u,g,m,p]=t.gradientOpacity.split(" ").splice(1).map(parseFloat);h.setUseGradientOpacity(0,!0),h.setGradientOpacityMinimumValue(0,u),h.setGradientOpacityMinimumOpacity(0,g),h.setGradientOpacityMaximumValue(0,m),h.setGradientOpacityMaximumOpacity(0,p),"1"===t.interpolation&&h.setInterpolationTypeToFastLinear(),h.setShade("1"===t.shade);const f=parseFloat(t.ambient),v=parseFloat(t.diffuse),I=parseFloat(t.specular),w=parseFloat(t.specularPower);h.setAmbient(f),h.setDiffuse(v),h.setSpecular(I),h.setSpecularPower(w)}const Nr=class extends Ar{constructor(e){if(super(e),ie(this,"useCPURendering",!1),ie(this,"_FrameOfReferenceUID",void 0),ie(this,"initialTransferFunctionNodes",void 0),ie(this,"globalDefaultProperties",void 0),ie(this,"perVolumeIdDefaultProperties",new Map),ie(this,"initialViewUp",void 0),ie(this,"viewportProperties",{}),ie(this,"volumeIds",new Set),ie(this,"setRotation",(e=>{const t=this.getPan(this.fitToCanvasCamera),i=this.getPan(),n=this.getCamera(),r=ft.vec2.sub([0,0],t,i);this.setPan(r,!1);const{flipVertical:a}=this.getCamera(),s=a?ft.vec3.negate([0,0,0],this.initialViewUp):this.initialViewUp;this.setCameraNoEvent({viewUp:s}),this.rotateCamera(e);const o=this.getPan(),l=this.getPan(this.fitToCanvasCamera),c=ft.vec2.sub([0,0],o,l),d=ft.vec2.add([0,0],t,c);if(this.setPan(d,!1),this._suppressCameraModifiedEvents)return;const h={previousCamera:n,camera:this.getCamera(),element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};oe(this.element,p.CAMERA_MODIFIED,h)})),ie(this,"getDefaultProperties",(e=>{let t;return void 0!==e&&(t=this.perVolumeIdDefaultProperties.get(e)),void 0!==t?t:{...this.globalDefaultProperties}})),ie(this,"getProperties",(e=>{if(!this._getApplicableVolumeActor(e))return;const{colormap:t,VOILUTFunction:i,interpolationType:n,invert:r,slabThickness:a,preset:s}=this.viewportProperties,o=this.getActors().map((e=>{const t=e.actor,i=e.uid;if(!Ct.getVolume(i))return null;const n=t.getProperty().getRGBTransferFunction(0),[r,a]="SIGMOID"===this.viewportProperties?.VOILUTFunction?kr(n):n.getRange();return{volumeId:i,voiRange:{lower:r,upper:a}}})).filter(Boolean),l=e?o.find((t=>t.volumeId===e))?.voiRange:o[0]?.voiRange,c=this.getColormap(e);return{colormap:e&&c?c:t,voiRange:l,VOILUTFunction:i,interpolationType:n,invert:r,slabThickness:a,preset:s}})),ie(this,"getColormap",(e=>{const t=this._getApplicableVolumeActor(e);if(!t)return;const{volumeActor:i}=t,n=i.getProperty().getRGBTransferFunction(0),{nodes:r}=n.getState();return Qi(r.reduce(((e,t)=>(e.push(t.x,t.r,t.g,t.b),e)),[]),i)})),ie(this,"getRotation",(()=>{const{viewUp:e,viewPlaneNormal:t,flipVertical:i}=this.getCameraNoRotation(),n=i?ft.vec3.negate([0,0,0],this.initialViewUp):this.initialViewUp;if(!n)return 0;const r=180*ft.vec3.angle(n,e)/Math.PI,a=ft.vec3.cross([0,0,0],n,e);return ft.vec3.dot(a,t)>=0?r:(360-r)%360})),ie(this,"getFrameOfReferenceUID",(()=>this._FrameOfReferenceUID)),ie(this,"canvasToWorld",(e=>{const t=this.getVtkActiveCamera();t.setIsPerformingCoordinateTransformation?.(!0);const i=this.getRenderer(),n=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),r=n.getSize(),a=window.devicePixelRatio||1,s=[e[0]*a,e[1]*a],o=[s[0]+this.sx,s[1]+this.sy];o[1]=r[1]-o[1];const l=n.displayToWorld(o[0],o[1],0,i);return t.setIsPerformingCoordinateTransformation?.(!1),[l[0],l[1],l[2]]})),ie(this,"worldToCanvas",(e=>{const t=this.getVtkActiveCamera();t.setIsPerformingCoordinateTransformation?.(!0);const i=this.getRenderer(),n=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),r=n.getSize(),a=n.worldToDisplay(...e,i);a[1]=r[1]-a[1];const s=[a[0]-this.sx,a[1]-this.sy],o=window.devicePixelRatio||1,l=[s[0]/o,s[1]/o];return t.setIsPerformingCoordinateTransformation(!1),l})),ie(this,"hasImageURI",(e=>this.getActors().filter((e=>yt(e,"vtkVolume"))).some((t=>{let{uid:i}=t;const n=Ct.getVolume(i);return!!n?.imageIds&&n.imageIds.map(wt).includes(e)})))),ie(this,"getImageIds",(e=>{const t=this._getApplicableVolumeActor(e);if(!t)throw new Error(`No actor found for the given volumeId: ${e}`);const i=t.volumeId,n=Ct.getVolume(i);if(!n)throw new Error(`imageVolume with id: ${i} does not exist in cache`);return n.imageIds})),this.useCPURendering=Vi(),this.useCPURendering)throw new Error("VolumeViewports cannot be used whilst CPU Fallback Rendering is enabled.");const t=this.getRenderer(),i=Mr.newInstance();switch(t.setActiveCamera(i),this.type){case w.ORTHOGRAPHIC:case w.VOLUME_3D:i.setParallelProjection(!0);break;case w.PERSPECTIVE:i.setParallelProjection(!1);break;default:throw new Error(`Unrecognized viewport type: ${this.type}`)}this.initializeVolumeNewImageEventDispatcher()}static get useCustomRenderingPipeline(){return!1}getSliceViewInfo(){throw new Error("Method not implemented.")}applyViewOrientation(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const{viewPlaneNormal:i,viewUp:n}=this._getOrientationVectors(e),r=this.getVtkActiveCamera();r.setDirectionOfProjection(-i[0],-i[1],-i[2]),r.setViewUpFrom(n),this.initialViewUp=n,t&&this.resetCamera()}initializeVolumeNewImageEventDispatcher(){const e=function(e){const{viewportId:t}=e.detail;t!==this.id||this.isDisabled||this.getImageData()&&function(e){const{renderingEngineId:t,viewportId:i}=e.detail,n=zt(t).getViewport(i);if(!("setVolumes"in n))throw new Error("volumeNewImageEventDispatcher: viewport does not have setVolumes method");void 0===Ir[n.id]&&(Ir[n.id]=0);const r=vr(n);if(!r)return void console.warn(`volumeNewImageEventDispatcher: sliceData is undefined for viewport ${n.id}`);const{numberOfSlices:a,imageIndex:s}=r;if(Ir[n.id]===s)return;Ir[n.id]=s;const o={imageIndex:s,viewportId:i,renderingEngineId:t,numberOfSlices:a};oe(n.element,p.VOLUME_NEW_IMAGE,o)}(e)}.bind(this),t=function(i){const{viewportId:n}=i.detail;n===this.id&&(this.element.removeEventListener(p.CAMERA_MODIFIED,e),ae.removeEventListener(p.ELEMENT_DISABLED,t),function(e){void 0!==Ir[e]&&delete Ir[e]}(n))}.bind(this);this.element.removeEventListener(p.CAMERA_MODIFIED,e),this.element.addEventListener(p.CAMERA_MODIFIED,e),ae.addEventListener(p.ELEMENT_DISABLED,t)}setVOILUTFunction(e,t,i){Object.values(V).includes(e)||(e=V.LINEAR);const{voiRange:n}=this.getProperties();this.setVOI(n,t,i),this.viewportProperties.VOILUTFunction=e}setColormap(e,t,i){const n=this._getApplicableVolumeActor(t);if(!n)return;const{volumeActor:r}=n,a=Gt().newInstance();let s=Xi(e.name);const{name:o}=e;if(s||(s=Wt().getPresetByName(o)),!s)throw new Error(`Colormap ${e} not found`);const l=r.getProperty().getRGBTransferFunction(0).getRange();if(a.applyColorMap(s),a.setMappingRange(l[0],l[1]),r.getProperty().setRGBTransferFunction(0,a),this.viewportProperties.colormap=e,!i){const i={viewportId:this.id,colormap:e,volumeId:t};oe(this.element,p.COLORMAP_MODIFIED,i)}}setOpacity(e,t){const i=this._getApplicableVolumeActor(t);if(!i)return;const{volumeActor:n}=i,r=qt().newInstance();if("number"==typeof e.opacity){const t=n.getProperty().getRGBTransferFunction(0).getRange();r.addPoint(t[0],e.opacity),r.addPoint(t[1],e.opacity)}else e.opacity.forEach((e=>{let{opacity:t,value:i}=e;r.addPoint(i,t)}));n.getProperty().setScalarOpacity(0,r),this.viewportProperties.colormap||(this.viewportProperties.colormap={}),this.viewportProperties.colormap.opacity=e.opacity}setInvert(e,t,i){const n=this._getApplicableVolumeActor(t);if(!n)return;const r=n.volumeId;if(en(this._getOrCreateColorTransferFunction(r)),this.viewportProperties.invert=e,!i){const e={...this.getVOIModifiedEventDetail(r),invertStateChanged:!0};oe(this.element,p.VOI_MODIFIED,e)}}getVOIModifiedEventDetail(e){const t=this._getApplicableVolumeActor(e);if(!t)throw new Error(`No actor found for the given volumeId: ${e}`);const i=t.volumeActor.getProperty().getRGBTransferFunction(0).getMappingRange(),n=this.getColormap(e),{VOILUTFunction:r,invert:a}=this.getProperties(e);return{viewportId:this.id,range:{lower:i[0],upper:i[1]},volumeId:t.volumeId,VOILUTFunction:r,colormap:n,invert:a}}_getOrCreateColorTransferFunction(e){const t=this._getApplicableVolumeActor(e);if(!t)return null;const{volumeActor:i}=t,n=i.getProperty().getRGBTransferFunction(0);if(n)return n;const r=Gt().newInstance();return i.getProperty().setRGBTransferFunction(0,r),r}setInterpolationType(e,t){const i=this._getApplicableVolumeActor(t);if(!i)return;const{volumeActor:n}=i;n.getProperty().setInterpolationType(e),this.viewportProperties.interpolationType=e}setVOI(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=this._getApplicableVolumeActor(t);if(!n)return;const{volumeActor:r}=n,a=n.volumeId;let s=e;if(void 0===s){const e=r.getMapper().getInputData().getPointData().getScalars().getRange();s={lower:e[0],upper:e[1]}}const{VOILUTFunction:o}=this.getProperties(a);if(o===V.SAMPLED_SIGMOID){const e=rn(s);r.getProperty().setRGBTransferFunction(0,e)}else{const{lower:e,upper:t}=s;r.getProperty().getRGBTransferFunction(0).setRange(e,t)}if(!i){const e={...this.getVOIModifiedEventDetail(a)};oe(this.element,p.VOI_MODIFIED,e)}this.viewportProperties.voiRange=s}rotateCamera(e){const t=e-this.getRotation();this.getVtkActiveCamera().roll(-t)}setDefaultProperties(e,t){null==t?this.globalDefaultProperties=e:this.perVolumeIdDefaultProperties.set(t,e)}clearDefaultProperties(e){null==e?(this.globalDefaultProperties={},this.resetProperties()):(this.perVolumeIdDefaultProperties.delete(e),this.resetToDefaultProperties(e))}getViewReference(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=super.getViewReference(e),i=this.getVolumeId(e);if(!1!==e?.forFrameOfReference&&(t.volumeId=i),"number"!=typeof e?.sliceIndex)return t;const{viewPlaneNormal:n}=t,r=e?.sliceIndex-this.getSliceIndex(),{sliceRangeInfo:a}=Vr(this,i,!0),{sliceRange:s,spacingInNormalDirection:o,camera:l}=a,{focalPoint:c,position:d}=l,{newFocalPoint:h}=Ft(c,d,s,n,o,r);return t.cameraFocalPoint=h,t}isReferenceViewable(e,t){if(!e.FrameOfReferenceUID)return!1;if(!super.isReferenceViewable(e,t))return!1;if(t?.withNavigation)return!0;const i=this.getSliceIndex(),{sliceIndex:n}=e;return Array.isArray(n)?n[0]<=i&&i<=n[1]:void 0===n||n===i}scroll(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;const t=this.getVolumeId(),{sliceRangeInfo:i}=Vr(this,t,!0);if(!i)return;const{sliceRange:n,spacingInNormalDirection:r,camera:a}=i,{focalPoint:s,viewPlaneNormal:o,position:l}=a,{newFocalPoint:c,newPosition:d}=Ft(s,l,n,o,r,e);this.setCamera({focalPoint:c,position:d})}setViewReference(e){if(!e)return;const t=this.getVolumeId(),{viewPlaneNormal:i,FrameOfReferenceUID:n,cameraFocalPoint:r,viewUp:a}=e;let{sliceIndex:s}=e;const{focalPoint:o,viewPlaneNormal:l,position:c}=this.getCamera(),d=$i(l,i),h=qi(l,i);if("number"==typeof s&&e.volumeId===t&&(d||h)){const{currentStepIndex:e,sliceRangeInfo:i,numScrollSteps:n}=Vr(this,t,!0),{sliceRange:r,spacingInNormalDirection:a}=i;d&&(s=n-s-1);const h=s-e,{newFocalPoint:u,newPosition:g}=Ft(o,c,r,l,a,h);this.setCamera({focalPoint:u,position:g})}else{if(n!==this.getFrameOfReferenceUID())throw new Error(`Incompatible view refs: ${n}!==${this.getFrameOfReferenceUID()}`);if(i&&!d&&!h)return this.setOrientation({viewPlaneNormal:i,viewUp:a}),void this.setViewReference(e);if(r){const e=ft.vec3.subtract([0,0,0],r,o),t=i??l,n=ft.vec3.dot(e,t);qi(n,0)||ft.vec3.scale(e,t,n);const a=ft.vec3.add([0,0,0],o,e),s=ft.vec3.add([0,0,0],c,e);this.setCamera({focalPoint:a,position:s})}}}setProperties(){let{voiRange:e,VOILUTFunction:t,invert:i,colormap:n,preset:r,interpolationType:a,slabThickness:s}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=arguments.length>1?arguments[1]:void 0,l=arguments.length>2&&void 0!==arguments[2]&&arguments[2];null==this.globalDefaultProperties&&this.setDefaultProperties({voiRange:e,VOILUTFunction:t,invert:i,colormap:n,preset:r,slabThickness:s}),n?.name&&this.setColormap(n,o,l),null!=n?.opacity&&this.setOpacity(n,o),void 0!==e&&this.setVOI(e,o,l),void 0!==a&&this.setInterpolationType(a),void 0!==t&&this.setVOILUTFunction(t,o,l),void 0!==i&&this.viewportProperties.invert!==i&&this.setInvert(i,o,l),void 0!==r&&this.setPreset(r,o,l),void 0!==s&&(this.setSlabThickness(s),this.viewportProperties.slabThickness=s)}resetToDefaultProperties(e){const t=this.globalDefaultProperties;t.colormap?.name&&this.setColormap(t.colormap,e),null!=t.colormap?.opacity&&this.setOpacity(t.colormap,e),void 0!==t.voiRange&&this.setVOI(t.voiRange,e),void 0!==t.VOILUTFunction&&this.setVOILUTFunction(t.VOILUTFunction,e),void 0!==t.invert&&this.setInvert(t.invert,e),void 0!==t.slabThickness&&(this.setSlabThickness(t.slabThickness),this.viewportProperties.slabThickness=t.slabThickness),this.render()}setPreset(e,t,i){const n=this._getApplicableVolumeActor(t);if(!n)return;const{volumeActor:r}=n;let a=e;"string"==typeof a&&(a=Q.find((t=>t.name===e))),a&&(Lr(r,a),this.viewportProperties.preset=a,this.render(),i||oe(this.element,p.PRESET_MODIFIED,{viewportId:this.id,volumeId:n.volumeId,actor:r,presetName:a.name}))}async setVolumes(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=Ct.getVolume(e[0].volumeId);if(!n)throw new Error(`imageVolume with id: ${n.volumeId} does not exist, you need to create/allocate the volume first`);const r=n.metadata.FrameOfReferenceUID;this._isValidVolumeInputArray(e,r),this._FrameOfReferenceUID=r,e.forEach((e=>{this._addVolumeId(e.volumeId)}));const a=[];for(let t=0;t<e.length;t++){const{volumeId:n,actorUID:r,slabThickness:s}=e[t],o=await hr(e[t],this.element,this.id,i),l=r||n;a.push({uid:l,actor:o,slabThickness:s,referencedId:n})}this._setVolumeActors(a),this.viewportStatus=U.PRE_RENDER,this.initializeColorTransferFunction(e),oe(this.element,p.VOLUME_VIEWPORT_NEW_VOLUME,{viewportId:this.id,volumeActors:a}),t&&this.render()}async addVolumes(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=Ct.getVolume(e[0].volumeId);if(!n)throw new Error(`imageVolume with id: ${n.volumeId} does not exist`);const r=[];this._isValidVolumeInputArray(e,this._FrameOfReferenceUID),e.forEach((e=>{this._addVolumeId(e.volumeId)}));for(let t=0;t<e.length;t++){const{volumeId:n,visibility:a,actorUID:s,slabThickness:o}=e[t],l=await hr(e[t],this.element,this.id,i);a||l.setVisibility(!1);const c=s||n;r.push({uid:c,actor:l,slabThickness:o,referencedId:n})}this.addActors(r),this.initializeColorTransferFunction(e),t&&this.render()}removeVolumeActors(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.removeActors(e),t&&this.render()}setOrientation(e){console.warn('Method "setOrientation" needs implementation')}initializeColorTransferFunction(e){const t=e[0].volumeId,i=this._getOrCreateColorTransferFunction(t);!this.initialTransferFunctionNodes&&i&&(this.initialTransferFunctionNodes=sn(i))}_getApplicableVolumeActor(e){if(void 0!==e&&!this.getActor(e))return;const t=this.getActors();if(!t.length)return;let i;return e&&(i=this.getActor(e).actor),i||(i=t[0].actor,e=t[0].uid),{volumeActor:i,volumeId:e}}async _isValidVolumeInputArray(e,t){const i=e.length;for(let n=1;n<i;n++)if(t!==Ct.getVolume(e[n].volumeId).metadata.FrameOfReferenceUID)throw new Error(`Volumes being added to viewport ${this.id} do not share the same FrameOfReferenceUID. This is not yet supported`);return!0}getBounds(){return this.getRenderer().computeVisiblePropBounds()}flip(e){super.flip(e)}hasVolumeId(e){return this.volumeIds.has(e)}getImageData(e){const t=this.getDefaultActor();if(!t)return;const{uid:i}=t;e=e??i;const n=this.getActor(e);if(!yt(n,"vtkVolume"))return;const r=n.actor,a=Ct.getVolume(e),s=r.getMapper().getInputData();return{dimensions:s.getDimensions(),spacing:s.getSpacing(),origin:s.getOrigin(),direction:s.getDirection(),imageData:r.getMapper().getInputData(),metadata:{Modality:a?.metadata?.Modality,FrameOfReferenceUID:a?.metadata?.FrameOfReferenceUID},get scalarData(){return a?.voxelManager?.getScalarData()},scaling:a?.scaling,hasPixelSpacing:!0,voxelManager:a?.voxelManager}}_setVolumeActors(e){for(let t=0;t<e.length;t++)this.viewportProperties.invert=!1;this.setActors(e)}_getOrientationVectors(e){if("object"==typeof e){if(e.viewPlaneNormal&&e.viewUp)return e;throw new Error("Invalid orientation object. It must contain viewPlaneNormal and viewUp")}if("string"==typeof e&&J[e])return this.viewportProperties.orientation=e,J[e];throw new Error(`Invalid orientation: ${e}. Valid orientations are: ${Object.keys(J).join(", ")}`)}getSlabThickness(){const e=this.getActors();let t=Z.MINIMUM_SLAB_THICKNESS;return e.forEach((e=>{e.slabThickness>t&&(t=e.slabThickness)})),t}getIntensityFromWorld(e){const t=this.getDefaultActor();if(!yt(t,"vtkVolume"))return;const{actor:i,uid:n}=t,r=i.getMapper().getInputData(),a=Ct.getVolume(n),s=an(r,e);return a.voxelManager.getAtIJKPoint(s)}getVolumeId(e){const t=this.getActors();if(t)return e?.volumeId?t.find((t=>"vtkVolume"===t.actor.getClassName()&&t.uid===e?.volumeId))?.uid:t.find((e=>"vtkVolume"===e.actor.getClassName()))?.uid}getViewReferenceId(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{volumeId:t,sliceIndex:i}=e;if(!t){const e=this.getActors();if(!e)return;t=e.find((e=>"vtkVolume"===e.actor.getClassName()))?.uid}const n=this.getSliceIndex();i??=n;const{viewPlaneNormal:r,focalPoint:a}=this.getCamera(),s=t.includes("?")?"&":"?";return`volumeId:${t}${s}sliceIndex=${i}&viewPlaneNormal=${r.join(",")}&focalPoint=${a.join(",")}`}_addVolumeId(e){this.volumeIds.add(e)}};function Fr(e,t){const{imageData:i}=e.getImageData();return an(i,e.canvasToWorld(t))}function Ur(e,t){return e.indexToWorld(t)}const Gr=class extends Nr{constructor(e){super(e),ie(this,"_useAcquisitionPlaneForViewPlane",!1),ie(this,"getNumberOfSlices",(()=>{const{numberOfSlices:e}=vr(this)||{};return e})),ie(this,"getCurrentImageIdIndex",(e=>{const{viewPlaneNormal:t,focalPoint:i}=this.getCamera(),n=this.getImageData(e);if(!n)return;const{origin:r,direction:a,spacing:s}=n,o=St({direction:a,spacing:s},t),l=ft.vec3.create();ft.vec3.sub(l,i,r);const c=ft.vec3.dot(l,t);return Math.round(Math.abs(c)/o)})),ie(this,"getSliceIndex",(()=>{const{imageIndex:e}=vr(this)||{};return e})),ie(this,"getCurrentImageId",(()=>{const e=this.getDefaultActor();if(!e||!yt(e,"vtkVolume"))return;const{uid:t}=e,i=Ct.getVolume(t);if(!i)return;const{viewPlaneNormal:n,focalPoint:r}=this.getCamera();return Ot(i,r,n)})),ie(this,"getSlicePlaneCoordinates",(()=>{const e=this.getDefaultActor();if(!e?.actor)return console.warn("No image data found for calculating vtkPlanes."),[];const t=e.uid,i=Ct.getVolume(t),n=this.getCamera(),{focalPoint:r,position:a,viewPlaneNormal:s}=n,o=St(i,s),l=Nt(e.actor,s,r),c=Math.round((l.current-l.min)/o),d=Math.round((l.max-l.current)/o),h=this.getSliceIndex(),u=[];for(let e=-c;e<=d;e++){const{newFocalPoint:t}=Ft(r,a,l,s,o,e);u.push({sliceIndex:h+e,point:t})}return u}));const{orientation:t}=this.options;t&&t!==S.ACQUISITION?this.applyViewOrientation(t):this._useAcquisitionPlaneForViewPlane=!0}async setVolumes(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=Ct.getVolume(e[0].volumeId);if(!n)throw new Error(`imageVolume with id: ${n.volumeId} does not exist`);return this._useAcquisitionPlaneForViewPlane&&(this._setViewPlaneToAcquisitionPlane(n),this._useAcquisitionPlaneForViewPlane=!1),super.setVolumes(e,t,i)}async addVolumes(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=Ct.getVolume(e[0].volumeId);if(!n)throw new Error(`imageVolume with id: ${n.volumeId} does not exist`);return this._useAcquisitionPlaneForViewPlane&&(this._setViewPlaneToAcquisitionPlane(n),this._useAcquisitionPlaneForViewPlane=!1),super.addVolumes(e,t,i)}setOrientation(e){let t,i,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("string"==typeof e){if(J[e])({viewPlaneNormal:t,viewUp:i}=J[e]);else{if("acquisition"!==e)throw new Error(`Invalid orientation: ${e}. Use Enums.OrientationAxis instead.`);({viewPlaneNormal:t,viewUp:i}=this._getAcquisitionPlaneOrientation())}this.setCamera({viewPlaneNormal:t,viewUp:i}),this.viewportProperties.orientation=e,this.resetCamera()}else({viewPlaneNormal:t,viewUp:i}=e),this.applyViewOrientation(e);n&&this.render()}_getAcquisitionPlaneOrientation(){const e=this.getDefaultActor();if(!e)return;const t=e.uid,i=Ct.getVolume(t);if(!i)throw new Error(`imageVolume with id: ${t} does not exist in cache`);const{direction:n}=i;return{viewPlaneNormal:n.slice(6,9).map((e=>-e)),viewUp:n.slice(3,6).map((e=>-e))}}_setViewPlaneToAcquisitionPlane(e){let t,i;if(e){const{direction:n}=e;t=n.slice(6,9).map((e=>-e)),i=n.slice(3,6).map((e=>-e))}else({viewPlaneNormal:t,viewUp:i}=this._getAcquisitionPlaneOrientation());this.setCamera({viewPlaneNormal:t,viewUp:i}),this.initialViewUp=i,this.resetCamera()}setBlendMode(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.getActors();t&&t.length>0&&(n=n.filter((e=>t.includes(e.uid)))),n.forEach((t=>{const{actor:i}=t,n=i.getMapper();n.setBlendMode?.(e)})),i&&this.render()}resetCamera(e){const{resetPan:t=!0,resetZoom:i=!0,resetRotation:n=!0,resetToCenter:r=!0,suppressEvents:a=!1,resetOrientation:s=!0}=e||{},{orientation:o}=this.viewportProperties;o&&s&&this.applyViewOrientation(o,!1),super.resetCamera({resetPan:t,resetZoom:i,resetToCenter:r});const l=this.getVtkActiveCamera();this.setCameraClippingRange();const c=l.getViewPlaneNormal(),d=l.getFocalPoint();if(this.getActors().forEach((e=>{if(!e.actor)return;const t=e.actor.getMapper();if(0===t.getClippingPlanes().length&&!e?.clippingFilter){const i=It().newInstance(),n=It().newInstance(),r=[i,n];let a=Z.MINIMUM_SLAB_THICKNESS;e.slabThickness&&(a=e.slabThickness),this.setOrientationOfClippingPlanes(r,a,c,d),t.addClippingPlane(i),t.addClippingPlane(n)}})),n&&void 0!==J[this.viewportProperties.orientation]){const e=J[this.viewportProperties.orientation];this.setCameraNoEvent({viewUp:e.viewUp,viewPlaneNormal:e.viewPlaneNormal})}if(!a){const e={viewportId:this.id,camera:this.getCamera(),renderingEngineId:this.renderingEngineId,element:this.element};oe(this.element,p.CAMERA_RESET,e)}return!0}setSlabThickness(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e<.1&&(e=.1);let i=this.getActors();t&&t.length>0&&(i=i.filter((e=>t.includes(e.uid)))),i.forEach((t=>{yt(t,"vtkVolume")&&(t.slabThickness=e)}));const n=this.getCamera();this.updateClippingPlanesForActors(n),this.setCameraClippingRange(),this.triggerCameraModifiedEventIfNecessary(n,n),this.viewportProperties.slabThickness=e}resetSlabThickness(){this.getActors().forEach((e=>{yt(e,"vtkVolume")&&(e.slabThickness=Z.MINIMUM_SLAB_THICKNESS)}));const e=this.getCamera();this.updateClippingPlanesForActors(e),this.triggerCameraModifiedEventIfNecessary(e,e),this.viewportProperties.slabThickness=void 0}getSliceViewInfo(){const{width:e,height:t}=this.getCanvas(),i=Fr(this,[0,0]),n=Fr(this,[e-1,0]),r=Fr(this,[0,t-1]),a=ft.vec3.sub(ft.vec3.create(),n,i),s=ft.vec3.sub(ft.vec3.create(),r,i),o=ft.vec3.cross(ft.vec3.create(),a,s);ft.vec3.normalize(a,a),ft.vec3.normalize(s,s),ft.vec3.normalize(o,o);const{dimensions:l}=this.getImageData(),[c,d,h]=l,u=[[0,0,0],[c-1,0,0],[0,d-1,0],[c-1,d-1,0],[0,0,h-1],[c-1,0,h-1],[0,d-1,h-1],[c-1,d-1,h-1]].map((e=>function(e,t){const{imageData:i}=e.getImageData(),n=Ur(i,t);return e.worldToCanvas(n)}(this,e))).reduce(((e,t)=>(e.minX=Math.min(e.minX,t[0]),e.minY=Math.min(e.minY,t[1]),e.maxX=Math.max(e.maxX,t[0]),e.maxY=Math.max(e.maxY,t[1]),e)),{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}),g=Fr(this,[u.minX,u.minY]),m=ft.mat4.fromValues(a[0],a[1],a[2],0,s[0],s[1],s[2],0,o[0],o[1],o[2],0,g[0],g[1],g[2],1),p=Fr(this,[u.maxX,u.maxY]),f=ft.vec3.sub(ft.vec3.create(),p,g),v=ft.mat4.invert(ft.mat4.create(),m),{viewPlaneNormal:I}=this.getCamera();if(I.filter((e=>Math.abs(e)>X)).length>1)throw new Error("getSliceInfo is not supported for oblique views");const w=I.findIndex((e=>Math.abs(e)>1-X));if(-1===w)throw new Error("Unable to determine slice axis");const C=ft.vec3.dot(a,f)+1,E=ft.vec3.dot(s,f)+1;return{sliceIndex:this.getSliceIndex(),width:C,height:E,slicePlane:w,sliceToIndexMatrix:m,indexToSliceMatrix:v}}getCurrentSlicePixelData(){const{voxelManager:e}=this.getImageData();return e.getSliceData(this.getSliceViewInfo())}getViewReference(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=super.getViewReference(e);if(!t?.volumeId)return;const i=Ct.getVolume(t.volumeId);return t.referencedImageId=Ot(i,t.cameraFocalPoint,t.viewPlaneNormal),t}resetProperties(e){this._resetProperties(e)}_resetProperties(e){const t=e?this.getActor(e):this.getDefaultActor();if(!t)throw new Error(`No actor found for the given volumeId: ${e}`);t.slabThickness&&(t.slabThickness=Z.MINIMUM_SLAB_THICKNESS,this.viewportProperties.slabThickness=void 0,this.updateClippingPlanesForActors(this.getCamera()));const i=Ct.getVolume(t.uid);if(!i)throw new Error(`imageVolume with id: ${t.uid} does not exist in cache`);dr(t.actor,i),Et(t)&&on(t.actor.getProperty().getRGBTransferFunction(0),this.initialTransferFunctionNodes);const n={...super.getVOIModifiedEventDetail(e)};this.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,resetCameraRotation:!0}),oe(this.element,p.VOI_MODIFIED,n)}setCameraClippingRange(){const e=this.getVtkActiveCamera();e.getParallelProjection()?e.setClippingRange(e.getDistance(),e.getDistance()+this.getSlabThickness()):e.setClippingRange(Z.MINIMUM_SLAB_THICKNESS,Z.MAXIMUM_RAY_DISTANCE)}getSlicesClippingPlanes(){const e=this.getSlicePlaneCoordinates(),{viewPlaneNormal:t}=this.getCamera(),i=Z.MINIMUM_SLAB_THICKNESS;return e.map((e=>{let{point:n,sliceIndex:r}=e;const a=[It().newInstance(),It().newInstance()];return this.setOrientationOfClippingPlanes(a,i,t,n),{sliceIndex:r,planes:a.map((e=>({normal:e.getNormal(),origin:e.getOrigin()})))}}))}};var jr=K(896),Wr=K.n(jr),Br=K(861),qr=K.n(Br);function zr(e){const t=Gt().newInstance();let i=0,n=1024;return void 0!==e.lower&&void 0!==e.upper&&(i=e.lower,n=e.upper),t.addRGBPoint(i,0,0,0),t.addRGBPoint(n,1,1,1),t}function Hr(e,t){const i=t.voxelManager.getScalarData();if(!e.getPointData)return;const n=e.getPointData().getScalars().getData();if(t.color&&t.rgba){const e=new Uint8Array(t.columns*t.rows*3);for(let n=0;n<t.columns*t.rows;n++)e[3*n]=i[4*n],e[3*n+1]=i[4*n+1],e[3*n+2]=i[4*n+2];t.rgba=!1,t.getPixelData=()=>e,n.set(e)}else n.set(i);e.modified()}const $r=new Map,Kr="imageRetrieveConfiguration",Yr={IMAGE_RETRIEVE_CONFIGURATION:Kr,clear:()=>{$r.clear()},add:(e,t)=>{$r.set(e,t)},get:function(e){if(e===Kr){for(var t=arguments.length,i=new Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return i.map((e=>$r.get(e))).find((e=>void 0!==e))}}};Pt(Yr.get.bind(Yr));const Zr=Yr;function Xr(){return window.performance?performance.now():Date.now()}function Jr(e,t,i){return i?function(e){const t=Math.max(...e.lut).toString(2).length-8,i=e.lut[0]>>t,n=e.lut[e.lut.length-1]>>t,r=e.firstValueMapped+e.lut.length-1;return function(a){return a<e.firstValueMapped?i:a>=r?n:e.lut[a-e.firstValueMapped]>>t}}(i):function(e,t){return function(i){const n=255*((i-(t-.5))/(e-1)+.5);return Math.min(Math.max(n,0),255)}}(e,t)}class Qr{constructor(){ie(this,"m",void 0),this.reset()}getMatrix(){return this.m}reset(){this.m=[1,0,0,1,0,0]}clone(){const e=new Qr;return e.m[0]=this.m[0],e.m[1]=this.m[1],e.m[2]=this.m[2],e.m[3]=this.m[3],e.m[4]=this.m[4],e.m[5]=this.m[5],e}multiply(e){const t=this.m[0]*e[0]+this.m[2]*e[1],i=this.m[1]*e[0]+this.m[3]*e[1],n=this.m[0]*e[2]+this.m[2]*e[3],r=this.m[1]*e[2]+this.m[3]*e[3],a=this.m[0]*e[4]+this.m[2]*e[5]+this.m[4],s=this.m[1]*e[4]+this.m[3]*e[5]+this.m[5];this.m[0]=t,this.m[1]=i,this.m[2]=n,this.m[3]=r,this.m[4]=a,this.m[5]=s}invert(){const e=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),t=this.m[3]*e,i=-this.m[1]*e,n=-this.m[2]*e,r=this.m[0]*e,a=e*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),s=e*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);this.m[0]=t,this.m[1]=i,this.m[2]=n,this.m[3]=r,this.m[4]=a,this.m[5]=s}rotate(e){const t=Math.cos(e),i=Math.sin(e),n=this.m[0]*t+this.m[2]*i,r=this.m[1]*t+this.m[3]*i,a=this.m[0]*-i+this.m[2]*t,s=this.m[1]*-i+this.m[3]*t;this.m[0]=n,this.m[1]=r,this.m[2]=a,this.m[3]=s}translate(e,t){this.m[4]+=this.m[0]*e+this.m[2]*t,this.m[5]+=this.m[1]*e+this.m[3]*t}scale(e,t){this.m[0]*=e,this.m[1]*=e,this.m[2]*=t,this.m[3]*=t}transformPoint(e){const t=e[0],i=e[1];return[t*this.m[0]+i*this.m[2]+this.m[4],t*this.m[1]+i*this.m[3]+this.m[5]]}}function ea(e,t){const i=new Qr;if(!e.viewport.displayedArea)return i;i.translate(e.canvas.width/2,e.canvas.height/2);const n=e.viewport.rotation;0!==n&&i.rotate(n*Math.PI/180);let r=e.viewport.scale,a=e.viewport.scale;const s=e.viewport.displayedArea.brhc.x-(e.viewport.displayedArea.tlhc.x-1),o=e.viewport.displayedArea.brhc.y-(e.viewport.displayedArea.tlhc.y-1);if("NONE"===e.viewport.displayedArea.presentationSizeMode)e.image.rowPixelSpacing<e.image.columnPixelSpacing?r*=e.image.columnPixelSpacing/e.image.rowPixelSpacing:e.image.columnPixelSpacing<e.image.rowPixelSpacing&&(a*=e.image.rowPixelSpacing/e.image.columnPixelSpacing);else if(r=e.viewport.displayedArea.columnPixelSpacing,a=e.viewport.displayedArea.rowPixelSpacing,"SCALE TO FIT"===e.viewport.displayedArea.presentationSizeMode){const t=e.canvas.height/(o*a),i=e.canvas.width/(s*r);r=a=Math.min(i,t),e.viewport.displayedArea.rowPixelSpacing<e.viewport.displayedArea.columnPixelSpacing?r*=e.viewport.displayedArea.columnPixelSpacing/e.viewport.displayedArea.rowPixelSpacing:e.viewport.displayedArea.columnPixelSpacing<e.viewport.displayedArea.rowPixelSpacing&&(a*=e.viewport.displayedArea.rowPixelSpacing/e.viewport.displayedArea.columnPixelSpacing)}return i.scale(r,a),0!==n&&i.rotate(-n*Math.PI/180),i.translate(e.viewport.translation.x,e.viewport.translation.y),0!==n&&i.rotate(n*Math.PI/180),void 0!==t&&i.scale(t,t),e.viewport.hflip&&i.scale(-1,1),e.viewport.vflip&&i.scale(1,-1),i.translate(-s/2,-o/2),i}function ta(e,t,i){if(void 0===e)throw new Error("setToPixelCoordinateSystem: parameter enabledElement must not be undefined");if(void 0===t)throw new Error("setToPixelCoordinateSystem: parameter context must not be undefined");const n=ea(e,i).getMatrix();t.setTransform(n[0],n[1],n[2],n[3],n[4],n[5])}function ia(e,t){const i=e.renderingTools.lastRenderedImageId,n=e.renderingTools.lastRenderedViewport;return t.imageId!==i||!n||n.windowCenter!==e.viewport.voi.windowCenter||n.windowWidth!==e.viewport.voi.windowWidth||n.invert!==e.viewport.invert||n.rotation!==e.viewport.rotation||n.hflip!==e.viewport.hflip||n.vflip!==e.viewport.vflip||n.modalityLUT!==e.viewport.modalityLUT||n.voiLUT!==e.viewport.voiLUT||n.colormap!==e.viewport.colormap}function na(e,t){const i=e.renderingTools.renderCanvas;i.width=t.width,i.height=t.height;const n=i.getContext("2d");n.fillStyle="white",n.fillRect(0,0,i.width,i.height);const r=n.getImageData(0,0,t.width,t.height);e.renderingTools.renderCanvasContext=n,e.renderingTools.renderCanvasData=r}function ra(e){const t=e.image.imageId,i=e.viewport,n=e.image.color;return e.renderingTools.lastRenderedImageId=t,e.renderingTools.lastRenderedIsColor=n,e.renderingTools.lastRenderedViewport={windowCenter:i.voi.windowCenter,windowWidth:i.voi.windowWidth,invert:i.invert,rotation:i.rotation,hflip:i.hflip,vflip:i.vflip,modalityLUT:i.modalityLUT,voiLUT:i.voiLUT,colormap:i.colormap},e.renderingTools}function aa(e,t,i){const n=e.renderingTools.lastRenderedIsColor;e.renderingTools.renderCanvas&&n||(e.renderingTools.renderCanvas=document.createElement("canvas"));const r=e.renderingTools.renderCanvas,{windowWidth:a,windowCenter:s}=e.viewport.voi;if((256===a||255===a)&&(128===s||127===s)&&!e.viewport.invert&&t.getCanvas&&t.getCanvas())return t.getCanvas();if(!ia(e,t)&&!i)return r;r.width===t.width&&r.height===t.height||na(e,t);let o=Xr();const l=function(e,t){return void 0!==e.cachedLut&&e.cachedLut.windowCenter===t.voi.windowCenter&&e.cachedLut.windowWidth===t.voi.windowWidth&&e.cachedLut.invert===t.invert||(function(e,t,i,n){const r=e.maxPixelValue,a=e.minPixelValue,s=Math.min(a,0);if(void 0===e.cachedLut){const t=r-s+1;e.cachedLut={},e.cachedLut.lutArray=new Uint8ClampedArray(t)}const o=e.cachedLut.lutArray,l=Jr(Array.isArray(t)?t[0]:t,Array.isArray(i)?i[0]:i,void 0);if(n)for(let e=a;e<=r;e++)o[e+-s]=255-l(e);else for(let e=a;e<=r;e++)o[e+-s]=l(e)}(e,t.voi.windowWidth,t.voi.windowCenter,t.invert),e.cachedLut.windowWidth=t.voi.windowWidth,e.cachedLut.windowCenter=t.voi.windowCenter,e.cachedLut.invert=t.invert),e.cachedLut.lutArray}(t,e.viewport);t.stats=t.stats||{},t.stats.lastLutGenerateTime=Xr()-o;const c=e.renderingTools.renderCanvasData,d=e.renderingTools.renderCanvasContext;return t.rgba?function(e,t,i){let n=Xr();const r=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=Xr()-n;const a=e.minPixelValue;let s=0,o=0;const l=r.length;if(n=Xr(),a<0)for(;o<l;)i[s++]=t[r[o++]+-a],i[s++]=t[r[o++]+-a],i[s++]=t[r[o++]+-a],i[s++]=r[o++];else for(;o<l;)i[s++]=t[r[o++]],i[s++]=t[r[o++]],i[s++]=t[r[o++]],i[s++]=r[o++];e.stats.lastStoredPixelDataToCanvasImageDataTime=Xr()-n}(t,l,c.data):function(e,t,i){let n=Xr();const r=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=Xr()-n;const a=e.minPixelValue;let s=0,o=0;const l=r.length;if(n=Xr(),a<0)for(;o<l;)i[s++]=t[r[o++]+-a],i[s++]=t[r[o++]+-a],i[s]=t[r[o]+-a],o+=2,s+=2;else for(;o<l;)i[s++]=t[r[o++]],i[s++]=t[r[o++]],i[s]=t[r[o]],o+=2,s+=2;e.stats.lastStoredPixelDataToCanvasImageDataTime=Xr()-n}(t,l,c.data),o=Xr(),d.putImageData(c,0,0),t.stats.lastPutImageDataTime=Xr()-o,r}function sa(e,t){if(void 0===e)throw new Error("renderColorImage: enabledElement parameter must not be undefined");const i=e.image;if(void 0===i)throw new Error("renderColorImage: image must be loaded before it can be drawn");const n=e.canvas.getContext("2d");n.setTransform(1,0,0,1,0,0),n.fillStyle="black",n.fillRect(0,0,e.canvas.width,e.canvas.height),n.imageSmoothingEnabled=!e.viewport.pixelReplication,ta(e,n);const r=aa(e,i,t),a=e.viewport.displayedArea.tlhc.x-1,s=e.viewport.displayedArea.tlhc.y-1,o=e.viewport.displayedArea.brhc.x-a,l=e.viewport.displayedArea.brhc.y-s;n.drawImage(r,a,s,o,l,0,0,o,l),e.renderingTools=ra(e)}function oa(e,t){return!e&&!t||!(!e||!t)&&e.id===t.id}function la(e,t,i){return void 0!==e.cachedLut&&e.cachedLut.windowCenter===t.voi.windowCenter&&e.cachedLut.windowWidth===t.voi.windowWidth&&oa(e.cachedLut.modalityLUT,t.modalityLUT)&&oa(e.cachedLut.voiLUT,t.voiLUT)&&e.cachedLut.invert===t.invert&&!i||(function(e,t){if(function(e){return e.voiLUT&&e.voiLUT.lut&&e.voiLUT.lut.length>0||void 0!==e.voi.windowWidth&&void 0!==e.voi.windowCenter}(e))return;const i=t.maxPixelValue*t.slope+t.intercept,n=t.minPixelValue*t.slope+t.intercept,r=i-n,a=(i+n)/2;void 0===e.voi?e.voi={windowWidth:r,windowCenter:a}:(e.voi.windowWidth=r,e.voi.windowCenter=a)}(t,e),function(e,t,i,n,r,a){const s=e.maxPixelValue,o=e.minPixelValue,l=Math.min(o,0);if(void 0===e.cachedLut){const t=s-l+1;e.cachedLut={},e.cachedLut.lutArray=new Uint8ClampedArray(t)}const c=e.cachedLut.lutArray,d=function(e,t,i){return i?function(e){const t=e.lut[0],i=e.lut[e.lut.length-1],n=e.firstValueMapped+e.lut.length;return r=>r<e.firstValueMapped?t:r>=n?i:e.lut[r]}(i):function(e,t){return i=>i*e+t}(e,t)}(e.slope,e.intercept,r),h=Jr(t,i,a);if(e.isPreScaled)if(n)for(let e=o;e<=s;e++)c[e+-l]=255-h(e);else for(let e=o;e<=s;e++)c[e+-l]=h(e);else if(n)for(let e=o;e<=s;e++)c[e+-l]=255-h(d(e));else for(let e=o;e<=s;e++)c[e+-l]=h(d(e))}(e,t.voi.windowWidth,t.voi.windowCenter,t.invert,t.modalityLUT,t.voiLUT),e.cachedLut.windowWidth=t.voi.windowWidth,e.cachedLut.windowCenter=t.voi.windowCenter,e.cachedLut.invert=t.invert,e.cachedLut.voiLUT=t.voiLUT,e.cachedLut.modalityLUT=t.modalityLUT),e.cachedLut.lutArray}function ca(e,t){if(void 0===e)throw new Error("drawImage: enabledElement parameter must not be undefined");const i=e.image;if(void 0===i)throw new Error("drawImage: image must be loaded before it can be drawn");const n=e.canvas.getContext("2d");n.setTransform(1,0,0,1,0,0),n.fillStyle="black",n.fillRect(0,0,e.canvas.width,e.canvas.height),n.imageSmoothingEnabled=!e.viewport.pixelReplication,ta(e,n);const r=function(e,t,i){let n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const r=e.renderingTools.lastRenderedIsColor;e.renderingTools.renderCanvas&&!r||(e.renderingTools.renderCanvas=document.createElement("canvas"),na(e,t));const a=e.renderingTools.renderCanvas;if(!ia(e,t)&&!i)return a;a.width===t.width&&a.height===t.height||na(e,t),t.stats=t.stats||{};const s=e.renderingTools.renderCanvasData,o=e.renderingTools.renderCanvasContext;let l=Xr();t.stats.lastLutGenerateTime=Xr()-l;const{viewport:c}=e;if("PT"===c.modality&&t.isPreScaled){const{windowWidth:e,windowCenter:i}=c.voi,n=i-e/2,r=255/(i+e/2-n);let a;a=c.invert?e=>255-(e-n)*r:e=>(e-n)*r,function(e,t,i){let n=Xr();const r=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=Xr()-n;const a=r.length;let s=3,o=0;for(n=Xr();o<a;)i[s]=t(r[o++]),s+=4;e.stats.lastStoredPixelDataToCanvasImageDataTime=Xr()-n}(t,a,s.data)}else{const e=la(t,c,i);n?function(e,t,i){let n=Xr();const r=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=Xr()-n;const a=r.length,s=e.minPixelValue;let o=3,l=0;if(n=Xr(),r instanceof Int16Array)if(s<0)for(;l<a;)i[o]=t[r[l++]+-s],o+=4;else for(;l<a;)i[o]=t[r[l++]],o+=4;else if(r instanceof Uint16Array)for(;l<a;)i[o]=t[r[l++]],o+=4;else if(s<0)for(;l<a;)i[o]=t[r[l++]+-s],o+=4;else for(;l<a;)i[o]=t[r[l++]],o+=4;e.stats.lastStoredPixelDataToCanvasImageDataTime=Xr()-n}(t,e,s.data):function(e,t,i){let n=Xr();const r=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=Xr()-n;const a=r.length,s=e.minPixelValue;let o,l=0,c=0;if(n=Xr(),r instanceof Int16Array)if(s<0)for(;c<a;)o=t[r[c++]+-s],i[l++]=o,i[l++]=o,i[l++]=o,i[l++]=255;else for(;c<a;)o=t[r[c++]],i[l++]=o,i[l++]=o,i[l++]=o,i[l++]=255;else if(r instanceof Uint16Array)for(;c<a;)o=t[r[c++]],i[l++]=o,i[l++]=o,i[l++]=o,i[l++]=255;else if(s<0)for(;c<a;)o=t[r[c++]+-s],i[l++]=o,i[l++]=o,i[l++]=o,i[l++]=255;else for(;c<a;)o=t[r[c++]],i[l++]=o,i[l++]=o,i[l++]=o,i[l++]=255;e.stats.lastStoredPixelDataToCanvasImageDataTime=Xr()-n}(t,e,s.data)}return l=Xr(),o.putImageData(s,0,0),t.stats.lastPutImageDataTime=Xr()-l,a}(e,i,t),a=e.viewport.displayedArea.tlhc.x-1,s=e.viewport.displayedArea.tlhc.y-1,o=e.viewport.displayedArea.brhc.x-a,l=e.viewport.displayedArea.brhc.y-s;n.drawImage(r,a,s,o,l,0,0,o,l),e.renderingTools=ra(e)}function da(e,t,i){if(e>1)throw new Error("HSVToRGB expects hue < 1");const n=[];if(0===t)return n[0]=i,n[1]=i,n[2]=i,n;const r=Math.floor(6*e),a=6*e-r,s=i*(1-t),o=i*(1-t*a),l=i*(1-t*(1-a));switch(r){case 0:case 6:n[0]=i,n[1]=l,n[2]=s;break;case 1:n[0]=o,n[1]=i,n[2]=s;break;case 2:n[0]=s,n[1]=i,n[2]=l;break;case 3:n[0]=s,n[1]=o,n[2]=i;break;case 4:n[0]=l,n[1]=s,n[2]=i;break;case 5:n[0]=i,n[1]=s,n[2]=o}return n}const ha=class{constructor(){ie(this,"NumberOfColors",void 0),ie(this,"Ramp",void 0),ie(this,"TableRange",void 0),ie(this,"HueRange",void 0),ie(this,"SaturationRange",void 0),ie(this,"ValueRange",void 0),ie(this,"AlphaRange",void 0),ie(this,"NaNColor",void 0),ie(this,"BelowRangeColor",void 0),ie(this,"UseBelowRangeColor",void 0),ie(this,"AboveRangeColor",void 0),ie(this,"UseAboveRangeColor",void 0),ie(this,"InputRange",void 0),ie(this,"Table",void 0),this.NumberOfColors=256,this.Ramp="linear",this.TableRange=[0,255],this.HueRange=[0,.66667],this.SaturationRange=[1,1],this.ValueRange=[1,1],this.AlphaRange=[1,1],this.NaNColor=[128,0,0,255],this.BelowRangeColor=[0,0,0,255],this.UseBelowRangeColor=!0,this.AboveRangeColor=[255,255,255,255],this.UseAboveRangeColor=!0,this.InputRange=[0,255],this.Table=[]}setNumberOfTableValues(e){this.NumberOfColors=e}setRamp(e){this.Ramp=e}setTableRange(e,t){this.TableRange[0]=e,this.TableRange[1]=t}setHueRange(e,t){this.HueRange[0]=e,this.HueRange[1]=t}setSaturationRange(e,t){this.SaturationRange[0]=e,this.SaturationRange[1]=t}setValueRange(e,t){this.ValueRange[0]=e,this.ValueRange[1]=t}setRange(e,t){this.InputRange[0]=e,this.InputRange[1]=t}setAlphaRange(e,t){this.AlphaRange[0]=e,this.AlphaRange[1]=t}getColor(e){return this.mapValue(e)}build(e){if(this.Table.length>1&&!e)return;this.Table=[];const t=this.NumberOfColors-1;let i,n,r,a;t?(i=(this.HueRange[1]-this.HueRange[0])/t,n=(this.SaturationRange[1]-this.SaturationRange[0])/t,r=(this.ValueRange[1]-this.ValueRange[0])/t,a=(this.AlphaRange[1]-this.AlphaRange[0])/t):i=n=r=a=0;for(let e=0;e<=t;e++){const t=this.HueRange[0]+e*i,s=this.SaturationRange[0]+e*n,o=this.ValueRange[0]+e*r,l=this.AlphaRange[0]+e*a,c=da(t,s,o),d=[0,0,0,0];switch(this.Ramp){case"scurve":d[0]=Math.floor(127.5*(1+Math.cos((1-c[0])*Math.PI))),d[1]=Math.floor(127.5*(1+Math.cos((1-c[1])*Math.PI))),d[2]=Math.floor(127.5*(1+Math.cos((1-c[2])*Math.PI))),d[3]=Math.floor(255*l);break;case"linear":d[0]=Math.floor(255*c[0]+.5),d[1]=Math.floor(255*c[1]+.5),d[2]=Math.floor(255*c[2]+.5),d[3]=Math.floor(255*l+.5);break;case"sqrt":d[0]=Math.floor(255*Math.sqrt(c[0])+.5),d[1]=Math.floor(255*Math.sqrt(c[1])+.5),d[2]=Math.floor(255*Math.sqrt(c[2])+.5),d[3]=Math.floor(255*Math.sqrt(l)+.5);break;default:throw new Error(`Invalid Ramp value (${this.Ramp})`)}this.Table.push(d)}this.buildSpecialColors()}buildSpecialColors(){const e=this.NumberOfColors,t=e+0,i=e+1,n=e+2;this.UseBelowRangeColor||0===e?this.Table[t]=this.BelowRangeColor:this.Table[t]=this.Table[0],this.UseAboveRangeColor||0===e?this.Table[i]=this.AboveRangeColor:this.Table[i]=this.Table[e-1],this.Table[n]=this.NaNColor}mapValue(e){const t=this.getIndex(e);if(t<0)return this.NaNColor;if(0===t){if(this.UseBelowRangeColor&&e<this.TableRange[0])return this.BelowRangeColor}else if(t===this.NumberOfColors-1&&this.UseAboveRangeColor&&e>this.TableRange[1])return this.AboveRangeColor;return this.Table[t]}getIndex(e){const t={Range:[],MaxIndex:this.NumberOfColors-1,Shift:-this.TableRange[0],Scale:1};if(this.TableRange[1]<=this.TableRange[0]?t.Scale=Number.MAX_VALUE:t.Scale=t.MaxIndex/(this.TableRange[1]-this.TableRange[0]),t.Range[0]=this.TableRange[0],t.Range[1]=this.TableRange[1],isNaN(e))return-1;let i=function(e,t){let i;return i=e<t.Range[0]?t.MaxIndex+0+1.5:e>t.Range[1]?t.MaxIndex+1+1.5:(e+t.Shift)*t.Scale,Math.floor(i)}(e,t);return i===this.NumberOfColors+0?i=0:i===this.NumberOfColors+1&&(i=this.NumberOfColors-1),i}setTableValue(e,t,i,n,r){let a;if("number"==typeof t&&void 0!==i&&void 0!==n&&void 0!==r)a=[t,i,n,r];else{if(!Array.isArray(t))throw new Error("Invalid arguments for setTableValue");a=t}if(e<0)throw new Error(`Can't set the table value for negative index (${e})`);if(e>=this.NumberOfColors)throw new Error(`Index ${e} is greater than the number of colors ${this.NumberOfColors}`);this.Table[e]=a,0!==e&&e!==this.NumberOfColors-1||this.buildSpecialColors()}},ua=function(e,t,i,n){let r=Xr();const a=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=Xr()-r;const s=a.length,o=e.minPixelValue;let l,c,d,h=0,u=0;if(r=Xr(),d=i instanceof ha?i.Table:i,o<0)for(;u<s;)l=t[a[u++]+-o],c=d[l],n[h++]=c[0],n[h++]=c[1],n[h++]=c[2],n[h++]=c[3];else for(;u<s;)l=t[a[u++]],c=d[l],n[h++]=c[0],n[h++]=c[1],n[h++]=c[2],n[h++]=c[3];e.stats.lastStoredPixelDataToCanvasImageDataTime=Xr()-r},ga=function(e,t,i,n){let r=Xr();const a=e.voxelManager.getScalarData();e.stats.lastGetPixelDataTime=Xr()-r;const s=a.length,o=e.minPixelValue;let l,c,d,h=0,u=0;if(r=Xr(),d=i instanceof ha?i.Table:i,o<0)for(;u<s;)l=t(a[u++]+-o),c=d[l],n[h++]=c[0],n[h++]=c[1],n[h++]=c[2],n[h++]=c[3];else for(;u<s;)l=t(a[u++]),c=d[l],n[h++]=c[0],n[h++]=c[1],n[h++]=c[2],n[h++]=c[3];e.stats.lastStoredPixelDataToCanvasImageDataTime=Xr()-r},ma=[0,0,0,0];function pa(e,t){let i=0,n=e.length-1;for(;i<=n;){const r=i+Math.floor((n-i)/2),a=e[r];if(a===t)return r;t<a?n=r-1:i=r+1}return i}function fa(e,t,i){let n;const r=[],a=[],s=[],o=[];for(i=null===i?1:i,n=0;n<t.length;n++){const i=t[n];r.push((e-1)*i[0]),a.push(i[1]),s.push(i[1])}const l=function(e,t,i){const n=(1-e)/((i=null===i?100:i)-1),r=[];for(;i-- >0;)r.push(e),e+=n;return r[r.length-1]=1,r}(0,0,e);for(n=0;n<e;n++)l[n]=(e-1)*Math.pow(l[n],i);const c=function(e,t){let i;const n=[],r=t.length;for(e.sort((function(e,t){return e-t})),i=0;i<r;i++)n[i]=pa(e,t[i]);return n}(r,l);for(n=1;n<e-1;n++){const e=c[n],t=(l[n]-r[e-1])/(r[e]-r[e-1]),i=a[e]-s[e-1];o[n]=t*i+s[e-1]}return o[0]=s[0],o[e-1]=a[t.length-1],o}function va(e,t,i){return Math.max(t,Math.min(i,e))}function Ia(e,t){if(void 0===e)throw new Error("drawImage: enabledElement parameter must not be undefined");const i=e.image;if(void 0===i)throw new Error("drawImage: image must be loaded before it can be drawn");const n=e.canvas.getContext("2d");n.setTransform(1,0,0,1,0,0),n.fillStyle="black",n.fillRect(0,0,e.canvas.width,e.canvas.height),n.imageSmoothingEnabled=!e.viewport.pixelReplication,ta(e,n);const r=function(e,t,i){e.renderingTools.renderCanvas||(e.renderingTools.renderCanvas=document.createElement("canvas"));const n=e.renderingTools.renderCanvas;let r=e.viewport.colormap||e.options.colormap;if(e.options&&e.options.colormap&&console.warn("enabledElement.options.colormap is deprecated. Use enabledElement.viewport.colormap instead"),r&&"string"==typeof r&&(r=function(e,t){let i=H[e];return i||(i=H[e]=t||{name:"",colors:[]}),!i.colors&&i.segmentedData&&(i.colors=function(e,t,i){let n;const r=[];i=null===i?1:i;const a=fa(t=null===t?256:t,e.red,i),s=fa(t,e.green,i),o=fa(t,e.blue,i);for(n=0;n<t;n++){const e=[Math.round(255*a[n]),Math.round(255*s[n]),Math.round(255*o[n]),255];r.push(e)}return r}(i.segmentedData,i.numColors,i.gamma)),{getId:()=>e,getColorSchemeName:()=>i.name,setColorSchemeName(e){i.name=e},getNumberOfColors:()=>i.colors.length,setNumberOfColors(e){for(;i.colors.length<e;)i.colors.push(ma);i.colors.length=e},getColor(e){return this.isValidIndex(e)?i.colors[e]:ma},getColorRepeating(e){const t=i.colors.length;return e=t?e%t:0,this.getColor(e)},setColor(e,t){this.isValidIndex(e)&&(i.colors[e]=t)},addColor(e){i.colors.push(e)},insertColor(e,t){this.isValidIndex(e)&&i.colors.splice(e,1,t)},removeColor(e){this.isValidIndex(e)&&i.colors.splice(e,1)},clearColors(){i.colors=[]},buildLookupTable(e){if(!e)return;const t=i.colors.length;e.setNumberOfTableValues(t);for(let n=0;n<t;n++)e.setTableValue(n,i.colors[n])},createLookupTable(){const e=new ha;return this.buildLookupTable(e),e},isValidIndex:e=>e>=0&&e<i.colors.length}}(r)),!r)throw new Error("renderPseudoColorImage: colormap not found.");const a=r.getId();if(!ia(e,t)&&!i&&e.renderingTools.colormapId===a)return n;n.width===t.width&&n.height===t.height||na(e,t);let s=Xr();e.renderingTools.colorLUT&&!i&&e.renderingTools.colormapId===a||(r.setNumberOfColors(256),e.renderingTools.colorLUT=r.createLookupTable(),e.renderingTools.colormapId=a);const o=e.renderingTools.renderCanvasData,l=e.renderingTools.renderCanvasContext,{viewport:c}=e,d=e.renderingTools.colorLUT;if("PT"===c.modality){const{windowWidth:e,windowCenter:i}=c.voi,n=i-e/2,r=255/(i+e/2-n);let a;a=c.invert?e=>va(Math.floor(255-(e-n)*r),0,255):e=>va(Math.floor((e-n)*r),0,255),ga(t,a,d,o.data)}else{const n=la(t,e.viewport,i);t.stats=t.stats||{},t.stats.lastLutGenerateTime=Xr()-s,ua(t,n,d,o.data)}return s=Xr(),l.putImageData(o,0,0),t.stats.lastPutImageDataTime=Xr()-s,n}(e,i,t),a=e.viewport.displayedArea.tlhc.x-1,s=e.viewport.displayedArea.tlhc.y-1,o=e.viewport.displayedArea.brhc.x-a,l=e.viewport.displayedArea.brhc.y-s;n.drawImage(r,a,s,o,l,0,0,o,l),e.renderingTools=ra(e)}function wa(e,t){const i=e.image;if(!e.canvas||!e.image)return;const n=Xr();if(i.stats={lastGetPixelDataTime:-1,lastStoredPixelDataToCanvasImageDataTime:-1,lastPutImageDataTime:-1,lastRenderTime:-1,lastLutGenerateTime:-1},i){let n=i.render;n||(n=e.viewport.colormap?Ia:i.color?sa:ca),n(e,t)}const r=Xr()-n;i.stats.lastRenderTime=r,e.invalid=!1,e.needsRedraw=!1}function Ca(e){return ea(e)}function Ea(e,t){const i=Ca(e);return i.invert(),i.transformPoint(t)}const ya={viewport:{}};function Ra(e,t){if(null==e)throw new Error(t)}function Pa(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return Ra(e,"getImageSize: parameter image must not be undefined"),Ra(e.width,"getImageSize: parameter image must have width"),Ra(e.height,"getImageSize: parameter image must have height"),function(e){return!(null==e||0===e||180===e)}(t)?{height:e.width,width:e.height}:{width:e.width,height:e.height}}function ba(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;Ra(e,"getImageScale: parameter canvas must not be undefined"),Ra(t,"getImageScale: parameter image must not be undefined");const n=Pa(t,i),r=t.rowPixelSpacing||1,a=t.columnPixelSpacing||1;let s=1,o=1;r<a?o=a/r:s=r/a;const l=e.height/n.height/s,c=e.width/n.width/o;return{verticalScale:l,horizontalScale:c,scaleFactor:Math.min(c,l)}}function Ta(e,t,i,n){if(void 0===e)throw new Error("getDefaultViewport: parameter canvas must not be undefined");if(void 0===t)return Object.assign({},{scale:1,translation:{x:0,y:0},voi:{windowWidth:void 0,windowCenter:void 0},invert:!1,pixelReplication:!1,rotation:0,hflip:!1,vflip:!1,modalityLUT:void 0,voiLUT:void 0,colormap:void 0,labelmap:!1,displayedArea:{tlhc:{x:1,y:1},brhc:{x:1,y:1},rowPixelSpacing:1,columnPixelSpacing:1,presentationSizeMode:"NONE"}},ya.viewport);const r=ba(e,t,0).scaleFactor;let a;return"PT"===i&&t.isPreScaled?a={windowWidth:5,windowCenter:2.5}:void 0!==t.windowWidth&&void 0!==t.windowCenter&&(a={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:a,invert:t.invert,pixelReplication:!1,rotation:0,hflip:!1,vflip:!1,modalityLUT:t.modalityLUT,modality:i,voiLUT:t.voiLUT,colormap:void 0!==n?n: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"}}}function Aa(e,t){return Ca(e).transformPoint(t)}const Sa=[{id:"initialImages",retrieveType:"single"},{id:"errorRetrieve"}],Oa=[{offset:-1,imageQualityStatus:j.ADJACENT_REPLICATE},{offset:1,imageQualityStatus:j.ADJACENT_REPLICATE},{offset:2,imageQualityStatus:j.FAR_REPLICATE}],Da=[{id:"initialImages",positions:[.5,0,-1],retrieveType:"default",requestType:v.Thumbnail,priority:5,nearbyFrames:Oa},{id:"quarterThumb",decimate:4,offset:3,requestType:v.Thumbnail,retrieveType:"multipleFast",priority:6,nearbyFrames:Oa},{id:"halfThumb",decimate:4,offset:1,priority:7,requestType:v.Thumbnail,retrieveType:"multipleFast",nearbyFrames:Oa},{id:"quarterFull",decimate:4,offset:2,priority:8,requestType:v.Thumbnail,retrieveType:"multipleFinal"},{id:"halfFull",decimate:4,offset:0,priority:9,requestType:v.Thumbnail,retrieveType:"multipleFinal"},{id:"threeQuarterFull",decimate:4,offset:1,priority:10,requestType:v.Thumbnail,retrieveType:"multipleFinal"},{id:"finalFull",decimate:4,offset:3,priority:11,requestType:v.Thumbnail,retrieveType:"multipleFinal"},{id:"errorRetrieve"}];class xa{constructor(e){ie(this,"done",void 0),ie(this,"name",void 0),ie(this,"nextValue",void 0),ie(this,"waiting",void 0),ie(this,"rejectReason",void 0),this.name=e||"unknown"}static as(e){if(e.iterator)return e.iterator;const t=new xa("as iterator");return e.then((e=>{try{t.add(e,!0)}catch(e){t.reject(e)}}),(e=>{t.reject(e)})),t}add(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[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 i=0;try{for await(const n of this){const{done:r}=this;try{await e(n,r,i),i++}catch(e){if(!r){console.warn("Caught exception in intermediate value",e);continue}if(!t)throw e;t(e,r)}}}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}}function Ma(e,t){const i=[];for(let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;n<e.length;n+=t)i.push(n);return i}class _a{constructor(e){ie(this,"stages",void 0),ie(this,"retrieveOptions",void 0),this.stages=e.stages||Sa,this.retrieveOptions=e.retrieveOptions||{}}loadImages(e,t){return new Va(this,e,t).loadImages()}}ie(_a,"createProgressive",ka),ie(_a,"interleavedRetrieveStages",{stages:Da}),ie(_a,"singleRetrieveStages",{stages:Sa}),ie(_a,"sequentialRetrieveStages",{stages:[{id:"lossySequential",retrieveType:"singleFast"},{id:"finalSequential",retrieveType:"singleFinal"}]});class Va{constructor(e,t,i){ie(this,"imageIds",void 0),ie(this,"listener",void 0),ie(this,"stages",void 0),ie(this,"retrieveOptions",void 0),ie(this,"outstandingRequests",0),ie(this,"stageStatusMap",new Map),ie(this,"imageQualityStatusMap",new Map),ie(this,"displayedIterator",new xa("displayed")),this.stages=e.stages,this.retrieveOptions=e.retrieveOptions,this.imageIds=t,this.listener=i}async loadImages(){const e=this.createStageRequests();this.outstandingRequests=e.length;for(const t of e)this.addRequest(t);return 0===this.outstandingRequests?Promise.resolve(null):this.displayedIterator.getDonePromise()}sendRequest(e,t){const{imageId:i,next:n}=e,r=(t.loader||On)(i,t),a=xa.as(r);let s=!1;return a.forEach((async(n,r)=>{const a=this.imageQualityStatusMap.get(i);if(!n)return void console.warn("No image retrieved",i);const{imageQualityStatus:o}=n;s||=o===j.FULL_RESOLUTION,void 0!==a&&a>o?this.updateStageStatus(e.stage,null,!0):(this.listener.successCallback(i,n),this.imageQualityStatusMap.set(i,o),this.displayedIterator.add(n),r&&this.updateStageStatus(e.stage),function(e,t,i,n,r){if(!i?.nearbyRequests?.length)return;const{arrayBuffer:a,offset:s,type:o,length:l}=r.targetBuffer;if(!a||void 0===s||!o)return;const c=new Float32Array(a),d=c.byteLength/c.length,h=r.targetBuffer.offset/d,u=c.slice(h,h+l);for(const r of i.nearbyRequests)try{const{itemId:i,imageQualityStatus:a}=r,s=t.get(i);if(void 0!==s&&s>=a)continue;const o=e.getLoaderImageOptions(i),{offset:l}=o.targetBuffer;c.set(u,l/d);const h={...n,imageQualityStatus:a};e.successCallback(i,h),t.set(i,a)}catch(e){console.log("Couldn't fill nearby item ",r.itemId,e)}}(this.listener,this.imageQualityStatusMap,e,n,t))}),((t,r)=>{this.listener.errorCallback(i,s||!n,t),r&&this.updateStageStatus(e.stage,t)})).finally((()=>{if(!s&&n)Ct.getImageLoadObject(i)&&Ct.removeImageLoadObject(i),this.addRequest(n,t.streamingData);else{s||this.listener.errorCallback(i,!0,"Couldn't decode"),this.outstandingRequests--;for(let e=n;e;e=e.next)this.updateStageStatus(e.stage,null,!0)}this.outstandingRequests<=0&&this.displayedIterator.resolve()})),a.getDonePromise().catch((e=>null))}addRequest(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{imageId:i,stage:n}=e,r=this.listener.getLoaderImageOptions(i);if(!r)return;const{retrieveType:a="default"}=n,{retrieveOptions:s}=this,o=s[a]||s.default,l={...r,retrieveType:a,retrieveOptions:o,streamingData:t},c=n.priority??-5,d=n.requestType||v.Interaction,h={imageId:i};Pn.addRequest(this.sendRequest.bind(this,e,l),d,h,c)}updateStageStatus(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const{id:n}=e,r=this.stageStatusMap.get(n);if(r&&(r.imageLoadPendingCount--,t?r.imageLoadFailedCount++:i||r.totalImageCount++,i||r.stageStartTime||(r.stageStartTime=Date.now()),!r.imageLoadPendingCount)){const{imageLoadFailedCount:e,totalImageCount:t,stageStartTime:i=Date.now(),startTime:a}=r,s={stageId:n,numberOfFailures:e,numberOfImages:t,stageDurationInMS:i?Date.now()-i:null,startDurationInMS:Date.now()-a};oe(ae,p.IMAGE_RETRIEVAL_STAGE,s),this.stageStatusMap.delete(n)}}createStageRequests(){const e=new Array,t=new Map,i=(i,n)=>{const r=n<0?this.imageIds.length+n:n<1?Math.floor((this.imageIds.length-1)*n):n,a=this.imageIds[r];if(!a)throw new Error(`No value found to add to requests at ${n}`);const s={imageId:a,stage:i,nearbyRequests:this.findNearbyRequests(r,i)};this.addStageStatus(i);const o=t.get(a);o?o.next=s:e.push(s),t.set(a,s)};for(const e of this.stages)(e.positions||Ma(this.imageIds,e.decimate||1,e.offset??0)).forEach((t=>{i(e,t)}));return e}findNearbyRequests(e,t){const i=new Array;if(!t.nearbyFrames)return i;for(const n of t.nearbyFrames){const t=e+n.offset;t<0||t>=this.imageIds.length||i.push({itemId:this.imageIds[t],imageQualityStatus:n.imageQualityStatus})}return i}addStageStatus(e){const{id:t}=e,i=this.stageStatusMap.get(t)||{stageId:t,startTime:Date.now(),stageStartTime:null,totalImageCount:0,imageLoadFailedCount:0,imageLoadPendingCount:0};return i.imageLoadPendingCount++,this.stageStatusMap.set(t,i),i}}function ka(e){return new _a(e)}const La=_a,Na=class extends Ar{constructor(e){var t;super(e),t=this,ie(this,"imageIds",void 0),ie(this,"currentImageIdIndex",void 0),ie(this,"targetImageIdIndex",void 0),ie(this,"debouncedTimeout",void 0),ie(this,"imagesLoader",this),ie(this,"globalDefaultProperties",void 0),ie(this,"perImageIdDefaultProperties",new Map),ie(this,"colormap",void 0),ie(this,"voiRange",void 0),ie(this,"voiUpdatedWithSetProperties",!1),ie(this,"VOILUTFunction",void 0),ie(this,"invert",!1),ie(this,"initialInvert",!1),ie(this,"initialTransferFunctionNodes",null),ie(this,"interpolationType",void 0),ie(this,"_imageData",void 0),ie(this,"cameraFocalPointOnRender",void 0),ie(this,"stackInvalidated",!1),ie(this,"_publishCalibratedEvent",!1),ie(this,"_calibrationEvent",void 0),ie(this,"_cpuFallbackEnabledElement",void 0),ie(this,"useCPURendering",void 0),ie(this,"cpuImagePixelData",void 0),ie(this,"cpuRenderingInvalidated",void 0),ie(this,"csImage",void 0),ie(this,"modality",void 0),ie(this,"scaling",void 0),ie(this,"initialViewUp",void 0),ie(this,"stackActorReInitialized",void 0),ie(this,"updateRenderingPipeline",(()=>{this._configureRenderingPipeline()})),ie(this,"getImageData",void 0),ie(this,"getCamera",void 0),ie(this,"setCamera",void 0),ie(this,"getRotation",void 0),ie(this,"unsetColormap",void 0),ie(this,"resetCamera",void 0),ie(this,"canvasToWorld",void 0),ie(this,"worldToCanvas",void 0),ie(this,"getRenderer",void 0),ie(this,"getDefaultActor",void 0),ie(this,"getActors",void 0),ie(this,"getActor",void 0),ie(this,"setActors",void 0),ie(this,"addActors",void 0),ie(this,"addActor",void 0),ie(this,"removeAllActors",void 0),ie(this,"setVOI",void 0),ie(this,"setInterpolationType",void 0),ie(this,"setInvertColor",void 0),ie(this,"setColormap",void 0),ie(this,"resize",(()=>{this.useCPURendering&&this._resizeCPU()})),ie(this,"_resizeCPU",(()=>{this._cpuFallbackEnabledElement.viewport&&function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=e.canvas.width,n=e.canvas.height;!function(e){const{canvas:t}=e,{clientWidth:i,clientHeight:n}=t;t.width===i&&t.height===n||(t.width=i,t.height=n)}(e),void 0!==e.image&&(t||function(e,t,i){const n=e.viewport.scale,r=Pa(e.image,e.viewport.rotation),a=Math.round(r.width*n),s=Math.round(r.height*n),o=e.viewport.translation.x,l=e.viewport.translation.y;return a===t&&s<=i||a<=t&&s===i&&0===o&&0===l}(e,i,n)?function(e){const{image:t}=e;e.viewport.scale=ba(e.canvas,t,e.viewport.rotation).scaleFactor,e.viewport.translation.x=0,e.viewport.translation.y=0}(e):function(e,t,i){const n=e.viewport.scale,r=e.canvas.width/t,a=e.canvas.height/i,s=Math.sqrt(r*a);e.viewport.scale=s*n}(e,i,n))}(this._cpuFallbackEnabledElement)})),ie(this,"getFrameOfReferenceUID",(e=>this.getImagePlaneReferenceData(e)?.FrameOfReferenceUID)),ie(this,"getCornerstoneImage",(()=>this.csImage)),ie(this,"createActorMapper",(e=>{const t=Wr().newInstance();t.setInputData(e);const i=qr().newInstance();i.setMapper(t);const{preferSizeOverAccuracy:n}=Li().rendering;return n&&t.setPreferSizeOverAccuracy(!0),e.getPointData().getScalars().getNumberOfComponents()>1&&i.getProperty().setIndependentComponents(!1),i})),ie(this,"getNumberOfSlices",(()=>this.imageIds.length)),ie(this,"getDefaultProperties",(e=>{let t;return void 0!==e&&(t=this.perImageIdDefaultProperties.get(e)),void 0!==t?t:{...this.globalDefaultProperties}})),ie(this,"getProperties",(()=>{const{colormap:e,voiRange:t,VOILUTFunction:i,interpolationType:n,invert:r,voiUpdatedWithSetProperties:a}=this;return{colormap:e,voiRange:t,VOILUTFunction:i,interpolationType:n,invert:r,isComputedVOI:!a}})),ie(this,"getRotationCPU",(()=>{const{viewport:e}=this._cpuFallbackEnabledElement;return e.rotation})),ie(this,"getRotationGPU",(()=>{const{viewUp:e,viewPlaneNormal:t,flipVertical:i}=this.getCameraNoRotation(),n=i?ft.vec3.negate(ft.vec3.create(),this.initialViewUp):this.initialViewUp,r=180*ft.vec3.angle(n,e)/Math.PI,a=ft.vec3.cross(ft.vec3.create(),n,e);return ft.vec3.dot(a,t)>=0?r:(360-r)%360})),ie(this,"setRotation",(e=>{const t=this.getCamera();if(this.useCPURendering?this.setRotationCPU(e):this.setRotationGPU(e),this._suppressCameraModifiedEvents)return;const i={previousCamera:t,camera:this.getCamera(),element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};oe(this.element,p.CAMERA_MODIFIED,i)})),ie(this,"renderImageObject",(e=>{this._setCSImage(e),(this.useCPURendering?this._updateToDisplayImageCPU:this._updateActorToDisplayImageId).call(this,e)})),ie(this,"_setCSImage",(e=>{e.isPreScaled=e.preScale?.scaled,this.csImage=e})),ie(this,"canvasToWorldCPU",(function(e){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0];if(!t._cpuFallbackEnabledElement.image)return;const[n,r]=Ea(t._cpuFallbackEnabledElement,e),{origin:a,spacing:s,direction:o}=t.getImageData(),l=o.slice(0,3),c=o.slice(3,6);return ft.vec3.scaleAndAdd(i,a,l,n*s[0]),ft.vec3.scaleAndAdd(i,i,c,r*s[1]),i})),ie(this,"worldToCanvasCPU",(e=>{const{spacing:t,direction:i,origin:n}=this.getImageData(),r=i.slice(0,3),a=i.slice(3,6),s=ft.vec3.subtract(ft.vec3.create(),e,n),o=[ft.vec3.dot(s,r)/t[0],ft.vec3.dot(s,a)/t[1]];return Aa(this._cpuFallbackEnabledElement,o)})),ie(this,"canvasToWorldGPU",(e=>{const t=this.getRenderer(),i=this.getVtkActiveCamera(),n=i.getClippingRange(),r=i.getDistance();i.setClippingRange(r,r+.1);const a=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),s=a.getSize(),o=window.devicePixelRatio||1,l=[e[0]*o,e[1]*o],c=[l[0]+this.sx,l[1]+this.sy];c[1]=s[1]-c[1];const d=a.displayToWorld(c[0],c[1],0,t);return i.setClippingRange(n[0],n[1]),[d[0],d[1],d[2]]})),ie(this,"worldToCanvasGPU",(e=>{const t=this.getRenderer(),i=this.getVtkActiveCamera(),n=i.getClippingRange(),r=i.getDistance();i.setClippingRange(r,r+.1);const a=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),s=a.getSize(),o=a.worldToDisplay(...e,t);o[1]=s[1]-o[1];const l=[o[0]-this.sx,o[1]-this.sy];i.setClippingRange(n[0],n[1]);const c=window.devicePixelRatio||1;return[l[0]/c,l[1]/c]})),ie(this,"getCurrentImageIdIndex",(()=>this.currentImageIdIndex)),ie(this,"getSliceIndex",(()=>this.currentImageIdIndex)),ie(this,"getTargetImageIdIndex",(()=>this.targetImageIdIndex)),ie(this,"getImageIds",(()=>this.imageIds)),ie(this,"getCurrentImageId",(()=>this.imageIds[this.currentImageIdIndex])),ie(this,"hasImageId",(e=>this.imageIds.includes(e))),ie(this,"hasImageURI",(e=>{const t=this.imageIds;for(let i=0;i<t.length;i++)if(wt(t[i])===e)return!0;return!1})),ie(this,"customRenderViewportToCanvas",(()=>{if(!this.useCPURendering)throw new Error("Custom cpu rendering pipeline should only be hit in CPU rendering mode");return this._cpuFallbackEnabledElement.image?(wa(this._cpuFallbackEnabledElement,this.cpuRenderingInvalidated),this.cpuRenderingInvalidated=!1):this.fillWithBackgroundColor(),{canvas:this.canvas,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId,viewportStatus:this.viewportStatus}})),ie(this,"renderingPipelineFunctions",{getImageData:{cpu:this.getImageDataCPU,gpu:this.getImageDataGPU},setColormap:{cpu:this.setColormapCPU,gpu:this.setColormapGPU},getCamera:{cpu:this.getCameraCPU,gpu:super.getCamera},setCamera:{cpu:this.setCameraCPU,gpu:super.setCamera},getPan:{cpu:this.getPanCPU,gpu:super.getPan},setPan:{cpu:this.setPanCPU,gpu:super.setPan},getZoom:{cpu:this.getZoomCPU,gpu:super.getZoom},setZoom:{cpu:this.setZoomCPU,gpu:super.setZoom},setVOI:{cpu:this.setVOICPU,gpu:this.setVOIGPU},getRotation:{cpu:this.getRotationCPU,gpu:this.getRotationGPU},setInterpolationType:{cpu:this.setInterpolationTypeCPU,gpu:this.setInterpolationTypeGPU},setInvertColor:{cpu:this.setInvertColorCPU,gpu:this.setInvertColorGPU},resetCamera:{cpu:function(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return t.resetCameraCPU(e,i),!0},gpu:function(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return t.resetCameraGPU(e,i),!0}},canvasToWorld:{cpu:this.canvasToWorldCPU,gpu:this.canvasToWorldGPU},worldToCanvas:{cpu:this.worldToCanvasCPU,gpu:this.worldToCanvasGPU},getRenderer:{cpu:()=>this.getCPUFallbackError("getRenderer"),gpu:super.getRenderer},getDefaultActor:{cpu:()=>this.getCPUFallbackError("getDefaultActor"),gpu:super.getDefaultActor},getActors:{cpu:()=>this.getCPUFallbackError("getActors"),gpu:super.getActors},getActor:{cpu:()=>this.getCPUFallbackError("getActor"),gpu:super.getActor},setActors:{cpu:()=>this.getCPUFallbackError("setActors"),gpu:super.setActors},addActors:{cpu:()=>this.getCPUFallbackError("addActors"),gpu:super.addActors},addActor:{cpu:()=>this.getCPUFallbackError("addActor"),gpu:super.addActor},removeAllActors:{cpu:()=>this.getCPUFallbackError("removeAllActors"),gpu:super.removeAllActors},unsetColormap:{cpu:this.unsetColormapCPU,gpu:this.unsetColormapGPU}}),this.scaling={},this.modality=null,this.useCPURendering=Vi(),this._configureRenderingPipeline(),this.useCPURendering?this._resetCPUFallbackElement():this._resetGPUViewport(),this.imageIds=[],this.currentImageIdIndex=0,this.targetImageIdIndex=0,this.cameraFocalPointOnRender=[0,0,0],this.resetCamera(),this.initializeElementDisabledHandler()}setUseCPURendering(e){this.useCPURendering=e,this._configureRenderingPipeline(e)}static get useCustomRenderingPipeline(){return Vi()}_configureRenderingPipeline(e){this.useCPURendering=e??Vi();for(const e in this.renderingPipelineFunctions)if(Object.prototype.hasOwnProperty.call(this.renderingPipelineFunctions,e)){const t=this.renderingPipelineFunctions[e];this[e]=this.useCPURendering?t.cpu:t.gpu}this.useCPURendering?this._resetCPUFallbackElement():this._resetGPUViewport()}_resetCPUFallbackElement(){this._cpuFallbackEnabledElement={canvas:this.canvas,renderingTools:{},transform:new Qr,viewport:{rotation:0}}}_resetGPUViewport(){const e=this.getRenderer(),t=Or().newInstance();e.setActiveCamera(t);const i=[0,0,-1];this.initialViewUp=[0,-1,0],t.setDirectionOfProjection(-i[0],-i[1],-i[2]),t.setViewUp(...this.initialViewUp),t.setParallelProjection(!0),t.setThicknessFromFocalPoint(.1),t.setFreezeFocalPoint(!0)}initializeElementDisabledHandler(){ae.addEventListener(p.ELEMENT_DISABLED,(function e(){clearTimeout(this.debouncedTimeout),ae.removeEventListener(p.ELEMENT_DISABLED,e)}))}getImageDataGPU(){const e=this.getDefaultActor();if(!e)return;if(!Et(e))return;const{actor:t}=e,i=t.getMapper().getInputData();return{dimensions:i.getDimensions(),spacing:i.getSpacing(),origin:i.getOrigin(),direction:i.getDirection(),get scalarData(){return this.csImage.voxelManager.getScalarData()},imageData:t.getMapper().getInputData(),metadata:{Modality:this.modality,FrameOfReferenceUID:this.getFrameOfReferenceUID()},scaling:this.scaling,hasPixelSpacing:this.hasPixelSpacing,calibration:{...this.csImage.calibration,...this.calibration},preScale:{...this.csImage.preScale},voxelManager:this.csImage.voxelManager}}getImageDataCPU(){const{metadata:e}=this._cpuFallbackEnabledElement,t=e.spacing;return{dimensions:e.dimensions,spacing:t,origin:e.origin,direction:e.direction,metadata:{Modality:this.modality,FrameOfReferenceUID:this.getFrameOfReferenceUID()},scaling:this.scaling,imageData:{getDirection:()=>e.direction,getDimensions:()=>e.dimensions,getScalarData:()=>this.cpuImagePixelData,getSpacing:()=>t,worldToIndex:e=>{const t=this.worldToCanvasCPU(e),i=Ea(this._cpuFallbackEnabledElement,t);return[i[0],i[1],0]},indexToWorld:(e,t)=>{const i=Aa(this._cpuFallbackEnabledElement,[e[0],e[1]]);return this.canvasToWorldCPU(i,t)}},scalarData:this.cpuImagePixelData,hasPixelSpacing:this.hasPixelSpacing,calibration:{...this.csImage.calibration,...this.calibration},preScale:{...this.csImage.preScale},voxelManager:this.csImage.voxelManager}}buildMetadata(e){const t=e.imageId,{pixelRepresentation:i,bitsAllocated:n,bitsStored:r,highBit:a,photometricInterpretation:s,samplesPerPixel:o}=At("imagePixelModule",t),{windowWidth:l,windowCenter:c,voiLUTFunction:d}=e,{modality:h}=At("generalSeriesModule",t),u=At("scalingModule",t),g=At(q.CALIBRATION,t);"PT"===h&&u&&this._addScalingToViewport(u),this.modality=h;const m=this._getValidVOILUTFunction(d);this.VOILUTFunction=m,this.calibration=g;let p=this._getImagePlaneModule(t);return this.useCPURendering||(p=this.calibrateIfNecessary(t,p)),{imagePlaneModule:p,imagePixelModule:{bitsAllocated:n,bitsStored:r,samplesPerPixel:o,highBit:a,photometricInterpretation:s,pixelRepresentation:i,windowWidth:l,windowCenter:c,modality:h,voiLUTFunction:m}}}calibrateIfNecessary(e,t){const i=At("calibratedPixelSpacing",e),n=this.calibration!==i,{scale:r}=i||{};return this.hasPixelSpacing=r>0||t.rowPixelSpacing>0,t.calibration=i,n?(this.calibration=i,this._publishCalibratedEvent=!0,this._calibrationEvent={scale:r,calibration:i},t):t}setDefaultProperties(e,t){null==t?this.globalDefaultProperties=e:(this.perImageIdDefaultProperties.set(t,e),this.getCurrentImageId()===t&&this.setProperties(e))}clearDefaultProperties(e){null==e?(this.globalDefaultProperties={},this.resetProperties()):(this.perImageIdDefaultProperties.delete(e),this.resetToDefaultProperties())}setProperties(){let{colormap:e,voiRange:t,VOILUTFunction:i,invert:n,interpolationType:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.viewportStatus=this.csImage?U.PRE_RENDER:U.LOADING,null==this.globalDefaultProperties&&this.setDefaultProperties({colormap:e,voiRange:t,VOILUTFunction:i,invert:n,interpolationType:r}),void 0!==e&&this.setColormap(e),void 0!==t){const e=!0;this.setVOI(t,{suppressEvents:a,voiUpdatedWithSetProperties:e})}void 0!==i&&this.setVOILUTFunction(i,a),void 0!==n&&this.setInvertColor(n),void 0!==r&&this.setInterpolationType(r)}resetProperties(){this.cpuRenderingInvalidated=!0,this.voiUpdatedWithSetProperties=!1,this.viewportStatus=U.PRE_RENDER,this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={}),this._resetProperties(),this.render()}_resetProperties(){let e;e=this._isCurrentImagePTPrescaled()?this._getDefaultPTPrescaledVOIRange():this._getVOIRangeForCurrentImage(),this.setVOI(e),this.setInvertColor(this.initialInvert),this.setInterpolationType(E.LINEAR);const t=this.getTransferFunction();on(t,this.initialTransferFunctionNodes);const i=Qi(sn(t).reduce(((e,t)=>(e.push(t[0],t[1],t[2],t[3]),e)),[]),this.getDefaultActor().actor);this.setColormap(i)}resetToDefaultProperties(){this.cpuRenderingInvalidated=!0,this.viewportStatus=U.PRE_RENDER,this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={});const e=this.getCurrentImageId(),t=this.perImageIdDefaultProperties.get(e)||this.globalDefaultProperties;let i;t.colormap?.name&&this.setColormap(t.colormap),i=null==t.voiRange?this._getVOIRangeForCurrentImage():t.voiRange,this.setVOI(i),this.setInterpolationType(E.LINEAR),this.setInvertColor(!1),this.render()}_setPropertiesFromCache(){const{interpolationType:e,invert:t}=this;let i;i=this.voiUpdatedWithSetProperties?this.voiRange:this._isCurrentImagePTPrescaled()?this._getDefaultPTPrescaledVOIRange():this._getVOIRangeForCurrentImage()??this.voiRange,this.setVOI(i),this.setInterpolationType(e),this.setInvertColor(t)}getCameraCPU(){const{metadata:e,viewport:t}=this._cpuFallbackEnabledElement,{direction:i}=e,n=i.slice(6,9).map((e=>-e));let r=i.slice(3,6).map((e=>-e));if(t.rotation){const e=ft.mat4.fromRotation(ft.mat4.create(),t.rotation*Math.PI/180,n);r=ft.vec3.transformMat4(ft.vec3.create(),r,e)}const a=[this.element.clientWidth/2,this.element.clientHeight/2],s=this.canvasToWorld(a),o=this.canvasToWorld([0,0]),l=this.canvasToWorld([0,this.element.clientHeight]);return{parallelProjection:!0,focalPoint:s,position:[0,0,0],parallelScale:ft.vec3.distance(o,l)/2,scale:t.scale,viewPlaneNormal:[n[0],n[1],n[2]],viewUp:[r[0],r[1],r[2]],flipHorizontal:this.flipHorizontal,flipVertical:this.flipVertical}}setCameraCPU(e){const{viewport:t,image:i}=this._cpuFallbackEnabledElement,n=this.getCameraCPU(),{focalPoint:r,parallelScale:a,scale:s,flipHorizontal:o,flipVertical:l}=e,{clientHeight:c}=this.element;if(r){const e=this.worldToCanvasCPU(r),i=Ea(this._cpuFallbackEnabledElement,e),a=this.worldToCanvasCPU(n.focalPoint),s=Ea(this._cpuFallbackEnabledElement,a),o=ft.vec2.create();ft.vec2.subtract(o,ft.vec2.fromValues(i[0],i[1]),ft.vec2.fromValues(s[0],s[1]));const l=function(e,t){const{hflip:i,vflip:n,rotation:r}=t;if(e.x*=i?-1:1,e.y*=n?-1:1,0!==r){const t=r*Math.PI/180,i=Math.cos(t),n=Math.sin(t),a=e.x*i-e.y*n,s=e.x*n+e.y*i;e.x=a,e.y=s}return e}({x:o[0],y:o[1]},t);t.translation.x-=l.x,t.translation.y-=l.y}if(a){const{rowPixelSpacing:e}=i,n=c*e*.5/a;t.scale=n,t.parallelScale=a}if(s){const{rowPixelSpacing:e}=i;t.scale=s,t.parallelScale=c*e*.5/s}void 0===o&&void 0===l||this.setFlipCPU({flipHorizontal:o,flipVertical:l}),this._cpuFallbackEnabledElement.transform=ea(this._cpuFallbackEnabledElement);const d={previousCamera:n,camera:this.getCamera(),element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};oe(this.element,p.CAMERA_MODIFIED,d)}getPanCPU(){const{viewport:e}=this._cpuFallbackEnabledElement;return[e.translation.x,e.translation.y]}setPanCPU(e){const t=this.getCameraCPU();this.setCameraCPU({...t,focalPoint:[...e.map((e=>-e)),0]})}getZoomCPU(){const{viewport:e}=this._cpuFallbackEnabledElement;return e.scale}setZoomCPU(e){const t=this.getCameraCPU();this.setCameraCPU({...t,scale:e})}setFlipCPU(e){let{flipHorizontal:t,flipVertical:i}=e;const{viewport:n}=this._cpuFallbackEnabledElement;void 0!==t&&(n.hflip=t,this.flipHorizontal=n.hflip),void 0!==i&&(n.vflip=i,this.flipVertical=n.vflip)}setVOILUTFunction(e,t){if(this.useCPURendering)throw new Error("VOI LUT function is not supported in CPU rendering");const i=this._getValidVOILUTFunction(e);let n=!1;this.VOILUTFunction!==i&&(n=!0),this.VOILUTFunction=i;const{voiRange:r}=this.getProperties();this.setVOI(r,{suppressEvents:t,forceRecreateLUTFunction:n})}setRotationCPU(e){const{viewport:t}=this._cpuFallbackEnabledElement;t.rotation=e}setRotationGPU(e){const t=this.getPan(this.fitToCanvasCamera),i=this.getPan(),n=ft.vec2.sub([0,0],t,i);this.setPan(n,!1);const{flipVertical:r}=this.getCamera(),a=r?ft.vec3.negate(ft.vec3.create(),this.initialViewUp):this.initialViewUp;this.setCameraNoEvent({viewUp:a}),this.getVtkActiveCamera().roll(-e);const s=this.getPan(),o=this.getPan(this.fitToCanvasCamera),l=ft.vec2.sub([0,0],s,o),c=ft.vec2.add([0,0],t,l);this.setPan(c,!1)}setInterpolationTypeGPU(e){const t=this.getDefaultActor();if(!t)return;if(!Et(t))return;const{actor:i}=t;i.getProperty().setInterpolationType(e),this.interpolationType=e}setInterpolationTypeCPU(e){const{viewport:t}=this._cpuFallbackEnabledElement;t.pixelReplication=e!==E.LINEAR,this.interpolationType=e}setInvertColorCPU(e){const{viewport:t}=this._cpuFallbackEnabledElement;t&&(t.invert=e,this.invert=e)}setInvertColorGPU(e){const t=this.getDefaultActor();if(t&&Et(t))if(yt(t,"vtkVolume")){const i=t.actor.getProperty().getRGBTransferFunction(0);(!this.invert&&e||this.invert&&!e)&&en(i),this.invert=e}else if(yt(t,"vtkImageSlice")){const i=t.actor.getProperty().getRGBTransferFunction(0);(!this.invert&&e||this.invert&&!e)&&en(i),this.invert=e}}setVOICPU(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{suppressEvents:i=!1}=t,{viewport:n,image:r}=this._cpuFallbackEnabledElement;if(!n||!r)return;if(void 0===e){const{windowWidth:t,windowCenter:i}=r,a=Array.isArray(t)?t[0]:t,s=Array.isArray(i)?i[0]:i;n.voi={windowWidth:a,windowCenter:s};const{lower:o,upper:l}=nn(a,s);e={lower:o,upper:l}}else{const{lower:t,upper:i}=e,{windowCenter:r,windowWidth:a}=tn(t,i);n.voi||(n.voi={windowWidth:0,windowCenter:0}),n.voi.windowWidth=a,n.voi.windowCenter=r}this.voiRange=e;const a={viewportId:this.id,range:e};i||oe(this.element,p.VOI_MODIFIED,a)}getTransferFunction(){const e=this.getDefaultActor();if(e&&Et(e))return e.actor.getProperty().getRGBTransferFunction(0)}setVOIGPU(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{suppressEvents:i=!1,forceRecreateLUTFunction:n=!1,voiUpdatedWithSetProperties:r=!1}=t;if(e&&this.voiRange&&this.voiRange.lower===e.lower&&this.voiRange.upper===e.upper&&!n&&!this.stackInvalidated)return;const a=this.getDefaultActor();if(!a)return;if(!Et(a))return;const s=a.actor;let o=e;if(void 0===o){const e=s.getMapper().getInputData().getPointData().getScalars().getRange();o={lower:e[0],upper:e[1]}}s.getProperty().setUseLookupTableScalarRange(!0);let l=s.getProperty().getRGBTransferFunction(0);const c=this.VOILUTFunction===V.SAMPLED_SIGMOID;if((c||!l||n)&&(l=(c?rn:zr)(o),this.invert&&en(l),s.getProperty().setRGBTransferFunction(0,l),this.initialTransferFunctionNodes=sn(l)),c||l.setRange(o.lower,o.upper),this.voiRange=o,this.voiUpdatedWithSetProperties||(this.voiUpdatedWithSetProperties=r),i)return;const d={viewportId:this.id,range:o,VOILUTFunction:this.VOILUTFunction};oe(this.element,p.VOI_MODIFIED,d)}_addScalingToViewport(e){if(this.scaling.PT)return;const{suvbw:t,suvlbm:i,suvbsa:n}=e,r={};i&&(r.suvbwToSuvlbm=i/t),n&&(r.suvbwToSuvbsa=n/t),this.scaling.PT=r}_getNumCompsFromPhotometricInterpretation(e){let t=1;return("RGB"===e||e.includes("YBR")||"PALETTE COLOR"===e)&&(t=3),t}getImageDataMetadata(e){const{imagePlaneModule:t,imagePixelModule:i}=this.buildMetadata(e);let n,r;n=t.rowCosines,r=t.columnCosines,null!=n&&null!=r||(n=[1,0,0],r=[0,1,0]);const a=ft.vec3.fromValues(n[0],n[1],n[2]),s=ft.vec3.fromValues(r[0],r[1],r[2]),o=ft.vec3.create();ft.vec3.cross(o,a,s);let l=t.imagePositionPatient;null==l&&(l=[0,0,0]);const c=t.columnPixelSpacing||e.columnPixelSpacing,d=t.rowPixelSpacing||e.rowPixelSpacing,h=e.columns,u=e.rows,g=e.numberOfComponents||this._getNumCompsFromPhotometricInterpretation(i.photometricInterpretation);return{bitsAllocated:i.bitsAllocated,numberOfComponents:g,origin:l,direction:[...a,...s,...o],dimensions:[h,u,1],spacing:[c,d,1],numVoxels:h*u*1,imagePlaneModule:t,imagePixelModule:i}}getImagePlaneReferenceData(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.getCurrentImageIdIndex();const t=this.imageIds[e];if(!t)return;const i=At(q.IMAGE_PLANE,t);if(!i)return;const{imagePositionPatient:n,frameOfReferenceUID:r}=i;let{rowCosines:a,columnCosines:s}=i;return a||=[1,0,0],s||=[0,1,0],{FrameOfReferenceUID:r,viewPlaneNormal:ft.vec3.cross([0,0,0],s,a),cameraFocalPoint:n,referencedImageId:t,sliceIndex:e}}_getCameraOrientation(e){const t=e.slice(6,9).map((e=>-e)),i=e.slice(3,6).map((e=>-e));return{viewPlaneNormal:[t[0],t[1],t[2]],viewUp:[i[0],i[1],i[2]]}}createVTKImageData(e){let{origin:t,direction:i,dimensions:n,spacing:r,numberOfComponents:a,pixelArray:s}=e;const o=new s.constructor(s.length),l=Ke().newInstance({name:"Pixels",numberOfComponents:a,values:o}),c=hn().newInstance();return c.setDimensions(n),c.setSpacing(r),c.setDirection(i),c.setOrigin(t),c.getPointData().setScalars(l),c}_createVTKImageData(e){let{origin:t,direction:i,dimensions:n,spacing:r,numberOfComponents:a,pixelArray:s}=e;try{this._imageData=this.createVTKImageData({origin:t,direction:i,dimensions:n,spacing:r,numberOfComponents:a,pixelArray:s})}catch(e){console.error(e)}}async setStack(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;this._throwIfDestroyed(),this.imageIds=e,this.currentImageIdIndex=t,this.targetImageIdIndex=t;const i=At(Zr.IMAGE_RETRIEVE_CONFIGURATION,e[t],"stack");this.imagesLoader=i?(i.create||ka)(i):this,this.stackInvalidated=!0,this.flipVertical=!1,this.flipHorizontal=!1,this.voiRange=null,this.interpolationType=E.LINEAR,this.invert=!1,this.viewportStatus=U.LOADING,this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={},delete this._cpuFallbackEnabledElement.viewport.colormap);const n=await this._setImageIdIndex(t),r={imageIds:e,viewportId:this.id,element:this.element,currentImageIdIndex:t};return oe(this.element,p.STACK_VIEWPORT_NEW_STACK,r),n}_throwIfDestroyed(){if(this.isDisabled)throw new Error("The stack viewport has been destroyed and is no longer usable. Renderings will not be performed. If you are using the same viewportId and have re-enabled the viewport, you need to grab the new viewport instance using renderingEngine.getViewport(viewportId), instead of using your lexical scoped reference to the viewport instance.")}_checkVTKImageDataMatchesCornerstoneImage(e,t){if(!t)return!1;const[i,n]=t.getSpacing(),[r,a]=t.getDimensions(),s=this._getImagePlaneModule(e.imageId),o=t.getDirection(),l=o.slice(0,3),c=o.slice(3,6),d=t.getPointData().getScalars().getDataType(),h=qi(i,e.columnPixelSpacing),u=qi(n,e.rowPixelSpacing);return(h||null===e.columnPixelSpacing&&1===i)&&(u||null===e.rowPixelSpacing&&1===n)&&r===e.columns&&a===e.rows&&qi(s.rowCosines,l)&&qi(s.columnCosines,c)&&d===e.voxelManager.getScalarData().constructor.name}_updateVTKImageDataFromCornerstoneImage(e){let t=this._getImagePlaneModule(e.imageId).imagePositionPatient;null==t&&(t=[0,0,0]),this._imageData.setOrigin(t),Hr(this._imageData,e)}_loadAndDisplayImage(e,t){return this.useCPURendering?this._loadAndDisplayImageCPU(e,t):this._loadAndDisplayImageGPU(e,t)}_loadAndDisplayImageCPU(e,t){return new Promise(((i,n)=>{function r(e,t,n){if(this.currentImageIdIndex!==t)return;const r=e.voxelManager.getScalarData(),a=e.preScale,s=a?.scalingParameters;if(r instanceof Float32Array&&(a?.scaled&&s?.rescaleIntercept%1!=0||s?.rescaleSlope%1!=0)){const t={min:e.maxPixelValue,max:e.minPixelValue},i=Math.abs(t.max-t.min)/65535,n=t.min,a=r.length,s=new Uint16Array(a);let o=65535,l=0;for(let e=0;e<a;e++){const t=Math.floor((r[e]-n)/i);s[e]=t,o=Math.min(o,t),l=Math.max(l,t)}e.minPixelValue=o,e.maxPixelValue=l,e.slope=i,e.intercept=n,e.getPixelData=()=>s,e.preScale={...e.preScale,scaled:!1}}this._setCSImage(e),this.viewportStatus=U.PRE_RENDER;const o={image:e,imageId:n,imageIdIndex:t,viewportId:this.id,renderingEngineId:this.renderingEngineId};oe(this.element,p.STACK_NEW_IMAGE,o),this._updateToDisplayImageCPU(e),this.render(),this.currentImageIdIndex=t,i(n)}function a(e,t,i){const r={error:e,imageIdIndex:t,imageId:i};this.suppressEvents||oe(ae,p.IMAGE_LOAD_ERROR,r),n(e)}const s=v.Interaction,o={imageId:e,imageIdIndex:t},l={useRGBA:!0,requestType:s},c={imageId:e,imageIdIndex:t,viewportId:this.id,renderingEngineId:this.renderingEngineId};oe(this.element,p.PRE_STACK_NEW_IMAGE,c),Pn.addRequest(function(e,t,i){return On(e,i).then((i=>{r.call(this,i,t,e)}),(i=>{a.call(this,i,t,e)}))}.bind(this,e,t,l),s,o,-5)}))}successCallback(e,t){const i=this.imageIds.indexOf(e);if(this.currentImageIdIndex!==i)return;const n=this.csImage?.imageFrame,r=t?.imageFrame;(n?.photometricInterpretation||this.csImage?.photometricInterpretation)!==(r?.photometricInterpretation||t?.photometricInterpretation)&&(this.stackInvalidated=!0),this._setCSImage(t);const a={image:t,imageId:e,imageIdIndex:i,viewportId:this.id,renderingEngineId:this.renderingEngineId};this._updateActorToDisplayImageId(t),oe(this.element,p.STACK_NEW_IMAGE,a),this.render(),this.currentImageIdIndex=i}errorCallback(e,t,i){if(!t)return;const n={error:i,imageIdIndex:this.imageIds.indexOf(e),imageId:e};oe(ae,p.IMAGE_LOAD_ERROR,n)}getLoaderImageOptions(e){const t=this.imageIds.indexOf(e),{transferSyntaxUID:i}=At("transferSyntax",e)||{};return{useRGBA:!1,transferSyntaxUID:i,priority:5,requestType:v.Interaction,additionalDetails:{imageId:e,imageIdIndex:t}}}async loadImages(e,t){const i=await Promise.allSettled(e.map((e=>{const i=this.getLoaderImageOptions(e);return On(e,i).then((i=>(t.successCallback(e,i),e)),(i=>(t.errorCallback(e,!0,i),e)))}))),n=i.filter((e=>"rejected"===e.status));if(n&&n.length){const e=new CustomEvent(p.IMAGE_LOAD_ERROR,{detail:n,cancelable:!0});ae.dispatchEvent(e)}return i}_loadAndDisplayImageGPU(e,t){const i={imageId:e,imageIdIndex:t,viewportId:this.id,renderingEngineId:this.renderingEngineId};return oe(this.element,p.PRE_STACK_NEW_IMAGE,i),this.imagesLoader.loadImages([e],this).then((t=>e))}_updateToDisplayImageCPU(e){const t=this.getImageDataMetadata(e),i=Ta(this.canvas,e,this.modality,this._cpuFallbackEnabledElement.viewport.colormap),{windowCenter:n,windowWidth:r}=i.voi;this.voiRange=nn(r,n),this._cpuFallbackEnabledElement.image=e,this._cpuFallbackEnabledElement.metadata={...t},this.cpuImagePixelData=e.voxelManager.getScalarData();const a=Object.assign({},i,this._cpuFallbackEnabledElement.viewport);this._cpuFallbackEnabledElement.viewport=this.stackInvalidated?i:a,this.stackInvalidated=!1,this.cpuRenderingInvalidated=!0,this._cpuFallbackEnabledElement.transform=ea(this._cpuFallbackEnabledElement)}getSliceViewInfo(){throw new Error("Method not implemented.")}addImages(e){const t=this.getActors();e.forEach((e=>{const{imageId:i}=e,n=Ct.getImage(i),{origin:r,dimensions:a,direction:s,spacing:o,numberOfComponents:l}=this.getImageDataMetadata(n),c=this.createVTKImageData({origin:r,dimensions:a,direction:s,spacing:o,numberOfComponents:l,pixelArray:n.voxelManager.getScalarData()}),d=this.createActorMapper(c);d&&(t.push({uid:e.actorUID,actor:d,referencedId:i}),e.callback&&e.callback({imageActor:d,imageId:e.imageId}))})),this.setActors(t)}_updateActorToDisplayImageId(e){const t=this._checkVTKImageDataMatchesCornerstoneImage(e,this._imageData),i=this.getRenderer().getActiveCamera(),n=structuredClone(this.getCamera());if(t&&!this.stackInvalidated){this._updateVTKImageDataFromCornerstoneImage(e);const t=this.getCamera(),r=ft.vec3.subtract(ft.vec3.create(),this.cameraFocalPointOnRender,t.focalPoint);this.resetCameraNoEvent(),this.setCameraNoEvent({flipHorizontal:n.flipHorizontal,flipVertical:n.flipVertical,viewUp:n.viewUp});const{focalPoint:a}=this.getCamera();return this.cameraFocalPointOnRender=a,i.setFreezeFocalPoint(!0),this._restoreCameraProps(t,n,r),this._setPropertiesFromCache(),void(this.stackActorReInitialized=!1)}const{origin:r,direction:a,dimensions:s,spacing:o,numberOfComponents:l,imagePixelModule:c}=this.getImageDataMetadata(e),d=e.voxelManager.getScalarData();this._createVTKImageData({origin:r,direction:a,dimensions:s,spacing:o,numberOfComponents:l,pixelArray:d}),this._updateVTKImageDataFromCornerstoneImage(e);const h=this.createActorMapper(this._imageData),u=this.getActors();u.length&&u[0].uid===this.id?u[0].actor=h:u.unshift({uid:this.id,actor:h}),this.setActors(u);const{viewPlaneNormal:g,viewUp:m}=this._getCameraOrientation(a);this.setCameraNoEvent({viewUp:m,viewPlaneNormal:g}),this.initialViewUp=m,this.resetCameraNoEvent(),this.triggerCameraEvent(this.getCamera(),n),i.setFreezeFocalPoint(!0);const p="MONOCHROME1"===c.photometricInterpretation;this.stackInvalidated=!0,this.setVOI(this._getInitialVOIRange(e),{forceRecreateLUTFunction:!!p}),this.initialInvert=!!p,this.setInvertColor(this.invert||this.initialInvert),this.cameraFocalPointOnRender=this.getCamera().focalPoint,this.stackInvalidated=!1,this.stackActorReInitialized=!0,this._publishCalibratedEvent&&this.triggerCalibrationEvent()}_getInitialVOIRange(e){if(this.voiRange&&this.voiUpdatedWithSetProperties)return this.globalDefaultProperties.voiRange;const{windowCenter:t,windowWidth:i}=e;let n=this._getVOIRangeFromWindowLevel(i,t);return n=this._getPTPreScaledRange()||n,n}_getPTPreScaledRange(){if(this._isCurrentImagePTPrescaled())return this._getDefaultPTPrescaledVOIRange()}_isCurrentImagePTPrescaled(){return!("PT"!==this.modality||!this.csImage.isPreScaled||!this.csImage.preScale?.scalingParameters.suvbw)}_getDefaultPTPrescaledVOIRange(){return{lower:0,upper:5}}_getVOIRangeFromWindowLevel(e,t){let i,n;if("number"==typeof t&&"number"==typeof e?(i=t,n=e):Array.isArray(t)&&Array.isArray(e)&&(i=t[0],n=e[0]),void 0!==i&&void 0!==n)return nn(n,i)}async _setImageIdIndex(e){if(e>=this.imageIds.length)throw new Error(`ImageIdIndex provided ${e} is invalid, the stack only has ${this.imageIds.length} elements`);this.currentImageIdIndex=e,this.hasPixelSpacing=!0,this.viewportStatus=U.PRE_RENDER;const t=await this._loadAndDisplayImage(this.imageIds[e],e);if(this.perImageIdDefaultProperties.size>=1){const e=this.perImageIdDefaultProperties.get(t);void 0!==e?this.setProperties(e):void 0!==this.globalDefaultProperties&&this.setProperties(this.globalDefaultProperties)}return t}resetCameraCPU(e,t){const{image:i}=this._cpuFallbackEnabledElement;if(!i)return;!function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const{canvas:n,image:r,viewport:a}=e,s=ba(n,r,0).scaleFactor;a.vflip=!1,a.hflip=!1,t&&(a.translation.x=0,a.translation.y=0),i&&(a.displayedArea.tlhc.x=1,a.displayedArea.tlhc.y=1,a.displayedArea.brhc.x=r.columns,a.displayedArea.brhc.y=r.rows,a.scale=s)}(this._cpuFallbackEnabledElement,e,t);const{scale:n}=this._cpuFallbackEnabledElement.viewport,{clientWidth:r,clientHeight:a}=this.element,s=[r/2,a/2],o=this.canvasToWorldCPU(s);this.setCameraCPU({focalPoint:o,scale:n})}resetCameraGPU(e,t){return this.setCamera({flipHorizontal:!1,flipVertical:!1,viewUp:this.initialViewUp}),super.resetCamera({resetPan:e,resetZoom:t,resetToCenter:!0})}scroll(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=this.imageIds,r=this.targetImageIdIndex,a=n.length;let s=r+e;s=Math.max(0,s),i?s%=a:s=Math.min(a-1,s),this.targetImageIdIndex=s;const o=n[s];Ct.isLoaded(o)||!t?this.setImageIdIndex(s):(clearTimeout(this.debouncedTimeout),this.debouncedTimeout=window.setTimeout((()=>{this.setImageIdIndex(s)}),40));const l={newImageIdIndex:s,imageId:o,direction:e};s!==r&&oe(this.element,p.STACK_VIEWPORT_SCROLL,l)}setImageIdIndex(e){return this._throwIfDestroyed(),this.currentImageIdIndex===e?Promise.resolve(this.getCurrentImageId()):this._setImageIdIndex(e)}calibrateSpacing(e){const t=this.getImageIds().indexOf(e);this.stackInvalidated=!0,this._loadAndDisplayImage(e,t)}_restoreCameraProps(e,t,i){let{parallelScale:n}=e;const r=this.getRenderer(),{position:a,focalPoint:s}=this.getCamera(),o=ft.vec3.subtract(ft.vec3.create(),a,i),l=ft.vec3.subtract(ft.vec3.create(),s,i);this.setCameraNoEvent({parallelScale:n,position:o,focalPoint:l});const c=this.getCamera();this.triggerCameraEvent(c,t);const d={type:"ResetCameraEvent",renderer:r};r.invokeEvent(d)}triggerCameraEvent(e,t){const i={previousCamera:t,camera:e,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};this.suppressEvents||oe(this.element,p.CAMERA_MODIFIED,i)}triggerCalibrationEvent(){const{imageData:e}=this.getImageData(),t={element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId,imageId:this.getCurrentImageId(),imageData:e,worldToIndex:e.getWorldToIndex(),...this._calibrationEvent};this.suppressEvents||oe(this.element,p.IMAGE_SPACING_CALIBRATED,t),this._publishCalibratedEvent=!1}_getVOIRangeForCurrentImage(){const{windowCenter:e,windowWidth:t}=this.csImage;return this._getVOIRangeFromWindowLevel(t,e)}_getValidVOILUTFunction(e){return Object.values(V).includes(e)?e:V.LINEAR}getSliceInfo(){const e=this.getSliceIndex(),{dimensions:t}=this.getImageData();return{width:t[0],height:t[1],sliceIndex:e,slicePlane:2}}isReferenceViewable(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!super.isReferenceViewable(e,t))return!1;const{referencedImageId:i,sliceIndex:n}=e;if(e.volumeId&&!i)return t.asVolume;let r=this.getCurrentImageIdIndex();const a=this.imageIds[r];if(t.withNavigation&&"number"==typeof n&&(r=n),!a)return!1;if(t.asOverlay&&i){const e=(e=>{const t=At(q.IMAGE_PLANE,i),n=At(q.IMAGE_PLANE,e),r=t.imageOrientationPatient,a=n.imageOrientationPatient;if(r&&a){if(qi(t.imageOrientationPatient,n.imageOrientationPatient)){const i=t.imagePositionPatient,r=n.imagePositionPatient;if(i&&r){const t=ft.vec3.create();ft.vec3.subtract(t,r,i);const n=ft.vec3.create();ft.vec3.cross(n,a.slice(0,3),a.slice(3,6));const s=ft.vec3.dot(t,n);if(Math.abs(s)<1)return e}}}else{const i=t.rows,r=t.columns,a=n.rows,s=n.columns;if(i===a&&r===s)return e}})(a);if(e)return e}let{imageURI:s}=t;if(!s){const e=a.indexOf(":");s=a.substring(e+1)}return i?.endsWith(s)}getViewReference(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{sliceIndex:t=this.getCurrentImageIdIndex()}=e,i=super.getViewReference(e),n=this.imageIds[t];if(n){if(i.referencedImageId=n,this.getCurrentImageIdIndex()!==t){const e=this.getImagePlaneReferenceData(t);if(!e)return;Object.assign(i,e)}return i}}setViewReference(e){if(!e)return;const{referencedImageId:t,sliceIndex:i}=e;if("number"==typeof i&&t&&t===this.imageIds[i])this.scroll(i-this.targetImageIdIndex);else{const e=this.imageIds.indexOf(t);if(-1===e)throw new Error("Unsupported - referenced image id not found");this.scroll(e-this.targetImageIdIndex)}}getViewReferenceId(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{sliceIndex:t=this.currentImageIdIndex}=e;if(Array.isArray(t))throw new Error("Use of slice ranges for stacks not supported");return`imageId:${this.imageIds[t]}`}getCPUFallbackError(e){return new Error(`method ${e} cannot be used during CPU Fallback mode`)}fillWithBackgroundColor(){const e=this.getRenderingEngine();e&&e.fillCanvasWithBackgroundColor(this.canvas,this.options.background)}unsetColormapCPU(){delete this._cpuFallbackEnabledElement.viewport.colormap,this._cpuFallbackEnabledElement.renderingTools={},this.cpuRenderingInvalidated=!0,this.fillWithBackgroundColor(),this.render()}setColormapCPU(e){this.colormap=e;const t=Xi(e.name);this._cpuFallbackEnabledElement.viewport.colormap=t,this._cpuFallbackEnabledElement.renderingTools={},this.fillWithBackgroundColor(),this.cpuRenderingInvalidated=!0,this.render();const i={viewportId:this.id,colormap:e};oe(this.element,p.COLORMAP_MODIFIED,i)}setColormapGPU(e){const t=this.getDefaultActor().actor.getProperty(),i=t.getRGBTransferFunction(),n=Xi(e.name)||Wt().getPresetByName(e.name);if(i)i.applyColorMap(n),i.setMappingRange(this.voiRange.lower,this.voiRange.upper),t.setRGBTransferFunction(0,i);else{const e=Gt().newInstance();e.applyColorMap(n),e.setMappingRange(this.voiRange.lower,this.voiRange.upper),t.setRGBTransferFunction(0,e)}this.colormap=e,this.render();const r={viewportId:this.id,colormap:e};oe(this.element,p.COLORMAP_MODIFIED,r)}unsetColormapGPU(){throw new Error("unsetColormapGPU not implemented.")}_getImagePlaneModule(e){const t=At(q.IMAGE_PLANE,e);this.calibration||=t.calibration;const i={...t};return i.columnPixelSpacing||(i.columnPixelSpacing=1,this.hasPixelSpacing=this.calibration?.scale>0),i.rowPixelSpacing||(i.rowPixelSpacing=1,this.hasPixelSpacing=this.calibration?.scale>0),i.columnCosines||(i.columnCosines=[0,1,0]),i.rowCosines||(i.rowCosines=[1,0,0]),i.imagePositionPatient||(i.imagePositionPatient=[0,0,0]),i.imageOrientationPatient||(i.imageOrientationPatient=new Float32Array([1,0,0,0,1,0])),i}},Fa=class extends Nr{constructor(e){super(e),ie(this,"getRotation",(()=>0)),ie(this,"getCurrentImageIdIndex",(()=>0)),ie(this,"getCurrentImageId",(()=>null));const{parallelProjection:t,orientation:i}=this.options,n=this.getVtkActiveCamera();null!=t&&n.setParallelProjection(t),i&&i!==S.ACQUISITION&&this.applyViewOrientation(i)}resetCamera(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super.resetCamera({resetPan:e,resetZoom:t,resetToCenter:i});const n=this.getVtkActiveCamera();return n.getParallelProjection()?n.setClippingRange(-Z.MAXIMUM_RAY_DISTANCE,Z.MAXIMUM_RAY_DISTANCE):n.setClippingRange(Z.MINIMUM_SLAB_THICKNESS,Z.MAXIMUM_RAY_DISTANCE),!0}setSlabThickness(e,t){return null}setBlendMode(e,t,i){return null}resetProperties(e){return null}resetSlabThickness(){return null}},Ua="viewport-element",Ga="cornerstone-canvas",ja=1e-4;function Wa(e){const t=`canvas.${Ga}`,i=`div.${Ua}`,n=e.querySelector(i)||function(e){const t=document.createElement("div");return t.style.position="relative",t.style.width="100%",t.style.height="100%",t.style.overflow="hidden",t.classList.add(Ua),e.appendChild(t),t}(e),r=n.querySelector(t);if(r)return r;const a=function(e){const t=document.createElement("canvas");return t.style.position="absolute",t.style.width="100%",t.style.height="100%",t.style.imageRendering="pixelated",t.classList.add(Ga),e.appendChild(t),t}(n),s=n.getBoundingClientRect(),o=window.devicePixelRatio||1,l=Math.ceil(s.width*o),c=Math.ceil(s.height*o);return a.width=l,a.height=c,a}class Ba{constructor(e){ie(this,"actor",void 0),ie(this,"opacity",.4),ie(this,"outlineOpacity",.4),ie(this,"transferFunction",[]),this.actor=e}setRGBTransferFunction(e,t){this.transferFunction[e]=t}setScalarOpacity(e){}setInterpolationTypeToNearest(){}setUseLabelOutline(){}setLabelOutlineOpacity(e){this.outlineOpacity=e}setLabelOutlineThickness(){}getColor(e){const t=this.transferFunction[0];return[t.getRedValue(e),t.getGreenValue(e),t.getBlueValue(e),this.opacity]}}class qa{constructor(e){ie(this,"actor",void 0),this.actor=e}getInputData(){return this.actor.getImage()}}class za{constructor(e,t){ie(this,"image",void 0),ie(this,"derivedImage",void 0),ie(this,"canvasProperties",new Ba(this)),ie(this,"visibility",!1),ie(this,"mapper",new qa(this)),ie(this,"viewport",void 0),ie(this,"className","CanvasActor"),ie(this,"canvas",void 0),this.derivedImage=t,this.viewport=e}renderRLE(e,t,i){const{width:n,height:r}=this.image;let{canvas:a}=this;a&&a.width===n&&a.height===r||(this.canvas=a=new window.OffscreenCanvas(n,r));const s=a.getContext("2d"),o=s.createImageData(n,r),{data:l}=o;l.fill(0);const{map:c}=i;let d=1/0,h=1/0,u=-1/0,g=-1/0;for(let e=0;e<r;e++){const t=c.getRun(e,0);if(!t)continue;h=Math.min(h,e),g=Math.max(g,e);const i=e*n<<2;let r;for(const e of t){const{start:n,end:a,value:s}=e;if(0===s){r||=[],r.push(t.indexOf(e));continue}d=Math.min(d,n),u=Math.max(u,a);const o=this.canvasProperties.getColor(s).map((e=>255*e));let c=i+(n<<2);for(let e=n;e<a;e++)l[c++]=o[0],l[c++]=o[1],l[c++]=o[2],l[c++]=o[3]}}if(d>n)return;const m=u-d,p=g-h;s.putImageData(o,0,0,d-1,h-1,m+2,p+2),t.drawImage(a,d,h,m,p,d,h,m,p)}render(e,t){if(!this.visibility)return;const i=this.image||this.getImage(),{width:n,height:r}=i,a=i.getScalarData();if(!a)return;const{voxelManager:s}=i;if(s&&s.map.getRun)return void this.renderRLE(e,t,s);let{canvas:o}=this;o&&o.width===n&&o.height===r||(this.canvas=o=new window.OffscreenCanvas(n,r));const l=o.getContext("2d"),c=l.createImageData(n,r),{data:d}=c;let h=0,u=0,g=1/0,m=1/0,p=-1/0,f=-1/0;for(let e=0;e<r;e++)for(let t=0;t<n;t++){const i=a[h++];if(i){g=Math.min(t,g),m=Math.min(e,m),p=Math.max(t,p),f=Math.max(e,f);const n=this.canvasProperties.getColor(i);d[u]=255*n[0],d[u+1]=255*n[1],d[u+2]=255*n[2],d[u+3]=127}u+=4}if(g>n)return;const v=p-g+1,I=f-m+1;l.putImageData(c,0,0,g,m,v,I),t.drawImage(o,g,m,v,I,g,m,v,I)}getClassName(){return this.className}getProperty(){return this.canvasProperties}setVisibility(e){this.visibility=e}getMapper(){return this.mapper}isA(e){return e===this.className}getImage(){if(this.image)return this.image;this.image={...this.derivedImage};const e=this.viewport.getImageData();return Object.assign(this.image,{worldToIndex:t=>e.imageData.worldToIndex(t),indexToWorld:(t,i)=>e.imageData.indexToWorld(t,i),getDimensions:()=>e.dimensions,getScalarData:()=>this.derivedImage?.getPixelData(),getDirection:()=>e.direction,getSpacing:()=>e.spacing,setOrigin:()=>null,setDerivedImage:e=>{this.derivedImage=e,this.image=null},modified:()=>null}),this.image}}class Ha extends Ar{constructor(e){var t;super({...e,canvas:e.canvas||Wa(e.element)}),t=this,ie(this,"modality",void 0),ie(this,"imageId",void 0),ie(this,"uid",void 0),ie(this,"renderingEngineId",void 0),ie(this,"canvasContext",void 0),ie(this,"videoElement",void 0),ie(this,"videoWidth",0),ie(this,"videoHeight",0),ie(this,"loop",!0),ie(this,"mute",!0),ie(this,"isPlaying",!1),ie(this,"scrollSpeed",1),ie(this,"playbackRate",1),ie(this,"scalarData",void 0),ie(this,"initialRender",void 0),ie(this,"frameRange",[0,0]),ie(this,"metadata",void 0),ie(this,"fps",30),ie(this,"numberOfFrames",void 0),ie(this,"videoCamera",{panWorld:[0,0],parallelScale:1}),ie(this,"feFilter",void 0),ie(this,"averageWhite",void 0),ie(this,"voiRange",{lower:0,upper:255}),ie(this,"getProperties",(()=>({loop:this.videoElement.loop,muted:this.videoElement.muted,playbackRate:this.playbackRate,scrollSpeed:this.scrollSpeed,voiRange:{...this.voiRange}}))),ie(this,"getMiddleSliceData",(()=>{throw new Error("Method not implemented.")})),ie(this,"useCustomRenderingPipeline",!0),ie(this,"resetCamera",(()=>(this.refreshRenderValues(),this.canvasContext.fillRect(0,0,this.canvas.width,this.canvas.height),this.isPlaying||this.renderFrame(),!0))),ie(this,"getNumberOfSlices",(()=>{const e=Math.round(this.videoElement.duration*this.fps/this.scrollSpeed);return isNaN(e)?this.numberOfFrames:e})),ie(this,"getFrameOfReferenceUID",(()=>this.videoElement.src)),ie(this,"resize",(()=>{const e=this.canvas,{clientWidth:t,clientHeight:i}=e;e.width===t&&e.height===i||(e.width=t,e.height=i),this.refreshRenderValues(),this.isPlaying||this.renderFrame()})),ie(this,"canvasToWorld",(function(e){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0];const n=t.videoCamera.panWorld,r=t.getWorldToCanvasRatio(),a=[n[0]*r,n[1]*r],s=[e[0]-a[0],e[1]-a[1]];return i.splice(0,2,s[0]/r,s[1]/r),i})),ie(this,"worldToCanvas",(e=>{const t=this.videoCamera.panWorld,i=this.getWorldToCanvasRatio();return[(e[0]+t[0])*i,(e[1]+t[1])*i]})),ie(this,"getRotation",(()=>0)),ie(this,"canvasToIndex",(e=>{const t=this.getTransform();return t.invert(),t.transformPoint(e.map((e=>e*devicePixelRatio)))})),ie(this,"indexToCanvas",(e=>this.getTransform().transformPoint(e).map((e=>e/devicePixelRatio)))),ie(this,"customRenderViewportToCanvas",(()=>{this.renderFrame()})),ie(this,"renderFrame",(()=>{const e=this.getTransform().getMatrix(),t=this.canvasContext;t.resetTransform(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.drawImage(this.videoElement,0,0,this.videoWidth||1024,this.videoHeight||1024);for(const e of this.getActors())e.actor.render(this,this.canvasContext);this.canvasContext.resetTransform(),oe(this.element,p.STACK_NEW_IMAGE,{element:this.element,viewportId:this.id,viewport:this,renderingEngineId:this.renderingEngineId,time:this.videoElement.currentTime,duration:this.videoElement.duration}),oe(this.element,p.IMAGE_RENDERED,{element:this.element,viewportId:this.id,viewport:this,imageIndex:this.getCurrentImageIdIndex(),numberOfSlices:this.numberOfFrames,renderingEngineId:this.renderingEngineId,time:this.videoElement.currentTime,duration:this.videoElement.duration}),this.initialRender();const i=this.getFrameNumber();this.isPlaying&&(i<this.frameRange[0]?this.setFrameNumber(this.frameRange[0]):i>this.frameRange[1]&&(this.loop?this.setFrameNumber(this.frameRange[0]):this.pause()))})),ie(this,"renderWhilstPlaying",(()=>{this.renderFrame(),this.isPlaying&&requestAnimationFrame(this.renderWhilstPlaying)})),this.canvasContext=this.canvas.getContext("2d"),this.renderingEngineId=e.renderingEngineId,this.element.setAttribute("data-viewport-uid",this.id),this.element.setAttribute("data-rendering-engine-uid",this.renderingEngineId),this.videoElement=document.createElement("video"),this.videoElement.muted=this.mute,this.videoElement.loop=this.loop,this.videoElement.autoplay=!0,this.videoElement.crossOrigin="anonymous",this.addEventListeners(),this.resize()}static get useCustomRenderingPipeline(){return!0}addEventListeners(){this.canvas.addEventListener(p.ELEMENT_DISABLED,this.elementDisabledHandler)}removeEventListeners(){this.canvas.removeEventListener(p.ELEMENT_DISABLED,this.elementDisabledHandler)}elementDisabledHandler(){this.removeEventListeners(),this.videoElement.remove()}getImageDataMetadata(e){const t="string"==typeof e?e:e.imageId,i=At(q.IMAGE_PLANE,t);let n=i.rowCosines,r=i.columnCosines;null!=n&&null!=r||(n=[1,0,0],r=[0,1,0]);const a=ft.vec3.fromValues(n[0],n[1],n[2]),s=ft.vec3.fromValues(r[0],r[1],r[2]),{rows:o,columns:l}=i,c=ft.vec3.create();ft.vec3.cross(c,a,s);let d=i.imagePositionPatient;null==d&&(d=[0,0,0]);const h=i.columnPixelSpacing||1,u=i.rowPixelSpacing||1,g=i.columns,m=i.rows;return this.hasPixelSpacing=!!i.columnPixelSpacing,{bitsAllocated:8,numberOfComponents:3,origin:d,rows:o,columns:l,direction:[...a,...s,...c],dimensions:[g,m,1],spacing:[h,u,1],hasPixelSpacing:this.hasPixelSpacing,numVoxels:g*m*1,imagePlaneModule:i}}setDataIds(e,t){this.setVideo(e[0],(t.viewReference.sliceIndex||0)+1)}setVideo(e,t){this.imageId=Array.isArray(e)?e[0]:e;const i=At(q.IMAGE_URL,e);if(!i?.rendered)throw new Error(`Video Image ID ${e} does not have a rendered video view`);const{rendered:n}=i,r=At(q.GENERAL_SERIES,e);this.modality=r?.Modality,this.metadata=this.getImageDataMetadata(e);let{cineRate:a,numberOfFrames:s}=At(q.CINE,e);return this.numberOfFrames=s,this.setVideoURL(n).then((()=>(s&&1!==s||(s=Math.round(this.videoElement.duration*(a||30))),a||(a=Math.round(s/this.videoElement.duration)),this.fps=a,this.numberOfFrames=s,this.setFrameRange([1,s]),this.initialRender=()=>{this.initialRender=null,this.pause(),this.setFrameNumber(t||1)},new Promise((e=>{window.setTimeout((()=>{this.setFrameNumber(t||1),e(this)}),25)})))))}async setVideoURL(e){return new Promise((t=>{this.videoElement.src=e,this.videoElement.preload="auto";const i=()=>{this.videoWidth=this.videoElement.videoWidth,this.videoHeight=this.videoElement.videoHeight,this.videoElement.removeEventListener("loadedmetadata",i),this.refreshRenderValues(),t(!0)};this.videoElement.addEventListener("loadedmetadata",i)}))}getImageIds(){const e=new Array(this.numberOfFrames),t=this.imageId.replace(/[0-9]+$/,"");for(let i=0;i<this.numberOfFrames;i++)e[i]=`${t}${i+1}`;return e}togglePlayPause(){return this.isPlaying?(this.pause(),!1):(this.play(),!0)}async play(){try{this.isPlaying||(this.isPlaying=!0,await this.videoElement.play(),this.renderWhilstPlaying())}catch(e){}}pause(){try{this.isPlaying=!1,this.videoElement.pause()}catch(e){}}async scroll(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;await this.pause();const t=this.videoElement,i=this.renderFrame,n=t.currentTime+e*this.scrollSpeed/this.fps;t.currentTime=n;const r=e=>{i(),t.removeEventListener("seeked",r)};t.addEventListener("seeked",r)}async start(){const e=this.videoElement,t=this.renderFrame;if(e.currentTime=0,e.paused){const i=n=>{t(),e.removeEventListener("seeked",i)};e.addEventListener("seeked",i)}}async end(){const e=this.videoElement,t=this.renderFrame;if(e.currentTime=e.duration,e.paused){const i=n=>{t(),e.removeEventListener("seeked",i)};e.addEventListener("seeked",i)}}async setTime(e){const t=this.videoElement,i=this.renderFrame;if(t.currentTime=e,t.paused){const e=n=>{i(),t.removeEventListener("seeked",e)};t.addEventListener("seeked",e)}}getSliceViewInfo(){throw new Error("Method not implemented.")}async setFrameNumber(e){this.setTime((e-1)/this.fps)}setFrameRange(e){e?2===e.length&&e[0]!==e[1]&&(this.frameRange=[e[0],e[1]]):this.frameRange=[1,this.numberOfFrames]}getFrameRange(){return this.frameRange}setProperties(e){void 0!==e.loop&&(this.videoElement.loop=e.loop),void 0!==e.muted&&(this.videoElement.muted=e.muted),void 0!==e.playbackRate&&this.setPlaybackRate(e.playbackRate),void 0!==e.scrollSpeed&&this.setScrollSpeed(e.scrollSpeed),e.voiRange&&this.setVOI(e.voiRange)}setPlaybackRate(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.playbackRate=e,e<.0625?this.pause():this.videoElement&&(this.videoElement.playbackRate=e,this.play())}setScrollSpeed(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:W.FRAME;this.scrollSpeed=t===W.SECOND?e*this.fps:e}resetProperties(){this.setProperties({loop:!1,muted:!0})}getScalarData(){if(this.scalarData.frameNumber===this.getFrameNumber())return this.scalarData;const e=document.createElement("canvas");e.width=this.videoWidth,e.height=this.videoHeight;const t=e.getContext("2d");t.drawImage(this.videoElement,0,0);const i=t.getImageData(0,0,this.videoWidth,this.videoHeight).data;return i.getRange=()=>[0,255],i.frameNumber=this.getFrameNumber(),this.scalarData=i,i}getImageData(){const{metadata:e}=this,t=e.spacing,i={dimensions:e.dimensions,spacing:t,origin:e.origin,direction:e.direction,metadata:{Modality:this.modality,FrameOfReferenceUID:e.FrameOfReferenceUID},getScalarData:()=>this.getScalarData(),scalarData:this.getScalarData(),imageData:{getDirection:()=>e.direction,getDimensions:()=>e.dimensions,getRange:()=>[0,255],getScalarData:()=>this.getScalarData(),getSpacing:()=>e.spacing,worldToIndex:e=>{const t=this.worldToCanvas(e),i=this.canvasToIndex(t);return[i[0],i[1],0]},indexToWorld:(e,t)=>{const i=this.indexToCanvas([e[0],e[1]]);return this.canvasToWorld(i,t)}},hasPixelSpacing:this.hasPixelSpacing,calibration:this.calibration,preScale:{scaled:!1}};return Object.defineProperty(i,"scalarData",{get:()=>this.getScalarData(),enumerable:!0}),i}hasImageURI(e){const t=e.match(Ha.frameRangeExtractor),i=t?e.substring(0,t.index):e;return this.imageId.includes(i)}setVOI(e){this.voiRange=e,this.setColorTransform()}setWindowLevel(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:256,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:128;const i=t-e/2,n=t+e/2-1;this.setVOI({lower:i,upper:n}),this.setColorTransform()}setAverageWhite(e){this.averageWhite=e,this.setColorTransform()}setColorTransform(){if(!this.voiRange&&!this.averageWhite)return void(this.feFilter=null);const e=this.averageWhite||[255,255,255],t=Math.max(...e),i=e.map((e=>t/e)),{lower:n=0,upper:r=255}=this.voiRange||{},a=(r-n+1)/255,s=n/255;this.feFilter=`url('data:image/svg+xml, <svg xmlns="http://www.w3.org/2000/svg"> <filter id="colour" color-interpolation-filters="linearRGB"> <feColorMatrix type="matrix" values=" ${i[0]*a} 0 0 0 ${s} 0 ${i[1]*a} 0 0 ${s} 0 0 ${i[2]*a} 0 ${s} 0 0 0 1 0" /> </filter> </svg>#colour')`,this.canvas.style.filter=this.feFilter}setCamera(e){const{parallelScale:t,focalPoint:i}=e;if(t&&(this.videoCamera.parallelScale=this.element.clientHeight/2/t),void 0!==i){const e=this.worldToCanvas(i),t=[this.element.clientWidth/2,this.element.clientHeight/2],n=[(e[0]-t[0])/this.videoCamera.parallelScale,(e[1]-t[1])/this.videoCamera.parallelScale];this.videoCamera.panWorld=[this.videoCamera.panWorld[0]-n[0],this.videoCamera.panWorld[1]-n[1]]}this.canvasContext.fillStyle="rgba(0,0,0,1)",this.canvasContext.fillRect(0,0,this.canvas.width,this.canvas.height),this.isPlaying||this.renderFrame()}getCurrentImageId(){return this.imageId.replace("/frames/1",this.isPlaying?`/frames/${this.frameRange[0]}-${this.frameRange[1]}`:`/frames/${this.getFrameNumber()}`)}getViewReferenceId(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{sliceIndex:t}=e;return void 0===t?`videoId:${this.getCurrentImageId()}`:Array.isArray(t)?`videoId:${this.imageId.substring(0,this.imageId.length-1)}${t[0]+1}-${t[1]+1}`:`videoId:${this.imageId.replace("/frames/1",`/frames/${1+t}`)}`}isReferenceViewable(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{imageURI:i}=t;const{referencedImageId:n,sliceIndex:r}=e;if(!super.isReferenceViewable(e))return!1;const a=this.getCurrentImageId();if(!i){const e=a.indexOf(":");i=a.substring(e+1,a.length-1)}if(t.withNavigation)return!0;const s=this.getSliceIndex();if(Array.isArray(r))return s>=r[0]&&s<=r[1];if(void 0!==r)return s===r;if(!n)return!1;const o=n.match(Ha.frameRangeExtractor);if(!o[2])return!0;const l=o[2].split("-").map((e=>Number(e))),c=s+1;return l[0]<=c&&c<=(l[1]??l[0])}setViewReference(e){"number"==typeof e.sliceIndex?this.setFrameNumber(e.sliceIndex+1):Array.isArray(e.sliceIndex)&&this.setFrameRange(e.sliceIndex)}getViewReference(e){let t=e.sliceIndex;return t||(t=this.isPlaying?[this.frameRange[0]-1,this.frameRange[1]-1]:this.getCurrentImageIdIndex()),{...super.getViewReference(e),referencedImageId:this.getViewReferenceId(e),sliceIndex:t}}getFrameNumber(){return 1+this.getCurrentImageIdIndex()}getCurrentImageIdIndex(){return Math.round(this.videoElement.currentTime*this.fps)}getSliceIndex(){return this.getCurrentImageIdIndex()/this.scrollSpeed}getCamera(){const{parallelScale:e}=this.videoCamera,t=[this.element.clientWidth/2,this.element.clientHeight/2];return{parallelProjection:!0,focalPoint:this.canvasToWorld(t),position:[0,0,0],viewUp:[0,-1,0],parallelScale:this.element.clientHeight/2/e,viewPlaneNormal:[0,0,1]}}getFrameRate(){return this.fps}getPan(){const e=this.videoCamera.panWorld;return[e[0],e[1]]}refreshRenderValues(){let e=this.canvas.offsetWidth/this.videoWidth;this.videoHeight*e>this.canvas.height&&(e=this.canvas.offsetHeight/this.videoHeight);const t=Math.floor(this.videoWidth*e),i=Math.floor(this.videoHeight*e),n=(this.canvas.offsetWidth-t)/2/e,r=(this.canvas.offsetHeight-i)/2/e;this.videoCamera.panWorld=[n,r],this.videoCamera.parallelScale=e}getWorldToCanvasRatio(){return this.videoCamera.parallelScale}getCanvasToWorldRatio(){return 1/this.videoCamera.parallelScale}getTransform(){const e=this.videoCamera.panWorld,t=window.devicePixelRatio||1,i=this.getWorldToCanvasRatio(),n=this.getCanvasToWorldRatio(),r=[this.canvas.offsetWidth/2,this.canvas.offsetHeight/2],a=[r[0]*n,r[1]*n],s=new Qr;return s.scale(t,t),s.translate(r[0],r[1]),s.scale(i,i),s.translate(e[0],e[1]),s.translate(-a[0],-a[1]),s}updateCameraClippingPlanesAndRange(){}addImages(e){const t=this.getActors();e.forEach((e=>{const i=Ct.getImage(e.imageId),n=this.createActorMapper(i);n&&(t.push({uid:e.actorUID,actor:n}),e.callback&&e.callback({imageActor:n,imageId:e.imageId}))})),this.setActors(t)}createActorMapper(e){return new za(this,e)}}ie(Ha,"frameRangeExtractor",/(\/frames\/|[&?]frameNumber=)([^/&?]*)/i);const $a=Ha,Ka=Symbol.for("map");class Ya extends Ar{constructor(e){super({...e,canvas:e.canvas||Wa(e.element)}),ie(this,"modality",void 0),ie(this,"imageIds",void 0),ie(this,"uid",void 0),ie(this,"renderingEngineId",void 0),ie(this,"frameOfReferenceUID",void 0),ie(this,"metadata",void 0),ie(this,"metadataDicomweb",void 0),ie(this,"microscopyElement",void 0),ie(this,"map",void 0),ie(this,"internalCamera",{rotation:0,centerIndex:[0,0],extent:[0,-2,1,-1],xSpacing:1,ySpacing:1,resolution:1,zoom:1}),ie(this,"viewer",void 0),ie(this,"voiRange",{lower:0,upper:255}),ie(this,"getProperties",(()=>({}))),ie(this,"resetCamera",(()=>!0)),ie(this,"getNumberOfSlices",(()=>1)),ie(this,"getFrameOfReferenceUID",(()=>this.frameOfReferenceUID)),ie(this,"resize",(()=>{const e=this.canvas,{clientWidth:t,clientHeight:i}=e;e.width===t&&e.height===i||(e.width=t,e.height=i),this.refreshRenderValues()})),ie(this,"canvasToWorld",(e=>{if(!this.metadata)return;const[t,i]=this.canvasToIndex(e),{origin:n,spacing:r,direction:a}=this.getImageData(),s=ft.vec3.fromValues(0,0,0),o=a.slice(0,3),l=a.slice(3,6);return ft.vec3.scaleAndAdd(s,n,o,t*r[0]),ft.vec3.scaleAndAdd(s,s,l,i*r[1]),[s[0],s[1],s[2]]})),ie(this,"worldToCanvas",(e=>{if(!this.metadata)return;const{spacing:t,direction:i,origin:n}=this.metadata,r=i.slice(0,3),a=i.slice(3,6),s=ft.vec3.subtract([0,0,0],e,n),o=[ft.vec3.dot(s,r)/t[0],ft.vec3.dot(s,a)/t[1]];return this.indexToCanvas(o)})),ie(this,"postrender",(()=>{this.refreshRenderValues(),oe(this.element,p.IMAGE_RENDERED,{element:this.element,viewportId:this.id,viewport:this,renderingEngineId:this.renderingEngineId})})),ie(this,"getRotation",(()=>0)),ie(this,"canvasToIndex",(e=>{const t=this.getTransform();return t.invert(),t.transformPoint(e)})),ie(this,"indexToCanvas",(e=>this.getTransform().transformPoint(e))),ie(this,"customRenderViewportToCanvas",(()=>{})),this.renderingEngineId=e.renderingEngineId,this.element.setAttribute("data-viewport-uid",this.id),this.element.setAttribute("data-rendering-engine-uid",this.renderingEngineId),this.element.style.position="relative",this.microscopyElement=document.createElement("div"),this.microscopyElement.id=se(),this.microscopyElement.innerText="Initial",this.microscopyElement.style.background="grey",this.microscopyElement.style.width="100%",this.microscopyElement.style.height="100%",this.microscopyElement.style.position="absolute",this.microscopyElement.style.left="0",this.microscopyElement.style.top="0";const t=this.element.firstElementChild;t.insertBefore(this.microscopyElement,t.childNodes[1]),this.addEventListeners(),this.resize()}static get useCustomRenderingPipeline(){return!0}addEventListeners(){this.canvas.addEventListener(p.ELEMENT_DISABLED,this.elementDisabledHandler)}removeEventListeners(){this.canvas.removeEventListener(p.ELEMENT_DISABLED,this.elementDisabledHandler)}elementDisabledHandler(){this.removeEventListeners()}getImageDataMetadata(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;const t=this.metadataDicomweb.reduce(((e,t)=>e?.NumberOfFrames<t.NumberOfFrames?t:e)),{TotalPixelMatrixColumns:i,TotalPixelMatrixRows:n,ImageOrientationSlide:r,ImagedVolumeWidth:a,ImagedVolumeHeight:s,ImagedVolumeDepth:o}=t,l=At(q.IMAGE_PLANE,this.imageIds[e]);let c=r.slice(0,3),d=r.slice(3,6);null!=c&&null!=d||(c=[1,0,0],d=[0,1,0]);const h=ft.vec3.fromValues(c[0],c[1],c[2]),u=ft.vec3.fromValues(d[0],d[1],d[2]),g=ft.vec3.create();ft.vec3.cross(g,h,u);const{XOffsetInSlideCoordinateSystem:m=0,YOffsetInSlideCoordinateSystem:p=0,ZOffsetInSlideCoordinateSystem:f=0}=t.TotalPixelMatrixOriginSequence?.[0]||{},v=[m,p,f],I=a/i,w=s/n,C=i,E=n,y=o;return this.hasPixelSpacing=!(!a||!s),{bitsAllocated:8,numberOfComponents:3,origin:v,direction:[...h,...u,...g],dimensions:[C,E,1],spacing:[I,w,y],hasPixelSpacing:this.hasPixelSpacing,numVoxels:C*E*1,imagePlaneModule:l}}async setFrameNumber(e){}setProperties(e){}resetProperties(){this.setProperties({})}getScalarData(){return null}getImageData(){const{metadata:e}=this;if(!e)return null;const{spacing:t}=e;return{dimensions:e.dimensions,spacing:t,numberOfComponents:3,origin:e.origin,direction:e.direction,metadata:{Modality:this.modality,FrameOfReferenceUID:this.frameOfReferenceUID},imageData:{getDirection:()=>e.direction,getDimensions:()=>e.dimensions,getRange:()=>[0,255],getScalarData:()=>this.getScalarData(),getSpacing:()=>e.spacing,worldToIndex:e=>{const t=this.worldToCanvas(e),i=this.canvasToIndex(t);return[i[0],i[1],0]},indexToWorld:e=>{const t=this.indexToCanvas([e[0],e[1]]);return this.canvasToWorld(t)}},hasPixelSpacing:this.hasPixelSpacing,calibration:this.calibration,preScale:{scaled:!1},scalarData:this.getScalarData()}}hasImageURI(e){return!0}setCamera(e){const t=this.getCamera(),{parallelScale:i,focalPoint:n}=e,r=this.getView(),{xSpacing:a}=this.internalCamera;if(i){const e=1/a/(this.element.clientHeight/i);r.setResolution(e)}if(n){const e=this.worldToCanvas(n),t=this.canvasToIndex(e);r.setCenter(t)}const s=this.getCamera();this.triggerCameraModifiedEventIfNecessary(t,s)}getCurrentImageId(){return this.imageIds[0]}getFrameNumber(){return 1}getCamera(){this.refreshRenderValues();const{resolution:e,xSpacing:t}=this.internalCamera,i=e*t,n=[this.element.clientWidth/2,this.element.clientHeight/2],r=this.canvasToWorld(n);return{parallelProjection:!0,focalPoint:r,position:r,viewUp:[0,-1,0],parallelScale:this.element.clientHeight*i,viewPlaneNormal:[0,0,1]}}setDataIds(e){const t=At(q.WADO_WEB_CLIENT,e[0]);if(!t)throw new Error(`To use setDataIds on WSI data, you must provide metaData.webClient for ${e[0]}`);return this.setWSI(e,t)}async setWSI(e,t){this.microscopyElement.style.background="black",this.microscopyElement.innerText="Loading",this.imageIds=e;const i=await Ya.getDicomMicroscopyViewer();this.frameOfReferenceUID=null;const n=this.imageIds.map((e=>{const i=t.getDICOMwebMetadata(e);Object.defineProperty(i,"isMultiframe",{value:i.isMultiframe,enumerable:!1}),Object.defineProperty(i,"frameNumber",{value:void 0,enumerable:!1});const n=i["00080008"]?.Value;1===n?.length&&(i["00080008"].Value=n[0].split("\\"));const r=i["00200052"]?.Value?.[0];return this.frameOfReferenceUID?r!==this.frameOfReferenceUID&&(i["00200052"].Value=[this.frameOfReferenceUID]):this.frameOfReferenceUID=r,i})),r=[];n.forEach((e=>{const t=new i.metadata.VLWholeSlideMicroscopyImage({metadata:e}),n=t.ImageType[2];"VOLUME"===n||"THUMBNAIL"===n?r.push(t):console.log("Unknown image type",t.ImageType)})),this.metadataDicomweb=r;const a=new i.viewer.VolumeImageViewer({client:t,metadata:r,controls:[],bindings:{}});a.render({container:this.microscopyElement}),this.metadata=this.getImageDataMetadata(),a.deactivateDragPanInteraction(),this.viewer=a,this.map=a[Ka],this.map.on("postrender",this.postrender),this.resize(),this.microscopyElement.innerText="",Object.assign(this.microscopyElement.style,{"--ol-partial-background-color":"rgba(127, 127, 127, 0.7)","--ol-foreground-color":"#000000","--ol-subtle-foreground-color":"#000","--ol-subtle-background-color":"rgba(78, 78, 78, 0.5)",background:"none"})}scroll(e){const t=this.getCamera();this.setCamera({parallelScale:t.parallelScale*(1+.1*e)})}getSliceIndex(){return 0}getView(){if(!this.viewer)return;const e=this.viewer[Ka],t=window;return t.map=e,t.viewer=this.viewer,t.view=e?.getView(),t.wsi=this,e?.getView()}refreshRenderValues(){const e=this.getView();if(!e)return;const t=e.getResolution();if(!t||t<X)return;const i=e.getCenter(),n=e.getProjection().getExtent(),r=e.getRotation(),a=e.getZoom(),{metadata:{spacing:[s,o]}}=this,l=1/t/s;Object.assign(this.internalCamera,{extent:n,centerIndex:i,worldToCanvasRatio:l,xSpacing:s,ySpacing:o,resolution:t,rotation:r,zoom:a})}getZoom(){return this.getView()?.getZoom()}setZoom(e){this.getView()?.setZoom(e)}getTransform(){this.refreshRenderValues();const{centerIndex:e,resolution:t,rotation:i}=this.internalCamera,n=[this.canvas.width/2,this.canvas.height/2],r=new Qr;return r.translate(n[0],n[1]),r.rotate(i),r.scale(1/t,-1/t),r.translate(-e[0],-e[1]),r}getReferenceId(){return`imageId:${this.getCurrentImageId()}`}getCurrentImageIdIndex(){return 0}}ie(Ya,"getDicomMicroscopyViewer",(async()=>Gi("dicom-microscopy-viewer")));const Za=Ya,Xa={[w.ORTHOGRAPHIC]:Gr,[w.PERSPECTIVE]:Gr,[w.STACK]:Na,[w.VOLUME_3D]:Fa,[w.VIDEO]:$a,[w.WholeSlide]:Za};function Ja(e){return Xa[e].useCustomRenderingPipeline}const Qa=class{constructor(e){if(ie(this,"id",void 0),ie(this,"hasBeenDestroyed",void 0),ie(this,"offscreenMultiRenderWindow",void 0),ie(this,"offScreenCanvasContainer",void 0),ie(this,"_viewports",void 0),ie(this,"_needsRender",new Set),ie(this,"_animationFrameSet",!1),ie(this,"_animationFrameHandle",null),ie(this,"useCPURendering",void 0),ie(this,"renderFrameOfReference",(e=>{const t=this._getViewportsAsArray().map((t=>{if(t.getFrameOfReferenceUID()===e)return t.id}));this.renderViewports(t)})),ie(this,"_renderFlaggedViewports",(()=>{this._throwIfDestroyed(),this.useCPURendering||this.performVtkDrawCall();const e=this._getViewportsAsArray(),t=[];for(let i=0;i<e.length;i++){const n=e[i];if(this._needsRender.has(n.id)){const e=this.renderViewportUsingCustomOrVtkPipeline(n);if(t.push(e),n.setRendered(),this._needsRender.delete(n.id),0===this._needsRender.size)break}}this._animationFrameSet=!1,this._animationFrameHandle=null,t.forEach((e=>{e?.element&&oe(e.element,p.IMAGE_RENDERED,e)}))})),this.id=e||se(),this.useCPURendering=Vi(),re.set(this),!ki())throw new Error("@cornerstonejs/core is not initialized, run init() first");this.useCPURendering||(this.offscreenMultiRenderWindow=pt.newInstance(),this.offScreenCanvasContainer=document.createElement("div"),this.offscreenMultiRenderWindow.setContainer(this.offScreenCanvasContainer)),this._viewports=new Map,this.hasBeenDestroyed=!1}enableElement(e){const t=this._normalizeViewportInputEntry(e);this._throwIfDestroyed();const{element:i,viewportId:n}=t;if(!i)throw new Error("No element provided");this.getViewport(n)&&this.disableElement(n);const{type:r}=t,a=Ja(r);this.useCPURendering||a?this.addCustomViewport(t):this.enableVTKjsDrivenViewport(t);const s=Wa(i),{background:o}=t.defaultOptions;this.fillCanvasWithBackgroundColor(s,o)}disableElement(e){this._throwIfDestroyed();const t=this.getViewport(e);t?(this._resetViewport(t),Ja(t.type)||this.useCPURendering||this.offscreenMultiRenderWindow.removeRenderer(e),this._removeViewport(e),t.isDisabled=!0,this._needsRender.delete(e),this.getViewports().length||this._clearAnimationFrame()):console.warn(`viewport ${e} does not exist`)}setViewports(e){const t=this._normalizeViewportInputEntries(e);this._throwIfDestroyed(),this._reset();const i=[],n=[];t.forEach((e=>{this.useCPURendering||Ja(e.type)?n.push(e):i.push(e)})),this.setVtkjsDrivenViewports(i),this.setCustomViewports(n),t.forEach((e=>{const t=Wa(e.element),{background:i}=e.defaultOptions;this.fillCanvasWithBackgroundColor(t,i)}))}resize(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this._throwIfDestroyed();const i=this._getViewportsAsArray(),n=[],r=[];i.forEach((e=>{Ja(e.type)?r.push(e):n.push(e)})),n.length&&this._resizeVTKViewports(n,t,e),r.length&&this._resizeUsingCustomResizeHandler(r,t,e)}getViewport(e){return this._viewports.get(e)}getViewports(){return this._throwIfDestroyed(),this._getViewportsAsArray()}getStackViewport(e){this._throwIfDestroyed();const t=this.getViewport(e);if(!t)throw new Error(`Viewport with Id ${e} does not exist`);if(!(t instanceof Na))throw new Error(`Viewport with Id ${e} is not a StackViewport.`);return t}getStackViewports(){return this._throwIfDestroyed(),this.getViewports().filter((e=>e instanceof Na))}getVolumeViewports(){return this._throwIfDestroyed(),this.getViewports().filter((e=>e instanceof Nr))}render(){const e=this.getViewports().map((e=>e.id));this._setViewportsToBeRenderedNextFrame(e)}renderViewports(e){this._setViewportsToBeRenderedNextFrame(e)}renderViewport(e){this._setViewportsToBeRenderedNextFrame([e])}destroy(){this.hasBeenDestroyed||(this.useCPURendering||(this._getViewportsAsArray().forEach((e=>{this.offscreenMultiRenderWindow.removeRenderer(e.id)})),this.offscreenMultiRenderWindow.delete(),delete this.offscreenMultiRenderWindow),this._reset(),re.delete(this.id),this.hasBeenDestroyed=!0)}fillCanvasWithBackgroundColor(e,t){const i=e.getContext("2d");let n;if(t){const e=t.map((e=>Math.floor(255*e)));n=`rgb(${e[0]}, ${e[1]}, ${e[2]})`}else n="black";i.fillStyle=n,i.fillRect(0,0,e.width,e.height)}_normalizeViewportInputEntry(e){const{type:t,defaultOptions:i}=e;let n=i;return n&&0!==Object.keys(n).length||(n={background:[0,0,0],orientation:null,displayArea:null},t===w.ORTHOGRAPHIC&&(n={...n,orientation:S.AXIAL})),{...e,defaultOptions:n}}_normalizeViewportInputEntries(e){const t=[];return e.forEach((e=>{t.push(this._normalizeViewportInputEntry(e))})),t}_resizeUsingCustomResizeHandler(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e.forEach((e=>{"function"==typeof e.resize&&e.resize()})),e.forEach((e=>{const i=e.getCamera();e.resetCamera(),t&&e.setCamera(i)})),i&&this.render()}_resizeVTKViewports(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e.forEach((e=>{Wa(e.element)}));const n=e.map((e=>e.canvas));if(n.length){const{offScreenCanvasWidth:t,offScreenCanvasHeight:i}=this._resizeOffScreenCanvas(n);this._resize(e,t,i)}e.forEach((e=>{const i=e.getCamera(),n=e.getRotation(),{flipHorizontal:r}=i;e.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,resetRotation:!1,suppressEvents:!0});const a=e.getDisplayArea();t&&(a?(r&&e.setCamera({flipHorizontal:r}),n&&e.setViewPresentation({rotation:n})):e.setCamera(i))})),i&&this.render()}enableVTKjsDrivenViewport(e){const t=this._getViewportsAsArray().filter((e=>!1===Ja(e.type))),i=t.map((e=>e.canvas)),n=Wa(e.element);i.push(n);const{offScreenCanvasWidth:r,offScreenCanvasHeight:a}=this._resizeOffScreenCanvas(i),s=this._resize(t,r,a),o={...e,canvas:n};this.addVtkjsDrivenViewport(o,{offScreenCanvasWidth:r,offScreenCanvasHeight:a,xOffset:s})}_removeViewport(e){this.getViewport(e)?this._viewports.delete(e):console.warn(`viewport ${e} does not exist`)}addVtkjsDrivenViewport(e,t){const{element:i,canvas:n,viewportId:r,type:a,defaultOptions:s}=e;i.tabIndex=-1;const{offScreenCanvasWidth:o,offScreenCanvasHeight:l,xOffset:c}=t,{sxStartDisplayCoords:d,syStartDisplayCoords:h,sxEndDisplayCoords:u,syEndDisplayCoords:g,sx:m,sy:f,sWidth:v,sHeight:I}=this._getViewportCoordsOnOffScreenCanvas(e,o,l,c);this.offscreenMultiRenderWindow.addRenderer({viewport:[d,h,u,g],id:r,background:s.background?s.background:[0,0,0]});const C={id:r,element:i,renderingEngineId:this.id,type:a,canvas:n,sx:m,sy:f,sWidth:v,sHeight:I,defaultOptions:s||{}};let E;if(a===w.STACK)E=new Na(C);else if(a===w.ORTHOGRAPHIC||a===w.PERSPECTIVE)E=new Gr(C);else{if(a!==w.VOLUME_3D)throw new Error(`Viewport Type ${a} is not supported`);E=new Fa(C)}this._viewports.set(r,E);const y={element:i,viewportId:r,renderingEngineId:this.id};E.suppressEvents||oe(ae,p.ELEMENT_ENABLED,y)}addCustomViewport(e){const{element:t,viewportId:i,type:n,defaultOptions:r}=e;t.tabIndex=-1;const a=Wa(t),{clientWidth:s,clientHeight:o}=a;a.width===s&&a.height===o||(a.width=s,a.height=o);const l={id:i,renderingEngineId:this.id,element:t,type:n,canvas:a,sx:0,sy:0,sWidth:s,sHeight:o,defaultOptions:r||{}},c=new(0,Xa[n])(l);this._viewports.set(i,c);const d={element:t,viewportId:i,renderingEngineId:this.id};oe(ae,p.ELEMENT_ENABLED,d)}setCustomViewports(e){e.forEach((e=>{this.addCustomViewport(e)}))}setVtkjsDrivenViewports(e){if(e.length){const t=e.map((e=>Wa(e.element)));t.forEach((e=>{const t=window.devicePixelRatio||1,i=e.getBoundingClientRect();e.width=i.width*t,e.height=i.height*t}));const{offScreenCanvasWidth:i,offScreenCanvasHeight:n}=this._resizeOffScreenCanvas(t);let r=0;for(let a=0;a<e.length;a++){const s=e[a],o=t[a],l={...s,canvas:o};this.addVtkjsDrivenViewport(l,{offScreenCanvasWidth:i,offScreenCanvasHeight:n,xOffset:r}),r+=o.width}}}_resizeOffScreenCanvas(e){const{offScreenCanvasContainer:t,offscreenMultiRenderWindow:i}=this,n=Math.max(...e.map((e=>e.height)));let r=0;return e.forEach((e=>{r+=e.width})),t.width=r,t.height=n,i.resize(),{offScreenCanvasWidth:r,offScreenCanvasHeight:n}}_resize(e,t,i){let n=0;for(let r=0;r<e.length;r++){const a=e[r],{sxStartDisplayCoords:s,syStartDisplayCoords:o,sxEndDisplayCoords:l,syEndDisplayCoords:c,sx:d,sy:h,sWidth:u,sHeight:g}=this._getViewportCoordsOnOffScreenCanvas(a,t,i,n);n+=a.canvas.width,a.sx=d,a.sy=h,a.sWidth=u,a.sHeight=g,this.offscreenMultiRenderWindow.getRenderer(a.id).setViewport([s,o,l,c])}return n}_getViewportCoordsOnOffScreenCanvas(e,t,i,n){const{canvas:r}=e,{width:a,height:s}=r,o=n/t,l=0+(i-s)/i;return{sxStartDisplayCoords:o,syStartDisplayCoords:l,sxEndDisplayCoords:o+a/t,syEndDisplayCoords:l+s/i,sx:n,sy:0,sWidth:a,sHeight:s}}_getViewportsAsArray(){return Array.from(this._viewports.values())}_setViewportsToBeRenderedNextFrame(e){e.forEach((e=>{this._needsRender.add(e)})),this._render()}_render(){this._needsRender.size>0&&!this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedViewports),this._animationFrameSet=!0)}performVtkDrawCall(){const{offscreenMultiRenderWindow:e}=this,t=e.getRenderWindow(),i=e.getRenderers();if(i.length){for(let e=0;e<i.length;e++){const{renderer:t,id:n}=i[e];this._needsRender.has(n)?t.setDraw(!0):t.setDraw(!1)}t.render();for(let e=0;e<i.length;e++)i[e].renderer.setDraw(!1)}}renderViewportUsingCustomOrVtkPipeline(e){let t;if(!(e.sWidth<2||e.sHeight<2)){if(!0===Ja(e.type))t=e.customRenderViewportToCanvas();else{if(this.useCPURendering)throw new Error("GPU not available, and using a viewport with no custom render pipeline.");const{offscreenMultiRenderWindow:i}=this,n=i.getOpenGLRenderWindow().get3DContext().canvas;t=this._renderViewportFromVtkCanvasToOnscreenCanvas(e,n)}return t}console.warn("Viewport is too small",e.sWidth,e.sHeight)}_renderViewportFromVtkCanvasToOnscreenCanvas(e,t){const{element:i,canvas:n,sx:r,sy:a,sWidth:s,sHeight:o,id:l,renderingEngineId:c,suppressEvents:d}=e,{width:h,height:u}=n;return n.getContext("2d").drawImage(t,r,a,s,o,0,0,h,u),{element:i,suppressEvents:d,viewportId:l,renderingEngineId:c,viewportStatus:e.viewportStatus}}_resetViewport(e){const t=this.id,{element:i,canvas:n,id:r}=e,a={element:i,viewportId:r,renderingEngineId:t};e.removeWidgets(),oe(ae,p.ELEMENT_DISABLED,a),i.removeAttribute("data-viewport-uid"),i.removeAttribute("data-rendering-engine-uid"),n.getContext("2d").clearRect(0,0,n.width,n.height)}_clearAnimationFrame(){window.cancelAnimationFrame(this._animationFrameHandle),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null}_reset(){this._getViewportsAsArray().forEach((e=>{this._resetViewport(e)})),this._clearAnimationFrame(),this._viewports=new Map}_throwIfDestroyed(){if(this.hasBeenDestroyed)throw new Error("this.destroy() has been manually called to free up memory, can not longer use this instance. Instead make a new one.")}_downloadOffScreenCanvas(){!function(e){const t=document.createElement("a");t.download="viewport.png",t.href=e,document.body.appendChild(t),t.click(),document.body.removeChild(t)}(this._debugRender())}_debugRender(){const{offscreenMultiRenderWindow:e}=this,t=e.getRenderWindow(),i=e.getRenderers();for(let e=0;e<i.length;e++)i[e].renderer.setDraw(!0);t.render();const n=e.getOpenGLRenderWindow().get3DContext().canvas,r=n.toDataURL();return this._getViewportsAsArray().forEach((e=>{const{sx:t,sy:i,sWidth:r,sHeight:a}=e,s=e.canvas,{width:o,height:l}=s;s.getContext("2d").drawImage(n,t,i,r,a,0,0,o,l)})),r}};class es{constructor(e){ie(this,"id",void 0),ie(this,"sizeInBytes",void 0),ie(this,"frameOfReferenceUID",void 0),ie(this,"color",[200,0,0]),ie(this,"points",void 0),ie(this,"polys",void 0),this.id=e.id,this.points=e.data.points,this.polys=e.data.polys,this.color=e.color??this.color,this.frameOfReferenceUID=e.frameOfReferenceUID,this.sizeInBytes=this._getSizeInBytes()}_getSizeInBytes(){return 4*this.points.length+4*this.polys.length}getColor(){return this.color}getPoints(){return this.points}getPolys(){return this.polys}setColor(e){this.color=e}setPoints(e){this.points=e}setPolys(e){this.polys=e}getSizeInBytes(){return this.sizeInBytes}}const ts=new Ci("imageRetrievalPool");ts.setMaxSimultaneousRequests(v.Interaction,200),ts.setMaxSimultaneousRequests(v.Thumbnail,200),ts.setMaxSimultaneousRequests(v.Prefetch,200),ts.grabDelay=0;const is=ts;function ns(e){if(!e)return;const{viewportUid:t,renderingEngineUid:i}=e.dataset;return rs(t,i)}function rs(e,t){if(!t||!e)return;const i=$t(t);if(!i||i.hasBeenDestroyed)return;const n=i.getViewport(e);if(!n)return;const r=n.getFrameOfReferenceUID();return{viewport:n,renderingEngine:i,viewportId:e,renderingEngineId:t,FrameOfReferenceUID:r}}function as(e){const t=Ht();for(let i=0;i<t.length;i++){const n=t[i];if(n.getViewport(e))return rs(e,n.id)}}function ss(){const e=[];return Ht().forEach((t=>{t.getViewports().forEach((t=>{let{element:i}=t;e.push(ns(i))}))})),e}const os=Symbol("DefaultSettings"),ls=Symbol("RuntimeSettings"),cs=Symbol("ObjectSettingsMap"),ds=Symbol("Dictionary");class hs{constructor(e){const t=Object.create(e instanceof hs&&ds in e?e[ds]:null);Object.seal(Object.defineProperty(this,ds,{value:t}))}set(e,t){return gs(this[ds],e,t,null)}get(e){return function(e,t){return e[t]}(this[ds],e)}unset(e){return function(e,t){if(t.endsWith(".")){let i=0;const n=t,r=n.slice(0,-1),a=0===r.length;for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(a||t.startsWith(n)||t===r)&&(delete e[t],++i);return i>0}return delete e[t]}(this[ds],e+"")}forEach(e){us(this[ds],e)}extend(){return new hs(this)}import(e){ms(e)&&Object.keys(e).forEach((t=>{gs(this[ds],t,e[t],null)}))}dump(){const e={};return us(this[ds],((t,i)=>{void 0!==i&&ps(e,t,i)})),e}static assert(e){return e instanceof hs?e:hs.getRuntimeSettings()}static getDefaultSettings(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=hs[os];if(t instanceof hs||(t=new hs,hs[os]=t),e){const i={};return t.forEach((n=>{if(n.startsWith(e)){const r=n.split(`${e}.`)[1];i[r]=t.get(n)}})),i}return t}static getRuntimeSettings(){let e=hs[ls];return e instanceof hs||(e=new hs(hs.getDefaultSettings()),hs[ls]=e),e}static getObjectSettings(e,t){let i=null;if(e instanceof hs)i=e;else if("object"==typeof e&&null!==e){let n=hs[cs];n instanceof WeakMap||(n=new WeakMap,hs[cs]=n),i=n.get(e),i instanceof hs||(i=new hs(hs.assert(hs.getObjectSettings(t))),n.set(e,i))}return i}static extendRuntimeSettings(){return hs.getRuntimeSettings().extend()}}function us(e,t){for(const i in e)t(i,e[i])}function gs(e,t,i,n){return!!function(e){let t,i,n;if("string"!=typeof e||(t=e.length-1)<0)return!1;for(n=-1;(i=e.indexOf(".",n+1))>=0;){if(i-n<2||i===t)return!1;n=i}return!0}(t)&&(ms(i)?function(e,t,i,n){let r;if(n.has(i))return gs(e,t,null,n);n.add(i),r=0;for(const a in i)Object.prototype.hasOwnProperty.call(i,a)&&(gs(e,0===a.length?t:`${t}.${a}`,i[a],n)||++r);return n.delete(i),0===r}(e,t,i,n instanceof WeakSet?n:new WeakSet):(e[t]=i,!0))}function ms(e){if("object"==typeof e&&null!==e){const t=Object.getPrototypeOf(e);if(t===Object.prototype||null===t)return!0}return!1}function ps(e,t,i){const n=t.indexOf(".");if(n>=0){const r=t.slice(0,n);let a=e[r];if("object"!=typeof a||null===a){const t=a;a={},void 0!==t&&(a[""]=t),e[r]=a}ps(a,t.slice(n+1,t.length),i)}else e[t]=i}hs.getDefaultSettings().set("useCursors",!0),K(914);const fs=class{constructor(e){ie(this,"id",void 0),ie(this,"sizeInBytes",void 0),ie(this,"points",void 0),ie(this,"color",void 0),ie(this,"type",void 0),ie(this,"segmentIndex",void 0);const{points:t,type:i}=e.data;this.id=e.id,this.points=t,this.type=i,this.color=e.color,this.segmentIndex=e.segmentIndex,this.sizeInBytes=this._getSizeInBytes()}_getSizeInBytes(){let e=0;return e+=3*this.points.length,e}getPoints(){return this.points}getFlatPointsArray(){return this.points.map((e=>[...e])).flat()}getColor(){return this.color}getType(){return this.type}};class vs{constructor(e){ie(this,"id",void 0),ie(this,"sizeInBytes",void 0),ie(this,"frameOfReferenceUID",void 0),ie(this,"color",[200,0,0]),ie(this,"segmentIndex",void 0),ie(this,"polyData",void 0),ie(this,"centroid",void 0),ie(this,"contours",void 0),this.id=e.id,this.contours=[],this.color=e.color??this.color,this.frameOfReferenceUID=e.frameOfReferenceUID,this.segmentIndex=e.segmentIndex,this._createEachContour(e.data),this.sizeInBytes=this._getSizeInBytes()}_createEachContour(e){e.forEach((e=>{const{points:t,type:i,color:n}=e,r=new fs({id:`${this.id}-segment-${this.segmentIndex}`,data:{points:t,type:i,segmentIndex:this.segmentIndex,color:n??this.color},segmentIndex:this.segmentIndex,color:n??this.color});this.contours.push(r)})),this._updateContourSetCentroid()}_updateContourSetCentroid(){const e=this.getTotalNumberOfPoints(),t=this.getFlatPointsArray(),i=t.reduce(((e,t)=>[e[0]+t[0],e[1]+t[1],e[2]+t[2]]),[0,0,0]),n=[i[0]/e,i[1]/e,i[2]/e],r=t.reduce(((e,t)=>this._getDistance(n,t)<this._getDistance(n,e)?t:e),t[0]);this.centroid=r}_getSizeInBytes(){return this.contours.reduce(((e,t)=>e+t.sizeInBytes),0)}getCentroid(){return this.centroid}getSegmentIndex(){return this.segmentIndex}getColor(){return this.color}getContours(){return this.contours}getSizeInBytes(){return this.sizeInBytes}getFlatPointsArray(){return this.contours.map((e=>e.getPoints())).flat()}getNumberOfContours(){return this.contours.length}getTotalNumberOfPoints(){return this.contours.reduce(((e,t)=>e+t.getPoints().length),0)}getNumberOfPointsArray(){return this.contours.reduce(((e,t,i)=>(e[i]=this.getNumberOfPointsInAContour(i),e)),[])}getPointsInContour(e){return this.contours[e].getPoints()}getNumberOfPointsInAContour(e){return this.getPointsInContour(e).length}_getDistance(e,t){return Math.sqrt((e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2)}}async function Is(e,t){let i=Ct.getGeometry(e);if(i)return i;if(t.type===D.CONTOUR)i=function(e,t){!function(e){if(!e||0===e.data.length)throw new Error("Invalid contour set data, see publicContourSetData type for more info");if(!e.id)throw new Error("Invalid contour set data, each contour set must have an id");if(!e.data||!Array.isArray(e.data))throw new Error("Invalid contour set data, each contour set must have an array of contours");e.data.forEach((e=>{if(!e.points||!Array.isArray(e.points))throw new Error("Invalid contour set data, each contour must have an array of points");e.points.forEach((e=>{if(!e||!Array.isArray(e)||3!==e.length)throw new Error("Invalid contour set data, each point must be an array of length 3")}))}))}(t);const i=new vs({id:t.id,data:t.data,color:t.color,frameOfReferenceUID:t.frameOfReferenceUID,segmentIndex:t.segmentIndex??1});return{id:e,type:D.CONTOUR,data:i,sizeInBytes:i.getSizeInBytes()}}(e,t.geometryData);else{if(t.type!==D.SURFACE)throw new Error("Unknown geometry type, Only CONTOUR is supported");i=function(e,t){!function(e){const{data:t}=e;if(!t.points||!t.polys)throw new Error("Invalid surface data")}(t);const i=new es({id:t.id,color:t.color,frameOfReferenceUID:t.frameOfReferenceUID,data:{points:t.data.points,polys:t.data.polys}});return{id:e,type:D.SURFACE,data:i,sizeInBytes:i.getSizeInBytes()}}(e,t.geometryData)}const n={promise:Promise.resolve(i)};return await Ct.putGeometryLoadObject(e,n),i}var ws=function(e){return e[e.None=0]="None",e[e.Capture=1]="Capture",e[e.Bubble=2]="Bubble",e}(ws||{});class Cs{constructor(e){ie(this,"_target",void 0),ie(this,"_eventListeners",new Map),ie(this,"_children",new Map),this._target=e}get isEmpty(){return 0===this._eventListeners.size&&0===this._children.size}addEventListener(e,t,i){const n=e.indexOf(".");if(-1!==n){const r=e.substring(0,n);let a=this._children.get(r);a||(a=new Cs(this._target),this._children.set(r,a)),e=e.substring(n+1),a.addEventListener(e,t,i)}else this._addEventListener(e,t,i)}removeEventListener(e,t,i){const n=e.indexOf(".");if(-1!==n){const r=e.substring(0,n),a=this._children.get(r);if(!a)return;e=e.substring(n+1),a.removeEventListener(e,t,i),a.isEmpty&&this._children.delete(r)}else this._removeEventListener(e,t,i)}reset(){Array.from(this._children.entries()).forEach((e=>{let[t,i]=e;if(i.reset(),!i.isEmpty)throw new Error("Child is not empty and cannot be removed");this._children.delete(t)})),this._unregisterAllEvents()}_addEventListener(e,t,i){let n=this._eventListeners.get(e);n||(n=new Map,this._eventListeners.set(e,n));const r=i.capture?ws.Capture:ws.Bubble,a=n.get(t)??ws.None;a&r?console.warn("A listener is already registered for this phase"):(n.set(t,a|r),this._target.addEventListener(e,t,i))}_removeEventListener(e,t,i){const n=i.capture?ws.Capture:ws.Bubble,r=this._eventListeners.get(e);r&&((t?[t]:Array.from(r.keys())).forEach((t=>{const a=r.get(t)??ws.None;if(!(a&n))return;this._target.removeEventListener(e,t,i);const s=a^n;s===ws.None?r.delete(t):r.set(t,s)})),r.size||this._eventListeners.delete(e))}_unregisterAllListeners(e,t){Array.from(t.entries()).forEach((t=>{let[i,n]=t;for(let t=ws.Capture;n;t<<=1){if(!(n&t))continue;const r=t===ws.Capture;this.removeEventListener(e,i,{capture:r}),n^=t}}))}_unregisterAllEvents(){Array.from(this._eventListeners.entries()).forEach((e=>{let[t,i]=e;this._unregisterAllListeners(t,i)}))}}class Es{constructor(){ie(this,"_targetsEventListeners",new Map)}addEventListener(e,t,i,n){let r=this._targetsEventListeners.get(e);r||(r=new Cs(e),this._targetsEventListeners.set(e,r)),r.addEventListener(t,i,n)}removeEventListener(e,t,i,n){const r=this._targetsEventListeners.get(e);r&&(r.removeEventListener(t,i,n),r.isEmpty&&this._targetsEventListeners.delete(e))}reset(){Array.from(this._targetsEventListeners.entries()).forEach((e=>{let[t,i]=e;i.reset(),this._targetsEventListeners.delete(t)}))}}function ys(e,t){const i=e.getSize();for(let n=0;n<i;n++){const i=[];e.getNodeValue(n,i),i[1]=i[1]*t,i[2]=i[2]*t,i[3]=i[3]*t,e.setNodeValue(n,i)}}const Rs=Symbol("LastRuntimeId"),Ps={},bs=4294967295,Ts="-";function As(e,t,i){return function(e,t,i){let n=e[t];n instanceof Array||(n=[0],Object.defineProperty(e,t,{value:n}));for(let e=!0,t=0;e&&t<n.length;++t){let r=0|n[t];r<i?(e=!1,r+=1):(r=0,t+1===n.length&&n.push(0)),n[t]=r}return n}(null!==e&&"object"==typeof e?e:Ps,Rs,("number"==typeof i&&i>0?i:bs)>>>0).join("string"==typeof t?t:Ts)}const Ss={},Os={add:(e,t)=>{const i=wt(e);Ss[i]=t},get:(e,t)=>{if("calibratedPixelSpacing"===e){const e=wt(t);return Ss[e]}}};function Ds(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e-5;return Math.abs(e[0]+t[0])<i&&Math.abs(e[1]+t[1])<i&&Math.abs(e[2]+t[2])<i}function xs(e,t){return!(e[0]<0||e[0]>=t[0]||e[1]<0||e[1]>=t[1]||e[2]<0||e[2]>=t[2])}const Ms=function(e,t){let i;i=t?[zt(t)]:Ht();const n=[];return i.forEach((t=>{const i=e.getActors(),r=t.getVolumeViewports();for(const e of r){const t=e.getActors();t.length===i.length&&(i.every((e=>{let{uid:i}=e;return t.find((e=>i===e.uid))}))&&n.push(e))}})),n},_s=function(e,t){const i=t?[zt(t)]:Ht(),n=[];return i.forEach((t=>{const i=t.getVolumeViewports().filter((t=>t.hasVolumeId(e)));n.push(...i)})),n},Vs=e=>e.preScale.scaled&&e.preScale.scalingParameters.suvbw;function ks(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"_thumbnails",r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{displayArea:{imageArea:[1,1]}};if(!(e&&e instanceof HTMLCanvasElement))throw new Error("canvas element is required");const a=!t.imageId,s=!a&&t,o=a&&t,l=`renderGPUViewport-${s.imageId||o.volumeId}`,c=document.createElement("div"),d=window.devicePixelRatio||1;r.displayArea||(r.displayArea={imageArea:[1,1]});const h=e.width,u=e.height;c.style.width=`${h/d+ja}px`,c.style.height=`${u/d+ja}px`,c.style.visibility="hidden",c.style.position="absolute",document.body.appendChild(c);const g=l.split(":").join("-");c.setAttribute("viewport-id-for-remove",g);const m=Wa(c),f=zt(n)||new Qa(n);let v=f.getViewport(l);if(!v){const e={viewportId:l,type:a?w.ORTHOGRAPHIC:w.STACK,element:c,defaultOptions:{...r,suppressEvents:!0}};f.enableElement(e),v=f.getViewport(l)}return new Promise((n=>{let h=!1,{viewReference:u}=r;const I=t=>{if(h)return;if(u){const e=u;return u=null,v.setViewReference(e),void v.render()}e.getContext("2d").drawImage(m,0,0,m.width,m.height,0,0,e.width,e.height);const i=v.canvasToWorld([0,0]),r=v.canvasToWorld([m.width/d,0]),a=v.canvasToWorld([0,m.height/d]);h=!0,c.removeEventListener(p.IMAGE_RENDERED,I),setTimeout((()=>{f.disableElement(l),document.querySelectorAll(`[viewport-id-for-remove="${g}"]`).forEach((e=>{e.remove()}))}),0),n({origin:i,bottomLeft:a,topRight:r,thicknessMm:1})};c.addEventListener(p.IMAGE_RENDERED,I),a?v.setVolumes([o],!1,!0):v.renderImageObject(t),v.resetCamera(),"PT"!==i||Vs(s)||v.setProperties({voiRange:{lower:s.minPixelValue,upper:s.maxPixelValue}}),v.render()}))}function Ls(e,t,i,n,r){if(t.volumeId)throw new Error("Unsupported volume rendering for CPU");const a=t,s={canvas:e,viewport:Ta(e,a,i),image:a,renderingTools:{}};return s.transform=ea(s),new Promise(((e,t)=>{wa(s,!0),e(null)}))}function Ns(e){const{canvas:t,imageId:i,viewReference:n,requestType:r=v.Thumbnail,priority:a=-5,renderingEngineId:s="_thumbnails",useCPURendering:o=!1,thumbnail:l=!1,imageAspect:c=!1,viewportOptions:d}=e,h=n?.volumeId,u=h&&!i,g=n&&d?{...d,viewReference:n}:d,m=o?Ls:ks;return new Promise(((e,n)=>{function d(i,r){const{modality:a}=At("generalSeriesModule",r)||{},d=!u&&i,h=u&&i;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",h&&o&&n(new Error("CPU rendering of volume not supported")),m(t,i,a,s,g).then(e)}function p(e,t){console.error(e,t),n(e)}const{useNorm16Texture:f}=Li().rendering,v={targetBuffer:{type:f?void 0:"Float32Array"},useRGBA:!!o,requestType:r};if(h){const e=Ct.getVolume(h);e||n(new Error(`Volume id ${h} not found in cache`)),d(e,e.imageIds[0])}else Pn.addRequest(function(e,t,i){return On(e,i).then((t=>{d.call(this,t,e)}),(t=>{p.call(this,t,e)}))}.bind(null,i,null,v),r,{imageId:i},a)}))}const Fs=function(e,t){const i=At("imagePlaneModule",e);if(!i)throw new Error(`No imagePlaneModule found for imageId: ${e}`);const{columnCosines:n,rowCosines:r,imagePositionPatient:a}=i;let{columnPixelSpacing:s,rowPixelSpacing:o}=i;s||=1,o||=1;const l=ft.vec3.create();ft.vec3.scaleAndAdd(l,a,n,-s/2),ft.vec3.scaleAndAdd(l,l,r,-o/2);const c=ft.vec3.create();return ft.vec3.sub(c,t,l),[ft.vec3.dot(c,r)/o,ft.vec3.dot(c,n)/s]};function Us(e,t){const i=At("imagePlaneModule",e);if(!i)throw new Error(`No imagePlaneModule found for imageId: ${e}`);const{columnCosines:n,rowCosines:r,imagePositionPatient:a}=i;let{columnPixelSpacing:s,rowPixelSpacing:o}=i;s||=1,o||=1;const l=ft.vec3.create();return ft.vec3.scaleAndAdd(l,a,r,o*(t[0]-.5)),ft.vec3.scaleAndAdd(l,l,n,s*(t[1]-.5)),Array.from(l)}function Gs(e,t){let i;i=t?[$t(t)]:Ht();const n=[];return i.forEach((t=>{t.getViewports().forEach((t=>{t.hasImageURI(e)&&n.push(t)}))})),n}function js(e,t){const i=function(e,t){const i=t.getImageIds(),n=t.getCurrentImageIdIndex();if(0===i.length)return null;const r=t=>{const i=function(e){const t=At("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:i,columnCosines:n,imagePositionPatient:r}=t,a=ft.vec3.set(ft.vec3.create(),...i),s=ft.vec3.set(ft.vec3.create(),...n);return{rowCosines:i,columnCosines:n,imagePositionPatient:r,planeNormal:ft.vec3.cross(ft.vec3.create(),a,s)}}(t);return i?Pr(yr(i.planeNormal,i.imagePositionPatient),e):null},a={distance:r(i[n])??1/0,index:n},s=i.slice(n+1);for(let e=0;e<s.length;e++){const t=r(s[e]);if(null!==t){if(!(t<=a.distance))break;a.distance=t,a.index=e+n+1}}const o=i.slice(0,n);for(let e=o.length-1;e>=0;e--){const t=r(o[e]);if(null!==t&&t!==a.distance){if(!(t<a.distance))break;a.distance=t,a.index=e}}return a.distance===1/0?null:a}(e,t);return i?i.index:null}function Ws(e){const{width:t,height:i}=e.getCanvas(),{sliceToIndexMatrix:n,indexToSliceMatrix:r}=e.getSliceViewInfo(),a=Fr(e,[0,0]),s=Fr(e,[t-1,0]),o=Fr(e,[0,i-1]),l=ft.vec3.sub(ft.vec3.create(),s,a),c=ft.vec3.sub(ft.vec3.create(),o,a),d=ft.vec3.cross(ft.vec3.create(),l,c);ft.vec3.normalize(l,l),ft.vec3.normalize(c,c),ft.vec3.normalize(d,d);const h=Math.max(Math.abs(l[0]),Math.abs(l[1]),Math.abs(l[2])),u=Math.max(Math.abs(c[0]),Math.abs(c[1]),Math.abs(c[2]));if(!ft.glMatrix.equals(1,h)||!ft.glMatrix.equals(1,u))throw new Error("Livewire is not available for rotate/oblique viewports");const{voxelManager:g}=e.getImageData(),m=e.getSliceViewInfo(),p=g.getSliceData(m);return{width:m.width,height:m.height,scalarData:p,sliceToIndexMatrix:n,indexToSliceMatrix:r}}const Bs={},qs={add:(e,t)=>{const[i,n]=e,r=`${i}_${n}`;Bs[r]||(Bs[r]={}),Bs[r]=t},get:(e,t,i)=>{if("spatialRegistrationModule"!==e)return;const n=`${t}_${i}`;if(Bs[n])return Bs[n];const r=`${i}_${t}`;return Bs[r]?ft.mat4.invert(ft.mat4.create(),Bs[r]):void 0}};Pt(qs.get.bind(qs));const zs=qs,Hs=function(e,t){const i=e.getSliceIndex(),n=t.getSliceIndex(),r=At("imagePlaneModule",i.toString()),a=At("imagePlaneModule",n.toString());if(!r||!a)return void console.log("Viewport spatial registration requires image plane module");const{imageOrientationPatient:s}=a;if(!r.imageOrientationPatient.every(((e,t)=>Math.abs(e-s[t])<.05)))return void console.log("Viewport spatial registration only supported for same orientation (hence translation only) for now",r?.imageOrientationPatient,a?.imageOrientationPatient);const o=r.imagePositionPatient,l=a.imagePositionPatient,c=ft.vec3.subtract(ft.vec3.create(),o,l),d=ft.mat4.fromTranslation(ft.mat4.create(),c);zs.add([e.id,t.id],d)};function $s(e){const{imageData:t,dimensions:i}=e.getImageData(),{canvas:n}=e,r=window.devicePixelRatio,a=[n.width/r,0],s=[n.width/r,n.height/r],o=[0,n.height/r],l=e.canvasToWorld([0,0]),c=e.canvasToWorld(a),d=e.canvasToWorld(s),h=e.canvasToWorld(o),u=t.worldToIndex(l),g=t.worldToIndex(c),m=t.worldToIndex(d),p=t.worldToIndex(h);return function(e){let{dimensions:t,imageData:i,topLeftImage:n,topRightImage:r,bottomRightImage:a,bottomLeftImage:s,topLeftWorld:o,topRightWorld:l,bottomRightWorld:c,bottomLeftWorld:d}=e;const h=Ks(n,t)?o:i.indexToWorld([0,0,0]),u=Ks(r,t)?l:i.indexToWorld([t[0]-1,0,0]),g=Ks(a,t)?c:i.indexToWorld([t[0]-1,t[1]-1,0]);return[h,u,Ks(s,t)?d:i.indexToWorld([0,t[1]-1,0]),g]}({dimensions:i,imageData:t,topLeftImage:u,topRightImage:g,bottomRightImage:m,bottomLeftImage:p,topLeftWorld:l,topRightWorld:c,bottomRightWorld:d,bottomLeftWorld:h})}function Ks(e,t){return e[0]>0||e[0]<t[0]-1||e[1]>0||e[1]<t[1]-1||e[2]>0||e[2]<t[2]-1}class Ys{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};ie(this,"kIndex",void 0),ie(this,"sources",void 0),ie(this,"data",void 0),ie(this,"_dimensions",3),ie(this,"_length",0),ie(this,"_byteSize",4),ie(this,"growSize",128),ie(this,"array",void 0);const{initialSize:t=1024,dimensions:i=3,growSize:n=128}=e,r=t*i;this.growSize=n,this.array=new ArrayBuffer(r*this._byteSize),this.data=new Float32Array(this.array),this._dimensions=i}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 i=this._dimensions*e;for(let e=0;e<this._dimensions;e++)t.push(this.data[e+i]);return t}grow(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.growSize;if(this.dimensionLength+e*this._dimensions<=this.data.length)return;const i=this.data.length+t,n=new ArrayBuffer(i*this._dimensions*this._byteSize),r=new Float32Array(n);r.set(this.data),this.data=r,this.array=n}reverse(){const e=Math.floor(this._length/2);for(let t=0;t<e;t++){const e=t*this._dimensions,i=(this._length-1-t)*this._dimensions;for(let t=0;t<this._dimensions;t++){const n=this.data[e+t];this.data[e+t]=this.data[i+t],this.data[i+t]=n}}}push(e){this.grow(1);const t=this.length*this._dimensions;for(let i=0;i<this._dimensions;i++)this.data[i+t]=e[i];this._length++}map(e){const t=[];for(let i=0;i<this._length;i++)t.push(e(this.getPoint(i),i));return t}get points(){return this.map((e=>e))}toXYZ(){const e={x:[],y:[]};this._dimensions>=3&&(e.z=[]);const{x:t,y:i,z:n}=e;return this.forEach((e=>{t.push(e[0]),i.push(e[1]),n&&n.push(e[2])})),e}static fromXYZ(e){let{x:t,y:i,z:n}=e;const r=Ys.create3(t.length);let a=0;for(let e=0;e<t.length;e++)r.data[a++]=t[e],r.data[a++]=i[e],r.data[a++]=n?n[e]:0;return r._length=t.length,r}subselect(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const i=new Ys({initialSize:e,dimensions:this._dimensions});for(let n=0;n<e;n++){const r=(t+Math.floor(this.length*n/e))%this.length;i.push(this.getPoint(r))}return i}static create3(){return new Ys({initialSize:arguments.length>0&&void 0!==arguments[0]?arguments[0]:128,dimensions:3})}static create2(){return new Ys({initialSize:arguments.length>0&&void 0!==arguments[0]?arguments[0]:128,dimensions:2})}}function Zs(e){const t=At("modalityLutModule",e)||{},i=At("generalSeriesModule",e)||{},{modality:n}=i,r={rescaleSlope:t.rescaleSlope||1,rescaleIntercept:t.rescaleIntercept??0,modality:n},a=At("scalingModule",e)||{};return{...r,..."PT"===n&&{suvbw:a.suvbw,suvbsa:a.suvbsa,suvlbm:a.suvlbm}}}const Xs=function(e){const t=ns(e);if(!t)return;const{viewport:i}=t;if(!(i instanceof Na))throw new Error(`An image can only be fetched for a stack viewport and not for a viewport of type: ${i.type}`);return i.getCornerstoneImage()};function Js(e,t){const{imagePositionPatient:i,imageOrientationPatient:n}=At("imagePlaneModule",e[0]);if(!t){const e=ft.vec3.fromValues(n[0],n[1],n[2]),i=ft.vec3.fromValues(n[3],n[4],n[5]);t=ft.vec3.create(),ft.vec3.cross(t,e,i)}const r=ft.vec3.create(),a="wadouri"===e[0].split(":")[0];let s,o;function l(e){const{imagePositionPatient:n}=At("imagePlaneModule",e),r=ft.vec3.create();return ft.vec3.sub(r,i,n),ft.vec3.dot(r,t)}if(ft.vec3.set(r,i[0],i[1],i[2]),a){const n=[e[0],e[Math.floor(e.length/2)]];s=e,l(n[0])-l(n[1])<0&&s.reverse();const r=At("imagePlaneModule",n[1]);if(!r)throw new Error("Incomplete metadata required for volume construction.");const a=ft.vec3.create();ft.vec3.sub(a,i,r.imagePositionPatient);const c=ft.vec3.dot(a,t);o=Math.abs(c)/Math.floor(e.length/2)}else{const t=e.map((e=>({distance:l(e),imageId:e})));t.sort(((e,t)=>t.distance-e.distance)),s=t.map((e=>e.imageId));const i=t.length;o=Math.abs(t[i-1].distance-t[0].distance)/(i-1)}const{imagePositionPatient:c,sliceThickness:d,spacingBetweenSlices:h}=At("imagePlaneModule",s[0]),{strictZSpacingForVolumeViewport:u}=Li().rendering;return 0!==o||u||(d&&h?(console.log("Could not calculate zSpacing. Using spacingBetweenSlices"),o=h):d?(console.log("Could not calculate zSpacing and no spacingBetweenSlices. Using sliceThickness"),o=d):(console.log("Could not calculate zSpacing. The VolumeViewport visualization is compromised. Setting zSpacing to 1 to render"),o=1)),{zSpacing:o,origin:c,sortedImageIds:s}}function Qs(e){const t=e[0],{pixelRepresentation:i,bitsAllocated:n,bitsStored:r,highBit:a,photometricInterpretation:s,samplesPerPixel:o}=At("imagePixelModule",t),l=[],c=At("voiLutModule",t);let d;if(c){const{windowWidth:e,windowCenter:t}=c;if(d=c?.voiLUTFunction,Array.isArray(e))for(let i=0;i<e.length;i++)l.push({windowWidth:e[i],windowCenter:t[i]});else l.push({windowWidth:e,windowCenter:t})}else l.push({windowWidth:void 0,windowCenter:void 0});const{modality:h,seriesInstanceUID:u}=At("generalSeriesModule",t),{imageOrientationPatient:g,pixelSpacing:m,frameOfReferenceUID:p,columns:f,rows:v}=At("imagePlaneModule",t);return{BitsAllocated:n,BitsStored:r,SamplesPerPixel:o,HighBit:a,PhotometricInterpretation:s,PixelRepresentation:i,Modality:h,ImageOrientationPatient:g,PixelSpacing:m,FrameOfReferenceUID:p,Columns:f,Rows:v,voiLut:l,VOILUTFunction:d,SeriesInstanceUID:u}}function eo(e){const t=e[0],{modality:i,seriesInstanceUID:n}=At("generalSeriesModule",t),{imageOrientationPatient:r,pixelSpacing:a,frameOfReferenceUID:s,columns:o,rows:l}=At("imagePlaneModule",t),c={modality:i,imageOrientationPatient:r,pixelSpacing:a,frameOfReferenceUID:s,columns:o,rows:l,seriesInstanceUID:n},d=e.every((e=>{const{modality:t,seriesInstanceUID:i}=At("generalSeriesModule",e),{imageOrientationPatient:n,pixelSpacing:r,columns:a,rows:s}=At("imagePlaneModule",e);return i===c.seriesInstanceUID&&t===c.modality&&a===c.columns&&s===c.rows&&qi(n,c.imageOrientationPatient)&&qi(r,c.pixelSpacing)}));return d}const to=new Set(["1.2.840.10008.1.2.4.100","1.2.840.10008.1.2.4.100.1","1.2.840.10008.1.2.4.101","1.2.840.10008.1.2.4.101.1","1.2.840.10008.1.2.4.102","1.2.840.10008.1.2.4.102.1","1.2.840.10008.1.2.4.103","1.2.840.10008.1.2.4.103.1","1.2.840.10008.1.2.4.104","1.2.840.10008.1.2.4.104.1","1.2.840.10008.1.2.4.105","1.2.840.10008.1.2.4.105.1","1.2.840.10008.1.2.4.106","1.2.840.10008.1.2.4.106.1","1.2.840.10008.1.2.4.107","1.2.840.10008.1.2.4.108"]);function io(e){return!!e&&(Array.isArray(e)?e:[e]).find((e=>to.has(e)))}const no=e=>Object.values(e).some((e=>"number"==typeof e&&!Number.isInteger(e)));function ro(e,t){const i=Qs(e),{ImageOrientationPatient:n,PixelSpacing:r,Columns:a,Rows:s}=i,o=ft.vec3.fromValues(n[0],n[1],n[2]),l=ft.vec3.fromValues(n[3],n[4],n[5]),c=ft.vec3.create();ft.vec3.cross(c,o,l);const{zSpacing:d,origin:h,sortedImageIds:u}=Js(e,c),g=e.length,m=[r[1],r[0],d],p=[a,s,g],f=[...o,...l,...c];return{dimensions:p,spacing:m,origin:h,dataType:ao(u,i),direction:f,metadata:i,imageIds:u,volumeId:t,voxelManager:null,numberOfComponents:"RGB"===i.PhotometricInterpretation?3:1}}function ao(e,t){const{BitsAllocated:i,PixelRepresentation:n,PhotometricInterpretation:r}=t,a=1===n,s=Zs(e[Math.floor(e.length/2)]),o=s.rescaleIntercept<0||s.rescaleSlope<0,l=no(s),c=Mi();switch(i){case 8:if(a)throw new Error("8 Bit signed images are not yet supported by this plugin.");return"Uint8Array";case 16:return c&&l?"Float32Array":a||o?"Int16Array":a||o?"Float32Array":"Uint16Array";case 24:return"Uint8Array";case 32:return"Float32Array";default:throw new Error(`Bits allocated of ${i} is not defined to generate scalarData for the volume.`)}}const so=async function(e,t,i){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];i.forEach((t=>{const i=e.getViewport(t);if(!i)throw new Error(`Viewport with Id ${t} does not exist`);if(!(i instanceof Nr))throw new Error("setVolumesForViewports only supports VolumeViewport and VolumeViewport3D")}));const a=i.map((async i=>{const a=e.getViewport(i);await a.setVolumes(t,n,r)}));await Promise.all(a)};async function oo(e){let{viewport:t,options:i}=e;const n=t.getRenderingEngine();let{volumeId:r}=i;1===r.split(":").length&&(r=`${Qn()}:${r}`);const{id:a,element:s}=t,o=i.viewportId||a,l=t.getImageIds(),c=t.getViewReference();n.enableElement({viewportId:o,type:w.ORTHOGRAPHIC,element:s,defaultOptions:{background:i.background,orientation:i.orientation}}),(await Hn(r,{imageIds:l})).load();const d=n.getViewport(o);await so(n,[{volumeId:r}],[o]);const h=()=>{d.setViewReference(c),d.render(),s.removeEventListener(p.VOLUME_VIEWPORT_NEW_VOLUME,h)};return s.addEventListener(p.VOLUME_VIEWPORT_NEW_VOLUME,h),d.render(),d}async function lo(e){let{viewport:t,options:i}=e;const n=t,{id:r,element:a}=n,s=t.getRenderingEngine(),{background:o}=i,l=i.viewportId||r,c=n.getDefaultActor(),{uid:d}=c,h=Ct.getVolume(d);if(!(h instanceof vn))throw new Error("Currently, you cannot decache a volume that is not an ImageVolume. So, unfortunately, volumes such as nifti (which are basic Volume, without imageIds) cannot be decached.");const u={viewportId:l,type:w.STACK,element:a,defaultOptions:{background:o}},g=n.getViewReference();s.enableElement(u);const m=s.getViewport(l);return await m.setStack(h.imageIds),m.setViewReference(g),m.render(),m}function co(e){return Math.round(e/X)*X}const ho=function e(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(Array.isArray(t))return t.map((t=>e(t,i))).join(", ");if(null==t||""===t)return"NaN";t=Number(t);const n=Math.abs(t);if(n<1e-4)return`${t}`;const r=n>=100?i-2:n>=10?i-1:n>=1?i:n>=.1?i+1:n>=.01?i+2:n>=.001?i+3:i+4;return t.toFixed(r)};function uo(e,t,i){const n=e.length===t*i*4,r=e.length===t*i*3;if(n||r){const r=new Float32Array(t*i);let a=0,s=0;const o=n?4:3;for(let n=0;n<t;n++)for(let t=0;t<i;t++){const t=e[a],i=e[a+1],n=e[a+2];r[s]=(t+i+n)/3,a+=o,s++}return r}return e}const go=function(e){if(e instanceof Gr){const t=e.getDefaultActor().uid;return Ct.getVolume(t).imageIds}if(e.getImageIds)return e.getImageIds()};function mo(e,t){const i=[...e];return t>=i.length?(po(i),i):(po(i),i.slice(0,t))}function po(e){for(let t=e.length-1;t>0;t--){const i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}function fo(e){const t=e.toString(16);return 1==t.length?"0"+t:t}function vo(e,t,i){return"#"+fo(e)+fo(t)+fo(i)}function Io(e){const t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}function wo(e,t){const i={};let n=[];const r=Object.keys(e);for(let a=0;a<r.length;a++){const s=new Set,o=e[r[a]];for(let e=0;e<o.length;e++){const n=t(o[e].imageId)||0;if(i[n]=i[n]||[],i[n].push({imageId:o[e].imageId}),s.add(n),s.size-1<e)return}if(0==a)n=Array.from(s);else if(!Po(n,s))return}return i}function Co(e,t){const i=At(t,e);try{return parseFloat(i)}catch{return}}function Eo(e){const t=At("20011003",e);try{const{InlineBinary:e}=t;if(e){const t=atob(e),i=new ArrayBuffer(t.length),n=new DataView(i);for(let e=0;e<t.length;e++)n.setUint8(e,t.charCodeAt(e));return new Float32Array(i)[0]}return parseFloat(t)}catch{return}}function yo(e){let t=At("0019100c",e)||At("0019100C",e);try{const{InlineBinary:e}=t;return e&&(t=atob(e)),parseFloat(t)}catch{return}}function Ro(e){let t=At("00431039",e);try{const{InlineBinary:e}=t;return e&&(t=atob(e).split("//")),parseFloat(t[0])%1e5}catch{return}}function Po(e,t){if(e.length!=t.size)return!1;for(let i=0;i<e.length;i++)if(!t.has(e[i]))return!1;return!0}function bo(e){const t=At("petImageModule",e);return t?t.frameReferenceTime:0}const To=function(e){const t=function(e){const t=e.map((e=>{const{imagePositionPatient:t}=At("imagePlaneModule",e)||{};return{imageId:e,imagePositionPatient:t}}));if(!t.every((e=>e.imagePositionPatient)))return null;const i=(a="imagePositionPatient",t.reduce(((e,t)=>((e[t[a]]=e[t[a]]||[]).push(t),e)),{})),n=Object.keys(i),r=i[n[0]].length;var a;return 1===r?null:n.every((e=>i[e].length===r))?i:null}(e);if(!t)return{imageIdGroups:[e],splittingTag:null};const i=["TemporalPositionIdentifier","DiffusionBValue","TriggerTime","EchoTime","EchoNumber","PhilipsPrivateBValue","SiemensPrivateBValue","GEPrivateBValue","PetFrameReferenceTime"],n=[e=>Co(e,i[0]),e=>Co(e,i[1]),e=>Co(e,i[2]),e=>Co(e,i[3]),e=>Co(e,i[4]),Eo,yo,Ro,bo];for(let e=0;e<n.length;e++){const r=wo(t,n[e]);if(r)return{imageIdGroups:Object.keys(r).map(Number.parseFloat).sort(((e,t)=>e-t)).map((e=>r[e].map((e=>e.imageId)))),splittingTag:i[e]}}return{imageIdGroups:[e],splittingTag:null}},Ao=function(e){const{imageIdGroups:t,splittingTag:i}=To(e);return{isDynamicVolume:t.length>1,timePoints:t,splittingTag:i}},So=e=>{const t=function(e){const t=Ht(),i=[];return t.forEach((t=>{const n=_s(e,t.id);n.length&&i.push({renderingEngine:t,viewportIds:n.map((e=>e.id))})})),i}(e);t?.length&&t.forEach((e=>{let{renderingEngine:t,viewportIds:i}=e;t.hasBeenDestroyed||t.renderViewports(i)}))};function Oo(e,t){const i=e.length,{rescaleSlope:n,rescaleIntercept:r,suvbw:a}=t;if("PT"===t.modality&&"number"==typeof a)for(let t=0;t<i;t++)e[t]=a*(e[t]*n+r);else for(let t=0;t<i;t++)e[t]=e[t]*n+r;return e}const Do=(e,t)=>function(e,t,i){if(!i)throw new Error("getVolume is required, use the utilities export instead ");if(e.modality)return e.modality;if(e.setVolumes){if(!(t=t??e.getDefaultActor().uid)||!i)return;return i(t).metadata.Modality}throw new Error("Invalid viewport type")}(e,t,Ct.getVolume),xo=v.Prefetch;class Mo extends In{constructor(e,t){super(e),ie(this,"framesLoaded",0),ie(this,"framesProcessed",0),ie(this,"framesUpdated",0),ie(this,"autoRenderOnLoad",!0),ie(this,"cachedFrames",[]),ie(this,"reRenderTarget",0),ie(this,"reRenderFraction",2),ie(this,"dataType",void 0),ie(this,"loadStatus",void 0),ie(this,"imagesLoader",this),ie(this,"cancelLoading",(()=>{const{loadStatus:e}=this;e&&e.loading&&(e.loading=!1,e.cancelled=!0,this.clearLoadCallbacks(),Pn.filterRequests((e=>{let{additionalDetails:t}=e;return t.volumeId!==this.volumeId})))})),ie(this,"load",(e=>{const{imageIds:t,loadStatus:i,numFrames:n}=this,{transferSyntaxUID:r}=At("transferSyntax",t[0])||{},a=At(Zr.IMAGE_RETRIEVE_CONFIGURATION,this.volumeId,r,"volume");if(this.imagesLoader=a?(a.create||La.createProgressive)(a):this,!0===i.loading)return;const{loaded:s}=this.loadStatus,o=t.length;s?e&&e({success:!0,framesLoaded:o,framesProcessed:o,numFrames:n,totalNumFrames:o}):(e&&this.loadStatus.callbacks.push(e),this._prefetchImageIds())})),this.loadStatus=t.loadStatus}invalidateVolume(e){const{vtkOpenGLTexture:t}=this,{numFrames:i}=this;for(let e=0;e<i;e++)t.setUpdatedFrame(e);this.modified(),e&&So(this.volumeId)}clearLoadCallbacks(){this.loadStatus.callbacks=[]}callLoadStatusCallback(e){const{framesUpdated:t,framesProcessed:i,totalNumFrames:n}=e,{volumeId:r,reRenderFraction:a,loadStatus:s,metadata:o}=this,{FrameOfReferenceUID:l}=o;if(this.autoRenderOnLoad&&(t>this.reRenderTarget||i===n)&&(this.reRenderTarget+=a,So(r)),i===n){s.callbacks.forEach((t=>t(e)));const t={FrameOfReferenceUID:l,volumeId:r};oe(ae,p.IMAGE_VOLUME_LOADING_COMPLETED,t)}}updateTextureAndTriggerEvents(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:j.FULL_RESOLUTION;const n=this.imageIdIndexToFrameIndex(e),{cachedFrames:r,numFrames:a,totalNumFrames:s}=this,{FrameOfReferenceUID:o}=this.metadata;if(r[n]>i)return;if(r[n]===j.FULL_RESOLUTION)return;const l=i===j.FULL_RESOLUTION;r[e]=i,this.framesUpdated++,l&&(this.framesLoaded++,this.framesProcessed++);const c={FrameOfReferenceUID:o,volumeId:this.volumeId,numberOfFrames:a,framesProcessed:this.framesProcessed};oe(ae,p.IMAGE_VOLUME_MODIFIED,c),l&&this.framesProcessed===this.totalNumFrames&&(this.loadStatus.loaded=!0,this.loadStatus.loading=!1),this.callLoadStatusCallback({success:!0,imageIdIndex:e,imageId:t,framesLoaded:this.framesLoaded,framesProcessed:this.framesProcessed,framesUpdated:this.framesUpdated,numFrames:a,totalNumFrames:s,complete:l,imageQualityStatus:i}),this.vtkOpenGLTexture.setUpdatedFrame(n),this.loadStatus.loaded&&(this.loadStatus.callbacks=[])}successCallback(e,t){const i=this.getImageIdIndex(e),{imageQualityStatus:n}=t;if(!this.loadStatus.cancelled)return this.updateTextureAndTriggerEvents(i,e,n);console.warn("volume load cancelled, returning for imageIdIndex: ",i)}errorCallback(e,t,i){if(!t)return;const{totalNumFrames:n,numFrames:r}=this,a=this.getImageIdIndex(e);this.framesProcessed++,this.framesProcessed===n&&(this.loadStatus.loaded=!0,this.loadStatus.loading=!1),this.callLoadStatusCallback({success:!1,imageId:e,imageIdIndex:a,error:i,framesLoaded:this.framesLoaded,framesProcessed:this.framesProcessed,framesUpdated:this.framesUpdated,numFrames:r,totalNumFrames:n}),this.loadStatus.loaded&&(this.loadStatus.callbacks=[]);const s={error:i,imageIdIndex:a,imageId:e};oe(ae,p.IMAGE_LOAD_ERROR,s)}getLoaderImageOptions(e){const{transferSyntaxUID:t}=At("transferSyntax",e)||{},i=At("imagePlaneModule",e)||{},{rows:n,columns:r}=i,a=this.getImageIdIndex(e),s=At("modalityLutModule",e)||{},o=At("generalSeriesModule",e)||{},l={rescaleSlope:s.rescaleSlope,rescaleIntercept:s.rescaleIntercept,modality:o.modality};if("PT"===l.modality){const t=At("scalingModule",e);t&&(this._addScalingToVolume(t),l.suvbw=t.suvbw)}const c=no(l),d=Mi();if(this.isPreScaled=!0,l&&void 0!==l.rescaleSlope&&void 0!==l.rescaleIntercept){const{rescaleSlope:e,rescaleIntercept:t}=l;this.isPreScaled="number"==typeof e&&"number"==typeof t}return!d&&c&&(this.isPreScaled=!1),{targetBuffer:{type:this.dataType,rows:n,columns:r},allowFloatRendering:d,preScale:{enabled:this.isPreScaled,scalingParameters:l},transferPixelData:!0,requestType:xo,transferSyntaxUID:t,additionalDetails:{imageId:e,imageIdIndex:a,volumeId:this.volumeId}}}callLoadImage(e,t,i){const{cachedFrames:n}=this;if(n[t]===j.FULL_RESOLUTION)return;const r=i=>{const{image:n}=i.detail;n.imageId===e&&(this.vtkOpenGLTexture.setUpdatedFrame(t),ae.removeEventListener(p.IMAGE_CACHE_IMAGE_ADDED,r))};return ae.addEventListener(p.IMAGE_CACHE_IMAGE_ADDED,r),xa.as(On(e,i)).forEach((t=>{this.successCallback(e,t)}),this.errorCallback.bind(this,t,e))}getImageIdsRequests(e,t){return this.totalNumFrames=this.imageIds.length,this.autoRenderOnLoad&&(this.reRenderFraction=.02*this.totalNumFrames,this.reRenderTarget=this.reRenderFraction),e.map((e=>{const i=this.getImageIdIndex(e),n=xo,r=t,a=this.getLoaderImageOptions(e);return{callLoadImage:this.callLoadImage.bind(this),imageId:e,imageIdIndex:i,options:a,priority:r,requestType:n,additionalDetails:{volumeId:this.volumeId}}}))}getImageLoadRequests(e){throw new Error("Abstract method")}getImageIdsToLoad(){throw new Error("Abstract method")}loadImages(){return this.loadStatus.loading=!0,this.getImageLoadRequests(5).reverse().forEach((e=>{if(!e)return;const{callLoadImage:t,imageId:i,imageIdIndex:n,options:r,priority:a,requestType:s,additionalDetails:o}=e;Pn.addRequest(t.bind(this,i,n,r),s,o,a)})),Promise.resolve(!0)}_prefetchImageIds(){this.loadStatus.loading=!0;const e=[...this.getImageIdsToLoad()];return e.reverse(),this.totalNumFrames=this.imageIds.length,this.autoRenderOnLoad&&(this.reRenderFraction=.02*this.totalNumFrames,this.reRenderTarget=this.reRenderFraction),this.imagesLoader.loadImages(e,this).catch((e=>{console.debug("progressive loading failed to complete",e)}))}_addScalingToVolume(e){if(this.scaling)return;const{suvbw:t,suvlbm:i,suvbsa:n}=e,r={};i&&(r.suvbwToSuvlbm=i/t),n&&(r.suvbwToSuvbsa=n/t),t&&(r.suvbw=t),this.scaling={PT:r}}}class _o extends Mo{constructor(e,t){e.imageIds||(e.imageIds=t.imageIds),super(e,t),ie(this,"getImageIdsToLoad",(()=>{const{imageIds:e}=this;return this.numFrames=e.length,e}))}getScalarData(){return this.voxelManager.getScalarData()}getImageLoadRequests(e){const{imageIds:t}=this;return this.getImageIdsRequests(t,e)}}function Vo(e,t){if(!t||!t.imageIds||!t.imageIds.length)throw new Error("ImageIds must be provided to create a streaming image volume");const i=async function(){if("wadouri"===t.imageIds[0].split(":")[0]){const[i,n]=[Math.floor(t.imageIds.length/2),t.imageIds.length-1],r=[0,i,n];await Promise.all(r.map((i=>new Promise(((n,r)=>{const a=t.imageIds[i];Pn.addRequest((async()=>{Sn(a).then((()=>{console.log(`Prefetched imageId: ${a}`),n(!0)})).catch((e=>{r(e)}))}),v.Prefetch,{volumeId:e},1)}))))).catch(console.error)}const i=ro(t.imageIds,e),{dimensions:n,spacing:r,origin:a,direction:s,metadata:o,imageIds:l,dataType:c,numberOfComponents:d}=i;return new _o({volumeId:e,metadata:o,dimensions:n,spacing:r,origin:a,direction:s,imageIds:l,dataType:c,numberOfComponents:d},{imageIds:l,loadStatus:{loaded:!1,loading:!1,cancelled:!1,cachedFrames:[],callbacks:[]}})}();return{promise:i,decache:()=>{i.then((e=>{e.destroy(),e=null}))},cancel:()=>{i.then((e=>{e.cancelLoading()}))}}}class ko extends Mo{constructor(e,t){super(e,t),ie(this,"_timePointIndex",0),ie(this,"_splittingTag",void 0),ie(this,"_imageIdGroups",void 0),ie(this,"numTimePoints",void 0),ie(this,"_getImageIdRequests",((e,t)=>this.getImageIdsRequests(e,t))),ie(this,"getImageLoadRequests",(e=>{const t=this.getImageIdsToLoad();return this._getImageIdRequests(t,e)}));const{imageIdGroups:i,splittingTag:n}=e;this._splittingTag=n,this._imageIdGroups=i,this.numTimePoints=this._imageIdGroups.length}_getImageIdsToLoad(){const e=this._imageIdGroups,t=this._timePointIndex,i=[...e[t]];let n=t-1,r=t+1;for(;n>=0||r<e.length;)n>=0&&i.push(...e[n--]),r<e.length&&i.push(...e[r++]);return i}getImageIdsToLoad(){return this._getImageIdsToLoad()}get timePointIndex(){return this._timePointIndex}set timePointIndex(e){this._timePointIndex!==e&&(this._timePointIndex=e,this.voxelManager.setTimePoint(e),this.invalidateVolume(!0),oe(ae,p.DYNAMIC_VOLUME_TIME_POINT_INDEX_CHANGED,{volumeId:this.volumeId,imageIdGroupIndex:e,numImageIdGroups:this.numTimePoints,splittingTag:this.splittingTag}))}scroll(e){const t=this._timePointIndex+e;t<0?this.timePointIndex=this.numTimePoints-1:t>=this.numTimePoints?this.timePointIndex=0:this.timePointIndex=t}getCurrentTimePointImageIds(){return this._imageIdGroups[this._timePointIndex]}flatImageIdIndexToTimePointIndex(e){return Math.floor(e/this._imageIdGroups[0].length)}flatImageIdIndexToImageIdIndex(e){return e%this._imageIdGroups[0].length}get splittingTag(){return this._splittingTag}}function Lo(e,t){if(!t||!t.imageIds||!t.imageIds.length)throw new Error("ImageIds must be provided to create a 4D streaming image volume");const{imageIds:i}=t,{splittingTag:n,imageIdGroups:r}=To(i),a=ro(r[0],e),{metadata:s,dimensions:o,spacing:l,direction:c,sizeInBytes:d,origin:h,numberOfComponents:u,dataType:g}=a,m=c.slice(6,9),p=r.map((e=>Js(e,m).sortedImageIds)),f=p.flat(),v=gn.createScalarDynamicVolumeVoxelManager({dimensions:o,imageIdGroups:p,timePoint:0,numberOfComponents:u});let I=new ko({volumeId:e,metadata:s,dimensions:o,spacing:l,origin:h,direction:c,sizeInBytes:d,imageIds:f,imageIdGroups:p,splittingTag:n,voxelManager:v,numberOfComponents:u,dataType:g},{imageIds:f,loadStatus:{loaded:!1,loading:!1,cancelled:!1,cachedFrames:[],callbacks:[]}});return{promise:Promise.resolve(I),decache:()=>{I.destroy(),I=null},cancel:()=>{I.cancelLoading()}}}const No=async function(e,t,i){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];for(const t of i){const i=e.getViewport(t);if(!i)throw new Error(`Viewport with Id ${t} does not exist`);if(!(i instanceof Nr))return void console.warn(`Viewport with Id ${t} is not a BaseVolumeViewport. Cannot add volume to this viewport.`)}const a=i.map((async i=>{const a=e.getViewport(i);await a.addVolumes(t,n,r)}));await Promise.all(a)},Fo=async function(e,t,i){for(const t of i){const i=e.getStackViewport(t);if(!i)throw new Error(`Viewport with Id ${t} does not exist`);if(!i.addImages)return void console.warn(`Viewport with Id ${t} does not have addImages. Cannot add image segmentation to this viewport.`)}const n=i.map((async i=>{e.getStackViewport(i).addImages(t)}));await Promise.all(n)}})(),Y})()));
|
|
2
2
|
//# sourceMappingURL=index.js.map
|