@fnndsc/argus 0.18.6 → 0.18.8

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.
@@ -0,0 +1 @@
1
+ import{v as H,B as U,t as E,E as M,g as L,a as W,b as S,u as G,s as $,V as q,c as Z,e as y,i as F,d as k,f as v,R as O,h as J,j as K,k as Y,l as Q,m as X,n as ee,o as te,p as ne,r as oe,q as se,w as ie,x as ae,y as re,z as de,A as ce,C as le,D as ge,F as me,G as he,I as ue,H as pe,J as N,S as xe,K as j,L as we,M as fe,N as Ie,O as Ve,P as Ce,Q as Pe,W as De,T as Re,U as Se,X as ve,Y as Ee,Z as Me,_ as _e,$ as Ge,a0 as ye,a1 as be,a2 as ze,a3 as Te,a4 as We,a5 as Fe,a6 as ke,a7 as Oe,a8 as Ae,a9 as Le,aa as Ne,ab as je}from"./Settings-CnbNxgKJ.js";import{ac as wt,ad as ft,ae as It,af as Vt,ag as Ct,ah as Pt,ai as Dt,aj as Rt,ak as St,al as vt,am as Et,an as Mt,ao as _t,ap as Gt,aq as yt,ar as bt,as as zt,at as Tt,au as Wt,av as Ft,aw as kt,ax as Ot,ay as At,az as Lt,aA as Nt,aB as jt,aC as Bt,aD as Ht,aE as Ut,aF as $t,aG as qt,aH as Zt,aI as Jt,aJ as Kt,aK as Yt,aL as Qt,aM as Xt,aN as en,aO as tn,aP as nn,aQ as on,aR as sn,aS as an,aT as rn,aU as dn,aV as cn,aW as ln,aX as gn,aY as mn,aZ as hn,aO as un,a_ as pn,a$ as xn,b0 as wn,b1 as fn,b2 as In,b3 as Vn,b4 as Cn,b5 as Pn,b6 as Dn}from"./Settings-CnbNxgKJ.js";import{a as Be,T as He}from"./index-B6fZNwHh.js";import{g as Sn,b as vn,c as En,d as Mn,s as _n,u as Gn,v as yn,e as bn,f as zn,h as Tn}from"./index-B6fZNwHh.js";import"./cornerstoneEngine-CZa0KD05.js";import"./Texture-D59F7zur.js";import{a as Fn}from"./addVolumesToViewports-Cwt4GLp7.js";import"./dcmjs.es-DfWkgqfk.js";import"./index-DTKSlz7P.js";import"./refusal-DOpm8I8L.js";import"./_commonjsHelpers-CE1G-McA.js";function dt(l,e,t){for(const n of t){const s=l.getViewport(n);if(!s)throw new Error(`Viewport with Id ${n} does not exist`);if(!s.addImages){console.warn(`Viewport with Id ${n} does not have addImages. Cannot add image segmentation to this viewport.`);return}}t.forEach(n=>{l.getViewport(n).addImages(e)})}class Ue{constructor(e,t=""){this.contexts=[],this.offScreenCanvasContainers=[],this.viewportToContext=new Map,this.viewportSizes=new Map,this.contextMaxSizes=new Map;for(let n=0;n<e;n++){const s=H.newInstance(),o=document.createElement("div");s.setContainer(o),Be(s,t,n),this.contexts.push(s),this.offScreenCanvasContainers.push(o)}}getContextByIndex(e){return e>=0&&e<this.contexts.length?{context:this.contexts[e],container:this.offScreenCanvasContainers[e]}:null}assignViewportToContext(e,t){this.viewportToContext.set(e,t)}getContextIndexForViewport(e){return this.viewportToContext.get(e)}getAllContexts(){return this.contexts}getContextCount(){return this.contexts.length}updateViewportSize(e,t,n){const s=this.viewportToContext.get(e);if(s===void 0)return!1;this.viewportSizes.set(e,{width:t,height:n});const o=this.contextMaxSizes.get(s),i=this.calculateMaxSizeForContext(s);return this.contextMaxSizes.set(s,i),!o||o.width!==i.width||o.height!==i.height}getMaxSizeForContext(e){return this.contextMaxSizes.get(e)}calculateMaxSizeForContext(e){let t=0,n=0;return this.viewportToContext.forEach((s,o)=>{if(s===e){const i=this.viewportSizes.get(o);i&&(t=Math.max(t,i.width),n=Math.max(n,i.height))}}),{width:t,height:n}}removeViewport(e){const t=this.viewportToContext.get(e);if(this.viewportToContext.delete(e),this.viewportSizes.delete(e),t!==void 0){const n=this.calculateMaxSizeForContext(t);this.contextMaxSizes.set(t,n)}}destroy(){this.contexts.forEach(e=>{e.delete()}),this.contexts=[],this.offScreenCanvasContainers=[],this.viewportToContext.clear(),this.viewportSizes.clear(),this.contextMaxSizes.clear()}}class A extends U{constructor(e){super(e),this._renderFlaggedViewports=()=>{this._throwIfDestroyed();const n=this._getViewportsAsArray().filter(o=>this._needsRender.has(o.id));if(n.length===0){this._animationFrameSet=!1,this._animationFrameHandle=null;return}const s=n.map(o=>{const i=this.renderViewportUsingCustomOrVtkPipeline(o);return o.setRendered(),this._needsRender.delete(o.id),i});this._animationFrameSet=!1,this._animationFrameHandle=null,s.forEach(o=>{o?.element&&E(o.element,M.IMAGE_RENDERED,o)})},this.useCPURendering||this.ensureContextPool()}ensureContextPool(){if(!this.contextPool){const{rendering:e}=L(),{webGlContextCount:t}=e;this.contextPool=new Ue(t,this.id)}return this.contextPool}enableVTKjsDrivenViewport(e){const s=this._getViewportsAsArray().filter(a=>W(a.type)===!1).map(a=>a.canvas),o=S(e.element);G(o),s.push(o);const i={...e,canvas:o};this.addVtkjsDrivenViewport(i)}addVtkjsDrivenViewport(e){const t=this.ensureContextPool(),{element:n,canvas:s,viewportId:o,type:i,defaultOptions:a}=e;n.tabIndex=-1,$(n);let r=0;if(i===q.STACK){const u=t.getAllContexts();r=this._viewports.size%u.length}t.assignViewportToContext(o,r),t.updateViewportSize(o,s.width,s.height);const d=t.getContextByIndex(r),{context:g,container:m}=d,p=t.getMaxSizeForContext(r);m.width=p.width,m.height=p.height,g.resize(),g.addRenderer({viewport:[0,0,1,1],id:o,background:a.background?a.background:[0,0,0]});const x={id:o,element:n,renderingEngineId:this.id,type:i,canvas:s,sx:0,sy:0,sWidth:s.width,sHeight:s.height,defaultOptions:a||{}},f=Z(e);if(!f)throw new Error(`Viewport Type ${i} is not supported`);const h=new f(x);h.requestedType=e.requestedType??i,this._viewports.set(o,h);const c={element:n,viewportId:o,renderingEngineId:this.id};h.suppressEvents||E(y,M.ELEMENT_ENABLED,c)}setVtkjsDrivenViewports(e){if(e.length){const t=e.map(n=>S(n.element));t.forEach(n=>G(n));for(let n=0;n<e.length;n++){const s=e[n],o=t[n],i={...s,canvas:o};this.addVtkjsDrivenViewport(i)}}}_getDisplayedSize(e){const t=window.devicePixelRatio||1,n=F(e)?e.element:S(e.element);return{displayedWidth:Math.round(n.clientWidth*t),displayedHeight:Math.round(n.clientHeight*t)}}_resizeVTKViewports(e,t=!0,n=!0){const s=[];for(const o of e){const i=S(o.element),{displayedWidth:a,displayedHeight:r}=this._getDisplayedSize(o);if(a===0||r===0)continue;const d=i.width,g=i.height;a===d&&r===g||s.push(o)}if(s.length!==0){for(const o of s){const{displayedWidth:i,displayedHeight:a}=this._getDisplayedSize(o),r=Math.max(v,i),d=Math.max(v,a);o.sWidth=r,o.sHeight=d}this._animationFrameSet||(e.length&&this._resize(e),e.forEach(o=>{if(o.resize?.(),F(o))return;const i=o.getCamera(),a=o.getRotation?.()??0,{flipHorizontal:r}=i,d=o;d.resetViewStateForResize?d.resetViewStateForResize():d.resetCameraForResize?.();const g=o.getDisplayArea();t&&(g?(r&&o.setCamera({flipHorizontal:r}),a&&o.setViewPresentation({rotation:a})):o.setCamera(i))}),n&&this.render())}}renderViewportUsingCustomOrVtkPipeline(e){if(k(e))return e.customRenderViewportToCanvas();if(!this.contextPool)throw new Error("GPU not available, and using a viewport with no custom render pipeline.");const t=this.contextPool.getContextIndexForViewport(e.id),n=this.contextPool.getContextByIndex(t),{context:s,container:o}=n;return this._renderViewportWithContext(e,s,o)}_renderViewportWithContext(e,t,n){if(e.canvas.clientWidth===0||e.canvas.clientHeight===0)return;if(e.sWidth<v||e.sHeight<v){console.warn("Viewport is too small",e.sWidth,e.sHeight);return}if(k(e))return e.customRenderViewportToCanvas();if(!this.contextPool)throw new Error("GPU not available, and using a viewport with no custom render pipeline.");t.getRenderer(e.id)||t.addRenderer({viewport:[0,0,1,1],id:e.id,background:e.defaultOptions?.background||[0,0,0]});const s=t.getRenderWindow(),o=s.getViews()[0],i=o.getRenderPasses(),a=this.getViewportRenderPasses(e.id);a&&o.setRenderPasses(a),this._resizeOffScreenCanvasForViewport(e,n,t);const r=t.getRenderer(e.id),d=this.contextPool.getContextIndexForViewport(e.id),g=this.contextPool.getMaxSizeForContext(d),m=e.sWidth,p=e.sHeight,x=Math.min(1,m/g.width),f=Math.min(1,p/g.height);r.setViewport(0,0,x,f);const h=t.getRenderers();h.forEach(({renderer:w,id:V})=>{const _=V.split("::")[0];w.setDraw(_===e.id)});const c=this.getWidgetRenderers();c.forEach((w,V)=>{V.setDraw(w===e.id)}),s.render(),h.forEach(({renderer:w})=>w.setDraw(!1)),c.forEach((w,V)=>{V.setDraw(!1)}),i&&o.setRenderPasses(i);const I=t.getOpenGLRenderWindow().get3DContext().canvas;return this._copyToOnscreenCanvas(e,I)}_renderViewportFromVtkCanvasToOnscreenCanvas(e,t){return this._copyToOnscreenCanvas(e,t)}_resizeOffScreenCanvasForViewport(e,t,n){const s=this.contextPool.getContextIndexForViewport(e.id);if(s===void 0||!this.contextPool.updateViewportSize(e.id,e.sWidth,e.sHeight))return;const i=this.contextPool.getMaxSizeForContext(s);t.width===i.width&&t.height===i.height||(t.width=i.width,t.height=i.height,n.resize())}_copyToOnscreenCanvas(e,t){const{element:n,canvas:s,id:o,renderingEngineId:i,suppressEvents:a}=e,r=e.sWidth,d=e.sHeight;G(s,{width:r,height:d});const g=s.getContext("2d"),m=this.contextPool.getContextIndexForViewport(o),x=this.contextPool.getMaxSizeForContext(m).height-d;return g.drawImage(t,0,x,r,d,0,0,r,d),{element:n,suppressEvents:a,viewportId:o,renderingEngineId:i,viewportStatus:e.viewportStatus}}_resize(e){const t=new Set;for(const n of e){n.sx=0,n.sy=0;const s=this.contextPool.getContextIndexForViewport(n.id);this.contextPool.updateViewportSize(n.id,n.sWidth,n.sHeight)&&t.add(s);const i=this.contextPool.getContextByIndex(s),{context:a}=i,r=a.getRenderer(n.id),d=this.contextPool.getMaxSizeForContext(s),g=Math.min(1,n.sWidth/d.width),m=Math.min(1,n.sHeight/d.height);r.setViewport(0,0,g,m)}t.forEach(n=>{const s=this.contextPool.getContextByIndex(n);if(s){const{context:o,container:i}=s,a=this.contextPool.getMaxSizeForContext(n);i.width=a.width,i.height=a.height,o.resize()}})}getWidgetRenderers(){const e=this._getViewportsAsArray(),t=new Map;return e.forEach(n=>{(n.getWidgets?n.getWidgets():[]).forEach(o=>{const i=o.getRenderer?o.getRenderer():null;i&&t.set(i,n.id)})}),t}getViewportRenderPasses(e){const t=this.getViewport(e);return t?.getRenderPasses?t.getRenderPasses():null}getRenderer(e){const t=this.contextPool?.getContextIndexForViewport(e);if(t===void 0||!this.contextPool)return;const n=this.contextPool.getContextByIndex(t);if(!n)return;const{context:s}=n;return s.getRenderer(e)}disableElement(e){const t=this.getViewport(e);if(t&&(super.disableElement(e),!W(t.type)&&this.contextPool)){const n=this.contextPool.getContextIndexForViewport(e);if(n!==void 0){const s=this.contextPool.getContextByIndex(n);if(s){const{context:o}=s;o.removeRenderer(e)}}this.contextPool.removeViewport(e)}}destroy(){super.destroy(),this.contextPool&&this.contextPool.destroy()}getOffscreenMultiRenderWindow(e){if(!this.contextPool)throw new Error("Offscreen multi render window is not available.");const t=this.contextPool.getContextIndexForViewport(e);if(t===void 0)throw new Error(`Offscreen multi render window is not available for viewport ${e}.`);const n=this.contextPool.getContextByIndex(t);if(!n)throw new Error(`Offscreen multi render window is not available for viewport ${e}.`);return n.context}}class ct{constructor(e){const n=L()?.rendering?.renderingEngineMode;switch(n){case O.Tiled:this._implementation=new He(e);break;case O.ContextPool:this._implementation=new A(e);break;default:console.warn(`RenderingEngine: Unknown rendering engine mode "${n}". Defaulting to Next rendering engine.`),this._implementation=new A(e);break}}get id(){return this._implementation.id}disableViewport(e){return this._implementation.disableElement(e)}enableElement(e){return this._implementation.enableElement(e)}disableElement(e){return this._implementation.disableElement(e)}setViewports(e){return this._implementation.setViewports(e)}resize(e=!0,t=!0){return this._implementation.resize(e,t)}getViewport(e){return this._implementation.getViewport(e)}getViewports(){return this._implementation.getViewports()}getRenderer(e){return this._implementation.getRenderer(e)}fillCanvasWithBackgroundColor(e,t){return this._implementation.fillCanvasWithBackgroundColor(e,t)}render(){return this._implementation.render()}renderViewports(e){return this._implementation.renderViewports(e)}renderViewport(e){return this._implementation.renderViewport(e)}destroy(){return this._implementation.destroy()}getOffscreenMultiRenderWindow(e){return this._implementation.getOffscreenMultiRenderWindow(e)}}const $e={adapter:K,getSnapshot:J},qe={adapter:Q,getSnapshot:Y},Ze={adapter:de,getSnapshot:re,getZoom:ae,getScale:ie,getPan:se,resolveICamera:oe,derivePresentation:ne,applyToRenderer:te,createImageSliceBasis:ee,createVolumeSliceBasis:X},Je={adapter:le,getSnapshot:ce},Ke={adapter:me,getSnapshot:ge},lt="5.8.2";class Ye extends he{constructor(e,t){super(e,t),this._dimensionGroupNumber=1,this._loadedDimensionGroups=new Set,this._getImageIdRequests=(o,i)=>this.getImageIdsRequests(o,i),this.getImageLoadRequests=o=>{const i=this.getImageIdsToLoad();return this._getImageIdRequests(i,o)};const{imageIdGroups:n,splittingTag:s}=e;this._splittingTag=s,this._imageIdGroups=n,this.numDimensionGroups=this._imageIdGroups.length}_getImageIdsToLoad(){const e=this._imageIdGroups,t=this._dimensionGroupNumber-1,n=[...e[t]];let s=t-1,o=t+1;for(;s>=0||o<e.length;)s>=0&&n.push(...e[s--]),o<e.length&&n.push(...e[o++]);return n}getImageIdsToLoad(){return this._getImageIdsToLoad()}get dimensionGroupNumber(){return this._dimensionGroupNumber}set dimensionGroupNumber(e){this._dimensionGroupNumber!==e&&(this._dimensionGroupNumber=e,this.voxelManager.setDimensionGroupNumber(e),this.invalidateVolume(!0),E(y,M.DYNAMIC_VOLUME_DIMENSION_GROUP_CHANGED,{volumeId:this.volumeId,dimensionGroupNumber:e,numDimensionGroups:this.numDimensionGroups,imageIdGroupIndex:e-1,numImageIdGroups:this.numDimensionGroups,splittingTag:this.splittingTag}))}scroll(e){const t=this._dimensionGroupNumber+e;t<1?this.dimensionGroupNumber=this.numDimensionGroups:t>this.numDimensionGroups?this.dimensionGroupNumber=1:this.dimensionGroupNumber=t}getCurrentDimensionGroupImageIds(){return this._imageIdGroups[this._dimensionGroupNumber-1]}flatImageIdIndexToDimensionGroupNumber(e){return Math.floor(e/this._imageIdGroups[0].length)+1}flatImageIdIndexToImageIdIndex(e){return e%this._imageIdGroups[0].length}get splittingTag(){return this._splittingTag}isDimensionGroupLoaded(e){return this._loadedDimensionGroups.has(e)}markDimensionGroupAsLoaded(e){this._loadedDimensionGroups.add(e),E(y,M.DYNAMIC_VOLUME_DIMENSION_GROUP_LOADED,{volumeId:this.volumeId,dimensionGroupNumber:e})}checkDimensionGroupCompletion(e){const t=this.flatImageIdIndexToDimensionGroupNumber(e);this._imageIdGroups[t-1].every(o=>{const i=this.getImageIdIndex(o);return this.cachedFrames[i]===ue.FULL_RESOLUTION})&&!this.isDimensionGroupLoaded(t)&&this.markDimensionGroupAsLoaded(t)}}function Qe(l,e,t){return e.reduce((n,s)=>s.apply(n,t),l)}const Xe={name:"InPlaneDecimationModifier",apply(l,e){const[t=1,n=t]=e.options.ijkDecimation??[],s=Math.max(1,Math.floor(t)),o=Math.max(1,Math.floor(n));if(s===1&&o===1)return l;const[i,a]=l.dimensions,r=Math.max(1,Math.floor(i/s)),d=Math.max(1,Math.floor(a/o)),g=[r,d,l.dimensions[2]],m=[l.spacing[0]*s,l.spacing[1]*o,l.spacing[2]],p={...l.metadata,Columns:r,Rows:d,PixelSpacing:[m[1],m[0]]};return{...l,dimensions:g,spacing:m,metadata:p}}};function gt(l,e){if(!e||!e.imageIds||!e.imageIds.length)throw new Error("ImageIds must be provided to create a streaming image volume ");const[t=1,n=t,s=1]=e.ijkDecimation??[],o=Math.max(1,Math.floor(t)),i=n>1?Math.max(1,Math.floor(n)):o,a=Math.max(1,Math.floor(s)),r=o>1||i>1,d={ijkDecimation:[o,i,a]},g=[Xe];function m(c,u){return u===1?c:`${c}#decimation=${u}`}const p=Math.floor(e.imageIds.length/a),x=a>1&&e.imageIds.length<=p+1;if(a>1&&!x){const c=pe(e.imageIds,a),u=Array.isArray(c)&&c.length&&typeof c[0]=="number"?c.map(P=>e.imageIds[P]):c;e.imageIds=u}o>1&&(e.imageIds=e.imageIds.map(c=>m(c,o)));async function f(){const c=N(e.imageIds,l),u={volumeId:l,imageIds:e.imageIds,options:d},P=Qe(c,g,u),{dimensions:I,spacing:R,origin:w,direction:V,metadata:_,imageIds:b,dataType:B,numberOfComponents:z}=P,C=new xe({volumeId:l,metadata:_,dimensions:I,spacing:R,origin:w,direction:V,imageIds:b,dataType:B,numberOfComponents:z},{imageIds:b,loadStatus:{loaded:!1,loading:!1,cancelled:!1,cachedFrames:[],callbacks:[]}});if(r){const D=C.imageData;D&&(D.setDimensions(C.dimensions),D.setSpacing(C.spacing),D.modified());const T=j.createImageVolumeVoxelManager({dimensions:C.dimensions,imageIds:C.imageIds,numberOfComponents:z});C.voxelManager=T,D&&D.set({voxelManager:T})}return C}const h=f();return{promise:h,decache:()=>{h.then(c=>{c.destroy(),c=null})},cancel:()=>{h.then(c=>{c.cancelLoading()})}}}function mt(l,e){if(!e||!e.imageIds||!e.imageIds.length)throw new Error("ImageIds must be provided to create a 4D streaming image volume");const{imageIds:t}=e,{splittingTag:n,imageIdGroups:s}=we(t),o=Math.floor(s.length/2),i=N(s[o],l),{metadata:a,dimensions:r,spacing:d,direction:g,sizeInBytes:m,origin:p,numberOfComponents:x,dataType:f}=i,h=g.slice(6,9),c=s.map(R=>fe(R,h).sortedImageIds),u=c.flat(),P=j.createScalarDynamicVolumeVoxelManager({dimensions:r,imageIdGroups:c,dimensionGroupNumber:1,numberOfComponents:x});let I=new Ye({volumeId:l,metadata:a,dimensions:r,spacing:d,origin:p,direction:g,sizeInBytes:m,imageIds:u,imageIdGroups:c,splittingTag:n,voxelManager:P,numberOfComponents:x,dataType:f},{imageIds:u,loadStatus:{loaded:!1,loading:!1,cancelled:!1,cachedFrames:[],callbacks:[]}});return{promise:Promise.resolve(I),decache:()=>{I.destroy(),I=null},cancel:()=>{I.cancelLoading()}}}const ht={GenericViewport:je,DefaultRenderPathResolver:Ne,defaultRenderPathResolver:Le,ECGGenericViewport:Ae,createDefaultECGRenderPaths:Oe,createECGRenderPathResolver:ke,DefaultECGDataProvider:Fe,ecgProjection:$e,VideoGenericViewport:We,createDefaultVideoRenderPaths:Te,createVideoRenderPathResolver:ze,DefaultVideoDataProvider:be,videoProjection:qe,PlanarViewport:ye,createDefaultPlanarRenderPaths:Ge,createPlanarRenderPathResolver:_e,DefaultPlanarDataProvider:Me,planarProjection:Ze,VolumeViewport3D:Ee,createDefaultVolume3DRenderPaths:ve,createVolume3DRenderPathResolver:Se,DefaultVolume3DDataProvider:Re,volume3DProjection:Je,WSIGenericViewport:De,createDefaultWSIRenderPaths:Pe,createWSIRenderPathResolver:Ce,DefaultWSIDataProvider:Ve,wsiProjection:Ke},ut=Ie;export{wt as ActorRenderMode,U as BaseRenderingEngine,ft as BaseVolumeViewport,It as CONSTANTS,A as ContextPoolRenderingEngine,Fe as DefaultECGDataProvider,Me as DefaultPlanarDataProvider,Ne as DefaultRenderPathResolver,be as DefaultVideoDataProvider,Re as DefaultVolume3DDataProvider,Ve as DefaultWSIDataProvider,Ae as ECGGenericViewport,Vt as ECGViewport,Ct as EPSILON,M as EVENTS,Pt as Enums,je as GenericViewport,Ee as GenericVolumeViewport3D,Dt as ImageVolume,ut as LegacyVolumeViewport3D,ye as PlanarViewport,Rt as ProgressiveRetrieveImages,St as RenderBackends,ct as RenderingEngine,vt as Settings,Et as StackViewport,Ye as StreamingDynamicImageVolume,xe as StreamingImageVolume,Mt as Surface,He as TiledRenderingEngine,We as VideoGenericViewport,_t as VideoViewport,Gt as Viewport,yt as ViewportProjectionService,bt as VolumeViewport,Ie as VolumeViewport3D,De as WSIGenericViewport,zt as WSIViewport,dt as addImageSlicesToViewports,Fn as addVolumesToViewports,Tt as cache,Wt as canRenderFloatTextures,Ft as convertColorArrayToRgbString,kt as convertMapperToNotSharedMapper,Ot as cornerstoneMeshLoader,mt as cornerstoneStreamingDynamicImageVolumeLoader,At as cornerstoneStreamingImageVolumeLoader,Lt as createCanvas,Oe as createDefaultECGRenderPaths,Ge as createDefaultPlanarRenderPaths,Te as createDefaultVideoRenderPaths,ve as createDefaultVolume3DRenderPaths,Pe as createDefaultWSIRenderPaths,ke as createECGRenderPathResolver,_e as createPlanarRenderPathResolver,ze as createVideoRenderPathResolver,Nt as createViewportElement,Se as createVolume3DRenderPathResolver,jt as createVolumeActor,Bt as createVolumeMapper,Ce as createWSIRenderPathResolver,gt as decimatedVolumeLoader,Le as defaultRenderPathResolver,Ht as detectRenderingCapabilities,$e as ecgProjection,y as eventTarget,Ut as geometryLoader,L as getConfiguration,$t as getEffectiveRenderBackend,Sn as getEnabledElement,vn as getEnabledElementByIds,En as getEnabledElementByViewportId,Mn as getEnabledElements,S as getOrCreateCanvas,qt as getProjectionScaleMatrix,Zt as getRenderBackend,Jt as getRenderingCapabilities,Kt as getRenderingEngine,Yt as getRenderingEngines,Qt as getShouldUseCPURendering,Xt as getUseGenericViewport,en as getWebWorkerManager,tn as imageLoadPoolManager,nn as imageLoader,on as imageRetrievalPoolManager,sn as init,an as isCornerstoneInitialized,rn as isRegisteredRenderBackend,dn as isRegisteredViewportType,cn as metaData,ln as peerImport,Ze as planarProjection,gn as registerImageLoader,mn as registerRenderBackend,hn as registerViewportType,ht as renderingEngineExportsV2,un as requestPoolManager,pn as resetInitialization,xn as resetUseCPURendering,wn as setCanvasCreator,fn as setConfiguration,In as setPreferSizeOverAccuracy,Vn as setRenderBackend,Cn as setUseCPURendering,_n as setVolumesForViewports,E as triggerEvent,G as updateCanvasSizeAndAspectRatio,Gn as utilities,lt as version,qe as videoProjection,yn as viewportHasCanvasWorldTransform,bn as viewportHasFrameOfReferenceUID,zn as viewportHasPan,Tn as viewportHasZoom,Pn as viewportProjection,Je as volume3DProjection,Dn as volumeLoader,Ke as wsiProjection};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-Df2VfdSL.js","./_commonjsHelpers-CE1G-McA.js","./index-DTKSlz7P.js","./index-BUMxVPW8.css"])))=>i.map(i=>d[i]);
2
+ import{_ as u,b as a,I as c}from"./index-DTKSlz7P.js";import{r as p}from"./refusal-DOpm8I8L.js";const m={gray:"gray",hot:"hot",jet:"jet",cool:"cool"},d={wl:"contrast",pan:"pan",length:"measurement",angle:"angle"};class g{name="niivue";host;path;nv=null;module=null;layout="mpr";tool="wl";colormap="gray";slice=0;slices=0;refused=0;disposed=!1;constructor(s,t){this.host=s,this.path=t}async open(s){const t=document.createElement("canvas");t.className="image-canvas",s.appendChild(t),this.host.readout_set("LOADING"),this.host.progress_set({label:"READING VOLUME",done:0,total:0});const e=performance.now();if(this.module=await u(()=>import("./index-Df2VfdSL.js"),__vite__mapDeps([0,1,2,3]),import.meta.url),this.disposed)return;const i=new this.module.Niivue({isResizeCanvas:!0,logLevel:"error",dragAndDropEnabled:!1,crosshairWidth:.4,crosshairWidthUnit:"percent"});i.onLocationChange=o=>{const r=o,l=r.vox?.[2];l!==void 0&&(this.slice=l+1),this.host.readout_set(`${this.slices>0?`SLICE ${this.slice} OF ${this.slices} · `:""}${r.string??""}`)},await i.attachToCanvas(t);const n=this.path.split("/").pop()??"volume.nii.gz";try{await i.loadVolumes([{url:a(this.host.source.url_of(this.path),location.href),name:n}])}catch(o){this.refused=1,this.host.progress_set(null),this.host.readout_set("REFUSED 1 OF 1"),this.host.note(`image: ${this.path}: ${o instanceof Error?o.message:String(o)}`);const r=await p(a(this.host.source.url_of(this.path),location.href));this.host.readout_set(`REFUSED 1 OF 1 · ${r}`),this.host.note(`image: ${this.path}: ${r.toLowerCase()}`);return}if(this.host.progress_set(null),this.disposed)return;this.nv=i;const h=i.volumes[0]?.dims;this.slices=h?.[3]??0,i.setSliceType(i.sliceTypeMultiplanar),this.layout="mpr",this.host.readout_set(`${this.slices} SLICES`),this.host.note(`image: ${n} drawn in ${Math.round(performance.now()-e)} ms`),this.host.regard(this.path)}async layout_set(s){return s==="slab"||this.nv===null?!1:(this.nv.setSliceType(s==="single"?this.nv.sliceTypeAxial:s==="mpr"?this.nv.sliceTypeMultiplanar:this.nv.sliceTypeRender),this.layout=s,this.host.readout_set(`${this.slices} SLICES`),!0)}slice_set(s){if(this.nv===null||this.slices===0)return!1;const t=Math.max(1,Math.min(s,this.slices)),e=this.slice>0?this.slice:Math.ceil(this.slices/2);return this.nv.moveCrosshairInVox(0,0,t-e),this.slice=t,!0}wl_set(s,t){const e=this.nv?.volumes[0];return this.nv===null||e===void 0?!1:(e.cal_min=s,e.cal_max=t,this.nv.updateGLVolume(),!0)}colormap_set(s){const t=this.nv?.volumes[0];return this.nv===null||t?.id===void 0?!1:(this.colormap=s,this.nv.setColormap(t.id,m[s]),!0)}toolsOffered_get(){return c}ghost_set(s){return!1}tool_set(s){const t=d[s];return this.nv===null||t===void 0?!1:(this.nv.setDragMode(t),this.tool=s,!0)}annotations_export(){return Promise.resolve(null)}annotations_import(){return Promise.resolve(0)}async slices_fill(){return this.nv!==null}state_get(){return{engine:"niivue",layout:this.layout,slice:this.slice,slices:this.slices,tool:this.tool,primaryTool:this.tool,refused:this.refused,annotations:0,filled:this.nv!==null,colormap:this.colormap}}dispose(){this.disposed=!0,this.nv=null}}export{g as NiivueEngine};
@@ -0,0 +1,2 @@
1
+ async function n(r){const s=r.replace(/^wadouri:/,"").replace(/&frame=\d+$/,"");try{const t=await fetch(s,{cache:"no-store"});if(t.ok)return"COULD NOT BE DECODED";const a=(await t.text()).split(`
2
+ `)[0]?.trim()??"",e=(a===""?"REFUSED":a).toUpperCase();return e.includes(`(${t.status})`)?e:`${e} (${t.status})`}catch{return"COULD NOT BE READ"}}export{n as r};
@@ -1,4 +1,4 @@
1
- import{m as v,as as _e,R as ft,K as Ge,L as Le,W as ke,N as We,k as de,E as X,t as vt,i as Me,x as ce,F as ht,Z as St,h as dt,D as Tt,al as wt,c as yt,at as Ct,d as Ve,au as xt,y as ue,ak as le,av as ze,j as pe}from"./cornerstoneEngine-Dd1A3l-l.js";import{ae as Ne,am as De,an as re,K as B,k as Z,al as $,D as se,U as $e,X as Be,B as Q,J as Et,E as Rt,ak as _t,$ as He,a2 as Mt,Z as Vt,b as Dt,_ as Ke,ao as Bt,ap as be,aq as mt,ar as Te,as as Ot,z as Ut,at as Ft,au as Pt,av as ae,ad as Gt,R as Lt,aw as Y,ah as kt,ai as Wt,C as zt,P as Nt,I as $t,a as Ht}from"./Texture-PfrmOwfm.js";import"./index-CUyQvuO9.js";import"./_commonjsHelpers-CE1G-McA.js";function Kt(t){return t}function ye(t){if(t===null||t==="null")return null;if(t==="true")return!0;if(t==="false")return!1;if(!(t===void 0||t==="undefined"))return t[0]==="["&&t[t.length-1]==="]"?t.substring(1,t.length-1).split(",").map(e=>ye(e.trim())):t===""||Number.isNaN(Number(t))?t:Number(t)}function bt(t=!0,e=window.location.search){const r={},s=t?ye:Kt;return new URLSearchParams(e).forEach((n,a)=>{a&&(r[a]=n?s(n):!0)}),r}var It={toNativeType:ye,extractURLParameters:bt},jt={IS_START:0,IS_NONE:0,IS_ROTATE:1,IS_PAN:2,IS_SPIN:3,IS_DOLLY:4,IS_CAMERA_POSE:11,IS_WINDOW_LEVEL:1024,IS_SLICE:1025},Ce={States:jt},{vtkErrorMacro:Qt,VOID:Yt}=v;function Xt(t,e,r,s){return t.getRenderWindow().getViews()[0].worldToDisplay(e,r,s,t)}function Zt(t,e,r,s){return t.getRenderWindow().getViews()[0].displayToWorld(e,r,s,t)}var Jt={computeWorldToDisplay:Xt,computeDisplayToWorld:Zt};function qt(t,e){e.classHierarchy.push("vtkInteractorObserver");const r={...t};function s(){for(;e.subscribedEvents.length;)e.subscribedEvents.pop().unsubscribe()}function n(){Ne.handledEvents.forEach(a=>{t[`handle${a}`]&&e.subscribedEvents.push(e._interactor[`on${a}`](o=>e.processEvents?t[`handle${a}`](o):Yt,e.priority))})}t.setInteractor=a=>{a!==e._interactor&&(s(),e._interactor=a,a&&e.enabled&&n(),t.modified())},t.setEnabled=a=>{a!==e.enabled&&(s(),a&&(e._interactor?n():Qt(`
1
+ import{m as v,as as _e,R as ft,K as Ge,L as Le,W as ke,N as We,k as de,E as X,t as vt,i as Me,x as ce,F as ht,Z as St,h as dt,D as Tt,al as wt,c as yt,at as Ct,d as Ve,au as xt,y as ue,ak as le,av as ze,j as pe}from"./cornerstoneEngine-CZa0KD05.js";import{ae as Ne,am as De,an as re,K as B,k as Z,al as $,D as se,U as $e,X as Be,B as Q,J as Et,E as Rt,ak as _t,$ as He,a2 as Mt,Z as Vt,b as Dt,_ as Ke,ao as Bt,ap as be,aq as mt,ar as Te,as as Ot,z as Ut,at as Ft,au as Pt,av as ae,ad as Gt,R as Lt,aw as Y,ah as kt,ai as Wt,C as zt,P as Nt,I as $t,a as Ht}from"./Texture-D59F7zur.js";import"./index-DTKSlz7P.js";import"./refusal-DOpm8I8L.js";import"./_commonjsHelpers-CE1G-McA.js";function Kt(t){return t}function ye(t){if(t===null||t==="null")return null;if(t==="true")return!0;if(t==="false")return!1;if(!(t===void 0||t==="undefined"))return t[0]==="["&&t[t.length-1]==="]"?t.substring(1,t.length-1).split(",").map(e=>ye(e.trim())):t===""||Number.isNaN(Number(t))?t:Number(t)}function bt(t=!0,e=window.location.search){const r={},s=t?ye:Kt;return new URLSearchParams(e).forEach((n,a)=>{a&&(r[a]=n?s(n):!0)}),r}var It={toNativeType:ye,extractURLParameters:bt},jt={IS_START:0,IS_NONE:0,IS_ROTATE:1,IS_PAN:2,IS_SPIN:3,IS_DOLLY:4,IS_CAMERA_POSE:11,IS_WINDOW_LEVEL:1024,IS_SLICE:1025},Ce={States:jt},{vtkErrorMacro:Qt,VOID:Yt}=v;function Xt(t,e,r,s){return t.getRenderWindow().getViews()[0].worldToDisplay(e,r,s,t)}function Zt(t,e,r,s){return t.getRenderWindow().getViews()[0].displayToWorld(e,r,s,t)}var Jt={computeWorldToDisplay:Xt,computeDisplayToWorld:Zt};function qt(t,e){e.classHierarchy.push("vtkInteractorObserver");const r={...t};function s(){for(;e.subscribedEvents.length;)e.subscribedEvents.pop().unsubscribe()}function n(){Ne.handledEvents.forEach(a=>{t[`handle${a}`]&&e.subscribedEvents.push(e._interactor[`on${a}`](o=>e.processEvents?t[`handle${a}`](o):Yt,e.priority))})}t.setInteractor=a=>{a!==e._interactor&&(s(),e._interactor=a,a&&e.enabled&&n(),t.modified())},t.setEnabled=a=>{a!==e.enabled&&(s(),a&&(e._interactor?n():Qt(`
2
2
  The interactor must be set before subscribing to events
3
3
  `)),e.enabled=a,t.modified())},t.computeDisplayToWorld=(a,o,i,u)=>a?e._interactor.getView().displayToWorld(o,i,u,a):null,t.computeWorldToDisplay=(a,o,i,u)=>a?e._interactor.getView().worldToDisplay(o,i,u,a):null,t.setPriority=a=>{r.setPriority(a)&&e._interactor&&(s(),n())}}var At={enabled:!0,priority:0,processEvents:!0,subscribedEvents:[]};function Ie(t,e,r={}){Object.assign(e,At,r),v.obj(t,e),v.event(t,e,"InteractionEvent"),v.event(t,e,"StartInteractionEvent"),v.event(t,e,"EndInteractionEvent"),v.get(t,e,["_interactor","enabled"]),v.setGet(t,e,["priority","processEvents"]),v.moveToProtected(t,e,["interactor"]),qt(t,e)}var en=v.newInstance(Ie,"vtkInteractorObserver"),tn={newInstance:en,extend:Ie,...Jt},{States:N}=Ce,ge={Rotate:N.IS_ROTATE,Pan:N.IS_PAN,Spin:N.IS_SPIN,Dolly:N.IS_DOLLY,CameraPose:N.IS_CAMERA_POSE,WindowLevel:N.IS_WINDOW_LEVEL,Slice:N.IS_SLICE};function nn(t,e){e.classHierarchy.push("vtkInteractorStyle"),Object.keys(ge).forEach(r=>{v.event(t,e,`Start${r}Event`),t[`start${r}`]=()=>{e.state===N.IS_NONE&&(e.state=ge[r],e._interactor.requestAnimation(t),t.invokeStartInteractionEvent({type:"StartInteractionEvent"}),t[`invokeStart${r}Event`]({type:`Start${r}Event`}))},v.event(t,e,`End${r}Event`),t[`end${r}`]=()=>{e.state===ge[r]&&(e.state=N.IS_NONE,e._interactor.cancelAnimation(t),t.invokeEndInteractionEvent({type:"EndInteractionEvent"}),t[`invokeEnd${r}Event`]({type:`End${r}Event`}),e._interactor.render())}}),e.getRenderer=r=>e.focusedRenderer||r.pokedRenderer,t.handleKeyPress=r=>{const s=e._interactor;let n=null;switch(r.key){case"r":case"R":e.getRenderer(r).resetCamera(),s.render();break;case"w":case"W":n=e.getRenderer(r).getActors(),n.forEach(a=>{const o=a.getProperty();o.setRepresentationToWireframe&&o.setRepresentationToWireframe()}),s.render();break;case"s":case"S":n=e.getRenderer(r).getActors(),n.forEach(a=>{const o=a.getProperty();o.setRepresentationToSurface&&o.setRepresentationToSurface()}),s.render();break;case"v":case"V":n=e.getRenderer(r).getActors(),n.forEach(a=>{const o=a.getProperty();o.setRepresentationToPoints&&o.setRepresentationToPoints()}),s.render();break}}}var rn={state:N.IS_NONE,handleObservers:1,autoAdjustCameraClippingRange:1};function je(t,e,r={}){Object.assign(e,rn,r),tn.extend(t,e,r),v.setGet(t,e,["focusedRenderer"]),nn(t,e)}var an=v.newInstance(je,"vtkInteractorStyle"),xe={newInstance:an,extend:je,...Ce},{States:W}=Ce;function sn(t,e){e.classHierarchy.push("vtkInteractorStyleTrackballCamera"),t.handleMouseMove=r=>{const s=r.position,n=e.getRenderer(r);switch(e.state){case W.IS_ROTATE:t.handleMouseRotate(n,s),t.invokeInteractionEvent({type:"InteractionEvent"});break;case W.IS_PAN:t.handleMousePan(n,s),t.invokeInteractionEvent({type:"InteractionEvent"});break;case W.IS_DOLLY:e.wheelDolly||(t.handleMouseDolly(n,s),t.invokeInteractionEvent({type:"InteractionEvent"}));break;case W.IS_SPIN:t.handleMouseSpin(n,s),t.invokeInteractionEvent({type:"InteractionEvent"});break}e.previousPosition=s},t.handleButton3D=r=>{if(r&&r.pressed&&r.device===De.RightController&&(r.input===re.Trigger||r.input===re.TrackPad)){t.startCameraPose();return}r&&!r.pressed&&r.device===De.RightController&&(r.input===re.Trigger||r.input===re.TrackPad)&&e.state===W.IS_CAMERA_POSE&&t.endCameraPose()},t.handleMove3D=r=>{e.state===W.IS_CAMERA_POSE&&t.updateCameraPose(r)},t.updateCameraPose=r=>{const s=e.getRenderer(r).getActiveCamera(),n=s.getPhysicalTranslation(),a=.5*.05*s.getPhysicalScale(),o=s.physicalOrientationToWorldDirection([r.orientation.x,r.orientation.y,r.orientation.z,r.orientation.w]);s.setPhysicalTranslation(n[0]+o[0]*a,n[1]+o[1]*a,n[2]+o[2]*a)},t.handleLeftButtonPress=r=>{e.previousPosition=r.position,r.shiftKey?r.controlKey||r.altKey?t.startDolly():t.startPan():r.controlKey||r.altKey?t.startSpin():t.startRotate()},t.handleLeftButtonRelease=()=>{switch(e.state){case W.IS_DOLLY:t.endDolly();break;case W.IS_PAN:t.endPan();break;case W.IS_SPIN:t.endSpin();break;case W.IS_ROTATE:t.endRotate();break}},t.handleStartMouseWheel=()=>{e.wheelDolly=!0,t.startDolly()},t.handleEndMouseWheel=()=>{t.endDolly(),e.wheelDolly=!1},t.handleStartPinch=r=>{e.previousScale=r.scale,t.startDolly()},t.handleEndPinch=()=>{t.endDolly()},t.handleStartRotate=r=>{e.previousRotation=r.rotation,t.startRotate()},t.handleEndRotate=()=>{t.endRotate()},t.handleStartPan=r=>{e.previousTranslation=r.translation,t.startPan()},t.handleEndPan=()=>{t.endPan()},t.handlePinch=r=>{t.dollyByFactor(e.getRenderer(r),r.scale/e.previousScale),e.previousScale=r.scale},t.handlePan=r=>{const s=e.getRenderer(r).getActiveCamera();let n=s.getFocalPoint();n=t.computeWorldToDisplay(e.getRenderer(r),n[0],n[1],n[2]);const a=n[2],o=r.translation,i=e.previousTranslation,u=t.computeDisplayToWorld(e.getRenderer(r),n[0]+o[0]-i[0],n[1]+o[1]-i[1],a),p=t.computeDisplayToWorld(e.getRenderer(r),n[0],n[1],a),c=[];c[0]=p[0]-u[0],c[1]=p[1]-u[1],c[2]=p[2]-u[2],n=s.getFocalPoint();const l=s.getPosition();s.setFocalPoint(c[0]+n[0],c[1]+n[1],c[2]+n[2]),s.setPosition(c[0]+l[0],c[1]+l[1],c[2]+l[2]),e._interactor.getLightFollowCamera()&&e.getRenderer(r).updateLightsGeometryToFollowCamera(),s.orthogonalizeViewUp(),e.previousTranslation=r.translation},t.handleRotate=r=>{const s=e.getRenderer(r).getActiveCamera();s.roll(r.rotation-e.previousRotation),s.orthogonalizeViewUp(),e.previousRotation=r.rotation},t.handleMouseRotate=(r,s)=>{if(!e.previousPosition)return;const n=e._interactor,a=s.x-e.previousPosition.x,o=s.y-e.previousPosition.y,i=n.getView().getViewportSize(r);let u=-.1,p=-.1;i[0]&&i[1]&&(u=-20/i[1],p=-20/i[0]);const c=a*p*e.motionFactor,l=o*u*e.motionFactor,g=r.getActiveCamera();!Number.isNaN(c)&&!Number.isNaN(l)&&(g.azimuth(c),g.elevation(l),g.orthogonalizeViewUp()),e.autoAdjustCameraClippingRange&&r.resetCameraClippingRange(),n.getLightFollowCamera()&&r.updateLightsGeometryToFollowCamera()},t.handleMouseSpin=(r,s)=>{if(!e.previousPosition)return;const n=e._interactor,a=r.getActiveCamera(),o=n.getView().getViewportCenter(r),i=_e(Math.atan2(e.previousPosition.y-o[1],e.previousPosition.x-o[0])),u=_e(Math.atan2(s.y-o[1],s.x-o[0]))-i;Number.isNaN(u)||(a.roll(u),a.orthogonalizeViewUp())},t.handleMousePan=(r,s)=>{if(!e.previousPosition)return;const n=r.getActiveCamera();let a=n.getFocalPoint();a=t.computeWorldToDisplay(r,a[0],a[1],a[2]);const o=a[2],i=t.computeDisplayToWorld(r,s.x,s.y,o),u=t.computeDisplayToWorld(r,e.previousPosition.x,e.previousPosition.y,o),p=[];p[0]=u[0]-i[0],p[1]=u[1]-i[1],p[2]=u[2]-i[2],a=n.getFocalPoint();const c=n.getPosition();n.setFocalPoint(p[0]+a[0],p[1]+a[1],p[2]+a[2]),n.setPosition(p[0]+c[0],p[1]+c[1],p[2]+c[2]),e._interactor.getLightFollowCamera()&&r.updateLightsGeometryToFollowCamera()},t.handleMouseDolly=(r,s)=>{if(!e.previousPosition)return;const n=s.y-e.previousPosition.y,a=e._interactor.getView().getViewportCenter(r),o=e.motionFactor*n/a[1];t.dollyByFactor(r,1.1**o)},t.handleMouseWheel=r=>{const s=1-r.spinY/e.zoomFactor;t.dollyByFactor(e.getRenderer(r),s)},t.dollyByFactor=(r,s)=>{if(Number.isNaN(s))return;const n=r.getActiveCamera();n.getParallelProjection()?n.setParallelScale(n.getParallelScale()/s):(n.dolly(s),e.autoAdjustCameraClippingRange&&r.resetCameraClippingRange()),e._interactor.getLightFollowCamera()&&r.updateLightsGeometryToFollowCamera()}}var on={motionFactor:10,zoomFactor:10,wheelDolly:!1};function Qe(t,e,r={}){Object.assign(e,on,r),xe.extend(t,e,r),v.setGet(t,e,["motionFactor","zoomFactor"]),sn(t,e)}var cn=v.newInstance(Qe,"vtkInteractorStyleTrackballCamera"),un={newInstance:cn,extend:Qe},{vtkErrorMacro:ln}=ft,fe=["setBindGroup","setIndexBuffer","setVertexBuffer","draw","drawIndexed"];function pn(t,e){e.classHierarchy.push("vtkWebGPURenderEncoder"),t.begin=r=>{e.drawCallbacks=[],e.handle=r.beginRenderPass(e.description),e.label&&e.handle.pushDebugGroup(e.label)},t.end=()=>{for(let r=0;r<e.drawCallbacks.length;r++){const s=e.drawCallbacks[r],n=s.pipeline;t.setPipeline(n);for(let a=0;a<s.callbacks.length;a++)s.callbacks[a](t)}e.label&&e.handle.popDebugGroup(),e.handle.end(),e.boundPipeline=null},t.setPipeline=r=>{if(e.boundPipeline===r)return;e.handle.setPipeline(r.getHandle());const s=r.getPipelineDescription(),n=s.fragment?.targets;if(e.colorTextureViews.length!==n.length)console.log(`mismatched attachment counts on pipeline ${n.length} while encoder has ${e.colorTextureViews.length}`),console.trace();else for(let a=0;a<e.colorTextureViews.length;a++){const o=e.colorTextureViews[a].getTexture()?.getFormat();o&&o!==n[a].format&&(console.log(`mismatched attachments for attachment ${a} on pipeline ${n[a].format} while encoder has ${o}`),console.trace())}if(!!e.depthTextureView!="depthStencil"in s)console.log("mismatched depth attachments"),console.trace();else if(e.depthTextureView){const a=e.depthTextureView.getTexture()?.getFormat();a&&a!==s.depthStencil.format&&(console.log(`mismatched depth attachments on pipeline ${s.depthStencil.format} while encoder has ${a}`),console.trace())}e.boundPipeline=r},t.replaceShaderCode=r=>{e.replaceShaderCodeFunction(r)},t.setColorTextureView=(r,s)=>{e.colorTextureViews[r]!==s&&(e.colorTextureViews[r]=s)},t.activateBindGroup=r=>{const s=e.boundPipeline.getDevice(),n=e.boundPipeline.getBindGroupLayoutIndex(r.getLabel());if(n<0){ln(`vtkWebGPURenderEncoder: could not find bind group layout ${r.getLabel()}`);return}e.handle.setBindGroup(n,r.getBindGroup(s));const a=s.getBindGroupLayoutDescription(r.getBindGroupLayout(s)),o=s.getBindGroupLayoutDescription(e.boundPipeline.getBindGroupLayout(n));a!==o&&(console.log(`renderEncoder ${e.pipelineHash} mismatched bind group layouts bind group has
4
4
  ${a}
@@ -556,4 +556,4 @@ fn main(
556
556
  //VTK::RenderEncoder::Impl
557
557
  return output;
558
558
  }
559
- `;function kn(t,e){e.classHierarchy.push("vtkForwardPass"),t.traverse=(r,s=null)=>{if(e.deleted)return;e._currentParent=s,t.setCurrentOperation("buildPass"),r.traverse(t),e.opaquePass||(e.opaquePass=dn.newInstance());const n=r.getRenderable().getNumberOfLayers(),a=r.getChildren();for(let o=0;o<n;o++)for(let i=0;i<a.length;i++){const u=a[i],p=r.getRenderable().getRenderers()[i];p.getDraw()&&p.getLayer()===o&&(e.opaqueActorCount=0,e.translucentActorCount=0,e.volumes=[],t.setCurrentOperation("queryPass"),u.traverse(t),t.setCurrentOperation("cameraPass"),u.traverse(t),e.opaquePass.traverse(u,r),e.translucentActorCount>0&&(e.translucentPass||(e.translucentPass=xn.newInstance()),e.translucentPass.setColorTextureView(e.opaquePass.getColorTextureView()),e.translucentPass.setDepthTextureView(e.opaquePass.getDepthTextureView()),e.translucentPass.traverse(u,r)),e.volumes.length>0&&(e.volumePass||(e.volumePass=Gn.newInstance()),e.volumePass.setColorTextureView(e.opaquePass.getColorTextureView()),e.volumePass.setDepthTextureView(e.opaquePass.getDepthTextureView()),e.volumePass.setVolumes(e.volumes),e.volumePass.traverse(u,r)),t.finalPass(r,u))}},t.finalPass=(r,s)=>{e._finalBlitEncoder||t.createFinalBlitEncoder(r),e._finalBlitOutputTextureView.createFromTextureHandle(r.getCurrentTexture(),{depth:1,format:r.getPresentationFormat()}),e._finalBlitEncoder.attachTextureViews(),e._finalBlitEncoder.begin(r.getCommandEncoder()),s.scissorAndViewport(e._finalBlitEncoder),e._fullScreenQuad.prepareAndDraw(e._finalBlitEncoder),e._finalBlitEncoder.end()},t.createFinalBlitEncoder=r=>{e._finalBlitEncoder=H.newInstance({label:"forwardPassBlit"}),e._finalBlitEncoder.setDescription({colorAttachments:[{view:null,loadOp:"load",storeOp:"store"}]}),e._finalBlitEncoder.setPipelineHash("fpf"),e._finalBlitEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:r.getPresentationFormat(),blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha"}}}]}}),e._fsqSampler=He.newInstance({label:"finalPassSampler"}),e._fsqSampler.create(r.getDevice(),{minFilter:"linear",magFilter:"linear"}),e._fullScreenQuad=se.newInstance(),e._fullScreenQuad.setDevice(r.getDevice()),e._fullScreenQuad.setPipelineHash("fpfsq"),e._fullScreenQuad.setTextureViews([e.opaquePass.getColorTextureView()]),e._fullScreenQuad.setAdditionalBindables([e._fsqSampler]),e._fullScreenQuad.setFragmentShaderTemplate(Ln),e._fullScreenQuad.getShaderReplacements().set("replaceShaderTCoord",(s,n)=>{const a=n.getShaderDescription("vertex");a.hasOutput("tcoordVS")||a.addOutput("vec2<f32>","tcoordVS"),n.getShaderDescription("fragment").addBuiltinInput("vec4<f32>","@builtin(position) fragPos")}),e._finalBlitOutputTextureView=Bt.newInstance(),e._finalBlitEncoder.setColorTextureView(0,e._finalBlitOutputTextureView)},t.incrementOpaqueActorCount=()=>e.opaqueActorCount++,t.incrementTranslucentActorCount=()=>e.translucentActorCount++,t.addVolume=r=>{e.volumes.push(r)},t.releaseGraphicsResources=()=>{e.opaquePass?.releaseGraphicsResources?.(),e.translucentPass?.releaseGraphicsResources?.(),e.volumePass?.releaseGraphicsResources?.(),e.opaquePass=null,e.translucentPass=null,e.volumePass=null,e._finalBlitEncoder=null,e._finalBlitOutputTextureView=null,e._fullScreenQuad=null,e._fsqSampler=null}}var Wn={opaqueActorCount:0,translucentActorCount:0,volumes:null,opaqueRenderEncoder:null,translucentPass:null,volumePass:null};function Ae(t,e,r={}){Object.assign(e,Wn,r),Z.extend(t,e,r),v.setGet(t,e,["opaquePass","translucentPass","volumePass"]),kn(t,e)}var zn=v.newInstance(Ae,"vtkForwardPass"),Nn={newInstance:zn,extend:Ae},{VtkDataTypes:I}=Tt;function $n(t,e){e.classHierarchy.push("vtkWebGPUTextureManager");function r(n){if(n.imageData){n.dataArray=n.imageData.getPointData().getScalars(),n.time=n.dataArray.getMTime(),n.nativeArray=n.dataArray.getData();const a=n.imageData.getDimensions();switch(n.width=a[0],n.height=a[1],n.depth=a[2],n.dataArray.getNumberOfComponents()){case 1:n.format="r";break;case 2:n.format="rg";break;default:n.format="rgba";break}switch(n.dataArray.getDataType()){case I.UNSIGNED_CHAR:n.format+="8unorm";break;case I.FLOAT:case I.UNSIGNED_INT:case I.INT:case I.DOUBLE:case I.UNSIGNED_SHORT:case I.SHORT:default:n.format+="16float";break}}n.image&&(n.width=n.image.width,n.height=n.image.height,n.depth=1,n.format="rgba8unorm",n.flip=!0,n.usage=GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT),n.jsImageData&&(n.width=n.jsImageData.width,n.height=n.jsImageData.height,n.depth=1,n.format="rgba8unorm",n.flip=!0,n.nativeArray=n.jsImageData.data,n.usage=GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT),n.imageBitmap&&(n.width=n.imageBitmap.width,n.height=n.imageBitmap.height,n.depth=1,n.format="rgba8unorm",n.flip=!0,n.usage=GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT),n.canvas&&(n.width=n.canvas.width,n.height=n.canvas.height,n.depth=1,n.format="rgba8unorm",n.flip=!0,n.usage=GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT)}function s(n){const a=$.newInstance({label:n.label});return a.create(e.device,{width:n.width,height:n.height,depth:n.depth,format:n.format,usage:n.usage,mipLevel:n.mipLevel}),(n.nativeArray||n.image||n.canvas||n.imageBitmap)&&a.writeImageData(n),a}t.getTexture=n=>n.hash?e.device.getCachedObject(n.hash,s,n):s(n),t.getTextureForImageData=n=>{const a={time:n.getMTime()};return a.imageData=n,r(a),a.hash=a.time+a.format+a.mipLevel,e.device.getTextureManager().getTexture(a)},t.getTextureForVTKTexture=(n,a=void 0)=>{const o={time:n.getMTime(),label:a};return n.getInputData()?o.imageData=n.getInputData():n.getImage()?o.image=n.getImage():n.getJsImageData()?o.jsImageData=n.getJsImageData():n.getImageBitmap()?o.imageBitmap=n.getImageBitmap():n.getCanvas()&&(o.canvas=n.getCanvas()),r(o),o.mipLevel=n.getMipLevel(),o.hash=o.time+o.format+o.mipLevel,e.device.getTextureManager().getTexture(o)}}var Hn={handle:null,device:null};function et(t,e,r={}){Object.assign(e,Hn,r),v.obj(t,e),v.setGet(t,e,["device"]),$n(t,e)}var Kn=v.newInstance(et),bn={newInstance:Kn,extend:et},In=class extends Map{constructor(){super(),this.registry=new FinalizationRegistry(t=>{const e=super.get(t);e&&e.deref&&e.deref()===void 0&&super.delete(t)})}getValue(t){const e=super.get(t);if(e){const r=e.deref();if(r!==void 0)return r;super.delete(t)}}setValue(t,e){let r;return e&&typeof e=="object"&&(r=new WeakRef(e),this.registry.register(e,t),super.set(t,r)),r}};function jn(t,e){e.classHierarchy.push("vtkWebGPUDevice"),t.initialize=r=>{e.handle=r},t.createCommandEncoder=()=>e.handle.createCommandEncoder(),t.submitCommandEncoder=r=>{e.handle.queue.submit([r.finish()])},t.getShaderModule=r=>e.shaderCache.getShaderModule(r),t.getBindGroupLayout=r=>{if(!r.entries)return null;for(let a=0;a<r.entries.length;a++){const o=r.entries[a];o.binding=o.binding||0,o.visibility=o.visibility||GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT}const s=JSON.stringify(r);for(let a=0;a<e.bindGroupLayouts.length;a++)if(e.bindGroupLayouts[a].sval===s)return e.bindGroupLayouts[a].layout;const n=e.handle.createBindGroupLayout(r);return e.bindGroupLayouts.push({sval:s,layout:n}),n},t.getBindGroupLayoutDescription=r=>{for(let s=0;s<e.bindGroupLayouts.length;s++)if(e.bindGroupLayouts[s].layout===r)return e.bindGroupLayouts[s].sval;return vtkErrorMacro("layout not found"),console.trace(),null},t.getPipeline=r=>r in e.pipelines?e.pipelines[r]:null,t.createPipeline=(r,s)=>{s.initialize(t,r),e.pipelines[r]=s},t.onSubmittedWorkDone=()=>e.handle.queue.onSubmittedWorkDone(),t.hasCachedObject=r=>e.objectCache.getValue(r),t.getCachedObject=(r,s,...n)=>{if(!r)return vtkErrorMacro("attempt to cache an object without a hash"),null;const a=e.objectCache.getValue(r);if(a)return a;const o=s(...n);return e.objectCache.setValue(r,o),o}}var Qn={handle:null,pipelines:null,shaderCache:null,bindGroupLayouts:null,bufferManager:null,textureManager:null};function tt(t,e,r={}){Object.assign(e,Qn,r),Le(t,e),We(t,e,["handle"]),ke(t,e,["bufferManager","shaderCache","textureManager"]),e.objectCache=new In,e.shaderCache=B.newInstance(),e.shaderCache.setDevice(t),e.bindGroupLayouts=[],e.bufferManager=Ke.newInstance(),e.bufferManager.setDevice(t),e.textureManager=bn.newInstance(),e.textureManager.setDevice(t),e.pipelines={},jn(t,e)}var Yn=Ge(tt,"vtkWebGPUDevice"),Xn={newInstance:Yn,extend:tt};function Zn(t,e){e.classHierarchy.push("vtkWebGPUHardwareSelectionPass"),t.traverse=(r,s)=>{if(e.deleted)return;e._currentParent=null,t.setCurrentOperation("buildPass"),r.traverse(t);const n=r.getDevice();if(e.selectionRenderEncoder)e.colorTexture.resize(r.getCanvas().width,r.getCanvas().height),e.depthTexture.resizeToMatch(e.colorTexture);else{t.createRenderEncoder(),e.colorTexture=$.newInstance({label:"hardwareSelectorColor"}),e.colorTexture.create(n,{width:r.getCanvas().width,height:r.getCanvas().height,format:"rgba32uint",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC});const a=e.colorTexture.createView("hardwareSelectColorTexture");e.selectionRenderEncoder.setColorTextureView(0,a),e.depthTexture=$.newInstance({label:"hardwareSelectorDepth"}),e.depthTexture.create(n,{width:r.getCanvas().width,height:r.getCanvas().height,format:"depth32float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC});const o=e.depthTexture.createView("hardwareSelectDepthTexture");e.selectionRenderEncoder.setDepthTextureView(o)}e.selectionRenderEncoder.attachTextureViews(),s.setRenderEncoder(e.selectionRenderEncoder),t.setCurrentOperation("cameraPass"),s.traverse(t),t.setCurrentOperation("opaquePass"),s.traverse(t)},t.createRenderEncoder=()=>{e.selectionRenderEncoder=H.newInstance({label:"HardwareSelectionPass"}),e.selectionRenderEncoder.setPipelineHash("sel"),e.selectionRenderEncoder.setReplaceShaderCodeFunction(s=>{const n=s.getShaderDescription("fragment");n.addOutput("vec4<u32>","outColor");let a=n.getCode();a=B.substitute(a,"//VTK::Select::Impl",[" var compositeID: u32 = 0u;"," var attributeID: u32 = compositeID;"]).result,a=B.substitute(a,"//VTK::RenderEncoder::Impl",["output.outColor = vec4<u32>(mapperUBO.PropID, compositeID, attributeID + 1u, 0u);"]).result,n.setCode(a)});const r=e.selectionRenderEncoder.getDescription();r.colorAttachments[0].clearValue=[0,0,0,0],e.selectionRenderEncoder.setPipelineSettings({primitive:{cullMode:"none"},depthStencil:{depthWriteEnabled:!0,depthCompare:"greater",format:"depth32float"},fragment:{targets:[{format:"rgba32uint",blend:void 0}]}})}}var Jn={selectionRenderEncoder:null,colorTexture:null,depthTexture:null};function nt(t,e,r={}){Object.assign(e,Jn,r),Z.extend(t,e,r),v.get(t,e,["colorTexture","depthTexture"]),Zn(t,e)}var qn=v.newInstance(nt,"vtkWebGPUHardwareSelectionPass"),An={newInstance:qn,extend:nt},{SelectionContent:er,SelectionField:Oe}=be,{FieldAssociations:Ue}=wt,{vtkErrorMacro:rt}=v;function tr(t){return`${t.propID} ${t.compositeID}`}function he(t,e,r,s){const n=((r.height-e-1)*r.colorBufferWidth+t)*4+s;return r.colorValues[n]}function nr(t,e,r,s){{if(s[0]=e[0],s[1]=e[1],e[0]<0||e[0]>=t.width||e[1]<0||e[1]>=t.height)return null;const n=he(e[0],e[1],t,0);if(n<=0||n-1>=(t.props?.length??0))return null;const a={};a.propID=n-1,a.prop=t.props?.[a.propID];let o=he(e[0],e[1],t,1);(o<0||o>16777215)&&(o=0),a.compositeID=o-1;let i=he(e[0],e[1],t,2);if(i<1&&(i=o),a.attributeID=i-1,t.captureZValues){const u=(t.height-e[1]-1)*t.zbufferBufferWidth+e[0];a.zValue=t.depthValues[u],a.zValue=t.webGPURenderer.convertToOpenGLDepth(a.zValue),a.displayPosition=e}return a}}function rr(t,e,r){const s=[];let n=0;return e.forEach((a,o)=>{const i=be.newInstance();switch(i.setContentType(er.INDICES),t){case Ue.FIELD_ASSOCIATION_CELLS:i.setFieldType(Oe.CELL);break;case Ue.FIELD_ASSOCIATION_POINTS:i.setFieldType(Oe.POINT);break;default:rt("Unknown field association")}i.getProperties().propID=a.info.propID,i.getProperties().prop=a.info.prop,i.getProperties().compositeID=a.info.compositeID,i.getProperties().attributeID=a.info.attributeID,i.getProperties().pixelCount=a.pixelCount,r.captureZValues&&(i.getProperties().displayPosition=[a.info.displayPosition[0],a.info.displayPosition[1],a.info.zValue],i.getProperties().worldPosition=r.webGPURenderWindow.displayToWorld(a.info.displayPosition[0],a.info.displayPosition[1],a.info.zValue,r.renderer)),i.setSelectionList(a.attributeIDs),s[n]=i,n++}),s}function ar(t,e,r,s,n){const a=Math.floor(e),o=Math.floor(r),i=Math.floor(s),u=Math.floor(n),p=new Map,c=[0,0];for(let l=o;l<=u;l++)for(let g=a;g<=i;g++){const f=nr(t,[g,l],0,c);if(f){const h=tr(f);if(!p.has(h))p.set(h,{info:f,pixelCount:1,attributeIDs:[f.attributeID]});else{const S=p.get(h);S.pixelCount++,t.captureZValues&&f.zValue<S.info.zValue&&(S.info=f),S.attributeIDs.indexOf(f.attributeID)===-1&&S.attributeIDs.push(f.attributeID)}}}return rr(t.fieldAssociation,p,t)}function sr(t,e){e.classHierarchy.push("vtkWebGPUHardwareSelector"),t.getPropIDForSelection=(r,s=null)=>{if(e._selectionPropMap.has(r))return e._selectionPropMap.get(r);const n=e._selectionProps.length;return e._selectionPropMap.set(r,n),e._selectionProps.push(s),n},t.endSelection=()=>{e.WebGPURenderer.setSelector(null)},t.getSourceDataAsync=async r=>{if(!r||!e._WebGPURenderWindow)return rt("Renderer and view must be set before calling Select."),!1;e._WebGPURenderWindow.getRenderable().preRender(),e._WebGPURenderWindow.getInitialized()||(e._WebGPURenderWindow.initialize(),await new Promise(h=>{e._WebGPURenderWindow.onInitialized(h)}));const s=e._WebGPURenderWindow.getViewNodeFor(r);if(!s)return!1;const n=s.getSuppressClear(),a=s.getSelector();e._selectionPropMap.clear(),e._selectionProps=[],s.setSuppressClear(!0),s.setSelector(t);try{e._selectionPass.traverse(e._WebGPURenderWindow,s)}finally{s.setSelector(a),s.setSuppressClear(n)}const o=e._WebGPURenderWindow.getDevice(),i=e._selectionPass.getColorTexture(),u=e._selectionPass.getDepthTexture(),p={area:[0,0,i.getWidth()-1,i.getHeight()-1],captureZValues:e.captureZValues,fieldAssociation:e.fieldAssociation,props:[...e._selectionProps],renderer:r,webGPURenderer:s,webGPURenderWindow:e._WebGPURenderWindow,width:i.getWidth(),height:i.getHeight()};p.colorBufferWidth=16*Math.floor((p.width+15)/16),p.colorBufferSizeInBytes=p.colorBufferWidth*p.height*4*4;const c=Te.newInstance({label:"hardwareSelectColorBuffer"});c.setDevice(o),c.create(p.colorBufferSizeInBytes,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);const l=e._WebGPURenderWindow.getCommandEncoder();l.copyTextureToBuffer({texture:i.getHandle()},{buffer:c.getHandle(),bytesPerRow:16*p.colorBufferWidth,rowsPerImage:p.height},{width:p.width,height:p.height,depthOrArrayLayers:1});let g;e.captureZValues&&(p.zbufferBufferWidth=64*Math.floor((p.width+63)/64),g=Te.newInstance({label:"hardwareSelectDepthBuffer"}),g.setDevice(o),p.zbufferSizeInBytes=p.height*p.zbufferBufferWidth*4,g.create(p.zbufferSizeInBytes,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST),l.copyTextureToBuffer({texture:u.getHandle(),aspect:"depth-only"},{buffer:g.getHandle(),bytesPerRow:4*p.zbufferBufferWidth,rowsPerImage:p.height},{width:p.width,height:p.height,depthOrArrayLayers:1})),o.submitCommandEncoder(l);const f=c.mapAsync(GPUMapMode.READ);if(e.captureZValues){const h=g.mapAsync(GPUMapMode.READ);await Promise.all([f,h]),p.depthValues=new Float32Array(g.getMappedRange().slice()),g.unmap()}else await f;return p.colorValues=new Uint32Array(c.getMappedRange().slice()),c.unmap(),p.generateSelection=(h,S,x,C)=>ar(p,h,S,x,C),p}}var or={_selectionPropMap:null,_selectionProps:null};function at(t,e,r={}){Object.assign(e,or,r),mt.extend(t,e,r),e._selectionPass=An.newInstance(),e._selectionPropMap=new Map,e._selectionProps=[],v.setGet(t,e,["_WebGPURenderWindow"]),v.moveToProtected(t,e,["WebGPURenderWindow"]),sr(t,e)}var ir=v.newInstance(at,"vtkWebGPUHardwareSelector"),st={newInstance:ir,extend:at},{vtkErrorMacro:Fe,vtkWarningMacro:cr}=v,ur={position:"absolute",top:0,left:0,width:"100%",height:"100%"};function lr(t,e){e.classHierarchy.push("vtkWebGPURenderWindow"),t.getViewNodeFactory=()=>e.myFactory;function r(c,l=new Set){if(!c||l.has(c))return;l.add(c);const g=c.getChildren?.()||[];for(let f=0;f<g.length;f++){const h=g[f];h?.releaseGraphicsResources?.(),r(h,l)}}function s(){const c=t.onInitialized(()=>{c.unsubscribe(),e.deleted||t.traverseAllPasses()})}function n(c,l){if(e.deleted||l!==e.deviceGeneration||e.handlingDeviceLost)return;e.handlingDeviceLost=!0,e.deviceLostInfo=c;const g=c?.reason??"unknown",f=c?.message||"WebGPU device was lost.";cr(`WebGPU device lost (${g}): ${f}`),t.releaseGraphicsResources(),t.invokeDeviceLost({reason:g,message:f,recoverable:g!=="destroyed"}),g!=="destroyed"&&(s(),t.initialize()),e.handlingDeviceLost=!1}function a(c,l){c.lost.then(g=>{n(g,l)})}const o=[0,0];function i(){e.renderable&&(e.size[0]!==o[0]||e.size[1]!==o[1])&&(o[0]=e.size[0],o[1]=e.size[1],e.canvas.setAttribute("width",e.size[0]),e.canvas.setAttribute("height",e.size[1]),t.recreateSwapChain()),e.viewStream&&e.viewStream.setSize(e.size[0],e.size[1]),e.canvas.style.display=e.useOffScreen?"none":"block",e.el&&(e.el.style.cursor=e.cursorVisibility?e.cursor:"none"),e.containerSize=null}t.onModified(i),t.recreateSwapChain=()=>{e.context&&(e.context.unconfigure(),e.presentationFormat=navigator.gpu.getPreferredCanvasFormat(e.adapter),e.context.configure({device:e.device.getHandle(),format:e.presentationFormat,alphaMode:"premultiplied",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_DST,width:e.size[0],height:e.size[1]}),e._configured=!0)},t.getCurrentTexture=()=>e.context.getCurrentTexture(),t.buildPass=c=>{if(c){if(!e.renderable)return;t.prepareNodes(),t.addMissingNodes(e.renderable.getRenderersByReference()),t.removeUnusedNodes(),t.initialize()}else e.initialized&&(e._configured||t.recreateSwapChain(),e.commandEncoder=e.device.createCommandEncoder())},t.initialize=()=>{if(!e.initializing){if(e.initializing=!0,e.deviceLostInfo=null,!navigator.gpu){Fe("WebGPU is not enabled.");return}t.create3DContextAsync().then(()=>{e.initialized=!0,!e.deleted&&t.invokeInitialized()})}},t.setContainer=c=>{e.el&&e.el!==c&&(e.canvas.parentNode!==e.el&&Fe("Error: canvas parent node does not match container"),e.el.removeChild(e.canvas),e.el.contains(e.bgImage)&&e.el.removeChild(e.bgImage)),e.el!==c&&(e.el=c,e.el&&(e.el.appendChild(e.canvas),e.useBackgroundImage&&e.el.appendChild(e.bgImage)),t.modified())},t.getContainer=()=>e.el,t.getContainerSize=()=>{if(!e.containerSize&&e.el){const{width:c,height:l}=e.el.getBoundingClientRect();e.containerSize=[c,l]}return e.containerSize||e.size},t.getFramebufferSize=()=>e.size,t.create3DContextAsync=async()=>{if(e.adapter=await navigator.gpu.requestAdapter({powerPreference:"high-performance"}),!e.deleted){if(e.device=Xn.newInstance(),e.device.initialize(await e.adapter.requestDevice({requiredLimits:{maxBufferSize:e.adapter.limits.maxBufferSize,maxStorageBufferBindingSize:e.adapter.limits.maxStorageBufferBindingSize,maxUniformBufferBindingSize:e.adapter.limits.maxUniformBufferBindingSize}})),e.deleted){e.device=null;return}e.deviceGeneration+=1,a(e.device.getHandle(),e.deviceGeneration),e.context=e.canvas.getContext("webgpu")}},t.releaseGraphicsResources=()=>{if(e.renderPasses)for(let l=0;l<e.renderPasses.length;l++)e.renderPasses[l]?.releaseGraphicsResources?.();r(t);const c=Z.newInstance();c.setCurrentOperation("Release"),c.traverse(t,null),e.context&&e.context.unconfigure(),e.adapter=null,e.device=null,e.context=null,e.commandEncoder=null,e._configured=!1,e.initialized=!1,e.initializing=!1},t.setBackgroundImage=c=>{e.bgImage.src=c.src},t.setUseBackgroundImage=c=>{e.useBackgroundImage=c,e.useBackgroundImage&&!e.el.contains(e.bgImage)?e.el.appendChild(e.bgImage):!e.useBackgroundImage&&e.el.contains(e.bgImage)&&e.el.removeChild(e.bgImage)};async function u(c=e.imageFormat){const l=document.createElement("canvas"),g=l.getContext("2d");l.width=e.canvas.width,l.height=e.canvas.height;const f=await t.getPixelsAsync(),h=new ImageData(f.colorValues,f.width,f.height);g.putImageData(h,0,0);const S=e.canvas.getBoundingClientRect();e.renderable.getRenderers().forEach(C=>{C.getViewProps().forEach(_=>{if(_.getContainer){const R=_.getContainer().getElementsByTagName("canvas");for(let M=0;M<R.length;M++){const T=R[M],U=T.getBoundingClientRect(),V=U.x-S.x,d=U.y-S.y;g.drawImage(T,V,d)}}})});const x=l.toDataURL(c);l.remove(),t.invokeImageReady(x)}t.captureNextImage=(c="image/png",{resetCamera:l=!1,size:g=null,scale:f=1}={})=>{if(e.deleted)return null;e.imageFormat=c;const h=e.notifyStartCaptureImage;return e.notifyStartCaptureImage=!0,e._screenshot={size:g||f!==1?g||e.size.map(S=>S*f):null},new Promise((S,x)=>{const C=t.onImageReady(_=>{if(e._screenshot.size===null)e.notifyStartCaptureImage=h,C.unsubscribe(),e._screenshot.placeHolder&&(e.size=e._screenshot.originalSize,t.modified(),e._screenshot.cameras&&e._screenshot.cameras.forEach(({restoreParamsFn:R,arg:M})=>R(M)),t.traverseAllPasses(),e.el.removeChild(e._screenshot.placeHolder),e._screenshot.placeHolder.remove(),e._screenshot=null),S(_);else{const R=document.createElement("img");if(R.style=ur,R.src=_,e._screenshot.placeHolder=e.el.appendChild(R),e.canvas.style.display="none",e._screenshot.originalSize=e.size,e.size=e._screenshot.size,e._screenshot.size=null,t.modified(),l){const M=l!==!0;e._screenshot.cameras=e.renderable.getRenderers().map(T=>{const U=T.getActiveCamera(),V=U.get("focalPoint","position","parallelScale");return{resetCameraArgs:M?{renderer:T}:void 0,resetCameraFn:M?l:T.resetCamera,restoreParamsFn:U.set,arg:JSON.parse(JSON.stringify(V))}}),e._screenshot.cameras.forEach(({resetCameraFn:T,resetCameraArgs:U})=>T(U))}t.traverseAllPasses()}})})},t.traverseAllPasses=()=>{if(!e.deleted)if(e.initialized){if(e.renderPasses)for(let c=0;c<e.renderPasses.length;++c)e.renderPasses[c].traverse(t,null);e.commandEncoder&&(e.device.submitCommandEncoder(e.commandEncoder),e.commandEncoder=null,e.notifyStartCaptureImage&&e.device.onSubmittedWorkDone().then(()=>{u()}))}else{t.initialize();const c=t.onInitialized(()=>{c.unsubscribe(),t.traverseAllPasses()})}},t.setViewStream=c=>{if(e.viewStream===c)return!1;if(e.subscription&&(e.subscription.unsubscribe(),e.subscription=null),e.viewStream=c,e.viewStream){const l=e.renderable.getRenderers()[0];l.getBackgroundByReference()[3]=0,t.setUseBackgroundImage(!0),e.subscription=e.viewStream.onImageReady(g=>t.setBackgroundImage(g.image)),e.viewStream.setSize(e.size[0],e.size[1]),e.viewStream.invalidateCache(),e.viewStream.render(),t.modified()}return!0},t.getUniquePropID=()=>e.nextPropID++,t.getPropFromID=c=>{for(let l=0;l<e.children.length;l++){const g=e.children[l].getPropFromID(c);if(g!==null)return g}return null},t.getPixelsAsync=async()=>{const c=e.device,l=e.renderPasses[0].getOpaquePass().getColorTexture(),g={width:l.getWidth(),height:l.getHeight()};g.colorBufferWidth=32*Math.floor((g.width+31)/32),g.colorBufferSizeInBytes=g.colorBufferWidth*g.height*8;const f=Te.newInstance();f.setDevice(c),f.create(g.colorBufferSizeInBytes,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);const h=e.device.createCommandEncoder();h.copyTextureToBuffer({texture:l.getHandle()},{buffer:f.getHandle(),bytesPerRow:8*g.colorBufferWidth,rowsPerImage:g.height},{width:g.width,height:g.height,depthOrArrayLayers:1}),c.submitCommandEncoder(h),await f.mapAsync(GPUMapMode.READ),g.colorValues=new Uint16Array(f.getMappedRange().slice()),f.unmap();const S=new Uint8ClampedArray(g.height*g.width*4);for(let x=0;x<g.height;x++)for(let C=0;C<g.width;C++){const _=(x*g.width+C)*4,R=(x*g.colorBufferWidth+C)*4;S[_]=255*ae.fromHalf(g.colorValues[R]),S[_+1]=255*ae.fromHalf(g.colorValues[R+1]),S[_+2]=255*ae.fromHalf(g.colorValues[R+2]),S[_+3]=255*ae.fromHalf(g.colorValues[R+3])}return g.colorValues=S,g},t.createSelector=()=>{const c=st.newInstance();return c.setWebGPURenderWindow(t),c};const p=t.setSize;t.setSize=(c,l)=>{const g=p(c,l);return g&&t.invokeWindowResizeEvent({width:c,height:l}),g},t.delete=v.chain(t.delete,t.setViewStream)}var pr={initialized:!1,initializing:!1,handlingDeviceLost:!1,deviceGeneration:0,deviceLostInfo:null,context:null,adapter:null,device:null,canvas:null,cursorVisibility:!0,cursor:"pointer",containerSize:null,renderPasses:[],notifyStartCaptureImage:!1,imageFormat:"image/png",useOffScreen:!1,useBackgroundImage:!1,nextPropID:1,xrSupported:!1,presentationFormat:null};function gr(t,e,r={}){Object.assign(e,pr,r),e.canvas=document.createElement("canvas"),e.canvas.style.width="100%",e.bgImage=new Image,e.bgImage.style.position="absolute",e.bgImage.style.left="0",e.bgImage.style.top="0",e.bgImage.style.width="100%",e.bgImage.style.height="100%",e.bgImage.style.zIndex="-1",Ft.extend(t,e,r),e.myFactory=Pt.newInstance(),e.renderPasses[0]=Nn.newInstance(),e.selector||(e.selector=st.newInstance(),e.selector.setWebGPURenderWindow(t)),v.event(t,e,"imageReady"),v.event(t,e,"initialized"),v.event(t,e,"deviceLost"),v.get(t,e,["commandEncoder","deviceLostInfo","device","presentationFormat","useBackgroundImage","xrSupported"]),v.setGet(t,e,["initialized","context","canvas","device","renderPasses","notifyStartCaptureImage","cursor","useOffScreen"]),v.setGetArray(t,e,["size"],2),v.event(t,e,"windowResizeEvent"),lr(t,e)}var ot=v.newInstance(gr,"vtkWebGPURenderWindow");Ot("WebGPU",ot);Ut("vtkRenderWindow",ot);var fr=It.extractURLParameters();function vr(t,e){const r=t.invokeResize;delete t.invokeResize,e.renderWindow=Gt.newInstance(),e.renderer=Lt.newInstance(),e.renderWindow.addRenderer(e.renderer),e._apiSpecificRenderWindow=e.renderWindow.newAPISpecificView(fr.viewAPI??e.defaultViewAPI),e.renderWindow.addView(e._apiSpecificRenderWindow),e.interactor=Ne.newInstance(),e.interactor.setInteractorStyle(un.newInstance()),e.interactor.setView(e._apiSpecificRenderWindow),e.interactor.initialize(),t.setBackground=e.renderer.setBackground,t.setBackground(...e.background),t.resize=()=>{if(e.container){const s=e.container.getBoundingClientRect(),n=window.devicePixelRatio||1;e._apiSpecificRenderWindow.setSize(Math.floor(s.width*n),Math.floor(s.height*n)),r(),e.renderWindow.render()}},t.setContainer=s=>{e.container&&e.interactor.unbindEvents(e.container),e.container=s,e._apiSpecificRenderWindow.setContainer(e.container),e.container&&e.interactor.bindEvents(e.container)},t.delete=v.chain(t.setContainer,e._apiSpecificRenderWindow.delete,()=>{window.removeEventListener("resize",t.resize)},t.delete),e.listenWindowResize&&window.addEventListener("resize",t.resize),t.resize()}var hr={background:[.32,.34,.43],listenWindowResize:!0,container:null};function it(t,e,r={}){Object.assign(e,hr,r),v.obj(t,e),v.get(t,e,["renderWindow","renderer","_apiSpecificRenderWindow","interactor","container"]),v.moveToProtected(t,e,["_apiSpecificRenderWindow"]),v.event(t,e,"resize"),vr(t,e)}var Sr=v.newInstance(it),dr={newInstance:Sr,extend:it},{vtkDebugMacro:Se}=v,{States:Tr}=xe,ee={type:"StartInteractionEvent"},b={type:"InteractionEvent"},te={type:"EndInteractionEvent"};function we(t,e,r,s,n,a){const o=t.getActiveCamera();let i=o.getFocalPoint();i=e.getInteractorStyle().computeWorldToDisplay(t,i[0],i[1],i[2]);const u=i[2],p=e.getInteractorStyle().computeDisplayToWorld(t,r,s,u),c=e.getInteractorStyle().computeDisplayToWorld(t,n,a,u),l=[c[0]-p[0],c[1]-p[1],c[2]-p[2]];i=o.getFocalPoint();const g=o.getPosition();o.setFocalPoint(l[0]+i[0],l[1]+i[1],l[2]+i[2]),o.setPosition(l[0]+g[0],l[1]+g[1],l[2]+g[2])}function wr(t,e,r,s){const n=r.getActiveCamera();if(n.getParallelProjection()){const a=s.getView(),o=a.getViewportSize(r),i=r.getViewport(),u=a.getSize(),p=o[0],c=o[1],l=p/2,g=c/2,f=e.x-i[0]*u[0],h=e.y-i[1]*u[1];we(r,s,l,g,f,h),n.setParallelScale(n.getParallelScale()/t),we(r,s,f,h,l,g)}else{let a=n.getFocalPoint();const o=n.getViewPlaneNormal();a=s.getInteractorStyle().computeWorldToDisplay(r,a[0],a[1],a[2]);const i=s.getInteractorStyle().computeDisplayToWorld(r,e.x,e.y,a[2]);n.setFocalPoint(i[0],i[1],i[2]),n.dolly(t),r.resetCameraClippingRange();const u=n.getPosition();a=n.getFocalPoint();const p=[0,0,0];let c=o[0]*(a[0]-u[0])+o[1]*(a[1]-u[1])+o[2]*(a[2]-u[2]);c/=o[0]**2+o[1]**2+o[2]**2,p[0]=u[0]+o[0]*c,p[1]=u[1]+o[1]*c,p[2]=u[2]+o[2]*c,n.setFocalPoint(p[0],p[1],p[2]),r.resetCameraClippingRange()}}function yr(t,e,r){if(Number.isNaN(r))return;const s=e.getActiveCamera();s.getParallelProjection()?s.setParallelScale(s.getParallelScale()/r):(s.dolly(r),e.resetCameraClippingRange()),t.getLightFollowCamera()&&e.updateLightsGeometryToFollowCamera()}var Cr={dollyToPosition:wr,translateCamera:we,dollyByFactor:yr};function xr(t,e){e.classHierarchy.push("vtkInteractorStyleManipulator"),e.currentVRManipulators=new Map,e.mouseManipulators=[],e.keyboardManipulators=[],e.vrManipulators=[],e.gestureManipulators=[],e.currentManipulator=null,e.currentWheelManipulator=null,e.centerOfRotation=[0,0,0],e.rotationFactor=1,t.removeAllManipulators=()=>{t.removeAllMouseManipulators(),t.removeAllKeyboardManipulators(),t.removeAllVRManipulators(),t.removeAllGestureManipulators()},t.removeAllMouseManipulators=()=>{e.mouseManipulators=[]},t.removeAllKeyboardManipulators=()=>{e.keyboardManipulators=[]},t.removeAllVRManipulators=()=>{e.vrManipulators=[]},t.removeAllGestureManipulators=()=>{e.gestureManipulators=[]};const r=(n,a)=>{const o=a.indexOf(n);return o===-1?!1:(a.splice(o,1),t.modified(),!0)};t.removeMouseManipulator=n=>r(n,e.mouseManipulators),t.removeKeyboardManipulator=n=>r(n,e.keyboardManipulators),t.removeVRManipulator=n=>r(n,e.vrManipulators),t.removeGestureManipulator=n=>r(n,e.gestureManipulators);const s=(n,a)=>a.indexOf(n)!==-1?!1:(a.push(n),t.modified(),!0);t.addMouseManipulator=n=>s(n,e.mouseManipulators),t.addKeyboardManipulator=n=>s(n,e.keyboardManipulators),t.addVRManipulator=n=>s(n,e.vrManipulators),t.addGestureManipulator=n=>s(n,e.gestureManipulators),t.getNumberOfMouseManipulators=()=>e.mouseManipulators.length,t.getNumberOfKeyboardManipulators=()=>e.keyboardManipulators.length,t.getNumberOfVRManipulators=()=>e.vrManipulators.length,t.getNumberOfGestureManipulators=()=>e.gestureManipulators.length,t.resetCurrentManipulator=()=>{e.currentManipulator=null,e.currentWheelManipulator=null},t.handleLeftButtonPress=n=>{e.previousPosition=n.position,t.onButtonDown(Y.LeftButton,n)},t.handleMiddleButtonPress=n=>{e.previousPosition=n.position,t.onButtonDown(Y.MiddleButton,n)},t.handleRightButtonPress=n=>{e.previousPosition=n.position,t.onButtonDown(Y.RightButton,n)},t.handleButton3D=n=>{if(!n)return;const a=t.findVRManipulator(n.device,n.input,n.pressed);a?(e.currentVRManipulators.set(n.device,a),a.onButton3D(t,e.getRenderer(n),e.state,n),n.pressed?t.startCameraPose():(e.currentVRManipulators.delete(n.device),e.currentVRManipulators.size===0&&t.endCameraPose())):Se("No manipulator found")},t.handleMove3D=n=>{const a=e.currentVRManipulators.get(n.device);a&&e.state===Tr.IS_CAMERA_POSE&&a.onMove3D(t,e.getRenderer(n),e.state,n)},t.onButtonDown=(n,a)=>{e.currentManipulator||(e.currentManipulator=t.findMouseManipulator(n,a.shiftKey,a.controlKey,a.altKey),e.currentManipulator?(e.currentManipulator.setCenter&&e.currentManipulator.setCenter(e.centerOfRotation),e.currentManipulator.setRotationFactor&&e.currentManipulator.setRotationFactor(e.rotationFactor),e.currentManipulator.startInteraction(),e.currentManipulator.onButtonDown(e._interactor,e.getRenderer(a),a.position),e._interactor.requestAnimation(t.onButtonDown),t.invokeStartInteractionEvent(ee)):Se("No manipulator found"))},t.findMouseManipulator=(n,a,o,i)=>{let u=null,p=e.mouseManipulators.length;for(;p--;){const c=e.mouseManipulators[p];c&&c.getButton()===n&&c.getShift()===a&&c.getControl()===o&&c.getAlt()===i&&c.isDragEnabled()&&(u=c)}return u},t.findVRManipulator=(n,a)=>{let o=null,i=e.vrManipulators.length;for(;i--;){const u=e.vrManipulators[i];u&&u.getDevice()===n&&u.getInput()===a&&(o=u)}return o},t.handleLeftButtonRelease=()=>{t.onButtonUp(Y.LeftButton)},t.handleMiddleButtonRelease=()=>{t.onButtonUp(Y.MiddleButton)},t.handleRightButtonRelease=()=>{t.onButtonUp(Y.RightButton)},t.onButtonUp=n=>{e.currentManipulator&&e.currentManipulator.getButton&&e.currentManipulator.getButton()===n&&(e.currentManipulator.onButtonUp(e._interactor),e.currentManipulator.endInteraction(),e._interactor.isPointerLocked()||(e.currentManipulator=null),e._interactor.cancelAnimation(t.onButtonDown),t.invokeEndInteractionEvent(te))},t.handleEndPointerLock=()=>{e.currentManipulator=null},t.handleStartMouseWheel=n=>{if(e.currentWheelManipulator)return;let a=null,o=e.mouseManipulators.length;for(;o--;){const i=e.mouseManipulators[o];i&&i.isScrollEnabled()&&i.getShift()===n.shiftKey&&i.getControl()===n.controlKey&&i.getAlt()===n.altKey&&(a=i)}a?(e.currentWheelManipulator=a,e.currentWheelManipulator.onStartScroll(e._interactor,e.getRenderer(n),n.spinY),e.currentWheelManipulator.startInteraction(),e._interactor.requestAnimation(t.handleStartMouseWheel),t.invokeStartInteractionEvent(ee)):Se("No manipulator found")},t.handleEndMouseWheel=()=>{e.currentWheelManipulator&&e.currentWheelManipulator.onEndScroll&&(e.currentWheelManipulator.onEndScroll(e._interactor),e.currentWheelManipulator.endInteraction(),e.currentWheelManipulator=null,e._interactor.cancelAnimation(t.handleStartMouseWheel),t.invokeEndInteractionEvent(te))},t.handleMouseWheel=n=>{e.currentWheelManipulator&&e.currentWheelManipulator.onScroll&&(e.currentWheelManipulator.onScroll(e._interactor,e.getRenderer(n),n.spinY,e.cachedMousePosition),t.invokeInteractionEvent(b))},t.handleMouseMove=n=>{e.cachedMousePosition=n.position,e.currentManipulator&&e.currentManipulator.onMouseMove&&(e.currentManipulator.onMouseMove(e._interactor,e.getRenderer(n),n.position),t.invokeInteractionEvent(b))},t.handleKeyPress=n=>{e.keyboardManipulators.filter(a=>a.onKeyPress).forEach(a=>{a.onKeyPress(e._interactor,e.getRenderer(n),n.key),t.invokeInteractionEvent(b)})},t.handleKeyDown=n=>{e.keyboardManipulators.filter(a=>a.onKeyDown).forEach(a=>{a.onKeyDown(e._interactor,e.getRenderer(n),n.key),t.invokeInteractionEvent(b)})},t.handleKeyUp=n=>{e.keyboardManipulators.filter(a=>a.onKeyUp).forEach(a=>{a.onKeyUp(e._interactor,e.getRenderer(n),n.key),t.invokeInteractionEvent(b)})},t.handleStartPinch=n=>{t.startDolly();let a=e.gestureManipulators.length;for(;a--;){const o=e.gestureManipulators[a];o&&o.isPinchEnabled()&&(o.onStartPinch(e._interactor,n.scale),o.startInteraction())}e._interactor.requestAnimation(t.handleStartPinch),t.invokeStartInteractionEvent(ee)},t.handleEndPinch=()=>{t.endDolly();let n=e.gestureManipulators.length;for(;n--;){const a=e.gestureManipulators[n];a&&a.isPinchEnabled()&&(a.onEndPinch(e._interactor),a.endInteraction())}e._interactor.cancelAnimation(t.handleStartPinch),t.invokeEndInteractionEvent(te)},t.handleStartRotate=n=>{t.startRotate();let a=e.gestureManipulators.length;for(;a--;){const o=e.gestureManipulators[a];o&&o.isRotateEnabled()&&(o.onStartRotate(e._interactor,n.rotation),o.startInteraction())}e._interactor.requestAnimation(t.handleStartRotate),t.invokeStartInteractionEvent(ee)},t.handleEndRotate=()=>{t.endRotate();let n=e.gestureManipulators.length;for(;n--;){const a=e.gestureManipulators[n];a&&a.isRotateEnabled()&&(a.onEndRotate(e._interactor),a.endInteraction())}e._interactor.cancelAnimation(t.handleStartRotate),t.invokeEndInteractionEvent(te)},t.handleStartPan=n=>{t.startPan();let a=e.gestureManipulators.length;for(;a--;){const o=e.gestureManipulators[a];o&&o.isPanEnabled()&&(o.onStartPan(e._interactor,n.translation),o.startInteraction())}e._interactor.requestAnimation(t.handleStartPan),t.invokeStartInteractionEvent(ee)},t.handleEndPan=()=>{t.endPan();let n=e.gestureManipulators.length;for(;n--;){const a=e.gestureManipulators[n];a&&a.isPanEnabled()&&(a.onEndPan(e._interactor),a.endInteraction())}e._interactor.cancelAnimation(t.handleStartPan),t.invokeEndInteractionEvent(te)},t.handlePinch=n=>{let a=e.gestureManipulators.length,o=0;for(;a--;){const i=e.gestureManipulators[a];i&&i.isPinchEnabled()&&(i.onPinch(e._interactor,e.getRenderer(n),n.scale),o++)}o&&t.invokeInteractionEvent(b)},t.handlePan=n=>{const a=e.getRenderer(n);let o=e.gestureManipulators.length,i=0;for(;o--;){const u=e.gestureManipulators[o];u&&u.isPanEnabled()&&(u.onPan(e._interactor,a,n.translation),i++)}i&&t.invokeInteractionEvent(b)},t.handleRotate=n=>{let a=e.gestureManipulators.length,o=0;for(;a--;){const i=e.gestureManipulators[a];i&&i.isRotateEnabled()&&(i.onRotate(e._interactor,e.getRenderer(n),n.rotation),o++)}o&&t.invokeInteractionEvent(b)}}var Er=t=>({cachedMousePosition:null,currentManipulator:null,currentWheelManipulator:null,centerOfRotation:[0,0,0],rotationFactor:1,...t});function ct(t,e,r={}){Object.assign(e,Er(r)),xe.extend(t,e,r),v.setGet(t,e,["rotationFactor"]),v.get(t,e,["mouseManipulators","keyboardManipulators","vrManipulators","gestureManipulators"]),v.setGetArray(t,e,["centerOfRotation"],3),xr(t,e)}var Rr=v.newInstance(ct,"vtkInteractorStyleManipulator"),_r={newInstance:Rr,extend:ct,...Cr};function Mr(t,e){e.classHierarchy.push("vtkCompositeCameraManipulator"),t.computeDisplayCenter=(r,s)=>{const n=r.computeWorldToDisplay(s,e.center[0],e.center[1],e.center[2]);e.displayCenter[0]=n[0],e.displayCenter[1]=n[1]}}var Vr={center:[0,0,0],rotationFactor:1,displayCenter:[0,0]};function Dr(t,e,r={}){Object.assign(e,Vr,r),v.setGet(t,e,["rotationFactor"]),v.setGetArray(t,e,["displayCenter"],2),v.setGetArray(t,e,["center"],3),Mr(t,e)}var Ee={extend:Dr};function Br(t,e){e.classHierarchy.push("vtkCompositeMouseManipulator"),t.startInteraction=()=>{},t.endInteraction=()=>{},t.onButtonDown=(r,s,n)=>{},t.onButtonUp=r=>{},t.onMouseMove=(r,s,n)=>{},t.onStartScroll=(r,s,n)=>{},t.onScroll=(r,s,n)=>{},t.onEndScroll=r=>{},t.isDragEnabled=()=>e.dragEnabled,t.isScrollEnabled=()=>e.scrollEnabled}var mr={button:1,shift:!1,control:!1,alt:!1,dragEnabled:!0,scrollEnabled:!1};function Or(t,e,r={}){Object.assign(e,mr,r),v.setGet(t,e,["button","shift","control","alt"]),v.set(t,e,["dragEnabled","scrollEnabled"]),Br(t,e)}var Re={extend:Or};function Ur(t,e){e.classHierarchy.push("vtkMouseCameraTrackballRotateManipulator");const r=new Float64Array(3),s=new Float64Array(3),n=new Float64Array(3),a=new Float64Array(16),o=new Float64Array(3),i=new Float64Array(3),u=new Float64Array(3);t.onButtonDown=(p,c,l)=>{e.previousPosition=l},t.onMouseMove=(p,c,l)=>{if(!l)return;const g=c.getActiveCamera(),f=g.getPosition(),h=g.getFocalPoint();de(a);const{center:S,rotationFactor:x}=e;e.useFocalPointAsCenterOfRotation&&(S[0]=h[0],S[1]=h[1],S[2]=h[2]);const C=e.previousPosition.x-l.x,_=e.previousPosition.y-l.y,R=p.getView().getViewportSize(c),M=g.getViewUp();if(e.useWorldUpVec){const T=new Float64Array(3);yt(T,e.worldUpVec),Ct(T,Ve(f,e.worldUpVec)/Ve(e.worldUpVec,e.worldUpVec)),xt(S,T,T),X(a,a,T),ue(a,a,le(360*C/R[0]*x),e.worldUpVec),T[0]=-T[0],T[1]=-T[1],T[2]=-T[2],X(a,a,T),X(a,a,S)}else X(a,a,S),ue(a,a,le(360*C/R[0]*x),M);ze(g.getDirectionOfProjection(),M,o),ue(a,a,le(-360*_/R[1]*x),o),i[0]=-S[0],i[1]=-S[1],i[2]=-S[2],X(a,a,i),pe(r,f,a),pe(s,h,a),u[0]=M[0]+f[0],u[1]=M[1]+f[1],u[2]=M[2]+f[2],pe(n,u,a),g.setPosition(r[0],r[1],r[2]),g.setFocalPoint(s[0],s[1],s[2]),g.setViewUp(n[0]-r[0],n[1]-r[1],n[2]-r[2]),g.orthogonalizeViewUp(),c.resetCameraClippingRange(),p.getLightFollowCamera()&&c.updateLightsGeometryToFollowCamera(),e.previousPosition=l}}var Fr={useWorldUpVec:!1,worldUpVec:[0,1,0],useFocalPointAsCenterOfRotation:!1};function ut(t,e,r={}){Object.assign(e,Fr,r),v.obj(t,e),Re.extend(t,e,r),Ee.extend(t,e,r),v.setGet(t,e,["useWorldUpVec"]),v.setGetArray(t,e,["worldUpVec"],3),v.setGet(t,e,["useFocalPointAsCenterOfRotation"]),Ur(t,e)}var Pr=v.newInstance(ut,"vtkMouseCameraTrackballRotateManipulator"),Gr={newInstance:Pr,extend:ut};function Lr(t,e){e.classHierarchy.push("vtkMouseCameraTrackballZoomManipulator"),t.onButtonDown=(r,s,n)=>{e.previousPosition=n;const a=r.getView().getViewportSize(s),o=s.getActiveCamera(),i=e.flipDirection?-1:1;o.getParallelProjection()?e.zoomScale=1.5/a[1]*i:e.zoomScale=1.5*(o.getClippingRange()[1]/a[1])*i},t.onMouseMove=(r,s,n)=>{if(!n)return;const a=e.previousPosition.y-n.y,o=s.getActiveCamera();if(o.getParallelProjection()){const i=a*e.zoomScale;o.setParallelScale((1-i)*o.getParallelScale())}else{const i=o.getPosition(),u=o.getFocalPoint(),p=o.getDirectionOfProjection(),c=a*e.zoomScale;let l=c*p[0];i[0]+=l,u[0]+=l,l=c*p[1],i[1]+=l,u[1]+=l,l=c*p[2],i[2]+=l,u[2]+=l,o.getFreezeFocalPoint()||o.setFocalPoint(u[0],u[1],u[2]),o.setPosition(i[0],i[1],i[2]),s.resetCameraClippingRange()}r.getLightFollowCamera()&&s.updateLightsGeometryToFollowCamera(),e.previousPosition=n},t.onScroll=(r,s,n)=>{if(!n)return;const a=s.getActiveCamera(),o=1-n/10;a.getParallelProjection()?a.setParallelScale(a.getParallelScale()/o):(a.dolly(o),s.resetCameraClippingRange()),r.getLightFollowCamera()&&s.updateLightsGeometryToFollowCamera()}}var kr={zoomScale:0,flipDirection:!1};function lt(t,e,r={}){Object.assign(e,kr,r),v.obj(t,e),Re.extend(t,e,r),Ee.extend(t,e,r),v.setGet(t,e,["flipDirection"]),Lr(t,e)}var Wr=v.newInstance(lt,"vtkMouseCameraTrackballZoomManipulator"),zr={newInstance:Wr,extend:lt};function Nr(t,e){e.classHierarchy.push("vtkMouseCameraTrackballPanManipulator"),t.onButtonDown=(r,s,n)=>{e.previousPosition=n},t.onMouseMove=(r,s,n)=>{if(!n)return;const a=n,o=e.previousPosition;e.previousPosition=n;const i=s.getActiveCamera(),u=i.getPosition(),p=i.getFocalPoint();if(i.getParallelProjection()){i.orthogonalizeViewUp();const c=i.getViewUp(),l=i.getViewPlaneNormal(),g=[0,0,0];ze(l,c,g);const f=r.getView().getViewportSize(s)[1];let h=(a.x-o.x)/f,S=(o.y-a.y)/f;const x=i.getParallelScale();h*=x*2,S*=x*2;let C=g[0]*h+c[0]*S;u[0]+=C,p[0]+=C,C=g[1]*h+c[1]*S,u[1]+=C,p[1]+=C,C=g[2]*h+c[2]*S,u[2]+=C,p[2]+=C,i.setPosition(u[0],u[1],u[2]),i.setFocalPoint(p[0],p[1],p[2])}else{const{center:c}=e,l=r.getInteractorStyle(),g=l.computeWorldToDisplay(s,c[0],c[1],c[2])[2],f=l.computeDisplayToWorld(s,a.x,a.y,g),h=l.computeDisplayToWorld(s,o.x,o.y,g),S=[u[0]+(h[0]-f[0]),u[1]+(h[1]-f[1]),u[2]+(h[2]-f[2])],x=[p[0]+(h[0]-f[0]),p[1]+(h[1]-f[1]),p[2]+(h[2]-f[2])];i.setPosition(S[0],S[1],S[2]),i.setFocalPoint(x[0],x[1],x[2])}s.resetCameraClippingRange(),r.getLightFollowCamera()&&s.updateLightsGeometryToFollowCamera()}}var $r={};function pt(t,e,r={}){Object.assign(e,$r,r),v.obj(t,e),Ee.extend(t,e,r),Re.extend(t,e,r),Nr(t,e)}var Hr=v.newInstance(pt,"vtkMouseCameraTrackballPanManipulator"),Kr={newInstance:Hr,extend:pt};const Pe=12;function Yr(t,e){const r=dr.newInstance({background:[0,0,0]});r.setContainer(t),r.resize();const s=r.getRenderer(),n=r.getRenderWindow();let a=e.ghost,o=Math.max(0,Math.min(e.startK,e.slices-1));const[i,u]=e.range,p=kt.newInstance();p.setInputData(e.imageData),p.setSampleDistance?.(1.2);const c=Wt.newInstance();c.setMapper(p);const l=zt.newInstance();l.addRGBPoint(i,.6,.6,.6),l.addRGBPoint(u,1,1,1);const g=Nt.newInstance(),f=c.getProperty();f.setRGBTransferFunction(0,l),f.setScalarOpacity(0,g),f.setScalarOpacityUnitDistance(0,3),f.setInterpolationTypeToLinear();const h=()=>{g.removeAllPoints(),a===null||a<=0?(g.addPoint(i,0),g.addPoint(u,0)):(g.addPoint(i,0),g.addPoint(i+(u-i)*.4,a*.25),g.addPoint(u,a))};h(),s.addVolume(c);const S=$t.newInstance();S.setInputData(e.imageData),S.setKSlice(o);const x=Ht.newInstance();x.setMapper(S);const C=x.getProperty(),_=e.voi?e.voi.upper-e.voi.lower:u-i,R=e.voi?(e.voi.upper+e.voi.lower)/2:(u+i)/2;C.setColorWindow(_),C.setColorLevel(R),s.addActor(x),(()=>{s.resetCamera();const w=s.getActiveCamera();w.getFocalPoint();const D=w.getDistance();w.azimuth(30),w.elevation(12),w.setDistance(D*1.05),w.zoom(1.4),s.resetCameraClippingRange()})();const T=_r.newInstance(),U=Gr.newInstance({button:1}),V=zr.newInstance({button:3}),d=Kr.newInstance({button:2});T.addMouseManipulator(U),T.addMouseManipulator(V),T.addMouseManipulator(d),r.getInteractor().setInteractorStyle(T),n.render();const m=w=>{const D=Math.max(0,Math.min(w,e.slices-1));D!==o&&(o=D,S.setKSlice(D),n.render())},O=w=>{w.preventDefault();const D=o+(w.deltaY>0?1:-1);m(D),e.onSweep(o)};t.addEventListener("wheel",O,{passive:!1});let G=null;const j=w=>((w.touches[0]?.clientY??0)+(w.touches[1]?.clientY??0))/2,L=w=>{if(w.touches.length!==2){G=null;return}G=j(w),w.preventDefault(),w.stopPropagation()},K=w=>{if(G===null||w.touches.length!==2)return;w.preventDefault(),w.stopPropagation();const D=j(w)-G,y=Math.trunc(D/Pe);y!==0&&(G+=y*Pe,m(o+y),e.onSweep(o))},k=w=>{w.touches.length<2&&(G=null)};return t.addEventListener("touchstart",L,{capture:!0,passive:!1}),t.addEventListener("touchmove",K,{capture:!0,passive:!1}),t.addEventListener("touchend",k,{capture:!0}),t.addEventListener("touchcancel",k,{capture:!0}),{sweep:m,ghost_set:w=>{a=w===null?null:Math.max(0,Math.min(1,w)),h(),n.render()},wl_set:(w,D)=>{C.setColorWindow(D-w),C.setColorLevel((D+w)/2),n.render()},resize:()=>{r.resize(),n.render()},slice_get:()=>o,dispose:()=>{t.removeEventListener("wheel",O),t.removeEventListener("touchstart",L,{capture:!0}),t.removeEventListener("touchmove",K,{capture:!0}),t.removeEventListener("touchend",k,{capture:!0}),t.removeEventListener("touchcancel",k,{capture:!0});try{s.removeVolume(c),s.removeActor(x)}catch{}try{r.delete()}catch{}}}}export{Yr as slabScene_open};
559
+ `;function kn(t,e){e.classHierarchy.push("vtkForwardPass"),t.traverse=(r,s=null)=>{if(e.deleted)return;e._currentParent=s,t.setCurrentOperation("buildPass"),r.traverse(t),e.opaquePass||(e.opaquePass=dn.newInstance());const n=r.getRenderable().getNumberOfLayers(),a=r.getChildren();for(let o=0;o<n;o++)for(let i=0;i<a.length;i++){const u=a[i],p=r.getRenderable().getRenderers()[i];p.getDraw()&&p.getLayer()===o&&(e.opaqueActorCount=0,e.translucentActorCount=0,e.volumes=[],t.setCurrentOperation("queryPass"),u.traverse(t),t.setCurrentOperation("cameraPass"),u.traverse(t),e.opaquePass.traverse(u,r),e.translucentActorCount>0&&(e.translucentPass||(e.translucentPass=xn.newInstance()),e.translucentPass.setColorTextureView(e.opaquePass.getColorTextureView()),e.translucentPass.setDepthTextureView(e.opaquePass.getDepthTextureView()),e.translucentPass.traverse(u,r)),e.volumes.length>0&&(e.volumePass||(e.volumePass=Gn.newInstance()),e.volumePass.setColorTextureView(e.opaquePass.getColorTextureView()),e.volumePass.setDepthTextureView(e.opaquePass.getDepthTextureView()),e.volumePass.setVolumes(e.volumes),e.volumePass.traverse(u,r)),t.finalPass(r,u))}},t.finalPass=(r,s)=>{e._finalBlitEncoder||t.createFinalBlitEncoder(r),e._finalBlitOutputTextureView.createFromTextureHandle(r.getCurrentTexture(),{depth:1,format:r.getPresentationFormat()}),e._finalBlitEncoder.attachTextureViews(),e._finalBlitEncoder.begin(r.getCommandEncoder()),s.scissorAndViewport(e._finalBlitEncoder),e._fullScreenQuad.prepareAndDraw(e._finalBlitEncoder),e._finalBlitEncoder.end()},t.createFinalBlitEncoder=r=>{e._finalBlitEncoder=H.newInstance({label:"forwardPassBlit"}),e._finalBlitEncoder.setDescription({colorAttachments:[{view:null,loadOp:"load",storeOp:"store"}]}),e._finalBlitEncoder.setPipelineHash("fpf"),e._finalBlitEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:r.getPresentationFormat(),blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha"}}}]}}),e._fsqSampler=He.newInstance({label:"finalPassSampler"}),e._fsqSampler.create(r.getDevice(),{minFilter:"linear",magFilter:"linear"}),e._fullScreenQuad=se.newInstance(),e._fullScreenQuad.setDevice(r.getDevice()),e._fullScreenQuad.setPipelineHash("fpfsq"),e._fullScreenQuad.setTextureViews([e.opaquePass.getColorTextureView()]),e._fullScreenQuad.setAdditionalBindables([e._fsqSampler]),e._fullScreenQuad.setFragmentShaderTemplate(Ln),e._fullScreenQuad.getShaderReplacements().set("replaceShaderTCoord",(s,n)=>{const a=n.getShaderDescription("vertex");a.hasOutput("tcoordVS")||a.addOutput("vec2<f32>","tcoordVS"),n.getShaderDescription("fragment").addBuiltinInput("vec4<f32>","@builtin(position) fragPos")}),e._finalBlitOutputTextureView=Bt.newInstance(),e._finalBlitEncoder.setColorTextureView(0,e._finalBlitOutputTextureView)},t.incrementOpaqueActorCount=()=>e.opaqueActorCount++,t.incrementTranslucentActorCount=()=>e.translucentActorCount++,t.addVolume=r=>{e.volumes.push(r)},t.releaseGraphicsResources=()=>{e.opaquePass?.releaseGraphicsResources?.(),e.translucentPass?.releaseGraphicsResources?.(),e.volumePass?.releaseGraphicsResources?.(),e.opaquePass=null,e.translucentPass=null,e.volumePass=null,e._finalBlitEncoder=null,e._finalBlitOutputTextureView=null,e._fullScreenQuad=null,e._fsqSampler=null}}var Wn={opaqueActorCount:0,translucentActorCount:0,volumes:null,opaqueRenderEncoder:null,translucentPass:null,volumePass:null};function Ae(t,e,r={}){Object.assign(e,Wn,r),Z.extend(t,e,r),v.setGet(t,e,["opaquePass","translucentPass","volumePass"]),kn(t,e)}var zn=v.newInstance(Ae,"vtkForwardPass"),Nn={newInstance:zn,extend:Ae},{VtkDataTypes:I}=Tt;function $n(t,e){e.classHierarchy.push("vtkWebGPUTextureManager");function r(n){if(n.imageData){n.dataArray=n.imageData.getPointData().getScalars(),n.time=n.dataArray.getMTime(),n.nativeArray=n.dataArray.getData();const a=n.imageData.getDimensions();switch(n.width=a[0],n.height=a[1],n.depth=a[2],n.dataArray.getNumberOfComponents()){case 1:n.format="r";break;case 2:n.format="rg";break;default:n.format="rgba";break}switch(n.dataArray.getDataType()){case I.UNSIGNED_CHAR:n.format+="8unorm";break;case I.FLOAT:case I.UNSIGNED_INT:case I.INT:case I.DOUBLE:case I.UNSIGNED_SHORT:case I.SHORT:default:n.format+="16float";break}}n.image&&(n.width=n.image.width,n.height=n.image.height,n.depth=1,n.format="rgba8unorm",n.flip=!0,n.usage=GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT),n.jsImageData&&(n.width=n.jsImageData.width,n.height=n.jsImageData.height,n.depth=1,n.format="rgba8unorm",n.flip=!0,n.nativeArray=n.jsImageData.data,n.usage=GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT),n.imageBitmap&&(n.width=n.imageBitmap.width,n.height=n.imageBitmap.height,n.depth=1,n.format="rgba8unorm",n.flip=!0,n.usage=GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT),n.canvas&&(n.width=n.canvas.width,n.height=n.canvas.height,n.depth=1,n.format="rgba8unorm",n.flip=!0,n.usage=GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT)}function s(n){const a=$.newInstance({label:n.label});return a.create(e.device,{width:n.width,height:n.height,depth:n.depth,format:n.format,usage:n.usage,mipLevel:n.mipLevel}),(n.nativeArray||n.image||n.canvas||n.imageBitmap)&&a.writeImageData(n),a}t.getTexture=n=>n.hash?e.device.getCachedObject(n.hash,s,n):s(n),t.getTextureForImageData=n=>{const a={time:n.getMTime()};return a.imageData=n,r(a),a.hash=a.time+a.format+a.mipLevel,e.device.getTextureManager().getTexture(a)},t.getTextureForVTKTexture=(n,a=void 0)=>{const o={time:n.getMTime(),label:a};return n.getInputData()?o.imageData=n.getInputData():n.getImage()?o.image=n.getImage():n.getJsImageData()?o.jsImageData=n.getJsImageData():n.getImageBitmap()?o.imageBitmap=n.getImageBitmap():n.getCanvas()&&(o.canvas=n.getCanvas()),r(o),o.mipLevel=n.getMipLevel(),o.hash=o.time+o.format+o.mipLevel,e.device.getTextureManager().getTexture(o)}}var Hn={handle:null,device:null};function et(t,e,r={}){Object.assign(e,Hn,r),v.obj(t,e),v.setGet(t,e,["device"]),$n(t,e)}var Kn=v.newInstance(et),bn={newInstance:Kn,extend:et},In=class extends Map{constructor(){super(),this.registry=new FinalizationRegistry(t=>{const e=super.get(t);e&&e.deref&&e.deref()===void 0&&super.delete(t)})}getValue(t){const e=super.get(t);if(e){const r=e.deref();if(r!==void 0)return r;super.delete(t)}}setValue(t,e){let r;return e&&typeof e=="object"&&(r=new WeakRef(e),this.registry.register(e,t),super.set(t,r)),r}};function jn(t,e){e.classHierarchy.push("vtkWebGPUDevice"),t.initialize=r=>{e.handle=r},t.createCommandEncoder=()=>e.handle.createCommandEncoder(),t.submitCommandEncoder=r=>{e.handle.queue.submit([r.finish()])},t.getShaderModule=r=>e.shaderCache.getShaderModule(r),t.getBindGroupLayout=r=>{if(!r.entries)return null;for(let a=0;a<r.entries.length;a++){const o=r.entries[a];o.binding=o.binding||0,o.visibility=o.visibility||GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT}const s=JSON.stringify(r);for(let a=0;a<e.bindGroupLayouts.length;a++)if(e.bindGroupLayouts[a].sval===s)return e.bindGroupLayouts[a].layout;const n=e.handle.createBindGroupLayout(r);return e.bindGroupLayouts.push({sval:s,layout:n}),n},t.getBindGroupLayoutDescription=r=>{for(let s=0;s<e.bindGroupLayouts.length;s++)if(e.bindGroupLayouts[s].layout===r)return e.bindGroupLayouts[s].sval;return vtkErrorMacro("layout not found"),console.trace(),null},t.getPipeline=r=>r in e.pipelines?e.pipelines[r]:null,t.createPipeline=(r,s)=>{s.initialize(t,r),e.pipelines[r]=s},t.onSubmittedWorkDone=()=>e.handle.queue.onSubmittedWorkDone(),t.hasCachedObject=r=>e.objectCache.getValue(r),t.getCachedObject=(r,s,...n)=>{if(!r)return vtkErrorMacro("attempt to cache an object without a hash"),null;const a=e.objectCache.getValue(r);if(a)return a;const o=s(...n);return e.objectCache.setValue(r,o),o}}var Qn={handle:null,pipelines:null,shaderCache:null,bindGroupLayouts:null,bufferManager:null,textureManager:null};function tt(t,e,r={}){Object.assign(e,Qn,r),Le(t,e),We(t,e,["handle"]),ke(t,e,["bufferManager","shaderCache","textureManager"]),e.objectCache=new In,e.shaderCache=B.newInstance(),e.shaderCache.setDevice(t),e.bindGroupLayouts=[],e.bufferManager=Ke.newInstance(),e.bufferManager.setDevice(t),e.textureManager=bn.newInstance(),e.textureManager.setDevice(t),e.pipelines={},jn(t,e)}var Yn=Ge(tt,"vtkWebGPUDevice"),Xn={newInstance:Yn,extend:tt};function Zn(t,e){e.classHierarchy.push("vtkWebGPUHardwareSelectionPass"),t.traverse=(r,s)=>{if(e.deleted)return;e._currentParent=null,t.setCurrentOperation("buildPass"),r.traverse(t);const n=r.getDevice();if(e.selectionRenderEncoder)e.colorTexture.resize(r.getCanvas().width,r.getCanvas().height),e.depthTexture.resizeToMatch(e.colorTexture);else{t.createRenderEncoder(),e.colorTexture=$.newInstance({label:"hardwareSelectorColor"}),e.colorTexture.create(n,{width:r.getCanvas().width,height:r.getCanvas().height,format:"rgba32uint",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC});const a=e.colorTexture.createView("hardwareSelectColorTexture");e.selectionRenderEncoder.setColorTextureView(0,a),e.depthTexture=$.newInstance({label:"hardwareSelectorDepth"}),e.depthTexture.create(n,{width:r.getCanvas().width,height:r.getCanvas().height,format:"depth32float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC});const o=e.depthTexture.createView("hardwareSelectDepthTexture");e.selectionRenderEncoder.setDepthTextureView(o)}e.selectionRenderEncoder.attachTextureViews(),s.setRenderEncoder(e.selectionRenderEncoder),t.setCurrentOperation("cameraPass"),s.traverse(t),t.setCurrentOperation("opaquePass"),s.traverse(t)},t.createRenderEncoder=()=>{e.selectionRenderEncoder=H.newInstance({label:"HardwareSelectionPass"}),e.selectionRenderEncoder.setPipelineHash("sel"),e.selectionRenderEncoder.setReplaceShaderCodeFunction(s=>{const n=s.getShaderDescription("fragment");n.addOutput("vec4<u32>","outColor");let a=n.getCode();a=B.substitute(a,"//VTK::Select::Impl",[" var compositeID: u32 = 0u;"," var attributeID: u32 = compositeID;"]).result,a=B.substitute(a,"//VTK::RenderEncoder::Impl",["output.outColor = vec4<u32>(mapperUBO.PropID, compositeID, attributeID + 1u, 0u);"]).result,n.setCode(a)});const r=e.selectionRenderEncoder.getDescription();r.colorAttachments[0].clearValue=[0,0,0,0],e.selectionRenderEncoder.setPipelineSettings({primitive:{cullMode:"none"},depthStencil:{depthWriteEnabled:!0,depthCompare:"greater",format:"depth32float"},fragment:{targets:[{format:"rgba32uint",blend:void 0}]}})}}var Jn={selectionRenderEncoder:null,colorTexture:null,depthTexture:null};function nt(t,e,r={}){Object.assign(e,Jn,r),Z.extend(t,e,r),v.get(t,e,["colorTexture","depthTexture"]),Zn(t,e)}var qn=v.newInstance(nt,"vtkWebGPUHardwareSelectionPass"),An={newInstance:qn,extend:nt},{SelectionContent:er,SelectionField:Oe}=be,{FieldAssociations:Ue}=wt,{vtkErrorMacro:rt}=v;function tr(t){return`${t.propID} ${t.compositeID}`}function he(t,e,r,s){const n=((r.height-e-1)*r.colorBufferWidth+t)*4+s;return r.colorValues[n]}function nr(t,e,r,s){{if(s[0]=e[0],s[1]=e[1],e[0]<0||e[0]>=t.width||e[1]<0||e[1]>=t.height)return null;const n=he(e[0],e[1],t,0);if(n<=0||n-1>=(t.props?.length??0))return null;const a={};a.propID=n-1,a.prop=t.props?.[a.propID];let o=he(e[0],e[1],t,1);(o<0||o>16777215)&&(o=0),a.compositeID=o-1;let i=he(e[0],e[1],t,2);if(i<1&&(i=o),a.attributeID=i-1,t.captureZValues){const u=(t.height-e[1]-1)*t.zbufferBufferWidth+e[0];a.zValue=t.depthValues[u],a.zValue=t.webGPURenderer.convertToOpenGLDepth(a.zValue),a.displayPosition=e}return a}}function rr(t,e,r){const s=[];let n=0;return e.forEach((a,o)=>{const i=be.newInstance();switch(i.setContentType(er.INDICES),t){case Ue.FIELD_ASSOCIATION_CELLS:i.setFieldType(Oe.CELL);break;case Ue.FIELD_ASSOCIATION_POINTS:i.setFieldType(Oe.POINT);break;default:rt("Unknown field association")}i.getProperties().propID=a.info.propID,i.getProperties().prop=a.info.prop,i.getProperties().compositeID=a.info.compositeID,i.getProperties().attributeID=a.info.attributeID,i.getProperties().pixelCount=a.pixelCount,r.captureZValues&&(i.getProperties().displayPosition=[a.info.displayPosition[0],a.info.displayPosition[1],a.info.zValue],i.getProperties().worldPosition=r.webGPURenderWindow.displayToWorld(a.info.displayPosition[0],a.info.displayPosition[1],a.info.zValue,r.renderer)),i.setSelectionList(a.attributeIDs),s[n]=i,n++}),s}function ar(t,e,r,s,n){const a=Math.floor(e),o=Math.floor(r),i=Math.floor(s),u=Math.floor(n),p=new Map,c=[0,0];for(let l=o;l<=u;l++)for(let g=a;g<=i;g++){const f=nr(t,[g,l],0,c);if(f){const h=tr(f);if(!p.has(h))p.set(h,{info:f,pixelCount:1,attributeIDs:[f.attributeID]});else{const S=p.get(h);S.pixelCount++,t.captureZValues&&f.zValue<S.info.zValue&&(S.info=f),S.attributeIDs.indexOf(f.attributeID)===-1&&S.attributeIDs.push(f.attributeID)}}}return rr(t.fieldAssociation,p,t)}function sr(t,e){e.classHierarchy.push("vtkWebGPUHardwareSelector"),t.getPropIDForSelection=(r,s=null)=>{if(e._selectionPropMap.has(r))return e._selectionPropMap.get(r);const n=e._selectionProps.length;return e._selectionPropMap.set(r,n),e._selectionProps.push(s),n},t.endSelection=()=>{e.WebGPURenderer.setSelector(null)},t.getSourceDataAsync=async r=>{if(!r||!e._WebGPURenderWindow)return rt("Renderer and view must be set before calling Select."),!1;e._WebGPURenderWindow.getRenderable().preRender(),e._WebGPURenderWindow.getInitialized()||(e._WebGPURenderWindow.initialize(),await new Promise(h=>{e._WebGPURenderWindow.onInitialized(h)}));const s=e._WebGPURenderWindow.getViewNodeFor(r);if(!s)return!1;const n=s.getSuppressClear(),a=s.getSelector();e._selectionPropMap.clear(),e._selectionProps=[],s.setSuppressClear(!0),s.setSelector(t);try{e._selectionPass.traverse(e._WebGPURenderWindow,s)}finally{s.setSelector(a),s.setSuppressClear(n)}const o=e._WebGPURenderWindow.getDevice(),i=e._selectionPass.getColorTexture(),u=e._selectionPass.getDepthTexture(),p={area:[0,0,i.getWidth()-1,i.getHeight()-1],captureZValues:e.captureZValues,fieldAssociation:e.fieldAssociation,props:[...e._selectionProps],renderer:r,webGPURenderer:s,webGPURenderWindow:e._WebGPURenderWindow,width:i.getWidth(),height:i.getHeight()};p.colorBufferWidth=16*Math.floor((p.width+15)/16),p.colorBufferSizeInBytes=p.colorBufferWidth*p.height*4*4;const c=Te.newInstance({label:"hardwareSelectColorBuffer"});c.setDevice(o),c.create(p.colorBufferSizeInBytes,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);const l=e._WebGPURenderWindow.getCommandEncoder();l.copyTextureToBuffer({texture:i.getHandle()},{buffer:c.getHandle(),bytesPerRow:16*p.colorBufferWidth,rowsPerImage:p.height},{width:p.width,height:p.height,depthOrArrayLayers:1});let g;e.captureZValues&&(p.zbufferBufferWidth=64*Math.floor((p.width+63)/64),g=Te.newInstance({label:"hardwareSelectDepthBuffer"}),g.setDevice(o),p.zbufferSizeInBytes=p.height*p.zbufferBufferWidth*4,g.create(p.zbufferSizeInBytes,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST),l.copyTextureToBuffer({texture:u.getHandle(),aspect:"depth-only"},{buffer:g.getHandle(),bytesPerRow:4*p.zbufferBufferWidth,rowsPerImage:p.height},{width:p.width,height:p.height,depthOrArrayLayers:1})),o.submitCommandEncoder(l);const f=c.mapAsync(GPUMapMode.READ);if(e.captureZValues){const h=g.mapAsync(GPUMapMode.READ);await Promise.all([f,h]),p.depthValues=new Float32Array(g.getMappedRange().slice()),g.unmap()}else await f;return p.colorValues=new Uint32Array(c.getMappedRange().slice()),c.unmap(),p.generateSelection=(h,S,x,C)=>ar(p,h,S,x,C),p}}var or={_selectionPropMap:null,_selectionProps:null};function at(t,e,r={}){Object.assign(e,or,r),mt.extend(t,e,r),e._selectionPass=An.newInstance(),e._selectionPropMap=new Map,e._selectionProps=[],v.setGet(t,e,["_WebGPURenderWindow"]),v.moveToProtected(t,e,["WebGPURenderWindow"]),sr(t,e)}var ir=v.newInstance(at,"vtkWebGPUHardwareSelector"),st={newInstance:ir,extend:at},{vtkErrorMacro:Fe,vtkWarningMacro:cr}=v,ur={position:"absolute",top:0,left:0,width:"100%",height:"100%"};function lr(t,e){e.classHierarchy.push("vtkWebGPURenderWindow"),t.getViewNodeFactory=()=>e.myFactory;function r(c,l=new Set){if(!c||l.has(c))return;l.add(c);const g=c.getChildren?.()||[];for(let f=0;f<g.length;f++){const h=g[f];h?.releaseGraphicsResources?.(),r(h,l)}}function s(){const c=t.onInitialized(()=>{c.unsubscribe(),e.deleted||t.traverseAllPasses()})}function n(c,l){if(e.deleted||l!==e.deviceGeneration||e.handlingDeviceLost)return;e.handlingDeviceLost=!0,e.deviceLostInfo=c;const g=c?.reason??"unknown",f=c?.message||"WebGPU device was lost.";cr(`WebGPU device lost (${g}): ${f}`),t.releaseGraphicsResources(),t.invokeDeviceLost({reason:g,message:f,recoverable:g!=="destroyed"}),g!=="destroyed"&&(s(),t.initialize()),e.handlingDeviceLost=!1}function a(c,l){c.lost.then(g=>{n(g,l)})}const o=[0,0];function i(){e.renderable&&(e.size[0]!==o[0]||e.size[1]!==o[1])&&(o[0]=e.size[0],o[1]=e.size[1],e.canvas.setAttribute("width",e.size[0]),e.canvas.setAttribute("height",e.size[1]),t.recreateSwapChain()),e.viewStream&&e.viewStream.setSize(e.size[0],e.size[1]),e.canvas.style.display=e.useOffScreen?"none":"block",e.el&&(e.el.style.cursor=e.cursorVisibility?e.cursor:"none"),e.containerSize=null}t.onModified(i),t.recreateSwapChain=()=>{e.context&&(e.context.unconfigure(),e.presentationFormat=navigator.gpu.getPreferredCanvasFormat(e.adapter),e.context.configure({device:e.device.getHandle(),format:e.presentationFormat,alphaMode:"premultiplied",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_DST,width:e.size[0],height:e.size[1]}),e._configured=!0)},t.getCurrentTexture=()=>e.context.getCurrentTexture(),t.buildPass=c=>{if(c){if(!e.renderable)return;t.prepareNodes(),t.addMissingNodes(e.renderable.getRenderersByReference()),t.removeUnusedNodes(),t.initialize()}else e.initialized&&(e._configured||t.recreateSwapChain(),e.commandEncoder=e.device.createCommandEncoder())},t.initialize=()=>{if(!e.initializing){if(e.initializing=!0,e.deviceLostInfo=null,!navigator.gpu){Fe("WebGPU is not enabled.");return}t.create3DContextAsync().then(()=>{e.initialized=!0,!e.deleted&&t.invokeInitialized()})}},t.setContainer=c=>{e.el&&e.el!==c&&(e.canvas.parentNode!==e.el&&Fe("Error: canvas parent node does not match container"),e.el.removeChild(e.canvas),e.el.contains(e.bgImage)&&e.el.removeChild(e.bgImage)),e.el!==c&&(e.el=c,e.el&&(e.el.appendChild(e.canvas),e.useBackgroundImage&&e.el.appendChild(e.bgImage)),t.modified())},t.getContainer=()=>e.el,t.getContainerSize=()=>{if(!e.containerSize&&e.el){const{width:c,height:l}=e.el.getBoundingClientRect();e.containerSize=[c,l]}return e.containerSize||e.size},t.getFramebufferSize=()=>e.size,t.create3DContextAsync=async()=>{if(e.adapter=await navigator.gpu.requestAdapter({powerPreference:"high-performance"}),!e.deleted){if(e.device=Xn.newInstance(),e.device.initialize(await e.adapter.requestDevice({requiredLimits:{maxBufferSize:e.adapter.limits.maxBufferSize,maxStorageBufferBindingSize:e.adapter.limits.maxStorageBufferBindingSize,maxUniformBufferBindingSize:e.adapter.limits.maxUniformBufferBindingSize}})),e.deleted){e.device=null;return}e.deviceGeneration+=1,a(e.device.getHandle(),e.deviceGeneration),e.context=e.canvas.getContext("webgpu")}},t.releaseGraphicsResources=()=>{if(e.renderPasses)for(let l=0;l<e.renderPasses.length;l++)e.renderPasses[l]?.releaseGraphicsResources?.();r(t);const c=Z.newInstance();c.setCurrentOperation("Release"),c.traverse(t,null),e.context&&e.context.unconfigure(),e.adapter=null,e.device=null,e.context=null,e.commandEncoder=null,e._configured=!1,e.initialized=!1,e.initializing=!1},t.setBackgroundImage=c=>{e.bgImage.src=c.src},t.setUseBackgroundImage=c=>{e.useBackgroundImage=c,e.useBackgroundImage&&!e.el.contains(e.bgImage)?e.el.appendChild(e.bgImage):!e.useBackgroundImage&&e.el.contains(e.bgImage)&&e.el.removeChild(e.bgImage)};async function u(c=e.imageFormat){const l=document.createElement("canvas"),g=l.getContext("2d");l.width=e.canvas.width,l.height=e.canvas.height;const f=await t.getPixelsAsync(),h=new ImageData(f.colorValues,f.width,f.height);g.putImageData(h,0,0);const S=e.canvas.getBoundingClientRect();e.renderable.getRenderers().forEach(C=>{C.getViewProps().forEach(_=>{if(_.getContainer){const R=_.getContainer().getElementsByTagName("canvas");for(let M=0;M<R.length;M++){const T=R[M],U=T.getBoundingClientRect(),V=U.x-S.x,d=U.y-S.y;g.drawImage(T,V,d)}}})});const x=l.toDataURL(c);l.remove(),t.invokeImageReady(x)}t.captureNextImage=(c="image/png",{resetCamera:l=!1,size:g=null,scale:f=1}={})=>{if(e.deleted)return null;e.imageFormat=c;const h=e.notifyStartCaptureImage;return e.notifyStartCaptureImage=!0,e._screenshot={size:g||f!==1?g||e.size.map(S=>S*f):null},new Promise((S,x)=>{const C=t.onImageReady(_=>{if(e._screenshot.size===null)e.notifyStartCaptureImage=h,C.unsubscribe(),e._screenshot.placeHolder&&(e.size=e._screenshot.originalSize,t.modified(),e._screenshot.cameras&&e._screenshot.cameras.forEach(({restoreParamsFn:R,arg:M})=>R(M)),t.traverseAllPasses(),e.el.removeChild(e._screenshot.placeHolder),e._screenshot.placeHolder.remove(),e._screenshot=null),S(_);else{const R=document.createElement("img");if(R.style=ur,R.src=_,e._screenshot.placeHolder=e.el.appendChild(R),e.canvas.style.display="none",e._screenshot.originalSize=e.size,e.size=e._screenshot.size,e._screenshot.size=null,t.modified(),l){const M=l!==!0;e._screenshot.cameras=e.renderable.getRenderers().map(T=>{const U=T.getActiveCamera(),V=U.get("focalPoint","position","parallelScale");return{resetCameraArgs:M?{renderer:T}:void 0,resetCameraFn:M?l:T.resetCamera,restoreParamsFn:U.set,arg:JSON.parse(JSON.stringify(V))}}),e._screenshot.cameras.forEach(({resetCameraFn:T,resetCameraArgs:U})=>T(U))}t.traverseAllPasses()}})})},t.traverseAllPasses=()=>{if(!e.deleted)if(e.initialized){if(e.renderPasses)for(let c=0;c<e.renderPasses.length;++c)e.renderPasses[c].traverse(t,null);e.commandEncoder&&(e.device.submitCommandEncoder(e.commandEncoder),e.commandEncoder=null,e.notifyStartCaptureImage&&e.device.onSubmittedWorkDone().then(()=>{u()}))}else{t.initialize();const c=t.onInitialized(()=>{c.unsubscribe(),t.traverseAllPasses()})}},t.setViewStream=c=>{if(e.viewStream===c)return!1;if(e.subscription&&(e.subscription.unsubscribe(),e.subscription=null),e.viewStream=c,e.viewStream){const l=e.renderable.getRenderers()[0];l.getBackgroundByReference()[3]=0,t.setUseBackgroundImage(!0),e.subscription=e.viewStream.onImageReady(g=>t.setBackgroundImage(g.image)),e.viewStream.setSize(e.size[0],e.size[1]),e.viewStream.invalidateCache(),e.viewStream.render(),t.modified()}return!0},t.getUniquePropID=()=>e.nextPropID++,t.getPropFromID=c=>{for(let l=0;l<e.children.length;l++){const g=e.children[l].getPropFromID(c);if(g!==null)return g}return null},t.getPixelsAsync=async()=>{const c=e.device,l=e.renderPasses[0].getOpaquePass().getColorTexture(),g={width:l.getWidth(),height:l.getHeight()};g.colorBufferWidth=32*Math.floor((g.width+31)/32),g.colorBufferSizeInBytes=g.colorBufferWidth*g.height*8;const f=Te.newInstance();f.setDevice(c),f.create(g.colorBufferSizeInBytes,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);const h=e.device.createCommandEncoder();h.copyTextureToBuffer({texture:l.getHandle()},{buffer:f.getHandle(),bytesPerRow:8*g.colorBufferWidth,rowsPerImage:g.height},{width:g.width,height:g.height,depthOrArrayLayers:1}),c.submitCommandEncoder(h),await f.mapAsync(GPUMapMode.READ),g.colorValues=new Uint16Array(f.getMappedRange().slice()),f.unmap();const S=new Uint8ClampedArray(g.height*g.width*4);for(let x=0;x<g.height;x++)for(let C=0;C<g.width;C++){const _=(x*g.width+C)*4,R=(x*g.colorBufferWidth+C)*4;S[_]=255*ae.fromHalf(g.colorValues[R]),S[_+1]=255*ae.fromHalf(g.colorValues[R+1]),S[_+2]=255*ae.fromHalf(g.colorValues[R+2]),S[_+3]=255*ae.fromHalf(g.colorValues[R+3])}return g.colorValues=S,g},t.createSelector=()=>{const c=st.newInstance();return c.setWebGPURenderWindow(t),c};const p=t.setSize;t.setSize=(c,l)=>{const g=p(c,l);return g&&t.invokeWindowResizeEvent({width:c,height:l}),g},t.delete=v.chain(t.delete,t.setViewStream)}var pr={initialized:!1,initializing:!1,handlingDeviceLost:!1,deviceGeneration:0,deviceLostInfo:null,context:null,adapter:null,device:null,canvas:null,cursorVisibility:!0,cursor:"pointer",containerSize:null,renderPasses:[],notifyStartCaptureImage:!1,imageFormat:"image/png",useOffScreen:!1,useBackgroundImage:!1,nextPropID:1,xrSupported:!1,presentationFormat:null};function gr(t,e,r={}){Object.assign(e,pr,r),e.canvas=document.createElement("canvas"),e.canvas.style.width="100%",e.bgImage=new Image,e.bgImage.style.position="absolute",e.bgImage.style.left="0",e.bgImage.style.top="0",e.bgImage.style.width="100%",e.bgImage.style.height="100%",e.bgImage.style.zIndex="-1",Ft.extend(t,e,r),e.myFactory=Pt.newInstance(),e.renderPasses[0]=Nn.newInstance(),e.selector||(e.selector=st.newInstance(),e.selector.setWebGPURenderWindow(t)),v.event(t,e,"imageReady"),v.event(t,e,"initialized"),v.event(t,e,"deviceLost"),v.get(t,e,["commandEncoder","deviceLostInfo","device","presentationFormat","useBackgroundImage","xrSupported"]),v.setGet(t,e,["initialized","context","canvas","device","renderPasses","notifyStartCaptureImage","cursor","useOffScreen"]),v.setGetArray(t,e,["size"],2),v.event(t,e,"windowResizeEvent"),lr(t,e)}var ot=v.newInstance(gr,"vtkWebGPURenderWindow");Ot("WebGPU",ot);Ut("vtkRenderWindow",ot);var fr=It.extractURLParameters();function vr(t,e){const r=t.invokeResize;delete t.invokeResize,e.renderWindow=Gt.newInstance(),e.renderer=Lt.newInstance(),e.renderWindow.addRenderer(e.renderer),e._apiSpecificRenderWindow=e.renderWindow.newAPISpecificView(fr.viewAPI??e.defaultViewAPI),e.renderWindow.addView(e._apiSpecificRenderWindow),e.interactor=Ne.newInstance(),e.interactor.setInteractorStyle(un.newInstance()),e.interactor.setView(e._apiSpecificRenderWindow),e.interactor.initialize(),t.setBackground=e.renderer.setBackground,t.setBackground(...e.background),t.resize=()=>{if(e.container){const s=e.container.getBoundingClientRect(),n=window.devicePixelRatio||1;e._apiSpecificRenderWindow.setSize(Math.floor(s.width*n),Math.floor(s.height*n)),r(),e.renderWindow.render()}},t.setContainer=s=>{e.container&&e.interactor.unbindEvents(e.container),e.container=s,e._apiSpecificRenderWindow.setContainer(e.container),e.container&&e.interactor.bindEvents(e.container)},t.delete=v.chain(t.setContainer,e._apiSpecificRenderWindow.delete,()=>{window.removeEventListener("resize",t.resize)},t.delete),e.listenWindowResize&&window.addEventListener("resize",t.resize),t.resize()}var hr={background:[.32,.34,.43],listenWindowResize:!0,container:null};function it(t,e,r={}){Object.assign(e,hr,r),v.obj(t,e),v.get(t,e,["renderWindow","renderer","_apiSpecificRenderWindow","interactor","container"]),v.moveToProtected(t,e,["_apiSpecificRenderWindow"]),v.event(t,e,"resize"),vr(t,e)}var Sr=v.newInstance(it),dr={newInstance:Sr,extend:it},{vtkDebugMacro:Se}=v,{States:Tr}=xe,ee={type:"StartInteractionEvent"},b={type:"InteractionEvent"},te={type:"EndInteractionEvent"};function we(t,e,r,s,n,a){const o=t.getActiveCamera();let i=o.getFocalPoint();i=e.getInteractorStyle().computeWorldToDisplay(t,i[0],i[1],i[2]);const u=i[2],p=e.getInteractorStyle().computeDisplayToWorld(t,r,s,u),c=e.getInteractorStyle().computeDisplayToWorld(t,n,a,u),l=[c[0]-p[0],c[1]-p[1],c[2]-p[2]];i=o.getFocalPoint();const g=o.getPosition();o.setFocalPoint(l[0]+i[0],l[1]+i[1],l[2]+i[2]),o.setPosition(l[0]+g[0],l[1]+g[1],l[2]+g[2])}function wr(t,e,r,s){const n=r.getActiveCamera();if(n.getParallelProjection()){const a=s.getView(),o=a.getViewportSize(r),i=r.getViewport(),u=a.getSize(),p=o[0],c=o[1],l=p/2,g=c/2,f=e.x-i[0]*u[0],h=e.y-i[1]*u[1];we(r,s,l,g,f,h),n.setParallelScale(n.getParallelScale()/t),we(r,s,f,h,l,g)}else{let a=n.getFocalPoint();const o=n.getViewPlaneNormal();a=s.getInteractorStyle().computeWorldToDisplay(r,a[0],a[1],a[2]);const i=s.getInteractorStyle().computeDisplayToWorld(r,e.x,e.y,a[2]);n.setFocalPoint(i[0],i[1],i[2]),n.dolly(t),r.resetCameraClippingRange();const u=n.getPosition();a=n.getFocalPoint();const p=[0,0,0];let c=o[0]*(a[0]-u[0])+o[1]*(a[1]-u[1])+o[2]*(a[2]-u[2]);c/=o[0]**2+o[1]**2+o[2]**2,p[0]=u[0]+o[0]*c,p[1]=u[1]+o[1]*c,p[2]=u[2]+o[2]*c,n.setFocalPoint(p[0],p[1],p[2]),r.resetCameraClippingRange()}}function yr(t,e,r){if(Number.isNaN(r))return;const s=e.getActiveCamera();s.getParallelProjection()?s.setParallelScale(s.getParallelScale()/r):(s.dolly(r),e.resetCameraClippingRange()),t.getLightFollowCamera()&&e.updateLightsGeometryToFollowCamera()}var Cr={dollyToPosition:wr,translateCamera:we,dollyByFactor:yr};function xr(t,e){e.classHierarchy.push("vtkInteractorStyleManipulator"),e.currentVRManipulators=new Map,e.mouseManipulators=[],e.keyboardManipulators=[],e.vrManipulators=[],e.gestureManipulators=[],e.currentManipulator=null,e.currentWheelManipulator=null,e.centerOfRotation=[0,0,0],e.rotationFactor=1,t.removeAllManipulators=()=>{t.removeAllMouseManipulators(),t.removeAllKeyboardManipulators(),t.removeAllVRManipulators(),t.removeAllGestureManipulators()},t.removeAllMouseManipulators=()=>{e.mouseManipulators=[]},t.removeAllKeyboardManipulators=()=>{e.keyboardManipulators=[]},t.removeAllVRManipulators=()=>{e.vrManipulators=[]},t.removeAllGestureManipulators=()=>{e.gestureManipulators=[]};const r=(n,a)=>{const o=a.indexOf(n);return o===-1?!1:(a.splice(o,1),t.modified(),!0)};t.removeMouseManipulator=n=>r(n,e.mouseManipulators),t.removeKeyboardManipulator=n=>r(n,e.keyboardManipulators),t.removeVRManipulator=n=>r(n,e.vrManipulators),t.removeGestureManipulator=n=>r(n,e.gestureManipulators);const s=(n,a)=>a.indexOf(n)!==-1?!1:(a.push(n),t.modified(),!0);t.addMouseManipulator=n=>s(n,e.mouseManipulators),t.addKeyboardManipulator=n=>s(n,e.keyboardManipulators),t.addVRManipulator=n=>s(n,e.vrManipulators),t.addGestureManipulator=n=>s(n,e.gestureManipulators),t.getNumberOfMouseManipulators=()=>e.mouseManipulators.length,t.getNumberOfKeyboardManipulators=()=>e.keyboardManipulators.length,t.getNumberOfVRManipulators=()=>e.vrManipulators.length,t.getNumberOfGestureManipulators=()=>e.gestureManipulators.length,t.resetCurrentManipulator=()=>{e.currentManipulator=null,e.currentWheelManipulator=null},t.handleLeftButtonPress=n=>{e.previousPosition=n.position,t.onButtonDown(Y.LeftButton,n)},t.handleMiddleButtonPress=n=>{e.previousPosition=n.position,t.onButtonDown(Y.MiddleButton,n)},t.handleRightButtonPress=n=>{e.previousPosition=n.position,t.onButtonDown(Y.RightButton,n)},t.handleButton3D=n=>{if(!n)return;const a=t.findVRManipulator(n.device,n.input,n.pressed);a?(e.currentVRManipulators.set(n.device,a),a.onButton3D(t,e.getRenderer(n),e.state,n),n.pressed?t.startCameraPose():(e.currentVRManipulators.delete(n.device),e.currentVRManipulators.size===0&&t.endCameraPose())):Se("No manipulator found")},t.handleMove3D=n=>{const a=e.currentVRManipulators.get(n.device);a&&e.state===Tr.IS_CAMERA_POSE&&a.onMove3D(t,e.getRenderer(n),e.state,n)},t.onButtonDown=(n,a)=>{e.currentManipulator||(e.currentManipulator=t.findMouseManipulator(n,a.shiftKey,a.controlKey,a.altKey),e.currentManipulator?(e.currentManipulator.setCenter&&e.currentManipulator.setCenter(e.centerOfRotation),e.currentManipulator.setRotationFactor&&e.currentManipulator.setRotationFactor(e.rotationFactor),e.currentManipulator.startInteraction(),e.currentManipulator.onButtonDown(e._interactor,e.getRenderer(a),a.position),e._interactor.requestAnimation(t.onButtonDown),t.invokeStartInteractionEvent(ee)):Se("No manipulator found"))},t.findMouseManipulator=(n,a,o,i)=>{let u=null,p=e.mouseManipulators.length;for(;p--;){const c=e.mouseManipulators[p];c&&c.getButton()===n&&c.getShift()===a&&c.getControl()===o&&c.getAlt()===i&&c.isDragEnabled()&&(u=c)}return u},t.findVRManipulator=(n,a)=>{let o=null,i=e.vrManipulators.length;for(;i--;){const u=e.vrManipulators[i];u&&u.getDevice()===n&&u.getInput()===a&&(o=u)}return o},t.handleLeftButtonRelease=()=>{t.onButtonUp(Y.LeftButton)},t.handleMiddleButtonRelease=()=>{t.onButtonUp(Y.MiddleButton)},t.handleRightButtonRelease=()=>{t.onButtonUp(Y.RightButton)},t.onButtonUp=n=>{e.currentManipulator&&e.currentManipulator.getButton&&e.currentManipulator.getButton()===n&&(e.currentManipulator.onButtonUp(e._interactor),e.currentManipulator.endInteraction(),e._interactor.isPointerLocked()||(e.currentManipulator=null),e._interactor.cancelAnimation(t.onButtonDown),t.invokeEndInteractionEvent(te))},t.handleEndPointerLock=()=>{e.currentManipulator=null},t.handleStartMouseWheel=n=>{if(e.currentWheelManipulator)return;let a=null,o=e.mouseManipulators.length;for(;o--;){const i=e.mouseManipulators[o];i&&i.isScrollEnabled()&&i.getShift()===n.shiftKey&&i.getControl()===n.controlKey&&i.getAlt()===n.altKey&&(a=i)}a?(e.currentWheelManipulator=a,e.currentWheelManipulator.onStartScroll(e._interactor,e.getRenderer(n),n.spinY),e.currentWheelManipulator.startInteraction(),e._interactor.requestAnimation(t.handleStartMouseWheel),t.invokeStartInteractionEvent(ee)):Se("No manipulator found")},t.handleEndMouseWheel=()=>{e.currentWheelManipulator&&e.currentWheelManipulator.onEndScroll&&(e.currentWheelManipulator.onEndScroll(e._interactor),e.currentWheelManipulator.endInteraction(),e.currentWheelManipulator=null,e._interactor.cancelAnimation(t.handleStartMouseWheel),t.invokeEndInteractionEvent(te))},t.handleMouseWheel=n=>{e.currentWheelManipulator&&e.currentWheelManipulator.onScroll&&(e.currentWheelManipulator.onScroll(e._interactor,e.getRenderer(n),n.spinY,e.cachedMousePosition),t.invokeInteractionEvent(b))},t.handleMouseMove=n=>{e.cachedMousePosition=n.position,e.currentManipulator&&e.currentManipulator.onMouseMove&&(e.currentManipulator.onMouseMove(e._interactor,e.getRenderer(n),n.position),t.invokeInteractionEvent(b))},t.handleKeyPress=n=>{e.keyboardManipulators.filter(a=>a.onKeyPress).forEach(a=>{a.onKeyPress(e._interactor,e.getRenderer(n),n.key),t.invokeInteractionEvent(b)})},t.handleKeyDown=n=>{e.keyboardManipulators.filter(a=>a.onKeyDown).forEach(a=>{a.onKeyDown(e._interactor,e.getRenderer(n),n.key),t.invokeInteractionEvent(b)})},t.handleKeyUp=n=>{e.keyboardManipulators.filter(a=>a.onKeyUp).forEach(a=>{a.onKeyUp(e._interactor,e.getRenderer(n),n.key),t.invokeInteractionEvent(b)})},t.handleStartPinch=n=>{t.startDolly();let a=e.gestureManipulators.length;for(;a--;){const o=e.gestureManipulators[a];o&&o.isPinchEnabled()&&(o.onStartPinch(e._interactor,n.scale),o.startInteraction())}e._interactor.requestAnimation(t.handleStartPinch),t.invokeStartInteractionEvent(ee)},t.handleEndPinch=()=>{t.endDolly();let n=e.gestureManipulators.length;for(;n--;){const a=e.gestureManipulators[n];a&&a.isPinchEnabled()&&(a.onEndPinch(e._interactor),a.endInteraction())}e._interactor.cancelAnimation(t.handleStartPinch),t.invokeEndInteractionEvent(te)},t.handleStartRotate=n=>{t.startRotate();let a=e.gestureManipulators.length;for(;a--;){const o=e.gestureManipulators[a];o&&o.isRotateEnabled()&&(o.onStartRotate(e._interactor,n.rotation),o.startInteraction())}e._interactor.requestAnimation(t.handleStartRotate),t.invokeStartInteractionEvent(ee)},t.handleEndRotate=()=>{t.endRotate();let n=e.gestureManipulators.length;for(;n--;){const a=e.gestureManipulators[n];a&&a.isRotateEnabled()&&(a.onEndRotate(e._interactor),a.endInteraction())}e._interactor.cancelAnimation(t.handleStartRotate),t.invokeEndInteractionEvent(te)},t.handleStartPan=n=>{t.startPan();let a=e.gestureManipulators.length;for(;a--;){const o=e.gestureManipulators[a];o&&o.isPanEnabled()&&(o.onStartPan(e._interactor,n.translation),o.startInteraction())}e._interactor.requestAnimation(t.handleStartPan),t.invokeStartInteractionEvent(ee)},t.handleEndPan=()=>{t.endPan();let n=e.gestureManipulators.length;for(;n--;){const a=e.gestureManipulators[n];a&&a.isPanEnabled()&&(a.onEndPan(e._interactor),a.endInteraction())}e._interactor.cancelAnimation(t.handleStartPan),t.invokeEndInteractionEvent(te)},t.handlePinch=n=>{let a=e.gestureManipulators.length,o=0;for(;a--;){const i=e.gestureManipulators[a];i&&i.isPinchEnabled()&&(i.onPinch(e._interactor,e.getRenderer(n),n.scale),o++)}o&&t.invokeInteractionEvent(b)},t.handlePan=n=>{const a=e.getRenderer(n);let o=e.gestureManipulators.length,i=0;for(;o--;){const u=e.gestureManipulators[o];u&&u.isPanEnabled()&&(u.onPan(e._interactor,a,n.translation),i++)}i&&t.invokeInteractionEvent(b)},t.handleRotate=n=>{let a=e.gestureManipulators.length,o=0;for(;a--;){const i=e.gestureManipulators[a];i&&i.isRotateEnabled()&&(i.onRotate(e._interactor,e.getRenderer(n),n.rotation),o++)}o&&t.invokeInteractionEvent(b)}}var Er=t=>({cachedMousePosition:null,currentManipulator:null,currentWheelManipulator:null,centerOfRotation:[0,0,0],rotationFactor:1,...t});function ct(t,e,r={}){Object.assign(e,Er(r)),xe.extend(t,e,r),v.setGet(t,e,["rotationFactor"]),v.get(t,e,["mouseManipulators","keyboardManipulators","vrManipulators","gestureManipulators"]),v.setGetArray(t,e,["centerOfRotation"],3),xr(t,e)}var Rr=v.newInstance(ct,"vtkInteractorStyleManipulator"),_r={newInstance:Rr,extend:ct,...Cr};function Mr(t,e){e.classHierarchy.push("vtkCompositeCameraManipulator"),t.computeDisplayCenter=(r,s)=>{const n=r.computeWorldToDisplay(s,e.center[0],e.center[1],e.center[2]);e.displayCenter[0]=n[0],e.displayCenter[1]=n[1]}}var Vr={center:[0,0,0],rotationFactor:1,displayCenter:[0,0]};function Dr(t,e,r={}){Object.assign(e,Vr,r),v.setGet(t,e,["rotationFactor"]),v.setGetArray(t,e,["displayCenter"],2),v.setGetArray(t,e,["center"],3),Mr(t,e)}var Ee={extend:Dr};function Br(t,e){e.classHierarchy.push("vtkCompositeMouseManipulator"),t.startInteraction=()=>{},t.endInteraction=()=>{},t.onButtonDown=(r,s,n)=>{},t.onButtonUp=r=>{},t.onMouseMove=(r,s,n)=>{},t.onStartScroll=(r,s,n)=>{},t.onScroll=(r,s,n)=>{},t.onEndScroll=r=>{},t.isDragEnabled=()=>e.dragEnabled,t.isScrollEnabled=()=>e.scrollEnabled}var mr={button:1,shift:!1,control:!1,alt:!1,dragEnabled:!0,scrollEnabled:!1};function Or(t,e,r={}){Object.assign(e,mr,r),v.setGet(t,e,["button","shift","control","alt"]),v.set(t,e,["dragEnabled","scrollEnabled"]),Br(t,e)}var Re={extend:Or};function Ur(t,e){e.classHierarchy.push("vtkMouseCameraTrackballRotateManipulator");const r=new Float64Array(3),s=new Float64Array(3),n=new Float64Array(3),a=new Float64Array(16),o=new Float64Array(3),i=new Float64Array(3),u=new Float64Array(3);t.onButtonDown=(p,c,l)=>{e.previousPosition=l},t.onMouseMove=(p,c,l)=>{if(!l)return;const g=c.getActiveCamera(),f=g.getPosition(),h=g.getFocalPoint();de(a);const{center:S,rotationFactor:x}=e;e.useFocalPointAsCenterOfRotation&&(S[0]=h[0],S[1]=h[1],S[2]=h[2]);const C=e.previousPosition.x-l.x,_=e.previousPosition.y-l.y,R=p.getView().getViewportSize(c),M=g.getViewUp();if(e.useWorldUpVec){const T=new Float64Array(3);yt(T,e.worldUpVec),Ct(T,Ve(f,e.worldUpVec)/Ve(e.worldUpVec,e.worldUpVec)),xt(S,T,T),X(a,a,T),ue(a,a,le(360*C/R[0]*x),e.worldUpVec),T[0]=-T[0],T[1]=-T[1],T[2]=-T[2],X(a,a,T),X(a,a,S)}else X(a,a,S),ue(a,a,le(360*C/R[0]*x),M);ze(g.getDirectionOfProjection(),M,o),ue(a,a,le(-360*_/R[1]*x),o),i[0]=-S[0],i[1]=-S[1],i[2]=-S[2],X(a,a,i),pe(r,f,a),pe(s,h,a),u[0]=M[0]+f[0],u[1]=M[1]+f[1],u[2]=M[2]+f[2],pe(n,u,a),g.setPosition(r[0],r[1],r[2]),g.setFocalPoint(s[0],s[1],s[2]),g.setViewUp(n[0]-r[0],n[1]-r[1],n[2]-r[2]),g.orthogonalizeViewUp(),c.resetCameraClippingRange(),p.getLightFollowCamera()&&c.updateLightsGeometryToFollowCamera(),e.previousPosition=l}}var Fr={useWorldUpVec:!1,worldUpVec:[0,1,0],useFocalPointAsCenterOfRotation:!1};function ut(t,e,r={}){Object.assign(e,Fr,r),v.obj(t,e),Re.extend(t,e,r),Ee.extend(t,e,r),v.setGet(t,e,["useWorldUpVec"]),v.setGetArray(t,e,["worldUpVec"],3),v.setGet(t,e,["useFocalPointAsCenterOfRotation"]),Ur(t,e)}var Pr=v.newInstance(ut,"vtkMouseCameraTrackballRotateManipulator"),Gr={newInstance:Pr,extend:ut};function Lr(t,e){e.classHierarchy.push("vtkMouseCameraTrackballZoomManipulator"),t.onButtonDown=(r,s,n)=>{e.previousPosition=n;const a=r.getView().getViewportSize(s),o=s.getActiveCamera(),i=e.flipDirection?-1:1;o.getParallelProjection()?e.zoomScale=1.5/a[1]*i:e.zoomScale=1.5*(o.getClippingRange()[1]/a[1])*i},t.onMouseMove=(r,s,n)=>{if(!n)return;const a=e.previousPosition.y-n.y,o=s.getActiveCamera();if(o.getParallelProjection()){const i=a*e.zoomScale;o.setParallelScale((1-i)*o.getParallelScale())}else{const i=o.getPosition(),u=o.getFocalPoint(),p=o.getDirectionOfProjection(),c=a*e.zoomScale;let l=c*p[0];i[0]+=l,u[0]+=l,l=c*p[1],i[1]+=l,u[1]+=l,l=c*p[2],i[2]+=l,u[2]+=l,o.getFreezeFocalPoint()||o.setFocalPoint(u[0],u[1],u[2]),o.setPosition(i[0],i[1],i[2]),s.resetCameraClippingRange()}r.getLightFollowCamera()&&s.updateLightsGeometryToFollowCamera(),e.previousPosition=n},t.onScroll=(r,s,n)=>{if(!n)return;const a=s.getActiveCamera(),o=1-n/10;a.getParallelProjection()?a.setParallelScale(a.getParallelScale()/o):(a.dolly(o),s.resetCameraClippingRange()),r.getLightFollowCamera()&&s.updateLightsGeometryToFollowCamera()}}var kr={zoomScale:0,flipDirection:!1};function lt(t,e,r={}){Object.assign(e,kr,r),v.obj(t,e),Re.extend(t,e,r),Ee.extend(t,e,r),v.setGet(t,e,["flipDirection"]),Lr(t,e)}var Wr=v.newInstance(lt,"vtkMouseCameraTrackballZoomManipulator"),zr={newInstance:Wr,extend:lt};function Nr(t,e){e.classHierarchy.push("vtkMouseCameraTrackballPanManipulator"),t.onButtonDown=(r,s,n)=>{e.previousPosition=n},t.onMouseMove=(r,s,n)=>{if(!n)return;const a=n,o=e.previousPosition;e.previousPosition=n;const i=s.getActiveCamera(),u=i.getPosition(),p=i.getFocalPoint();if(i.getParallelProjection()){i.orthogonalizeViewUp();const c=i.getViewUp(),l=i.getViewPlaneNormal(),g=[0,0,0];ze(l,c,g);const f=r.getView().getViewportSize(s)[1];let h=(a.x-o.x)/f,S=(o.y-a.y)/f;const x=i.getParallelScale();h*=x*2,S*=x*2;let C=g[0]*h+c[0]*S;u[0]+=C,p[0]+=C,C=g[1]*h+c[1]*S,u[1]+=C,p[1]+=C,C=g[2]*h+c[2]*S,u[2]+=C,p[2]+=C,i.setPosition(u[0],u[1],u[2]),i.setFocalPoint(p[0],p[1],p[2])}else{const{center:c}=e,l=r.getInteractorStyle(),g=l.computeWorldToDisplay(s,c[0],c[1],c[2])[2],f=l.computeDisplayToWorld(s,a.x,a.y,g),h=l.computeDisplayToWorld(s,o.x,o.y,g),S=[u[0]+(h[0]-f[0]),u[1]+(h[1]-f[1]),u[2]+(h[2]-f[2])],x=[p[0]+(h[0]-f[0]),p[1]+(h[1]-f[1]),p[2]+(h[2]-f[2])];i.setPosition(S[0],S[1],S[2]),i.setFocalPoint(x[0],x[1],x[2])}s.resetCameraClippingRange(),r.getLightFollowCamera()&&s.updateLightsGeometryToFollowCamera()}}var $r={};function pt(t,e,r={}){Object.assign(e,$r,r),v.obj(t,e),Ee.extend(t,e,r),Re.extend(t,e,r),Nr(t,e)}var Hr=v.newInstance(pt,"vtkMouseCameraTrackballPanManipulator"),Kr={newInstance:Hr,extend:pt};const Pe=12;function Xr(t,e){const r=dr.newInstance({background:[0,0,0]});r.setContainer(t),r.resize();const s=r.getRenderer(),n=r.getRenderWindow();let a=e.ghost,o=Math.max(0,Math.min(e.startK,e.slices-1));const[i,u]=e.range,p=kt.newInstance();p.setInputData(e.imageData),p.setSampleDistance?.(1.2);const c=Wt.newInstance();c.setMapper(p);const l=zt.newInstance();l.addRGBPoint(i,.6,.6,.6),l.addRGBPoint(u,1,1,1);const g=Nt.newInstance(),f=c.getProperty();f.setRGBTransferFunction(0,l),f.setScalarOpacity(0,g),f.setScalarOpacityUnitDistance(0,3),f.setInterpolationTypeToLinear();const h=()=>{g.removeAllPoints(),a===null||a<=0?(g.addPoint(i,0),g.addPoint(u,0)):(g.addPoint(i,0),g.addPoint(i+(u-i)*.4,a*.25),g.addPoint(u,a))};h(),s.addVolume(c);const S=$t.newInstance();S.setInputData(e.imageData),S.setKSlice(o);const x=Ht.newInstance();x.setMapper(S);const C=x.getProperty(),_=e.voi?e.voi.upper-e.voi.lower:u-i,R=e.voi?(e.voi.upper+e.voi.lower)/2:(u+i)/2;C.setColorWindow(_),C.setColorLevel(R),s.addActor(x),(()=>{s.resetCamera();const w=s.getActiveCamera();w.getFocalPoint();const D=w.getDistance();w.azimuth(30),w.elevation(12),w.setDistance(D*1.05),w.zoom(1.4),s.resetCameraClippingRange()})();const T=_r.newInstance(),U=Gr.newInstance({button:1}),V=zr.newInstance({button:3}),d=Kr.newInstance({button:2});T.addMouseManipulator(U),T.addMouseManipulator(V),T.addMouseManipulator(d),r.getInteractor().setInteractorStyle(T),n.render();const m=w=>{const D=Math.max(0,Math.min(w,e.slices-1));D!==o&&(o=D,S.setKSlice(D),n.render())},O=w=>{w.preventDefault();const D=o+(w.deltaY>0?1:-1);m(D),e.onSweep(o)};t.addEventListener("wheel",O,{passive:!1});let G=null;const j=w=>((w.touches[0]?.clientY??0)+(w.touches[1]?.clientY??0))/2,L=w=>{if(w.touches.length!==2){G=null;return}G=j(w),w.preventDefault(),w.stopPropagation()},K=w=>{if(G===null||w.touches.length!==2)return;w.preventDefault(),w.stopPropagation();const D=j(w)-G,y=Math.trunc(D/Pe);y!==0&&(G+=y*Pe,m(o+y),e.onSweep(o))},k=w=>{w.touches.length<2&&(G=null)};return t.addEventListener("touchstart",L,{capture:!0,passive:!1}),t.addEventListener("touchmove",K,{capture:!0,passive:!1}),t.addEventListener("touchend",k,{capture:!0}),t.addEventListener("touchcancel",k,{capture:!0}),{sweep:m,ghost_set:w=>{a=w===null?null:Math.max(0,Math.min(1,w)),h(),n.render()},wl_set:(w,D)=>{C.setColorWindow(D-w),C.setColorLevel((D+w)/2),n.render()},resize:()=>{r.resize(),n.render()},slice_get:()=>o,dispose:()=>{t.removeEventListener("wheel",O),t.removeEventListener("touchstart",L,{capture:!0}),t.removeEventListener("touchmove",K,{capture:!0}),t.removeEventListener("touchend",k,{capture:!0}),t.removeEventListener("touchcancel",k,{capture:!0});try{s.removeVolume(c),s.removeActor(x)}catch{}try{r.delete()}catch{}}}}export{Xr as slabScene_open};
package/dist/index.html CHANGED
@@ -12,7 +12,7 @@
12
12
  href="https://fonts.googleapis.com/css2?family=Share+Tech+Mono&display=swap"
13
13
  rel="stylesheet"
14
14
  />
15
- <script type="module" crossorigin src="./assets/index-CUyQvuO9.js"></script>
15
+ <script type="module" crossorigin src="./assets/index-DTKSlz7P.js"></script>
16
16
  <link rel="stylesheet" crossorigin href="./assets/index-BUMxVPW8.css">
17
17
  </head>
18
18
  <body>
@@ -241,6 +241,7 @@
241
241
  <button class="mode-strip" title="display modes" aria-label="display modes"></button>
242
242
  <span class="mode-elbow"></span>
243
243
  <aside class="mode-frame">
244
+ <button class="strategy-pill dag-back" title="return to the feed roster (Esc)">BACK</button>
244
245
  <button class="strategy-pill dag-strategy" title="layout: ranked tiers or force molecule">RANKED</button>
245
246
  <button class="strategy-pill dag-projection" title="projection: sculpted 3D or flat schematic">3D</button>
246
247
  <button class="strategy-pill dag-pulse" title="replay execution as a dependency wave">PULSE OFF</button>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnndsc/argus",
3
- "version": "0.18.6",
3
+ "version": "0.18.8",
4
4
  "description": "ARGUS: the LCARS web surface for mise — a browser console over a calypso session",
5
5
  "type": "module",
6
6
  "scripts": {